@webiny/app-headless-cms 5.25.0 → 5.26.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/HeadlessCMS.js +2 -1
- package/HeadlessCMS.js.map +1 -1
- package/admin/contexts/Cms/index.d.ts +2 -2
- package/admin/contexts/Cms/index.js +0 -8
- package/admin/contexts/Cms/index.js.map +1 -1
- package/admin/hooks/useCms.d.ts +2 -2
- package/admin/hooks/useCms.js.map +1 -1
- package/admin/plugins/fieldRenderers/dateTime/utils.js +1 -1
- package/admin/plugins/fieldRenderers/dateTime/utils.js.map +1 -1
- package/admin/plugins/index.d.ts +1 -1
- package/admin/plugins/routes.js +2 -4
- package/admin/plugins/routes.js.map +1 -1
- package/admin/plugins/transformers/dateTransformer.js +2 -2
- package/admin/plugins/transformers/dateTransformer.js.map +1 -1
- package/admin/views/contentEntries/ContentEntriesContext.d.ts +1 -1
- package/admin/views/contentEntries/ContentEntriesContext.js +34 -22
- package/admin/views/contentEntries/ContentEntriesContext.js.map +1 -1
- package/admin/views/contentEntries/ContentEntriesList.js +40 -43
- package/admin/views/contentEntries/ContentEntriesList.js.map +1 -1
- package/admin/views/contentEntries/ContentEntry/cache.js +1 -1
- package/admin/views/contentEntries/ContentEntry/cache.js.map +1 -1
- package/admin/views/contentEntries/experiment/ContentEntriesModule.d.ts +1 -0
- package/admin/views/contentEntries/experiment/ContentEntriesModule.js +50 -0
- package/admin/views/contentEntries/experiment/ContentEntriesModule.js.map +1 -0
- package/admin/views/contentEntries/experiment/ContentEntriesRenderer.d.ts +2 -0
- package/admin/views/contentEntries/experiment/ContentEntriesRenderer.js +12 -0
- package/admin/views/contentEntries/experiment/ContentEntriesRenderer.js.map +1 -0
- package/admin/views/contentEntries/experiment/ContentEntriesViewConfig.d.ts +35 -0
- package/admin/views/contentEntries/experiment/ContentEntriesViewConfig.js +130 -0
- package/admin/views/contentEntries/experiment/ContentEntriesViewConfig.js.map +1 -0
- package/admin/views/contentEntries/experiment/Property.d.ts +34 -0
- package/admin/views/contentEntries/experiment/Property.js +232 -0
- package/admin/views/contentEntries/experiment/Property.js.map +1 -0
- package/admin/views/contentEntries/hooks/useContentEntriesList.js +2 -1
- package/admin/views/contentEntries/hooks/useContentEntriesList.js.map +1 -1
- package/admin/views/contentModels/NewContentModelDialog.js +8 -5
- package/admin/views/contentModels/NewContentModelDialog.js.map +1 -1
- package/index.d.ts +10 -0
- package/index.js +11 -1
- package/index.js.map +1 -1
- package/package.json +23 -22
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import _taggedTemplateLiteral from "@babel/runtime/helpers/taggedTemplateLiteral";
|
|
2
|
+
import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
|
|
2
3
|
import _objectSpread from "@babel/runtime/helpers/objectSpread2";
|
|
3
4
|
|
|
4
|
-
var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5
|
|
5
|
+
var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5;
|
|
5
6
|
|
|
7
|
+
var _excluded = ["sort", "status"];
|
|
6
8
|
import React, { useMemo } from "react";
|
|
7
9
|
import debounce from "lodash/debounce";
|
|
8
10
|
import { css } from "emotion";
|
|
@@ -20,14 +22,15 @@ import { Typography } from "@webiny/ui/Typography";
|
|
|
20
22
|
import * as UIList from "@webiny/ui/List";
|
|
21
23
|
import { ButtonIcon, ButtonSecondary } from "@webiny/ui/Button";
|
|
22
24
|
import { Cell, Grid } from "@webiny/ui/Grid";
|
|
23
|
-
import { Select } from "@webiny/ui/Select";
|
|
24
25
|
import { Scrollbar } from "@webiny/ui/Scrollbar";
|
|
26
|
+
import { Select } from "@webiny/ui/Select";
|
|
25
27
|
import { ReactComponent as AddIcon } from "@webiny/app-admin/assets/icons/add-18px.svg";
|
|
26
28
|
import { ReactComponent as FilterIcon } from "@webiny/app-admin/assets/icons/filter-24px.svg";
|
|
27
29
|
import SearchUI from "@webiny/app-admin/components/SearchUI";
|
|
28
30
|
import statusLabels from "../../constants/statusLabels";
|
|
29
31
|
import { useCallback } from "react";
|
|
30
32
|
import { useContentEntriesList } from "./hooks/useContentEntriesList";
|
|
33
|
+
import { useContentEntriesViewConfig } from "./experiment/ContentEntriesViewConfig";
|
|
31
34
|
var t = i18n.ns("app-headless-cms/admin/contents/data-list");
|
|
32
35
|
var rightAlign = /*#__PURE__*/css({
|
|
33
36
|
alignItems: "flex-end !important",
|
|
@@ -74,6 +77,7 @@ var ContentEntriesList = function ContentEntriesList() {
|
|
|
74
77
|
filter = _useContentEntriesLis.filter,
|
|
75
78
|
setFilter = _useContentEntriesLis.setFilter;
|
|
76
79
|
|
|
80
|
+
var viewConfig = useContentEntriesViewConfig();
|
|
77
81
|
var loadMoreOnScroll = useCallback(debounce(function (scrollFrame) {
|
|
78
82
|
if (scrollFrame.top > 0.9) {
|
|
79
83
|
loadMore();
|
|
@@ -84,56 +88,49 @@ var ContentEntriesList = function ContentEntriesList() {
|
|
|
84
88
|
sort: listQueryVariables.sort ? listQueryVariables.sort[0] : ""
|
|
85
89
|
});
|
|
86
90
|
|
|
91
|
+
var appliesToContentModel = useCallback(function (_ref) {
|
|
92
|
+
var modelIds = _ref.modelIds;
|
|
93
|
+
return modelIds.length === 0 || modelIds.includes(contentModel.modelId);
|
|
94
|
+
}, [contentModel]);
|
|
87
95
|
var entriesDataListModalOverlay = useMemo(function () {
|
|
88
96
|
return /*#__PURE__*/React.createElement(UIList.DataListModalOverlay, null, /*#__PURE__*/React.createElement(Form, {
|
|
89
97
|
data: formInitialData,
|
|
90
|
-
onChange: function onChange(
|
|
91
|
-
var
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
+
onChange: function onChange(_ref2) {
|
|
99
|
+
var sort = _ref2.sort,
|
|
100
|
+
status = _ref2.status,
|
|
101
|
+
data = _objectWithoutProperties(_ref2, _excluded);
|
|
102
|
+
|
|
103
|
+
setListQueryVariables(function () {
|
|
104
|
+
return _objectSpread({
|
|
105
|
+
status: status,
|
|
106
|
+
// GraphQL Schema requires "sort" to be an array.
|
|
107
|
+
sort: [sort]
|
|
108
|
+
}, data);
|
|
98
109
|
});
|
|
99
110
|
}
|
|
100
|
-
}, function (
|
|
101
|
-
var Bind =
|
|
111
|
+
}, function (_ref3) {
|
|
112
|
+
var Bind = _ref3.Bind;
|
|
102
113
|
return /*#__PURE__*/React.createElement(Grid, null, /*#__PURE__*/React.createElement(Cell, {
|
|
103
114
|
span: 12
|
|
104
115
|
}, /*#__PURE__*/React.createElement(Bind, {
|
|
105
116
|
name: "sort"
|
|
106
117
|
}, /*#__PURE__*/React.createElement(Select, {
|
|
107
118
|
label: t(_templateObject || (_templateObject = _taggedTemplateLiteral(["Sort by"])))
|
|
108
|
-
}, sorters.map(function (
|
|
109
|
-
var
|
|
110
|
-
|
|
119
|
+
}, sorters.map(function (_ref4) {
|
|
120
|
+
var value = _ref4.value,
|
|
121
|
+
label = _ref4.label;
|
|
111
122
|
return /*#__PURE__*/React.createElement("option", {
|
|
112
|
-
key:
|
|
123
|
+
key: value,
|
|
113
124
|
value: value
|
|
114
125
|
}, label);
|
|
115
|
-
})))),
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
description: "Filter by a specific page status."
|
|
122
|
-
}, /*#__PURE__*/React.createElement("option", {
|
|
123
|
-
value: "all"
|
|
124
|
-
}, t(_templateObject3 || (_templateObject3 = _taggedTemplateLiteral(["All"])))), /*#__PURE__*/React.createElement("option", {
|
|
125
|
-
value: "draft"
|
|
126
|
-
}, t(_templateObject4 || (_templateObject4 = _taggedTemplateLiteral(["Draft"])))), /*#__PURE__*/React.createElement("option", {
|
|
127
|
-
value: "published"
|
|
128
|
-
}, t(_templateObject5 || (_templateObject5 = _taggedTemplateLiteral(["Published"])))), /*#__PURE__*/React.createElement("option", {
|
|
129
|
-
value: "unpublished"
|
|
130
|
-
}, t(_templateObject6 || (_templateObject6 = _taggedTemplateLiteral(["Unpublished"])))), /*#__PURE__*/React.createElement("option", {
|
|
131
|
-
value: "reviewRequested"
|
|
132
|
-
}, t(_templateObject7 || (_templateObject7 = _taggedTemplateLiteral(["Review requested"])))), /*#__PURE__*/React.createElement("option", {
|
|
133
|
-
value: "changesRequested"
|
|
134
|
-
}, t(_templateObject8 || (_templateObject8 = _taggedTemplateLiteral(["Changes requested"]))))))));
|
|
126
|
+
})))), viewConfig.filters.filter(appliesToContentModel).map(function (filter) {
|
|
127
|
+
return /*#__PURE__*/React.createElement(Cell, {
|
|
128
|
+
span: 12,
|
|
129
|
+
key: filter.name
|
|
130
|
+
}, filter.element);
|
|
131
|
+
}));
|
|
135
132
|
}));
|
|
136
|
-
}, [listQueryVariables]);
|
|
133
|
+
}, [listQueryVariables, viewConfig.filters]);
|
|
137
134
|
return /*#__PURE__*/React.createElement(UIList.DataList, {
|
|
138
135
|
loading: loading,
|
|
139
136
|
data: data,
|
|
@@ -145,11 +142,11 @@ var ContentEntriesList = function ContentEntriesList() {
|
|
|
145
142
|
onClick: onCreate
|
|
146
143
|
}, /*#__PURE__*/React.createElement(ButtonIcon, {
|
|
147
144
|
icon: /*#__PURE__*/React.createElement(AddIcon, null)
|
|
148
|
-
}), " ", t(
|
|
145
|
+
}), " ", t(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["New Entry"])))) : null,
|
|
149
146
|
search: /*#__PURE__*/React.createElement(SearchUI, {
|
|
150
147
|
value: filter,
|
|
151
148
|
onChange: setFilter,
|
|
152
|
-
inputPlaceholder: t(
|
|
149
|
+
inputPlaceholder: t(_templateObject3 || (_templateObject3 = _taggedTemplateLiteral(["Search {title}"])))({
|
|
153
150
|
title: pluralize(contentModel.name)
|
|
154
151
|
})
|
|
155
152
|
}),
|
|
@@ -158,8 +155,8 @@ var ContentEntriesList = function ContentEntriesList() {
|
|
|
158
155
|
icon: /*#__PURE__*/React.createElement(FilterIcon, null),
|
|
159
156
|
"data-testid": "default-data-list.filter"
|
|
160
157
|
})
|
|
161
|
-
}, function (
|
|
162
|
-
var data =
|
|
158
|
+
}, function (_ref5) {
|
|
159
|
+
var data = _ref5.data;
|
|
163
160
|
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Scrollbar, {
|
|
164
161
|
"data-testid": "default-data-list",
|
|
165
162
|
onScrollFrame: function onScrollFrame(scrollFrame) {
|
|
@@ -172,7 +169,7 @@ var ContentEntriesList = function ContentEntriesList() {
|
|
|
172
169
|
selected: item.id === id
|
|
173
170
|
}, /*#__PURE__*/React.createElement(UIList.ListItemText, {
|
|
174
171
|
onClick: editEntry(item)
|
|
175
|
-
}, item.meta.title || "Untitled", /*#__PURE__*/React.createElement(UIList.ListItemTextSecondary, null, t(
|
|
172
|
+
}, item.meta.title || "Untitled", /*#__PURE__*/React.createElement(UIList.ListItemTextSecondary, null, t(_templateObject4 || (_templateObject4 = _taggedTemplateLiteral(["Last modified: {time}."])))({
|
|
176
173
|
time: /*#__PURE__*/React.createElement(TimeAgo, {
|
|
177
174
|
datetime: item.savedOn
|
|
178
175
|
})
|
|
@@ -183,7 +180,7 @@ var ContentEntriesList = function ContentEntriesList() {
|
|
|
183
180
|
}, statusLabels[item.meta.status], " (v", item.meta.version, ")")));
|
|
184
181
|
})), loadMoreLoading && /*#__PURE__*/React.createElement(InlineLoaderWrapper, null, /*#__PURE__*/React.createElement(Typography, {
|
|
185
182
|
use: "overline"
|
|
186
|
-
}, t(
|
|
183
|
+
}, t(_templateObject5 || (_templateObject5 = _taggedTemplateLiteral(["Loading more entries..."]))))));
|
|
187
184
|
});
|
|
188
185
|
};
|
|
189
186
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["ContentEntriesList.tsx"],"names":["React","useMemo","debounce","css","TimeAgo","pluralize","styled","i18n","Form","Typography","UIList","ButtonIcon","ButtonSecondary","Cell","Grid","Select","Scrollbar","ReactComponent","AddIcon","FilterIcon","SearchUI","statusLabels","useCallback","useContentEntriesList","t","ns","rightAlign","alignItems","justifyContent","ModelId","color","InlineLoaderWrapper","position","bottom","left","display","width","height","backgroundColor","listItemMinHeight","minHeight","ContentEntriesList","contentModel","id","loading","canCreate","onCreate","data","editEntry","loadMore","loadMoreLoading","listQueryVariables","setListQueryVariables","sorters","filter","setFilter","loadMoreOnScroll","scrollFrame","top","formInitialData","sort","entriesDataListModalOverlay","status","prevState","Bind","map","label","value","name","modelId","title","item","meta","time","savedOn","version"],"mappings":"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","sourcesContent":["import React, { useMemo } from \"react\";\nimport debounce from \"lodash/debounce\";\nimport { css } from \"emotion\";\n/**\n * Package timeago-react does not have types.\n */\n// @ts-ignore\nimport TimeAgo from \"timeago-react\";\nimport pluralize from \"pluralize\";\nimport styled from \"@emotion/styled\";\nimport { i18n } from \"@webiny/app/i18n\";\nimport { Form } from \"@webiny/form\";\nimport { Typography } from \"@webiny/ui/Typography\";\nimport * as UIList from \"@webiny/ui/List\";\nimport { ButtonIcon, ButtonSecondary } from \"@webiny/ui/Button\";\nimport { Cell, Grid } from \"@webiny/ui/Grid\";\nimport { Select } from \"@webiny/ui/Select\";\nimport { Scrollbar } from \"@webiny/ui/Scrollbar\";\nimport { ReactComponent as AddIcon } from \"@webiny/app-admin/assets/icons/add-18px.svg\";\nimport { ReactComponent as FilterIcon } from \"@webiny/app-admin/assets/icons/filter-24px.svg\";\nimport SearchUI from \"@webiny/app-admin/components/SearchUI\";\nimport statusLabels from \"../../constants/statusLabels\";\nimport { useCallback } from \"react\";\nimport { useContentEntriesList } from \"~/admin/views/contentEntries/hooks/useContentEntriesList\";\nimport { positionValues as PositionValues } from \"react-custom-scrollbars\";\nimport { CmsEditorContentEntry } from \"~/types\";\n\nconst t = i18n.ns(\"app-headless-cms/admin/contents/data-list\");\n\nconst rightAlign = css({\n alignItems: \"flex-end !important\",\n justifyContent: \"center !important\"\n});\n\nconst ModelId = styled(\"span\")({\n color: \"var(--mdc-theme-text-secondary-on-background)\"\n});\n\nconst InlineLoaderWrapper = styled(\"div\")({\n position: \"absolute\",\n bottom: 0,\n left: 0,\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n width: \"100%\",\n height: 40,\n backgroundColor: \"var(--mdc-theme-surface)\"\n});\n\nconst listItemMinHeight = css({\n minHeight: \"66px !important\"\n});\n\nconst ContentEntriesList: React.FC = () => {\n const {\n contentModel,\n id,\n loading,\n canCreate,\n onCreate,\n data,\n editEntry,\n loadMore,\n loadMoreLoading,\n listQueryVariables,\n setListQueryVariables,\n sorters,\n filter,\n setFilter\n } = useContentEntriesList();\n\n const loadMoreOnScroll = useCallback(\n debounce((scrollFrame: PositionValues) => {\n if (scrollFrame.top > 0.9) {\n loadMore();\n }\n }, 500),\n [data]\n );\n\n const formInitialData = {\n ...listQueryVariables,\n sort: listQueryVariables.sort ? listQueryVariables.sort[0] : \"\"\n };\n\n const entriesDataListModalOverlay = useMemo(\n () => (\n <UIList.DataListModalOverlay>\n <Form\n data={formInitialData}\n onChange={({ status, sort }) => {\n setListQueryVariables(prevState => ({ ...prevState, sort, status }));\n }}\n >\n {({ Bind }) => (\n <Grid>\n <Cell span={12}>\n <Bind name={\"sort\"}>\n <Select label={t`Sort by`}>\n {sorters.map(({ label, value }) => {\n return (\n <option key={label} value={value}>\n {label}\n </option>\n );\n })}\n </Select>\n </Bind>\n </Cell>\n <Cell span={12}>\n <Bind name={\"status\"}>\n <Select\n label={t`Filter by status`}\n description={\"Filter by a specific page status.\"}\n >\n <option value={\"all\"}>{t`All`}</option>\n <option value={\"draft\"}>{t`Draft`}</option>\n <option value={\"published\"}>{t`Published`}</option>\n <option value={\"unpublished\"}>{t`Unpublished`}</option>\n <option\n value={\"reviewRequested\"}\n >{t`Review requested`}</option>\n <option\n value={\"changesRequested\"}\n >{t`Changes requested`}</option>\n </Select>\n </Bind>\n </Cell>\n </Grid>\n )}\n </Form>\n </UIList.DataListModalOverlay>\n ),\n [listQueryVariables]\n );\n\n return (\n <UIList.DataList\n loading={loading}\n data={data}\n title={\n <span>\n {pluralize(contentModel.name)}\n <br />\n <Typography use={\"subtitle1\"}>\n <ModelId>Model ID: {contentModel.modelId}</ModelId>\n </Typography>\n </span>\n }\n actions={\n canCreate ? (\n <ButtonSecondary data-testid=\"new-record-button\" onClick={onCreate}>\n <ButtonIcon icon={<AddIcon />} /> {t`New Entry`}\n </ButtonSecondary>\n ) : null\n }\n search={\n <SearchUI\n value={filter}\n onChange={setFilter}\n inputPlaceholder={t`Search {title}`({ title: pluralize(contentModel.name) })}\n />\n }\n modalOverlay={entriesDataListModalOverlay}\n modalOverlayAction={\n <UIList.DataListModalOverlayAction\n icon={<FilterIcon />}\n data-testid={\"default-data-list.filter\"}\n />\n }\n >\n {({ data }: { data: CmsEditorContentEntry[] }) => (\n <>\n <Scrollbar\n data-testid=\"default-data-list\"\n onScrollFrame={scrollFrame => loadMoreOnScroll(scrollFrame)}\n >\n {data.map(item => (\n <UIList.ListItem\n key={item.id}\n className={listItemMinHeight}\n selected={item.id === id}\n >\n <UIList.ListItemText onClick={editEntry(item)}>\n {item.meta.title || \"Untitled\"}\n <UIList.ListItemTextSecondary>\n {t`Last modified: {time}.`({\n time: <TimeAgo datetime={item.savedOn} />\n })}\n </UIList.ListItemTextSecondary>\n </UIList.ListItemText>\n\n <UIList.ListItemMeta className={rightAlign}>\n <Typography use={\"subtitle2\"}>\n {statusLabels[item.meta.status]} (v{item.meta.version})\n </Typography>\n </UIList.ListItemMeta>\n </UIList.ListItem>\n ))}\n </Scrollbar>\n {loadMoreLoading && (\n <InlineLoaderWrapper>\n <Typography use={\"overline\"}>{t`Loading more entries...`}</Typography>\n </InlineLoaderWrapper>\n )}\n </>\n )}\n </UIList.DataList>\n );\n};\n\nexport default ContentEntriesList;\n"]}
|
|
1
|
+
{"version":3,"sources":["ContentEntriesList.tsx"],"names":["React","useMemo","debounce","css","TimeAgo","pluralize","styled","i18n","Form","Typography","UIList","ButtonIcon","ButtonSecondary","Cell","Grid","Scrollbar","Select","ReactComponent","AddIcon","FilterIcon","SearchUI","statusLabels","useCallback","useContentEntriesList","useContentEntriesViewConfig","t","ns","rightAlign","alignItems","justifyContent","ModelId","color","InlineLoaderWrapper","position","bottom","left","display","width","height","backgroundColor","listItemMinHeight","minHeight","ContentEntriesList","contentModel","id","loading","canCreate","onCreate","data","editEntry","loadMore","loadMoreLoading","listQueryVariables","setListQueryVariables","sorters","filter","setFilter","viewConfig","loadMoreOnScroll","scrollFrame","top","formInitialData","sort","appliesToContentModel","modelIds","length","includes","modelId","entriesDataListModalOverlay","status","Bind","map","value","label","filters","name","element","title","item","meta","time","savedOn","version"],"mappings":"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","sourcesContent":["import React, { useMemo } from \"react\";\nimport debounce from \"lodash/debounce\";\nimport { css } from \"emotion\";\n/**\n * Package timeago-react does not have types.\n */\n// @ts-ignore\nimport TimeAgo from \"timeago-react\";\nimport pluralize from \"pluralize\";\nimport styled from \"@emotion/styled\";\nimport { i18n } from \"@webiny/app/i18n\";\nimport { Form } from \"@webiny/form\";\nimport { Typography } from \"@webiny/ui/Typography\";\nimport * as UIList from \"@webiny/ui/List\";\nimport { ButtonIcon, ButtonSecondary } from \"@webiny/ui/Button\";\nimport { Cell, Grid } from \"@webiny/ui/Grid\";\nimport { Scrollbar } from \"@webiny/ui/Scrollbar\";\nimport { Select } from \"@webiny/ui/Select\";\nimport { ReactComponent as AddIcon } from \"@webiny/app-admin/assets/icons/add-18px.svg\";\nimport { ReactComponent as FilterIcon } from \"@webiny/app-admin/assets/icons/filter-24px.svg\";\nimport SearchUI from \"@webiny/app-admin/components/SearchUI\";\nimport statusLabels from \"../../constants/statusLabels\";\nimport { useCallback } from \"react\";\nimport { useContentEntriesList } from \"~/admin/views/contentEntries/hooks/useContentEntriesList\";\nimport { positionValues as PositionValues } from \"react-custom-scrollbars\";\nimport { CmsEditorContentEntry } from \"~/types\";\nimport {\n useContentEntriesViewConfig,\n ContentEntriesViewConfigFilter\n} from \"./experiment/ContentEntriesViewConfig\";\n\nconst t = i18n.ns(\"app-headless-cms/admin/contents/data-list\");\n\nconst rightAlign = css({\n alignItems: \"flex-end !important\",\n justifyContent: \"center !important\"\n});\n\nconst ModelId = styled(\"span\")({\n color: \"var(--mdc-theme-text-secondary-on-background)\"\n});\n\nconst InlineLoaderWrapper = styled(\"div\")({\n position: \"absolute\",\n bottom: 0,\n left: 0,\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n width: \"100%\",\n height: 40,\n backgroundColor: \"var(--mdc-theme-surface)\"\n});\n\nconst listItemMinHeight = css({\n minHeight: \"66px !important\"\n});\n\nconst ContentEntriesList: React.FC = () => {\n const {\n contentModel,\n id,\n loading,\n canCreate,\n onCreate,\n data,\n editEntry,\n loadMore,\n loadMoreLoading,\n listQueryVariables,\n setListQueryVariables,\n sorters,\n filter,\n setFilter\n } = useContentEntriesList();\n\n const viewConfig = useContentEntriesViewConfig();\n\n const loadMoreOnScroll = useCallback(\n debounce((scrollFrame: PositionValues) => {\n if (scrollFrame.top > 0.9) {\n loadMore();\n }\n }, 500),\n [data]\n );\n\n const formInitialData = {\n ...listQueryVariables,\n sort: listQueryVariables.sort ? listQueryVariables.sort[0] : \"\"\n };\n\n const appliesToContentModel = useCallback(\n ({ modelIds }: ContentEntriesViewConfigFilter) => {\n return modelIds.length === 0 || modelIds.includes(contentModel.modelId);\n },\n [contentModel]\n );\n\n const entriesDataListModalOverlay = useMemo(\n () => (\n <UIList.DataListModalOverlay>\n <Form\n data={formInitialData}\n onChange={({ sort, status, ...data }) => {\n setListQueryVariables(() => ({\n status,\n // GraphQL Schema requires \"sort\" to be an array.\n sort: [sort],\n // Spread the rest of form data\n ...data\n }));\n }}\n >\n {({ Bind }) => (\n <Grid>\n <Cell span={12}>\n <Bind name={\"sort\"}>\n <Select label={t`Sort by`}>\n {sorters.map(({ value, label }) => {\n return (\n <option key={value} value={value}>\n {label}\n </option>\n );\n })}\n </Select>\n </Bind>\n </Cell>\n {viewConfig.filters.filter(appliesToContentModel).map(filter => (\n <Cell span={12} key={filter.name}>\n {filter.element}\n </Cell>\n ))}\n </Grid>\n )}\n </Form>\n </UIList.DataListModalOverlay>\n ),\n [listQueryVariables, viewConfig.filters]\n );\n\n return (\n <UIList.DataList\n loading={loading}\n data={data}\n title={\n <span>\n {pluralize(contentModel.name)}\n <br />\n <Typography use={\"subtitle1\"}>\n <ModelId>Model ID: {contentModel.modelId}</ModelId>\n </Typography>\n </span>\n }\n actions={\n canCreate ? (\n <ButtonSecondary data-testid=\"new-record-button\" onClick={onCreate}>\n <ButtonIcon icon={<AddIcon />} /> {t`New Entry`}\n </ButtonSecondary>\n ) : null\n }\n search={\n <SearchUI\n value={filter}\n onChange={setFilter}\n inputPlaceholder={t`Search {title}`({ title: pluralize(contentModel.name) })}\n />\n }\n modalOverlay={entriesDataListModalOverlay}\n modalOverlayAction={\n <UIList.DataListModalOverlayAction\n icon={<FilterIcon />}\n data-testid={\"default-data-list.filter\"}\n />\n }\n >\n {({ data }: { data: CmsEditorContentEntry[] }) => (\n <>\n <Scrollbar\n data-testid=\"default-data-list\"\n onScrollFrame={scrollFrame => loadMoreOnScroll(scrollFrame)}\n >\n {data.map(item => (\n <UIList.ListItem\n key={item.id}\n className={listItemMinHeight}\n selected={item.id === id}\n >\n <UIList.ListItemText onClick={editEntry(item)}>\n {item.meta.title || \"Untitled\"}\n <UIList.ListItemTextSecondary>\n {t`Last modified: {time}.`({\n time: <TimeAgo datetime={item.savedOn} />\n })}\n </UIList.ListItemTextSecondary>\n </UIList.ListItemText>\n\n <UIList.ListItemMeta className={rightAlign}>\n <Typography use={\"subtitle2\"}>\n {statusLabels[item.meta.status]} (v{item.meta.version})\n </Typography>\n </UIList.ListItemMeta>\n </UIList.ListItem>\n ))}\n </Scrollbar>\n {loadMoreLoading && (\n <InlineLoaderWrapper>\n <Typography use={\"overline\"}>{t`Loading more entries...`}</Typography>\n </InlineLoaderWrapper>\n )}\n </>\n )}\n </UIList.DataList>\n );\n};\n\nexport default ContentEntriesList;\n"]}
|
|
@@ -14,7 +14,7 @@ var sortEntries = function sortEntries(list, sort) {
|
|
|
14
14
|
if (!sort) {
|
|
15
15
|
return list;
|
|
16
16
|
} else if (Array.isArray(sort) === false) {
|
|
17
|
-
console.log("Sort is not an Array of
|
|
17
|
+
console.log("Sort is not an Array of strings.");
|
|
18
18
|
return list;
|
|
19
19
|
} else if (sort.length === 0) {
|
|
20
20
|
return list;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["cache.ts"],"names":["dotProp","orderBy","GQL","parseIdentifier","sortEntries","list","sort","Array","isArray","console","log","length","sortBy","split","key","value","order","toLowerCase","addEntryToListCache","model","cache","entry","variables","gqlParams","query","createListQuery","response","readQuery","content","data","writeQuery","updateLatestRevisionInListCache","revision","id","uniqueId","index","findIndex","item","startsWith","set","removeEntryFromListCache","entryId","delete","removeRevisionFromEntryCache","createRevisionsQuery","revisions","revisionsData","filter","addRevisionToRevisionsCache","unpublishPreviouslyPublishedRevision","publishedId","prevPublished","meta","status"],"mappings":";;;AAAA,OAAOA,OAAP,MAAoB,oBAApB;AACA,OAAOC,OAAP,MAAoB,gBAApB;AAEA,OAAO,KAAKC,GAAZ;AACA,SAASC,eAAT,QAAgC,eAAhC;;AASA;AACA;AACA;AACA;AACA,IAAMC,WAAW,GAAG,SAAdA,WAAc,CAChBC,IADgB,EAEhBC,IAFgB,EAGU;AAC1B,MAAI,CAACA,IAAL,EAAW;AACP,WAAOD,IAAP;AACH,GAFD,MAEO,IAAIE,KAAK,CAACC,OAAN,CAAcF,IAAd,MAAwB,KAA5B,EAAmC;AACtCG,IAAAA,OAAO,CAACC,GAAR,CAAY,iCAAZ;AACA,WAAOL,IAAP;AACH,GAHM,MAGA,IAAIC,IAAI,CAACK,MAAL,KAAgB,CAApB,EAAuB;AAC1B,WAAON,IAAP;AACH;;AACD,6BAAiBC,IAAjB;AAAA,MAAOM,MAAP;;AACA,sBAAqBA,MAAM,CAACC,KAAP,CAAa,GAAb,CAArB;AAAA;AAAA,MAAOC,GAAP;AAAA,MAAYC,KAAZ;;AACA,MAAMC,KAAK,GAAGD,KAAK,CAACE,WAAN,EAAd;AACA,SAAOhB,OAAO,CAACI,IAAD,EAAO,CAACS,GAAD,CAAP,EAAc,CAACE,KAAD,CAAd,CAAd;AACH,CAhBD;;AAkBA,OAAO,IAAME,mBAAmB,GAAG,SAAtBA,mBAAsB,CAC/BC,KAD+B,EAE/BC,KAF+B,EAG/BC,KAH+B,EAI/BC,SAJ+B,EAKxB;AACP,MAAMC,SAAS,GAAG;AAAEC,IAAAA,KAAK,EAAEtB,GAAG,CAACuB,eAAJ,CAAoBN,KAApB,CAAT;AAAqCG,IAAAA,SAAS,EAATA;AAArC,GAAlB;AACA,MAAMI,QAAQ,GAAGN,KAAK,CAACO,SAAN,CACbJ,SADa,CAAjB;;AAGA,MAAI,CAACG,QAAD,IAAa,CAACA,QAAQ,CAACE,OAAvB,IAAkC,CAACF,QAAQ,CAACE,OAAT,CAAiBC,IAAxD,EAA8D;AAC1D;AACH;;AACD,MAAQD,OAAR,GAAoBF,QAApB,CAAQE,OAAR;AACAR,EAAAA,KAAK,CAACU,UAAN,iCACOP,SADP;AAEIM,IAAAA,IAAI,EAAE;AACFD,MAAAA,OAAO,kCACAA,OADA;AAEHC,QAAAA,IAAI,EAAEzB,WAAW,EAAEiB,KAAF,4BAAYO,OAAO,CAACC,IAApB,IAA2BP,SAAS,CAAChB,IAArC;AAFd;AADL;AAFV;AASH,CAvBM;AAyBP,OAAO,IAAMyB,+BAA+B,GAAG,SAAlCA,+BAAkC,CAC3CZ,KAD2C,EAE3CC,KAF2C,EAG3CY,QAH2C,EAI3CV,SAJ2C,EAKpC;AACP,MAAMC,SAAS,GAAG;AAAEC,IAAAA,KAAK,EAAEtB,GAAG,CAACuB,eAAJ,CAAoBN,KAApB,CAAT;AAAqCG,IAAAA,SAAS,EAATA;AAArC,GAAlB;;AAEA,2BAAmBU,QAAQ,CAACC,EAAT,CAAYpB,KAAZ,CAAkB,GAAlB,CAAnB;AAAA;AAAA,MAAOqB,QAAP;;AAEA,MAAMR,QAAQ,GAAGN,KAAK,CAACO,SAAN,CACbJ,SADa,CAAjB;;AAGA,MAAI,CAACG,QAAD,IAAa,CAACA,QAAQ,CAACE,OAAvB,IAAkC,CAACF,QAAQ,CAACE,OAAT,CAAiBC,IAAxD,EAA8D;AAC1D;AACH;;AACD,MAAQD,OAAR,GAAoBF,QAApB,CAAQE,OAAR;AACA,MAAMO,KAAK,GAAGP,OAAO,CAACC,IAAR,CAAaO,SAAb,CAAuB,UAAAC,IAAI;AAAA,WAAIA,IAAI,CAACJ,EAAL,CAAQK,UAAR,CAAmBJ,QAAnB,CAAJ;AAAA,GAA3B,CAAd;;AACA,MAAIC,KAAK,KAAK,CAAC,CAAf,EAAkB;AACd;AACH;;AAEDf,EAAAA,KAAK,CAACU,UAAN,iCACOP,SADP;AAEIM,IAAAA,IAAI,EAAE;AACFD,MAAAA,OAAO,EAAE5B,OAAO,CAACuC,GAAR,CAAYX,OAAZ,iBAA6BO,KAA7B,GAAsCH,QAAtC;AADP;AAFV;AAMH,CA5BM;AA8BP,OAAO,IAAMQ,wBAAwB,GAAG,SAA3BA,wBAA2B,CACpCrB,KADoC,EAEpCC,KAFoC,EAGpCY,QAHoC,EAIpCV,SAJoC,EAK7B;AACP;AACA,MAAMC,SAAS,GAAG;AAAEC,IAAAA,KAAK,EAAEtB,GAAG,CAACuB,eAAJ,CAAoBN,KAApB,CAAT;AAAqCG,IAAAA,SAAS,EAATA;AAArC,GAAlB;AACA,MAAMI,QAAQ,GAAGN,KAAK,CAACO,SAAN,CACbJ,SADa,CAAjB;;AAGA,MAAI,CAACG,QAAD,IAAa,CAACA,QAAQ,CAACE,OAAvB,IAAkC,CAACF,QAAQ,CAACE,OAAT,CAAiBC,IAAxD,EAA8D;AAC1D;AACH;;AACD,MAAQD,OAAR,GAAoBF,QAApB,CAAQE,OAAR;;AACA,yBAAwBzB,eAAe,CAAC6B,QAAQ,CAACC,EAAV,CAAvC;AAAA,MAAYQ,OAAZ,oBAAQR,EAAR;;AACA,MAAME,KAAK,GAAGP,OAAO,CAACC,IAAR,CAAaO,SAAb,CAAuB,UAAAC,IAAI;AAAA,WAAIA,IAAI,CAACJ,EAAL,CAAQK,UAAR,CAAmBG,OAAnB,CAAJ;AAAA,GAA3B,CAAd;;AACA,MAAIN,KAAK,KAAK,CAAC,CAAf,EAAkB;AACd;AACH;;AAEDf,EAAAA,KAAK,CAACU,UAAN,iCACOP,SADP;AAEIM,IAAAA,IAAI,EAAE;AACFD,MAAAA,OAAO,EAAE5B,OAAO,CAAC0C,MAAR,CAAed,OAAf,iBAAgCO,KAAhC;AADP;AAFV;AAMH,CA3BM;AA6BP,OAAO,IAAMQ,4BAA4B,GAAG,SAA/BA,4BAA+B,CACxCxB,KADwC,EAExCC,KAFwC,EAGxCY,QAHwC,EAIZ;AAC5B,MAAMT,SAAS,GAAG;AACdC,IAAAA,KAAK,EAAEtB,GAAG,CAAC0C,oBAAJ,CAAyBzB,KAAzB,CADO;AAEdG,IAAAA,SAAS,EAAE;AAAEW,MAAAA,EAAE,EAAED,QAAQ,CAACC,EAAT,CAAYpB,KAAZ,CAAkB,GAAlB,EAAuB,CAAvB;AAAN;AAFG,GAAlB;AAKA,MAAMa,QAAQ,GAAGN,KAAK,CAACO,SAAN,CAGfJ,SAHe,CAAjB;;AAIA,MACI,CAACG,QAAD,IACA,CAACA,QAAQ,CAACmB,SADV,IAEA,CAACnB,QAAQ,CAACmB,SAAT,CAAmBhB,IAFpB,IAGAH,QAAQ,CAACmB,SAAT,CAAmBhB,IAAnB,CAAwBlB,MAAxB,KAAmC,CAJvC,EAKE;AACE,WAAO,EAAP;AACH;;AAED,MAAmBmC,aAAnB,GAAqCpB,QAArC,CAAQmB,SAAR;AAEA,MAAMA,SAAS,GAAGC,aAAa,CAACjB,IAAd,CAAmBkB,MAAnB,CAA0B,UAAAV,IAAI,EAAI;AAChD,WAAOA,IAAI,CAACJ,EAAL,KAAYD,QAAQ,CAACC,EAA5B;AACH,GAFiB,CAAlB;AAIAb,EAAAA,KAAK,CAACU,UAAN,iCACOP,SADP;AAEIM,IAAAA,IAAI,EAAE;AACFgB,MAAAA,SAAS,EAATA;AADE;AAFV;AAOA,SAAOA,SAAP;AACH,CArCM;AAuCP,OAAO,IAAMG,2BAA2B,GAAG,SAA9BA,2BAA8B,CACvC7B,KADuC,EAEvCC,KAFuC,EAGvCY,QAHuC,EAIhC;AACP,MAAMT,SAAS,GAAG;AACdC,IAAAA,KAAK,EAAEtB,GAAG,CAAC0C,oBAAJ,CAAyBzB,KAAzB,CADO;AAEdG,IAAAA,SAAS,EAAE;AAAEW,MAAAA,EAAE,EAAED,QAAQ,CAACC,EAAT,CAAYpB,KAAZ,CAAkB,GAAlB,EAAuB,CAAvB;AAAN;AAFG,GAAlB;AAKA,MAAMa,QAAQ,GAAGN,KAAK,CAACO,SAAN,CAGfJ,SAHe,CAAjB;;AAKA,MAAI,CAACG,QAAD,IAAa,CAACA,QAAQ,CAACmB,SAAvB,IAAoC,CAACnB,QAAQ,CAACmB,SAAT,CAAmBhB,IAA5D,EAAkE;AAC9D;AACH;;AACD,MAAQgB,SAAR,GAAsBnB,QAAtB,CAAQmB,SAAR;AAEAzB,EAAAA,KAAK,CAACU,UAAN,iCACOP,SADP;AAEIM,IAAAA,IAAI,EAAE;AACFgB,MAAAA,SAAS,EAAE7C,OAAO,CAACuC,GAAR,CAAYM,SAAZ,WAAgCb,QAAhC,4BAA6Ca,SAAS,CAAChB,IAAvD;AADT;AAFV;AAMH,CA1BM;AA4BP,OAAO,IAAMoB,oCAAoC,GAAG,SAAvCA,oCAAuC,CAChD9B,KADgD,EAEhDC,KAFgD,EAGhD8B,WAHgD,EAIzC;AACP,MAAM3B,SAAS,GAAG;AACdC,IAAAA,KAAK,EAAEtB,GAAG,CAAC0C,oBAAJ,CAAyBzB,KAAzB,CADO;AAEdG,IAAAA,SAAS,EAAE;AAAEW,MAAAA,EAAE,EAAEiB,WAAW,CAACrC,KAAZ,CAAkB,GAAlB,EAAuB,CAAvB;AAAN;AAFG,GAAlB;AAKA,MAAMa,QAAQ,GAAGN,KAAK,CAACO,SAAN,CAGfJ,SAHe,CAAjB;;AAKA,MAAI,CAACG,QAAD,IAAa,CAACA,QAAQ,CAACmB,SAAvB,IAAoC,CAACnB,QAAQ,CAACmB,SAAT,CAAmBhB,IAA5D,EAAkE;AAC9D;AACH;;AACD,MAAQgB,SAAR,GAAsBnB,QAAtB,CAAQmB,SAAR;AAEA,MAAMM,aAAa,GAAGN,SAAS,CAAChB,IAAV,CAAeO,SAAf,CAClB,UAAAC,IAAI;AAAA,WAAIA,IAAI,CAACJ,EAAL,KAAYiB,WAAZ,IAA2Bb,IAAI,CAACe,IAAL,CAAUC,MAAV,KAAqB,WAApD;AAAA,GADc,CAAtB;;AAIA,MAAIF,aAAa,KAAK,CAAC,CAAvB,EAA0B;AACtB;AACH;;AAED/B,EAAAA,KAAK,CAACU,UAAN,iCACOP,SADP;AAEIM,IAAAA,IAAI,EAAE;AACFgB,MAAAA,SAAS,EAAE7C,OAAO,CAACuC,GAAR,CAAYM,SAAZ,iBAA+BM,aAA/B,mBAA4D,aAA5D;AADT;AAFV;AAMH,CAlCM","sourcesContent":["import dotProp from \"dot-prop-immutable\";\nimport orderBy from \"lodash/orderBy\";\nimport { CmsContentEntryRevision, CmsEditorContentEntry, CmsModel } from \"~/types\";\nimport * as GQL from \"~/admin/graphql/contentEntries\";\nimport { parseIdentifier } from \"@webiny/utils\";\nimport { DataProxy } from \"apollo-cache\";\nimport {\n CmsEntriesListQueryResponse,\n CmsEntriesListQueryVariables,\n CmsEntriesListRevisionsQueryResponse,\n CmsEntriesListRevisionsQueryVariables\n} from \"~/admin/graphql/contentEntries\";\n\n/*\n * We need to preserve the order of entries with new entry addition\n * because we're not re-fetching the list but updating it directly inside cache.\n * */\nconst sortEntries = (\n list: CmsEditorContentEntry[],\n sort?: string[] | null\n): CmsEditorContentEntry[] => {\n if (!sort) {\n return list;\n } else if (Array.isArray(sort) === false) {\n console.log(\"Sort is not an Array of string.\");\n return list;\n } else if (sort.length === 0) {\n return list;\n }\n const [sortBy] = sort;\n const [key, value] = sortBy.split(\"_\");\n const order = value.toLowerCase() as \"asc\" | \"desc\";\n return orderBy(list, [key], [order]);\n};\n\nexport const addEntryToListCache = (\n model: CmsModel,\n cache: DataProxy,\n entry: CmsEditorContentEntry,\n variables: CmsEntriesListQueryVariables\n): void => {\n const gqlParams = { query: GQL.createListQuery(model), variables };\n const response = cache.readQuery<CmsEntriesListQueryResponse, CmsEntriesListQueryVariables>(\n gqlParams\n );\n if (!response || !response.content || !response.content.data) {\n return;\n }\n const { content } = response;\n cache.writeQuery({\n ...gqlParams,\n data: {\n content: {\n ...content,\n data: sortEntries([entry, ...content.data], variables.sort)\n }\n }\n });\n};\n\nexport const updateLatestRevisionInListCache = (\n model: CmsModel,\n cache: DataProxy,\n revision: CmsContentEntryRevision,\n variables: CmsEntriesListQueryVariables\n): void => {\n const gqlParams = { query: GQL.createListQuery(model), variables };\n\n const [uniqueId] = revision.id.split(\"#\");\n\n const response = cache.readQuery<CmsEntriesListQueryResponse, CmsEntriesListQueryVariables>(\n gqlParams\n );\n if (!response || !response.content || !response.content.data) {\n return;\n }\n const { content } = response;\n const index = content.data.findIndex(item => item.id.startsWith(uniqueId));\n if (index === -1) {\n return;\n }\n\n cache.writeQuery({\n ...gqlParams,\n data: {\n content: dotProp.set(content, `data.${index}`, revision)\n }\n });\n};\n\nexport const removeEntryFromListCache = (\n model: CmsModel,\n cache: DataProxy,\n revision: CmsContentEntryRevision,\n variables: CmsEntriesListQueryVariables\n): void => {\n // Delete the item from list cache\n const gqlParams = { query: GQL.createListQuery(model), variables };\n const response = cache.readQuery<CmsEntriesListQueryResponse, CmsEntriesListQueryVariables>(\n gqlParams\n );\n if (!response || !response.content || !response.content.data) {\n return;\n }\n const { content } = response;\n const { id: entryId } = parseIdentifier(revision.id);\n const index = content.data.findIndex(item => item.id.startsWith(entryId));\n if (index === -1) {\n return;\n }\n\n cache.writeQuery({\n ...gqlParams,\n data: {\n content: dotProp.delete(content, `data.${index}`)\n }\n });\n};\n\nexport const removeRevisionFromEntryCache = (\n model: CmsModel,\n cache: DataProxy,\n revision: CmsContentEntryRevision\n): CmsContentEntryRevision[] => {\n const gqlParams = {\n query: GQL.createRevisionsQuery(model),\n variables: { id: revision.id.split(\"#\")[0] }\n };\n\n const response = cache.readQuery<\n CmsEntriesListRevisionsQueryResponse,\n CmsEntriesListRevisionsQueryVariables\n >(gqlParams);\n if (\n !response ||\n !response.revisions ||\n !response.revisions.data ||\n response.revisions.data.length === 0\n ) {\n return [];\n }\n\n const { revisions: revisionsData } = response;\n\n const revisions = revisionsData.data.filter(item => {\n return item.id !== revision.id;\n });\n\n cache.writeQuery({\n ...gqlParams,\n data: {\n revisions\n }\n });\n\n return revisions;\n};\n\nexport const addRevisionToRevisionsCache = (\n model: CmsModel,\n cache: DataProxy,\n revision: CmsContentEntryRevision\n): void => {\n const gqlParams = {\n query: GQL.createRevisionsQuery(model),\n variables: { id: revision.id.split(\"#\")[0] }\n };\n\n const response = cache.readQuery<\n CmsEntriesListRevisionsQueryResponse,\n CmsEntriesListRevisionsQueryVariables\n >(gqlParams);\n\n if (!response || !response.revisions || !response.revisions.data) {\n return;\n }\n const { revisions } = response;\n\n cache.writeQuery({\n ...gqlParams,\n data: {\n revisions: dotProp.set(revisions, `data`, [revision, ...revisions.data])\n }\n });\n};\n\nexport const unpublishPreviouslyPublishedRevision = (\n model: CmsModel,\n cache: DataProxy,\n publishedId: string\n): void => {\n const gqlParams = {\n query: GQL.createRevisionsQuery(model),\n variables: { id: publishedId.split(\"#\")[0] }\n };\n\n const response = cache.readQuery<\n CmsEntriesListRevisionsQueryResponse,\n CmsEntriesListRevisionsQueryVariables\n >(gqlParams);\n\n if (!response || !response.revisions || !response.revisions.data) {\n return;\n }\n const { revisions } = response;\n\n const prevPublished = revisions.data.findIndex(\n item => item.id !== publishedId && item.meta.status === \"published\"\n );\n\n if (prevPublished === -1) {\n return;\n }\n\n cache.writeQuery({\n ...gqlParams,\n data: {\n revisions: dotProp.set(revisions, `data.${prevPublished}.meta.status`, \"unpublished\")\n }\n });\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["cache.ts"],"names":["dotProp","orderBy","GQL","parseIdentifier","sortEntries","list","sort","Array","isArray","console","log","length","sortBy","split","key","value","order","toLowerCase","addEntryToListCache","model","cache","entry","variables","gqlParams","query","createListQuery","response","readQuery","content","data","writeQuery","updateLatestRevisionInListCache","revision","id","uniqueId","index","findIndex","item","startsWith","set","removeEntryFromListCache","entryId","delete","removeRevisionFromEntryCache","createRevisionsQuery","revisions","revisionsData","filter","addRevisionToRevisionsCache","unpublishPreviouslyPublishedRevision","publishedId","prevPublished","meta","status"],"mappings":"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","sourcesContent":["import dotProp from \"dot-prop-immutable\";\nimport orderBy from \"lodash/orderBy\";\nimport { CmsContentEntryRevision, CmsEditorContentEntry, CmsModel } from \"~/types\";\nimport * as GQL from \"~/admin/graphql/contentEntries\";\nimport { parseIdentifier } from \"@webiny/utils\";\nimport { DataProxy } from \"apollo-cache\";\nimport {\n CmsEntriesListQueryResponse,\n CmsEntriesListQueryVariables,\n CmsEntriesListRevisionsQueryResponse,\n CmsEntriesListRevisionsQueryVariables\n} from \"~/admin/graphql/contentEntries\";\n\n/*\n * We need to preserve the order of entries with new entry addition\n * because we're not re-fetching the list but updating it directly inside cache.\n * */\nconst sortEntries = (\n list: CmsEditorContentEntry[],\n sort?: string[] | null\n): CmsEditorContentEntry[] => {\n if (!sort) {\n return list;\n } else if (Array.isArray(sort) === false) {\n console.log(\"Sort is not an Array of strings.\");\n return list;\n } else if (sort.length === 0) {\n return list;\n }\n const [sortBy] = sort;\n const [key, value] = sortBy.split(\"_\");\n const order = value.toLowerCase() as \"asc\" | \"desc\";\n return orderBy(list, [key], [order]);\n};\n\nexport const addEntryToListCache = (\n model: CmsModel,\n cache: DataProxy,\n entry: CmsEditorContentEntry,\n variables: CmsEntriesListQueryVariables\n): void => {\n const gqlParams = { query: GQL.createListQuery(model), variables };\n const response = cache.readQuery<CmsEntriesListQueryResponse, CmsEntriesListQueryVariables>(\n gqlParams\n );\n if (!response || !response.content || !response.content.data) {\n return;\n }\n const { content } = response;\n cache.writeQuery({\n ...gqlParams,\n data: {\n content: {\n ...content,\n data: sortEntries([entry, ...content.data], variables.sort)\n }\n }\n });\n};\n\nexport const updateLatestRevisionInListCache = (\n model: CmsModel,\n cache: DataProxy,\n revision: CmsContentEntryRevision,\n variables: CmsEntriesListQueryVariables\n): void => {\n const gqlParams = { query: GQL.createListQuery(model), variables };\n\n const [uniqueId] = revision.id.split(\"#\");\n\n const response = cache.readQuery<CmsEntriesListQueryResponse, CmsEntriesListQueryVariables>(\n gqlParams\n );\n if (!response || !response.content || !response.content.data) {\n return;\n }\n const { content } = response;\n const index = content.data.findIndex(item => item.id.startsWith(uniqueId));\n if (index === -1) {\n return;\n }\n\n cache.writeQuery({\n ...gqlParams,\n data: {\n content: dotProp.set(content, `data.${index}`, revision)\n }\n });\n};\n\nexport const removeEntryFromListCache = (\n model: CmsModel,\n cache: DataProxy,\n revision: CmsContentEntryRevision,\n variables: CmsEntriesListQueryVariables\n): void => {\n // Delete the item from list cache\n const gqlParams = { query: GQL.createListQuery(model), variables };\n const response = cache.readQuery<CmsEntriesListQueryResponse, CmsEntriesListQueryVariables>(\n gqlParams\n );\n if (!response || !response.content || !response.content.data) {\n return;\n }\n const { content } = response;\n const { id: entryId } = parseIdentifier(revision.id);\n const index = content.data.findIndex(item => item.id.startsWith(entryId));\n if (index === -1) {\n return;\n }\n\n cache.writeQuery({\n ...gqlParams,\n data: {\n content: dotProp.delete(content, `data.${index}`)\n }\n });\n};\n\nexport const removeRevisionFromEntryCache = (\n model: CmsModel,\n cache: DataProxy,\n revision: CmsContentEntryRevision\n): CmsContentEntryRevision[] => {\n const gqlParams = {\n query: GQL.createRevisionsQuery(model),\n variables: { id: revision.id.split(\"#\")[0] }\n };\n\n const response = cache.readQuery<\n CmsEntriesListRevisionsQueryResponse,\n CmsEntriesListRevisionsQueryVariables\n >(gqlParams);\n if (\n !response ||\n !response.revisions ||\n !response.revisions.data ||\n response.revisions.data.length === 0\n ) {\n return [];\n }\n\n const { revisions: revisionsData } = response;\n\n const revisions = revisionsData.data.filter(item => {\n return item.id !== revision.id;\n });\n\n cache.writeQuery({\n ...gqlParams,\n data: {\n revisions\n }\n });\n\n return revisions;\n};\n\nexport const addRevisionToRevisionsCache = (\n model: CmsModel,\n cache: DataProxy,\n revision: CmsContentEntryRevision\n): void => {\n const gqlParams = {\n query: GQL.createRevisionsQuery(model),\n variables: { id: revision.id.split(\"#\")[0] }\n };\n\n const response = cache.readQuery<\n CmsEntriesListRevisionsQueryResponse,\n CmsEntriesListRevisionsQueryVariables\n >(gqlParams);\n\n if (!response || !response.revisions || !response.revisions.data) {\n return;\n }\n const { revisions } = response;\n\n cache.writeQuery({\n ...gqlParams,\n data: {\n revisions: dotProp.set(revisions, `data`, [revision, ...revisions.data])\n }\n });\n};\n\nexport const unpublishPreviouslyPublishedRevision = (\n model: CmsModel,\n cache: DataProxy,\n publishedId: string\n): void => {\n const gqlParams = {\n query: GQL.createRevisionsQuery(model),\n variables: { id: publishedId.split(\"#\")[0] }\n };\n\n const response = cache.readQuery<\n CmsEntriesListRevisionsQueryResponse,\n CmsEntriesListRevisionsQueryVariables\n >(gqlParams);\n\n if (!response || !response.revisions || !response.revisions.data) {\n return;\n }\n const { revisions } = response;\n\n const prevPublished = revisions.data.findIndex(\n item => item.id !== publishedId && item.meta.status === \"published\"\n );\n\n if (prevPublished === -1) {\n return;\n }\n\n cache.writeQuery({\n ...gqlParams,\n data: {\n revisions: dotProp.set(revisions, `data.${prevPublished}.meta.status`, \"unpublished\")\n }\n });\n};\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const ContentEntriesModule: () => JSX.Element;
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { Compose, Plugins } from "@webiny/app-admin";
|
|
3
|
+
import { useBind } from "@webiny/form";
|
|
4
|
+
import { Select } from "@webiny/ui/Select";
|
|
5
|
+
import { ContentEntriesViewRenderer, ContentEntriesViewConfig } from "./ContentEntriesViewConfig";
|
|
6
|
+
import { ContentEntriesRenderer } from "./ContentEntriesRenderer";
|
|
7
|
+
var Filter = ContentEntriesViewConfig.Filter,
|
|
8
|
+
Sorter = ContentEntriesViewConfig.Sorter;
|
|
9
|
+
|
|
10
|
+
var FilterByStatus = function FilterByStatus() {
|
|
11
|
+
var bind = useBind({
|
|
12
|
+
name: "status",
|
|
13
|
+
defaultValue: "all",
|
|
14
|
+
beforeChange: function beforeChange(value, cb) {
|
|
15
|
+
cb(value === "all" ? undefined : value);
|
|
16
|
+
}
|
|
17
|
+
});
|
|
18
|
+
return /*#__PURE__*/React.createElement(Select, Object.assign({}, bind, {
|
|
19
|
+
label: "Filter by status",
|
|
20
|
+
description: "Filter by a specific entry status."
|
|
21
|
+
}), /*#__PURE__*/React.createElement("option", {
|
|
22
|
+
value: "all"
|
|
23
|
+
}, "All"), /*#__PURE__*/React.createElement("option", {
|
|
24
|
+
value: "draft"
|
|
25
|
+
}, "Draft"), /*#__PURE__*/React.createElement("option", {
|
|
26
|
+
value: "published"
|
|
27
|
+
}, "Published"), /*#__PURE__*/React.createElement("option", {
|
|
28
|
+
value: "unpublished"
|
|
29
|
+
}, "Unpublished"), /*#__PURE__*/React.createElement("option", {
|
|
30
|
+
value: "reviewRequested"
|
|
31
|
+
}, "Review requested"), /*#__PURE__*/React.createElement("option", {
|
|
32
|
+
value: "changesRequested"
|
|
33
|
+
}, "Changes requested"));
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
export var ContentEntriesModule = function ContentEntriesModule() {
|
|
37
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Compose, {
|
|
38
|
+
component: ContentEntriesViewRenderer,
|
|
39
|
+
with: ContentEntriesRenderer
|
|
40
|
+
}), /*#__PURE__*/React.createElement(Plugins, null, /*#__PURE__*/React.createElement(ContentEntriesViewConfig, null, /*#__PURE__*/React.createElement(Filter, {
|
|
41
|
+
name: "status",
|
|
42
|
+
element: /*#__PURE__*/React.createElement(FilterByStatus, null)
|
|
43
|
+
}), /*#__PURE__*/React.createElement(Sorter, {
|
|
44
|
+
name: "savedOn_DESC",
|
|
45
|
+
label: "Newest to oldest"
|
|
46
|
+
}), /*#__PURE__*/React.createElement(Sorter, {
|
|
47
|
+
name: "savedOn_ASC",
|
|
48
|
+
label: "Oldest to newest"
|
|
49
|
+
}))));
|
|
50
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["ContentEntriesModule.tsx"],"names":["React","Compose","Plugins","useBind","Select","ContentEntriesViewRenderer","ContentEntriesViewConfig","ContentEntriesRenderer","Filter","Sorter","FilterByStatus","bind","name","defaultValue","beforeChange","value","cb","undefined","ContentEntriesModule"],"mappings":"AAAA,OAAOA,KAAP,MAAkB,OAAlB;AACA,SAASC,OAAT,EAAkBC,OAAlB,QAAiC,mBAAjC;AACA,SAASC,OAAT,QAAwB,cAAxB;AACA,SAASC,MAAT,QAAuB,mBAAvB;AACA,SAASC,0BAAT,EAAqCC,wBAArC;AACA,SAASC,sBAAT;AAEA,IAAQC,MAAR,GAA2BF,wBAA3B,CAAQE,MAAR;AAAA,IAAgBC,MAAhB,GAA2BH,wBAA3B,CAAgBG,MAAhB;;AAEA,IAAMC,cAAc,GAAG,SAAjBA,cAAiB,GAAM;AACzB,MAAMC,IAAI,GAAGR,OAAO,CAAC;AACjBS,IAAAA,IAAI,EAAE,QADW;AAEjBC,IAAAA,YAAY,EAAE,KAFG;AAGjBC,IAAAA,YAHiB,wBAGJC,KAHI,EAGGC,EAHH,EAGO;AACpBA,MAAAA,EAAE,CAACD,KAAK,KAAK,KAAV,GAAkBE,SAAlB,GAA8BF,KAA/B,CAAF;AACH;AALgB,GAAD,CAApB;AAQA,sBACI,oBAAC,MAAD,oBACQJ,IADR;AAEI,IAAA,KAAK,EAAE,kBAFX;AAGI,IAAA,WAAW,EAAE;AAHjB,mBAKI;AAAQ,IAAA,KAAK,EAAE;AAAf,WALJ,eAMI;AAAQ,IAAA,KAAK,EAAE;AAAf,aANJ,eAOI;AAAQ,IAAA,KAAK,EAAE;AAAf,iBAPJ,eAQI;AAAQ,IAAA,KAAK,EAAE;AAAf,mBARJ,eASI;AAAQ,IAAA,KAAK,EAAE;AAAf,wBATJ,eAUI;AAAQ,IAAA,KAAK,EAAE;AAAf,yBAVJ,CADJ;AAcH,CAvBD;;AAyBA,OAAO,IAAMO,oBAAoB,GAAG,SAAvBA,oBAAuB,GAAM;AACtC,sBACI,uDACI,oBAAC,OAAD;AAAS,IAAA,SAAS,EAAEb,0BAApB;AAAgD,IAAA,IAAI,EAAEE;AAAtD,IADJ,eAEI,oBAAC,OAAD,qBACI,oBAAC,wBAAD,qBACI,oBAAC,MAAD;AAAQ,IAAA,IAAI,EAAE,QAAd;AAAwB,IAAA,OAAO,eAAE,oBAAC,cAAD;AAAjC,IADJ,eAEI,oBAAC,MAAD;AAAQ,IAAA,IAAI,EAAE,cAAd;AAA8B,IAAA,KAAK,EAAE;AAArC,IAFJ,eAGI,oBAAC,MAAD;AAAQ,IAAA,IAAI,EAAE,aAAd;AAA6B,IAAA,KAAK,EAAE;AAApC,IAHJ,CADJ,CAFJ,CADJ;AAYH,CAbM","sourcesContent":["import React from \"react\";\nimport { Compose, Plugins } from \"@webiny/app-admin\";\nimport { useBind } from \"@webiny/form\";\nimport { Select } from \"@webiny/ui/Select\";\nimport { ContentEntriesViewRenderer, ContentEntriesViewConfig } from \"./ContentEntriesViewConfig\";\nimport { ContentEntriesRenderer } from \"./ContentEntriesRenderer\";\n\nconst { Filter, Sorter } = ContentEntriesViewConfig;\n\nconst FilterByStatus = () => {\n const bind = useBind({\n name: \"status\",\n defaultValue: \"all\",\n beforeChange(value, cb) {\n cb(value === \"all\" ? undefined : value);\n }\n });\n\n return (\n <Select\n {...bind}\n label={\"Filter by status\"}\n description={\"Filter by a specific entry status.\"}\n >\n <option value={\"all\"}>All</option>\n <option value={\"draft\"}>Draft</option>\n <option value={\"published\"}>Published</option>\n <option value={\"unpublished\"}>Unpublished</option>\n <option value={\"reviewRequested\"}>Review requested</option>\n <option value={\"changesRequested\"}>Changes requested</option>\n </Select>\n );\n};\n\nexport const ContentEntriesModule = () => {\n return (\n <>\n <Compose component={ContentEntriesViewRenderer} with={ContentEntriesRenderer} />\n <Plugins>\n <ContentEntriesViewConfig>\n <Filter name={\"status\"} element={<FilterByStatus />} />\n <Sorter name={\"savedOn_DESC\"} label={\"Newest to oldest\"} />\n <Sorter name={\"savedOn_ASC\"} label={\"Oldest to newest\"} />\n </ContentEntriesViewConfig>\n </Plugins>\n </>\n );\n};\n"]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import React, { Suspense, lazy } from "react";
|
|
2
|
+
import { CircularProgress } from "@webiny/ui/Progress";
|
|
3
|
+
var ContentEntriesView = /*#__PURE__*/lazy(function () {
|
|
4
|
+
return import("../ContentEntries");
|
|
5
|
+
});
|
|
6
|
+
export var ContentEntriesRenderer = function ContentEntriesRenderer() {
|
|
7
|
+
return function ContentEntriesRenderer() {
|
|
8
|
+
return /*#__PURE__*/React.createElement(Suspense, {
|
|
9
|
+
fallback: /*#__PURE__*/React.createElement(CircularProgress, null)
|
|
10
|
+
}, /*#__PURE__*/React.createElement(ContentEntriesView, null));
|
|
11
|
+
};
|
|
12
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["ContentEntriesRenderer.tsx"],"names":["React","Suspense","lazy","CircularProgress","ContentEntriesView","ContentEntriesRenderer"],"mappings":"AAAA,OAAOA,KAAP,IAAgBC,QAAhB,EAA0BC,IAA1B,QAAsC,OAAtC;AACA,SAASC,gBAAT,QAAiC,qBAAjC;AAGA,IAAMC,kBAAkB,gBAAGF,IAAI,CAAC;AAAA,SAAM,2BAAN;AAAA,CAAD,CAA/B;AAEA,OAAO,IAAMG,sBAA4C,GAAG,SAA/CA,sBAA+C,GAAM;AAC9D,SAAO,SAASA,sBAAT,GAAkC;AACrC,wBACI,oBAAC,QAAD;AAAU,MAAA,QAAQ,eAAE,oBAAC,gBAAD;AAApB,oBACI,oBAAC,kBAAD,OADJ,CADJ;AAKH,GAND;AAOH,CARM","sourcesContent":["import React, { Suspense, lazy } from \"react\";\nimport { CircularProgress } from \"@webiny/ui/Progress\";\nimport { HigherOrderComponent } from \"@webiny/app-admin\";\n\nconst ContentEntriesView = lazy(() => import(\"../ContentEntries\"));\n\nexport const ContentEntriesRenderer: HigherOrderComponent = () => {\n return function ContentEntriesRenderer() {\n return (\n <Suspense fallback={<CircularProgress />}>\n <ContentEntriesView />\n </Suspense>\n );\n };\n};\n"]}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
interface ContentEntriesViewConfig extends React.FC<unknown> {
|
|
3
|
+
Filter: React.FC<ContentEntriesViewConfigFilterProps>;
|
|
4
|
+
Sorter: React.FC<ContentEntriesViewConfigSorterProps>;
|
|
5
|
+
}
|
|
6
|
+
export declare const ContentEntriesViewConfig: ContentEntriesViewConfig;
|
|
7
|
+
export interface ContentEntriesViewConfigFilterProps {
|
|
8
|
+
name: string;
|
|
9
|
+
element?: React.ReactElement<unknown>;
|
|
10
|
+
modelIds?: string[];
|
|
11
|
+
remove?: boolean;
|
|
12
|
+
}
|
|
13
|
+
export interface ContentEntriesViewConfigSorterProps {
|
|
14
|
+
name: string;
|
|
15
|
+
label: string;
|
|
16
|
+
modelIds?: string[];
|
|
17
|
+
remove?: boolean;
|
|
18
|
+
}
|
|
19
|
+
export declare const ContentEntriesView: import("@webiny/app-admin").ComposableFC<unknown>;
|
|
20
|
+
export declare const ContentEntriesViewRenderer: import("@webiny/app-admin").ComposableFC<unknown>;
|
|
21
|
+
export interface ContentEntriesViewConfigFilter {
|
|
22
|
+
name: string;
|
|
23
|
+
element: React.ReactElement;
|
|
24
|
+
modelIds: string[];
|
|
25
|
+
}
|
|
26
|
+
export interface ContentEntriesViewConfigSorter {
|
|
27
|
+
name: string;
|
|
28
|
+
label: string;
|
|
29
|
+
modelIds: string[];
|
|
30
|
+
}
|
|
31
|
+
export declare function useContentEntriesViewConfig(): {
|
|
32
|
+
filters: ContentEntriesViewConfigFilter[];
|
|
33
|
+
sorters: ContentEntriesViewConfigSorter[];
|
|
34
|
+
};
|
|
35
|
+
export {};
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
2
|
+
import { makeComposable, Compose } from "@webiny/app-admin";
|
|
3
|
+
import React, { useContext, useState } from "react";
|
|
4
|
+
import { Property, PropertyContainer, toObject } from "./Property";
|
|
5
|
+
var ContentEntriesViewConfigApply = makeComposable("ContentEntriesViewConfigApply", function (_ref) {
|
|
6
|
+
var children = _ref.children;
|
|
7
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null, children);
|
|
8
|
+
});
|
|
9
|
+
|
|
10
|
+
var createHOC = function createHOC(newChildren) {
|
|
11
|
+
return function (BaseComponent) {
|
|
12
|
+
return function ConfigHOC(_ref2) {
|
|
13
|
+
var children = _ref2.children;
|
|
14
|
+
return /*#__PURE__*/React.createElement(BaseComponent, null, newChildren, children);
|
|
15
|
+
};
|
|
16
|
+
};
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
export var ContentEntriesViewConfig = function ContentEntriesViewConfig(_ref3) {
|
|
20
|
+
var children = _ref3.children;
|
|
21
|
+
return /*#__PURE__*/React.createElement(Compose, {
|
|
22
|
+
component: ContentEntriesViewConfigApply,
|
|
23
|
+
with: createHOC(children)
|
|
24
|
+
});
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
var Filter = function Filter(_ref4) {
|
|
28
|
+
var name = _ref4.name,
|
|
29
|
+
element = _ref4.element,
|
|
30
|
+
_ref4$modelIds = _ref4.modelIds,
|
|
31
|
+
modelIds = _ref4$modelIds === void 0 ? [] : _ref4$modelIds,
|
|
32
|
+
_ref4$remove = _ref4.remove,
|
|
33
|
+
remove = _ref4$remove === void 0 ? false : _ref4$remove;
|
|
34
|
+
return /*#__PURE__*/React.createElement(Property, {
|
|
35
|
+
id: name,
|
|
36
|
+
name: "filter",
|
|
37
|
+
merge: true,
|
|
38
|
+
remove: remove
|
|
39
|
+
}, /*#__PURE__*/React.createElement(Property, {
|
|
40
|
+
id: "name",
|
|
41
|
+
name: "name",
|
|
42
|
+
value: name
|
|
43
|
+
}), /*#__PURE__*/React.createElement(Property, {
|
|
44
|
+
id: "modelIds",
|
|
45
|
+
name: "modelIds",
|
|
46
|
+
value: modelIds
|
|
47
|
+
}), element ? /*#__PURE__*/React.createElement(Property, {
|
|
48
|
+
id: "element",
|
|
49
|
+
name: "element",
|
|
50
|
+
value: element
|
|
51
|
+
}) : null);
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
var Sorter = function Sorter(_ref5) {
|
|
55
|
+
var name = _ref5.name,
|
|
56
|
+
label = _ref5.label,
|
|
57
|
+
_ref5$modelIds = _ref5.modelIds,
|
|
58
|
+
modelIds = _ref5$modelIds === void 0 ? [] : _ref5$modelIds,
|
|
59
|
+
_ref5$remove = _ref5.remove,
|
|
60
|
+
remove = _ref5$remove === void 0 ? false : _ref5$remove;
|
|
61
|
+
return /*#__PURE__*/React.createElement(Property, {
|
|
62
|
+
id: name,
|
|
63
|
+
name: "sorter",
|
|
64
|
+
merge: true,
|
|
65
|
+
remove: remove
|
|
66
|
+
}, /*#__PURE__*/React.createElement(Property, {
|
|
67
|
+
id: "name",
|
|
68
|
+
name: "name",
|
|
69
|
+
value: name
|
|
70
|
+
}), /*#__PURE__*/React.createElement(Property, {
|
|
71
|
+
id: "label",
|
|
72
|
+
name: "label",
|
|
73
|
+
value: label
|
|
74
|
+
}), /*#__PURE__*/React.createElement(Property, {
|
|
75
|
+
id: "modelIds",
|
|
76
|
+
name: "modelIds",
|
|
77
|
+
value: modelIds
|
|
78
|
+
}));
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
ContentEntriesViewConfig.Filter = Filter;
|
|
82
|
+
ContentEntriesViewConfig.Sorter = Sorter;
|
|
83
|
+
var defaultContext = {
|
|
84
|
+
properties: []
|
|
85
|
+
};
|
|
86
|
+
var ViewContext = /*#__PURE__*/React.createContext(defaultContext);
|
|
87
|
+
export var ContentEntriesView = makeComposable("ContentEntriesView", function () {
|
|
88
|
+
var _useState = useState([]),
|
|
89
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
90
|
+
properties = _useState2[0],
|
|
91
|
+
setProperties = _useState2[1];
|
|
92
|
+
|
|
93
|
+
var context = {
|
|
94
|
+
properties: properties
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
var stateUpdater = function stateUpdater(properties) {
|
|
98
|
+
setProperties(properties);
|
|
99
|
+
};
|
|
100
|
+
|
|
101
|
+
return /*#__PURE__*/React.createElement(ViewContext.Provider, {
|
|
102
|
+
value: context
|
|
103
|
+
}, /*#__PURE__*/React.createElement(PropertyContainer, {
|
|
104
|
+
name: "view",
|
|
105
|
+
onChange: stateUpdater
|
|
106
|
+
}, /*#__PURE__*/React.createElement(ContentEntriesViewConfigApply, null), /*#__PURE__*/React.createElement(ContentEntriesViewRenderer, null)));
|
|
107
|
+
});
|
|
108
|
+
export var ContentEntriesViewRenderer = makeComposable("ContentEntriesViewRenderer");
|
|
109
|
+
|
|
110
|
+
function byName(name) {
|
|
111
|
+
return function (obj) {
|
|
112
|
+
return obj.name === name;
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
export function useContentEntriesViewConfig() {
|
|
117
|
+
var _useContext = useContext(ViewContext),
|
|
118
|
+
properties = _useContext.properties;
|
|
119
|
+
|
|
120
|
+
var filters = properties.filter(byName("filter")).map(function (f) {
|
|
121
|
+
return toObject(f);
|
|
122
|
+
});
|
|
123
|
+
var sorters = properties.filter(byName("sorter")).map(function (f) {
|
|
124
|
+
return toObject(f);
|
|
125
|
+
});
|
|
126
|
+
return {
|
|
127
|
+
filters: filters,
|
|
128
|
+
sorters: sorters
|
|
129
|
+
};
|
|
130
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["ContentEntriesViewConfig.tsx"],"names":["makeComposable","Compose","React","useContext","useState","Property","PropertyContainer","toObject","ContentEntriesViewConfigApply","children","createHOC","newChildren","BaseComponent","ConfigHOC","ContentEntriesViewConfig","Filter","name","element","modelIds","remove","Sorter","label","defaultContext","properties","ViewContext","createContext","ContentEntriesView","setProperties","context","stateUpdater","ContentEntriesViewRenderer","byName","obj","useContentEntriesViewConfig","filters","filter","map","f","sorters"],"mappings":"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","sourcesContent":["import { makeComposable, Compose, HigherOrderComponent } from \"@webiny/app-admin\";\nimport React, { useContext, useState } from \"react\";\nimport { Property, PropertyContainer, toObject } from \"./Property\";\n\ninterface ContentEntriesViewConfig extends React.FC<unknown> {\n Filter: React.FC<ContentEntriesViewConfigFilterProps>;\n Sorter: React.FC<ContentEntriesViewConfigSorterProps>;\n}\n\nconst ContentEntriesViewConfigApply = makeComposable(\n \"ContentEntriesViewConfigApply\",\n ({ children }) => {\n return <>{children}</>;\n }\n);\n\nconst createHOC =\n (newChildren: React.ReactNode): HigherOrderComponent =>\n BaseComponent => {\n return function ConfigHOC({ children }) {\n return (\n <BaseComponent>\n {newChildren}\n {children}\n </BaseComponent>\n );\n };\n };\n\nexport const ContentEntriesViewConfig: ContentEntriesViewConfig = ({ children }) => {\n return <Compose component={ContentEntriesViewConfigApply} with={createHOC(children)} />;\n};\n\nexport interface ContentEntriesViewConfigFilterProps {\n name: string;\n element?: React.ReactElement<unknown>;\n modelIds?: string[];\n remove?: boolean;\n}\n\nconst Filter: React.FC<ContentEntriesViewConfigFilterProps> = ({\n name,\n element,\n modelIds = [],\n remove = false\n}) => {\n return (\n <Property id={name} name={\"filter\"} merge={true} remove={remove}>\n <Property id={\"name\"} name={\"name\"} value={name} />\n <Property id={\"modelIds\"} name={\"modelIds\"} value={modelIds} />\n {element ? <Property id={\"element\"} name={\"element\"} value={element} /> : null}\n </Property>\n );\n};\n\nexport interface ContentEntriesViewConfigSorterProps {\n name: string;\n label: string;\n modelIds?: string[];\n remove?: boolean;\n}\n\nconst Sorter: React.FC<ContentEntriesViewConfigSorterProps> = ({\n name,\n label,\n modelIds = [],\n remove = false\n}) => {\n return (\n <Property id={name} name={\"sorter\"} merge={true} remove={remove}>\n <Property id={\"name\"} name={\"name\"} value={name} />\n <Property id={\"label\"} name={\"label\"} value={label} />\n <Property id={\"modelIds\"} name={\"modelIds\"} value={modelIds} />\n </Property>\n );\n};\n\nContentEntriesViewConfig.Filter = Filter;\nContentEntriesViewConfig.Sorter = Sorter;\n\ninterface ViewContext {\n properties: Property[];\n}\n\nconst defaultContext = { properties: [] };\n\nconst ViewContext = React.createContext<ViewContext>(defaultContext);\n\nexport const ContentEntriesView = makeComposable(\"ContentEntriesView\", () => {\n const [properties, setProperties] = useState<Property[]>([]);\n const context = { properties };\n\n const stateUpdater = (properties: Property[]) => {\n setProperties(properties);\n };\n\n return (\n <ViewContext.Provider value={context}>\n <PropertyContainer name={\"view\"} onChange={stateUpdater}>\n <ContentEntriesViewConfigApply />\n <ContentEntriesViewRenderer />\n </PropertyContainer>\n </ViewContext.Provider>\n );\n});\n\nexport const ContentEntriesViewRenderer = makeComposable(\"ContentEntriesViewRenderer\");\n\nfunction byName(name: string) {\n return (obj: Property) => obj.name === name;\n}\n\nexport interface ContentEntriesViewConfigFilter {\n name: string;\n element: React.ReactElement;\n modelIds: string[];\n}\n\nexport interface ContentEntriesViewConfigSorter {\n name: string;\n label: string;\n modelIds: string[];\n}\n\nexport function useContentEntriesViewConfig(): {\n filters: ContentEntriesViewConfigFilter[];\n sorters: ContentEntriesViewConfigSorter[];\n} {\n const { properties } = useContext(ViewContext);\n\n const filters = properties\n .filter(byName(\"filter\"))\n .map(f => toObject<ContentEntriesViewConfigFilter>(f));\n\n const sorters = properties\n .filter(byName(\"sorter\"))\n .map(f => toObject<ContentEntriesViewConfigSorter>(f));\n\n return {\n filters,\n sorters\n };\n}\n"]}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Note by @pavel910:
|
|
3
|
+
*
|
|
4
|
+
* TS is disabled in this file, as this is a wild experiment, and I need to come back and fix some types, which are not very
|
|
5
|
+
* obvious. I don't have time to do it right now. If the experiment is successful, I'll come back and clean this up, and
|
|
6
|
+
* extract this whole logic into a separate package, as this is a tiny framework for building data objects using React, and
|
|
7
|
+
* we might want to use it in many more places (all views, Page Builder Editor, etc.).
|
|
8
|
+
*
|
|
9
|
+
* More on this a bit later, if the experiment is successful.
|
|
10
|
+
*/
|
|
11
|
+
import { FC } from "react";
|
|
12
|
+
export declare function toObject<T = unknown>(property: Property): T;
|
|
13
|
+
export declare function toArray(objects: Property[]): {}[];
|
|
14
|
+
export interface Property<TValue = unknown> {
|
|
15
|
+
id?: string;
|
|
16
|
+
name: string;
|
|
17
|
+
value?: TValue;
|
|
18
|
+
properties?: Property[];
|
|
19
|
+
}
|
|
20
|
+
interface PropertyContainerProps {
|
|
21
|
+
name: string;
|
|
22
|
+
onChange: any;
|
|
23
|
+
}
|
|
24
|
+
export declare const PropertyContainer: FC<PropertyContainerProps>;
|
|
25
|
+
interface PropertyProps {
|
|
26
|
+
id?: string;
|
|
27
|
+
name: string;
|
|
28
|
+
value?: unknown;
|
|
29
|
+
merge?: boolean;
|
|
30
|
+
replace?: boolean;
|
|
31
|
+
remove?: boolean;
|
|
32
|
+
}
|
|
33
|
+
export declare const Property: FC<PropertyProps>;
|
|
34
|
+
export {};
|