@strapi/content-type-builder 5.31.3 → 5.33.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.
Files changed (75) hide show
  1. package/dist/admin/components/AIChat/Chat.js +3 -1
  2. package/dist/admin/components/AIChat/Chat.js.map +1 -1
  3. package/dist/admin/components/AIChat/Chat.mjs +4 -2
  4. package/dist/admin/components/AIChat/Chat.mjs.map +1 -1
  5. package/dist/admin/components/AIChat/hooks/useFeedback.js +4 -1
  6. package/dist/admin/components/AIChat/hooks/useFeedback.js.map +1 -1
  7. package/dist/admin/components/AIChat/hooks/useFeedback.mjs +5 -2
  8. package/dist/admin/components/AIChat/hooks/useFeedback.mjs.map +1 -1
  9. package/dist/admin/components/AIChat/providers/ChatProvider.js +3 -2
  10. package/dist/admin/components/AIChat/providers/ChatProvider.js.map +1 -1
  11. package/dist/admin/components/AIChat/providers/ChatProvider.mjs +3 -2
  12. package/dist/admin/components/AIChat/providers/ChatProvider.mjs.map +1 -1
  13. package/dist/admin/components/CTBSession/CTBSessionProvider.js +49 -0
  14. package/dist/admin/components/CTBSession/CTBSessionProvider.js.map +1 -0
  15. package/dist/admin/components/CTBSession/CTBSessionProvider.mjs +46 -0
  16. package/dist/admin/components/CTBSession/CTBSessionProvider.mjs.map +1 -0
  17. package/dist/admin/components/CTBSession/sessionContext.js +8 -0
  18. package/dist/admin/components/CTBSession/sessionContext.js.map +1 -0
  19. package/dist/admin/components/CTBSession/sessionContext.mjs +6 -0
  20. package/dist/admin/components/CTBSession/sessionContext.mjs.map +1 -0
  21. package/dist/admin/components/CTBSession/useCTBSession.js +25 -0
  22. package/dist/admin/components/CTBSession/useCTBSession.js.map +1 -0
  23. package/dist/admin/components/CTBSession/useCTBSession.mjs +23 -0
  24. package/dist/admin/components/CTBSession/useCTBSession.mjs.map +1 -0
  25. package/dist/admin/components/CTBSession/useCTBTracking.js +37 -0
  26. package/dist/admin/components/CTBSession/useCTBTracking.js.map +1 -0
  27. package/dist/admin/components/CTBSession/useCTBTracking.mjs +35 -0
  28. package/dist/admin/components/CTBSession/useCTBTracking.mjs.map +1 -0
  29. package/dist/admin/components/ContentTypeBuilderNav/useContentTypeBuilderMenu.js +4 -2
  30. package/dist/admin/components/ContentTypeBuilderNav/useContentTypeBuilderMenu.js.map +1 -1
  31. package/dist/admin/components/ContentTypeBuilderNav/useContentTypeBuilderMenu.mjs +4 -2
  32. package/dist/admin/components/ContentTypeBuilderNav/useContentTypeBuilderMenu.mjs.map +1 -1
  33. package/dist/admin/components/DataManager/DataManagerProvider.js +40 -3
  34. package/dist/admin/components/DataManager/DataManagerProvider.js.map +1 -1
  35. package/dist/admin/components/DataManager/DataManagerProvider.mjs +41 -4
  36. package/dist/admin/components/DataManager/DataManagerProvider.mjs.map +1 -1
  37. package/dist/admin/components/FormModal/FormModal.js +3 -1
  38. package/dist/admin/components/FormModal/FormModal.js.map +1 -1
  39. package/dist/admin/components/FormModal/FormModal.mjs +4 -2
  40. package/dist/admin/components/FormModal/FormModal.mjs.map +1 -1
  41. package/dist/admin/components/FormModalNavigation/FormModalNavigationProvider.js +14 -1
  42. package/dist/admin/components/FormModalNavigation/FormModalNavigationProvider.js.map +1 -1
  43. package/dist/admin/components/FormModalNavigation/FormModalNavigationProvider.mjs +14 -1
  44. package/dist/admin/components/FormModalNavigation/FormModalNavigationProvider.mjs.map +1 -1
  45. package/dist/admin/components/List.js +3 -1
  46. package/dist/admin/components/List.js.map +1 -1
  47. package/dist/admin/components/List.mjs +4 -2
  48. package/dist/admin/components/List.mjs.map +1 -1
  49. package/dist/admin/pages/App/index.js +40 -37
  50. package/dist/admin/pages/App/index.js.map +1 -1
  51. package/dist/admin/pages/App/index.mjs +40 -37
  52. package/dist/admin/pages/App/index.mjs.map +1 -1
  53. package/dist/admin/pages/ListView/ListView.js +10 -1
  54. package/dist/admin/pages/ListView/ListView.js.map +1 -1
  55. package/dist/admin/pages/ListView/ListView.mjs +11 -2
  56. package/dist/admin/pages/ListView/ListView.mjs.map +1 -1
  57. package/dist/admin/src/components/CTBSession/CTBSessionProvider.d.ts +26 -0
  58. package/dist/admin/src/components/CTBSession/ctbSession.d.ts +5 -0
  59. package/dist/admin/src/components/CTBSession/sessionContext.d.ts +25 -0
  60. package/dist/admin/src/components/CTBSession/useCTBSession.d.ts +12 -0
  61. package/dist/admin/src/components/CTBSession/useCTBTracking.d.ts +13 -0
  62. package/dist/admin/translations/ru.json.js +74 -30
  63. package/dist/admin/translations/ru.json.js.map +1 -1
  64. package/dist/admin/translations/ru.json.mjs +74 -30
  65. package/dist/admin/translations/ru.json.mjs.map +1 -1
  66. package/dist/server/controllers/content-types.js +6 -0
  67. package/dist/server/controllers/content-types.js.map +1 -1
  68. package/dist/server/controllers/content-types.mjs +6 -0
  69. package/dist/server/controllers/content-types.mjs.map +1 -1
  70. package/dist/server/controllers/validation/types.js +1 -1
  71. package/dist/server/controllers/validation/types.js.map +1 -1
  72. package/dist/server/controllers/validation/types.mjs +1 -1
  73. package/dist/server/controllers/validation/types.mjs.map +1 -1
  74. package/dist/server/src/controllers/content-types.d.ts.map +1 -1
  75. package/package.json +8 -8
@@ -8,8 +8,12 @@ var isEqual = require('lodash/isEqual');
8
8
  var mapValues = require('lodash/mapValues');
9
9
  var reactIntl = require('react-intl');
10
10
  var reactRedux = require('react-redux');
11
+ var reactRouterDom = require('react-router-dom');
11
12
  var getTrad = require('../../utils/getTrad.js');
12
13
  var AutoReloadOverlayBlocker = require('../AutoReloadOverlayBlocker.js');
14
+ require('../CTBSession/sessionContext.js');
15
+ var useCTBSession = require('../CTBSession/useCTBSession.js');
16
+ var useCTBTracking = require('../CTBSession/useCTBTracking.js');
13
17
  var useFormModalNavigation = require('../FormModalNavigation/useFormModalNavigation.js');
14
18
  var DataManagerContext = require('./DataManagerContext.js');
15
19
  var reducer = require('./reducer.js');
