@webiny/app-headless-cms 5.31.0-beta.1 → 5.32.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 CHANGED
@@ -15,6 +15,8 @@ var _plugins = require("@webiny/plugins");
15
15
 
16
16
  var _appAdmin = require("@webiny/app-admin");
17
17
 
18
+ var _app = require("@webiny/app");
19
+
18
20
  var _Cms = require("./admin/contexts/Cms");
19
21
 
20
22
  var _CmsMenuLoader = require("./admin/menus/CmsMenuLoader");
@@ -43,6 +45,14 @@ var HeadlessCMSExtension = function HeadlessCMSExtension(_ref2) {
43
45
 
44
46
  _plugins.plugins.register(_apiInformation.default);
45
47
 
48
+ _plugins.plugins.register(new _app.ApolloCacheObjectIdPlugin(function (obj) {
49
+ if (obj.__typename === "CmsContentModelField") {
50
+ return null;
51
+ }
52
+
53
+ return undefined;
54
+ }));
55
+
46
56
  return /*#__PURE__*/_react.default.createElement(_react.Fragment, null, /*#__PURE__*/_react.default.createElement(_ContentEntriesModule.ContentEntriesModule, null), /*#__PURE__*/_react.default.createElement(_appAdmin.Provider, {
47
57
  hoc: createHeadlessCMSProvider(createApolloClient)
48
58
  }), /*#__PURE__*/_react.default.createElement(_appAdmin.Plugins, null, /*#__PURE__*/_react.default.createElement(_CmsMenuLoader.CmsMenuLoader, null), /*#__PURE__*/_react.default.createElement(_DefaultOnEntryDelete.DefaultOnEntryDelete, null), /*#__PURE__*/_react.default.createElement(_DefaultOnEntryPublish.DefaultOnEntryPublish, null)));
@@ -1 +1 @@
1
- {"version":3,"names":["createHeadlessCMSProvider","createApolloClient","Component","HeadlessCMSProvider","children","HeadlessCMSExtension","plugins","register","apiInformation","HeadlessCMS","memo"],"sources":["HeadlessCMS.tsx"],"sourcesContent":["import React, { Fragment, memo } from \"react\";\nimport { plugins } from \"@webiny/plugins\";\nimport { Plugins, Provider } from \"@webiny/app-admin\";\nimport { ApolloClient } from \"apollo-client\";\nimport { CmsProvider } from \"./admin/contexts/Cms\";\nimport { CmsMenuLoader } from \"~/admin/menus/CmsMenuLoader\";\nimport apiInformation from \"./admin/plugins/apiInformation\";\nimport { ContentEntriesModule } from \"./admin/views/contentEntries/experiment/ContentEntriesModule\";\nimport { DefaultOnEntryDelete } from \"./admin/plugins/entry/DefaultOnEntryDelete\";\nimport { DefaultOnEntryPublish } from \"~/admin/plugins/entry/DefaultOnEntryPublish\";\n\nconst createHeadlessCMSProvider =\n (createApolloClient: CreateApolloClient) =>\n (Component: React.FC): React.FC => {\n return function HeadlessCMSProvider({ children }) {\n return (\n <CmsProvider createApolloClient={createApolloClient}>\n <Component>{children}</Component>\n </CmsProvider>\n );\n };\n };\n\ninterface CreateApolloClientParams {\n uri: string;\n}\ninterface CreateApolloClient {\n (params: CreateApolloClientParams): ApolloClient<any>;\n}\n\nexport interface HeadlessCMSProps {\n createApolloClient: CreateApolloClient;\n}\n\nconst HeadlessCMSExtension = ({ createApolloClient }: HeadlessCMSProps) => {\n plugins.register(apiInformation);\n\n return (\n <Fragment>\n <ContentEntriesModule />\n <Provider hoc={createHeadlessCMSProvider(createApolloClient)} />\n <Plugins>\n <CmsMenuLoader />\n <DefaultOnEntryDelete />\n <DefaultOnEntryPublish />\n </Plugins>\n </Fragment>\n );\n};\n\nexport const HeadlessCMS = memo(HeadlessCMSExtension);\n"],"mappings":";;;;;;;;;;;AAAA;;AACA;;AACA;;AAEA;;AACA;;AACA;;AACA;;AACA;;AACA;;AAEA,IAAMA,yBAAyB,GAC3B,SADEA,yBACF,CAACC,kBAAD;EAAA,OACA,UAACC,SAAD,EAAmC;IAC/B,OAAO,SAASC,mBAAT,OAA2C;MAAA,IAAZC,QAAY,QAAZA,QAAY;MAC9C,oBACI,6BAAC,gBAAD;QAAa,kBAAkB,EAAEH;MAAjC,gBACI,6BAAC,SAAD,QAAYG,QAAZ,CADJ,CADJ;IAKH,CAND;EAOH,CATD;AAAA,CADJ;;AAuBA,IAAMC,oBAAoB,GAAG,SAAvBA,oBAAuB,QAA8C;EAAA,IAA3CJ,kBAA2C,SAA3CA,kBAA2C;;EACvEK,gBAAA,CAAQC,QAAR,CAAiBC,uBAAjB;;EAEA,oBACI,6BAAC,eAAD,qBACI,6BAAC,0CAAD,OADJ,eAEI,6BAAC,kBAAD;IAAU,GAAG,EAAER,yBAAyB,CAACC,kBAAD;EAAxC,EAFJ,eAGI,6BAAC,iBAAD,qBACI,6BAAC,4BAAD,OADJ,eAEI,6BAAC,0CAAD,OAFJ,eAGI,6BAAC,4CAAD,OAHJ,CAHJ,CADJ;AAWH,CAdD;;AAgBO,IAAMQ,WAAW,gBAAG,IAAAC,WAAA,EAAKL,oBAAL,CAApB"}
1
+ {"version":3,"names":["createHeadlessCMSProvider","createApolloClient","Component","HeadlessCMSProvider","children","HeadlessCMSExtension","plugins","register","apiInformation","ApolloCacheObjectIdPlugin","obj","__typename","undefined","HeadlessCMS","memo"],"sources":["HeadlessCMS.tsx"],"sourcesContent":["import React, { Fragment, memo } from \"react\";\nimport { plugins } from \"@webiny/plugins\";\nimport { Plugins, Provider } from \"@webiny/app-admin\";\nimport { ApolloCacheObjectIdPlugin } from \"@webiny/app\";\nimport { ApolloClient } from \"apollo-client\";\nimport { CmsProvider } from \"./admin/contexts/Cms\";\nimport { CmsMenuLoader } from \"~/admin/menus/CmsMenuLoader\";\nimport apiInformation from \"./admin/plugins/apiInformation\";\nimport { ContentEntriesModule } from \"./admin/views/contentEntries/experiment/ContentEntriesModule\";\nimport { DefaultOnEntryDelete } from \"./admin/plugins/entry/DefaultOnEntryDelete\";\nimport { DefaultOnEntryPublish } from \"~/admin/plugins/entry/DefaultOnEntryPublish\";\n\nconst createHeadlessCMSProvider =\n (createApolloClient: CreateApolloClient) =>\n (Component: React.FC): React.FC => {\n return function HeadlessCMSProvider({ children }) {\n return (\n <CmsProvider createApolloClient={createApolloClient}>\n <Component>{children}</Component>\n </CmsProvider>\n );\n };\n };\n\ninterface CreateApolloClientParams {\n uri: string;\n}\ninterface CreateApolloClient {\n (params: CreateApolloClientParams): ApolloClient<any>;\n}\n\nexport interface HeadlessCMSProps {\n createApolloClient: CreateApolloClient;\n}\n\nconst HeadlessCMSExtension = ({ createApolloClient }: HeadlessCMSProps) => {\n plugins.register(apiInformation);\n\n plugins.register(\n new ApolloCacheObjectIdPlugin(obj => {\n if (obj.__typename === \"CmsContentModelField\") {\n return null;\n }\n\n return undefined;\n })\n );\n\n return (\n <Fragment>\n <ContentEntriesModule />\n <Provider hoc={createHeadlessCMSProvider(createApolloClient)} />\n <Plugins>\n <CmsMenuLoader />\n <DefaultOnEntryDelete />\n <DefaultOnEntryPublish />\n </Plugins>\n </Fragment>\n );\n};\n\nexport const HeadlessCMS = memo(HeadlessCMSExtension);\n"],"mappings":";;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AAEA;;AACA;;AACA;;AACA;;AACA;;AACA;;AAEA,IAAMA,yBAAyB,GAC3B,SADEA,yBACF,CAACC,kBAAD;EAAA,OACA,UAACC,SAAD,EAAmC;IAC/B,OAAO,SAASC,mBAAT,OAA2C;MAAA,IAAZC,QAAY,QAAZA,QAAY;MAC9C,oBACI,6BAAC,gBAAD;QAAa,kBAAkB,EAAEH;MAAjC,gBACI,6BAAC,SAAD,QAAYG,QAAZ,CADJ,CADJ;IAKH,CAND;EAOH,CATD;AAAA,CADJ;;AAuBA,IAAMC,oBAAoB,GAAG,SAAvBA,oBAAuB,QAA8C;EAAA,IAA3CJ,kBAA2C,SAA3CA,kBAA2C;;EACvEK,gBAAA,CAAQC,QAAR,CAAiBC,uBAAjB;;EAEAF,gBAAA,CAAQC,QAAR,CACI,IAAIE,8BAAJ,CAA8B,UAAAC,GAAG,EAAI;IACjC,IAAIA,GAAG,CAACC,UAAJ,KAAmB,sBAAvB,EAA+C;MAC3C,OAAO,IAAP;IACH;;IAED,OAAOC,SAAP;EACH,CAND,CADJ;;EAUA,oBACI,6BAAC,eAAD,qBACI,6BAAC,0CAAD,OADJ,eAEI,6BAAC,kBAAD;IAAU,GAAG,EAAEZ,yBAAyB,CAACC,kBAAD;EAAxC,EAFJ,eAGI,6BAAC,iBAAD,qBACI,6BAAC,4BAAD,OADJ,eAEI,6BAAC,0CAAD,OAFJ,eAGI,6BAAC,4CAAD,OAHJ,CAHJ,CADJ;AAWH,CAxBD;;AA0BO,IAAMY,WAAW,gBAAG,IAAAC,WAAA,EAAKT,oBAAL,CAApB"}
@@ -1,3 +1,3 @@
1
- import { CacheGetObjectIdPlugin } from "@webiny/app/types";
2
- declare const plugin: CacheGetObjectIdPlugin;
3
- export default plugin;
1
+ import { ApolloCacheObjectIdPlugin } from "@webiny/app";
2
+ declare const _default: ApolloCacheObjectIdPlugin<import("@webiny/app/plugins/ApolloCacheObjectIdPlugin").ApolloCacheObject>;
3
+ export default _default;
@@ -4,17 +4,17 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
- var plugin = {
8
- type: "cache-get-object-id",
9
- getObjectId: function getObjectId(obj) {
10
- switch (obj.__typename) {
11
- case "CmsContentModel":
12
- return obj.modelId;
13
7
 
14
- default:
15
- return undefined;
16
- }
8
+ var _app = require("@webiny/app");
9
+
10
+ var _default = new _app.ApolloCacheObjectIdPlugin(function (obj) {
11
+ switch (obj.__typename) {
12
+ case "CmsContentModel":
13
+ return "".concat(obj.__typename, ":").concat(obj.modelId);
14
+
15
+ default:
16
+ return undefined;
17
17
  }
18
- };
19
- var _default = plugin;
18
+ });
19
+
20
20
  exports.default = _default;
@@ -1 +1 @@
1
- {"version":3,"names":["plugin","type","getObjectId","obj","__typename","modelId","undefined"],"sources":["getObjectId.ts"],"sourcesContent":["import { CacheGetObjectIdPlugin } from \"@webiny/app/types\";\n\nconst plugin: CacheGetObjectIdPlugin = {\n type: \"cache-get-object-id\",\n getObjectId(obj): string | undefined {\n switch (obj.__typename) {\n case \"CmsContentModel\":\n return obj.modelId;\n default:\n return undefined;\n }\n }\n};\n\nexport default plugin;\n"],"mappings":";;;;;;AAEA,IAAMA,MAA8B,GAAG;EACnCC,IAAI,EAAE,qBAD6B;EAEnCC,WAFmC,uBAEvBC,GAFuB,EAEE;IACjC,QAAQA,GAAG,CAACC,UAAZ;MACI,KAAK,iBAAL;QACI,OAAOD,GAAG,CAACE,OAAX;;MACJ;QACI,OAAOC,SAAP;IAJR;EAMH;AATkC,CAAvC;eAYeN,M"}
1
+ {"version":3,"names":["ApolloCacheObjectIdPlugin","obj","__typename","modelId","undefined"],"sources":["getObjectId.ts"],"sourcesContent":["import { ApolloCacheObjectIdPlugin } from \"@webiny/app\";\n\nexport default new ApolloCacheObjectIdPlugin(obj => {\n switch (obj.__typename) {\n case \"CmsContentModel\":\n return `${obj.__typename}:${obj.modelId}`;\n default:\n return undefined;\n }\n});\n"],"mappings":";;;;;;;AAAA;;eAEe,IAAIA,8BAAJ,CAA8B,UAAAC,GAAG,EAAI;EAChD,QAAQA,GAAG,CAACC,UAAZ;IACI,KAAK,iBAAL;MACI,iBAAUD,GAAG,CAACC,UAAd,cAA4BD,GAAG,CAACE,OAAhC;;IACJ;MACI,OAAOC,SAAP;EAJR;AAMH,CAPc,C"}
@@ -1,5 +1,5 @@
1
1
  /// <reference types="react" />
2
- declare const _default: () => (import("../../types").CmsEditorFormSettingsPlugin | import("../../types").CmsIconsPlugin | import("../../types").CmsFieldValueTransformer[] | import("@webiny/app/types").CacheGetObjectIdPlugin | import("@webiny/app/types").RoutePlugin[] | import("@webiny/app-admin/types").AdminInstallationPlugin | import("@webiny/app-admin/types").AdminAppPermissionRendererPlugin | import("../../types").CmsContentDetailsPlugin[] | {
2
+ declare const _default: () => (import("../../types").CmsEditorFormSettingsPlugin | import("../../types").CmsIconsPlugin | import("@webiny/app-admin/types").AdminInstallationPlugin | import("@webiny/app-admin/types").AdminAppPermissionRendererPlugin | import("../../types").CmsFieldValueTransformer[] | import("@webiny/app").ApolloCacheObjectIdPlugin<import("@webiny/app/plugins/ApolloCacheObjectIdPlugin").ApolloCacheObject> | import("@webiny/app/types").RoutePlugin[] | import("../../types").CmsContentDetailsPlugin[] | {
3
3
  name: string;
4
4
  type: string;
5
5
  render(): JSX.Element;
@@ -182,6 +182,7 @@ var ContentModelsDataList = function ContentModelsDataList(_ref) {
182
182
 
183
183
  (0, _cache.removeModelFromListCache)(cache, item);
184
184
  (0, _cache.removeModelFromGroupCache)(cache, item);
185
+ (0, _cache.removeModelFromCache)(client, item);
185
186
  showSnackbar(t(_templateObject6 || (_templateObject6 = (0, _taggedTemplateLiteral2.default)(["Content model {name} deleted successfully!."])))({
186
187
  name: item.name
187
188
  }));
@@ -1 +1 @@
1
- {"version":3,"names":["t","i18n","namespace","SORTERS","label","sorters","rightAlign","css","alignItems","justifyContent","listItemMinHeight","minHeight","ContentModelsDataList","canCreate","onCreate","onClone","useState","filter","setFilter","sort","setSort","useRouter","history","client","useApolloClient","useSnackbar","showSnackbar","useConfirmationDialog","dataTestId","showConfirmation","useQuery","GQL","LIST_CONTENT_MODELS","data","loading","usePermission","canDelete","canEdit","filterData","useCallback","name","toLowerCase","includes","sortData","list","deserializeSorters","sortField","sortOrderBy","orderBy","models","get","deleteRecord","item","mutate","mutation","DELETE_CONTENT_MODEL","variables","modelId","update","cache","error","deleteContentModel","message","title","removeModelFromListCache","removeModelFromGroupCache","editRecord","contentModel","push","viewContentEntries","contentModelsDataListModalOverlay","useMemo","map","filteredData","contentModels","disableViewContent","fields","length","time","savedOn","plugin"],"sources":["ContentModelsDataList.tsx"],"sourcesContent":["import React, { useCallback, useMemo, useState } from \"react\";\n/**\n * Package timeago-react does not have types.\n */\n// @ts-ignore\nimport TimeAgo from \"timeago-react\";\nimport { css } from \"emotion\";\nimport get from \"lodash/get\";\nimport { useRouter } from \"@webiny/react-router\";\nimport { DeleteIcon, EditIcon } from \"@webiny/ui/List/DataList/icons\";\nimport { ReactComponent as ViewListIcon } from \"../../icons/view_list.svg\";\nimport { ReactComponent as CloneIcon } from \"../../icons/clone.svg\";\nimport { useApolloClient, useQuery } from \"../../hooks\";\nimport { useSnackbar } from \"@webiny/app-admin/hooks/useSnackbar\";\nimport * as UIL from \"@webiny/ui/List\";\nimport { ButtonIcon, ButtonSecondary, IconButton } from \"@webiny/ui/Button\";\nimport { Tooltip } from \"@webiny/ui/Tooltip\";\nimport { i18n } from \"@webiny/app/i18n\";\nimport { useConfirmationDialog } from \"@webiny/app-admin/hooks/useConfirmationDialog\";\nimport { removeModelFromGroupCache, removeModelFromListCache } from \"./cache\";\nimport * as GQL from \"../../viewsGraphql\";\nimport { ReactComponent as AddIcon } from \"@webiny/app-admin/assets/icons/add-18px.svg\";\nimport SearchUI from \"@webiny/app-admin/components/SearchUI\";\nimport { deserializeSorters } from \"../utils\";\nimport orderBy from \"lodash/orderBy\";\nimport { Cell, Grid } from \"@webiny/ui/Grid\";\nimport { Select } from \"@webiny/ui/Select\";\nimport { ReactComponent as FilterIcon } from \"@webiny/app-admin/assets/icons/filter-24px.svg\";\nimport { CmsEditorContentModel, CmsModel } from \"~/types\";\nimport {\n DeleteCmsModelMutationResponse,\n DeleteCmsModelMutationVariables,\n ListCmsModelsQueryResponse\n} from \"../../viewsGraphql\";\nimport usePermission from \"~/admin/hooks/usePermission\";\n\nconst t = i18n.namespace(\"FormsApp.ContentModelsDataList\");\n\ninterface Sorter {\n label: string;\n sorters: string;\n}\nconst SORTERS: Sorter[] = [\n {\n label: t`Newest to oldest`,\n sorters: \"savedOn_DESC\"\n },\n {\n label: t`Oldest to newest`,\n sorters: \"savedOn_ASC\"\n },\n {\n label: t`Name A-Z`,\n sorters: \"name_ASC\"\n },\n {\n label: t`Name Z-A`,\n sorters: \"name_DESC\"\n }\n];\n\nconst rightAlign = css({\n alignItems: \"flex-end !important\",\n justifyContent: \"center !important\"\n});\n\nconst listItemMinHeight = css({\n minHeight: \"66px !important\"\n});\n\ninterface ContentModelsDataListProps {\n canCreate: boolean;\n onCreate: () => void;\n onClone: (contentModel: CmsEditorContentModel) => void;\n}\nconst ContentModelsDataList: React.FC<ContentModelsDataListProps> = ({\n canCreate,\n onCreate,\n onClone\n}) => {\n const [filter, setFilter] = useState<string>(\"\");\n const [sort, setSort] = useState<string>(SORTERS[0].sorters);\n const { history } = useRouter();\n const client = useApolloClient();\n const { showSnackbar } = useSnackbar();\n const { showConfirmation } = useConfirmationDialog({\n dataTestId: \"cms-delete-content-model-dialog\"\n });\n const { data, loading } = useQuery<ListCmsModelsQueryResponse>(GQL.LIST_CONTENT_MODELS);\n const { canDelete, canEdit } = usePermission();\n\n const filterData = useCallback(\n ({ name }: Pick<CmsModel, \"name\">): boolean => {\n return name.toLowerCase().includes(filter);\n },\n [filter]\n );\n\n const sortData = useCallback(\n (list: CmsModel[]): CmsModel[] => {\n if (!sort) {\n return list;\n }\n const [sortField, sortOrderBy] = deserializeSorters(sort);\n return orderBy(list, [sortField], [sortOrderBy]);\n },\n [sort]\n );\n\n const models: CmsModel[] = loading ? [] : get(data, \"listContentModels.data\", []);\n\n const deleteRecord = async (item: CmsModel): Promise<void> => {\n showConfirmation(async () => {\n await client.mutate<DeleteCmsModelMutationResponse, DeleteCmsModelMutationVariables>({\n mutation: GQL.DELETE_CONTENT_MODEL,\n variables: { modelId: item.modelId },\n update(cache, { data }) {\n if (!data) {\n showSnackbar(\"Missing data on Delete Content Model Mutation Response.\");\n return;\n }\n const { error } = data.deleteContentModel;\n\n if (error) {\n showSnackbar(error.message, {\n title: t`Something unexpected happened.`\n });\n return;\n }\n\n removeModelFromListCache(cache, item);\n removeModelFromGroupCache(cache, item);\n\n showSnackbar(\n t`Content model {name} deleted successfully!.`({ name: item.name })\n );\n }\n });\n });\n };\n\n const editRecord = (contentModel: CmsModel): void => {\n history.push(\"/cms/content-models/\" + contentModel.modelId);\n };\n\n const viewContentEntries = useCallback(contentModel => {\n return () => history.push(\"/cms/content-entries/\" + contentModel.modelId);\n }, []);\n\n const contentModelsDataListModalOverlay = useMemo(\n () => (\n <UIL.DataListModalOverlay>\n <Grid>\n <Cell span={12}>\n <Select\n value={sort}\n onChange={setSort}\n label={t`Sort by`}\n description={\"Sort content models by\"}\n >\n {SORTERS.map(({ label, sorters }) => {\n return (\n <option key={label} value={sorters}>\n {label}\n </option>\n );\n })}\n </Select>\n </Cell>\n </Grid>\n </UIL.DataListModalOverlay>\n ),\n [sort]\n );\n\n const filteredData = filter === \"\" ? models : models.filter(filterData);\n const contentModels = sortData(filteredData);\n\n return (\n <UIL.DataList\n loading={loading}\n data={contentModels}\n title={t`Content Models`}\n actions={\n canCreate ? (\n <ButtonSecondary data-testid=\"new-record-button\" onClick={onCreate}>\n <ButtonIcon icon={<AddIcon />} /> {t`New Model`}\n </ButtonSecondary>\n ) : null\n }\n search={\n <SearchUI\n value={filter}\n onChange={setFilter}\n inputPlaceholder={t`Search content models`}\n />\n }\n modalOverlay={contentModelsDataListModalOverlay}\n modalOverlayAction={\n <UIL.DataListModalOverlayAction\n icon={<FilterIcon />}\n data-testid={\"default-data-list.filter\"}\n />\n }\n >\n {({ data = [] }: { data: CmsModel[] }) => (\n <UIL.List data-testid=\"default-data-list\">\n {data.map(contentModel => {\n const disableViewContent = contentModel.fields.length === 0;\n const message = disableViewContent\n ? \"To view the content, you first need to add a field and save the model\"\n : \"View content\";\n return (\n <UIL.ListItem key={contentModel.modelId} className={listItemMinHeight}>\n <UIL.ListItemText>\n {contentModel.name}\n <UIL.ListItemTextSecondary>\n {t`Last modified: {time}.`({\n time: <TimeAgo datetime={contentModel.savedOn} />\n })}\n </UIL.ListItemTextSecondary>\n </UIL.ListItemText>\n <UIL.ListItemMeta className={rightAlign}>\n <UIL.ListActions>\n {canEdit(contentModel, \"cms.contentModel\") && (\n <>\n <Tooltip\n content={t`{message}`({ message })}\n placement={\"top\"}\n >\n <IconButton\n data-testid={\n \"cms-view-content-model-button\"\n }\n icon={<ViewListIcon />}\n label={t`View entries`}\n onClick={viewContentEntries(contentModel)}\n disabled={disableViewContent}\n />\n </Tooltip>\n {contentModel.plugin ? (\n <Tooltip\n content={t`Content model is registered via a plugin.`}\n placement={\"top\"}\n >\n <EditIcon\n disabled\n data-testid={\n \"cms-edit-content-model-button\"\n }\n />\n </Tooltip>\n ) : (\n <Tooltip\n content={t`Edit content model`}\n placement={\"top\"}\n >\n <EditIcon\n onClick={() => editRecord(contentModel)}\n data-testid={\n \"cms-edit-content-model-button\"\n }\n />\n </Tooltip>\n )}\n </>\n )}\n\n <Tooltip content={\"Clone content model\"} placement={\"top\"}>\n <IconButton\n data-testid={\"cms-clone-content-model-button\"}\n icon={<CloneIcon />}\n label={t`View entries`}\n onClick={() => onClone(contentModel)}\n />\n </Tooltip>\n\n {canDelete(contentModel, \"cms.contentModel\") &&\n contentModel.plugin ? (\n <Tooltip\n content={t`Content model is registered via a plugin.`}\n placement={\"top\"}\n >\n <DeleteIcon\n disabled\n data-testid={\"cms-delete-content-model-button\"}\n />\n </Tooltip>\n ) : (\n <Tooltip\n content={t`Delete content model`}\n placement={\"top\"}\n >\n <DeleteIcon\n onClick={() => deleteRecord(contentModel)}\n data-testid={\"cms-delete-content-model-button\"}\n />\n </Tooltip>\n )}\n </UIL.ListActions>\n </UIL.ListItemMeta>\n </UIL.ListItem>\n );\n })}\n </UIL.List>\n )}\n </UIL.DataList>\n );\n};\n\nexport default ContentModelsDataList;\n"],"mappings":"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"}
1
+ {"version":3,"names":["t","i18n","namespace","SORTERS","label","sorters","rightAlign","css","alignItems","justifyContent","listItemMinHeight","minHeight","ContentModelsDataList","canCreate","onCreate","onClone","useState","filter","setFilter","sort","setSort","useRouter","history","client","useApolloClient","useSnackbar","showSnackbar","useConfirmationDialog","dataTestId","showConfirmation","useQuery","GQL","LIST_CONTENT_MODELS","data","loading","usePermission","canDelete","canEdit","filterData","useCallback","name","toLowerCase","includes","sortData","list","deserializeSorters","sortField","sortOrderBy","orderBy","models","get","deleteRecord","item","mutate","mutation","DELETE_CONTENT_MODEL","variables","modelId","update","cache","error","deleteContentModel","message","title","removeModelFromListCache","removeModelFromGroupCache","removeModelFromCache","editRecord","contentModel","push","viewContentEntries","contentModelsDataListModalOverlay","useMemo","map","filteredData","contentModels","disableViewContent","fields","length","time","savedOn","plugin"],"sources":["ContentModelsDataList.tsx"],"sourcesContent":["import React, { useCallback, useMemo, useState } from \"react\";\n/**\n * Package timeago-react does not have types.\n */\n// @ts-ignore\nimport TimeAgo from \"timeago-react\";\nimport { css } from \"emotion\";\nimport get from \"lodash/get\";\nimport { useRouter } from \"@webiny/react-router\";\nimport { DeleteIcon, EditIcon } from \"@webiny/ui/List/DataList/icons\";\nimport { ReactComponent as ViewListIcon } from \"../../icons/view_list.svg\";\nimport { ReactComponent as CloneIcon } from \"../../icons/clone.svg\";\nimport { useApolloClient, useQuery } from \"../../hooks\";\nimport { useSnackbar } from \"@webiny/app-admin/hooks/useSnackbar\";\nimport * as UIL from \"@webiny/ui/List\";\nimport { ButtonIcon, ButtonSecondary, IconButton } from \"@webiny/ui/Button\";\nimport { Tooltip } from \"@webiny/ui/Tooltip\";\nimport { i18n } from \"@webiny/app/i18n\";\nimport { useConfirmationDialog } from \"@webiny/app-admin/hooks/useConfirmationDialog\";\nimport { removeModelFromGroupCache, removeModelFromListCache, removeModelFromCache } from \"./cache\";\nimport * as GQL from \"../../viewsGraphql\";\nimport { ReactComponent as AddIcon } from \"@webiny/app-admin/assets/icons/add-18px.svg\";\nimport SearchUI from \"@webiny/app-admin/components/SearchUI\";\nimport { deserializeSorters } from \"../utils\";\nimport orderBy from \"lodash/orderBy\";\nimport { Cell, Grid } from \"@webiny/ui/Grid\";\nimport { Select } from \"@webiny/ui/Select\";\nimport { ReactComponent as FilterIcon } from \"@webiny/app-admin/assets/icons/filter-24px.svg\";\nimport { CmsEditorContentModel, CmsModel } from \"~/types\";\nimport {\n DeleteCmsModelMutationResponse,\n DeleteCmsModelMutationVariables,\n ListCmsModelsQueryResponse\n} from \"../../viewsGraphql\";\nimport usePermission from \"~/admin/hooks/usePermission\";\n\nconst t = i18n.namespace(\"FormsApp.ContentModelsDataList\");\n\ninterface Sorter {\n label: string;\n sorters: string;\n}\nconst SORTERS: Sorter[] = [\n {\n label: t`Newest to oldest`,\n sorters: \"savedOn_DESC\"\n },\n {\n label: t`Oldest to newest`,\n sorters: \"savedOn_ASC\"\n },\n {\n label: t`Name A-Z`,\n sorters: \"name_ASC\"\n },\n {\n label: t`Name Z-A`,\n sorters: \"name_DESC\"\n }\n];\n\nconst rightAlign = css({\n alignItems: \"flex-end !important\",\n justifyContent: \"center !important\"\n});\n\nconst listItemMinHeight = css({\n minHeight: \"66px !important\"\n});\n\ninterface ContentModelsDataListProps {\n canCreate: boolean;\n onCreate: () => void;\n onClone: (contentModel: CmsEditorContentModel) => void;\n}\nconst ContentModelsDataList: React.FC<ContentModelsDataListProps> = ({\n canCreate,\n onCreate,\n onClone\n}) => {\n const [filter, setFilter] = useState<string>(\"\");\n const [sort, setSort] = useState<string>(SORTERS[0].sorters);\n const { history } = useRouter();\n const client = useApolloClient();\n const { showSnackbar } = useSnackbar();\n const { showConfirmation } = useConfirmationDialog({\n dataTestId: \"cms-delete-content-model-dialog\"\n });\n const { data, loading } = useQuery<ListCmsModelsQueryResponse>(GQL.LIST_CONTENT_MODELS);\n const { canDelete, canEdit } = usePermission();\n\n const filterData = useCallback(\n ({ name }: Pick<CmsModel, \"name\">): boolean => {\n return name.toLowerCase().includes(filter);\n },\n [filter]\n );\n\n const sortData = useCallback(\n (list: CmsModel[]): CmsModel[] => {\n if (!sort) {\n return list;\n }\n const [sortField, sortOrderBy] = deserializeSorters(sort);\n return orderBy(list, [sortField], [sortOrderBy]);\n },\n [sort]\n );\n\n const models: CmsModel[] = loading ? [] : get(data, \"listContentModels.data\", []);\n\n const deleteRecord = async (item: CmsModel): Promise<void> => {\n showConfirmation(async () => {\n await client.mutate<DeleteCmsModelMutationResponse, DeleteCmsModelMutationVariables>({\n mutation: GQL.DELETE_CONTENT_MODEL,\n variables: { modelId: item.modelId },\n update(cache, { data }) {\n if (!data) {\n showSnackbar(\"Missing data on Delete Content Model Mutation Response.\");\n return;\n }\n const { error } = data.deleteContentModel;\n\n if (error) {\n showSnackbar(error.message, {\n title: t`Something unexpected happened.`\n });\n return;\n }\n\n removeModelFromListCache(cache, item);\n removeModelFromGroupCache(cache, item);\n removeModelFromCache(client, item);\n\n showSnackbar(\n t`Content model {name} deleted successfully!.`({ name: item.name })\n );\n }\n });\n });\n };\n\n const editRecord = (contentModel: CmsModel): void => {\n history.push(\"/cms/content-models/\" + contentModel.modelId);\n };\n\n const viewContentEntries = useCallback(contentModel => {\n return () => history.push(\"/cms/content-entries/\" + contentModel.modelId);\n }, []);\n\n const contentModelsDataListModalOverlay = useMemo(\n () => (\n <UIL.DataListModalOverlay>\n <Grid>\n <Cell span={12}>\n <Select\n value={sort}\n onChange={setSort}\n label={t`Sort by`}\n description={\"Sort content models by\"}\n >\n {SORTERS.map(({ label, sorters }) => {\n return (\n <option key={label} value={sorters}>\n {label}\n </option>\n );\n })}\n </Select>\n </Cell>\n </Grid>\n </UIL.DataListModalOverlay>\n ),\n [sort]\n );\n\n const filteredData = filter === \"\" ? models : models.filter(filterData);\n const contentModels = sortData(filteredData);\n\n return (\n <UIL.DataList\n loading={loading}\n data={contentModels}\n title={t`Content Models`}\n actions={\n canCreate ? (\n <ButtonSecondary data-testid=\"new-record-button\" onClick={onCreate}>\n <ButtonIcon icon={<AddIcon />} /> {t`New Model`}\n </ButtonSecondary>\n ) : null\n }\n search={\n <SearchUI\n value={filter}\n onChange={setFilter}\n inputPlaceholder={t`Search content models`}\n />\n }\n modalOverlay={contentModelsDataListModalOverlay}\n modalOverlayAction={\n <UIL.DataListModalOverlayAction\n icon={<FilterIcon />}\n data-testid={\"default-data-list.filter\"}\n />\n }\n >\n {({ data = [] }: { data: CmsModel[] }) => (\n <UIL.List data-testid=\"default-data-list\">\n {data.map(contentModel => {\n const disableViewContent = contentModel.fields.length === 0;\n const message = disableViewContent\n ? \"To view the content, you first need to add a field and save the model\"\n : \"View content\";\n return (\n <UIL.ListItem key={contentModel.modelId} className={listItemMinHeight}>\n <UIL.ListItemText>\n {contentModel.name}\n <UIL.ListItemTextSecondary>\n {t`Last modified: {time}.`({\n time: <TimeAgo datetime={contentModel.savedOn} />\n })}\n </UIL.ListItemTextSecondary>\n </UIL.ListItemText>\n <UIL.ListItemMeta className={rightAlign}>\n <UIL.ListActions>\n {canEdit(contentModel, \"cms.contentModel\") && (\n <>\n <Tooltip\n content={t`{message}`({ message })}\n placement={\"top\"}\n >\n <IconButton\n data-testid={\n \"cms-view-content-model-button\"\n }\n icon={<ViewListIcon />}\n label={t`View entries`}\n onClick={viewContentEntries(contentModel)}\n disabled={disableViewContent}\n />\n </Tooltip>\n {contentModel.plugin ? (\n <Tooltip\n content={t`Content model is registered via a plugin.`}\n placement={\"top\"}\n >\n <EditIcon\n disabled\n data-testid={\n \"cms-edit-content-model-button\"\n }\n />\n </Tooltip>\n ) : (\n <Tooltip\n content={t`Edit content model`}\n placement={\"top\"}\n >\n <EditIcon\n onClick={() => editRecord(contentModel)}\n data-testid={\n \"cms-edit-content-model-button\"\n }\n />\n </Tooltip>\n )}\n </>\n )}\n\n <Tooltip content={\"Clone content model\"} placement={\"top\"}>\n <IconButton\n data-testid={\"cms-clone-content-model-button\"}\n icon={<CloneIcon />}\n label={t`View entries`}\n onClick={() => onClone(contentModel)}\n />\n </Tooltip>\n\n {canDelete(contentModel, \"cms.contentModel\") &&\n contentModel.plugin ? (\n <Tooltip\n content={t`Content model is registered via a plugin.`}\n placement={\"top\"}\n >\n <DeleteIcon\n disabled\n data-testid={\"cms-delete-content-model-button\"}\n />\n </Tooltip>\n ) : (\n <Tooltip\n content={t`Delete content model`}\n placement={\"top\"}\n >\n <DeleteIcon\n onClick={() => deleteRecord(contentModel)}\n data-testid={\"cms-delete-content-model-button\"}\n />\n </Tooltip>\n )}\n </UIL.ListActions>\n </UIL.ListItemMeta>\n </UIL.ListItem>\n );\n })}\n </UIL.List>\n )}\n </UIL.DataList>\n );\n};\n\nexport default ContentModelsDataList;\n"],"mappings":"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"}
@@ -1,6 +1,13 @@
1
- import { CmsEditorContentModel } from "../../../types";
2
1
  import { DataProxy } from "apollo-cache";
2
+ import ApolloClient from "apollo-client";
3
+ import { CmsEditorContentModel } from "../../../types";
3
4
  export declare const addModelToListCache: (cache: DataProxy, model: CmsEditorContentModel) => void;
4
5
  export declare const addModelToGroupCache: (cache: DataProxy, model: CmsEditorContentModel) => void;
6
+ /**
7
+ * This function is an ugly hack, but I don't know a better way to remove items from cache in Apollo Client v2.
8
+ * When a Content Model is deleted, we need to remove it from cache, because a model can be recreated with the same
9
+ * modelId, and it will cause problems, because Apollo will think that the data in cache belongs to this new model.
10
+ */
11
+ export declare const removeModelFromCache: (client: ApolloClient<any>, model: CmsEditorContentModel) => void;
5
12
  export declare const removeModelFromListCache: (cache: DataProxy, model: CmsEditorContentModel) => void;
6
13
  export declare const removeModelFromGroupCache: (cache: DataProxy, model: CmsEditorContentModel) => void;
@@ -5,7 +5,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.removeModelFromListCache = exports.removeModelFromGroupCache = exports.addModelToListCache = exports.addModelToGroupCache = void 0;
8
+ exports.removeModelFromListCache = exports.removeModelFromGroupCache = exports.removeModelFromCache = exports.addModelToListCache = exports.addModelToGroupCache = void 0;
9
9
 
10
10
  var _dotPropImmutable = _interopRequireDefault(require("dot-prop-immutable"));
11
11
 
@@ -53,9 +53,30 @@ var addModelToGroupCache = function addModelToGroupCache(cache, model) {
53
53
  }
54
54
  });
55
55
  };
56
+ /**
57
+ * This function is an ugly hack, but I don't know a better way to remove items from cache in Apollo Client v2.
58
+ * When a Content Model is deleted, we need to remove it from cache, because a model can be recreated with the same
59
+ * modelId, and it will cause problems, because Apollo will think that the data in cache belongs to this new model.
60
+ */
61
+
56
62
 
57
63
  exports.addModelToGroupCache = addModelToGroupCache;
58
64
 
65
+ var removeModelFromCache = function removeModelFromCache(client, model) {
66
+ var id = "CmsContentModel:".concat(model.modelId); // @ts-ignore
67
+
68
+ client.cache.data.delete(id); // @ts-ignore
69
+
70
+ Object.keys(client.cache.data.data).forEach(function (key) {
71
+ if (key.startsWith("".concat(id, ".")) || key.startsWith("$".concat(id, "."))) {
72
+ // @ts-ignore
73
+ client.cache.data.delete(key);
74
+ }
75
+ });
76
+ };
77
+
78
+ exports.removeModelFromCache = removeModelFromCache;
79
+
59
80
  var removeModelFromListCache = function removeModelFromListCache(cache, model) {
60
81
  var response = cache.readQuery({
61
82
  query: _viewsGraphql.LIST_CONTENT_MODELS
@@ -1 +1 @@
1
- {"version":3,"names":["addModelToListCache","cache","model","response","readQuery","query","LIST_CONTENT_MODELS","listContentModels","newModelIndex","data","length","writeQuery","dotProp","set","addModelToGroupCache","LIST_MENU_CONTENT_GROUPS_MODELS","listContentModelGroups","groupsList","groupIndex","findIndex","g","id","group","newGroupModelIndex","contentModels","removeModelFromListCache","modelIndex","m","modelId","delete","removeModelFromGroupCache"],"sources":["cache.ts"],"sourcesContent":["import dotProp from \"dot-prop-immutable\";\nimport { LIST_CONTENT_MODELS, LIST_MENU_CONTENT_GROUPS_MODELS } from \"../../viewsGraphql\";\nimport { CmsEditorContentModel } from \"~/types\";\nimport { DataProxy } from \"apollo-cache\";\nimport { ListCmsModelsQueryResponse, ListMenuCmsGroupsQueryResponse } from \"../../viewsGraphql\";\n\nexport const addModelToListCache = (cache: DataProxy, model: CmsEditorContentModel): void => {\n const response = cache.readQuery<ListCmsModelsQueryResponse>({\n query: LIST_CONTENT_MODELS\n });\n if (!response || !response.listContentModels) {\n return;\n }\n const { listContentModels } = response;\n const newModelIndex = listContentModels.data.length;\n\n cache.writeQuery({\n query: LIST_CONTENT_MODELS,\n data: {\n listContentModels: dotProp.set(listContentModels, `data.${newModelIndex}`, model)\n }\n });\n};\n\nexport const addModelToGroupCache = (cache: DataProxy, model: CmsEditorContentModel): void => {\n const response = cache.readQuery<ListMenuCmsGroupsQueryResponse>({\n query: LIST_MENU_CONTENT_GROUPS_MODELS\n });\n if (!response || !response.listContentModelGroups) {\n return;\n }\n\n const { listContentModelGroups: groupsList } = response;\n\n const groupIndex = groupsList.data.findIndex(g => g.id === model.group.id);\n const newGroupModelIndex = groupsList.data[groupIndex].contentModels.length;\n\n cache.writeQuery({\n query: LIST_MENU_CONTENT_GROUPS_MODELS,\n data: {\n listContentModelGroups: dotProp.set(\n groupsList,\n `data.${groupIndex}.contentModels.${newGroupModelIndex}`,\n model\n )\n }\n });\n};\n\nexport const removeModelFromListCache = (cache: DataProxy, model: CmsEditorContentModel): void => {\n const response = cache.readQuery<ListCmsModelsQueryResponse>({\n query: LIST_CONTENT_MODELS\n });\n if (!response || !response.listContentModels) {\n return;\n }\n const { listContentModels } = response;\n const modelIndex = listContentModels.data.findIndex(m => m.modelId === model.modelId);\n\n cache.writeQuery({\n query: LIST_CONTENT_MODELS,\n data: {\n listContentModels: dotProp.delete(listContentModels, `data.${modelIndex}`)\n }\n });\n};\n\nexport const removeModelFromGroupCache = (cache: DataProxy, model: CmsEditorContentModel): void => {\n const response = cache.readQuery<ListMenuCmsGroupsQueryResponse>({\n query: LIST_MENU_CONTENT_GROUPS_MODELS\n });\n if (!response || !response.listContentModelGroups) {\n return;\n }\n const { listContentModelGroups: groupsList } = response;\n\n const groupIndex = groupsList.data.findIndex(g => g.id === model.group.id);\n if (groupIndex < 0) {\n return;\n }\n const modelIndex = groupsList.data[groupIndex].contentModels.findIndex(\n m => m.modelId === model.modelId\n );\n\n if (modelIndex < 0) {\n return;\n }\n\n cache.writeQuery({\n query: LIST_MENU_CONTENT_GROUPS_MODELS,\n data: {\n listContentModelGroups: dotProp.delete(\n groupsList,\n `data.${groupIndex}.contentModels.${modelIndex}`\n )\n }\n });\n};\n"],"mappings":"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"}
1
+ {"version":3,"names":["addModelToListCache","cache","model","response","readQuery","query","LIST_CONTENT_MODELS","listContentModels","newModelIndex","data","length","writeQuery","dotProp","set","addModelToGroupCache","LIST_MENU_CONTENT_GROUPS_MODELS","listContentModelGroups","groupsList","groupIndex","findIndex","g","id","group","newGroupModelIndex","contentModels","removeModelFromCache","client","modelId","delete","Object","keys","forEach","key","startsWith","removeModelFromListCache","modelIndex","m","removeModelFromGroupCache"],"sources":["cache.ts"],"sourcesContent":["import dotProp from \"dot-prop-immutable\";\nimport { DataProxy } from \"apollo-cache\";\nimport ApolloClient from \"apollo-client\";\nimport { LIST_CONTENT_MODELS, LIST_MENU_CONTENT_GROUPS_MODELS } from \"../../viewsGraphql\";\nimport { CmsEditorContentModel } from \"~/types\";\nimport { ListCmsModelsQueryResponse, ListMenuCmsGroupsQueryResponse } from \"../../viewsGraphql\";\n\nexport const addModelToListCache = (cache: DataProxy, model: CmsEditorContentModel): void => {\n const response = cache.readQuery<ListCmsModelsQueryResponse>({\n query: LIST_CONTENT_MODELS\n });\n if (!response || !response.listContentModels) {\n return;\n }\n const { listContentModels } = response;\n const newModelIndex = listContentModels.data.length;\n\n cache.writeQuery({\n query: LIST_CONTENT_MODELS,\n data: {\n listContentModels: dotProp.set(listContentModels, `data.${newModelIndex}`, model)\n }\n });\n};\n\nexport const addModelToGroupCache = (cache: DataProxy, model: CmsEditorContentModel): void => {\n const response = cache.readQuery<ListMenuCmsGroupsQueryResponse>({\n query: LIST_MENU_CONTENT_GROUPS_MODELS\n });\n if (!response || !response.listContentModelGroups) {\n return;\n }\n\n const { listContentModelGroups: groupsList } = response;\n\n const groupIndex = groupsList.data.findIndex(g => g.id === model.group.id);\n const newGroupModelIndex = groupsList.data[groupIndex].contentModels.length;\n\n cache.writeQuery({\n query: LIST_MENU_CONTENT_GROUPS_MODELS,\n data: {\n listContentModelGroups: dotProp.set(\n groupsList,\n `data.${groupIndex}.contentModels.${newGroupModelIndex}`,\n model\n )\n }\n });\n};\n\n/**\n * This function is an ugly hack, but I don't know a better way to remove items from cache in Apollo Client v2.\n * When a Content Model is deleted, we need to remove it from cache, because a model can be recreated with the same\n * modelId, and it will cause problems, because Apollo will think that the data in cache belongs to this new model.\n */\nexport const removeModelFromCache = (\n client: ApolloClient<any>,\n model: CmsEditorContentModel\n): void => {\n const id = `CmsContentModel:${model.modelId}`;\n\n // @ts-ignore\n client.cache.data.delete(id);\n\n // @ts-ignore\n Object.keys(client.cache.data.data).forEach(key => {\n if (key.startsWith(`${id}.`) || key.startsWith(`$${id}.`)) {\n // @ts-ignore\n client.cache.data.delete(key);\n }\n });\n};\n\nexport const removeModelFromListCache = (cache: DataProxy, model: CmsEditorContentModel): void => {\n const response = cache.readQuery<ListCmsModelsQueryResponse>({\n query: LIST_CONTENT_MODELS\n });\n if (!response || !response.listContentModels) {\n return;\n }\n const { listContentModels } = response;\n const modelIndex = listContentModels.data.findIndex(m => m.modelId === model.modelId);\n\n cache.writeQuery({\n query: LIST_CONTENT_MODELS,\n data: {\n listContentModels: dotProp.delete(listContentModels, `data.${modelIndex}`)\n }\n });\n};\n\nexport const removeModelFromGroupCache = (cache: DataProxy, model: CmsEditorContentModel): void => {\n const response = cache.readQuery<ListMenuCmsGroupsQueryResponse>({\n query: LIST_MENU_CONTENT_GROUPS_MODELS\n });\n if (!response || !response.listContentModelGroups) {\n return;\n }\n const { listContentModelGroups: groupsList } = response;\n\n const groupIndex = groupsList.data.findIndex(g => g.id === model.group.id);\n if (groupIndex < 0) {\n return;\n }\n const modelIndex = groupsList.data[groupIndex].contentModels.findIndex(\n m => m.modelId === model.modelId\n );\n\n if (modelIndex < 0) {\n return;\n }\n\n cache.writeQuery({\n query: LIST_MENU_CONTENT_GROUPS_MODELS,\n data: {\n listContentModelGroups: dotProp.delete(\n groupsList,\n `data.${groupIndex}.contentModels.${modelIndex}`\n )\n }\n });\n};\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webiny/app-headless-cms",
3
- "version": "5.31.0-beta.1",
3
+ "version": "5.32.0",
4
4
  "main": "index.js",
5
5
  "repository": {
6
6
  "type": "git",
@@ -26,20 +26,20 @@
26
26
  "@fortawesome/react-fontawesome": "0.1.19",
27
27
  "@svgr/webpack": "6.3.1",
28
28
  "@types/react": "17.0.39",
29
- "@webiny/app": "5.31.0-beta.1",
30
- "@webiny/app-admin": "5.31.0-beta.1",
31
- "@webiny/app-graphql-playground": "5.31.0-beta.1",
32
- "@webiny/app-i18n": "5.31.0-beta.1",
33
- "@webiny/app-plugin-admin-welcome-screen": "5.31.0-beta.1",
34
- "@webiny/app-security": "5.31.0-beta.1",
35
- "@webiny/error": "5.31.0-beta.1",
36
- "@webiny/form": "5.31.0-beta.1",
37
- "@webiny/plugins": "5.31.0-beta.1",
38
- "@webiny/react-composition": "5.31.0-beta.1",
39
- "@webiny/react-router": "5.31.0-beta.1",
40
- "@webiny/ui": "5.31.0-beta.1",
41
- "@webiny/utils": "5.31.0-beta.1",
42
- "@webiny/validation": "5.31.0-beta.1",
29
+ "@webiny/app": "5.32.0",
30
+ "@webiny/app-admin": "5.32.0",
31
+ "@webiny/app-graphql-playground": "5.32.0",
32
+ "@webiny/app-i18n": "5.32.0",
33
+ "@webiny/app-plugin-admin-welcome-screen": "5.32.0",
34
+ "@webiny/app-security": "5.32.0",
35
+ "@webiny/error": "5.32.0",
36
+ "@webiny/form": "5.32.0",
37
+ "@webiny/plugins": "5.32.0",
38
+ "@webiny/react-composition": "5.32.0",
39
+ "@webiny/react-router": "5.32.0",
40
+ "@webiny/ui": "5.32.0",
41
+ "@webiny/utils": "5.32.0",
42
+ "@webiny/validation": "5.32.0",
43
43
  "apollo-cache": "1.3.5",
44
44
  "apollo-client": "2.6.10",
45
45
  "apollo-link": "1.2.14",
@@ -74,8 +74,8 @@
74
74
  "@babel/preset-env": "^7.16.4",
75
75
  "@babel/preset-react": "^7.16.0",
76
76
  "@babel/preset-typescript": "^7.16.0",
77
- "@webiny/cli": "^5.31.0-beta.1",
78
- "@webiny/project-utils": "^5.31.0-beta.1",
77
+ "@webiny/cli": "^5.32.0",
78
+ "@webiny/project-utils": "^5.32.0",
79
79
  "babel-plugin-emotion": "^9.2.8",
80
80
  "babel-plugin-lodash": "^3.3.4",
81
81
  "babel-plugin-module-resolver": "^4.1.0",
@@ -107,5 +107,5 @@
107
107
  ]
108
108
  }
109
109
  },
110
- "gitHead": "b29a1cdd4c7cba5af3b9b993a78f4561525a9201"
110
+ "gitHead": "1227aa53c68afa4ccd518c8a4344195a2b8e354b"
111
111
  }