/// <summary> /// Get the items for the desired list /// </summary> /// <param name="provider">Data Provider used to retrieve the items</param> /// <param name="showCode">Whether to show codes on the items</param> /// <returns>A new collection of ListItemVM objects making up the desired list</returns> public IEnumerable <ViewModels.ListItemVM> GetItemVMs(DataProviders.IAppDataProvider provider, bool showCode, ViewModels.SearchVM parentVM) { if (String.IsNullOrWhiteSpace(SearchFor)) { yield break; } var allResults = provider.GetSearch(SearchFor, Skip, TakeAtATime + 1); bool hasMore = (allResults.Count > TakeAtATime); Skip += (hasMore) ? TakeAtATime : allResults.Count; var index = 0; var results = from result in allResults.Take(TakeAtATime) group result by result.RetrievedFrom; foreach (var type in SearchTypes) { var currMatches = (from result in results where result.Key == type.Key from ret in result select ret).ToArray(); if (currMatches.Length > 0) { if (!String.Equals(lastRetrievedFrom, type.Key)) { yield return(new ListItemVM(0, IcdCodeItemMethods.NewDividerItem(type.Value), Enumerable.Empty <string>(), showCode) { ParentVM = parentVM }); lastRetrievedFrom = type.Key; } foreach (var match in currMatches) { ++index; yield return(new ListItemVM(index, match.ToIcdCodeItem(provider), Enumerable.Empty <string>(), showCode) { ParentVM = parentVM }); } } } if (hasMore) { yield return(new ListItemVM(0, IcdCodeItemMethods.NewMoreItem(), Enumerable.Empty <string>(), showCode) { ParentVM = parentVM }); } }
/// <summary> /// Convert Child items into new ViewModel Items /// </summary> /// <param name="inItems">Children items to convert</param> /// <param name="parentVM">ListVM object that is the highest parent</param> /// <param name="itemParentVM">The parent Item's ViewModel</param> /// <returns>New range of ListItemVM objects for the children</returns> public static IEnumerable <ListItemVM> GetChildItems(IEnumerable <IcdCodeItem> inItems, SearchVM parentVM, ListItemVM itemParentVM) { var useParentTitle = new List <string>(); if (itemParentVM != null) { useParentTitle.AddRange(itemParentVM.ParentTitle); useParentTitle.Add(itemParentVM.Title.Title); } var resultGroups = from child in inItems group child by child.Code.ChildType; var directChildren = (from result in resultGroups where result.Key == IcdCodeStrings.ChildType_Direct from ret in result select ret).ToList(); if (directChildren.Count > 0) { yield return(new ListItemVM(0, IcdCodeItemMethods.NewDividerItem(SpecificityString), Enumerable.Empty <string>()) { ParentVM = parentVM, ParentItemVM = itemParentVM }); foreach (var child in directChildren) { yield return(new ListItemVM(0, child, useParentTitle) { ParentVM = parentVM, ParentItemVM = itemParentVM }); } yield break; } foreach (var type in ChildTypes) { var currChildren = (from result in resultGroups where result.Key == type.Key from ret in result select ret).ToList(); if (currChildren.Count > 0) { yield return(new ListItemVM(0, IcdCodeItemMethods.NewDividerItem(type.Value), Enumerable.Empty <string>()) { ParentVM = parentVM, ParentItemVM = itemParentVM }); foreach (var child in currChildren) { yield return(new ListItemVM(0, child, Enumerable.Empty <string>()) { ParentVM = parentVM, ParentItemVM = itemParentVM }); } } } }