@@ -43,6 +47,8 @@ const DataManagerProvider = ({ children })=>{
43
47
  const dispatch = reactRedux.useDispatch();
44
48
  const state = reactRedux.useSelector(selectState);
45
49
  const dispatchGuidedTour = strapiAdmin.useGuidedTour('DataManagerProvider', (s)=>s.dispatch);
50
+ const location = reactRouterDom.useLocation();
51
+ const { sessionId: ctbSessionId, regenerateSessionId } = useCTBSession.useCTBSession();
46
52
  const { components, contentTypes, reservedNames, initialComponents, initialContentTypes, isLoading } = state.current;
47
53
  const { toggleNotification } = strapiAdmin.useNotification();
48
54
  const { lockAppWithAutoreload, unlockAppWithAutoreload } = AutoReloadOverlayBlocker.useAutoReloadOverlayBlocker();
@@ -51,10 +57,11 @@ const DataManagerProvider = ({ children })=>{
51
57
  const plugin = getPlugin('content-type-builder');
52
58
  const autoReload = strapiAdmin.useAppInfo('DataManagerProvider', (state)=>state.autoReload);
53
59
  const { formatMessage } = reactIntl.useIntl();
54
- const { trackUsage } = strapiAdmin.useTracking();
60
+ const { trackUsage } = useCTBTracking.useCTBTracking();
55
61
  const refetchPermissions = strapiAdmin.useAuth('DataManagerProvider', (state)=>state.refetchPermissions);
56
62
  const { onCloseModal } = useFormModalNavigation.useFormModalNavigation();
57
63
  const [isSaving, setIsSaving] = React__namespace.useState(false);
64
+ const previousLocationRef = React__namespace.useRef(null);
58
65
  const isModified = React__namespace.useMemo(()=>{
59
66
  return !(isEqual(components, initialComponents) && isEqual(contentTypes, initialContentTypes));
60
67
  }, [
@@ -100,12 +107,31 @@ const DataManagerProvider = ({ children })=>{
100
107
  };
101
108
  React__namespace.useEffect(()=>{
102
109
  getDataRef.current();
110
+ previousLocationRef.current = location.pathname;
103
111
  return ()=>{
104
112
  // Reload the plugin so the cycle is new again
105
113
  dispatch(reducer.actions.reloadPlugin());
106
114
  };
107
115
  // eslint-disable-next-line react-hooks/exhaustive-deps
108
116
  }, []);
117
+ // Detect navigation away and back to CTB to regenerate session
118
+ React__namespace.useEffect(()=>{
119
+ const currentPath = location.pathname;
120
+ const previousPath = previousLocationRef.current;
121
+ const CTB_PATH = '/plugins/content-type-builder';
122
+ if (previousPath) {
123
+ const isCTBPath = currentPath.includes(CTB_PATH);
124
+ const wasCTBPath = previousPath.includes(CTB_PATH);
125
+ // Regenerate session when returning to CTB after navigating away
126
+ if (!wasCTBPath && isCTBPath) {
127
+ regenerateSessionId();
128
+ }
129
+ }
130
+ previousLocationRef.current = currentPath;
131
+ }, [
132
+ location.pathname,
133
+ regenerateSessionId
134
+ ]);
109
135
  React__namespace.useEffect(()=>{
110
136
  if (!autoReload) {
111
137
  toggleNotification({
@@ -142,6 +168,11 @@ const DataManagerProvider = ({ children })=>{
142
168
  components: state.current.components,
143
169
  contentTypes: mutatedCTs
144
170
  });
171
+ // Track that the save button was clicked (includes session ID via useCTBTracking)
172
+ trackUsage('willUpdateCTBSchema', {
173
+ ...trackingEventProperties,
174
+ ctbSessionId
175
+ });
145
176
  const isSendingContentTypes = Object.keys(state.current.contentTypes).length > 0;
146
177
  lockAppWithAutoreload();
147
178
  try {
@@ -149,10 +180,13 @@ const DataManagerProvider = ({ children })=>{
149
180
  data: requestData
150
181
  });
151
182
  if (isSendingContentTypes) {
183
+ // Note: didCreateGuidedTourCollectionType doesn't accept properties
152
184
  trackUsage('didCreateGuidedTourCollectionType');
153
185
  }
154
186
  // Make sure the server has restarted
155
187
  await serverRestartWatcher();
188
+ // Generate new session ID after server restart
189
+ regenerateSessionId();
156
190
  // refetch and update initial state after the data has been saved
157
191
  await getDataRef.current();
158
192
  // Update the app's permissions
@@ -170,7 +204,8 @@ const DataManagerProvider = ({ children })=>{
170
204
  });
171
205
  trackUsage('didUpdateCTBSchema', {
172
206
  ...trackingEventProperties,
173
- success: false
207
+ success: false,
208
+ ctbSessionId
174
209
  });
175
210
  } finally{
176
211
  setIsSaving(false);
@@ -187,7 +222,8 @@ const DataManagerProvider = ({ children })=>{
187
222
  });
188
223
  trackUsage('didUpdateCTBSchema', {
189
224
  ...trackingEventProperties,
190
- success: true
225
+ success: true,
226
+ ctbSessionId
191
227
  });
192
228
  }
193
229
  };
@@ -269,6 +305,7 @@ const DataManagerProvider = ({ children })=>{
269
305
  },
270
306
  removeAttribute (payload) {
271
307
  if (payload.forTarget === 'contentType') {
308
+ // Note: willDeleteFieldOfContentType doesn't accept properties
272
309
  trackUsage('willDeleteFieldOfContentType');
273
310
  }
274
311
  dispatch(reducer.actions.removeField(payload));
@@ -1 +1 @@
1
- {"version":3,"file":"DataManagerProvider.js","sources":["../../../../admin/src/components/DataManager/DataManagerProvider.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n useTracking,\n useStrapiApp,\n useNotification,\n useAppInfo,\n useFetchClient,\n useAuth,\n adminApi,\n useGuidedTour,\n GUIDED_TOUR_REQUIRED_ACTIONS,\n} from '@strapi/admin/strapi-admin';\nimport groupBy from 'lodash/groupBy';\nimport isEqual from 'lodash/isEqual';\nimport mapValues from 'lodash/mapValues';\nimport { useIntl } from 'react-intl';\nimport { useSelector, useDispatch } from 'react-redux';\n\nimport { getTrad } from '../../utils/getTrad';\nimport { useAutoReloadOverlayBlocker } from '../AutoReloadOverlayBlocker';\nimport { useFormModalNavigation } from '../FormModalNavigation/useFormModalNavigation';\n\nimport { DataManagerContext, type DataManagerContextValue } from './DataManagerContext';\nimport { actions, initialState, type State } from './reducer';\nimport { useServerRestartWatcher } from './useServerRestartWatcher';\nimport { sortContentType, stateToRequestData } from './utils/cleanData';\nimport { retrieveComponentsThatHaveComponents } from './utils/retrieveComponentsThatHaveComponents';\nimport { retrieveNestedComponents } from './utils/retrieveNestedComponents';\nimport { retrieveSpecificInfoFromComponents } from './utils/retrieveSpecificInfoFromComponents';\n\nimport type { ContentTypes, ContentType, Components } from '../../types';\nimport type { FormAPI } from '../../utils/formAPI';\nimport type { Internal } from '@strapi/types';\n\ninterface DataManagerProviderProps {\n children: React.ReactNode;\n}\n\nconst selectState = (state: Record<string, unknown>) =>\n (state['content-type-builder_dataManagerProvider'] || initialState) as State;\n\nconst DataManagerProvider = ({ children }: DataManagerProviderProps) => {\n const dispatch = useDispatch();\n const state = useSelector(selectState);\n const dispatchGuidedTour = useGuidedTour('DataManagerProvider', (s) => s.dispatch);\n\n const {\n components,\n contentTypes,\n reservedNames,\n initialComponents,\n initialContentTypes,\n isLoading,\n } = state.current;\n\n const { toggleNotification } = useNotification();\n const { lockAppWithAutoreload, unlockAppWithAutoreload } = useAutoReloadOverlayBlocker();\n const serverRestartWatcher = useServerRestartWatcher();\n\n const getPlugin = useStrapiApp('DataManagerProvider', (state) => state.getPlugin);\n const plugin = getPlugin('content-type-builder');\n const autoReload = useAppInfo('DataManagerProvider', (state) => state.autoReload);\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const refetchPermissions = useAuth('DataManagerProvider', (state) => state.refetchPermissions);\n const { onCloseModal } = useFormModalNavigation();\n\n const [isSaving, setIsSaving] = React.useState(false);\n\n const isModified = React.useMemo(() => {\n return !(isEqual(components, initialComponents) && isEqual(contentTypes, initialContentTypes));\n }, [components, contentTypes, initialComponents, initialContentTypes]);\n\n const fetchClient = useFetchClient();\n\n const isInDevelopmentMode = autoReload;\n\n const getDataRef = React.useRef<any>();\n\n getDataRef.current = async () => {\n try {\n const [schemaResponse, reservedNamesResponse] = await Promise.all([\n fetchClient.get(`/content-type-builder/schema`),\n fetchClient.get(`/content-type-builder/reserved-names`),\n ]);\n\n const { components, contentTypes } = schemaResponse.data.data;\n\n dispatch(\n actions.init({\n components: mapValues(components, (component) => ({\n ...component,\n status: 'UNCHANGED',\n })) as Components,\n contentTypes: mapValues(contentTypes, (contentType) => ({\n ...contentType,\n status: 'UNCHANGED',\n })) as ContentTypes,\n reservedNames: reservedNamesResponse.data,\n })\n );\n\n dispatch(actions.clearHistory());\n } catch (err) {\n console.error({ err });\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n }\n };\n\n React.useEffect(() => {\n getDataRef.current();\n\n return () => {\n // Reload the plugin so the cycle is new again\n dispatch(actions.reloadPlugin());\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n React.useEffect(() => {\n if (!autoReload) {\n toggleNotification({\n type: 'info',\n message: formatMessage({ id: getTrad('notification.info.autoreaload-disable') }),\n });\n }\n }, [autoReload, toggleNotification, formatMessage]);\n\n const getAllComponentsThatHaveAComponentInTheirAttributes = (components: Components) => {\n const composWithCompos = retrieveComponentsThatHaveComponents(components);\n\n return composWithCompos;\n };\n\n const getAllNestedComponents = (components: Components) => {\n const appNestedCompo = retrieveNestedComponents(components);\n\n return appNestedCompo;\n };\n\n const updatePermissions = async () => {\n await refetchPermissions();\n };\n\n const saveSchema = async () => {\n setIsSaving(true);\n\n const PluginForms = plugin?.apis?.forms as FormAPI;\n\n const mutatedCTs = Object.entries(state.current.contentTypes).reduce(\n (acc, [uid, contentType]) => {\n acc[uid] = PluginForms.mutateContentTypeSchema(\n contentType,\n initialContentTypes[uid]\n ) as ContentType;\n\n return acc;\n },\n {} as ContentTypes\n );\n\n const { requestData, trackingEventProperties } = stateToRequestData({\n components: state.current.components,\n contentTypes: mutatedCTs,\n });\n\n const isSendingContentTypes = Object.keys(state.current.contentTypes).length > 0;\n\n lockAppWithAutoreload();\n\n try {\n await fetchClient.post(`/content-type-builder/update-schema`, { data: requestData });\n\n if (isSendingContentTypes) {\n trackUsage('didCreateGuidedTourCollectionType');\n }\n\n // Make sure the server has restarted\n await serverRestartWatcher();\n // refetch and update initial state after the data has been saved\n await getDataRef.current();\n // Update the app's permissions\n await updatePermissions();\n } catch (err) {\n console.error({ err });\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n\n trackUsage('didUpdateCTBSchema', { ...trackingEventProperties, success: false });\n } finally {\n setIsSaving(false);\n unlockAppWithAutoreload();\n\n dispatch(adminApi.util.invalidateTags(['GuidedTourMeta', 'HomepageKeyStatistics']));\n dispatchGuidedTour({\n type: 'set_completed_actions',\n payload: [GUIDED_TOUR_REQUIRED_ACTIONS.contentTypeBuilder.createSchema],\n });\n\n trackUsage('didUpdateCTBSchema', { ...trackingEventProperties, success: true });\n }\n };\n\n const componentsThatHaveOtherComponentInTheirAttributes = React.useMemo(() => {\n return getAllComponentsThatHaveAComponentInTheirAttributes(components);\n }, [components]);\n\n const nestedComponents = React.useMemo(() => {\n return getAllNestedComponents(components);\n }, [components]);\n\n const allComponentsCategories = React.useMemo(() => {\n return retrieveSpecificInfoFromComponents(components, ['category']);\n }, [components]);\n\n const componentsGroupedByCategory = React.useMemo(() => {\n return groupBy(components, 'category');\n }, [components]);\n\n const sortedContentTypesList = React.useMemo(() => {\n return sortContentType(contentTypes);\n }, [contentTypes]);\n\n const context: DataManagerContextValue = {\n componentsThatHaveOtherComponentInTheirAttributes,\n nestedComponents,\n saveSchema,\n reservedNames,\n components,\n contentTypes,\n initialComponents,\n initialContentTypes,\n isSaving,\n isModified,\n isInDevelopmentMode,\n allComponentsCategories,\n componentsGroupedByCategory,\n sortedContentTypesList,\n isLoading,\n addAttribute(payload) {\n dispatch(actions.addAttribute(payload));\n },\n editAttribute(payload) {\n dispatch(actions.editAttribute(payload));\n },\n addCustomFieldAttribute(payload) {\n dispatch(actions.addCustomFieldAttribute(payload));\n },\n editCustomFieldAttribute(payload) {\n dispatch(actions.editCustomFieldAttribute(payload));\n },\n addCreatedComponentToDynamicZone(payload) {\n dispatch(actions.addCreatedComponentToDynamicZone(payload));\n },\n createSchema(payload) {\n dispatch(actions.createSchema(payload));\n },\n createComponentSchema({ data, uid, componentCategory }) {\n dispatch(actions.createComponentSchema({ data, uid, componentCategory }));\n },\n changeDynamicZoneComponents({ forTarget, targetUid, dynamicZoneTarget, newComponents }) {\n dispatch(\n actions.changeDynamicZoneComponents({\n forTarget,\n targetUid,\n dynamicZoneTarget,\n newComponents,\n })\n );\n },\n removeAttribute(payload) {\n if (payload.forTarget === 'contentType') {\n trackUsage('willDeleteFieldOfContentType');\n }\n\n dispatch(actions.removeField(payload));\n },\n removeComponentFromDynamicZone(payload) {\n dispatch(actions.removeComponentFromDynamicZone(payload));\n },\n deleteComponent(uid: Internal.UID.Component) {\n const userConfirm = window.confirm(\n formatMessage({\n id: getTrad(`popUpWarning.bodyMessage.component.delete`),\n })\n );\n\n if (userConfirm) {\n onCloseModal();\n\n dispatch(actions.deleteComponent(uid));\n }\n },\n deleteContentType(uid: Internal.UID.ContentType) {\n const userConfirm = window.confirm(\n formatMessage({\n id: getTrad(`popUpWarning.bodyMessage.contentType.delete`),\n })\n );\n\n if (userConfirm) {\n onCloseModal();\n\n dispatch(actions.deleteContentType(uid));\n }\n },\n\n updateComponentSchema({ data, componentUID }) {\n dispatch(\n actions.updateComponentSchema({\n data,\n uid: componentUID,\n })\n );\n },\n\n updateComponentUid({ componentUID, newComponentUID }) {\n dispatch(\n actions.updateComponentUid({\n uid: componentUID,\n newComponentUID,\n })\n );\n },\n\n updateSchema(args) {\n dispatch(actions.updateSchema(args));\n },\n\n moveAttribute(args) {\n dispatch(actions.moveAttribute(args));\n },\n\n applyChange(args) {\n dispatch(actions.applyChange(args));\n },\n\n history: {\n undo() {\n dispatch(actions.undo());\n },\n\n redo() {\n dispatch(actions.redo());\n },\n\n discardAllChanges() {\n dispatch(actions.discardAll());\n },\n\n canUndo: state.past.length > 0,\n canRedo: state.future.length > 0,\n canDiscardAll: isModified,\n },\n };\n\n return <DataManagerContext.Provider value={context}>{children}</DataManagerContext.Provider>;\n};\n\n// eslint-disable-next-line import/no-default-export\nexport default DataManagerProvider;\n"],"names":["selectState","state","initialState","DataManagerProvider","children","dispatch","useDispatch","useSelector","dispatchGuidedTour","useGuidedTour","s","components","contentTypes","reservedNames","initialComponents","initialContentTypes","isLoading","current","toggleNotification","useNotification","lockAppWithAutoreload","unlockAppWithAutoreload","useAutoReloadOverlayBlocker","serverRestartWatcher","useServerRestartWatcher","getPlugin","useStrapiApp","plugin","autoReload","useAppInfo","formatMessage","useIntl","trackUsage","useTracking","refetchPermissions","useAuth","onCloseModal","useFormModalNavigation","isSaving","setIsSaving","React","useState","isModified","useMemo","isEqual","fetchClient","useFetchClient","isInDevelopmentMode","getDataRef","useRef","schemaResponse","reservedNamesResponse","Promise","all","get","data","actions","init","mapValues","component","status","contentType","clearHistory","err","console","error","type","message","id","defaultMessage","useEffect","reloadPlugin","getTrad","getAllComponentsThatHaveAComponentInTheirAttributes","composWithCompos","retrieveComponentsThatHaveComponents","getAllNestedComponents","appNestedCompo","retrieveNestedComponents","updatePermissions","saveSchema","PluginForms","apis","forms","mutatedCTs","Object","entries","reduce","acc","uid","mutateContentTypeSchema","requestData","trackingEventProperties","stateToRequestData","isSendingContentTypes","keys","length","post","success","adminApi","util","invalidateTags","payload","GUIDED_TOUR_REQUIRED_ACTIONS","contentTypeBuilder","createSchema","componentsThatHaveOtherComponentInTheirAttributes","nestedComponents","allComponentsCategories","retrieveSpecificInfoFromComponents","componentsGroupedByCategory","groupBy","sortedContentTypesList","sortContentType","context","addAttribute","editAttribute","addCustomFieldAttribute","editCustomFieldAttribute","addCreatedComponentToDynamicZone","createComponentSchema","componentCategory","changeDynamicZoneComponents","forTarget","targetUid","dynamicZoneTarget","newComponents","removeAttribute","removeField","removeComponentFromDynamicZone","deleteComponent","userConfirm","window","confirm","deleteContentType","updateComponentSchema","componentUID","updateComponentUid","newComponentUID","updateSchema","args","moveAttribute","applyChange","history","undo","redo","discardAllChanges","discardAll","canUndo","past","canRedo","future","canDiscardAll","_jsx","DataManagerContext","Provider","value"],"mappings":"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"}
1
+ {"version":3,"file":"DataManagerProvider.js","sources":["../../../../admin/src/components/DataManager/DataManagerProvider.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n useStrapiApp,\n useNotification,\n useAppInfo,\n useFetchClient,\n useAuth,\n adminApi,\n useGuidedTour,\n GUIDED_TOUR_REQUIRED_ACTIONS,\n} from '@strapi/admin/strapi-admin';\nimport groupBy from 'lodash/groupBy';\nimport isEqual from 'lodash/isEqual';\nimport mapValues from 'lodash/mapValues';\nimport { useIntl } from 'react-intl';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { useLocation } from 'react-router-dom';\n\nimport { getTrad } from '../../utils/getTrad';\nimport { useAutoReloadOverlayBlocker } from '../AutoReloadOverlayBlocker';\nimport { useCTBTracking } from '../CTBSession/ctbSession';\nimport { useCTBSession } from '../CTBSession/useCTBSession';\nimport { useFormModalNavigation } from '../FormModalNavigation/useFormModalNavigation';\n\nimport { DataManagerContext, type DataManagerContextValue } from './DataManagerContext';\nimport { actions, initialState, type State } from './reducer';\nimport { useServerRestartWatcher } from './useServerRestartWatcher';\nimport { sortContentType, stateToRequestData } from './utils/cleanData';\nimport { retrieveComponentsThatHaveComponents } from './utils/retrieveComponentsThatHaveComponents';\nimport { retrieveNestedComponents } from './utils/retrieveNestedComponents';\nimport { retrieveSpecificInfoFromComponents } from './utils/retrieveSpecificInfoFromComponents';\n\nimport type { ContentTypes, ContentType, Components } from '../../types';\nimport type { FormAPI } from '../../utils/formAPI';\nimport type { Internal } from '@strapi/types';\n\ninterface DataManagerProviderProps {\n children: React.ReactNode;\n}\n\nconst selectState = (state: Record<string, unknown>) =>\n (state['content-type-builder_dataManagerProvider'] || initialState) as State;\n\nconst DataManagerProvider = ({ children }: DataManagerProviderProps) => {\n const dispatch = useDispatch();\n const state = useSelector(selectState);\n const dispatchGuidedTour = useGuidedTour('DataManagerProvider', (s) => s.dispatch);\n const location = useLocation();\n const { sessionId: ctbSessionId, regenerateSessionId } = useCTBSession();\n\n const {\n components,\n contentTypes,\n reservedNames,\n initialComponents,\n initialContentTypes,\n isLoading,\n } = state.current;\n\n const { toggleNotification } = useNotification();\n const { lockAppWithAutoreload, unlockAppWithAutoreload } = useAutoReloadOverlayBlocker();\n const serverRestartWatcher = useServerRestartWatcher();\n\n const getPlugin = useStrapiApp('DataManagerProvider', (state) => state.getPlugin);\n const plugin = getPlugin('content-type-builder');\n const autoReload = useAppInfo('DataManagerProvider', (state) => state.autoReload);\n const { formatMessage } = useIntl();\n const { trackUsage } = useCTBTracking();\n const refetchPermissions = useAuth('DataManagerProvider', (state) => state.refetchPermissions);\n const { onCloseModal } = useFormModalNavigation();\n\n const [isSaving, setIsSaving] = React.useState(false);\n const previousLocationRef = React.useRef<string | null>(null);\n\n const isModified = React.useMemo(() => {\n return !(isEqual(components, initialComponents) && isEqual(contentTypes, initialContentTypes));\n }, [components, contentTypes, initialComponents, initialContentTypes]);\n\n const fetchClient = useFetchClient();\n\n const isInDevelopmentMode = autoReload;\n\n const getDataRef = React.useRef<any>();\n\n getDataRef.current = async () => {\n try {\n const [schemaResponse, reservedNamesResponse] = await Promise.all([\n fetchClient.get(`/content-type-builder/schema`),\n fetchClient.get(`/content-type-builder/reserved-names`),\n ]);\n\n const { components, contentTypes } = schemaResponse.data.data;\n\n dispatch(\n actions.init({\n components: mapValues(components, (component) => ({\n ...component,\n status: 'UNCHANGED',\n })) as Components,\n contentTypes: mapValues(contentTypes, (contentType) => ({\n ...contentType,\n status: 'UNCHANGED',\n })) as ContentTypes,\n reservedNames: reservedNamesResponse.data,\n })\n );\n\n dispatch(actions.clearHistory());\n } catch (err) {\n console.error({ err });\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n }\n };\n\n React.useEffect(() => {\n getDataRef.current();\n previousLocationRef.current = location.pathname;\n\n return () => {\n // Reload the plugin so the cycle is new again\n dispatch(actions.reloadPlugin());\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n // Detect navigation away and back to CTB to regenerate session\n React.useEffect(() => {\n const currentPath = location.pathname;\n const previousPath = previousLocationRef.current;\n const CTB_PATH = '/plugins/content-type-builder';\n\n if (previousPath) {\n const isCTBPath = currentPath.includes(CTB_PATH);\n const wasCTBPath = previousPath.includes(CTB_PATH);\n\n // Regenerate session when returning to CTB after navigating away\n if (!wasCTBPath && isCTBPath) {\n regenerateSessionId();\n }\n }\n\n previousLocationRef.current = currentPath;\n }, [location.pathname, regenerateSessionId]);\n\n React.useEffect(() => {\n if (!autoReload) {\n toggleNotification({\n type: 'info',\n message: formatMessage({ id: getTrad('notification.info.autoreaload-disable') }),\n });\n }\n }, [autoReload, toggleNotification, formatMessage]);\n\n const getAllComponentsThatHaveAComponentInTheirAttributes = (components: Components) => {\n const composWithCompos = retrieveComponentsThatHaveComponents(components);\n\n return composWithCompos;\n };\n\n const getAllNestedComponents = (components: Components) => {\n const appNestedCompo = retrieveNestedComponents(components);\n\n return appNestedCompo;\n };\n\n const updatePermissions = async () => {\n await refetchPermissions();\n };\n\n const saveSchema = async () => {\n setIsSaving(true);\n\n const PluginForms = plugin?.apis?.forms as FormAPI;\n\n const mutatedCTs = Object.entries(state.current.contentTypes).reduce(\n (acc, [uid, contentType]) => {\n acc[uid] = PluginForms.mutateContentTypeSchema(\n contentType,\n initialContentTypes[uid]\n ) as ContentType;\n\n return acc;\n },\n {} as ContentTypes\n );\n\n const { requestData, trackingEventProperties } = stateToRequestData({\n components: state.current.components,\n contentTypes: mutatedCTs,\n });\n\n // Track that the save button was clicked (includes session ID via useCTBTracking)\n trackUsage('willUpdateCTBSchema', {\n ...trackingEventProperties,\n ctbSessionId,\n });\n\n const isSendingContentTypes = Object.keys(state.current.contentTypes).length > 0;\n\n lockAppWithAutoreload();\n\n try {\n await fetchClient.post(`/content-type-builder/update-schema`, { data: requestData });\n\n if (isSendingContentTypes) {\n // Note: didCreateGuidedTourCollectionType doesn't accept properties\n trackUsage('didCreateGuidedTourCollectionType');\n }\n\n // Make sure the server has restarted\n await serverRestartWatcher();\n // Generate new session ID after server restart\n regenerateSessionId();\n // refetch and update initial state after the data has been saved\n await getDataRef.current();\n // Update the app's permissions\n await updatePermissions();\n } catch (err) {\n console.error({ err });\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n\n trackUsage('didUpdateCTBSchema', {\n ...trackingEventProperties,\n success: false,\n ctbSessionId,\n });\n } finally {\n setIsSaving(false);\n unlockAppWithAutoreload();\n\n dispatch(adminApi.util.invalidateTags(['GuidedTourMeta', 'HomepageKeyStatistics']));\n dispatchGuidedTour({\n type: 'set_completed_actions',\n payload: [GUIDED_TOUR_REQUIRED_ACTIONS.contentTypeBuilder.createSchema],\n });\n\n trackUsage('didUpdateCTBSchema', {\n ...trackingEventProperties,\n success: true,\n ctbSessionId,\n });\n }\n };\n\n const componentsThatHaveOtherComponentInTheirAttributes = React.useMemo(() => {\n return getAllComponentsThatHaveAComponentInTheirAttributes(components);\n }, [components]);\n\n const nestedComponents = React.useMemo(() => {\n return getAllNestedComponents(components);\n }, [components]);\n\n const allComponentsCategories = React.useMemo(() => {\n return retrieveSpecificInfoFromComponents(components, ['category']);\n }, [components]);\n\n const componentsGroupedByCategory = React.useMemo(() => {\n return groupBy(components, 'category');\n }, [components]);\n\n const sortedContentTypesList = React.useMemo(() => {\n return sortContentType(contentTypes);\n }, [contentTypes]);\n\n const context: DataManagerContextValue = {\n componentsThatHaveOtherComponentInTheirAttributes,\n nestedComponents,\n saveSchema,\n reservedNames,\n components,\n contentTypes,\n initialComponents,\n initialContentTypes,\n isSaving,\n isModified,\n isInDevelopmentMode,\n allComponentsCategories,\n componentsGroupedByCategory,\n sortedContentTypesList,\n isLoading,\n addAttribute(payload) {\n dispatch(actions.addAttribute(payload));\n },\n editAttribute(payload) {\n dispatch(actions.editAttribute(payload));\n },\n addCustomFieldAttribute(payload) {\n dispatch(actions.addCustomFieldAttribute(payload));\n },\n editCustomFieldAttribute(payload) {\n dispatch(actions.editCustomFieldAttribute(payload));\n },\n addCreatedComponentToDynamicZone(payload) {\n dispatch(actions.addCreatedComponentToDynamicZone(payload));\n },\n createSchema(payload) {\n dispatch(actions.createSchema(payload));\n },\n createComponentSchema({ data, uid, componentCategory }) {\n dispatch(actions.createComponentSchema({ data, uid, componentCategory }));\n },\n changeDynamicZoneComponents({ forTarget, targetUid, dynamicZoneTarget, newComponents }) {\n dispatch(\n actions.changeDynamicZoneComponents({\n forTarget,\n targetUid,\n dynamicZoneTarget,\n newComponents,\n })\n );\n },\n removeAttribute(payload) {\n if (payload.forTarget === 'contentType') {\n // Note: willDeleteFieldOfContentType doesn't accept properties\n trackUsage('willDeleteFieldOfContentType');\n }\n\n dispatch(actions.removeField(payload));\n },\n removeComponentFromDynamicZone(payload) {\n dispatch(actions.removeComponentFromDynamicZone(payload));\n },\n deleteComponent(uid: Internal.UID.Component) {\n const userConfirm = window.confirm(\n formatMessage({\n id: getTrad(`popUpWarning.bodyMessage.component.delete`),\n })\n );\n\n if (userConfirm) {\n onCloseModal();\n\n dispatch(actions.deleteComponent(uid));\n }\n },\n deleteContentType(uid: Internal.UID.ContentType) {\n const userConfirm = window.confirm(\n formatMessage({\n id: getTrad(`popUpWarning.bodyMessage.contentType.delete`),\n })\n );\n\n if (userConfirm) {\n onCloseModal();\n\n dispatch(actions.deleteContentType(uid));\n }\n },\n\n updateComponentSchema({ data, componentUID }) {\n dispatch(\n actions.updateComponentSchema({\n data,\n uid: componentUID,\n })\n );\n },\n\n updateComponentUid({ componentUID, newComponentUID }) {\n dispatch(\n actions.updateComponentUid({\n uid: componentUID,\n newComponentUID,\n })\n );\n },\n\n updateSchema(args) {\n dispatch(actions.updateSchema(args));\n },\n\n moveAttribute(args) {\n dispatch(actions.moveAttribute(args));\n },\n\n applyChange(args) {\n dispatch(actions.applyChange(args));\n },\n\n history: {\n undo() {\n dispatch(actions.undo());\n },\n\n redo() {\n dispatch(actions.redo());\n },\n\n discardAllChanges() {\n dispatch(actions.discardAll());\n },\n\n canUndo: state.past.length > 0,\n canRedo: state.future.length > 0,\n canDiscardAll: isModified,\n },\n };\n\n return <DataManagerContext.Provider value={context}>{children}</DataManagerContext.Provider>;\n};\n\n// eslint-disable-next-line import/no-default-export\nexport default DataManagerProvider;\n"],"names":["selectState","state","initialState","DataManagerProvider","children","dispatch","useDispatch","useSelector","dispatchGuidedTour","useGuidedTour","s","location","useLocation","sessionId","ctbSessionId","regenerateSessionId","useCTBSession","components","contentTypes","reservedNames","initialComponents","initialContentTypes","isLoading","current","toggleNotification","useNotification","lockAppWithAutoreload","unlockAppWithAutoreload","useAutoReloadOverlayBlocker","serverRestartWatcher","useServerRestartWatcher","getPlugin","useStrapiApp","plugin","autoReload","useAppInfo","formatMessage","useIntl","trackUsage","useCTBTracking","refetchPermissions","useAuth","onCloseModal","useFormModalNavigation","isSaving","setIsSaving","React","useState","previousLocationRef","useRef","isModified","useMemo","isEqual","fetchClient","useFetchClient","isInDevelopmentMode","getDataRef","schemaResponse","reservedNamesResponse","Promise","all","get","data","actions","init","mapValues","component","status","contentType","clearHistory","err","console","error","type","message","id","defaultMessage","useEffect","pathname","reloadPlugin","currentPath","previousPath","CTB_PATH","isCTBPath","includes","wasCTBPath","getTrad","getAllComponentsThatHaveAComponentInTheirAttributes","composWithCompos","retrieveComponentsThatHaveComponents","getAllNestedComponents","appNestedCompo","retrieveNestedComponents","updatePermissions","saveSchema","PluginForms","apis","forms","mutatedCTs","Object","entries","reduce","acc","uid","mutateContentTypeSchema","requestData","trackingEventProperties","stateToRequestData","isSendingContentTypes","keys","length","post","success","adminApi","util","invalidateTags","payload","GUIDED_TOUR_REQUIRED_ACTIONS","contentTypeBuilder","createSchema","componentsThatHaveOtherComponentInTheirAttributes","nestedComponents","allComponentsCategories","retrieveSpecificInfoFromComponents","componentsGroupedByCategory","groupBy","sortedContentTypesList","sortContentType","context","addAttribute","editAttribute","addCustomFieldAttribute","editCustomFieldAttribute","addCreatedComponentToDynamicZone","createComponentSchema","componentCategory","changeDynamicZoneComponents","forTarget","targetUid","dynamicZoneTarget","newComponents","removeAttribute","removeField","removeComponentFromDynamicZone","deleteComponent","userConfirm","window","confirm","deleteContentType","updateComponentSchema","componentUID","updateComponentUid","newComponentUID","updateSchema","args","moveAttribute","applyChange","history","undo","redo","discardAllChanges","discardAll","canUndo","past","canRedo","future","canDiscardAll","_jsx","DataManagerContext","Provider","value"],"mappings":"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"}
@@ -1,13 +1,17 @@
1
1
  import { jsx } from 'react/jsx-runtime';
2
2
  import * as React from 'react';
3
- import { useGuidedTour, useNotification, useStrapiApp, useAppInfo, useTracking, useAuth, useFetchClient, adminApi, GUIDED_TOUR_REQUIRED_ACTIONS } from '@strapi/admin/strapi-admin';
3
+ import { useGuidedTour, useNotification, useStrapiApp, useAppInfo, useAuth, useFetchClient, adminApi, GUIDED_TOUR_REQUIRED_ACTIONS } from '@strapi/admin/strapi-admin';
4
4
  import groupBy from 'lodash/groupBy';
5
5
  import isEqual from 'lodash/isEqual';
6
6
  import mapValues from 'lodash/mapValues';
7
7
  import { useIntl } from 'react-intl';
8
8
  import { useDispatch, useSelector } from 'react-redux';
9
+ import { useLocation } from 'react-router-dom';
9
10
  import { getTrad } from '../../utils/getTrad.mjs';
10
11
  import { useAutoReloadOverlayBlocker } from '../AutoReloadOverlayBlocker.mjs';
12
+ import '../CTBSession/sessionContext.mjs';
13
+ import { useCTBSession } from '../CTBSession/useCTBSession.mjs';
14
+ import { useCTBTracking } from '../CTBSession/useCTBTracking.mjs';
11
15
  import { useFormModalNavigation } from '../FormModalNavigation/useFormModalNavigation.mjs';
12
16
  import { DataManagerContext } from './DataManagerContext.mjs';
13
17
  import { actions, initialState } from './reducer.mjs';
@@ -22,6 +26,8 @@ const DataManagerProvider = ({ children })=>{
22
26
  const dispatch = useDispatch();
23
27
  const state = useSelector(selectState);
24
28
  const dispatchGuidedTour = useGuidedTour('DataManagerProvider', (s)=>s.dispatch);
29
+ const location = useLocation();
30
+ const { sessionId: ctbSessionId, regenerateSessionId } = useCTBSession();
25
31
  const { components, contentTypes, reservedNames, initialComponents, initialContentTypes, isLoading } = state.current;
26
32
  const { toggleNotification } = useNotification();
27
33
  const { lockAppWithAutoreload, unlockAppWithAutoreload } = useAutoReloadOverlayBlocker();
@@ -30,10 +36,11 @@ const DataManagerProvider = ({ children })=>{
30
36
  const plugin = getPlugin('content-type-builder');
31
37
  const autoReload = useAppInfo('DataManagerProvider', (state)=>state.autoReload);
32
38
  const { formatMessage } = useIntl();
33
- const { trackUsage } = useTracking();
39
+ const { trackUsage } = useCTBTracking();
34
40
  const refetchPermissions = useAuth('DataManagerProvider', (state)=>state.refetchPermissions);
35
41
  const { onCloseModal } = useFormModalNavigation();
36
42
  const [isSaving, setIsSaving] = React.useState(false);
43
+ const previousLocationRef = React.useRef(null);
37
44
  const isModified = React.useMemo(()=>{
38
45
  return !(isEqual(components, initialComponents) && isEqual(contentTypes, initialContentTypes));
39
46
  }, [
@@ -79,12 +86,31 @@ const DataManagerProvider = ({ children })=>{
79
86
  };
80
87
  React.useEffect(()=>{
81
88
  getDataRef.current();
89
+ previousLocationRef.current = location.pathname;
82
90
  return ()=>{
83
91
  // Reload the plugin so the cycle is new again
84
92
  dispatch(actions.reloadPlugin());
85
93
  };
86
94
  // eslint-disable-next-line react-hooks/exhaustive-deps
87
95
  }, []);
96
+ // Detect navigation away and back to CTB to regenerate session
97
+ React.useEffect(()=>{
98
+ const currentPath = location.pathname;
99
+ const previousPath = previousLocationRef.current;
100
+ const CTB_PATH = '/plugins/content-type-builder';
101
+ if (previousPath) {
102
+ const isCTBPath = currentPath.includes(CTB_PATH);
103
+ const wasCTBPath = previousPath.includes(CTB_PATH);
104
+ // Regenerate session when returning to CTB after navigating away
105
+ if (!wasCTBPath && isCTBPath) {
106
+ regenerateSessionId();
107
+ }
108
+ }
109
+ previousLocationRef.current = currentPath;
110
+ }, [
111
+ location.pathname,
112
+ regenerateSessionId
113
+ ]);
88
114
  React.useEffect(()=>{
89
115
  if (!autoReload) {
90
116
  toggleNotification({
@@ -121,6 +147,11 @@ const DataManagerProvider = ({ children })=>{
121
147
  components: state.current.components,
122
148
  contentTypes: mutatedCTs
123
149
  });
150
+ // Track that the save button was clicked (includes session ID via useCTBTracking)
151
+ trackUsage('willUpdateCTBSchema', {
152
+ ...trackingEventProperties,
153
+ ctbSessionId
154
+ });
124
155
  const isSendingContentTypes = Object.keys(state.current.contentTypes).length > 0;
125
156
  lockAppWithAutoreload();
126
157
  try {
@@ -128,10 +159,13 @@ const DataManagerProvider = ({ children })=>{
128
159
  data: requestData
129
160
  });
130
161
  if (isSendingContentTypes) {
162
+ // Note: didCreateGuidedTourCollectionType doesn't accept properties
131
163
  trackUsage('didCreateGuidedTourCollectionType');
132
164
  }
133
165
  // Make sure the server has restarted
134
166
  await serverRestartWatcher();
167
+ // Generate new session ID after server restart
168
+ regenerateSessionId();
135
169
  // refetch and update initial state after the data has been saved
136
170
  await getDataRef.current();
137
171
  // Update the app's permissions
@@ -149,7 +183,8 @@ const DataManagerProvider = ({ children })=>{
149
183
  });
150
184
  trackUsage('didUpdateCTBSchema', {
151
185
  ...trackingEventProperties,
152
- success: false
186
+ success: false,
187
+ ctbSessionId
153
188
  });
154
189
  } finally{
155
190
  setIsSaving(false);
@@ -166,7 +201,8 @@ const DataManagerProvider = ({ children })=>{
166
201
  });
167
202
  trackUsage('didUpdateCTBSchema', {
168
203
  ...trackingEventProperties,
169
- success: true
204
+ success: true,
205
+ ctbSessionId
170
206
  });
171
207
  }
172
208
  };
@@ -248,6 +284,7 @@ const DataManagerProvider = ({ children })=>{
248
284
  },
249
285
  removeAttribute (payload) {
250
286
  if (payload.forTarget === 'contentType') {
287
+ // Note: willDeleteFieldOfContentType doesn't accept properties
251
288
  trackUsage('willDeleteFieldOfContentType');
252
289
  }
253
290
  dispatch(actions.removeField(payload));
@@ -1 +1 @@
1
- {"version":3,"file":"DataManagerProvider.mjs","sources":["../../../../admin/src/components/DataManager/DataManagerProvider.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n useTracking,\n useStrapiApp,\n useNotification,\n useAppInfo,\n useFetchClient,\n useAuth,\n adminApi,\n useGuidedTour,\n GUIDED_TOUR_REQUIRED_ACTIONS,\n} from '@strapi/admin/strapi-admin';\nimport groupBy from 'lodash/groupBy';\nimport isEqual from 'lodash/isEqual';\nimport mapValues from 'lodash/mapValues';\nimport { useIntl } from 'react-intl';\nimport { useSelector, useDispatch } from 'react-redux';\n\nimport { getTrad } from '../../utils/getTrad';\nimport { useAutoReloadOverlayBlocker } from '../AutoReloadOverlayBlocker';\nimport { useFormModalNavigation } from '../FormModalNavigation/useFormModalNavigation';\n\nimport { DataManagerContext, type DataManagerContextValue } from './DataManagerContext';\nimport { actions, initialState, type State } from './reducer';\nimport { useServerRestartWatcher } from './useServerRestartWatcher';\nimport { sortContentType, stateToRequestData } from './utils/cleanData';\nimport { retrieveComponentsThatHaveComponents } from './utils/retrieveComponentsThatHaveComponents';\nimport { retrieveNestedComponents } from './utils/retrieveNestedComponents';\nimport { retrieveSpecificInfoFromComponents } from './utils/retrieveSpecificInfoFromComponents';\n\nimport type { ContentTypes, ContentType, Components } from '../../types';\nimport type { FormAPI } from '../../utils/formAPI';\nimport type { Internal } from '@strapi/types';\n\ninterface DataManagerProviderProps {\n children: React.ReactNode;\n}\n\nconst selectState = (state: Record<string, unknown>) =>\n (state['content-type-builder_dataManagerProvider'] || initialState) as State;\n\nconst DataManagerProvider = ({ children }: DataManagerProviderProps) => {\n const dispatch = useDispatch();\n const state = useSelector(selectState);\n const dispatchGuidedTour = useGuidedTour('DataManagerProvider', (s) => s.dispatch);\n\n const {\n components,\n contentTypes,\n reservedNames,\n initialComponents,\n initialContentTypes,\n isLoading,\n } = state.current;\n\n const { toggleNotification } = useNotification();\n const { lockAppWithAutoreload, unlockAppWithAutoreload } = useAutoReloadOverlayBlocker();\n const serverRestartWatcher = useServerRestartWatcher();\n\n const getPlugin = useStrapiApp('DataManagerProvider', (state) => state.getPlugin);\n const plugin = getPlugin('content-type-builder');\n const autoReload = useAppInfo('DataManagerProvider', (state) => state.autoReload);\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const refetchPermissions = useAuth('DataManagerProvider', (state) => state.refetchPermissions);\n const { onCloseModal } = useFormModalNavigation();\n\n const [isSaving, setIsSaving] = React.useState(false);\n\n const isModified = React.useMemo(() => {\n return !(isEqual(components, initialComponents) && isEqual(contentTypes, initialContentTypes));\n }, [components, contentTypes, initialComponents, initialContentTypes]);\n\n const fetchClient = useFetchClient();\n\n const isInDevelopmentMode = autoReload;\n\n const getDataRef = React.useRef<any>();\n\n getDataRef.current = async () => {\n try {\n const [schemaResponse, reservedNamesResponse] = await Promise.all([\n fetchClient.get(`/content-type-builder/schema`),\n fetchClient.get(`/content-type-builder/reserved-names`),\n ]);\n\n const { components, contentTypes } = schemaResponse.data.data;\n\n dispatch(\n actions.init({\n components: mapValues(components, (component) => ({\n ...component,\n status: 'UNCHANGED',\n })) as Components,\n contentTypes: mapValues(contentTypes, (contentType) => ({\n ...contentType,\n status: 'UNCHANGED',\n })) as ContentTypes,\n reservedNames: reservedNamesResponse.data,\n })\n );\n\n dispatch(actions.clearHistory());\n } catch (err) {\n console.error({ err });\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n }\n };\n\n React.useEffect(() => {\n getDataRef.current();\n\n return () => {\n // Reload the plugin so the cycle is new again\n dispatch(actions.reloadPlugin());\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n React.useEffect(() => {\n if (!autoReload) {\n toggleNotification({\n type: 'info',\n message: formatMessage({ id: getTrad('notification.info.autoreaload-disable') }),\n });\n }\n }, [autoReload, toggleNotification, formatMessage]);\n\n const getAllComponentsThatHaveAComponentInTheirAttributes = (components: Components) => {\n const composWithCompos = retrieveComponentsThatHaveComponents(components);\n\n return composWithCompos;\n };\n\n const getAllNestedComponents = (components: Components) => {\n const appNestedCompo = retrieveNestedComponents(components);\n\n return appNestedCompo;\n };\n\n const updatePermissions = async () => {\n await refetchPermissions();\n };\n\n const saveSchema = async () => {\n setIsSaving(true);\n\n const PluginForms = plugin?.apis?.forms as FormAPI;\n\n const mutatedCTs = Object.entries(state.current.contentTypes).reduce(\n (acc, [uid, contentType]) => {\n acc[uid] = PluginForms.mutateContentTypeSchema(\n contentType,\n initialContentTypes[uid]\n ) as ContentType;\n\n return acc;\n },\n {} as ContentTypes\n );\n\n const { requestData, trackingEventProperties } = stateToRequestData({\n components: state.current.components,\n contentTypes: mutatedCTs,\n });\n\n const isSendingContentTypes = Object.keys(state.current.contentTypes).length > 0;\n\n lockAppWithAutoreload();\n\n try {\n await fetchClient.post(`/content-type-builder/update-schema`, { data: requestData });\n\n if (isSendingContentTypes) {\n trackUsage('didCreateGuidedTourCollectionType');\n }\n\n // Make sure the server has restarted\n await serverRestartWatcher();\n // refetch and update initial state after the data has been saved\n await getDataRef.current();\n // Update the app's permissions\n await updatePermissions();\n } catch (err) {\n console.error({ err });\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n\n trackUsage('didUpdateCTBSchema', { ...trackingEventProperties, success: false });\n } finally {\n setIsSaving(false);\n unlockAppWithAutoreload();\n\n dispatch(adminApi.util.invalidateTags(['GuidedTourMeta', 'HomepageKeyStatistics']));\n dispatchGuidedTour({\n type: 'set_completed_actions',\n payload: [GUIDED_TOUR_REQUIRED_ACTIONS.contentTypeBuilder.createSchema],\n });\n\n trackUsage('didUpdateCTBSchema', { ...trackingEventProperties, success: true });\n }\n };\n\n const componentsThatHaveOtherComponentInTheirAttributes = React.useMemo(() => {\n return getAllComponentsThatHaveAComponentInTheirAttributes(components);\n }, [components]);\n\n const nestedComponents = React.useMemo(() => {\n return getAllNestedComponents(components);\n }, [components]);\n\n const allComponentsCategories = React.useMemo(() => {\n return retrieveSpecificInfoFromComponents(components, ['category']);\n }, [components]);\n\n const componentsGroupedByCategory = React.useMemo(() => {\n return groupBy(components, 'category');\n }, [components]);\n\n const sortedContentTypesList = React.useMemo(() => {\n return sortContentType(contentTypes);\n }, [contentTypes]);\n\n const context: DataManagerContextValue = {\n componentsThatHaveOtherComponentInTheirAttributes,\n nestedComponents,\n saveSchema,\n reservedNames,\n components,\n contentTypes,\n initialComponents,\n initialContentTypes,\n isSaving,\n isModified,\n isInDevelopmentMode,\n allComponentsCategories,\n componentsGroupedByCategory,\n sortedContentTypesList,\n isLoading,\n addAttribute(payload) {\n dispatch(actions.addAttribute(payload));\n },\n editAttribute(payload) {\n dispatch(actions.editAttribute(payload));\n },\n addCustomFieldAttribute(payload) {\n dispatch(actions.addCustomFieldAttribute(payload));\n },\n editCustomFieldAttribute(payload) {\n dispatch(actions.editCustomFieldAttribute(payload));\n },\n addCreatedComponentToDynamicZone(payload) {\n dispatch(actions.addCreatedComponentToDynamicZone(payload));\n },\n createSchema(payload) {\n dispatch(actions.createSchema(payload));\n },\n createComponentSchema({ data, uid, componentCategory }) {\n dispatch(actions.createComponentSchema({ data, uid, componentCategory }));\n },\n changeDynamicZoneComponents({ forTarget, targetUid, dynamicZoneTarget, newComponents }) {\n dispatch(\n actions.changeDynamicZoneComponents({\n forTarget,\n targetUid,\n dynamicZoneTarget,\n newComponents,\n })\n );\n },\n removeAttribute(payload) {\n if (payload.forTarget === 'contentType') {\n trackUsage('willDeleteFieldOfContentType');\n }\n\n dispatch(actions.removeField(payload));\n },\n removeComponentFromDynamicZone(payload) {\n dispatch(actions.removeComponentFromDynamicZone(payload));\n },\n deleteComponent(uid: Internal.UID.Component) {\n const userConfirm = window.confirm(\n formatMessage({\n id: getTrad(`popUpWarning.bodyMessage.component.delete`),\n })\n );\n\n if (userConfirm) {\n onCloseModal();\n\n dispatch(actions.deleteComponent(uid));\n }\n },\n deleteContentType(uid: Internal.UID.ContentType) {\n const userConfirm = window.confirm(\n formatMessage({\n id: getTrad(`popUpWarning.bodyMessage.contentType.delete`),\n })\n );\n\n if (userConfirm) {\n onCloseModal();\n\n dispatch(actions.deleteContentType(uid));\n }\n },\n\n updateComponentSchema({ data, componentUID }) {\n dispatch(\n actions.updateComponentSchema({\n data,\n uid: componentUID,\n })\n );\n },\n\n updateComponentUid({ componentUID, newComponentUID }) {\n dispatch(\n actions.updateComponentUid({\n uid: componentUID,\n newComponentUID,\n })\n );\n },\n\n updateSchema(args) {\n dispatch(actions.updateSchema(args));\n },\n\n moveAttribute(args) {\n dispatch(actions.moveAttribute(args));\n },\n\n applyChange(args) {\n dispatch(actions.applyChange(args));\n },\n\n history: {\n undo() {\n dispatch(actions.undo());\n },\n\n redo() {\n dispatch(actions.redo());\n },\n\n discardAllChanges() {\n dispatch(actions.discardAll());\n },\n\n canUndo: state.past.length > 0,\n canRedo: state.future.length > 0,\n canDiscardAll: isModified,\n },\n };\n\n return <DataManagerContext.Provider value={context}>{children}</DataManagerContext.Provider>;\n};\n\n// eslint-disable-next-line import/no-default-export\nexport default DataManagerProvider;\n"],"names":["selectState","state","initialState","DataManagerProvider","children","dispatch","useDispatch","useSelector","dispatchGuidedTour","useGuidedTour","s","components","contentTypes","reservedNames","initialComponents","initialContentTypes","isLoading","current","toggleNotification","useNotification","lockAppWithAutoreload","unlockAppWithAutoreload","useAutoReloadOverlayBlocker","serverRestartWatcher","useServerRestartWatcher","getPlugin","useStrapiApp","plugin","autoReload","useAppInfo","formatMessage","useIntl","trackUsage","useTracking","refetchPermissions","useAuth","onCloseModal","useFormModalNavigation","isSaving","setIsSaving","React","useState","isModified","useMemo","isEqual","fetchClient","useFetchClient","isInDevelopmentMode","getDataRef","useRef","schemaResponse","reservedNamesResponse","Promise","all","get","data","actions","init","mapValues","component","status","contentType","clearHistory","err","console","error","type","message","id","defaultMessage","useEffect","reloadPlugin","getTrad","getAllComponentsThatHaveAComponentInTheirAttributes","composWithCompos","retrieveComponentsThatHaveComponents","getAllNestedComponents","appNestedCompo","retrieveNestedComponents","updatePermissions","saveSchema","PluginForms","apis","forms","mutatedCTs","Object","entries","reduce","acc","uid","mutateContentTypeSchema","requestData","trackingEventProperties","stateToRequestData","isSendingContentTypes","keys","length","post","success","adminApi","util","invalidateTags","payload","GUIDED_TOUR_REQUIRED_ACTIONS","contentTypeBuilder","createSchema","componentsThatHaveOtherComponentInTheirAttributes","nestedComponents","allComponentsCategories","retrieveSpecificInfoFromComponents","componentsGroupedByCategory","groupBy","sortedContentTypesList","sortContentType","context","addAttribute","editAttribute","addCustomFieldAttribute","editCustomFieldAttribute","addCreatedComponentToDynamicZone","createComponentSchema","componentCategory","changeDynamicZoneComponents","forTarget","targetUid","dynamicZoneTarget","newComponents","removeAttribute","removeField","removeComponentFromDynamicZone","deleteComponent","userConfirm","window","confirm","deleteContentType","updateComponentSchema","componentUID","updateComponentUid","newComponentUID","updateSchema","args","moveAttribute","applyChange","history","undo","redo","discardAllChanges","discardAll","canUndo","past","canRedo","future","canDiscardAll","_jsx","DataManagerContext","Provider","value"],"mappings":";;;;;;;;;;;;;;;;;;;AAuCA,MAAMA,cAAc,CAACC,KAAAA,GAClBA,KAAK,CAAC,2CAA2C,IAAIC,YAAAA;AAExD,MAAMC,mBAAsB,GAAA,CAAC,EAAEC,QAAQ,EAA4B,GAAA;AACjE,IAAA,MAAMC,QAAWC,GAAAA,WAAAA,EAAAA;AACjB,IAAA,MAAML,QAAQM,WAAYP,CAAAA,WAAAA,CAAAA;AAC1B,IAAA,MAAMQ,qBAAqBC,aAAc,CAAA,qBAAA,EAAuB,CAACC,CAAAA,GAAMA,EAAEL,QAAQ,CAAA;AAEjF,IAAA,MAAM,EACJM,UAAU,EACVC,YAAY,EACZC,aAAa,EACbC,iBAAiB,EACjBC,mBAAmB,EACnBC,SAAS,EACV,GAAGf,MAAMgB,OAAO;IAEjB,MAAM,EAAEC,kBAAkB,EAAE,GAAGC,eAAAA,EAAAA;AAC/B,IAAA,MAAM,EAAEC,qBAAqB,EAAEC,uBAAuB,EAAE,GAAGC,2BAAAA,EAAAA;AAC3D,IAAA,MAAMC,oBAAuBC,GAAAA,uBAAAA,EAAAA;AAE7B,IAAA,MAAMC,YAAYC,YAAa,CAAA,qBAAA,EAAuB,CAACzB,KAAAA,GAAUA,MAAMwB,SAAS,CAAA;AAChF,IAAA,MAAME,SAASF,SAAU,CAAA,sBAAA,CAAA;AACzB,IAAA,MAAMG,aAAaC,UAAW,CAAA,qBAAA,EAAuB,CAAC5B,KAAAA,GAAUA,MAAM2B,UAAU,CAAA;IAChF,MAAM,EAAEE,aAAa,EAAE,GAAGC,OAAAA,EAAAA;IAC1B,MAAM,EAAEC,UAAU,EAAE,GAAGC,WAAAA,EAAAA;AACvB,IAAA,MAAMC,qBAAqBC,OAAQ,CAAA,qBAAA,EAAuB,CAAClC,KAAAA,GAAUA,MAAMiC,kBAAkB,CAAA;IAC7F,MAAM,EAAEE,YAAY,EAAE,GAAGC,sBAAAA,EAAAA;AAEzB,IAAA,MAAM,CAACC,QAAUC,EAAAA,WAAAA,CAAY,GAAGC,KAAAA,CAAMC,QAAQ,CAAC,KAAA,CAAA;IAE/C,MAAMC,UAAAA,GAAaF,KAAMG,CAAAA,OAAO,CAAC,IAAA;AAC/B,QAAA,OAAO,EAAEC,OAAAA,CAAQjC,YAAYG,iBAAsB8B,CAAAA,IAAAA,OAAAA,CAAQhC,cAAcG,mBAAmB,CAAA,CAAA;KAC3F,EAAA;AAACJ,QAAAA,UAAAA;AAAYC,QAAAA,YAAAA;AAAcE,QAAAA,iBAAAA;AAAmBC,QAAAA;AAAoB,KAAA,CAAA;AAErE,IAAA,MAAM8B,WAAcC,GAAAA,cAAAA,EAAAA;AAEpB,IAAA,MAAMC,mBAAsBnB,GAAAA,UAAAA;IAE5B,MAAMoB,UAAAA,GAAaR,MAAMS,MAAM,EAAA;AAE/BD,IAAAA,UAAAA,CAAW/B,OAAO,GAAG,UAAA;QACnB,IAAI;AACF,YAAA,MAAM,CAACiC,cAAgBC,EAAAA,qBAAAA,CAAsB,GAAG,MAAMC,OAAAA,CAAQC,GAAG,CAAC;AAChER,gBAAAA,WAAAA,CAAYS,GAAG,CAAC,CAAC,4BAA4B,CAAC,CAAA;AAC9CT,gBAAAA,WAAAA,CAAYS,GAAG,CAAC,CAAC,oCAAoC,CAAC;AACvD,aAAA,CAAA;YAED,MAAM,EAAE3C,UAAU,EAAEC,YAAY,EAAE,GAAGsC,cAAAA,CAAeK,IAAI,CAACA,IAAI;YAE7DlD,QACEmD,CAAAA,OAAAA,CAAQC,IAAI,CAAC;AACX9C,gBAAAA,UAAAA,EAAY+C,SAAU/C,CAAAA,UAAAA,EAAY,CAACgD,SAAAA,IAAe;AAChD,wBAAA,GAAGA,SAAS;wBACZC,MAAQ,EAAA;qBACV,CAAA,CAAA;AACAhD,gBAAAA,YAAAA,EAAc8C,SAAU9C,CAAAA,YAAAA,EAAc,CAACiD,WAAAA,IAAiB;AACtD,wBAAA,GAAGA,WAAW;wBACdD,MAAQ,EAAA;qBACV,CAAA,CAAA;AACA/C,gBAAAA,aAAAA,EAAesC,sBAAsBI;AACvC,aAAA,CAAA,CAAA;AAGFlD,YAAAA,QAAAA,CAASmD,QAAQM,YAAY,EAAA,CAAA;AAC/B,SAAA,CAAE,OAAOC,GAAK,EAAA;AACZC,YAAAA,OAAAA,CAAQC,KAAK,CAAC;AAAEF,gBAAAA;AAAI,aAAA,CAAA;YACpB7C,kBAAmB,CAAA;gBACjBgD,IAAM,EAAA,QAAA;AACNC,gBAAAA,OAAAA,EAASrC,aAAc,CAAA;oBAAEsC,EAAI,EAAA,oBAAA;oBAAsBC,cAAgB,EAAA;AAAoB,iBAAA;AACzF,aAAA,CAAA;AACF;AACF,KAAA;AAEA7B,IAAAA,KAAAA,CAAM8B,SAAS,CAAC,IAAA;AACdtB,QAAAA,UAAAA,CAAW/B,OAAO,EAAA;QAElB,OAAO,IAAA;;AAELZ,YAAAA,QAAAA,CAASmD,QAAQe,YAAY,EAAA,CAAA;AAC/B,SAAA;;AAEF,KAAA,EAAG,EAAE,CAAA;AAEL/B,IAAAA,KAAAA,CAAM8B,SAAS,CAAC,IAAA;AACd,QAAA,IAAI,CAAC1C,UAAY,EAAA;YACfV,kBAAmB,CAAA;gBACjBgD,IAAM,EAAA,MAAA;AACNC,gBAAAA,OAAAA,EAASrC,aAAc,CAAA;AAAEsC,oBAAAA,EAAAA,EAAII,OAAQ,CAAA,uCAAA;AAAyC,iBAAA;AAChF,aAAA,CAAA;AACF;KACC,EAAA;AAAC5C,QAAAA,UAAAA;AAAYV,QAAAA,kBAAAA;AAAoBY,QAAAA;AAAc,KAAA,CAAA;AAElD,IAAA,MAAM2C,sDAAsD,CAAC9D,UAAAA,GAAAA;AAC3D,QAAA,MAAM+D,mBAAmBC,oCAAqChE,CAAAA,UAAAA,CAAAA;QAE9D,OAAO+D,gBAAAA;AACT,KAAA;AAEA,IAAA,MAAME,yBAAyB,CAACjE,UAAAA,GAAAA;AAC9B,QAAA,MAAMkE,iBAAiBC,wBAAyBnE,CAAAA,UAAAA,CAAAA;QAEhD,OAAOkE,cAAAA;AACT,KAAA;AAEA,IAAA,MAAME,iBAAoB,GAAA,UAAA;QACxB,MAAM7C,kBAAAA,EAAAA;AACR,KAAA;AAEA,IAAA,MAAM8C,UAAa,GAAA,UAAA;QACjBzC,WAAY,CAAA,IAAA,CAAA;QAEZ,MAAM0C,WAAAA,GAActD,QAAQuD,IAAMC,EAAAA,KAAAA;AAElC,QAAA,MAAMC,UAAaC,GAAAA,MAAAA,CAAOC,OAAO,CAACrF,MAAMgB,OAAO,CAACL,YAAY,CAAA,CAAE2E,MAAM,CAClE,CAACC,GAAK,EAAA,CAACC,KAAK5B,WAAY,CAAA,GAAA;YACtB2B,GAAG,CAACC,IAAI,GAAGR,WAAAA,CAAYS,uBAAuB,CAC5C7B,WAAAA,EACA9C,mBAAmB,CAAC0E,GAAI,CAAA,CAAA;YAG1B,OAAOD,GAAAA;AACT,SAAA,EACA,EAAC,CAAA;AAGH,QAAA,MAAM,EAAEG,WAAW,EAAEC,uBAAuB,EAAE,GAAGC,kBAAmB,CAAA;YAClElF,UAAYV,EAAAA,KAAAA,CAAMgB,OAAO,CAACN,UAAU;YACpCC,YAAcwE,EAAAA;AAChB,SAAA,CAAA;QAEA,MAAMU,qBAAAA,GAAwBT,MAAOU,CAAAA,IAAI,CAAC9F,KAAAA,CAAMgB,OAAO,CAACL,YAAY,CAAEoF,CAAAA,MAAM,GAAG,CAAA;AAE/E5E,QAAAA,qBAAAA,EAAAA;QAEA,IAAI;AACF,YAAA,MAAMyB,YAAYoD,IAAI,CAAC,CAAC,mCAAmC,CAAC,EAAE;gBAAE1C,IAAMoC,EAAAA;AAAY,aAAA,CAAA;AAElF,YAAA,IAAIG,qBAAuB,EAAA;gBACzB9D,UAAW,CAAA,mCAAA,CAAA;AACb;;YAGA,MAAMT,oBAAAA,EAAAA;;AAEN,YAAA,MAAMyB,WAAW/B,OAAO,EAAA;;YAExB,MAAM8D,iBAAAA,EAAAA;AACR,SAAA,CAAE,OAAOhB,GAAK,EAAA;AACZC,YAAAA,OAAAA,CAAQC,KAAK,CAAC;AAAEF,gBAAAA;AAAI,aAAA,CAAA;YACpB7C,kBAAmB,CAAA;gBACjBgD,IAAM,EAAA,QAAA;AACNC,gBAAAA,OAAAA,EAASrC,aAAc,CAAA;oBAAEsC,EAAI,EAAA,oBAAA;oBAAsBC,cAAgB,EAAA;AAAoB,iBAAA;AACzF,aAAA,CAAA;AAEArC,YAAAA,UAAAA,CAAW,oBAAsB,EAAA;AAAE,gBAAA,GAAG4D,uBAAuB;gBAAEM,OAAS,EAAA;AAAM,aAAA,CAAA;SACtE,QAAA;YACR3D,WAAY,CAAA,KAAA,CAAA;AACZlB,YAAAA,uBAAAA,EAAAA;AAEAhB,YAAAA,QAAAA,CAAS8F,QAASC,CAAAA,IAAI,CAACC,cAAc,CAAC;AAAC,gBAAA,gBAAA;AAAkB,gBAAA;AAAwB,aAAA,CAAA,CAAA;YACjF7F,kBAAmB,CAAA;gBACjB0D,IAAM,EAAA,uBAAA;gBACNoC,OAAS,EAAA;oBAACC,4BAA6BC,CAAAA,kBAAkB,CAACC;AAAa;AACzE,aAAA,CAAA;AAEAzE,YAAAA,UAAAA,CAAW,oBAAsB,EAAA;AAAE,gBAAA,GAAG4D,uBAAuB;gBAAEM,OAAS,EAAA;AAAK,aAAA,CAAA;AAC/E;AACF,KAAA;IAEA,MAAMQ,iDAAAA,GAAoDlE,KAAMG,CAAAA,OAAO,CAAC,IAAA;AACtE,QAAA,OAAO8B,mDAAoD9D,CAAAA,UAAAA,CAAAA;KAC1D,EAAA;AAACA,QAAAA;AAAW,KAAA,CAAA;IAEf,MAAMgG,gBAAAA,GAAmBnE,KAAMG,CAAAA,OAAO,CAAC,IAAA;AACrC,QAAA,OAAOiC,sBAAuBjE,CAAAA,UAAAA,CAAAA;KAC7B,EAAA;AAACA,QAAAA;AAAW,KAAA,CAAA;IAEf,MAAMiG,uBAAAA,GAA0BpE,KAAMG,CAAAA,OAAO,CAAC,IAAA;AAC5C,QAAA,OAAOkE,mCAAmClG,UAAY,EAAA;AAAC,YAAA;AAAW,SAAA,CAAA;KACjE,EAAA;AAACA,QAAAA;AAAW,KAAA,CAAA;IAEf,MAAMmG,2BAAAA,GAA8BtE,KAAMG,CAAAA,OAAO,CAAC,IAAA;AAChD,QAAA,OAAOoE,QAAQpG,UAAY,EAAA,UAAA,CAAA;KAC1B,EAAA;AAACA,QAAAA;AAAW,KAAA,CAAA;IAEf,MAAMqG,sBAAAA,GAAyBxE,KAAMG,CAAAA,OAAO,CAAC,IAAA;AAC3C,QAAA,OAAOsE,eAAgBrG,CAAAA,YAAAA,CAAAA;KACtB,EAAA;AAACA,QAAAA;AAAa,KAAA,CAAA;AAEjB,IAAA,MAAMsG,OAAmC,GAAA;AACvCR,QAAAA,iDAAAA;AACAC,QAAAA,gBAAAA;AACA3B,QAAAA,UAAAA;AACAnE,QAAAA,aAAAA;AACAF,QAAAA,UAAAA;AACAC,QAAAA,YAAAA;AACAE,QAAAA,iBAAAA;AACAC,QAAAA,mBAAAA;AACAuB,QAAAA,QAAAA;AACAI,QAAAA,UAAAA;AACAK,QAAAA,mBAAAA;AACA6D,QAAAA,uBAAAA;AACAE,QAAAA,2BAAAA;AACAE,QAAAA,sBAAAA;AACAhG,QAAAA,SAAAA;AACAmG,QAAAA,YAAAA,CAAAA,CAAab,OAAO,EAAA;YAClBjG,QAASmD,CAAAA,OAAAA,CAAQ2D,YAAY,CAACb,OAAAA,CAAAA,CAAAA;AAChC,SAAA;AACAc,QAAAA,aAAAA,CAAAA,CAAcd,OAAO,EAAA;YACnBjG,QAASmD,CAAAA,OAAAA,CAAQ4D,aAAa,CAACd,OAAAA,CAAAA,CAAAA;AACjC,SAAA;AACAe,QAAAA,uBAAAA,CAAAA,CAAwBf,OAAO,EAAA;YAC7BjG,QAASmD,CAAAA,OAAAA,CAAQ6D,uBAAuB,CAACf,OAAAA,CAAAA,CAAAA;AAC3C,SAAA;AACAgB,QAAAA,wBAAAA,CAAAA,CAAyBhB,OAAO,EAAA;YAC9BjG,QAASmD,CAAAA,OAAAA,CAAQ8D,wBAAwB,CAAChB,OAAAA,CAAAA,CAAAA;AAC5C,SAAA;AACAiB,QAAAA,gCAAAA,CAAAA,CAAiCjB,OAAO,EAAA;YACtCjG,QAASmD,CAAAA,OAAAA,CAAQ+D,gCAAgC,CAACjB,OAAAA,CAAAA,CAAAA;AACpD,SAAA;AACAG,QAAAA,YAAAA,CAAAA,CAAaH,OAAO,EAAA;YAClBjG,QAASmD,CAAAA,OAAAA,CAAQiD,YAAY,CAACH,OAAAA,CAAAA,CAAAA;AAChC,SAAA;AACAkB,QAAAA,qBAAAA,CAAAA,CAAsB,EAAEjE,IAAI,EAAEkC,GAAG,EAAEgC,iBAAiB,EAAE,EAAA;YACpDpH,QAASmD,CAAAA,OAAAA,CAAQgE,qBAAqB,CAAC;AAAEjE,gBAAAA,IAAAA;AAAMkC,gBAAAA,GAAAA;AAAKgC,gBAAAA;AAAkB,aAAA,CAAA,CAAA;AACxE,SAAA;QACAC,2BAA4B,CAAA,CAAA,EAAEC,SAAS,EAAEC,SAAS,EAAEC,iBAAiB,EAAEC,aAAa,EAAE,EAAA;YACpFzH,QACEmD,CAAAA,OAAAA,CAAQkE,2BAA2B,CAAC;AAClCC,gBAAAA,SAAAA;AACAC,gBAAAA,SAAAA;AACAC,gBAAAA,iBAAAA;AACAC,gBAAAA;AACF,aAAA,CAAA,CAAA;AAEJ,SAAA;AACAC,QAAAA,eAAAA,CAAAA,CAAgBzB,OAAO,EAAA;YACrB,IAAIA,OAAAA,CAAQqB,SAAS,KAAK,aAAe,EAAA;gBACvC3F,UAAW,CAAA,8BAAA,CAAA;AACb;YAEA3B,QAASmD,CAAAA,OAAAA,CAAQwE,WAAW,CAAC1B,OAAAA,CAAAA,CAAAA;AAC/B,SAAA;AACA2B,QAAAA,8BAAAA,CAAAA,CAA+B3B,OAAO,EAAA;YACpCjG,QAASmD,CAAAA,OAAAA,CAAQyE,8BAA8B,CAAC3B,OAAAA,CAAAA,CAAAA;AAClD,SAAA;AACA4B,QAAAA,eAAAA,CAAAA,CAAgBzC,GAA2B,EAAA;AACzC,YAAA,MAAM0C,WAAcC,GAAAA,MAAAA,CAAOC,OAAO,CAChCvG,aAAc,CAAA;gBACZsC,EAAII,EAAAA,OAAAA,CAAQ,CAAC,yCAAyC,CAAC;AACzD,aAAA,CAAA,CAAA;AAGF,YAAA,IAAI2D,WAAa,EAAA;AACf/F,gBAAAA,YAAAA,EAAAA;gBAEA/B,QAASmD,CAAAA,OAAAA,CAAQ0E,eAAe,CAACzC,GAAAA,CAAAA,CAAAA;AACnC;AACF,SAAA;AACA6C,QAAAA,iBAAAA,CAAAA,CAAkB7C,GAA6B,EAAA;AAC7C,YAAA,MAAM0C,WAAcC,GAAAA,MAAAA,CAAOC,OAAO,CAChCvG,aAAc,CAAA;gBACZsC,EAAII,EAAAA,OAAAA,CAAQ,CAAC,2CAA2C,CAAC;AAC3D,aAAA,CAAA,CAAA;AAGF,YAAA,IAAI2D,WAAa,EAAA;AACf/F,gBAAAA,YAAAA,EAAAA;gBAEA/B,QAASmD,CAAAA,OAAAA,CAAQ8E,iBAAiB,CAAC7C,GAAAA,CAAAA,CAAAA;AACrC;AACF,SAAA;AAEA8C,QAAAA,qBAAAA,CAAAA,CAAsB,EAAEhF,IAAI,EAAEiF,YAAY,EAAE,EAAA;YAC1CnI,QACEmD,CAAAA,OAAAA,CAAQ+E,qBAAqB,CAAC;AAC5BhF,gBAAAA,IAAAA;gBACAkC,GAAK+C,EAAAA;AACP,aAAA,CAAA,CAAA;AAEJ,SAAA;AAEAC,QAAAA,kBAAAA,CAAAA,CAAmB,EAAED,YAAY,EAAEE,eAAe,EAAE,EAAA;YAClDrI,QACEmD,CAAAA,OAAAA,CAAQiF,kBAAkB,CAAC;gBACzBhD,GAAK+C,EAAAA,YAAAA;AACLE,gBAAAA;AACF,aAAA,CAAA,CAAA;AAEJ,SAAA;AAEAC,QAAAA,YAAAA,CAAAA,CAAaC,IAAI,EAAA;YACfvI,QAASmD,CAAAA,OAAAA,CAAQmF,YAAY,CAACC,IAAAA,CAAAA,CAAAA;AAChC,SAAA;AAEAC,QAAAA,aAAAA,CAAAA,CAAcD,IAAI,EAAA;YAChBvI,QAASmD,CAAAA,OAAAA,CAAQqF,aAAa,CAACD,IAAAA,CAAAA,CAAAA;AACjC,SAAA;AAEAE,QAAAA,WAAAA,CAAAA,CAAYF,IAAI,EAAA;YACdvI,QAASmD,CAAAA,OAAAA,CAAQsF,WAAW,CAACF,IAAAA,CAAAA,CAAAA;AAC/B,SAAA;QAEAG,OAAS,EAAA;AACPC,YAAAA,IAAAA,CAAAA,GAAAA;AACE3I,gBAAAA,QAAAA,CAASmD,QAAQwF,IAAI,EAAA,CAAA;AACvB,aAAA;AAEAC,YAAAA,IAAAA,CAAAA,GAAAA;AACE5I,gBAAAA,QAAAA,CAASmD,QAAQyF,IAAI,EAAA,CAAA;AACvB,aAAA;AAEAC,YAAAA,iBAAAA,CAAAA,GAAAA;AACE7I,gBAAAA,QAAAA,CAASmD,QAAQ2F,UAAU,EAAA,CAAA;AAC7B,aAAA;AAEAC,YAAAA,OAAAA,EAASnJ,KAAMoJ,CAAAA,IAAI,CAACrD,MAAM,GAAG,CAAA;AAC7BsD,YAAAA,OAAAA,EAASrJ,KAAMsJ,CAAAA,MAAM,CAACvD,MAAM,GAAG,CAAA;YAC/BwD,aAAe9G,EAAAA;AACjB;AACF,KAAA;IAEA,qBAAO+G,GAAA,CAACC,mBAAmBC,QAAQ,EAAA;QAACC,KAAO1C,EAAAA,OAAAA;AAAU9G,QAAAA,QAAAA,EAAAA;;AACvD;;;;"}
1
+ {"version":3,"file":"DataManagerProvider.mjs","sources":["../../../../admin/src/components/DataManager/DataManagerProvider.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n useStrapiApp,\n useNotification,\n useAppInfo,\n useFetchClient,\n useAuth,\n adminApi,\n useGuidedTour,\n GUIDED_TOUR_REQUIRED_ACTIONS,\n} from '@strapi/admin/strapi-admin';\nimport groupBy from 'lodash/groupBy';\nimport isEqual from 'lodash/isEqual';\nimport mapValues from 'lodash/mapValues';\nimport { useIntl } from 'react-intl';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { useLocation } from 'react-router-dom';\n\nimport { getTrad } from '../../utils/getTrad';\nimport { useAutoReloadOverlayBlocker } from '../AutoReloadOverlayBlocker';\nimport { useCTBTracking } from '../CTBSession/ctbSession';\nimport { useCTBSession } from '../CTBSession/useCTBSession';\nimport { useFormModalNavigation } from '../FormModalNavigation/useFormModalNavigation';\n\nimport { DataManagerContext, type DataManagerContextValue } from './DataManagerContext';\nimport { actions, initialState, type State } from './reducer';\nimport { useServerRestartWatcher } from './useServerRestartWatcher';\nimport { sortContentType, stateToRequestData } from './utils/cleanData';\nimport { retrieveComponentsThatHaveComponents } from './utils/retrieveComponentsThatHaveComponents';\nimport { retrieveNestedComponents } from './utils/retrieveNestedComponents';\nimport { retrieveSpecificInfoFromComponents } from './utils/retrieveSpecificInfoFromComponents';\n\nimport type { ContentTypes, ContentType, Components } from '../../types';\nimport type { FormAPI } from '../../utils/formAPI';\nimport type { Internal } from '@strapi/types';\n\ninterface DataManagerProviderProps {\n children: React.ReactNode;\n}\n\nconst selectState = (state: Record<string, unknown>) =>\n (state['content-type-builder_dataManagerProvider'] || initialState) as State;\n\nconst DataManagerProvider = ({ children }: DataManagerProviderProps) => {\n const dispatch = useDispatch();\n const state = useSelector(selectState);\n const dispatchGuidedTour = useGuidedTour('DataManagerProvider', (s) => s.dispatch);\n const location = useLocation();\n const { sessionId: ctbSessionId, regenerateSessionId } = useCTBSession();\n\n const {\n components,\n contentTypes,\n reservedNames,\n initialComponents,\n initialContentTypes,\n isLoading,\n } = state.current;\n\n const { toggleNotification } = useNotification();\n const { lockAppWithAutoreload, unlockAppWithAutoreload } = useAutoReloadOverlayBlocker();\n const serverRestartWatcher = useServerRestartWatcher();\n\n const getPlugin = useStrapiApp('DataManagerProvider', (state) => state.getPlugin);\n const plugin = getPlugin('content-type-builder');\n const autoReload = useAppInfo('DataManagerProvider', (state) => state.autoReload);\n const { formatMessage } = useIntl();\n const { trackUsage } = useCTBTracking();\n const refetchPermissions = useAuth('DataManagerProvider', (state) => state.refetchPermissions);\n const { onCloseModal } = useFormModalNavigation();\n\n const [isSaving, setIsSaving] = React.useState(false);\n const previousLocationRef = React.useRef<string | null>(null);\n\n const isModified = React.useMemo(() => {\n return !(isEqual(components, initialComponents) && isEqual(contentTypes, initialContentTypes));\n }, [components, contentTypes, initialComponents, initialContentTypes]);\n\n const fetchClient = useFetchClient();\n\n const isInDevelopmentMode = autoReload;\n\n const getDataRef = React.useRef<any>();\n\n getDataRef.current = async () => {\n try {\n const [schemaResponse, reservedNamesResponse] = await Promise.all([\n fetchClient.get(`/content-type-builder/schema`),\n fetchClient.get(`/content-type-builder/reserved-names`),\n ]);\n\n const { components, contentTypes } = schemaResponse.data.data;\n\n dispatch(\n actions.init({\n components: mapValues(components, (component) => ({\n ...component,\n status: 'UNCHANGED',\n })) as Components,\n contentTypes: mapValues(contentTypes, (contentType) => ({\n ...contentType,\n status: 'UNCHANGED',\n })) as ContentTypes,\n reservedNames: reservedNamesResponse.data,\n })\n );\n\n dispatch(actions.clearHistory());\n } catch (err) {\n console.error({ err });\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n }\n };\n\n React.useEffect(() => {\n getDataRef.current();\n previousLocationRef.current = location.pathname;\n\n return () => {\n // Reload the plugin so the cycle is new again\n dispatch(actions.reloadPlugin());\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n // Detect navigation away and back to CTB to regenerate session\n React.useEffect(() => {\n const currentPath = location.pathname;\n const previousPath = previousLocationRef.current;\n const CTB_PATH = '/plugins/content-type-builder';\n\n if (previousPath) {\n const isCTBPath = currentPath.includes(CTB_PATH);\n const wasCTBPath = previousPath.includes(CTB_PATH);\n\n // Regenerate session when returning to CTB after navigating away\n if (!wasCTBPath && isCTBPath) {\n regenerateSessionId();\n }\n }\n\n previousLocationRef.current = currentPath;\n }, [location.pathname, regenerateSessionId]);\n\n React.useEffect(() => {\n if (!autoReload) {\n toggleNotification({\n type: 'info',\n message: formatMessage({ id: getTrad('notification.info.autoreaload-disable') }),\n });\n }\n }, [autoReload, toggleNotification, formatMessage]);\n\n const getAllComponentsThatHaveAComponentInTheirAttributes = (components: Components) => {\n const composWithCompos = retrieveComponentsThatHaveComponents(components);\n\n return composWithCompos;\n };\n\n const getAllNestedComponents = (components: Components) => {\n const appNestedCompo = retrieveNestedComponents(components);\n\n return appNestedCompo;\n };\n\n const updatePermissions = async () => {\n await refetchPermissions();\n };\n\n const saveSchema = async () => {\n setIsSaving(true);\n\n const PluginForms = plugin?.apis?.forms as FormAPI;\n\n const mutatedCTs = Object.entries(state.current.contentTypes).reduce(\n (acc, [uid, contentType]) => {\n acc[uid] = PluginForms.mutateContentTypeSchema(\n contentType,\n initialContentTypes[uid]\n ) as ContentType;\n\n return acc;\n },\n {} as ContentTypes\n );\n\n const { requestData, trackingEventProperties } = stateToRequestData({\n components: state.current.components,\n contentTypes: mutatedCTs,\n });\n\n // Track that the save button was clicked (includes session ID via useCTBTracking)\n trackUsage('willUpdateCTBSchema', {\n ...trackingEventProperties,\n ctbSessionId,\n });\n\n const isSendingContentTypes = Object.keys(state.current.contentTypes).length > 0;\n\n lockAppWithAutoreload();\n\n try {\n await fetchClient.post(`/content-type-builder/update-schema`, { data: requestData });\n\n if (isSendingContentTypes) {\n // Note: didCreateGuidedTourCollectionType doesn't accept properties\n trackUsage('didCreateGuidedTourCollectionType');\n }\n\n // Make sure the server has restarted\n await serverRestartWatcher();\n // Generate new session ID after server restart\n regenerateSessionId();\n // refetch and update initial state after the data has been saved\n await getDataRef.current();\n // Update the app's permissions\n await updatePermissions();\n } catch (err) {\n console.error({ err });\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n\n trackUsage('didUpdateCTBSchema', {\n ...trackingEventProperties,\n success: false,\n ctbSessionId,\n });\n } finally {\n setIsSaving(false);\n unlockAppWithAutoreload();\n\n dispatch(adminApi.util.invalidateTags(['GuidedTourMeta', 'HomepageKeyStatistics']));\n dispatchGuidedTour({\n type: 'set_completed_actions',\n payload: [GUIDED_TOUR_REQUIRED_ACTIONS.contentTypeBuilder.createSchema],\n });\n\n trackUsage('didUpdateCTBSchema', {\n ...trackingEventProperties,\n success: true,\n ctbSessionId,\n });\n }\n };\n\n const componentsThatHaveOtherComponentInTheirAttributes = React.useMemo(() => {\n return getAllComponentsThatHaveAComponentInTheirAttributes(components);\n }, [components]);\n\n const nestedComponents = React.useMemo(() => {\n return getAllNestedComponents(components);\n }, [components]);\n\n const allComponentsCategories = React.useMemo(() => {\n return retrieveSpecificInfoFromComponents(components, ['category']);\n }, [components]);\n\n const componentsGroupedByCategory = React.useMemo(() => {\n return groupBy(components, 'category');\n }, [components]);\n\n const sortedContentTypesList = React.useMemo(() => {\n return sortContentType(contentTypes);\n }, [contentTypes]);\n\n const context: DataManagerContextValue = {\n componentsThatHaveOtherComponentInTheirAttributes,\n nestedComponents,\n saveSchema,\n reservedNames,\n components,\n contentTypes,\n initialComponents,\n initialContentTypes,\n isSaving,\n isModified,\n isInDevelopmentMode,\n allComponentsCategories,\n componentsGroupedByCategory,\n sortedContentTypesList,\n isLoading,\n addAttribute(payload) {\n dispatch(actions.addAttribute(payload));\n },\n editAttribute(payload) {\n dispatch(actions.editAttribute(payload));\n },\n addCustomFieldAttribute(payload) {\n dispatch(actions.addCustomFieldAttribute(payload));\n },\n editCustomFieldAttribute(payload) {\n dispatch(actions.editCustomFieldAttribute(payload));\n },\n addCreatedComponentToDynamicZone(payload) {\n dispatch(actions.addCreatedComponentToDynamicZone(payload));\n },\n createSchema(payload) {\n dispatch(actions.createSchema(payload));\n },\n createComponentSchema({ data, uid, componentCategory }) {\n dispatch(actions.createComponentSchema({ data, uid, componentCategory }));\n },\n changeDynamicZoneComponents({ forTarget, targetUid, dynamicZoneTarget, newComponents }) {\n dispatch(\n actions.changeDynamicZoneComponents({\n forTarget,\n targetUid,\n dynamicZoneTarget,\n newComponents,\n })\n );\n },\n removeAttribute(payload) {\n if (payload.forTarget === 'contentType') {\n // Note: willDeleteFieldOfContentType doesn't accept properties\n trackUsage('willDeleteFieldOfContentType');\n }\n\n dispatch(actions.removeField(payload));\n },\n removeComponentFromDynamicZone(payload) {\n dispatch(actions.removeComponentFromDynamicZone(payload));\n },\n deleteComponent(uid: Internal.UID.Component) {\n const userConfirm = window.confirm(\n formatMessage({\n id: getTrad(`popUpWarning.bodyMessage.component.delete`),\n })\n );\n\n if (userConfirm) {\n onCloseModal();\n\n dispatch(actions.deleteComponent(uid));\n }\n },\n deleteContentType(uid: Internal.UID.ContentType) {\n const userConfirm = window.confirm(\n formatMessage({\n id: getTrad(`popUpWarning.bodyMessage.contentType.delete`),\n })\n );\n\n if (userConfirm) {\n onCloseModal();\n\n dispatch(actions.deleteContentType(uid));\n }\n },\n\n updateComponentSchema({ data, componentUID }) {\n dispatch(\n actions.updateComponentSchema({\n data,\n uid: componentUID,\n })\n );\n },\n\n updateComponentUid({ componentUID, newComponentUID }) {\n dispatch(\n actions.updateComponentUid({\n uid: componentUID,\n newComponentUID,\n })\n );\n },\n\n updateSchema(args) {\n dispatch(actions.updateSchema(args));\n },\n\n moveAttribute(args) {\n dispatch(actions.moveAttribute(args));\n },\n\n applyChange(args) {\n dispatch(actions.applyChange(args));\n },\n\n history: {\n undo() {\n dispatch(actions.undo());\n },\n\n redo() {\n dispatch(actions.redo());\n },\n\n discardAllChanges() {\n dispatch(actions.discardAll());\n },\n\n canUndo: state.past.length > 0,\n canRedo: state.future.length > 0,\n canDiscardAll: isModified,\n },\n };\n\n return <DataManagerContext.Provider value={context}>{children}</DataManagerContext.Provider>;\n};\n\n// eslint-disable-next-line import/no-default-export\nexport default DataManagerProvider;\n"],"names":["selectState","state","initialState","DataManagerProvider","children","dispatch","useDispatch","useSelector","dispatchGuidedTour","useGuidedTour","s","location","useLocation","sessionId","ctbSessionId","regenerateSessionId","useCTBSession","components","contentTypes","reservedNames","initialComponents","initialContentTypes","isLoading","current","toggleNotification","useNotification","lockAppWithAutoreload","unlockAppWithAutoreload","useAutoReloadOverlayBlocker","serverRestartWatcher","useServerRestartWatcher","getPlugin","useStrapiApp","plugin","autoReload","useAppInfo","formatMessage","useIntl","trackUsage","useCTBTracking","refetchPermissions","useAuth","onCloseModal","useFormModalNavigation","isSaving","setIsSaving","React","useState","previousLocationRef","useRef","isModified","useMemo","isEqual","fetchClient","useFetchClient","isInDevelopmentMode","getDataRef","schemaResponse","reservedNamesResponse","Promise","all","get","data","actions","init","mapValues","component","status","contentType","clearHistory","err","console","error","type","message","id","defaultMessage","useEffect","pathname","reloadPlugin","currentPath","previousPath","CTB_PATH","isCTBPath","includes","wasCTBPath","getTrad","getAllComponentsThatHaveAComponentInTheirAttributes","composWithCompos","retrieveComponentsThatHaveComponents","getAllNestedComponents","appNestedCompo","retrieveNestedComponents","updatePermissions","saveSchema","PluginForms","apis","forms","mutatedCTs","Object","entries","reduce","acc","uid","mutateContentTypeSchema","requestData","trackingEventProperties","stateToRequestData","isSendingContentTypes","keys","length","post","success","adminApi","util","invalidateTags","payload","GUIDED_TOUR_REQUIRED_ACTIONS","contentTypeBuilder","createSchema","componentsThatHaveOtherComponentInTheirAttributes","nestedComponents","allComponentsCategories","retrieveSpecificInfoFromComponents","componentsGroupedByCategory","groupBy","sortedContentTypesList","sortContentType","context","addAttribute","editAttribute","addCustomFieldAttribute","editCustomFieldAttribute","addCreatedComponentToDynamicZone","createComponentSchema","componentCategory","changeDynamicZoneComponents","forTarget","targetUid","dynamicZoneTarget","newComponents","removeAttribute","removeField","removeComponentFromDynamicZone","deleteComponent","userConfirm","window","confirm","deleteContentType","updateComponentSchema","componentUID","updateComponentUid","newComponentUID","updateSchema","args","moveAttribute","applyChange","history","undo","redo","discardAllChanges","discardAll","canUndo","past","canRedo","future","canDiscardAll","_jsx","DataManagerContext","Provider","value"],"mappings":"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"}
@@ -25,6 +25,8 @@ var BooleanDefaultValueSelect = require('../BooleanDefaultValueSelect.js');
25
25
  var BooleanRadioGroup = require('../BooleanRadioGroup.js');
26
26
  var CheckboxWithNumberField = require('../CheckboxWithNumberField.js');
27
27
  var ContentTypeRadioGroup = require('../ContentTypeRadioGroup.js');
28
+ require('../CTBSession/sessionContext.js');
29
+ var useCTBTracking = require('../CTBSession/useCTBTracking.js');
28
30
  var CustomRadioGroup = require('../CustomRadioGroup/CustomRadioGroup.js');
29
31
  var useDataManager = require('../DataManager/useDataManager.js');
30
32
  var DraftAndPublishToggle = require('../DraftAndPublishToggle.js');
@@ -84,7 +86,7 @@ const FormModal = ()=>{
84
86
  const { toggleNotification } = strapiAdmin.useNotification();
85
87
  const reducerState = reactRedux.useSelector(selectState, reactRedux.shallowEqual);
86
88
  const navigate = reactRouterDom.useNavigate();
87
- const { trackUsage } = strapiAdmin.useTracking();
89
+ const { trackUsage } = useCTBTracking.useCTBTracking();
88
90
  const { formatMessage } = reactIntl.useIntl();
89
91
  const ctbPlugin = getPlugin(pluginId.pluginId);
90
92
  const ctbFormsAPI = ctbPlugin?.apis.forms;