Exemple #1
0
        public override async Task <IShape> BuildDisplayAsync(BuildListDisplayContext viewmodel)
        {
            /*
             * var treeModel = await _contentTreeService.BuildTree(viewmodel.PageOfContentItems);
             *
             *
             *
             * var showRootNode = false;
             *
             * var rootTreeModel = await GetRootTreeItem(viewmodel.ContentItem.ContentItemId, showRootNode);
             *
             *
             * //populate elements to root
             * foreach (var contentTreeItem in treeModel)
             * {
             *  rootTreeModel.Children.Add(contentTreeItem);
             * }
             *
             * dynamic treeShape = await _contentTreeService.DisplayAsync(rootTreeModel);
             *
             *
             */

            //inject _contentItemDisplayManager at method level to avoid circular dependency
            //var contentItemDisplayManager  = _serviceProvider.GetRequiredService<IContentItemDisplayManager>();
            var shapeFactory = viewmodel.PartDisplayContext.ShapeFactory;
            var listShape    = await shapeFactory.CreateAsync <BuildListDisplayContext>("ListView__Explorer", vm =>
            {
                vm.ContentItem = viewmodel.ContentItem;
//                vm.EnablePositioning = viewmodel.EnablePositioning;
//                vm.PageOfContentItems=viewmodel.PageOfContentItems;
//                vm.Pager = viewmodel.Pager;
                //vm.Updater = viewmodel.PartDisplayContext.Updater;
                //vm.GroupId = viewmodel.PartDisplayContext.GroupId;
                //vm.IsInAdminView = viewmodel.IsInAdminView;

//                List<dynamic> listitemShapes = new List<dynamic>(); //build shapes
//                foreach (var contentItem in vm.PageOfContentItems)
//                {
//                    var contentItemSummaryShape = await contentItemDisplayManager.BuildDisplayAsync(contentItem,  viewmodel.PartDisplayContext.Updater, "Summary", viewmodel.PartDisplayContext.GroupId);
//                    listitemShapes.Add(contentItemSummaryShape);
//                }
//                //pass in shapes to vm
//                vm.PageOfContentItemShapes = listitemShapes;
            });

            //  var itemShape=  await viewmodel.PartDisplayContext.New.ListView__TreeView(
            //  TreeShape: treeShape,
            //   ContentItemId: viewmodel.ContentItem.ContentItemId
            //  EnablePositioning: viewmodel.EnablePositioning,
            //   PageOfContentItems: viewmodel.PageOfContentItems,
            //   Pager: viewmodel.Pager,
            //   Updater: viewmodel.PartDisplayContext.Updater,
            //    GroupId: viewmodel.PartDisplayContext.GroupId

            // );
            //add alternates for .detail and .adminDetail
            listShape.Metadata.Alternates.Add($"ListView_{viewmodel.PartDisplayContext.DisplayType}__Explorer");
            return(listShape);
        }
Exemple #2
0
        public override async Task <IShape> BuildDisplayAsync(BuildListDisplayContext viewmodel)
        {
            //inject _contentItemDisplayManager at method level to avoid circular dependency
            var contentItemDisplayManager = _serviceProvider.GetRequiredService <IContentItemDisplayManager>();
            var shapeFactory = viewmodel.PartDisplayContext.ShapeFactory;
            var listShape    = await shapeFactory.CreateAsync <BuildListDisplayContext>("ListView__Default", async vm =>
            {
                vm.ContentItem        = viewmodel.ContentItem;
                vm.EnableOrdering     = viewmodel.EnableOrdering;
                vm.EnableDetaching    = viewmodel.EnableDetaching;
                vm.EnableMoving       = viewmodel.EnableMoving;
                vm.EnableAttaching    = viewmodel.EnableAttaching;
                vm.PageOfContentItems = viewmodel.PageOfContentItems;
                vm.Pager = viewmodel.Pager;
                //vm.Updater = viewmodel.PartDisplayContext.Updater;
                //vm.GroupId = viewmodel.PartDisplayContext.GroupId;
                vm.IsInAdminView     = viewmodel.IsInAdminView;
                vm.UseInfiniteScroll = viewmodel.UseInfiniteScroll;
                vm.InfiniteAjaxScrollPartSettings = viewmodel.InfiniteAjaxScrollPartSettings;


                List <dynamic> listitemShapes = new List <dynamic>(); //build shapes
                foreach (var contentItem in vm.PageOfContentItems)
                {
                    var contentItemSummaryShape = await contentItemDisplayManager.BuildDisplayAsync(contentItem, viewmodel.PartDisplayContext.Updater, viewmodel.IsInAdminView? "SummaryAdmin":"Summary", viewmodel.PartDisplayContext.GroupId);
                    listitemShapes.Add(contentItemSummaryShape);
                }
                //pass in shapes to vm
                vm.PageOfContentItemShapes = listitemShapes;
            });

//            var listShape=    await viewmodel.PartDisplayContext.New.ListView__Default(
//                ContentItemId: viewmodel.ContentItem.ContentItemId,
//                EnablePositioning: viewmodel.EnablePositioning,
//                PageOfContentItems: viewmodel.PageOfContentItems,
//                Pager: viewmodel.Pager,
//                Updater: viewmodel.PartDisplayContext.Updater,
//                GroupId: viewmodel.PartDisplayContext.GroupId,
//                IsInAdminView:viewmodel.IsInAdminView
//
//            );


            //add alternates for .detail and .adminDetail
            listShape.Metadata.Alternates.Add($"ListView_{viewmodel.PartDisplayContext.DisplayType}__Default");
            return(listShape);
        }
