@strapi/content-manager 5.11.0 → 5.12.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (105) hide show
  1. package/dist/admin/chunks/{ComponentConfigurationPage-BBCYsnnE.js → ComponentConfigurationPage-CBvwLnAK.js} +5 -6
  2. package/dist/admin/chunks/{ComponentConfigurationPage-BBCYsnnE.js.map → ComponentConfigurationPage-CBvwLnAK.js.map} +1 -1
  3. package/dist/admin/chunks/{ComponentConfigurationPage-DNBN8tI3.mjs → ComponentConfigurationPage-w_ss7xEy.mjs} +5 -6
  4. package/dist/admin/chunks/{ComponentConfigurationPage-DNBN8tI3.mjs.map → ComponentConfigurationPage-w_ss7xEy.mjs.map} +1 -1
  5. package/dist/admin/chunks/{EditConfigurationPage-Cu0Vt-uc.js → EditConfigurationPage-CbAhYSyH.js} +5 -6
  6. package/dist/admin/chunks/{EditConfigurationPage-Cu0Vt-uc.js.map → EditConfigurationPage-CbAhYSyH.js.map} +1 -1
  7. package/dist/admin/chunks/{EditConfigurationPage-CoivzF-x.mjs → EditConfigurationPage-D1iHIzSR.mjs} +5 -6
  8. package/dist/admin/chunks/{EditConfigurationPage-CoivzF-x.mjs.map → EditConfigurationPage-D1iHIzSR.mjs.map} +1 -1
  9. package/dist/admin/chunks/{EditViewPage-BpGtaOKG.mjs → EditViewPage-BtunY0ZP.mjs} +102 -95
  10. package/dist/admin/chunks/EditViewPage-BtunY0ZP.mjs.map +1 -0
  11. package/dist/admin/chunks/{EditViewPage-B48r4DLX.js → EditViewPage-Cf_TPJZd.js} +102 -95
  12. package/dist/admin/chunks/EditViewPage-Cf_TPJZd.js.map +1 -0
  13. package/dist/admin/chunks/{Form-rQQtxfmF.mjs → Form-DsvK3WTh.mjs} +3 -3
  14. package/dist/admin/chunks/{Form-rQQtxfmF.mjs.map → Form-DsvK3WTh.mjs.map} +1 -1
  15. package/dist/admin/chunks/{Form-DD49gSWW.js → Form-UMrizqJP.js} +5 -5
  16. package/dist/admin/chunks/{Form-DD49gSWW.js.map → Form-UMrizqJP.js.map} +1 -1
  17. package/dist/admin/chunks/{History-RLJ9Svg6.js → History-Crvb_hzd.js} +17 -13
  18. package/dist/admin/chunks/History-Crvb_hzd.js.map +1 -0
  19. package/dist/admin/chunks/{History-BdsTgpW-.mjs → History-DsRVSUF7.mjs} +16 -12
  20. package/dist/admin/chunks/History-DsRVSUF7.mjs.map +1 -0
  21. package/dist/admin/chunks/{Input-BUVu6H9n.js → Input-C2r54bIL.js} +1327 -64
  22. package/dist/admin/chunks/Input-C2r54bIL.js.map +1 -0
  23. package/dist/admin/chunks/{Input-CtIJ2J0c.mjs → Input-D6obstp0.mjs} +1315 -55
  24. package/dist/admin/chunks/Input-D6obstp0.mjs.map +1 -0
  25. package/dist/admin/chunks/{ListConfigurationPage-38s4e-VJ.mjs → ListConfigurationPage-DW-wAwmW.mjs} +4 -5
  26. package/dist/admin/chunks/{ListConfigurationPage-38s4e-VJ.mjs.map → ListConfigurationPage-DW-wAwmW.mjs.map} +1 -1
  27. package/dist/admin/chunks/{ListConfigurationPage-DfnrA3dw.js → ListConfigurationPage-DlQ2pLyr.js} +6 -7
  28. package/dist/admin/chunks/{ListConfigurationPage-DfnrA3dw.js.map → ListConfigurationPage-DlQ2pLyr.js.map} +1 -1
  29. package/dist/admin/chunks/{ListViewPage-BTmlktgT.mjs → ListViewPage-DcUhPA9a.mjs} +3 -4
  30. package/dist/admin/chunks/{ListViewPage-BTmlktgT.mjs.map → ListViewPage-DcUhPA9a.mjs.map} +1 -1
  31. package/dist/admin/chunks/{ListViewPage-D9-LGPq_.js → ListViewPage-nJJ227Fo.js} +7 -8
  32. package/dist/admin/chunks/{ListViewPage-D9-LGPq_.js.map → ListViewPage-nJJ227Fo.js.map} +1 -1
  33. package/dist/admin/chunks/{NoContentTypePage-owzdv-pl.js → NoContentTypePage-Cxt-uFq7.js} +2 -2
  34. package/dist/admin/chunks/{NoContentTypePage-owzdv-pl.js.map → NoContentTypePage-Cxt-uFq7.js.map} +1 -1
  35. package/dist/admin/chunks/{NoContentTypePage-CcyR2i1K.mjs → NoContentTypePage-DbRXR2cr.mjs} +2 -2
  36. package/dist/admin/chunks/{NoContentTypePage-CcyR2i1K.mjs.map → NoContentTypePage-DbRXR2cr.mjs.map} +1 -1
  37. package/dist/admin/chunks/{NoPermissionsPage-CM_r8w5u.js → NoPermissionsPage-BeMTv_SG.js} +2 -2
  38. package/dist/admin/chunks/{NoPermissionsPage-CM_r8w5u.js.map → NoPermissionsPage-BeMTv_SG.js.map} +1 -1
  39. package/dist/admin/chunks/{NoPermissionsPage-lBonAXej.mjs → NoPermissionsPage-RWPwNESA.mjs} +2 -2
  40. package/dist/admin/chunks/{NoPermissionsPage-lBonAXej.mjs.map → NoPermissionsPage-RWPwNESA.mjs.map} +1 -1
  41. package/dist/admin/chunks/{Preview-Bv3GKyWZ.js → Preview-CCjSV5Iu.js} +119 -200
  42. package/dist/admin/chunks/Preview-CCjSV5Iu.js.map +1 -0
  43. package/dist/admin/chunks/{Preview-Dh5Z7aGp.mjs → Preview-aVLT3LM_.mjs} +123 -204
  44. package/dist/admin/chunks/Preview-aVLT3LM_.mjs.map +1 -0
  45. package/dist/admin/chunks/{en-CImiNxXE.mjs → en-C2zEwS3-.mjs} +4 -1
  46. package/dist/admin/chunks/{en-CImiNxXE.mjs.map → en-C2zEwS3-.mjs.map} +1 -1
  47. package/dist/admin/chunks/{en-CLf4SuMQ.js → en-G976DLsg.js} +4 -1
  48. package/dist/admin/chunks/{en-CLf4SuMQ.js.map → en-G976DLsg.js.map} +1 -1
  49. package/dist/admin/chunks/{index-CGBB9Dho.js → index-BA_JLxKS.js} +185 -121
  50. package/dist/admin/chunks/index-BA_JLxKS.js.map +1 -0
  51. package/dist/admin/chunks/{index-BkM_Z7pU.mjs → index-CIOT3ggy.mjs} +184 -123
  52. package/dist/admin/chunks/index-CIOT3ggy.mjs.map +1 -0
  53. package/dist/admin/chunks/{layout-Dbmjk7mC.js → layout-C510xcd6.js} +86 -13
  54. package/dist/admin/chunks/layout-C510xcd6.js.map +1 -0
  55. package/dist/admin/chunks/{layout-D8ji6QNJ.mjs → layout-DjT9cccU.mjs} +78 -5
  56. package/dist/admin/chunks/layout-DjT9cccU.mjs.map +1 -0
  57. package/dist/admin/chunks/{useDragAndDrop-gcqEJMnO.js → objects-BJTP843m.js} +73 -1
  58. package/dist/admin/chunks/objects-BJTP843m.js.map +1 -0
  59. package/dist/admin/chunks/{useDragAndDrop-HYwNDExe.mjs → objects-D2z-IJgu.mjs} +72 -2
  60. package/dist/admin/chunks/objects-D2z-IJgu.mjs.map +1 -0
  61. package/dist/admin/chunks/{relations-jNJK8ESO.js → usePrev-BglKW7a4.js} +18 -2
  62. package/dist/admin/chunks/usePrev-BglKW7a4.js.map +1 -0
  63. package/dist/admin/chunks/{relations-Dv0FHoBS.mjs → usePrev-DAWUYIPh.mjs} +18 -4
  64. package/dist/admin/chunks/usePrev-DAWUYIPh.mjs.map +1 -0
  65. package/dist/admin/index.js +1 -1
  66. package/dist/admin/index.mjs +1 -1
  67. package/dist/admin/src/features/DocumentContext.d.ts +53 -0
  68. package/dist/admin/src/features/DocumentRBAC.d.ts +3 -2
  69. package/dist/admin/src/pages/EditView/components/DocumentActions.d.ts +1 -1
  70. package/dist/admin/src/pages/EditView/components/FormInputs/Relations/RelationModal.d.ts +8 -0
  71. package/dist/admin/src/pages/EditView/components/FormInputs/{Relations.d.ts → Relations/Relations.d.ts} +9 -4
  72. package/dist/admin/src/pages/EditView/components/FormLayout.d.ts +8 -3
  73. package/dist/admin/src/pages/EditView/components/InputRenderer.d.ts +7 -4
  74. package/dist/admin/src/preview/components/PreviewHeader.d.ts +1 -2
  75. package/dist/admin/src/preview/pages/Preview.d.ts +0 -2
  76. package/package.json +5 -5
  77. package/dist/admin/chunks/EditViewPage-B48r4DLX.js.map +0 -1
  78. package/dist/admin/chunks/EditViewPage-BpGtaOKG.mjs.map +0 -1
  79. package/dist/admin/chunks/History-BdsTgpW-.mjs.map +0 -1
  80. package/dist/admin/chunks/History-RLJ9Svg6.js.map +0 -1
  81. package/dist/admin/chunks/Input-BUVu6H9n.js.map +0 -1
  82. package/dist/admin/chunks/Input-CtIJ2J0c.mjs.map +0 -1
  83. package/dist/admin/chunks/Preview-Bv3GKyWZ.js.map +0 -1
  84. package/dist/admin/chunks/Preview-Dh5Z7aGp.mjs.map +0 -1
  85. package/dist/admin/chunks/Relations-DP5krCGC.mjs +0 -1291
  86. package/dist/admin/chunks/Relations-DP5krCGC.mjs.map +0 -1
  87. package/dist/admin/chunks/Relations-T8Cr0N9M.js +0 -1318
  88. package/dist/admin/chunks/Relations-T8Cr0N9M.js.map +0 -1
  89. package/dist/admin/chunks/index-BkM_Z7pU.mjs.map +0 -1
  90. package/dist/admin/chunks/index-CGBB9Dho.js.map +0 -1
  91. package/dist/admin/chunks/layout-D8ji6QNJ.mjs.map +0 -1
  92. package/dist/admin/chunks/layout-Dbmjk7mC.js.map +0 -1
  93. package/dist/admin/chunks/objects-C3EebVVe.js +0 -76
  94. package/dist/admin/chunks/objects-C3EebVVe.js.map +0 -1
  95. package/dist/admin/chunks/objects-wl73iEma.mjs +0 -73
  96. package/dist/admin/chunks/objects-wl73iEma.mjs.map +0 -1
  97. package/dist/admin/chunks/relations-Dv0FHoBS.mjs.map +0 -1
  98. package/dist/admin/chunks/relations-jNJK8ESO.js.map +0 -1
  99. package/dist/admin/chunks/useDragAndDrop-HYwNDExe.mjs.map +0 -1
  100. package/dist/admin/chunks/useDragAndDrop-gcqEJMnO.js.map +0 -1
  101. package/dist/admin/chunks/usePrev-Bjw2dhmq.mjs +0 -18
  102. package/dist/admin/chunks/usePrev-Bjw2dhmq.mjs.map +0 -1
  103. package/dist/admin/chunks/usePrev-DIYl-IAL.js +0 -21
  104. package/dist/admin/chunks/usePrev-DIYl-IAL.js.map +0 -1
  105. package/dist/admin/src/preview/components/PreviewContent.d.ts +0 -2
