@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
@@ -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,
|
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];
|
@@ -2243,7 +2285,7 @@ const DEFAULT_UNEXPECTED_ERROR_MSG = {
|
|
2243
2285
|
};
|
2244
2286
|
};
|
2245
2287
|
|
2246
|
-
const ProtectedHistoryPage = /*#__PURE__*/ React.lazy(()=>import('./History-
|
2288
|
+
const ProtectedHistoryPage = /*#__PURE__*/ React.lazy(()=>import('./History-DsRVSUF7.mjs').then((mod)=>({
|
2247
2289
|
default: mod.ProtectedHistoryPage
|
2248
2290
|
})));
|
2249
2291
|
/**
|
@@ -2259,7 +2301,7 @@ const ProtectedHistoryPage = /*#__PURE__*/ React.lazy(()=>import('./History-DClL
|
|
2259
2301
|
}
|
2260
2302
|
];
|
2261
2303
|
|
2262
|
-
const ProtectedPreviewPage = /*#__PURE__*/ React.lazy(()=>import('./Preview-
|
2304
|
+
const ProtectedPreviewPage = /*#__PURE__*/ React.lazy(()=>import('./Preview-aVLT3LM_.mjs').then((mod)=>({
|
2263
2305
|
default: mod.ProtectedPreviewPage
|
2264
2306
|
})));
|
2265
2307
|
const routes$1 = [
|
@@ -2273,25 +2315,25 @@ const routes$1 = [
|
|
2273
2315
|
}
|
2274
2316
|
];
|
2275
2317
|
|
2276
|
-
const ProtectedEditViewPage = /*#__PURE__*/ lazy(()=>import('./EditViewPage-
|
2318
|
+
const ProtectedEditViewPage = /*#__PURE__*/ lazy(()=>import('./EditViewPage-BtunY0ZP.mjs').then((mod)=>({
|
2277
2319
|
default: mod.ProtectedEditViewPage
|
2278
2320
|
})));
|
2279
|
-
const ProtectedListViewPage = /*#__PURE__*/ lazy(()=>import('./ListViewPage-
|
2321
|
+
const ProtectedListViewPage = /*#__PURE__*/ lazy(()=>import('./ListViewPage-DcUhPA9a.mjs').then((mod)=>({
|
2280
2322
|
default: mod.ProtectedListViewPage
|
2281
2323
|
})));
|
2282
|
-
const ProtectedListConfiguration = /*#__PURE__*/ lazy(()=>import('./ListConfigurationPage-
|
2324
|
+
const ProtectedListConfiguration = /*#__PURE__*/ lazy(()=>import('./ListConfigurationPage-DW-wAwmW.mjs').then((mod)=>({
|
2283
2325
|
default: mod.ProtectedListConfiguration
|
2284
2326
|
})));
|
2285
|
-
const ProtectedEditConfigurationPage = /*#__PURE__*/ lazy(()=>import('./EditConfigurationPage-
|
2327
|
+
const ProtectedEditConfigurationPage = /*#__PURE__*/ lazy(()=>import('./EditConfigurationPage-D1iHIzSR.mjs').then((mod)=>({
|
2286
2328
|
default: mod.ProtectedEditConfigurationPage
|
2287
2329
|
})));
|
2288
|
-
const ProtectedComponentConfigurationPage = /*#__PURE__*/ lazy(()=>import('./ComponentConfigurationPage-
|
2330
|
+
const ProtectedComponentConfigurationPage = /*#__PURE__*/ lazy(()=>import('./ComponentConfigurationPage-w_ss7xEy.mjs').then((mod)=>({
|
2289
2331
|
default: mod.ProtectedComponentConfigurationPage
|
2290
2332
|
})));
|
2291
|
-
const NoPermissions = /*#__PURE__*/ lazy(()=>import('./NoPermissionsPage-
|
2333
|
+
const NoPermissions = /*#__PURE__*/ lazy(()=>import('./NoPermissionsPage-RWPwNESA.mjs').then((mod)=>({
|
2292
2334
|
default: mod.NoPermissions
|
2293
2335
|
})));
|
2294
|
-
const NoContentType = /*#__PURE__*/ lazy(()=>import('./NoContentTypePage-
|
2336
|
+
const NoContentType = /*#__PURE__*/ lazy(()=>import('./NoContentTypePage-DbRXR2cr.mjs').then((mod)=>({
|
2295
2337
|
default: mod.NoContentType
|
2296
2338
|
})));
|
2297
2339
|
const CollectionTypePages = ()=>{
|
@@ -2679,7 +2721,7 @@ const transformData = (data)=>{
|
|
2679
2721
|
/* -------------------------------------------------------------------------------------------------
|
2680
2722
|
* DocumentActionComponents
|
2681
2723
|
* -----------------------------------------------------------------------------------------------*/ const PublishAction$1 = ({ activeTab, documentId, model, collectionType, meta, document, onPreview })=>{
|
2682
|
-
const
|
2724
|
+
const schema = useDocumentContext('PublishAction', (state)=>state.document.schema);
|
2683
2725
|
const navigate = useNavigate();
|
2684
2726
|
const { toggleNotification } = useNotification();
|
2685
2727
|
const { _unstableFormatValidationErrors: formatValidationErrors } = useAPIErrorHandler();
|
@@ -2702,6 +2744,8 @@ const transformData = (data)=>{
|
|
2702
2744
|
const validate = useForm('PublishAction', (state)=>state.validate);
|
2703
2745
|
const setErrors = useForm('PublishAction', (state)=>state.setErrors);
|
2704
2746
|
const formValues = useForm('PublishAction', ({ values })=>values);
|
2747
|
+
const rootDocumentMeta = useDocumentContext('PublishAction', (state)=>state.rootDocumentMeta);
|
2748
|
+
const currentDocumentMeta = useDocumentContext('PublishAction', (state)=>state.meta);
|
2705
2749
|
React.useEffect(()=>{
|
2706
2750
|
if (isErrorDraftRelations) {
|
2707
2751
|
toggleNotification({
|
@@ -2804,11 +2848,12 @@ const transformData = (data)=>{
|
|
2804
2848
|
});
|
2805
2849
|
return;
|
2806
2850
|
}
|
2851
|
+
const isPublishingRelation = rootDocumentMeta.documentId !== currentDocumentMeta.documentId;
|
2807
2852
|
const res = await publish({
|
2808
2853
|
collectionType,
|
2809
2854
|
model,
|
2810
2855
|
documentId,
|
2811
|
-
params
|
2856
|
+
params: isPublishingRelation ? currentDocumentMeta.params : params
|
2812
2857
|
}, transformData(formValues));
|
2813
2858
|
if ('data' in res && collectionType !== SINGLE_TYPES) {
|
2814
2859
|
/**
|
@@ -2838,7 +2883,8 @@ const transformData = (data)=>{
|
|
2838
2883
|
loading: isLoading,
|
2839
2884
|
position: [
|
2840
2885
|
'panel',
|
2841
|
-
'preview'
|
2886
|
+
'preview',
|
2887
|
+
'relation-modal'
|
2842
2888
|
],
|
2843
2889
|
/**
|
2844
2890
|
* Disabled when:
|
@@ -2879,7 +2925,8 @@ const transformData = (data)=>{
|
|
2879
2925
|
PublishAction$1.type = 'publish';
|
2880
2926
|
PublishAction$1.position = [
|
2881
2927
|
'panel',
|
2882
|
-
'preview'
|
2928
|
+
'preview',
|
2929
|
+
'relation-modal'
|
2883
2930
|
];
|
2884
2931
|
const UpdateAction = ({ activeTab, documentId, model, collectionType, onPreview })=>{
|
2885
2932
|
const navigate = useNavigate();
|
@@ -2900,6 +2947,8 @@ const UpdateAction = ({ activeTab, documentId, model, collectionType, onPreview
|
|
2900
2947
|
const validate = useForm('UpdateAction', (state)=>state.validate);
|
2901
2948
|
const setErrors = useForm('UpdateAction', (state)=>state.setErrors);
|
2902
2949
|
const resetForm = useForm('PublishAction', ({ resetForm })=>resetForm);
|
2950
|
+
const rootDocumentMeta = useDocumentContext('UpdateAction', (state)=>state.rootDocumentMeta);
|
2951
|
+
const currentDocumentMeta = useDocumentContext('UpdateAction', (state)=>state.meta);
|
2903
2952
|
const handleUpdate = React.useCallback(async ()=>{
|
2904
2953
|
setSubmitting(true);
|
2905
2954
|
try {
|
@@ -2936,11 +2985,12 @@ const UpdateAction = ({ activeTab, documentId, model, collectionType, onPreview
|
|
2936
2985
|
setErrors(formatValidationErrors(res.error));
|
2937
2986
|
}
|
2938
2987
|
} else if (documentId || collectionType === SINGLE_TYPES) {
|
2988
|
+
const isEditingRelation = rootDocumentMeta.documentId !== currentDocumentMeta.documentId;
|
2939
2989
|
const res = await update({
|
2940
2990
|
collectionType,
|
2941
2991
|
model,
|
2942
2992
|
documentId,
|
2943
|
-
params
|
2993
|
+
params: isEditingRelation ? currentDocumentMeta.params : params
|
2944
2994
|
}, transformData(document));
|
2945
2995
|
if ('error' in res && isBaseQueryError(res.error) && res.error.name === 'ValidationError') {
|
2946
2996
|
setErrors(formatValidationErrors(res.error));
|
@@ -3022,14 +3072,16 @@ const UpdateAction = ({ activeTab, documentId, model, collectionType, onPreview
|
|
3022
3072
|
onClick: handleUpdate,
|
3023
3073
|
position: [
|
3024
3074
|
'panel',
|
3025
|
-
'preview'
|
3075
|
+
'preview',
|
3076
|
+
'relation-modal'
|
3026
3077
|
]
|
3027
3078
|
};
|
3028
3079
|
};
|
3029
3080
|
UpdateAction.type = 'update';
|
3030
3081
|
UpdateAction.position = [
|
3031
3082
|
'panel',
|
3032
|
-
'preview'
|
3083
|
+
'preview',
|
3084
|
+
'relation-modal'
|
3033
3085
|
];
|
3034
3086
|
const UNPUBLISH_DRAFT_OPTIONS = {
|
3035
3087
|
KEEP: 'keep',
|
@@ -3322,12 +3374,11 @@ const capitalise = (str)=>str.charAt(0).toUpperCase() + str.slice(1);
|
|
3322
3374
|
size: size,
|
3323
3375
|
variant: statusVariant,
|
3324
3376
|
role: "status",
|
3325
|
-
"aria-
|
3377
|
+
"aria-label": status,
|
3326
3378
|
children: /*#__PURE__*/ jsx(Typography, {
|
3327
3379
|
tag: "span",
|
3328
3380
|
variant: "omega",
|
3329
3381
|
fontWeight: "bold",
|
3330
|
-
id: "document-status",
|
3331
3382
|
children: formatMessage({
|
3332
3383
|
id: `content-manager.containers.List.${status}`,
|
3333
3384
|
defaultMessage: capitalise(status)
|
@@ -5306,7 +5357,7 @@ function __variableDynamicImportRuntime1__(path) {
|
|
5306
5357
|
case './translations/ca.json': return import('./ca-DviY7mRj.mjs');
|
5307
5358
|
case './translations/cs.json': return import('./cs-C7OSYFQ7.mjs');
|
5308
5359
|
case './translations/de.json': return import('./de-5QRlDHyR.mjs');
|
5309
|
-
case './translations/en.json': return import('./en-
|
5360
|
+
case './translations/en.json': return import('./en-C2zEwS3-.mjs');
|
5310
5361
|
case './translations/es.json': return import('./es-DkoWSExG.mjs');
|
5311
5362
|
case './translations/eu.json': return import('./eu-BG1xX7HK.mjs');
|
5312
5363
|
case './translations/fr.json': return import('./fr-CFdRaRVj.mjs');
|
@@ -5360,7 +5411,7 @@ var index = {
|
|
5360
5411
|
app.router.addRoute({
|
5361
5412
|
path: 'content-manager/*',
|
5362
5413
|
lazy: async ()=>{
|
5363
|
-
const { Layout } = await import('./layout-
|
5414
|
+
const { Layout } = await import('./layout-DjT9cccU.mjs');
|
5364
5415
|
return {
|
5365
5416
|
Component: Layout
|
5366
5417
|
};
|
@@ -5395,5 +5446,5 @@ var index = {
|
|
5395
5446
|
}
|
5396
5447
|
};
|
5397
5448
|
|
5398
|
-
export {
|
5399
|
-
//# sourceMappingURL=index-
|
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
|