Exemple #3
0
        public override IDisplayResult Display(ListPart listPart, BuildPartDisplayContext context)
        {
            var settings = context.TypePartDefinition.GetSettings <ListPartSettings>();
            var renderItemsInFrontEnd = settings.RenderItemsInFrontEnd;
            var renderItemsInBackEnd  = settings.RenderItemsInBackEnd;

            return
                (Combine(
                     Initialize <ListPartViewModel>(
                         renderItemsInFrontEnd ? GetDisplayShapeType(context) : "ListPart_Empty", async model =>
            {
                //this is called from front end

                if (settings.RenderItemsInFrontEnd)
                {
                    var pager = await GetPagerSlimAsync(context);
                    //this is for backend only
                    model.ListViewProviders = _listViewService.Providers.ToList();
                    // model.ListViewProvider = GetListViewProvider(settings.FrontEndListViewName);
                    model.ListViewProviderFrontEnd = GetListViewProvider(settings.FrontEndListViewName);
                    model.ListMode = GetListViewListMode();

                    // model.AllowUserToSwitchListViews = settings.AllowUserToSwitchListViews;
                    model.AllowUserToSwitchListViewsFrontEnd =
                        settings.AllowUserToSwitchListViewsFrontEnd;
                    model.UseTemplatesOnCreatingNewListItem =
                        settings.UseTemplatesOnCreatingNewListItem;
                    model.ShowSearchAndFilterOptions = settings.ShowSearchAndFilterOptions;
                    model.FrontEndListViews = settings.FrontEndListViews;
                    model.AllowUserToAddChildItemsFrontEnd = settings.AllowUserToAddChildItems;
                    model.ShowLatestVersion = settings.ShowLatestVersion;

                    if (settings.AllowUserToSwitchListViewsFrontEnd)
                    {
                        if (!String.IsNullOrEmpty(settings.FrontEndListViews))
                        {
                            IEnumerable <string> rawTypes = settings.FrontEndListViews
                                                            .Split(new[] { ',', ' ' }, StringSplitOptions.RemoveEmptyEntries)
                                                            .ToList();
                            model.FrontEndListViewProviders = rawTypes.Select(listviewType =>
                                                                              _listViewService.GetProvider(listviewType));
                        }
                        else
                        {
                            //if FrontEndListViews is empty than show all available providers in front end
                            model.FrontEndListViewProviders = _listViewService.Providers.ToList();
                        }
                    }
                    //========

                    model.ListPart = listPart;

                    //  var pager = await GetPagerSlimAsync(context);


                    model.PageOfContentItems =
                        (await _containerService.QueryContainedItemsAsync(
                             listPart.ContentItem.ContentItemId, settings.EnableOrdering, pager, false))
                        .ToArray();
                    // model.PageOfContentItems = (await QueryListItemsAsync(listPart, pager,  !model.ShowLatestVersion, pager.GetType().Name == "Pager")).ToArray();


                    if (settings.AllowOverrideDataFillModePerInstance)
                    {
                        //get settings from instance not part definition settings
                        model.DataFillMode = listPart.DataFillMode;

                        if (model.DataFillMode == DataFillMode.ContentTypes)
                        {
                            model.ContainedContentTypeDefinitions =
                                GetContainedContentTypes(listPart.ContainedContentTypes);
                        }
                        else if (model.DataFillMode == DataFillMode.WorkMaps)
                        {
                            model.SelectedWorkMapContentItemIds =
                                listPart.SelectedWorkMapContentItemIds;
                            if (model.SelectedWorkMapContentItemIds?.Length > 0)
                            {
                                //get selected content items
                                model.SelectedWorkMapContentItems =
                                    await _contentManager.GetAsync(model.SelectedWorkMapContentItemIds,
                                                                   true);
                            }
                        }
                    }
                    else                 //get from settings
                    {
                        model.DataFillMode = settings.DataFillMode;
                        if (model.DataFillMode == DataFillMode.ContentTypes)
                        {
                            model.ContainedContentTypeDefinitions =
                                GetContainedContentTypes(settings.ContainedContentTypes);
                        }
                        else if (model.DataFillMode == DataFillMode.WorkMaps)
                        {
                            model.SelectedWorkMapContentItemIds =
                                settings.SelectedWorkMapContentItemIds;
                            if (model.SelectedWorkMapContentItemIds?.Length > 0)
                            {
                                //get selected content items
                                model.SelectedWorkMapContentItems =
                                    await _contentManager.GetAsync(model.SelectedWorkMapContentItemIds,
                                                                   true);
                            }
                        }
                    }

                    //PopulateListPartSearchOptions(model);


                    model.Context = context;

                    model.Pager = (await context.New.PagerSlim(pager)).UrlParams(pager.UrlParams);


                    var displayContext = new BuildListDisplayContext()
                    {
                        ContentItem = listPart.ContentItem,
                        PageOfContentItems = model.PageOfContentItems,
                        EnableOrdering = settings.EnableOrdering,
                        EnableDetaching = settings.EnableDetaching,
                        EnableMoving = settings.EnableMoving,
                        EnableAttaching = settings.EnableAttaching,
                        Pager = model.Pager,
                        PartDisplayContext = context,
                        AdminListViewName = settings.AdminListViewName,
                        FrontEndListViewName = settings.FrontEndListViewName,
                        FrontEndListViews = settings.FrontEndListViews,
                        IsInAdminView = false                 //isInAdmView
                        ,
                        UseInfiniteScroll = settings.UseInfiniteScroll,
                        InfiniteAjaxScrollPartSettings = settings.InfiniteAjaxScrollPartSettings
                    };

                    var currentListViewProvider = GetListViewProvider(settings.FrontEndListViewName);
                    model.ListMode = GetListViewListMode();
                    model.ListViewShape =
                        await currentListViewProvider.BuildDisplayAsync(displayContext);
                }
            })
                     .Location("Detail", "Content:10"),
                     Initialize <ListPartViewModel>(renderItemsInBackEnd ? "ListPart" : "ListPart_Empty", async model =>
            {
                //this is called from back end


                //var settings = context.TypePartDefinition.GetSettings<ListPartSettings>();

                if (settings.RenderItemsInBackEnd)
                {
                    var pager = await GetPagerSlimAsync(context);
                    model.ListViewProviders = _listViewService.Providers.ToList();
                    model.ListViewProvider = GetListViewProvider(settings.AdminListViewName);
                    model.ListViewProviderFrontEnd = GetListViewProvider(settings.FrontEndListViewName);
                    model.ListMode = GetListViewListMode();
                    model.AllowUserToSwitchListViews = settings.AllowUserToSwitchListViews;
                    model.AllowUserToSwitchListViewsFrontEnd = settings.AllowUserToSwitchListViewsFrontEnd;
                    model.UseTemplatesOnCreatingNewListItem = settings.UseTemplatesOnCreatingNewListItem;
                    model.ShowSearchAndFilterOptions = settings.ShowSearchAndFilterOptions;
                    model.FrontEndListViews = settings.FrontEndListViews;
                    model.AllowUserToAddChildItemsFrontEnd = settings.AllowUserToAddChildItems;
                    model.ShowLatestVersion = settings.ShowLatestVersion;
                    //========
                    model.ListPart = listPart;
                    model.PageOfContentItems =
                        (await _containerService.QueryContainedItemsAsync(
                             listPart.ContentItem.ContentItemId, settings.EnableOrdering, (PagerSlim)pager,
                             false)).ToArray();


                    if (settings.AllowOverrideDataFillModePerInstance == true)
                    {
                        model.DataFillMode = listPart.DataFillMode;

                        if (model.DataFillMode == DataFillMode.ContentTypes)
                        {
                            model.ContainedContentTypeDefinitions =
                                GetContainedContentTypes(listPart.ContainedContentTypes);
                        }
                        else if (model.DataFillMode == DataFillMode.WorkMaps)
                        {
                            model.SelectedWorkMapContentItemIds = listPart.SelectedWorkMapContentItemIds;
                            if (model.SelectedWorkMapContentItemIds?.Length > 0)
                            {
                                //get selected content items
                                model.SelectedWorkMapContentItems =
                                    await _contentManager.GetAsync(model.SelectedWorkMapContentItemIds,
                                                                   true);
                            }
                        }
                    }
                    else             //get from settings
                    {
                        model.DataFillMode = settings.DataFillMode;
                        if (model.DataFillMode == DataFillMode.ContentTypes)
                        {
                            model.ContainedContentTypeDefinitions =
                                GetContainedContentTypes(settings.ContainedContentTypes);
                        }
                        else if (model.DataFillMode == DataFillMode.WorkMaps)
                        {
                            model.SelectedWorkMapContentItemIds = settings.SelectedWorkMapContentItemIds;
                            if (model.SelectedWorkMapContentItemIds?.Length > 0)
                            {
                                //get selected content items
                                model.SelectedWorkMapContentItems =
                                    await _contentManager.GetAsync(model.SelectedWorkMapContentItemIds,
                                                                   true);
                            }
                        }
                    }


                    model.Context = context;


                    model.EnableOrdering = settings.EnableOrdering;
                    model.EnableDetaching = settings.EnableDetaching;
                    model.EnableMoving = settings.EnableMoving;
                    model.EnableAttaching = settings.EnableAttaching;
                    //  model.Pager = await context.New.PagerSlim(pager);
                    model.Pager =
                        await context.New
                        .PagerSlim(
                            pager);                 //await GetViewModelPagerShapeAsync(context, pager, listPart, false);
                    var displayContext = new BuildListDisplayContext()
                    {
                        ContentItem = listPart.ContentItem,
                        PageOfContentItems = model.PageOfContentItems,
                        EnableOrdering = settings.EnableOrdering,
                        EnableDetaching = settings.EnableDetaching,
                        EnableMoving = settings.EnableMoving,
                        EnableAttaching = settings.EnableAttaching,
                        Pager = model.Pager,
                        PartDisplayContext = context,
                        AdminListViewName = settings.AdminListViewName,
                        FrontEndListViewName = settings.FrontEndListViewName,
                        FrontEndListViews = settings.FrontEndListViews,
                        IsInAdminView = true             //isInAdmView
                        ,
                        UseInfiniteScroll = settings.UseInfiniteScroll,
                        InfiniteAjaxScrollPartSettings = settings.InfiniteAjaxScrollPartSettings
                    };
                    var currenListViewProvider = GetListViewProvider(settings.AdminListViewName);
                    model.ListMode = GetListViewListMode();
                    model.ListViewShape = await currenListViewProvider.BuildDisplayAsync(displayContext);
                }
            })
                     .Location("DetailAdmin", "Content:10")
                     ));
        }
