@webiny/app-headless-cms 5.40.3 → 5.40.4-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.
@@ -6,7 +6,6 @@ interface SaveEntryOptions {
6
6
  }
7
7
  export interface ContentEntryFormContext {
8
8
  entry: Partial<CmsContentEntry>;
9
- isDirty: boolean;
10
9
  saveEntry: (options?: SaveEntryOptions) => Promise<CmsContentEntry | null>;
11
10
  invalidFields: FormValidation;
12
11
  }
@@ -13,7 +13,6 @@ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/de
13
13
  var _objectSpread3 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
14
14
  var _react = _interopRequireWildcard(require("react"));
15
15
  var _pick = _interopRequireDefault(require("lodash/pick"));
16
- var _debounce = _interopRequireDefault(require("lodash/debounce"));
17
16
  var _reactRouter = require("@webiny/react-router");
18
17
  var _form = require("@webiny/form");
19
18
  var _appAdmin = require("@webiny/app-admin");
@@ -21,18 +20,6 @@ var _appHeadlessCmsCommon = require("@webiny/app-headless-cms-common");
21
20
  var _ = require("../../..");
22
21
  var _excluded = ["id"];
23
22
  var promptMessage = "There are some unsaved changes! Are you sure you want to navigate away and discard all changes?";
24
- function omitTypename(key, value) {
25
- return key === "__typename" ? undefined : value;
26
- }
27
- var stringify = function stringify(value) {
28
- return JSON.stringify(value || {}, omitTypename);
29
- };
30
- var isDifferent = function isDifferent(value, compare) {
31
- if (!value && !compare) {
32
- return false;
33
- }
34
- return stringify(value) !== stringify(compare);
35
- };
36
23
  var ContentEntryFormContext = exports.ContentEntryFormContext = /*#__PURE__*/_react.default.createContext(undefined);
