Exemplo n.º 1
0
        public dynamic GetDatumShaped(object datum, DatumType datumType,
                                      ProtoCmsRuntimeContext cmsContext, ContentListShape shape)
        {
            var finder  = datumType.FinderBase();
            var datumId = finder.GetDatumIdBase(datum);

            switch (shape)
            {
            case ContentListShape.TableRowVue:
                var cdt = finder.AsTableRowVueBase(datum);
                cdt.Add(DatumListApiResult.DATUM_TABLE_ACTION_KEY, new[] {
                    new VueComponentDefinition {
                        Name  = "cms-widget-dropdown-button",
                        Props = new {
                            label        = "Opt",
                            size         = "xs",
                            type         = "warning",
                            iconCssClass = "fa fa-angle-down",
                            items        = finder.TableActionsForSingleContent(datumId, cmsContext)
                        }
                    }
                });
                return(cdt);

            case ContentListShape.Summary:
                return(new {
                    DatumId = datumId,
                    DatumTypeId = datumType?.Id,
                    Summary = finder.AsSummarizedValueBase(datum)
                });

            case ContentListShape.FullPreview:
                return(finder.AsFullPreviewBase(datum));

            default:
                return(datum);
            }
        }
        public DatumListApiResult(ProtoCmsRuntimeContext cmsContext, DatumType contentType, string search,
                                  string sortColumn, bool?isDescending, int offset, int limit, ContentListShape?shape,
                                  IDatumFinder finder = null)
        {
            finder = finder ?? contentType.FinderBase();
            var contentShape = shape ?? ContentListShape.Normal;

            if (!string.IsNullOrWhiteSpace(search))
            {
                finder = finder.SearchBase(search.Trim());
            }
            if (!string.IsNullOrWhiteSpace(sortColumn))
            {
                SortColumn = sortColumn;
                if (isDescending.HasValue)
                {
                    SortIsDescending = isDescending.Value;
                    finder           = finder.SortBase(sortColumn, isDescending.Value);
                }
                else
                {
                    SortIsDescending = contentType.DefaultSortDescending;
                    finder           = finder.SortBase(sortColumn, contentType.DefaultSortDescending);
                }
            }
            else
            {
                SortColumn = contentType.DefaultSortFieldName;
                if (isDescending.HasValue)
                {
                    SortIsDescending = isDescending.Value;
                    finder           = finder.SortBase(contentType.DefaultSortFieldName, isDescending.Value);
                }
                else
                {
                    SortIsDescending = contentType.DefaultSortDescending;
                    finder           = finder.SortBase(contentType.DefaultSortFieldName, contentType.DefaultSortDescending);
                }
            }

            if (offset < 0)
            {
                offset = 0;
            }
            if (limit < 1)
            {
                limit = 100;
            }
            var currentPage = offset / limit + 1;

            var paginated = finder.PaginatedBase(currentPage, limit);
            var rawData   = paginated.CurrentPageQueryableBase.DirectCastTo <IQueryable <object> >().ToArray();

            CurrentPage    = paginated.CurrentPage;
            TotalPage      = paginated.TotalPage;
            StartNumbering = paginated.StartNumbering;
            GlobalCount    = paginated.Count;
            CurrentCount   = rawData.Length;
            Offset         = paginated.Offset;
            Limit          = paginated.Limit;
            SearchKeywords = search;
            ResultShape    = $"{contentShape.ToString()} ({(int) contentShape})";
            var data   = new List <dynamic>();
            var getter = new DatumShapedApiModelBuilder();

            foreach (var rd in rawData)
            {
                data.Add(getter.GetDatumShaped(rd, contentType, cmsContext, contentShape));
            }
            Data = data.ToArray();
        }