@strapi/content-manager 5.11.1 → 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.
- package/dist/admin/chunks/{ComponentConfigurationPage-BGBNQxFJ.js → ComponentConfigurationPage-CBvwLnAK.js} +5 -6
- package/dist/admin/chunks/{ComponentConfigurationPage-BGBNQxFJ.js.map → ComponentConfigurationPage-CBvwLnAK.js.map} +1 -1
- package/dist/admin/chunks/{ComponentConfigurationPage-DKtL-tec.mjs → ComponentConfigurationPage-w_ss7xEy.mjs} +5 -6
- package/dist/admin/chunks/{ComponentConfigurationPage-DKtL-tec.mjs.map → ComponentConfigurationPage-w_ss7xEy.mjs.map} +1 -1
- package/dist/admin/chunks/{EditConfigurationPage-yliOxLUv.js → EditConfigurationPage-CbAhYSyH.js} +5 -6
- package/dist/admin/chunks/{EditConfigurationPage-yliOxLUv.js.map → EditConfigurationPage-CbAhYSyH.js.map} +1 -1
- package/dist/admin/chunks/{EditConfigurationPage-KDwSFRyn.mjs → EditConfigurationPage-D1iHIzSR.mjs} +5 -6
- package/dist/admin/chunks/{EditConfigurationPage-KDwSFRyn.mjs.map → EditConfigurationPage-D1iHIzSR.mjs.map} +1 -1
- package/dist/admin/chunks/{EditViewPage-BAI2r49P.mjs → EditViewPage-BtunY0ZP.mjs} +102 -95
- package/dist/admin/chunks/EditViewPage-BtunY0ZP.mjs.map +1 -0
- package/dist/admin/chunks/{EditViewPage-DpvonssD.js → EditViewPage-Cf_TPJZd.js} +102 -95
- package/dist/admin/chunks/EditViewPage-Cf_TPJZd.js.map +1 -0
- package/dist/admin/chunks/{Form-BrzQyDxU.mjs → Form-DsvK3WTh.mjs} +3 -3
- package/dist/admin/chunks/{Form-BrzQyDxU.mjs.map → Form-DsvK3WTh.mjs.map} +1 -1
- package/dist/admin/chunks/{Form-XD_sf25E.js → Form-UMrizqJP.js} +5 -5
- package/dist/admin/chunks/{Form-XD_sf25E.js.map → Form-UMrizqJP.js.map} +1 -1
- package/dist/admin/chunks/{History-C-_o7tz8.js → History-Crvb_hzd.js} +17 -13
- package/dist/admin/chunks/History-Crvb_hzd.js.map +1 -0
- package/dist/admin/chunks/{History-DClLuGIg.mjs → History-DsRVSUF7.mjs} +16 -12
- package/dist/admin/chunks/History-DsRVSUF7.mjs.map +1 -0
- package/dist/admin/chunks/{Input-Bv-rqfYH.js → Input-C2r54bIL.js} +1327 -64
- package/dist/admin/chunks/Input-C2r54bIL.js.map +1 -0
- package/dist/admin/chunks/{Input-BMLRZBE3.mjs → Input-D6obstp0.mjs} +1315 -55
- package/dist/admin/chunks/Input-D6obstp0.mjs.map +1 -0
- package/dist/admin/chunks/{ListConfigurationPage-Do3UDres.mjs → ListConfigurationPage-DW-wAwmW.mjs} +4 -5
- package/dist/admin/chunks/{ListConfigurationPage-Do3UDres.mjs.map → ListConfigurationPage-DW-wAwmW.mjs.map} +1 -1
- package/dist/admin/chunks/{ListConfigurationPage-D66hgG4-.js → ListConfigurationPage-DlQ2pLyr.js} +6 -7
- package/dist/admin/chunks/{ListConfigurationPage-D66hgG4-.js.map → ListConfigurationPage-DlQ2pLyr.js.map} +1 -1
- package/dist/admin/chunks/{ListViewPage-Q0auz5lE.mjs → ListViewPage-DcUhPA9a.mjs} +3 -4
- package/dist/admin/chunks/{ListViewPage-Q0auz5lE.mjs.map → ListViewPage-DcUhPA9a.mjs.map} +1 -1
- package/dist/admin/chunks/{ListViewPage-DNvysJaJ.js → ListViewPage-nJJ227Fo.js} +7 -8
- package/dist/admin/chunks/{ListViewPage-DNvysJaJ.js.map → ListViewPage-nJJ227Fo.js.map} +1 -1
- package/dist/admin/chunks/{NoContentTypePage-C5qFFfgn.js → NoContentTypePage-Cxt-uFq7.js} +2 -2
- package/dist/admin/chunks/{NoContentTypePage-C5qFFfgn.js.map → NoContentTypePage-Cxt-uFq7.js.map} +1 -1
- package/dist/admin/chunks/{NoContentTypePage-B_oOeOQb.mjs → NoContentTypePage-DbRXR2cr.mjs} +2 -2
- package/dist/admin/chunks/{NoContentTypePage-B_oOeOQb.mjs.map → NoContentTypePage-DbRXR2cr.mjs.map} +1 -1
- package/dist/admin/chunks/{NoPermissionsPage-C9sDJXRu.js → NoPermissionsPage-BeMTv_SG.js} +2 -2
- package/dist/admin/chunks/{NoPermissionsPage-C9sDJXRu.js.map → NoPermissionsPage-BeMTv_SG.js.map} +1 -1
- package/dist/admin/chunks/{NoPermissionsPage-BAW7WY-M.mjs → NoPermissionsPage-RWPwNESA.mjs} +2 -2
- package/dist/admin/chunks/{NoPermissionsPage-BAW7WY-M.mjs.map → NoPermissionsPage-RWPwNESA.mjs.map} +1 -1
- package/dist/admin/chunks/{Preview-B6ThL2SA.js → Preview-CCjSV5Iu.js} +118 -200
- package/dist/admin/chunks/Preview-CCjSV5Iu.js.map +1 -0
- package/dist/admin/chunks/{Preview-05BZGpV2.mjs → Preview-aVLT3LM_.mjs} +121 -203
- package/dist/admin/chunks/Preview-aVLT3LM_.mjs.map +1 -0
- package/dist/admin/chunks/{en-CImiNxXE.mjs → en-C2zEwS3-.mjs} +4 -1
- package/dist/admin/chunks/{en-CImiNxXE.mjs.map → en-C2zEwS3-.mjs.map} +1 -1
- package/dist/admin/chunks/{en-CLf4SuMQ.js → en-G976DLsg.js} +4 -1
- package/dist/admin/chunks/{en-CLf4SuMQ.js.map → en-G976DLsg.js.map} +1 -1
- package/dist/admin/chunks/{index-SQ88CePz.js → index-BA_JLxKS.js} +171 -117
- package/dist/admin/chunks/index-BA_JLxKS.js.map +1 -0
- package/dist/admin/chunks/{index-CcJLBLNf.mjs → index-CIOT3ggy.mjs} +170 -119
- package/dist/admin/chunks/index-CIOT3ggy.mjs.map +1 -0
- package/dist/admin/chunks/{layout-xxDnIsHG.js → layout-C510xcd6.js} +86 -13
- package/dist/admin/chunks/layout-C510xcd6.js.map +1 -0
- package/dist/admin/chunks/{layout-4nCaNnTs.mjs → layout-DjT9cccU.mjs} +78 -5
- package/dist/admin/chunks/layout-DjT9cccU.mjs.map +1 -0
- package/dist/admin/chunks/{useDragAndDrop-gcqEJMnO.js → objects-BJTP843m.js} +73 -1
- package/dist/admin/chunks/objects-BJTP843m.js.map +1 -0
- package/dist/admin/chunks/{useDragAndDrop-HYwNDExe.mjs → objects-D2z-IJgu.mjs} +72 -2
- package/dist/admin/chunks/objects-D2z-IJgu.mjs.map +1 -0
- package/dist/admin/chunks/{relations-VlsO9KQZ.js → usePrev-BglKW7a4.js} +18 -2
- package/dist/admin/chunks/usePrev-BglKW7a4.js.map +1 -0
- package/dist/admin/chunks/{relations-D1R7vM_e.mjs → usePrev-DAWUYIPh.mjs} +18 -4
- package/dist/admin/chunks/usePrev-DAWUYIPh.mjs.map +1 -0
- package/dist/admin/index.js +1 -1
- package/dist/admin/index.mjs +1 -1
- package/dist/admin/src/features/DocumentContext.d.ts +53 -0
- package/dist/admin/src/features/DocumentRBAC.d.ts +3 -2
- package/dist/admin/src/pages/EditView/components/DocumentActions.d.ts +1 -1
- package/dist/admin/src/pages/EditView/components/FormInputs/Relations/RelationModal.d.ts +8 -0
- package/dist/admin/src/pages/EditView/components/FormInputs/{Relations.d.ts → Relations/Relations.d.ts} +9 -4
- package/dist/admin/src/pages/EditView/components/FormLayout.d.ts +8 -3
- package/dist/admin/src/pages/EditView/components/InputRenderer.d.ts +7 -4
- package/dist/admin/src/preview/components/PreviewHeader.d.ts +1 -2
- package/dist/admin/src/preview/pages/Preview.d.ts +0 -2
- package/package.json +5 -5
- package/dist/admin/chunks/EditViewPage-BAI2r49P.mjs.map +0 -1
- package/dist/admin/chunks/EditViewPage-DpvonssD.js.map +0 -1
- package/dist/admin/chunks/History-C-_o7tz8.js.map +0 -1
- package/dist/admin/chunks/History-DClLuGIg.mjs.map +0 -1
- package/dist/admin/chunks/Input-BMLRZBE3.mjs.map +0 -1
- package/dist/admin/chunks/Input-Bv-rqfYH.js.map +0 -1
- package/dist/admin/chunks/Preview-05BZGpV2.mjs.map +0 -1
- package/dist/admin/chunks/Preview-B6ThL2SA.js.map +0 -1
- package/dist/admin/chunks/Relations-CJ0GWuqq.js +0 -1318
- package/dist/admin/chunks/Relations-CJ0GWuqq.js.map +0 -1
- package/dist/admin/chunks/Relations-CiOfFNxW.mjs +0 -1291
- package/dist/admin/chunks/Relations-CiOfFNxW.mjs.map +0 -1
- package/dist/admin/chunks/index-CcJLBLNf.mjs.map +0 -1
- package/dist/admin/chunks/index-SQ88CePz.js.map +0 -1
- package/dist/admin/chunks/layout-4nCaNnTs.mjs.map +0 -1
- package/dist/admin/chunks/layout-xxDnIsHG.js.map +0 -1
- package/dist/admin/chunks/objects-C3EebVVe.js +0 -76
- package/dist/admin/chunks/objects-C3EebVVe.js.map +0 -1
- package/dist/admin/chunks/objects-wl73iEma.mjs +0 -73
- package/dist/admin/chunks/objects-wl73iEma.mjs.map +0 -1
- package/dist/admin/chunks/relations-D1R7vM_e.mjs.map +0 -1
- package/dist/admin/chunks/relations-VlsO9KQZ.js.map +0 -1
- package/dist/admin/chunks/useDragAndDrop-HYwNDExe.mjs.map +0 -1
- package/dist/admin/chunks/useDragAndDrop-gcqEJMnO.js.map +0 -1
- package/dist/admin/chunks/usePrev-Bjw2dhmq.mjs +0 -18
- package/dist/admin/chunks/usePrev-Bjw2dhmq.mjs.map +0 -1
- package/dist/admin/chunks/usePrev-DIYl-IAL.js +0 -21
- package/dist/admin/chunks/usePrev-DIYl-IAL.js.map +0 -1
- package/dist/admin/src/preview/components/PreviewContent.d.ts +0 -2
@@ -119,102 +119,6 @@ const DOCUMENT_META_FIELDS = [
|
|
119
119
|
const SINGLE_TYPES = 'single-types';
|
120
120
|
const COLLECTION_TYPES = 'collection-types';
|
121
121
|
|
122
|
-
const [DocumentRBACProvider, useDocumentRBAC] = strapiAdmin.createContext('DocumentRBAC', {
|
123
|
-
canCreate: false,
|
124
|
-
canCreateFields: [],
|
125
|
-
canDelete: false,
|
126
|
-
canPublish: false,
|
127
|
-
canRead: false,
|
128
|
-
canReadFields: [],
|
129
|
-
canUpdate: false,
|
130
|
-
canUpdateFields: [],
|
131
|
-
canUserAction: ()=>false,
|
132
|
-
isLoading: false
|
133
|
-
});
|
134
|
-
/**
|
135
|
-
* @internal This component is not meant to be used outside of the Content Manager plugin.
|
136
|
-
* It depends on knowing the slug/model of the content-type using the params of the URL.
|
137
|
-
* If you do use the hook outside of the context, we default to `false` for all actions.
|
138
|
-
*
|
139
|
-
* It then creates an list of `can{Action}` that are passed to the context for consumption
|
140
|
-
* within the app to enforce RBAC.
|
141
|
-
*/ const DocumentRBAC = ({ children, permissions })=>{
|
142
|
-
const { slug } = reactRouterDom.useParams();
|
143
|
-
if (!slug) {
|
144
|
-
throw new Error('Cannot find the slug param in the URL');
|
145
|
-
}
|
146
|
-
const [{ rawQuery }] = strapiAdmin.useQueryParams();
|
147
|
-
const userPermissions = strapiAdmin.useAuth('DocumentRBAC', (state)=>state.permissions);
|
148
|
-
const contentTypePermissions = React__namespace.useMemo(()=>{
|
149
|
-
const contentTypePermissions = userPermissions.filter((permission)=>permission.subject === slug);
|
150
|
-
return contentTypePermissions.reduce((acc, permission)=>{
|
151
|
-
const [action] = permission.action.split('.').slice(-1);
|
152
|
-
return {
|
153
|
-
...acc,
|
154
|
-
[action]: [
|
155
|
-
permission
|
156
|
-
]
|
157
|
-
};
|
158
|
-
}, {});
|
159
|
-
}, [
|
160
|
-
slug,
|
161
|
-
userPermissions
|
162
|
-
]);
|
163
|
-
const { isLoading, allowedActions } = strapiAdmin.useRBAC(contentTypePermissions, permissions ?? undefined, // TODO: useRBAC context should be typed and built differently
|
164
|
-
// We are passing raw query as context to the hook so that it can
|
165
|
-
// rely on the locale provided from DocumentRBAC for its permission calculations.
|
166
|
-
rawQuery);
|
167
|
-
const canCreateFields = !isLoading && allowedActions.canCreate ? extractAndDedupeFields(contentTypePermissions.create) : [];
|
168
|
-
const canReadFields = !isLoading && allowedActions.canRead ? extractAndDedupeFields(contentTypePermissions.read) : [];
|
169
|
-
const canUpdateFields = !isLoading && allowedActions.canUpdate ? extractAndDedupeFields(contentTypePermissions.update) : [];
|
170
|
-
/**
|
171
|
-
* @description Checks if the user can perform an action on a field based on the field names
|
172
|
-
* provided as the second argument.
|
173
|
-
*/ const canUserAction = React__namespace.useCallback((fieldName, fieldsUserCanAction, fieldType)=>{
|
174
|
-
const name = removeNumericalStrings(fieldName.split('.'));
|
175
|
-
const componentFieldNames = fieldsUserCanAction// filter out fields that aren't components (components are dot separated)
|
176
|
-
.filter((field)=>field.split('.').length > 1);
|
177
|
-
if (fieldType === 'component') {
|
178
|
-
// check if the field name is within any of those arrays
|
179
|
-
return componentFieldNames.some((field)=>{
|
180
|
-
return field.includes(name.join('.'));
|
181
|
-
});
|
182
|
-
}
|
183
|
-
/**
|
184
|
-
* The field is within a component.
|
185
|
-
*/ if (name.length > 1) {
|
186
|
-
return componentFieldNames.includes(name.join('.'));
|
187
|
-
}
|
188
|
-
/**
|
189
|
-
* just a regular field
|
190
|
-
*/ return fieldsUserCanAction.includes(fieldName);
|
191
|
-
}, []);
|
192
|
-
if (isLoading) {
|
193
|
-
return /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Page.Loading, {});
|
194
|
-
}
|
195
|
-
return /*#__PURE__*/ jsxRuntime.jsx(DocumentRBACProvider, {
|
196
|
-
isLoading: isLoading,
|
197
|
-
canCreateFields: canCreateFields,
|
198
|
-
canReadFields: canReadFields,
|
199
|
-
canUpdateFields: canUpdateFields,
|
200
|
-
canUserAction: canUserAction,
|
201
|
-
...allowedActions,
|
202
|
-
children: children
|
203
|
-
});
|
204
|
-
};
|
205
|
-
/**
|
206
|
-
* @internal it's really small, but it's used three times in a row and DRY for something this straight forward.
|
207
|
-
*/ const extractAndDedupeFields = (permissions = [])=>permissions.flatMap((permission)=>permission.properties?.fields).filter((field, index, arr)=>arr.indexOf(field) === index && typeof field === 'string');
|
208
|
-
/**
|
209
|
-
* @internal removes numerical strings from arrays.
|
210
|
-
* @example
|
211
|
-
* ```ts
|
212
|
-
* const name = 'a.0.b';
|
213
|
-
* const res = removeNumericalStrings(name.split('.'));
|
214
|
-
* console.log(res); // ['a', 'b']
|
215
|
-
* ```
|
216
|
-
*/ const removeNumericalStrings = (arr)=>arr.filter((item)=>isNaN(Number(item)));
|
217
|
-
|
218
122
|
const BLOCK_LIST_ATTRIBUTE_KEYS = [
|
219
123
|
'__component',
|
220
124
|
'__temp_key__'
|
@@ -1698,6 +1602,144 @@ const checkIfAttributeIsDisplayable = (attribute)=>{
|
|
1698
1602
|
};
|
1699
1603
|
};
|
1700
1604
|
|
1605
|
+
const [DocumentProvider, useDocumentContext] = strapiAdmin.createContext('DocumentContext');
|
1606
|
+
/**
|
1607
|
+
* TODO: Document in contributor docs, Add unit test
|
1608
|
+
*
|
1609
|
+
* This context provider and its associated hook are used to access a document at its root level
|
1610
|
+
* and expose a function to change the current document being viewed to one of the root level docuemnt's relations.
|
1611
|
+
*
|
1612
|
+
* The useDocumentContext hook exposes:
|
1613
|
+
* - meta: information about the currentDocument,
|
1614
|
+
* - document: the actual document,
|
1615
|
+
* - changeDocument: a function to change the current document to one of its relations.
|
1616
|
+
* - rootDocumentMeta: information about the root level document (current page)
|
1617
|
+
*/ const DocumentContextProvider = ({ children, initialDocument, onPreview })=>{
|
1618
|
+
/**
|
1619
|
+
* Initialize with the "root" document and expose a setter method to change to
|
1620
|
+
* one of the root level document's relations.
|
1621
|
+
*/ const [currentDocumentMeta, changeDocument] = React__namespace.useState(initialDocument);
|
1622
|
+
const params = React__namespace.useMemo(()=>buildValidParams(currentDocumentMeta.params ?? {}), [
|
1623
|
+
currentDocumentMeta.params
|
1624
|
+
]);
|
1625
|
+
const document = useDocument({
|
1626
|
+
...currentDocumentMeta,
|
1627
|
+
params
|
1628
|
+
});
|
1629
|
+
const [documentHistory, setDocumentHistory] = React__namespace.useState([]);
|
1630
|
+
return /*#__PURE__*/ jsxRuntime.jsx(DocumentProvider, {
|
1631
|
+
changeDocument: changeDocument,
|
1632
|
+
document: document,
|
1633
|
+
rootDocumentMeta: {
|
1634
|
+
documentId: initialDocument.documentId,
|
1635
|
+
model: initialDocument.model,
|
1636
|
+
collectionType: initialDocument.collectionType
|
1637
|
+
},
|
1638
|
+
meta: currentDocumentMeta,
|
1639
|
+
documentHistory: documentHistory,
|
1640
|
+
setDocumentHistory: setDocumentHistory,
|
1641
|
+
onPreview: onPreview,
|
1642
|
+
children: children
|
1643
|
+
});
|
1644
|
+
};
|
1645
|
+
|
1646
|
+
const [DocumentRBACProvider, useDocumentRBAC] = strapiAdmin.createContext('DocumentRBAC', {
|
1647
|
+
canCreate: false,
|
1648
|
+
canCreateFields: [],
|
1649
|
+
canDelete: false,
|
1650
|
+
canPublish: false,
|
1651
|
+
canRead: false,
|
1652
|
+
canReadFields: [],
|
1653
|
+
canUpdate: false,
|
1654
|
+
canUpdateFields: [],
|
1655
|
+
canUserAction: ()=>false,
|
1656
|
+
isLoading: false
|
1657
|
+
});
|
1658
|
+
/**
|
1659
|
+
* @internal This component is not meant to be used outside of the Content Manager plugin.
|
1660
|
+
* 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.
|
1661
|
+
* If you do use the hook outside of the context, we default to `false` for all actions.
|
1662
|
+
*
|
1663
|
+
* It then creates an list of `can{Action}` that are passed to the context for consumption
|
1664
|
+
* within the app to enforce RBAC.
|
1665
|
+
*/ const DocumentRBAC = ({ children, permissions, model })=>{
|
1666
|
+
const { slug } = reactRouterDom.useParams();
|
1667
|
+
if (!slug && !model) {
|
1668
|
+
throw new Error('Cannot find the slug param in the URL or the model prop is not provided.');
|
1669
|
+
}
|
1670
|
+
const contentTypeUid = model ?? slug;
|
1671
|
+
const [{ rawQuery }] = strapiAdmin.useQueryParams();
|
1672
|
+
const userPermissions = strapiAdmin.useAuth('DocumentRBAC', (state)=>state.permissions);
|
1673
|
+
const contentTypePermissions = React__namespace.useMemo(()=>{
|
1674
|
+
const contentTypePermissions = userPermissions.filter((permission)=>permission.subject === contentTypeUid);
|
1675
|
+
return contentTypePermissions.reduce((acc, permission)=>{
|
1676
|
+
const [action] = permission.action.split('.').slice(-1);
|
1677
|
+
return {
|
1678
|
+
...acc,
|
1679
|
+
[action]: [
|
1680
|
+
permission
|
1681
|
+
]
|
1682
|
+
};
|
1683
|
+
}, {});
|
1684
|
+
}, [
|
1685
|
+
contentTypeUid,
|
1686
|
+
userPermissions
|
1687
|
+
]);
|
1688
|
+
const { isLoading, allowedActions } = strapiAdmin.useRBAC(contentTypePermissions, permissions ?? undefined, // TODO: useRBAC context should be typed and built differently
|
1689
|
+
// We are passing raw query as context to the hook so that it can
|
1690
|
+
// rely on the locale provided from DocumentRBAC for its permission calculations.
|
1691
|
+
rawQuery);
|
1692
|
+
const canCreateFields = !isLoading && allowedActions.canCreate ? extractAndDedupeFields(contentTypePermissions.create) : [];
|
1693
|
+
const canReadFields = !isLoading && allowedActions.canRead ? extractAndDedupeFields(contentTypePermissions.read) : [];
|
1694
|
+
const canUpdateFields = !isLoading && allowedActions.canUpdate ? extractAndDedupeFields(contentTypePermissions.update) : [];
|
1695
|
+
/**
|
1696
|
+
* @description Checks if the user can perform an action on a field based on the field names
|
1697
|
+
* provided as the second argument.
|
1698
|
+
*/ const canUserAction = React__namespace.useCallback((fieldName, fieldsUserCanAction, fieldType)=>{
|
1699
|
+
const name = removeNumericalStrings(fieldName.split('.'));
|
1700
|
+
const componentFieldNames = fieldsUserCanAction// filter out fields that aren't components (components are dot separated)
|
1701
|
+
.filter((field)=>field.split('.').length > 1);
|
1702
|
+
if (fieldType === 'component') {
|
1703
|
+
// check if the field name is within any of those arrays
|
1704
|
+
return componentFieldNames.some((field)=>{
|
1705
|
+
return field.includes(name.join('.'));
|
1706
|
+
});
|
1707
|
+
}
|
1708
|
+
/**
|
1709
|
+
* The field is within a component.
|
1710
|
+
*/ if (name.length > 1) {
|
1711
|
+
return componentFieldNames.includes(name.join('.'));
|
1712
|
+
}
|
1713
|
+
/**
|
1714
|
+
* just a regular field
|
1715
|
+
*/ return fieldsUserCanAction.includes(fieldName);
|
1716
|
+
}, []);
|
1717
|
+
if (isLoading) {
|
1718
|
+
return /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Page.Loading, {});
|
1719
|
+
}
|
1720
|
+
return /*#__PURE__*/ jsxRuntime.jsx(DocumentRBACProvider, {
|
1721
|
+
isLoading: isLoading,
|
1722
|
+
canCreateFields: canCreateFields,
|
1723
|
+
canReadFields: canReadFields,
|
1724
|
+
canUpdateFields: canUpdateFields,
|
1725
|
+
canUserAction: canUserAction,
|
1726
|
+
...allowedActions,
|
1727
|
+
children: children
|
1728
|
+
});
|
1729
|
+
};
|
1730
|
+
/**
|
1731
|
+
* @internal it's really small, but it's used three times in a row and DRY for something this straight forward.
|
1732
|
+
*/ const extractAndDedupeFields = (permissions = [])=>permissions.flatMap((permission)=>permission.properties?.fields).filter((field, index, arr)=>arr.indexOf(field) === index && typeof field === 'string');
|
1733
|
+
/**
|
1734
|
+
* @internal removes numerical strings from arrays.
|
1735
|
+
* @example
|
1736
|
+
* ```ts
|
1737
|
+
* const name = 'a.0.b';
|
1738
|
+
* const res = removeNumericalStrings(name.split('.'));
|
1739
|
+
* console.log(res); // ['a', 'b']
|
1740
|
+
* ```
|
1741
|
+
*/ const removeNumericalStrings = (arr)=>arr.filter((item)=>isNaN(Number(item)));
|
1742
|
+
|
1701
1743
|
const prefixPluginTranslations = (trad, pluginId)=>{
|
1702
1744
|
return Object.keys(trad).reduce((acc, current)=>{
|
1703
1745
|
acc[`${pluginId}.${current}`] = trad[current];
|
@@ -2263,7 +2305,7 @@ const DEFAULT_UNEXPECTED_ERROR_MSG = {
|
|
2263
2305
|
};
|
2264
2306
|
};
|
2265
2307
|
|
2266
|
-
const ProtectedHistoryPage = /*#__PURE__*/ React__namespace.lazy(()=>Promise.resolve().then(function () { return require('./History-
|
2308
|
+
const ProtectedHistoryPage = /*#__PURE__*/ React__namespace.lazy(()=>Promise.resolve().then(function () { return require('./History-Crvb_hzd.js'); }).then((mod)=>({
|
2267
2309
|
default: mod.ProtectedHistoryPage
|
2268
2310
|
})));
|
2269
2311
|
/**
|
@@ -2279,7 +2321,7 @@ const ProtectedHistoryPage = /*#__PURE__*/ React__namespace.lazy(()=>Promise.res
|
|
2279
2321
|
}
|
2280
2322
|
];
|
2281
2323
|
|
2282
|
-
const ProtectedPreviewPage = /*#__PURE__*/ React__namespace.lazy(()=>Promise.resolve().then(function () { return require('./Preview-
|
2324
|
+
const ProtectedPreviewPage = /*#__PURE__*/ React__namespace.lazy(()=>Promise.resolve().then(function () { return require('./Preview-CCjSV5Iu.js'); }).then((mod)=>({
|
2283
2325
|
default: mod.ProtectedPreviewPage
|
2284
2326
|
})));
|
2285
2327
|
const routes$1 = [
|
@@ -2293,25 +2335,25 @@ const routes$1 = [
|
|
2293
2335
|
}
|
2294
2336
|
];
|
2295
2337
|
|
2296
|
-
const ProtectedEditViewPage = /*#__PURE__*/ React.lazy(()=>Promise.resolve().then(function () { return require('./EditViewPage-
|
2338
|
+
const ProtectedEditViewPage = /*#__PURE__*/ React.lazy(()=>Promise.resolve().then(function () { return require('./EditViewPage-Cf_TPJZd.js'); }).then((mod)=>({
|
2297
2339
|
default: mod.ProtectedEditViewPage
|
2298
2340
|
})));
|
2299
|
-
const ProtectedListViewPage = /*#__PURE__*/ React.lazy(()=>Promise.resolve().then(function () { return require('./ListViewPage-
|
2341
|
+
const ProtectedListViewPage = /*#__PURE__*/ React.lazy(()=>Promise.resolve().then(function () { return require('./ListViewPage-nJJ227Fo.js'); }).then((mod)=>({
|
2300
2342
|
default: mod.ProtectedListViewPage
|
2301
2343
|
})));
|
2302
|
-
const ProtectedListConfiguration = /*#__PURE__*/ React.lazy(()=>Promise.resolve().then(function () { return require('./ListConfigurationPage-
|
2344
|
+
const ProtectedListConfiguration = /*#__PURE__*/ React.lazy(()=>Promise.resolve().then(function () { return require('./ListConfigurationPage-DlQ2pLyr.js'); }).then((mod)=>({
|
2303
2345
|
default: mod.ProtectedListConfiguration
|
2304
2346
|
})));
|
2305
|
-
const ProtectedEditConfigurationPage = /*#__PURE__*/ React.lazy(()=>Promise.resolve().then(function () { return require('./EditConfigurationPage-
|
2347
|
+
const ProtectedEditConfigurationPage = /*#__PURE__*/ React.lazy(()=>Promise.resolve().then(function () { return require('./EditConfigurationPage-CbAhYSyH.js'); }).then((mod)=>({
|
2306
2348
|
default: mod.ProtectedEditConfigurationPage
|
2307
2349
|
})));
|
2308
|
-
const ProtectedComponentConfigurationPage = /*#__PURE__*/ React.lazy(()=>Promise.resolve().then(function () { return require('./ComponentConfigurationPage-
|
2350
|
+
const ProtectedComponentConfigurationPage = /*#__PURE__*/ React.lazy(()=>Promise.resolve().then(function () { return require('./ComponentConfigurationPage-CBvwLnAK.js'); }).then((mod)=>({
|
2309
2351
|
default: mod.ProtectedComponentConfigurationPage
|
2310
2352
|
})));
|
2311
|
-
const NoPermissions = /*#__PURE__*/ React.lazy(()=>Promise.resolve().then(function () { return require('./NoPermissionsPage-
|
2353
|
+
const NoPermissions = /*#__PURE__*/ React.lazy(()=>Promise.resolve().then(function () { return require('./NoPermissionsPage-BeMTv_SG.js'); }).then((mod)=>({
|
2312
2354
|
default: mod.NoPermissions
|
2313
2355
|
})));
|
2314
|
-
const NoContentType = /*#__PURE__*/ React.lazy(()=>Promise.resolve().then(function () { return require('./NoContentTypePage-
|
2356
|
+
const NoContentType = /*#__PURE__*/ React.lazy(()=>Promise.resolve().then(function () { return require('./NoContentTypePage-Cxt-uFq7.js'); }).then((mod)=>({
|
2315
2357
|
default: mod.NoContentType
|
2316
2358
|
})));
|
2317
2359
|
const CollectionTypePages = ()=>{
|
@@ -2699,7 +2741,7 @@ const transformData = (data)=>{
|
|
2699
2741
|
/* -------------------------------------------------------------------------------------------------
|
2700
2742
|
* DocumentActionComponents
|
2701
2743
|
* -----------------------------------------------------------------------------------------------*/ const PublishAction$1 = ({ activeTab, documentId, model, collectionType, meta, document, onPreview })=>{
|
2702
|
-
const
|
2744
|
+
const schema = useDocumentContext('PublishAction', (state)=>state.document.schema);
|
2703
2745
|
const navigate = reactRouterDom.useNavigate();
|
2704
2746
|
const { toggleNotification } = strapiAdmin.useNotification();
|
2705
2747
|
const { _unstableFormatValidationErrors: formatValidationErrors } = strapiAdmin.useAPIErrorHandler();
|
@@ -2722,6 +2764,8 @@ const transformData = (data)=>{
|
|
2722
2764
|
const validate = strapiAdmin.useForm('PublishAction', (state)=>state.validate);
|
2723
2765
|
const setErrors = strapiAdmin.useForm('PublishAction', (state)=>state.setErrors);
|
2724
2766
|
const formValues = strapiAdmin.useForm('PublishAction', ({ values })=>values);
|
2767
|
+
const rootDocumentMeta = useDocumentContext('PublishAction', (state)=>state.rootDocumentMeta);
|
2768
|
+
const currentDocumentMeta = useDocumentContext('PublishAction', (state)=>state.meta);
|
2725
2769
|
React__namespace.useEffect(()=>{
|
2726
2770
|
if (isErrorDraftRelations) {
|
2727
2771
|
toggleNotification({
|
@@ -2824,11 +2868,12 @@ const transformData = (data)=>{
|
|
2824
2868
|
});
|
2825
2869
|
return;
|
2826
2870
|
}
|
2871
|
+
const isPublishingRelation = rootDocumentMeta.documentId !== currentDocumentMeta.documentId;
|
2827
2872
|
const res = await publish({
|
2828
2873
|
collectionType,
|
2829
2874
|
model,
|
2830
2875
|
documentId,
|
2831
|
-
params
|
2876
|
+
params: isPublishingRelation ? currentDocumentMeta.params : params
|
2832
2877
|
}, transformData(formValues));
|
2833
2878
|
if ('data' in res && collectionType !== SINGLE_TYPES) {
|
2834
2879
|
/**
|
@@ -2858,7 +2903,8 @@ const transformData = (data)=>{
|
|
2858
2903
|
loading: isLoading,
|
2859
2904
|
position: [
|
2860
2905
|
'panel',
|
2861
|
-
'preview'
|
2906
|
+
'preview',
|
2907
|
+
'relation-modal'
|
2862
2908
|
],
|
2863
2909
|
/**
|
2864
2910
|
* Disabled when:
|
@@ -2899,7 +2945,8 @@ const transformData = (data)=>{
|
|
2899
2945
|
PublishAction$1.type = 'publish';
|
2900
2946
|
PublishAction$1.position = [
|
2901
2947
|
'panel',
|
2902
|
-
'preview'
|
2948
|
+
'preview',
|
2949
|
+
'relation-modal'
|
2903
2950
|
];
|
2904
2951
|
const UpdateAction = ({ activeTab, documentId, model, collectionType, onPreview })=>{
|
2905
2952
|
const navigate = reactRouterDom.useNavigate();
|
@@ -2920,6 +2967,8 @@ const UpdateAction = ({ activeTab, documentId, model, collectionType, onPreview
|
|
2920
2967
|
const validate = strapiAdmin.useForm('UpdateAction', (state)=>state.validate);
|
2921
2968
|
const setErrors = strapiAdmin.useForm('UpdateAction', (state)=>state.setErrors);
|
2922
2969
|
const resetForm = strapiAdmin.useForm('PublishAction', ({ resetForm })=>resetForm);
|
2970
|
+
const rootDocumentMeta = useDocumentContext('UpdateAction', (state)=>state.rootDocumentMeta);
|
2971
|
+
const currentDocumentMeta = useDocumentContext('UpdateAction', (state)=>state.meta);
|
2923
2972
|
const handleUpdate = React__namespace.useCallback(async ()=>{
|
2924
2973
|
setSubmitting(true);
|
2925
2974
|
try {
|
@@ -2956,11 +3005,12 @@ const UpdateAction = ({ activeTab, documentId, model, collectionType, onPreview
|
|
2956
3005
|
setErrors(formatValidationErrors(res.error));
|
2957
3006
|
}
|
2958
3007
|
} else if (documentId || collectionType === SINGLE_TYPES) {
|
3008
|
+
const isEditingRelation = rootDocumentMeta.documentId !== currentDocumentMeta.documentId;
|
2959
3009
|
const res = await update({
|
2960
3010
|
collectionType,
|
2961
3011
|
model,
|
2962
3012
|
documentId,
|
2963
|
-
params
|
3013
|
+
params: isEditingRelation ? currentDocumentMeta.params : params
|
2964
3014
|
}, transformData(document));
|
2965
3015
|
if ('error' in res && isBaseQueryError(res.error) && res.error.name === 'ValidationError') {
|
2966
3016
|
setErrors(formatValidationErrors(res.error));
|
@@ -3042,14 +3092,16 @@ const UpdateAction = ({ activeTab, documentId, model, collectionType, onPreview
|
|
3042
3092
|
onClick: handleUpdate,
|
3043
3093
|
position: [
|
3044
3094
|
'panel',
|
3045
|
-
'preview'
|
3095
|
+
'preview',
|
3096
|
+
'relation-modal'
|
3046
3097
|
]
|
3047
3098
|
};
|
3048
3099
|
};
|
3049
3100
|
UpdateAction.type = 'update';
|
3050
3101
|
UpdateAction.position = [
|
3051
3102
|
'panel',
|
3052
|
-
'preview'
|
3103
|
+
'preview',
|
3104
|
+
'relation-modal'
|
3053
3105
|
];
|
3054
3106
|
const UNPUBLISH_DRAFT_OPTIONS = {
|
3055
3107
|
KEEP: 'keep',
|
@@ -3342,12 +3394,11 @@ const capitalise = (str)=>str.charAt(0).toUpperCase() + str.slice(1);
|
|
3342
3394
|
size: size,
|
3343
3395
|
variant: statusVariant,
|
3344
3396
|
role: "status",
|
3345
|
-
"aria-
|
3397
|
+
"aria-label": status,
|
3346
3398
|
children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
|
3347
3399
|
tag: "span",
|
3348
3400
|
variant: "omega",
|
3349
3401
|
fontWeight: "bold",
|
3350
|
-
id: "document-status",
|
3351
3402
|
children: formatMessage({
|
3352
3403
|
id: `content-manager.containers.List.${status}`,
|
3353
3404
|
defaultMessage: capitalise(status)
|
@@ -5326,7 +5377,7 @@ function __variableDynamicImportRuntime1__(path) {
|
|
5326
5377
|
case './translations/ca.json': return Promise.resolve().then(function () { return require('./ca-ClDTvatJ.js'); });
|
5327
5378
|
case './translations/cs.json': return Promise.resolve().then(function () { return require('./cs-BJFxwIWj.js'); });
|
5328
5379
|
case './translations/de.json': return Promise.resolve().then(function () { return require('./de-CbImAUA5.js'); });
|
5329
|
-
case './translations/en.json': return Promise.resolve().then(function () { return require('./en-
|
5380
|
+
case './translations/en.json': return Promise.resolve().then(function () { return require('./en-G976DLsg.js'); });
|
5330
5381
|
case './translations/es.json': return Promise.resolve().then(function () { return require('./es-C8vLuvZL.js'); });
|
5331
5382
|
case './translations/eu.json': return Promise.resolve().then(function () { return require('./eu-BJW3AvXu.js'); });
|
5332
5383
|
case './translations/fr.json': return Promise.resolve().then(function () { return require('./fr-gQSilC7w.js'); });
|
@@ -5380,7 +5431,7 @@ var index = {
|
|
5380
5431
|
app.router.addRoute({
|
5381
5432
|
path: 'content-manager/*',
|
5382
5433
|
lazy: async ()=>{
|
5383
|
-
const { Layout } = await Promise.resolve().then(function () { return require('./layout-
|
5434
|
+
const { Layout } = await Promise.resolve().then(function () { return require('./layout-C510xcd6.js'); });
|
5384
5435
|
return {
|
5385
5436
|
Component: Layout
|
5386
5437
|
};
|
@@ -5422,6 +5473,7 @@ exports.COLLECTION_TYPES = COLLECTION_TYPES;
|
|
5422
5473
|
exports.CREATOR_FIELDS = CREATOR_FIELDS;
|
5423
5474
|
exports.DEFAULT_SETTINGS = DEFAULT_SETTINGS;
|
5424
5475
|
exports.DocumentActionButton = DocumentActionButton;
|
5476
|
+
exports.DocumentContextProvider = DocumentContextProvider;
|
5425
5477
|
exports.DocumentRBAC = DocumentRBAC;
|
5426
5478
|
exports.DocumentStatus = DocumentStatus;
|
5427
5479
|
exports.HOOKS = HOOKS;
|
@@ -5455,6 +5507,7 @@ exports.useDoc = useDoc;
|
|
5455
5507
|
exports.useDocLayout = useDocLayout;
|
5456
5508
|
exports.useDocument = useDocument;
|
5457
5509
|
exports.useDocumentActions = useDocumentActions;
|
5510
|
+
exports.useDocumentContext = useDocumentContext;
|
5458
5511
|
exports.useDocumentLayout = useDocumentLayout;
|
5459
5512
|
exports.useDocumentRBAC = useDocumentRBAC;
|
5460
5513
|
exports.useGetAllContentTypeSettingsQuery = useGetAllContentTypeSettingsQuery;
|
@@ -5462,5 +5515,6 @@ exports.useGetAllDocumentsQuery = useGetAllDocumentsQuery;
|
|
5462
5515
|
exports.useGetContentTypeConfigurationQuery = useGetContentTypeConfigurationQuery;
|
5463
5516
|
exports.useGetInitialDataQuery = useGetInitialDataQuery;
|
5464
5517
|
exports.useGetPreviewUrlQuery = useGetPreviewUrlQuery;
|
5518
|
+
exports.useLazyGetDocumentQuery = useLazyGetDocumentQuery;
|
5465
5519
|
exports.useUpdateContentTypeConfigurationMutation = useUpdateContentTypeConfigurationMutation;
|
5466
|
-
//# sourceMappingURL=index-
|
5520
|
+
//# sourceMappingURL=index-BA_JLxKS.js.map
|