@@ -1,6 +1,6 @@
1
1
  import { Cross, WarningCircle, More, ListPlus, Pencil, Trash, Check, CheckCircle, ArrowsCounterClockwise, CrossCircle, ChevronRight, Duplicate, ClockCounterClockwise, Feather } from '@strapi/icons';
2
2
  import { jsx, Fragment, jsxs } from 'react/jsx-runtime';
3
- import { useStrapiApp, createContext, useQueryParams, useAuth, useRBAC, Page, adminApi, translatedErrors, useNotification, useAPIErrorHandler, getYupValidationErrors, useForm, useTracking, useGuidedTour, BackButton, DescriptionComponentRenderer, useTable, Table } from '@strapi/admin/strapi-admin';
3
+ import { useStrapiApp, adminApi, translatedErrors, useNotification, useAPIErrorHandler, useQueryParams, getYupValidationErrors, useForm, createContext, useAuth, useRBAC, Page, useTracking, useGuidedTour, BackButton, DescriptionComponentRenderer, useTable, Table } from '@strapi/admin/strapi-admin';
4
4
  import * as React from 'react';
5
5
  import { lazy } from 'react';
6
6
  import { Menu, Flex, Typography, Radio, Button, VisuallyHidden, Dialog, Modal, Status, Box, SingleSelect, SingleSelectOption, IconButton, RawTable, Loader, Tbody, Tr, Td, Tooltip, LinkButton } from '@strapi/design-system';
