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); }
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); }