@strapi/content-manager 0.0.0-experimental.a4161dd0ce4a6742074cbfc43734281e14a29baa → 0.0.0-experimental.a4cee39f4705cbd534afa66170f94f2f68e65b75
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-CDKJ1saA.js → ComponentConfigurationPage-BWB_urBW.js} +3 -3
- package/dist/admin/chunks/{ComponentConfigurationPage-CDKJ1saA.js.map → ComponentConfigurationPage-BWB_urBW.js.map} +1 -1
- package/dist/admin/chunks/{ComponentConfigurationPage-BdKTyTdt.mjs → ComponentConfigurationPage-Bw3SD5w3.mjs} +3 -3
- package/dist/admin/chunks/{ComponentConfigurationPage-BdKTyTdt.mjs.map → ComponentConfigurationPage-Bw3SD5w3.mjs.map} +1 -1
- package/dist/admin/chunks/{EditConfigurationPage-BW5fpvkO.js → EditConfigurationPage-BazMqkY5.js} +3 -3
- package/dist/admin/chunks/{EditConfigurationPage-BW5fpvkO.js.map → EditConfigurationPage-BazMqkY5.js.map} +1 -1
- package/dist/admin/chunks/{EditConfigurationPage-CaJ_CmJz.mjs → EditConfigurationPage-bP8cL5u8.mjs} +3 -3
- package/dist/admin/chunks/{EditConfigurationPage-CaJ_CmJz.mjs.map → EditConfigurationPage-bP8cL5u8.mjs.map} +1 -1
- package/dist/admin/chunks/{EditViewPage-BDekCXSy.mjs → EditViewPage-D3F0FbHV.mjs} +10 -7
- package/dist/admin/chunks/EditViewPage-D3F0FbHV.mjs.map +1 -0
- package/dist/admin/chunks/{EditViewPage-CNacGhk_.js → EditViewPage-DjB2aEuN.js} +11 -8
- package/dist/admin/chunks/EditViewPage-DjB2aEuN.js.map +1 -0
- package/dist/admin/chunks/{Form-2LZDIqUE.mjs → Form-CO-twQva.mjs} +2 -2
- package/dist/admin/chunks/{Form-2LZDIqUE.mjs.map → Form-CO-twQva.mjs.map} +1 -1
- package/dist/admin/chunks/{Form-CouVf26p.js → Form-Dyr8enar.js} +2 -2
- package/dist/admin/chunks/{Form-CouVf26p.js.map → Form-Dyr8enar.js.map} +1 -1
- package/dist/admin/chunks/{History-Cv3uNjvV.js → History-BsZCxc7e.js} +6 -6
- package/dist/admin/chunks/{History-Cv3uNjvV.js.map → History-BsZCxc7e.js.map} +1 -1
- package/dist/admin/chunks/{History-B7zZvnQF.mjs → History-DJ_pI0gL.mjs} +5 -5
- package/dist/admin/chunks/{History-B7zZvnQF.mjs.map → History-DJ_pI0gL.mjs.map} +1 -1
- package/dist/admin/chunks/{Input-DPH5j7Yl.js → Input-D-yPzkxz.js} +634 -848
- package/dist/admin/chunks/Input-D-yPzkxz.js.map +1 -0
- package/dist/admin/chunks/{Input-BPTHgeyh.mjs → Input-DWQWd5MK.mjs} +634 -847
- package/dist/admin/chunks/Input-DWQWd5MK.mjs.map +1 -0
- package/dist/admin/chunks/{ListConfigurationPage-FS8YuoKF.mjs → ListConfigurationPage-DlvGrjR_.mjs} +2 -2
- package/dist/admin/chunks/{ListConfigurationPage-FS8YuoKF.mjs.map → ListConfigurationPage-DlvGrjR_.mjs.map} +1 -1
- package/dist/admin/chunks/{ListConfigurationPage-Cj1tt01r.js → ListConfigurationPage-dHbA6tve.js} +2 -2
- package/dist/admin/chunks/{ListConfigurationPage-Cj1tt01r.js.map → ListConfigurationPage-dHbA6tve.js.map} +1 -1
- package/dist/admin/chunks/{ListViewPage-Xv5mmaJq.mjs → ListViewPage-DaxIL_8o.mjs} +3 -3
- package/dist/admin/chunks/{ListViewPage-Xv5mmaJq.mjs.map → ListViewPage-DaxIL_8o.mjs.map} +1 -1
- package/dist/admin/chunks/{ListViewPage-BCmGmK7N.js → ListViewPage-gsJS3ulI.js} +3 -3
- package/dist/admin/chunks/{ListViewPage-BCmGmK7N.js.map → ListViewPage-gsJS3ulI.js.map} +1 -1
- package/dist/admin/chunks/{NoContentTypePage-DpvfQfhU.js → NoContentTypePage-BD-VEn6M.js} +2 -2
- package/dist/admin/chunks/{NoContentTypePage-DpvfQfhU.js.map → NoContentTypePage-BD-VEn6M.js.map} +1 -1
- package/dist/admin/chunks/{NoContentTypePage-Bbqw5ZV9.mjs → NoContentTypePage-xzAGzlVY.mjs} +2 -2
- package/dist/admin/chunks/{NoContentTypePage-Bbqw5ZV9.mjs.map → NoContentTypePage-xzAGzlVY.mjs.map} +1 -1
- package/dist/admin/chunks/{NoPermissionsPage-igrvpcW0.mjs → NoPermissionsPage-BAKqxUK7.mjs} +2 -2
- package/dist/admin/chunks/{NoPermissionsPage-igrvpcW0.mjs.map → NoPermissionsPage-BAKqxUK7.mjs.map} +1 -1
- package/dist/admin/chunks/{NoPermissionsPage-BYEkhBnk.js → NoPermissionsPage-BmE5T_Mq.js} +2 -2
- package/dist/admin/chunks/{NoPermissionsPage-BYEkhBnk.js.map → NoPermissionsPage-BmE5T_Mq.js.map} +1 -1
- package/dist/admin/chunks/{Preview-DR-9uYxZ.mjs → Preview-Bz2ir5R5.mjs} +102 -182
- package/dist/admin/chunks/Preview-Bz2ir5R5.mjs.map +1 -0
- package/dist/admin/chunks/{Preview-DlRltQbE.js → Preview-CP4m2RBm.js} +101 -181
- package/dist/admin/chunks/Preview-CP4m2RBm.js.map +1 -0
- package/dist/admin/chunks/{en-DBP0Gaid.mjs → en-C2zEwS3-.mjs} +3 -1
- package/dist/admin/chunks/{en-DBP0Gaid.mjs.map → en-C2zEwS3-.mjs.map} +1 -1
- package/dist/admin/chunks/{en-CH__IC8g.js → en-G976DLsg.js} +3 -1
- package/dist/admin/chunks/{en-CH__IC8g.js.map → en-G976DLsg.js.map} +1 -1
- package/dist/admin/chunks/{index-CISU19oJ.js → index-CFa6xmgK.js} +197 -127
- package/dist/admin/chunks/index-CFa6xmgK.js.map +1 -0
- package/dist/admin/chunks/{index-C_e5v8f7.mjs → index-ZyDJIuQ1.mjs} +196 -129
- package/dist/admin/chunks/index-ZyDJIuQ1.mjs.map +1 -0
- package/dist/admin/chunks/{layout-CrqscUTi.mjs → layout-D2tOWWAq.mjs} +4 -4
- package/dist/admin/chunks/{layout-CrqscUTi.mjs.map → layout-D2tOWWAq.mjs.map} +1 -1
- package/dist/admin/chunks/{layout-CajJum-G.js → layout-XA97mHoN.js} +4 -4
- package/dist/admin/chunks/{layout-CajJum-G.js.map → layout-XA97mHoN.js.map} +1 -1
- package/dist/admin/chunks/uk-BtM6WnaE.mjs +313 -0
- package/dist/admin/chunks/uk-BtM6WnaE.mjs.map +1 -0
- package/dist/admin/chunks/uk-DB6OgySY.js +318 -0
- package/dist/admin/chunks/uk-DB6OgySY.js.map +1 -0
- package/dist/admin/chunks/{usePrev-CHotxABl.js → usePrev-BEkg-rKP.js} +2 -2
- package/dist/admin/chunks/{usePrev-CHotxABl.js.map → usePrev-BEkg-rKP.js.map} +1 -1
- package/dist/admin/chunks/{usePrev-DF3ZO0z4.mjs → usePrev-DAPoUN3D.mjs} +2 -2
- package/dist/admin/chunks/{usePrev-DF3ZO0z4.mjs.map → usePrev-DAPoUN3D.mjs.map} +1 -1
- package/dist/admin/index.js +1 -1
- package/dist/admin/index.mjs +1 -1
- package/dist/admin/src/content-manager.d.ts +1 -0
- package/dist/admin/src/features/DocumentContext.d.ts +13 -2
- package/dist/admin/src/hooks/useDocument.d.ts +2 -0
- package/dist/admin/src/pages/EditView/components/DocumentActions.d.ts +1 -1
- package/dist/admin/src/pages/EditView/components/FormInputs/Relations/RelationModal.d.ts +5 -7
- package/dist/admin/src/pages/EditView/components/FormInputs/Relations/Relations.d.ts +1 -2
- package/dist/admin/src/pages/EditView/components/FormLayout.d.ts +3 -1
- package/dist/admin/src/pages/EditView/components/InputRenderer.d.ts +5 -2
- package/dist/admin/src/preview/components/PreviewHeader.d.ts +1 -2
- package/package.json +8 -8
- package/dist/admin/chunks/EditViewPage-BDekCXSy.mjs.map +0 -1
- package/dist/admin/chunks/EditViewPage-CNacGhk_.js.map +0 -1
- package/dist/admin/chunks/Input-BPTHgeyh.mjs.map +0 -1
- package/dist/admin/chunks/Input-DPH5j7Yl.js.map +0 -1
- package/dist/admin/chunks/Preview-DR-9uYxZ.mjs.map +0 -1
- package/dist/admin/chunks/Preview-DlRltQbE.js.map +0 -1
- package/dist/admin/chunks/index-CISU19oJ.js.map +0 -1
- package/dist/admin/chunks/index-C_e5v8f7.mjs.map +0 -1
- package/dist/admin/chunks/uk-B24MoTVg.js +0 -145
- package/dist/admin/chunks/uk-B24MoTVg.js.map +0 -1
- package/dist/admin/chunks/uk-Cpgmm7gE.mjs +0 -140
- package/dist/admin/chunks/uk-Cpgmm7gE.mjs.map +0 -1
- package/dist/admin/src/preview/components/PreviewContent.d.ts +0 -3
@@ -119,103 +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 or the model if it is passed as arg.
|
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, model })=>{
|
142
|
-
const { slug } = reactRouterDom.useParams();
|
143
|
-
if (!slug && !model) {
|
144
|
-
throw new Error('Cannot find the slug param in the URL or the model prop is not provided.');
|
145
|
-
}
|
146
|
-
const contentTypeUid = model ?? slug;
|
147
|
-
const [{ rawQuery }] = strapiAdmin.useQueryParams();
|
148
|
-
const userPermissions = strapiAdmin.useAuth('DocumentRBAC', (state)=>state.permissions);
|
149
|
-
const contentTypePermissions = React__namespace.useMemo(()=>{
|
150
|
-
const contentTypePermissions = userPermissions.filter((permission)=>permission.subject === contentTypeUid);
|
151
|
-
return contentTypePermissions.reduce((acc, permission)=>{
|
152
|
-
const [action] = permission.action.split('.').slice(-1);
|
153
|
-
return {
|
154
|
-
...acc,
|
155
|
-
[action]: [
|
156
|
-
permission
|
157
|
-
]
|
158
|
-
};
|
159
|
-
}, {});
|
160
|
-
}, [
|
161
|
-
contentTypeUid,
|
162
|
-
userPermissions
|
163
|
-
]);
|
164
|
-
const { isLoading, allowedActions } = strapiAdmin.useRBAC(contentTypePermissions, permissions ?? undefined, // TODO: useRBAC context should be typed and built differently
|
165
|
-
// We are passing raw query as context to the hook so that it can
|
166
|
-
// rely on the locale provided from DocumentRBAC for its permission calculations.
|
167
|
-
rawQuery);
|
168
|
-
const canCreateFields = !isLoading && allowedActions.canCreate ? extractAndDedupeFields(contentTypePermissions.create) : [];
|
169
|
-
const canReadFields = !isLoading && allowedActions.canRead ? extractAndDedupeFields(contentTypePermissions.read) : [];
|
170
|
-
const canUpdateFields = !isLoading && allowedActions.canUpdate ? extractAndDedupeFields(contentTypePermissions.update) : [];
|
171
|
-
/**
|
172
|
-
* @description Checks if the user can perform an action on a field based on the field names
|
173
|
-
* provided as the second argument.
|
174
|
-
*/ const canUserAction = React__namespace.useCallback((fieldName, fieldsUserCanAction, fieldType)=>{
|
175
|
-
const name = removeNumericalStrings(fieldName.split('.'));
|
176
|
-
const componentFieldNames = fieldsUserCanAction// filter out fields that aren't components (components are dot separated)
|
177
|
-
.filter((field)=>field.split('.').length > 1);
|
178
|
-
if (fieldType === 'component') {
|
179
|
-
// check if the field name is within any of those arrays
|
180
|
-
return componentFieldNames.some((field)=>{
|
181
|
-
return field.includes(name.join('.'));
|
182
|
-
});
|
183
|
-
}
|
184
|
-
/**
|
185
|
-
* The field is within a component.
|
186
|
-
*/ if (name.length > 1) {
|
187
|
-
return componentFieldNames.includes(name.join('.'));
|
188
|
-
}
|
189
|
-
/**
|
190
|
-
* just a regular field
|
191
|
-
*/ return fieldsUserCanAction.includes(fieldName);
|
192
|
-
}, []);
|
193
|
-
if (isLoading) {
|
194
|
-
return /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Page.Loading, {});
|
195
|
-
}
|
196
|
-
return /*#__PURE__*/ jsxRuntime.jsx(DocumentRBACProvider, {
|
197
|
-
isLoading: isLoading,
|
198
|
-
canCreateFields: canCreateFields,
|
199
|
-
canReadFields: canReadFields,
|
200
|
-
canUpdateFields: canUpdateFields,
|
201
|
-
canUserAction: canUserAction,
|
202
|
-
...allowedActions,
|
203
|
-
children: children
|
204
|
-
});
|
205
|
-
};
|
206
|
-
/**
|
207
|
-
* @internal it's really small, but it's used three times in a row and DRY for something this straight forward.
|
208
|
-
*/ const extractAndDedupeFields = (permissions = [])=>permissions.flatMap((permission)=>permission.properties?.fields).filter((field, index, arr)=>arr.indexOf(field) === index && typeof field === 'string');
|
209
|
-
/**
|
210
|
-
* @internal removes numerical strings from arrays.
|
211
|
-
* @example
|
212
|
-
* ```ts
|
213
|
-
* const name = 'a.0.b';
|
214
|
-
* const res = removeNumericalStrings(name.split('.'));
|
215
|
-
* console.log(res); // ['a', 'b']
|
216
|
-
* ```
|
217
|
-
*/ const removeNumericalStrings = (arr)=>arr.filter((item)=>isNaN(Number(item)));
|
218
|
-
|
219
122
|
const BLOCK_LIST_ATTRIBUTE_KEYS = [
|
220
123
|
'__component',
|
221
124
|
'__temp_key__'
|
@@ -1526,7 +1429,7 @@ const checkIfAttributeIsDisplayable = (attribute)=>{
|
|
1526
1429
|
const { toggleNotification } = strapiAdmin.useNotification();
|
1527
1430
|
const { _unstableFormatAPIError: formatAPIError } = strapiAdmin.useAPIErrorHandler();
|
1528
1431
|
const { formatMessage } = reactIntl.useIntl();
|
1529
|
-
const { currentData: data, isLoading: isLoadingDocument, isFetching: isFetchingDocument, error } = useGetDocumentQuery(args, {
|
1432
|
+
const { currentData: data, isLoading: isLoadingDocument, isFetching: isFetchingDocument, error, refetch } = useGetDocumentQuery(args, {
|
1530
1433
|
...opts,
|
1531
1434
|
skip: !args.documentId && args.collectionType !== SINGLE_TYPES || opts?.skip
|
1532
1435
|
});
|
@@ -1625,7 +1528,8 @@ const checkIfAttributeIsDisplayable = (attribute)=>{
|
|
1625
1528
|
schemas,
|
1626
1529
|
validate,
|
1627
1530
|
getTitle,
|
1628
|
-
getInitialFormValues
|
1531
|
+
getInitialFormValues,
|
1532
|
+
refetch
|
1629
1533
|
};
|
1630
1534
|
};
|
1631
1535
|
/* -------------------------------------------------------------------------------------------------
|
@@ -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];
|
@@ -1870,7 +1912,9 @@ const DEFAULT_UNEXPECTED_ERROR_MSG = {
|
|
1870
1912
|
const [publishDocument, { isLoading: isPublishing }] = usePublishDocumentMutation();
|
1871
1913
|
const publish = React__namespace.useCallback(async ({ collectionType, model, documentId, params }, data)=>{
|
1872
1914
|
try {
|
1873
|
-
trackUsage('willPublishEntry'
|
1915
|
+
trackUsage('willPublishEntry', {
|
1916
|
+
documentId
|
1917
|
+
});
|
1874
1918
|
const res = await publishDocument({
|
1875
1919
|
collectionType,
|
1876
1920
|
model,
|
@@ -1887,7 +1931,9 @@ const DEFAULT_UNEXPECTED_ERROR_MSG = {
|
|
1887
1931
|
error: res.error
|
1888
1932
|
};
|
1889
1933
|
}
|
1890
|
-
trackUsage('didPublishEntry'
|
1934
|
+
trackUsage('didPublishEntry', {
|
1935
|
+
documentId
|
1936
|
+
});
|
1891
1937
|
toggleNotification({
|
1892
1938
|
type: 'success',
|
1893
1939
|
message: formatMessage({
|
@@ -1974,7 +2020,10 @@ const DEFAULT_UNEXPECTED_ERROR_MSG = {
|
|
1974
2020
|
error: res.error
|
1975
2021
|
};
|
1976
2022
|
}
|
1977
|
-
trackUsage('didEditEntry',
|
2023
|
+
trackUsage('didEditEntry', {
|
2024
|
+
...trackerProperty,
|
2025
|
+
documentId: res.data.data.documentId
|
2026
|
+
});
|
1978
2027
|
toggleNotification({
|
1979
2028
|
type: 'success',
|
1980
2029
|
message: formatMessage({
|
@@ -2110,7 +2159,10 @@ const DEFAULT_UNEXPECTED_ERROR_MSG = {
|
|
2110
2159
|
error: res.error
|
2111
2160
|
};
|
2112
2161
|
}
|
2113
|
-
trackUsage('didCreateEntry',
|
2162
|
+
trackUsage('didCreateEntry', {
|
2163
|
+
...trackerProperty,
|
2164
|
+
documentId: res.data.data.documentId
|
2165
|
+
});
|
2114
2166
|
toggleNotification({
|
2115
2167
|
type: 'success',
|
2116
2168
|
message: formatMessage({
|
@@ -2253,7 +2305,7 @@ const DEFAULT_UNEXPECTED_ERROR_MSG = {
|
|
2253
2305
|
};
|
2254
2306
|
};
|
2255
2307
|
|
2256
|
-
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-BsZCxc7e.js'); }).then((mod)=>({
|
2257
2309
|
default: mod.ProtectedHistoryPage
|
2258
2310
|
})));
|
2259
2311
|
/**
|
@@ -2269,7 +2321,7 @@ const ProtectedHistoryPage = /*#__PURE__*/ React__namespace.lazy(()=>Promise.res
|
|
2269
2321
|
}
|
2270
2322
|
];
|
2271
2323
|
|
2272
|
-
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-CP4m2RBm.js'); }).then((mod)=>({
|
2273
2325
|
default: mod.ProtectedPreviewPage
|
2274
2326
|
})));
|
2275
2327
|
const routes$1 = [
|
@@ -2283,25 +2335,25 @@ const routes$1 = [
|
|
2283
2335
|
}
|
2284
2336
|
];
|
2285
2337
|
|
2286
|
-
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-DjB2aEuN.js'); }).then((mod)=>({
|
2287
2339
|
default: mod.ProtectedEditViewPage
|
2288
2340
|
})));
|
2289
|
-
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-gsJS3ulI.js'); }).then((mod)=>({
|
2290
2342
|
default: mod.ProtectedListViewPage
|
2291
2343
|
})));
|
2292
|
-
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-dHbA6tve.js'); }).then((mod)=>({
|
2293
2345
|
default: mod.ProtectedListConfiguration
|
2294
2346
|
})));
|
2295
|
-
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-BazMqkY5.js'); }).then((mod)=>({
|
2296
2348
|
default: mod.ProtectedEditConfigurationPage
|
2297
2349
|
})));
|
2298
|
-
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-BWB_urBW.js'); }).then((mod)=>({
|
2299
2351
|
default: mod.ProtectedComponentConfigurationPage
|
2300
2352
|
})));
|
2301
|
-
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-BmE5T_Mq.js'); }).then((mod)=>({
|
2302
2354
|
default: mod.NoPermissions
|
2303
2355
|
})));
|
2304
|
-
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-BD-VEn6M.js'); }).then((mod)=>({
|
2305
2357
|
default: mod.NoContentType
|
2306
2358
|
})));
|
2307
2359
|
const CollectionTypePages = ()=>{
|
@@ -2688,8 +2740,8 @@ const transformData = (data)=>{
|
|
2688
2740
|
};
|
2689
2741
|
/* -------------------------------------------------------------------------------------------------
|
2690
2742
|
* DocumentActionComponents
|
2691
|
-
* -----------------------------------------------------------------------------------------------*/ const PublishAction$1 = ({ activeTab, documentId, model, collectionType, meta, document })=>{
|
2692
|
-
const
|
2743
|
+
* -----------------------------------------------------------------------------------------------*/ const PublishAction$1 = ({ activeTab, documentId, model, collectionType, meta, document, onPreview })=>{
|
2744
|
+
const schema = useDocumentContext('PublishAction', (state)=>state.document.schema);
|
2693
2745
|
const navigate = reactRouterDom.useNavigate();
|
2694
2746
|
const { toggleNotification } = strapiAdmin.useNotification();
|
2695
2747
|
const { _unstableFormatValidationErrors: formatValidationErrors } = strapiAdmin.useAPIErrorHandler();
|
@@ -2712,6 +2764,8 @@ const transformData = (data)=>{
|
|
2712
2764
|
const validate = strapiAdmin.useForm('PublishAction', (state)=>state.validate);
|
2713
2765
|
const setErrors = strapiAdmin.useForm('PublishAction', (state)=>state.setErrors);
|
2714
2766
|
const formValues = strapiAdmin.useForm('PublishAction', ({ values })=>values);
|
2767
|
+
const rootDocumentMeta = useDocumentContext('PublishAction', (state)=>state.rootDocumentMeta);
|
2768
|
+
const currentDocumentMeta = useDocumentContext('PublishAction', (state)=>state.meta);
|
2715
2769
|
React__namespace.useEffect(()=>{
|
2716
2770
|
if (isErrorDraftRelations) {
|
2717
2771
|
toggleNotification({
|
@@ -2814,11 +2868,12 @@ const transformData = (data)=>{
|
|
2814
2868
|
});
|
2815
2869
|
return;
|
2816
2870
|
}
|
2871
|
+
const isPublishingRelation = rootDocumentMeta.documentId !== currentDocumentMeta.documentId;
|
2817
2872
|
const res = await publish({
|
2818
2873
|
collectionType,
|
2819
2874
|
model,
|
2820
2875
|
documentId,
|
2821
|
-
params
|
2876
|
+
params: isPublishingRelation ? currentDocumentMeta.params : params
|
2822
2877
|
}, transformData(formValues));
|
2823
2878
|
if ('data' in res && collectionType !== SINGLE_TYPES) {
|
2824
2879
|
/**
|
@@ -2834,6 +2889,9 @@ const transformData = (data)=>{
|
|
2834
2889
|
}
|
2835
2890
|
} finally{
|
2836
2891
|
setSubmitting(false);
|
2892
|
+
if (onPreview) {
|
2893
|
+
onPreview();
|
2894
|
+
}
|
2837
2895
|
}
|
2838
2896
|
};
|
2839
2897
|
const totalDraftRelations = localCountOfDraftRelations + serverCountOfDraftRelations;
|
@@ -2845,7 +2903,8 @@ const transformData = (data)=>{
|
|
2845
2903
|
loading: isLoading,
|
2846
2904
|
position: [
|
2847
2905
|
'panel',
|
2848
|
-
'preview'
|
2906
|
+
'preview',
|
2907
|
+
'relation-modal'
|
2849
2908
|
],
|
2850
2909
|
/**
|
2851
2910
|
* Disabled when:
|
@@ -2886,9 +2945,10 @@ const transformData = (data)=>{
|
|
2886
2945
|
PublishAction$1.type = 'publish';
|
2887
2946
|
PublishAction$1.position = [
|
2888
2947
|
'panel',
|
2889
|
-
'preview'
|
2948
|
+
'preview',
|
2949
|
+
'relation-modal'
|
2890
2950
|
];
|
2891
|
-
const UpdateAction = ({ activeTab, documentId, model, collectionType })=>{
|
2951
|
+
const UpdateAction = ({ activeTab, documentId, model, collectionType, onPreview })=>{
|
2892
2952
|
const navigate = reactRouterDom.useNavigate();
|
2893
2953
|
const { toggleNotification } = strapiAdmin.useNotification();
|
2894
2954
|
const { _unstableFormatValidationErrors: formatValidationErrors } = strapiAdmin.useAPIErrorHandler();
|
@@ -2907,6 +2967,8 @@ const UpdateAction = ({ activeTab, documentId, model, collectionType })=>{
|
|
2907
2967
|
const validate = strapiAdmin.useForm('UpdateAction', (state)=>state.validate);
|
2908
2968
|
const setErrors = strapiAdmin.useForm('UpdateAction', (state)=>state.setErrors);
|
2909
2969
|
const resetForm = strapiAdmin.useForm('PublishAction', ({ resetForm })=>resetForm);
|
2970
|
+
const rootDocumentMeta = useDocumentContext('UpdateAction', (state)=>state.rootDocumentMeta);
|
2971
|
+
const currentDocumentMeta = useDocumentContext('UpdateAction', (state)=>state.meta);
|
2910
2972
|
const handleUpdate = React__namespace.useCallback(async ()=>{
|
2911
2973
|
setSubmitting(true);
|
2912
2974
|
try {
|
@@ -2943,11 +3005,12 @@ const UpdateAction = ({ activeTab, documentId, model, collectionType })=>{
|
|
2943
3005
|
setErrors(formatValidationErrors(res.error));
|
2944
3006
|
}
|
2945
3007
|
} else if (documentId || collectionType === SINGLE_TYPES) {
|
3008
|
+
const isEditingRelation = rootDocumentMeta.documentId !== currentDocumentMeta.documentId;
|
2946
3009
|
const res = await update({
|
2947
3010
|
collectionType,
|
2948
3011
|
model,
|
2949
3012
|
documentId,
|
2950
|
-
params
|
3013
|
+
params: isEditingRelation ? currentDocumentMeta.params : params
|
2951
3014
|
}, transformData(document));
|
2952
3015
|
if ('error' in res && isBaseQueryError(res.error) && res.error.name === 'ValidationError') {
|
2953
3016
|
setErrors(formatValidationErrors(res.error));
|
@@ -2973,6 +3036,9 @@ const UpdateAction = ({ activeTab, documentId, model, collectionType })=>{
|
|
2973
3036
|
}
|
2974
3037
|
} finally{
|
2975
3038
|
setSubmitting(false);
|
3039
|
+
if (onPreview) {
|
3040
|
+
onPreview();
|
3041
|
+
}
|
2976
3042
|
}
|
2977
3043
|
}, [
|
2978
3044
|
clone,
|
@@ -3026,14 +3092,16 @@ const UpdateAction = ({ activeTab, documentId, model, collectionType })=>{
|
|
3026
3092
|
onClick: handleUpdate,
|
3027
3093
|
position: [
|
3028
3094
|
'panel',
|
3029
|
-
'preview'
|
3095
|
+
'preview',
|
3096
|
+
'relation-modal'
|
3030
3097
|
]
|
3031
3098
|
};
|
3032
3099
|
};
|
3033
3100
|
UpdateAction.type = 'update';
|
3034
3101
|
UpdateAction.position = [
|
3035
3102
|
'panel',
|
3036
|
-
'preview'
|
3103
|
+
'preview',
|
3104
|
+
'relation-modal'
|
3037
3105
|
];
|
3038
3106
|
const UNPUBLISH_DRAFT_OPTIONS = {
|
3039
3107
|
KEEP: 'keep',
|
@@ -3326,12 +3394,11 @@ const capitalise = (str)=>str.charAt(0).toUpperCase() + str.slice(1);
|
|
3326
3394
|
size: size,
|
3327
3395
|
variant: statusVariant,
|
3328
3396
|
role: "status",
|
3329
|
-
"aria-
|
3397
|
+
"aria-label": status,
|
3330
3398
|
children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
|
3331
3399
|
tag: "span",
|
3332
3400
|
variant: "omega",
|
3333
3401
|
fontWeight: "bold",
|
3334
|
-
id: "document-status",
|
3335
3402
|
children: formatMessage({
|
3336
3403
|
id: `content-manager.containers.List.${status}`,
|
3337
3404
|
defaultMessage: capitalise(status)
|
@@ -5310,7 +5377,7 @@ function __variableDynamicImportRuntime1__(path) {
|
|
5310
5377
|
case './translations/ca.json': return Promise.resolve().then(function () { return require('./ca-ClDTvatJ.js'); });
|
5311
5378
|
case './translations/cs.json': return Promise.resolve().then(function () { return require('./cs-BJFxwIWj.js'); });
|
5312
5379
|
case './translations/de.json': return Promise.resolve().then(function () { return require('./de-CbImAUA5.js'); });
|
5313
|
-
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'); });
|
5314
5381
|
case './translations/es.json': return Promise.resolve().then(function () { return require('./es-C8vLuvZL.js'); });
|
5315
5382
|
case './translations/eu.json': return Promise.resolve().then(function () { return require('./eu-BJW3AvXu.js'); });
|
5316
5383
|
case './translations/fr.json': return Promise.resolve().then(function () { return require('./fr-gQSilC7w.js'); });
|
@@ -5333,7 +5400,7 @@ function __variableDynamicImportRuntime1__(path) {
|
|
5333
5400
|
case './translations/sv.json': return Promise.resolve().then(function () { return require('./sv-BstBC1Yp.js'); });
|
5334
5401
|
case './translations/th.json': return Promise.resolve().then(function () { return require('./th-lXoOCqPC.js'); });
|
5335
5402
|
case './translations/tr.json': return Promise.resolve().then(function () { return require('./tr-CkS6sLIE.js'); });
|
5336
|
-
case './translations/uk.json': return Promise.resolve().then(function () { return require('./uk-
|
5403
|
+
case './translations/uk.json': return Promise.resolve().then(function () { return require('./uk-DB6OgySY.js'); });
|
5337
5404
|
case './translations/vi.json': return Promise.resolve().then(function () { return require('./vi-BGr1X_HZ.js'); });
|
5338
5405
|
case './translations/zh-Hans.json': return Promise.resolve().then(function () { return require('./zh-Hans-JVK9x7xr.js'); });
|
5339
5406
|
case './translations/zh.json': return Promise.resolve().then(function () { return require('./zh-DwFu_Kfj.js'); });
|
@@ -5364,7 +5431,7 @@ var index = {
|
|
5364
5431
|
app.router.addRoute({
|
5365
5432
|
path: 'content-manager/*',
|
5366
5433
|
lazy: async ()=>{
|
5367
|
-
const { Layout } = await Promise.resolve().then(function () { return require('./layout-
|
5434
|
+
const { Layout } = await Promise.resolve().then(function () { return require('./layout-XA97mHoN.js'); });
|
5368
5435
|
return {
|
5369
5436
|
Component: Layout
|
5370
5437
|
};
|
@@ -5406,6 +5473,7 @@ exports.COLLECTION_TYPES = COLLECTION_TYPES;
|
|
5406
5473
|
exports.CREATOR_FIELDS = CREATOR_FIELDS;
|
5407
5474
|
exports.DEFAULT_SETTINGS = DEFAULT_SETTINGS;
|
5408
5475
|
exports.DocumentActionButton = DocumentActionButton;
|
5476
|
+
exports.DocumentContextProvider = DocumentContextProvider;
|
5409
5477
|
exports.DocumentRBAC = DocumentRBAC;
|
5410
5478
|
exports.DocumentStatus = DocumentStatus;
|
5411
5479
|
exports.HOOKS = HOOKS;
|
@@ -5439,6 +5507,7 @@ exports.useDoc = useDoc;
|
|
5439
5507
|
exports.useDocLayout = useDocLayout;
|
5440
5508
|
exports.useDocument = useDocument;
|
5441
5509
|
exports.useDocumentActions = useDocumentActions;
|
5510
|
+
exports.useDocumentContext = useDocumentContext;
|
5442
5511
|
exports.useDocumentLayout = useDocumentLayout;
|
5443
5512
|
exports.useDocumentRBAC = useDocumentRBAC;
|
5444
5513
|
exports.useGetAllContentTypeSettingsQuery = useGetAllContentTypeSettingsQuery;
|
@@ -5446,5 +5515,6 @@ exports.useGetAllDocumentsQuery = useGetAllDocumentsQuery;
|
|
5446
5515
|
exports.useGetContentTypeConfigurationQuery = useGetContentTypeConfigurationQuery;
|
5447
5516
|
exports.useGetInitialDataQuery = useGetInitialDataQuery;
|
5448
5517
|
exports.useGetPreviewUrlQuery = useGetPreviewUrlQuery;
|
5518
|
+
exports.useLazyGetDocumentQuery = useLazyGetDocumentQuery;
|
5449
5519
|
exports.useUpdateContentTypeConfigurationMutation = useUpdateContentTypeConfigurationMutation;
|
5450
|
-
//# sourceMappingURL=index-
|
5520
|
+
//# sourceMappingURL=index-CFa6xmgK.js.map
|