Exemple #1
0
        private DynamicFormNavigation GetFormNavigation(string formUrlSlug, string currentSectionUrlSlug, List <SectionDto> sections, List <string> sectionNames, Dictionary <string, SectionDto> sectionRoutesDict, Dictionary <string, string> sectionNamesDict, Dictionary <string, DynamicFormNavigationMenuItem> menuItemsDict, string controllerName, string sectionUrlSlugPrefix = "")
        {
            var navigation = new DynamicFormNavigation();

            var dict = new Dictionary <string, int>();

            for (int i = 0; i < sections.Count(); i++)
            {
                var section     = sections[i];
                var sectionName = !string.IsNullOrWhiteSpace(sectionNames[i]) ? sectionNames[i] : section.Name;

                if (!dict.ContainsKey(section.UrlSlug))
                {
                    dict.Add(section.UrlSlug, 0);
                }
                dict[section.UrlSlug]++;

                sectionName = sectionName.Replace("{i}", dict[section.UrlSlug].ToString());

                var menuItem = new DynamicFormNavigationMenuItem()
                {
                    LinkText = sectionName, ActionName = "Edit", ControllerName = controllerName, IsValid = true
                };
                menuItem.RouteValues.Add(DynamicFormsValueProviderKeys.FormUrlSlug, formUrlSlug);

                var sectionUrlSlug = sectionUrlSlugPrefix + section.UrlSlug + "/" + dict[section.UrlSlug].ToString();
                menuItem.RouteValues.Add(DynamicFormsValueProviderKeys.SectionUrlSlug, sectionUrlSlug);

                sectionRoutesDict.Add(sectionUrlSlug, section);
                sectionNamesDict.Add(sectionUrlSlug, sectionName);
                menuItemsDict.Add(sectionUrlSlug, menuItem);

                if (currentSectionUrlSlug == sectionUrlSlug)
                {
                    menuItem.IsActive = true;
                }

                var childNavigation = GetFormNavigation(formUrlSlug, currentSectionUrlSlug, section.Sections.Select(s => s.ChildSection).ToList(), section.Sections.Select(s => s.Name).ToList(), sectionRoutesDict, sectionNamesDict, menuItemsDict, controllerName, sectionUrlSlug + "/");
                if (childNavigation.MenuItems.Count != 0)
                {
                    menuItem.ChildNavigation = childNavigation;
                }

                navigation.MenuItems.Add(menuItem);
            }

            return(navigation);
        }
Exemple #2
0
        public async Task <DynamicFormNavigation> GetFormNavigationAsync(string formUrlSlug, string sectionUrlSlug, string formSubmissionId, string controllerName, CancellationToken cancellationToken = default(CancellationToken))
        {
            var form = await GetFormByUrlSlugAsync(formUrlSlug, cancellationToken);

            var sectionNames  = new Dictionary <string, string>();
            var sectionRoutes = new Dictionary <string, SectionDto>();
            var menuItems     = new Dictionary <string, DynamicFormNavigationMenuItem>();
            var navigation    = GetFormNavigation(formUrlSlug, sectionUrlSlug, form.Sections.Select(s => s.Section).ToList(), form.Sections.Select(s => s.Name).ToList(), sectionRoutes, sectionNames, menuItems, controllerName);

            var summary = new DynamicFormNavigationMenuItem()
            {
                LinkText = "Summary", ActionName = "Summary", ControllerName = controllerName, IsValid = false
            };

            if (sectionUrlSlug == "summary")
            {
                summary.IsActive = true;
            }

            menuItems.Add("summary", summary);

            var  menuItemsList = menuItems.Values.ToList();
            bool menuActive    = false;

            for (int i = menuItems.Count - 1; i >= 0; i--)
            {
                if (menuActive)
                {
                    menuItemsList[i].IsPrevious = true;
                }

                if (menuItemsList[i].IsActive)
                {
                    menuActive = true;
                }
            }

            navigation.MenuItems.Add(summary);

            return(navigation);
        }