37
24
  var formValidationToMap = function formValidationToMap(invalidFields) {
38
25
  return Object.keys(invalidFields).reduce(function (acc, key) {
@@ -58,18 +45,6 @@ var ContentEntryFormProvider = exports.ContentEntryFormProvider = function Conte
58
45
  var saveOptionsRef = (0, _react.useRef)({
59
46
  skipValidators: undefined
60
47
  });
61
- var _React$useState = _react.default.useState(false),
62
- _React$useState2 = (0, _slicedToArray2.default)(_React$useState, 2),
63
- isDirty = _React$useState2[0],
64
- setIsDirty = _React$useState2[1];
65
-
66
- // Reset `isDirty` when data changes from outside.
67
- (0, _react.useEffect)(function () {
68
- if (!isDirty) {
69
- return;
70
- }
71
- setIsDirty(false);
72
- }, [entry]);
73
48
  var saveEntry = (0, _react.useCallback)(async function () {
74
49
  var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
75
50
  saveOptionsRef.current.skipValidators = options.skipValidators;
@@ -108,14 +83,6 @@ var ContentEntryFormProvider = exports.ContentEntryFormProvider = function Conte
108
83
  }
109
84
  });
110
85
  };
111
- var onChange = (0, _react.useMemo)(function () {
112
- return (0, _debounce.default)(function (data) {
113
- var different = isDifferent(data, entry);
114
- if (isDirty !== different) {
115
- setIsDirty(different);
116
- }
117
- }, 500);
118
- }, [isDirty, entry]);
119
86
  var onFormSubmit = async function onFormSubmit(data) {
120
87
  var fieldsIds = model.fields.map(function (item) {
121
88
  return item.fieldId;
@@ -137,7 +104,6 @@ var ContentEntryFormProvider = exports.ContentEntryFormProvider = function Conte
137
104
  return;
138
105
  }
139
106
  setInvalidFields({});
140
- setIsDirty(false);
141
107
  var isNewRevision = !isNewEntry && data.id !== entry.id;
142
108
  if ((isNewEntry || isNewRevision) && onAfterCreate) {
143
109
  // We need a timeout to let the Prompt component update.
@@ -156,13 +122,11 @@ var ContentEntryFormProvider = exports.ContentEntryFormProvider = function Conte
156
122
  }
157
123
  }, [setSaveEntry]);
158
124
  return /*#__PURE__*/_react.default.createElement(_form.Form, {
159
- onChange: onChange,
160
125
  onSubmit: onFormSubmit,
161
126
  data: entry,
162
127
  ref: ref,
163
128
  invalidFields: invalidFields,
164
129
  onInvalid: function onInvalid(invalidFields) {
165
- setIsDirty(true);
166
130
  setInvalidFields(formValidationToMap(invalidFields));
167
131
  showSnackbar("Some fields did not pass the validation. Please check the form.");
168
132
  }
@@ -170,7 +134,6 @@ var ContentEntryFormProvider = exports.ContentEntryFormProvider = function Conte
170
134
  var context = {
171
135
  entry: formProps.data,
172
136
  saveEntry: saveEntry,
173
- isDirty: isDirty,
174
137
  invalidFields: invalidFields
175
138
  };
176
139
  return /*#__PURE__*/_react.default.createElement(ContentEntryFormContext.Provider, {
@@ -178,7 +141,7 @@ var ContentEntryFormProvider = exports.ContentEntryFormProvider = function Conte
178
141
  }, confirmNavigationIfDirty ? /*#__PURE__*/_react.default.createElement(_appAdmin.CompositionScope, {
179
142
  name: "cms.contentEntryForm"
180
143
  }, /*#__PURE__*/_react.default.createElement(_reactRouter.Prompt, {
181
- when: isDirty,
144
+ when: !formProps.form.isPristine,
182
145
  message: promptMessage
183
146
  })) : null, children);
184
147
  });
@@ -1 +1 @@
1
- {"version":3,"names":["_react","_interopRequireWildcard","require","_pick","_interopRequireDefault","_debounce","_reactRouter","_form","_appAdmin","_appHeadlessCmsCommon","_","_excluded","promptMessage","omitTypename","key","value","undefined","stringify","JSON","isDifferent","compare","ContentEntryFormContext","exports","React","createContext","formValidationToMap","invalidFields","Object","keys","reduce","acc","_objectSpread3","default","_defineProperty2","message","ContentEntryFormProvider","_ref","model","entry","children","onAfterCreate","setSaveEntry","addItemToListCache","confirmNavigationIfDirty","ref","useRef","_useState","useState","_useState2","_slicedToArray2","setInvalidFields","_useSnackbar","useSnackbar","showSnackbar","contentEntry","useContentEntry","saveOptionsRef","skipValidators","_React$useState","_React$useState2","isDirty","setIsDirty","useEffect","saveEntry","useCallback","options","arguments","length","current","submit","persistEntry","_ref2","isLocked","id","createEntry","updateEntryRevision","input","_objectWithoutProperties2","createEntryRevisionFrom","onChange","useMemo","debounce","data","different","onFormSubmit","fieldsIds","fields","map","item","fieldId","formData","pick","_toConsumableArray2","gqlData","prepareFormData","isNewEntry","_await$persistEntry","meta","locked","error","isNewRevision","Promise","resolve","setTimeout","createElement","Form","onSubmit","onInvalid","formProps","context","Provider","CompositionScope","name","Prompt","when"],"sources":["ContentEntryFormProvider.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport pick from \"lodash/pick\";\nimport debounce from \"lodash/debounce\";\nimport { Prompt } from \"@webiny/react-router\";\nimport { Form, FormAPI, FormOnSubmit, FormValidation } from \"@webiny/form\";\nimport { CmsContentEntry, CmsModel } from \"@webiny/app-headless-cms-common/types\";\nimport { CompositionScope, useSnackbar } from \"@webiny/app-admin\";\nimport { prepareFormData } from \"@webiny/app-headless-cms-common\";\nimport { useContentEntry } from \"~/index\";\nimport { PartialCmsContentEntryWithId } from \"~/admin/contexts/Cms\";\n\nconst promptMessage =\n \"There are some unsaved changes! Are you sure you want to navigate away and discard all changes?\";\n\nfunction omitTypename(key: string, value: string): string | undefined {\n return key === \"__typename\" ? undefined : value;\n}\n\nconst stringify = (value: any): string => {\n return JSON.stringify(value || {}, omitTypename);\n};\n\nconst isDifferent = (value: any, compare: any): boolean => {\n if (!value && !compare) {\n return false;\n }\n return stringify(value) !== stringify(compare);\n};\n\ninterface SaveEntryOptions {\n skipValidators?: string[];\n}\n\nexport interface ContentEntryFormContext {\n entry: Partial<CmsContentEntry>;\n isDirty: boolean;\n saveEntry: (options?: SaveEntryOptions) => Promise<CmsContentEntry | null>;\n invalidFields: FormValidation;\n}\n\nexport const ContentEntryFormContext = React.createContext<ContentEntryFormContext | undefined>(\n undefined\n);\n\ninterface InvalidFieldError {\n fieldId: string;\n error: string;\n}\n\ninterface PersistEntryParams {\n entry: PartialCmsContentEntryWithId;\n isLocked: boolean;\n}\n\nexport interface SetSaveEntry {\n (cb: ContentEntryFormContext[\"saveEntry\"]): void;\n}\n\ninterface ContentEntryFormProviderProps {\n entry: Partial<CmsContentEntry>;\n model: CmsModel;\n confirmNavigationIfDirty: boolean;\n onAfterCreate?: (entry: CmsContentEntry) => void;\n setSaveEntry?: SetSaveEntry;\n addItemToListCache?: boolean;\n children: React.ReactNode;\n}\n\nconst formValidationToMap = (invalidFields: FormValidation) => {\n return Object.keys(invalidFields).reduce(\n (acc, key) => ({ ...acc, [key]: invalidFields[key].message }),\n {} as Record<string, string | undefined>\n );\n};\n\nexport const ContentEntryFormProvider = ({\n model,\n entry,\n children,\n onAfterCreate,\n setSaveEntry,\n addItemToListCache,\n confirmNavigationIfDirty\n}: ContentEntryFormProviderProps) => {\n const ref = useRef<FormAPI<CmsContentEntry> | null>(null);\n const [invalidFields, setInvalidFields] = useState({});\n const { showSnackbar } = useSnackbar();\n const contentEntry = useContentEntry();\n const saveOptionsRef = useRef<SaveEntryOptions>({ skipValidators: undefined });\n const [isDirty, setIsDirty] = React.useState<boolean>(false);\n\n // Reset `isDirty` when data changes from outside.\n useEffect(() => {\n if (!isDirty) {\n return;\n }\n setIsDirty(false);\n }, [entry]);\n\n const saveEntry = useCallback(async (options: SaveEntryOptions = {}) => {\n saveOptionsRef.current.skipValidators = options.skipValidators;\n\n return ref.current!.submit(undefined, {\n skipValidators: options.skipValidators\n }) as unknown as Promise<CmsContentEntry | null>;\n }, []);\n\n const persistEntry = ({ entry, isLocked }: PersistEntryParams) => {\n const options = {\n skipValidators: saveOptionsRef.current.skipValidators,\n addItemToListCache\n };\n\n if (!entry.id) {\n return contentEntry.createEntry({ entry, options });\n }\n\n if (!isLocked) {\n return contentEntry.updateEntryRevision({\n entry,\n options: { skipValidators: options?.skipValidators }\n });\n }\n\n const { id, ...input } = entry;\n\n return contentEntry.createEntryRevisionFrom({\n id,\n input,\n options: { skipValidators: options?.skipValidators }\n });\n };\n\n const onChange = useMemo(() => {\n return debounce(data => {\n const different = isDifferent(data, entry);\n if (isDirty !== different) {\n setIsDirty(different);\n }\n }, 500);\n }, [isDirty, entry]);\n\n const onFormSubmit: FormOnSubmit<CmsContentEntry> = async data => {\n const fieldsIds = model.fields.map(item => item.fieldId);\n const formData = pick(data, [...fieldsIds]);\n\n const gqlData = prepareFormData(formData, model.fields) as Partial<CmsContentEntry>;\n const isNewEntry = data.id === undefined;\n\n const { entry, error } = await persistEntry({\n entry: { id: data.id, ...gqlData },\n isLocked: data.meta?.locked === true\n });\n\n if (error) {\n showSnackbar(error.message);\n setInvalidFields(error.data as InvalidFieldError[]);\n return;\n }\n\n setInvalidFields({});\n setIsDirty(false);\n\n const isNewRevision = !isNewEntry && data.id !== entry.id;\n\n if ((isNewEntry || isNewRevision) && onAfterCreate) {\n // We need a timeout to let the Prompt component update.\n await new Promise<void>(resolve => {\n setTimeout(() => {\n onAfterCreate(entry);\n resolve();\n }, 10);\n });\n }\n\n return entry;\n };\n\n useEffect(() => {\n if (typeof setSaveEntry === \"function\") {\n setSaveEntry(saveEntry);\n }\n }, [setSaveEntry]);\n\n return (\n <Form<CmsContentEntry>\n onChange={onChange}\n onSubmit={onFormSubmit}\n data={entry}\n ref={ref}\n invalidFields={invalidFields}\n onInvalid={invalidFields => {\n setIsDirty(true);\n setInvalidFields(formValidationToMap(invalidFields));\n showSnackbar(\"Some fields did not pass the validation. Please check the form.\");\n }}\n >\n {formProps => {\n const context: ContentEntryFormContext = {\n entry: formProps.data,\n saveEntry,\n isDirty,\n invalidFields\n };\n return (\n <ContentEntryFormContext.Provider value={context}>\n {confirmNavigationIfDirty ? (\n <CompositionScope name={\"cms.contentEntryForm\"}>\n <Prompt when={isDirty} message={promptMessage} />\n </CompositionScope>\n ) : null}\n {children}\n </ContentEntryFormContext.Provider>\n );\n }}\n </Form>\n );\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_react","_interopRequireWildcard","require","_pick","_interopRequireDefault","_reactRouter","_form","_appAdmin","_appHeadlessCmsCommon","_","_excluded","promptMessage","ContentEntryFormContext","exports","React","createContext","undefined","formValidationToMap","invalidFields","Object","keys","reduce","acc","key","_objectSpread3","default","_defineProperty2","message","ContentEntryFormProvider","_ref","model","entry","children","onAfterCreate","setSaveEntry","addItemToListCache","confirmNavigationIfDirty","ref","useRef","_useState","useState","_useState2","_slicedToArray2","setInvalidFields","_useSnackbar","useSnackbar","showSnackbar","contentEntry","useContentEntry","saveOptionsRef","skipValidators","saveEntry","useCallback","options","arguments","length","current","submit","persistEntry","_ref2","isLocked","id","createEntry","updateEntryRevision","input","_objectWithoutProperties2","createEntryRevisionFrom","onFormSubmit","data","fieldsIds","fields","map","item","fieldId","formData","pick","_toConsumableArray2","gqlData","prepareFormData","isNewEntry","_await$persistEntry","meta","locked","error","isNewRevision","Promise","resolve","setTimeout","useEffect","createElement","Form","onSubmit","onInvalid","formProps","context","Provider","value","CompositionScope","name","Prompt","when","form","isPristine"],"sources":["ContentEntryFormProvider.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useRef, useState } from \"react\";\nimport pick from \"lodash/pick\";\nimport { Prompt } from \"@webiny/react-router\";\nimport { Form, FormAPI, FormOnSubmit, FormValidation } from \"@webiny/form\";\nimport { CmsContentEntry, CmsModel } from \"@webiny/app-headless-cms-common/types\";\nimport { CompositionScope, useSnackbar } from \"@webiny/app-admin\";\nimport { prepareFormData } from \"@webiny/app-headless-cms-common\";\nimport { useContentEntry } from \"~/index\";\nimport { PartialCmsContentEntryWithId } from \"~/admin/contexts/Cms\";\n\nconst promptMessage =\n \"There are some unsaved changes! Are you sure you want to navigate away and discard all changes?\";\n\ninterface SaveEntryOptions {\n skipValidators?: string[];\n}\n\nexport interface ContentEntryFormContext {\n entry: Partial<CmsContentEntry>;\n saveEntry: (options?: SaveEntryOptions) => Promise<CmsContentEntry | null>;\n invalidFields: FormValidation;\n}\n\nexport const ContentEntryFormContext = React.createContext<ContentEntryFormContext | undefined>(\n undefined\n);\n\ninterface InvalidFieldError {\n fieldId: string;\n error: string;\n}\n\ninterface PersistEntryParams {\n entry: PartialCmsContentEntryWithId;\n isLocked: boolean;\n}\n\nexport interface SetSaveEntry {\n (cb: ContentEntryFormContext[\"saveEntry\"]): void;\n}\n\ninterface ContentEntryFormProviderProps {\n entry: Partial<CmsContentEntry>;\n model: CmsModel;\n confirmNavigationIfDirty: boolean;\n onAfterCreate?: (entry: CmsContentEntry) => void;\n setSaveEntry?: SetSaveEntry;\n addItemToListCache?: boolean;\n children: React.ReactNode;\n}\n\nconst formValidationToMap = (invalidFields: FormValidation) => {\n return Object.keys(invalidFields).reduce(\n (acc, key) => ({ ...acc, [key]: invalidFields[key].message }),\n {} as Record<string, string | undefined>\n );\n};\n\nexport const ContentEntryFormProvider = ({\n model,\n entry,\n children,\n onAfterCreate,\n setSaveEntry,\n addItemToListCache,\n confirmNavigationIfDirty\n}: ContentEntryFormProviderProps) => {\n const ref = useRef<FormAPI<CmsContentEntry> | null>(null);\n const [invalidFields, setInvalidFields] = useState({});\n const { showSnackbar } = useSnackbar();\n const contentEntry = useContentEntry();\n const saveOptionsRef = useRef<SaveEntryOptions>({ skipValidators: undefined });\n\n const saveEntry = useCallback(async (options: SaveEntryOptions = {}) => {\n saveOptionsRef.current.skipValidators = options.skipValidators;\n\n return ref.current!.submit(undefined, {\n skipValidators: options.skipValidators\n }) as unknown as Promise<CmsContentEntry | null>;\n }, []);\n\n const persistEntry = ({ entry, isLocked }: PersistEntryParams) => {\n const options = {\n skipValidators: saveOptionsRef.current.skipValidators,\n addItemToListCache\n };\n\n if (!entry.id) {\n return contentEntry.createEntry({ entry, options });\n }\n\n if (!isLocked) {\n return contentEntry.updateEntryRevision({\n entry,\n options: { skipValidators: options?.skipValidators }\n });\n }\n\n const { id, ...input } = entry;\n\n return contentEntry.createEntryRevisionFrom({\n id,\n input,\n options: { skipValidators: options?.skipValidators }\n });\n };\n\n const onFormSubmit: FormOnSubmit<CmsContentEntry> = async data => {\n const fieldsIds = model.fields.map(item => item.fieldId);\n const formData = pick(data, [...fieldsIds]);\n\n const gqlData = prepareFormData(formData, model.fields) as Partial<CmsContentEntry>;\n const isNewEntry = data.id === undefined;\n\n const { entry, error } = await persistEntry({\n entry: { id: data.id, ...gqlData },\n isLocked: data.meta?.locked === true\n });\n\n if (error) {\n showSnackbar(error.message);\n setInvalidFields(error.data as InvalidFieldError[]);\n return;\n }\n\n setInvalidFields({});\n\n const isNewRevision = !isNewEntry && data.id !== entry.id;\n\n if ((isNewEntry || isNewRevision) && onAfterCreate) {\n // We need a timeout to let the Prompt component update.\n await new Promise<void>(resolve => {\n setTimeout(() => {\n onAfterCreate(entry);\n resolve();\n }, 10);\n });\n }\n\n return entry;\n };\n\n useEffect(() => {\n if (typeof setSaveEntry === \"function\") {\n setSaveEntry(saveEntry);\n }\n }, [setSaveEntry]);\n\n return (\n <Form<CmsContentEntry>\n onSubmit={onFormSubmit}\n data={entry}\n ref={ref}\n invalidFields={invalidFields}\n onInvalid={invalidFields => {\n setInvalidFields(formValidationToMap(invalidFields));\n showSnackbar(\"Some fields did not pass the validation. Please check the form.\");\n }}\n >\n {formProps => {\n const context: ContentEntryFormContext = {\n entry: formProps.data,\n saveEntry,\n invalidFields\n };\n return (\n <ContentEntryFormContext.Provider value={context}>\n {confirmNavigationIfDirty ? (\n <CompositionScope name={\"cms.contentEntryForm\"}>\n <Prompt when={!formProps.form.isPristine} message={promptMessage} />\n </CompositionScope>\n ) : null}\n {children}\n </ContentEntryFormContext.Provider>\n );\n }}\n </Form>\n );\n};\n"],"mappings":"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","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webiny/app-headless-cms",
3
- "version": "5.40.3",
3
+ "version": "5.40.4-beta.0",
4
4
  "main": "index.js",
5
5
  "repository": {
6
6
  "type": "git",
@@ -24,34 +24,34 @@
24
24
  "@fortawesome/free-regular-svg-icons": "6.2.1",
25
25
  "@fortawesome/free-solid-svg-icons": "6.2.1",
26
26
  "@fortawesome/react-fontawesome": "0.1.19",
27
- "@lexical/utils": "0.16.0",
27
+ "@lexical/utils": "0.16.1",
28
28
  "@material-design-icons/svg": "0.14.13",
29
29
  "@svgr/webpack": "6.5.1",
30
30
  "@types/react": "18.2.79",
31
- "@webiny/app": "5.40.3",
32
- "@webiny/app-aco": "5.40.3",
33
- "@webiny/app-admin": "5.40.3",
34
- "@webiny/app-graphql-playground": "5.40.3",
35
- "@webiny/app-headless-cms-common": "5.40.3",
36
- "@webiny/app-i18n": "5.40.3",
37
- "@webiny/app-plugin-admin-welcome-screen": "5.40.3",
38
- "@webiny/app-security": "5.40.3",
39
- "@webiny/app-tenancy": "5.40.3",
40
- "@webiny/app-trash-bin": "5.40.3",
41
- "@webiny/error": "5.40.3",
42
- "@webiny/feature-flags": "5.40.3",
43
- "@webiny/form": "5.40.3",
44
- "@webiny/lexical-editor": "5.40.3",
45
- "@webiny/lexical-nodes": "5.40.3",
46
- "@webiny/lexical-theme": "5.40.3",
47
- "@webiny/plugins": "5.40.3",
48
- "@webiny/react-composition": "5.40.3",
49
- "@webiny/react-properties": "5.40.3",
50
- "@webiny/react-router": "5.40.3",
51
- "@webiny/theme": "5.40.3",
52
- "@webiny/ui": "5.40.3",
53
- "@webiny/utils": "5.40.3",
54
- "@webiny/validation": "5.40.3",
31
+ "@webiny/app": "5.40.4-beta.0",
32
+ "@webiny/app-aco": "5.40.4-beta.0",
33
+ "@webiny/app-admin": "5.40.4-beta.0",
34
+ "@webiny/app-graphql-playground": "5.40.4-beta.0",
35
+ "@webiny/app-headless-cms-common": "5.40.4-beta.0",
36
+ "@webiny/app-i18n": "5.40.4-beta.0",
37
+ "@webiny/app-plugin-admin-welcome-screen": "5.40.4-beta.0",
38
+ "@webiny/app-security": "5.40.4-beta.0",
39
+ "@webiny/app-tenancy": "5.40.4-beta.0",
40
+ "@webiny/app-trash-bin": "5.40.4-beta.0",
41
+ "@webiny/error": "5.40.4-beta.0",
42
+ "@webiny/feature-flags": "5.40.4-beta.0",
43
+ "@webiny/form": "5.40.4-beta.0",
44
+ "@webiny/lexical-editor": "5.40.4-beta.0",
45
+ "@webiny/lexical-nodes": "5.40.4-beta.0",
46
+ "@webiny/lexical-theme": "5.40.4-beta.0",
47
+ "@webiny/plugins": "5.40.4-beta.0",
48
+ "@webiny/react-composition": "5.40.4-beta.0",
49
+ "@webiny/react-properties": "5.40.4-beta.0",
50
+ "@webiny/react-router": "5.40.4-beta.0",
51
+ "@webiny/theme": "5.40.4-beta.0",
52
+ "@webiny/ui": "5.40.4-beta.0",
53
+ "@webiny/utils": "5.40.4-beta.0",
54
+ "@webiny/validation": "5.40.4-beta.0",
55
55
  "apollo-cache": "1.3.5",
56
56
  "apollo-client": "2.6.10",
57
57
  "apollo-link": "1.2.14",
@@ -85,8 +85,8 @@
85
85
  "@babel/preset-react": "7.24.1",
86
86
  "@babel/preset-typescript": "7.24.1",
87
87
  "@emotion/babel-plugin": "11.11.0",
88
- "@webiny/cli": "5.40.3",
89
- "@webiny/project-utils": "5.40.3",
88
+ "@webiny/cli": "5.40.4-beta.0",
89
+ "@webiny/project-utils": "5.40.4-beta.0",
90
90
  "babel-plugin-module-resolver": "5.0.0",
91
91
  "rimraf": "5.0.5",
92
92
  "ttypescript": "1.5.15",
@@ -115,5 +115,5 @@
115
115
  ]
116
116
  }
117
117
  },
118
- "gitHead": "deb698c829c8633fd9abdab70cd61ad42387eef7"
118
+ "gitHead": "ac47eaeffd087f0c296abd3eef68c6f8e320cd7d"
119
119
  }