@@ -99,102 +99,6 @@ const DOCUMENT_META_FIELDS = [
99
99
  const SINGLE_TYPES = 'single-types';
100
100
  const COLLECTION_TYPES = 'collection-types';
101
101
 
102
- const [DocumentRBACProvider, useDocumentRBAC] = createContext('DocumentRBAC', {
103
- canCreate: false,
104
- canCreateFields: [],
105
- canDelete: false,
106
- canPublish: false,
107
- canRead: false,
108
- canReadFields: [],
109
- canUpdate: false,
110
- canUpdateFields: [],
111
- canUserAction: ()=>false,
112
- isLoading: false
113
- });
114
- /**
115
- * @internal This component is not meant to be used outside of the Content Manager plugin.
116
- * It depends on knowing the slug/model of the content-type using the params of the URL.
117
- * If you do use the hook outside of the context, we default to `false` for all actions.
118
- *
119
- * It then creates an list of `can{Action}` that are passed to the context for consumption
120
- * within the app to enforce RBAC.
121
- */ const DocumentRBAC = ({ children, permissions })=>{
122
- const { slug } = useParams();
123
- if (!slug) {
124
- throw new Error('Cannot find the slug param in the URL');
125
- }
126
- const [{ rawQuery }] = useQueryParams();
127
- const userPermissions = useAuth('DocumentRBAC', (state)=>state.permissions);
128
- const contentTypePermissions = React.useMemo(()=>{
129
- const contentTypePermissions = userPermissions.filter((permission)=>permission.subject === slug);
130
- return contentTypePermissions.reduce((acc, permission)=>{
131
- const [action] = permission.action.split('.').slice(-1);
132
- return {
133
- ...acc,
134
- [action]: [
135
- permission
136
- ]
137
- };
138
- }, {});
139
- }, [
140
- slug,
141
- userPermissions
142
- ]);
143
- const { isLoading, allowedActions } = useRBAC(contentTypePermissions, permissions ?? undefined, // TODO: useRBAC context should be typed and built differently
144
- // We are passing raw query as context to the hook so that it can
145
- // rely on the locale provided from DocumentRBAC for its permission calculations.
146
- rawQuery);
147
- const canCreateFields = !isLoading && allowedActions.canCreate ? extractAndDedupeFields(contentTypePermissions.create) : [];
148
- const canReadFields = !isLoading && allowedActions.canRead ? extractAndDedupeFields(contentTypePermissions.read) : [];
149
- const canUpdateFields = !isLoading && allowedActions.canUpdate ? extractAndDedupeFields(contentTypePermissions.update) : [];
150
- /**
151
- * @description Checks if the user can perform an action on a field based on the field names
152
- * provided as the second argument.
153
- */ const canUserAction = React.useCallback((fieldName, fieldsUserCanAction, fieldType)=>{
154
- const name = removeNumericalStrings(fieldName.split('.'));
155
- const componentFieldNames = fieldsUserCanAction// filter out fields that aren't components (components are dot separated)
156
- .filter((field)=>field.split('.').length > 1);
157
- if (fieldType === 'component') {
158
- // check if the field name is within any of those arrays
159
- return componentFieldNames.some((field)=>{
160
- return field.includes(name.join('.'));
161
- });
162
- }
163
- /**
164
- * The field is within a component.
165
- */ if (name.length > 1) {
166
- return componentFieldNames.includes(name.join('.'));
167
- }
168
- /**
169
- * just a regular field
170
- */ return fieldsUserCanAction.includes(fieldName);
171
- }, []);
172
- if (isLoading) {
173
- return /*#__PURE__*/ jsx(Page.Loading, {});
174
- }
175
- return /*#__PURE__*/ jsx(DocumentRBACProvider, {
176
- isLoading: isLoading,
177
- canCreateFields: canCreateFields,
178
- canReadFields: canReadFields,
179
- canUpdateFields: canUpdateFields,
180
- canUserAction: canUserAction,
181
- ...allowedActions,
182
- children: children
183
- });
184
- };
185
- /**
186
- * @internal it's really small, but it's used three times in a row and DRY for something this straight forward.
187
- */ const extractAndDedupeFields = (permissions = [])=>permissions.flatMap((permission)=>permission.properties?.fields).filter((field, index, arr)=>arr.indexOf(field) === index && typeof field === 'string');
188
- /**
189
- * @internal removes numerical strings from arrays.
190
- * @example
191
- * ```ts
192
- * const name = 'a.0.b';
193
- * const res = removeNumericalStrings(name.split('.'));
194
- * console.log(res); // ['a', 'b']
195
- * ```
196
- */ const removeNumericalStrings = (arr)=>arr.filter((item)=>isNaN(Number(item)));
197
-
198
102
  const BLOCK_LIST_ATTRIBUTE_KEYS = [
199
103
  '__component',
200
104
  '__temp_key__'
@@ -1678,6 +1582,144 @@ const checkIfAttributeIsDisplayable = (attribute)=>{
1678
1582
  };
1679
1583
  };
1680
1584
 
1585
+ const [DocumentProvider, useDocumentContext] = createContext('DocumentContext');
1586
+ /**
1587
+ * TODO: Document in contributor docs, Add unit test
1588
+ *
1589
+ * This context provider and its associated hook are used to access a document at its root level
1590
+ * and expose a function to change the current document being viewed to one of the root level docuemnt's relations.
1591
+ *
1592
+ * The useDocumentContext hook exposes:
1593
+ * - meta: information about the currentDocument,
1594
+ * - document: the actual document,
1595
+ * - changeDocument: a function to change the current document to one of its relations.
1596
+ * - rootDocumentMeta: information about the root level document (current page)
1597
+ */ const DocumentContextProvider = ({ children, initialDocument, onPreview })=>{
1598
+ /**
1599
+ * Initialize with the "root" document and expose a setter method to change to
1600
+ * one of the root level document's relations.
1601
+ */ const [currentDocumentMeta, changeDocument] = React.useState(initialDocument);
1602
+ const params = React.useMemo(()=>buildValidParams(currentDocumentMeta.params ?? {}), [
1603
+ currentDocumentMeta.params
1604
+ ]);
1605
+ const document = useDocument({
1606
+ ...currentDocumentMeta,
1607
+ params
1608
+ });
1609
+ const [documentHistory, setDocumentHistory] = React.useState([]);
1610
+ return /*#__PURE__*/ jsx(DocumentProvider, {
1611
+ changeDocument: changeDocument,
1612
+ document: document,
1613
+ rootDocumentMeta: {
1614
+ documentId: initialDocument.documentId,
1615
+ model: initialDocument.model,
1616
+ collectionType: initialDocument.collectionType
1617
+ },
1618
+ meta: currentDocumentMeta,
1619
+ documentHistory: documentHistory,
1620
+ setDocumentHistory: setDocumentHistory,
1621
+ onPreview: onPreview,
1622
+ children: children
1623
+ });
1624
+ };
1625
+
1626
+ const [DocumentRBACProvider, useDocumentRBAC] = createContext('DocumentRBAC', {
1627
+ canCreate: false,
1628
+ canCreateFields: [],
1629
+ canDelete: false,
1630
+ canPublish: false,
1631
+ canRead: false,
1632
+ canReadFields: [],
1633
+ canUpdate: false,
1634
+ canUpdateFields: [],
1635
+ canUserAction: ()=>false,
1636
+ isLoading: false
1637
+ });
1638
+ /**
1639
+ * @internal This component is not meant to be used outside of the Content Manager plugin.
1640
+ * It depends on knowing the slug/model of the content-type using the params of the URL or the model if it is passed as arg.
1641
+ * If you do use the hook outside of the context, we default to `false` for all actions.
1642
+ *
1643
+ * It then creates an list of `can{Action}` that are passed to the context for consumption
1644
+ * within the app to enforce RBAC.
1645
+ */ const DocumentRBAC = ({ children, permissions, model })=>{
1646
+ const { slug } = useParams();
1647
+ if (!slug && !model) {
1648
+ throw new Error('Cannot find the slug param in the URL or the model prop is not provided.');
1649
+ }
1650
+ const contentTypeUid = model ?? slug;
1651
+ const [{ rawQuery }] = useQueryParams();
1652
+ const userPermissions = useAuth('DocumentRBAC', (state)=>state.permissions);
1653
+ const contentTypePermissions = React.useMemo(()=>{
1654
+ const contentTypePermissions = userPermissions.filter((permission)=>permission.subject === contentTypeUid);
1655
+ return contentTypePermissions.reduce((acc, permission)=>{
1656
+ const [action] = permission.action.split('.').slice(-1);
1657
+ return {
1658
+ ...acc,
1659
+ [action]: [
1660
+ permission
1661
+ ]
1662
+ };
1663
+ }, {});
1664
+ }, [
1665
+ contentTypeUid,
1666
+ userPermissions
1667
+ ]);
1668
+ const { isLoading, allowedActions } = useRBAC(contentTypePermissions, permissions ?? undefined, // TODO: useRBAC context should be typed and built differently
1669
+ // We are passing raw query as context to the hook so that it can
1670
+ // rely on the locale provided from DocumentRBAC for its permission calculations.
1671
+ rawQuery);
1672
+ const canCreateFields = !isLoading && allowedActions.canCreate ? extractAndDedupeFields(contentTypePermissions.create) : [];
1673
+ const canReadFields = !isLoading && allowedActions.canRead ? extractAndDedupeFields(contentTypePermissions.read) : [];
1674
+ const canUpdateFields = !isLoading && allowedActions.canUpdate ? extractAndDedupeFields(contentTypePermissions.update) : [];
1675
+ /**
1676
+ * @description Checks if the user can perform an action on a field based on the field names
1677
+ * provided as the second argument.
1678
+ */ const canUserAction = React.useCallback((fieldName, fieldsUserCanAction, fieldType)=>{
1679
+ const name = removeNumericalStrings(fieldName.split('.'));
1680
+ const componentFieldNames = fieldsUserCanAction// filter out fields that aren't components (components are dot separated)
1681
+ .filter((field)=>field.split('.').length > 1);
1682
+ if (fieldType === 'component') {
1683
+ // check if the field name is within any of those arrays
1684
+ return componentFieldNames.some((field)=>{
1685
+ return field.includes(name.join('.'));
1686
+ });
1687
+ }
1688
+ /**
1689
+ * The field is within a component.
1690
+ */ if (name.length > 1) {
1691
+ return componentFieldNames.includes(name.join('.'));
1692
+ }
1693
+ /**
1694
+ * just a regular field
1695
+ */ return fieldsUserCanAction.includes(fieldName);
1696
+ }, []);
1697
+ if (isLoading) {
1698
+ return /*#__PURE__*/ jsx(Page.Loading, {});
1699
+ }
1700
+ return /*#__PURE__*/ jsx(DocumentRBACProvider, {
1701
+ isLoading: isLoading,
1702
+ canCreateFields: canCreateFields,
1703
+ canReadFields: canReadFields,
1704
+ canUpdateFields: canUpdateFields,
1705
+ canUserAction: canUserAction,
1706
+ ...allowedActions,
1707
+ children: children
1708
+ });
1709
+ };
1710
+ /**
1711
+ * @internal it's really small, but it's used three times in a row and DRY for something this straight forward.
1712
+ */ const extractAndDedupeFields = (permissions = [])=>permissions.flatMap((permission)=>permission.properties?.fields).filter((field, index, arr)=>arr.indexOf(field) === index && typeof field === 'string');
1713
+ /**
1714
+ * @internal removes numerical strings from arrays.
1715
+ * @example
1716
+ * ```ts
1717
+ * const name = 'a.0.b';
1718
+ * const res = removeNumericalStrings(name.split('.'));
1719
+ * console.log(res); // ['a', 'b']
1720
+ * ```
1721
+ */ const removeNumericalStrings = (arr)=>arr.filter((item)=>isNaN(Number(item)));
1722
+
1681
1723
  const prefixPluginTranslations = (trad, pluginId)=>{
1682
1724
  return Object.keys(trad).reduce((acc, current)=>{
1683
1725
  acc[`${pluginId}.${current}`] = trad[current];
@@ -1850,7 +1892,9 @@ const DEFAULT_UNEXPECTED_ERROR_MSG = {
1850
1892
  const [publishDocument, { isLoading: isPublishing }] = usePublishDocumentMutation();
1851
1893
  const publish = React.useCallback(async ({ collectionType, model, documentId, params }, data)=>{
1852
1894
  try {
1853
- trackUsage('willPublishEntry');
1895
+ trackUsage('willPublishEntry', {
1896
+ documentId
1897
+ });
1854
1898
  const res = await publishDocument({
1855
1899
  collectionType,
1856
1900
  model,
@@ -1867,7 +1911,9 @@ const DEFAULT_UNEXPECTED_ERROR_MSG = {
1867
1911
  error: res.error
1868
1912
  };
1869
1913
  }
1870
- trackUsage('didPublishEntry');
1914
+ trackUsage('didPublishEntry', {
1915
+ documentId
1916
+ });
1871
1917
  toggleNotification({
1872
1918
  type: 'success',
1873
1919
  message: formatMessage({
@@ -1954,7 +2000,10 @@ const DEFAULT_UNEXPECTED_ERROR_MSG = {
1954
2000
  error: res.error
1955
2001
  };
1956
2002
  }
1957
- trackUsage('didEditEntry', trackerProperty);
2003
+ trackUsage('didEditEntry', {
2004
+ ...trackerProperty,
2005
+ documentId: res.data.data.documentId
2006
+ });
1958
2007
  toggleNotification({
1959
2008
  type: 'success',
1960
2009
  message: formatMessage({
@@ -2090,7 +2139,10 @@ const DEFAULT_UNEXPECTED_ERROR_MSG = {
2090
2139
  error: res.error
2091
2140
  };
2092
2141
  }
2093
- trackUsage('didCreateEntry', trackerProperty);
2142
+ trackUsage('didCreateEntry', {
2143
+ ...trackerProperty,
2144
+ documentId: res.data.data.documentId
2145
+ });
2094
2146
  toggleNotification({
2095
2147
  type: 'success',
2096
2148
  message: formatMessage({
@@ -2233,7 +2285,7 @@ const DEFAULT_UNEXPECTED_ERROR_MSG = {
2233
2285
  };
2234
2286
  };
2235
2287
 
2236
- const ProtectedHistoryPage = /*#__PURE__*/ React.lazy(()=>import('./History-BdsTgpW-.mjs').then((mod)=>({
2288
+ const ProtectedHistoryPage = /*#__PURE__*/ React.lazy(()=>import('./History-DsRVSUF7.mjs').then((mod)=>({
2237
2289
  default: mod.ProtectedHistoryPage
2238
2290
  })));
2239
2291
  /**
@@ -2249,7 +2301,7 @@ const ProtectedHistoryPage = /*#__PURE__*/ React.lazy(()=>import('./History-BdsT
2249
2301
  }
2250
2302
  ];
2251
2303
 
2252
- const ProtectedPreviewPage = /*#__PURE__*/ React.lazy(()=>import('./Preview-Dh5Z7aGp.mjs').then((mod)=>({
2304
+ const ProtectedPreviewPage = /*#__PURE__*/ React.lazy(()=>import('./Preview-aVLT3LM_.mjs').then((mod)=>({
2253
2305
  default: mod.ProtectedPreviewPage
2254
2306
  })));
2255
2307
  const routes$1 = [
@@ -2263,25 +2315,25 @@ const routes$1 = [
2263
2315
  }
2264
2316
  ];
2265
2317
 
2266
- const ProtectedEditViewPage = /*#__PURE__*/ lazy(()=>import('./EditViewPage-BpGtaOKG.mjs').then((mod)=>({
2318
+ const ProtectedEditViewPage = /*#__PURE__*/ lazy(()=>import('./EditViewPage-BtunY0ZP.mjs').then((mod)=>({
2267
2319
  default: mod.ProtectedEditViewPage
2268
2320
  })));
2269
- const ProtectedListViewPage = /*#__PURE__*/ lazy(()=>import('./ListViewPage-BTmlktgT.mjs').then((mod)=>({
2321
+ const ProtectedListViewPage = /*#__PURE__*/ lazy(()=>import('./ListViewPage-DcUhPA9a.mjs').then((mod)=>({
2270
2322
  default: mod.ProtectedListViewPage
2271
2323
  })));
2272
- const ProtectedListConfiguration = /*#__PURE__*/ lazy(()=>import('./ListConfigurationPage-38s4e-VJ.mjs').then((mod)=>({
2324
+ const ProtectedListConfiguration = /*#__PURE__*/ lazy(()=>import('./ListConfigurationPage-DW-wAwmW.mjs').then((mod)=>({
2273
2325
  default: mod.ProtectedListConfiguration
2274
2326
  })));
2275
- const ProtectedEditConfigurationPage = /*#__PURE__*/ lazy(()=>import('./EditConfigurationPage-CoivzF-x.mjs').then((mod)=>({
2327
+ const ProtectedEditConfigurationPage = /*#__PURE__*/ lazy(()=>import('./EditConfigurationPage-D1iHIzSR.mjs').then((mod)=>({
2276
2328
  default: mod.ProtectedEditConfigurationPage
2277
2329
  })));
2278
- const ProtectedComponentConfigurationPage = /*#__PURE__*/ lazy(()=>import('./ComponentConfigurationPage-DNBN8tI3.mjs').then((mod)=>({
2330
+ const ProtectedComponentConfigurationPage = /*#__PURE__*/ lazy(()=>import('./ComponentConfigurationPage-w_ss7xEy.mjs').then((mod)=>({
2279
2331
  default: mod.ProtectedComponentConfigurationPage
2280
2332
  })));
2281
- const NoPermissions = /*#__PURE__*/ lazy(()=>import('./NoPermissionsPage-lBonAXej.mjs').then((mod)=>({
2333
+ const NoPermissions = /*#__PURE__*/ lazy(()=>import('./NoPermissionsPage-RWPwNESA.mjs').then((mod)=>({
2282
2334
  default: mod.NoPermissions
2283
2335
  })));
2284
- const NoContentType = /*#__PURE__*/ lazy(()=>import('./NoContentTypePage-CcyR2i1K.mjs').then((mod)=>({
2336
+ const NoContentType = /*#__PURE__*/ lazy(()=>import('./NoContentTypePage-DbRXR2cr.mjs').then((mod)=>({
2285
2337
  default: mod.NoContentType
2286
2338
  })));
2287
2339
  const CollectionTypePages = ()=>{
@@ -2669,7 +2721,7 @@ const transformData = (data)=>{
2669
2721
  /* -------------------------------------------------------------------------------------------------
2670
2722
  * DocumentActionComponents
2671
2723
  * -----------------------------------------------------------------------------------------------*/ const PublishAction$1 = ({ activeTab, documentId, model, collectionType, meta, document, onPreview })=>{
2672
- const { schema } = useDoc();
2724
+ const schema = useDocumentContext('PublishAction', (state)=>state.document.schema);
2673
2725
  const navigate = useNavigate();
2674
2726
  const { toggleNotification } = useNotification();
2675
2727
  const { _unstableFormatValidationErrors: formatValidationErrors } = useAPIErrorHandler();
@@ -2692,6 +2744,8 @@ const transformData = (data)=>{
2692
2744
  const validate = useForm('PublishAction', (state)=>state.validate);
2693
2745
  const setErrors = useForm('PublishAction', (state)=>state.setErrors);
2694
2746
  const formValues = useForm('PublishAction', ({ values })=>values);
2747
+ const rootDocumentMeta = useDocumentContext('PublishAction', (state)=>state.rootDocumentMeta);
2748
+ const currentDocumentMeta = useDocumentContext('PublishAction', (state)=>state.meta);
2695
2749
  React.useEffect(()=>{
2696
2750
  if (isErrorDraftRelations) {
2697
2751
  toggleNotification({
@@ -2794,11 +2848,12 @@ const transformData = (data)=>{
2794
2848
  });
2795
2849
  return;
2796
2850
  }
2851
+ const isPublishingRelation = rootDocumentMeta.documentId !== currentDocumentMeta.documentId;
2797
2852
  const res = await publish({
2798
2853
  collectionType,
2799
2854
  model,
2800
2855
  documentId,
2801
- params
2856
+ params: isPublishingRelation ? currentDocumentMeta.params : params
2802
2857
  }, transformData(formValues));
2803
2858
  if ('data' in res && collectionType !== SINGLE_TYPES) {
2804
2859
  /**
@@ -2828,7 +2883,8 @@ const transformData = (data)=>{
2828
2883
  loading: isLoading,
2829
2884
  position: [
2830
2885
  'panel',
2831
- 'preview'
2886
+ 'preview',
2887
+ 'relation-modal'
2832
2888
  ],
2833
2889
  /**
2834
2890
  * Disabled when:
@@ -2869,7 +2925,8 @@ const transformData = (data)=>{
2869
2925
  PublishAction$1.type = 'publish';
2870
2926
  PublishAction$1.position = [
2871
2927
  'panel',
2872
- 'preview'
2928
+ 'preview',
2929
+ 'relation-modal'
2873
2930
  ];
2874
2931
  const UpdateAction = ({ activeTab, documentId, model, collectionType, onPreview })=>{
2875
2932
  const navigate = useNavigate();
@@ -2890,6 +2947,8 @@ const UpdateAction = ({ activeTab, documentId, model, collectionType, onPreview
2890
2947
  const validate = useForm('UpdateAction', (state)=>state.validate);
2891
2948
  const setErrors = useForm('UpdateAction', (state)=>state.setErrors);
2892
2949
  const resetForm = useForm('PublishAction', ({ resetForm })=>resetForm);
2950
+ const rootDocumentMeta = useDocumentContext('UpdateAction', (state)=>state.rootDocumentMeta);
2951
+ const currentDocumentMeta = useDocumentContext('UpdateAction', (state)=>state.meta);
2893
2952
  const handleUpdate = React.useCallback(async ()=>{
2894
2953
  setSubmitting(true);
2895
2954
  try {
@@ -2926,11 +2985,12 @@ const UpdateAction = ({ activeTab, documentId, model, collectionType, onPreview
2926
2985
  setErrors(formatValidationErrors(res.error));
2927
2986
  }
2928
2987
  } else if (documentId || collectionType === SINGLE_TYPES) {
2988
+ const isEditingRelation = rootDocumentMeta.documentId !== currentDocumentMeta.documentId;
2929
2989
  const res = await update({
2930
2990
  collectionType,
2931
2991
  model,
2932
2992
  documentId,
2933
- params
2993
+ params: isEditingRelation ? currentDocumentMeta.params : params
2934
2994
  }, transformData(document));
2935
2995
  if ('error' in res && isBaseQueryError(res.error) && res.error.name === 'ValidationError') {
2936
2996
  setErrors(formatValidationErrors(res.error));
@@ -3012,14 +3072,16 @@ const UpdateAction = ({ activeTab, documentId, model, collectionType, onPreview
3012
3072
  onClick: handleUpdate,
3013
3073
  position: [
3014
3074
  'panel',
3015
- 'preview'
3075
+ 'preview',
3076
+ 'relation-modal'
3016
3077
  ]
3017
3078
  };
3018
3079
  };
3019
3080
  UpdateAction.type = 'update';
3020
3081
  UpdateAction.position = [
3021
3082
  'panel',
3022
- 'preview'
3083
+ 'preview',
3084
+ 'relation-modal'
3023
3085
  ];
3024
3086
  const UNPUBLISH_DRAFT_OPTIONS = {
3025
3087
  KEEP: 'keep',
@@ -3312,12 +3374,11 @@ const capitalise = (str)=>str.charAt(0).toUpperCase() + str.slice(1);
3312
3374
  size: size,
3313
3375
  variant: statusVariant,
3314
3376
  role: "status",
3315
- "aria-labelledby": "document-status",
3377
+ "aria-label": status,
3316
3378
  children: /*#__PURE__*/ jsx(Typography, {
3317
3379
  tag: "span",
3318
3380
  variant: "omega",
3319
3381
  fontWeight: "bold",
3320
- id: "document-status",
3321
3382
  children: formatMessage({
3322
3383
  id: `content-manager.containers.List.${status}`,
3323
3384
  defaultMessage: capitalise(status)
@@ -5296,7 +5357,7 @@ function __variableDynamicImportRuntime1__(path) {
5296
5357
  case './translations/ca.json': return import('./ca-DviY7mRj.mjs');
5297
5358
  case './translations/cs.json': return import('./cs-C7OSYFQ7.mjs');
5298
5359
  case './translations/de.json': return import('./de-5QRlDHyR.mjs');
5299
- case './translations/en.json': return import('./en-CImiNxXE.mjs');
5360
+ case './translations/en.json': return import('./en-C2zEwS3-.mjs');
5300
5361
  case './translations/es.json': return import('./es-DkoWSExG.mjs');
5301
5362
  case './translations/eu.json': return import('./eu-BG1xX7HK.mjs');
5302
5363
  case './translations/fr.json': return import('./fr-CFdRaRVj.mjs');
@@ -5350,7 +5411,7 @@ var index = {
5350
5411
  app.router.addRoute({
5351
5412
  path: 'content-manager/*',
5352
5413
  lazy: async ()=>{
5353
- const { Layout } = await import('./layout-D8ji6QNJ.mjs');
5414
+ const { Layout } = await import('./layout-DjT9cccU.mjs');
5354
5415
  return {
5355
5416
  Component: Layout
5356
5417
  };
@@ -5385,5 +5446,5 @@ var index = {
5385
5446
  }
5386
5447
  };
5387
5448
 
5388
- export { useUpdateContentTypeConfigurationMutation as A, BulkActionsRenderer as B, COLLECTION_TYPES as C, DocumentStatus as D, ATTRIBUTE_TYPES_THAT_CANNOT_BE_MAIN_FIELD as E, extractContentTypeComponents as F, DEFAULT_SETTINGS as G, HOOKS as H, InjectionZone as I, convertEditLayoutToFieldLayouts as J, removeFieldsThatDontExistOnSchema as K, prepareTempKeys as L, useDocument as M, DocumentActionButton as N, useGetPreviewUrlQuery as O, Panels as P, index as Q, RelativeTime as R, SINGLE_TYPES as S, TableActions as T, useContentManagerContext as U, useDocumentActions as V, useGetInitialDataQuery as a, useGetAllContentTypeSettingsQuery as b, useDoc as c, buildValidParams as d, contentManagerApi as e, useDocumentRBAC as f, getTranslation as g, useDocumentLayout as h, createYupSchema as i, Header as j, PERMISSIONS as k, DocumentRBAC as l, useDocLayout as m, createDefaultForm as n, CLONE_PATH as o, useGetContentTypeConfigurationQuery as p, CREATOR_FIELDS as q, getMainField as r, setInitialData as s, transformDocument as t, useContentTypeSchema as u, getDisplayName as v, checkIfAttributeIsDisplayable as w, useGetAllDocumentsQuery as x, convertListLayoutToFieldLayouts as y, capitalise as z };
5389
- //# sourceMappingURL=index-BkM_Z7pU.mjs.map
5449
+ export { useGetAllDocumentsQuery as A, BulkActionsRenderer as B, COLLECTION_TYPES as C, DocumentStatus as D, convertListLayoutToFieldLayouts as E, capitalise as F, useDocLayout as G, HOOKS as H, InjectionZone as I, useUpdateContentTypeConfigurationMutation as J, ATTRIBUTE_TYPES_THAT_CANNOT_BE_MAIN_FIELD as K, extractContentTypeComponents as L, DEFAULT_SETTINGS as M, convertEditLayoutToFieldLayouts as N, removeFieldsThatDontExistOnSchema as O, PERMISSIONS as P, prepareTempKeys as Q, RelativeTime as R, SINGLE_TYPES as S, TableActions as T, useDocument as U, useGetPreviewUrlQuery as V, index as W, useContentManagerContext as X, useDocumentActions as Y, useGetInitialDataQuery as a, useGetAllContentTypeSettingsQuery as b, useDocumentContext as c, useDocumentLayout as d, createDefaultForm as e, useLazyGetDocumentQuery as f, getTranslation as g, createYupSchema as h, DocumentRBAC as i, DocumentActionButton as j, buildValidParams as k, contentManagerApi as l, useDoc as m, CLONE_PATH as n, useDocumentRBAC as o, DocumentContextProvider as p, Header as q, Panels as r, setInitialData as s, transformDocument as t, useContentTypeSchema as u, useGetContentTypeConfigurationQuery as v, CREATOR_FIELDS as w, getMainField as x, getDisplayName as y, checkIfAttributeIsDisplayable as z };
5450
+ //# sourceMappingURL=index-CIOT3ggy.mjs.map