Exemple #4
0
        public override IDisplayResult Display(CrossReferencePart part, BuildPartDisplayContext context)
        {
            return
                (Combine(
                     Initialize <CrossReferencePartViewModel>("CrossReferencePart", async model =>
            {
                //this is called from front end
                // var pager = await GetPagerAsync(context.Updater, listPart);
                var pager = await GetPagerObjectAsync(context.Updater, part, context.TypePartDefinition.Name);
                //giannis
                var settings = GetSettings(part, context.TypePartDefinition.Name);
                //this is for backend only
                model.ListViewProviders = _listViewService.Providers.ToList();
                // model.ListViewProvider = GetListViewProvider(settings.FrontEndListViewName);
                model.ListViewProviderFrontEnd = GetListViewProvider(settings.FrontEndListViewName);
                // model.AllowUserToSwitchListViews = settings.AllowUserToSwitchListViews;
                model.AllowUserToSwitchListViewsFrontEnd = settings.AllowUserToSwitchListViewsFrontEnd;
                model.FrontEndListViews = settings.FrontEndListViews;
                model.Relation = settings.Relation;
                model.AllowUserToAddChildItemsFrontEnd = settings.AllowUserToAddChildItems;
                model.ShowLatestVersion = settings.ShowLatestVersion;

                if (settings.AllowUserToSwitchListViewsFrontEnd)
                {
                    if (!String.IsNullOrEmpty(settings.FrontEndListViews))
                    {
                        IEnumerable <string> rawTypes = settings.FrontEndListViews.Split(new[] { ',', ' ' }, StringSplitOptions.RemoveEmptyEntries).ToList();
                        model.FrontEndListViewProviders = rawTypes.Select(listviewType => _listViewService.GetProvider(listviewType));
                    }
                    else
                    {
                        //if FrontEndListViews is empty than show all available providers in front end
                        model.FrontEndListViewProviders = _listViewService.Providers.ToList();
                    }
                }
                //========

                model.Part = part;
                //  model.ContentItems = (await QueryListItemsAsync(listPart, pager, true)).ToArray();
                //  model.PageOfContentItems = (await QueryListItemsAsync(listPart, pager, !model.ShowLatestVersion)).ToArray();
                model.PageOfContentItems = (await QueryListItemsAsync(part, pager, !model.ShowLatestVersion, settings.Relation)).ToArray();
                model.ContainedContentTypeDefinitions = GetContainedContentTypes(part, context.TypePartDefinition.Name);
                model.Context = context;
                // model.Pager = await context.New.PagerSlim(pager);
                model.Pager = await GetViewModelPagerAsync(context, pager, part, false, settings.Relation);
                //   bool isInAdmView = AdminAttribute.IsApplied(_httpContextAccessor.HttpContext);
                var displayContext = new BuildListDisplayContext()
                {
                    ContentItem = part.ContentItem,
                    PageOfContentItems = model.PageOfContentItems,
                    //EnablePositioning = settings.EnablePositioning,

                    Pager = model.Pager,
                    PartDisplayContext = context,
                    AdminListViewName = settings.AdminListViewName,
                    FrontEndListViewName = settings.FrontEndListViewName,
                    FrontEndListViews = settings.FrontEndListViews,
                    IsInAdminView = false       //isInAdmView
                };

                var currentListViewProvider = GetListViewProvider(settings.FrontEndListViewName);
                //todo why is it that when placing await in fron of currenListViewProvider i get a null reference in view
                model.ListViewShape = await currentListViewProvider.BuildDisplayAsync(displayContext);
            })
                     .Location("Detail", "Content:10"),

                     Initialize <CrossReferencePartViewModel>("CrossReferencePart", async model =>
            {
                //this is called from back end
                //var pager = await GetPagerAsync(context.Updater, listPart);
                var pager = await GetPagerObjectAsync(context.Updater, part, context.TypePartDefinition.Name);
                //giannis
                var settings = GetSettings(part, context.TypePartDefinition.Name);

                model.ListViewProviders = _listViewService.Providers.ToList();
                model.ListViewProvider = GetListViewProvider(settings.AdminListViewName);
                model.ListViewProviderFrontEnd = GetListViewProvider(settings.FrontEndListViewName);
                model.AllowUserToSwitchListViews = settings.AllowUserToSwitchListViews;
                model.AllowUserToSwitchListViewsFrontEnd = settings.AllowUserToSwitchListViewsFrontEnd;
                model.FrontEndListViews = settings.FrontEndListViews;
                model.Relation = settings.Relation;
                model.AllowUserToAddChildItemsFrontEnd = settings.AllowUserToAddChildItems;
                model.ShowLatestVersion = settings.ShowLatestVersion;
                //========
                model.Part = part;
                // model.ContentItems = (await QueryListItemsAsync(listPart, pager, false)).ToArray();
                //  model.PageOfContentItems = (await QueryListItemsAsync(listPart, pager, !model.ShowLatestVersion)).ToArray();
                model.PageOfContentItems = (await QueryListItemsAsync(part, pager, !model.ShowLatestVersion, settings.Relation)).ToArray();
                model.ContainedContentTypeDefinitions = GetContainedContentTypes(part, context.TypePartDefinition.Name);
                model.Context = context;
                //  model.Pager = await context.New.PagerSlim(pager);
                model.Pager = await GetViewModelPagerAsync(context, pager, part, false, settings.Relation);
                var displayContext = new BuildListDisplayContext()
                {
                    ContentItem = part.ContentItem,
                    PageOfContentItems = model.PageOfContentItems,
                    // EnablePositioning = settings.EnablePositioning,

                    Pager = model.Pager,
                    PartDisplayContext = context,
                    AdminListViewName = settings.AdminListViewName,
                    FrontEndListViewName = settings.FrontEndListViewName,
                    FrontEndListViews = settings.FrontEndListViews,
                    IsInAdminView = true       //isInAdmView
                };
                var currenListViewProvider = GetListViewProvider(settings.AdminListViewName);
                //todo why is it that when placing await in fron of currenListViewProvider i get a null reference in view
                model.ListViewShape = await currenListViewProvider.BuildDisplayAsync(displayContext);
                //
            })
                     .Location("DetailAdmin", "Content:10")
                     ));
        }
 public abstract Task <IShape> BuildDisplayAsync(BuildListDisplayContext viewmodel);