@strapi/content-manager 0.0.0-experimental.81dfdf02b1367004c7deed9e01afa9d3a15d0fa5 → 0.0.0-experimental.820adfc37c687bbcc4a213ae6929c541358b71e8
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/_chunks/CardDragPreview-C0QyJgRA.js.map +1 -1
- package/dist/_chunks/CardDragPreview-DOxamsuj.mjs.map +1 -1
- package/dist/_chunks/{ComponentConfigurationPage-qemkOlnj.mjs → ComponentConfigurationPage-CzVt9QCC.mjs} +4 -4
- package/dist/_chunks/{ComponentConfigurationPage-qemkOlnj.mjs.map → ComponentConfigurationPage-CzVt9QCC.mjs.map} +1 -1
- package/dist/_chunks/{ComponentConfigurationPage-D_M8iBw5.js → ComponentConfigurationPage-DYq8aqos.js} +5 -6
- package/dist/_chunks/{ComponentConfigurationPage-D_M8iBw5.js.map → ComponentConfigurationPage-DYq8aqos.js.map} +1 -1
- package/dist/_chunks/{ComponentIcon-BXdiCGQp.js → ComponentIcon-CRbtQEUV.js} +2 -3
- package/dist/_chunks/{ComponentIcon-BXdiCGQp.js.map → ComponentIcon-CRbtQEUV.js.map} +1 -1
- package/dist/_chunks/ComponentIcon-u4bIXTFY.mjs.map +1 -1
- package/dist/_chunks/{EditConfigurationPage-BePwPuHy.js → EditConfigurationPage-C9IATpr0.js} +5 -6
- package/dist/_chunks/{EditConfigurationPage-BePwPuHy.js.map → EditConfigurationPage-C9IATpr0.js.map} +1 -1
- package/dist/_chunks/{EditConfigurationPage-CjUrEewK.mjs → EditConfigurationPage-CLDwrUv5.mjs} +4 -4
- package/dist/_chunks/{EditConfigurationPage-CjUrEewK.mjs.map → EditConfigurationPage-CLDwrUv5.mjs.map} +1 -1
- package/dist/_chunks/{EditViewPage-B-RJeiJD.js → EditViewPage-Ch-uBvbv.js} +50 -11
- package/dist/_chunks/EditViewPage-Ch-uBvbv.js.map +1 -0
- package/dist/_chunks/{EditViewPage-De8GyU8P.mjs → EditViewPage-DtKM7Jgw.mjs} +50 -10
- package/dist/_chunks/EditViewPage-DtKM7Jgw.mjs.map +1 -0
- package/dist/_chunks/{Field-dq8Tg1M_.js → Field-B9ADaInZ.js} +153 -148
- package/dist/_chunks/Field-B9ADaInZ.js.map +1 -0
- package/dist/_chunks/{Field-pb2o8uBe.mjs → Field-Bn1jgMeF.mjs} +148 -142
- package/dist/_chunks/Field-Bn1jgMeF.mjs.map +1 -0
- package/dist/_chunks/FieldTypeIcon-CMlNO8PE.mjs.map +1 -1
- package/dist/_chunks/FieldTypeIcon-Dnwq_IRF.js.map +1 -1
- package/dist/_chunks/{Form-DJn0Dxha.mjs → Form-BB5i9Pxl.mjs} +17 -9
- package/dist/_chunks/Form-BB5i9Pxl.mjs.map +1 -0
- package/dist/_chunks/{Form-DGIf4jQU.js → Form-C3kjKrPw.js} +19 -12
- package/dist/_chunks/Form-C3kjKrPw.js.map +1 -0
- package/dist/_chunks/{History-Dh2NEHnR.js → History-AwrK0-SA.js} +42 -100
- package/dist/_chunks/History-AwrK0-SA.js.map +1 -0
- package/dist/_chunks/{History-BowL3JKP.mjs → History-Cw2Q7OQL.mjs} +43 -100
- package/dist/_chunks/History-Cw2Q7OQL.mjs.map +1 -0
- package/dist/_chunks/{ListConfigurationPage-BpVOB-hn.mjs → ListConfigurationPage-B47JIu1e.mjs} +7 -6
- package/dist/_chunks/ListConfigurationPage-B47JIu1e.mjs.map +1 -0
- package/dist/_chunks/{ListConfigurationPage-BxYCWz9e.js → ListConfigurationPage-CNTJ0DBm.js} +7 -7
- package/dist/_chunks/ListConfigurationPage-CNTJ0DBm.js.map +1 -0
- package/dist/_chunks/{ListViewPage-4XsciqHZ.js → ListViewPage-Be_UEBar.js} +103 -77
- package/dist/_chunks/ListViewPage-Be_UEBar.js.map +1 -0
- package/dist/_chunks/{ListViewPage-CXFUjZQC.mjs → ListViewPage-DuvjX6ra.mjs} +99 -72
- package/dist/_chunks/ListViewPage-DuvjX6ra.mjs.map +1 -0
- package/dist/_chunks/{NoContentTypePage-C8OpoHeU.js → NoContentTypePage-B1J0KUCO.js} +2 -2
- package/dist/_chunks/{NoContentTypePage-C8OpoHeU.js.map → NoContentTypePage-B1J0KUCO.js.map} +1 -1
- package/dist/_chunks/{NoContentTypePage-DuhOTp3x.mjs → NoContentTypePage-C6M-Q0Tv.mjs} +2 -2
- package/dist/_chunks/{NoContentTypePage-DuhOTp3x.mjs.map → NoContentTypePage-C6M-Q0Tv.mjs.map} +1 -1
- package/dist/_chunks/{NoPermissionsPage-DVz3mzDz.mjs → NoPermissionsPage-CAi3zCAD.mjs} +2 -2
- package/dist/_chunks/{NoPermissionsPage-DVz3mzDz.mjs.map → NoPermissionsPage-CAi3zCAD.mjs.map} +1 -1
- package/dist/_chunks/{NoPermissionsPage-y_r7DVA2.js → NoPermissionsPage-CN34TlEE.js} +2 -2
- package/dist/_chunks/{NoPermissionsPage-y_r7DVA2.js.map → NoPermissionsPage-CN34TlEE.js.map} +1 -1
- package/dist/_chunks/Preview-BrBRcL10.mjs +293 -0
- package/dist/_chunks/Preview-BrBRcL10.mjs.map +1 -0
- package/dist/_chunks/Preview-DOqm5jcJ.js +311 -0
- package/dist/_chunks/Preview-DOqm5jcJ.js.map +1 -0
- package/dist/_chunks/{Relations-CVNLrn1Y.mjs → Relations-_K-HYOiM.mjs} +75 -41
- package/dist/_chunks/Relations-_K-HYOiM.mjs.map +1 -0
- package/dist/_chunks/{Relations-DPFCAa7b.js → Relations-xtKZHtTN.js} +75 -42
- package/dist/_chunks/Relations-xtKZHtTN.js.map +1 -0
- package/dist/_chunks/{en-uOUIxfcQ.js → en-BK8Xyl5I.js} +28 -15
- package/dist/_chunks/{en-uOUIxfcQ.js.map → en-BK8Xyl5I.js.map} +1 -1
- package/dist/_chunks/{en-BrCTWlZv.mjs → en-Dtk_ot79.mjs} +28 -15
- package/dist/_chunks/{en-BrCTWlZv.mjs.map → en-Dtk_ot79.mjs.map} +1 -1
- package/dist/_chunks/{es-EUonQTon.js → es-9K52xZIr.js} +2 -2
- package/dist/_chunks/{ja-CcFe8diO.js.map → es-9K52xZIr.js.map} +1 -1
- package/dist/_chunks/{es-CeXiYflN.mjs → es-D34tqjMw.mjs} +2 -2
- package/dist/_chunks/{es-CeXiYflN.mjs.map → es-D34tqjMw.mjs.map} +1 -1
- package/dist/_chunks/{fr-CD9VFbPM.mjs → fr--pg5jUbt.mjs} +13 -3
- package/dist/_chunks/{fr-CD9VFbPM.mjs.map → fr--pg5jUbt.mjs.map} +1 -1
- package/dist/_chunks/{fr-B7kGGg3E.js → fr-B2Kyv8Z9.js} +13 -3
- package/dist/_chunks/{fr-B7kGGg3E.js.map → fr-B2Kyv8Z9.js.map} +1 -1
- package/dist/_chunks/hooks-BAaaKPS_.js.map +1 -1
- package/dist/_chunks/{index-C3fJE-1-.js → index-BlX-OdHL.js} +1276 -995
- package/dist/_chunks/index-BlX-OdHL.js.map +1 -0
- package/dist/_chunks/{index-DiMrfcfy.mjs → index-tETMKK2G.mjs} +1279 -998
- package/dist/_chunks/index-tETMKK2G.mjs.map +1 -0
- package/dist/_chunks/{ja-CcFe8diO.js → ja-7sfIbjxE.js} +2 -2
- package/dist/_chunks/{es-EUonQTon.js.map → ja-7sfIbjxE.js.map} +1 -1
- package/dist/_chunks/{ja-CtsUxOvk.mjs → ja-BHqhDq4V.mjs} +2 -2
- package/dist/_chunks/{ja-CtsUxOvk.mjs.map → ja-BHqhDq4V.mjs.map} +1 -1
- package/dist/_chunks/{layout-ls3gxfpH.mjs → layout-BaQBaz56.mjs} +6 -5
- package/dist/_chunks/{layout-ls3gxfpH.mjs.map → layout-BaQBaz56.mjs.map} +1 -1
- package/dist/_chunks/{layout-C788OmNr.js → layout-D8Sz3KxF.js} +7 -7
- package/dist/_chunks/{layout-C788OmNr.js.map → layout-D8Sz3KxF.js.map} +1 -1
- package/dist/_chunks/{objects-gigeqt7s.js → objects-BcXOv6_9.js} +2 -4
- package/dist/_chunks/{objects-gigeqt7s.js.map → objects-BcXOv6_9.js.map} +1 -1
- package/dist/_chunks/{objects-mKMAmfec.mjs → objects-D6yBsdmx.mjs} +2 -4
- package/dist/_chunks/{objects-mKMAmfec.mjs.map → objects-D6yBsdmx.mjs.map} +1 -1
- package/dist/_chunks/{relations-DYeotliT.js → relations-CAbbX8Sa.js} +6 -7
- package/dist/_chunks/relations-CAbbX8Sa.js.map +1 -0
- package/dist/_chunks/{relations-CLcOmGO0.mjs → relations-CsfmCqOU.mjs} +6 -7
- package/dist/_chunks/relations-CsfmCqOU.mjs.map +1 -0
- package/dist/_chunks/{usePrev-B9w_-eYc.js → useDebounce-CtcjDB3L.js} +14 -1
- package/dist/_chunks/useDebounce-CtcjDB3L.js.map +1 -0
- package/dist/_chunks/useDebounce-DmuSJIF3.mjs +29 -0
- package/dist/_chunks/useDebounce-DmuSJIF3.mjs.map +1 -0
- package/dist/_chunks/{useDragAndDrop-J0TUUbR6.js → useDragAndDrop-BMtgCYzL.js} +5 -9
- package/dist/_chunks/{useDragAndDrop-J0TUUbR6.js.map → useDragAndDrop-BMtgCYzL.js.map} +1 -1
- package/dist/_chunks/{useDragAndDrop-DdHgKsqq.mjs → useDragAndDrop-DJ6jqvZN.mjs} +4 -7
- package/dist/_chunks/{useDragAndDrop-DdHgKsqq.mjs.map → useDragAndDrop-DJ6jqvZN.mjs.map} +1 -1
- package/dist/admin/index.js +2 -1
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/index.mjs +4 -3
- package/dist/admin/src/content-manager.d.ts +3 -2
- package/dist/admin/src/exports.d.ts +1 -1
- package/dist/admin/src/hooks/useDocument.d.ts +32 -1
- package/dist/admin/src/pages/EditView/EditViewPage.d.ts +9 -1
- package/dist/admin/src/pages/EditView/components/DocumentActions.d.ts +1 -1
- package/dist/admin/src/pages/EditView/components/DocumentStatus.d.ts +2 -2
- package/dist/admin/src/pages/EditView/components/FormInputs/Wysiwyg/WysiwygStyles.d.ts +0 -32
- package/dist/admin/src/pages/EditView/components/Header.d.ts +11 -11
- package/dist/admin/src/preview/components/PreviewContent.d.ts +2 -0
- package/dist/admin/src/preview/components/PreviewHeader.d.ts +2 -0
- package/dist/admin/src/preview/components/PreviewSidePanel.d.ts +3 -0
- package/dist/admin/src/preview/constants.d.ts +1 -0
- package/dist/admin/src/preview/index.d.ts +4 -0
- package/dist/admin/src/preview/pages/Preview.d.ts +11 -0
- package/dist/admin/src/preview/routes.d.ts +3 -0
- package/dist/admin/src/preview/services/preview.d.ts +3 -0
- package/dist/admin/src/router.d.ts +1 -1
- package/dist/admin/src/services/documents.d.ts +3 -4
- package/dist/server/index.js +457 -201
- package/dist/server/index.js.map +1 -1
- package/dist/server/index.mjs +457 -200
- package/dist/server/index.mjs.map +1 -1
- package/dist/server/src/bootstrap.d.ts.map +1 -1
- package/dist/server/src/controllers/collection-types.d.ts.map +1 -1
- package/dist/server/src/controllers/index.d.ts.map +1 -1
- package/dist/server/src/controllers/relations.d.ts.map +1 -1
- package/dist/server/src/controllers/utils/metadata.d.ts +15 -1
- package/dist/server/src/controllers/utils/metadata.d.ts.map +1 -1
- package/dist/server/src/history/services/history.d.ts.map +1 -1
- package/dist/server/src/history/services/lifecycles.d.ts.map +1 -1
- package/dist/server/src/history/services/utils.d.ts +3 -3
- package/dist/server/src/history/services/utils.d.ts.map +1 -1
- package/dist/server/src/index.d.ts +4 -4
- package/dist/server/src/preview/constants.d.ts +2 -0
- package/dist/server/src/preview/constants.d.ts.map +1 -0
- package/dist/server/src/preview/controllers/index.d.ts +2 -0
- package/dist/server/src/preview/controllers/index.d.ts.map +1 -0
- package/dist/server/src/preview/controllers/preview.d.ts +13 -0
- package/dist/server/src/preview/controllers/preview.d.ts.map +1 -0
- package/dist/server/src/preview/controllers/validation/preview.d.ts +6 -0
- package/dist/server/src/preview/controllers/validation/preview.d.ts.map +1 -0
- package/dist/server/src/preview/index.d.ts +4 -0
- package/dist/server/src/preview/index.d.ts.map +1 -0
- package/dist/server/src/preview/routes/index.d.ts +8 -0
- package/dist/server/src/preview/routes/index.d.ts.map +1 -0
- package/dist/server/src/preview/routes/preview.d.ts +4 -0
- package/dist/server/src/preview/routes/preview.d.ts.map +1 -0
- package/dist/server/src/preview/services/index.d.ts +16 -0
- package/dist/server/src/preview/services/index.d.ts.map +1 -0
- package/dist/server/src/preview/services/preview-config.d.ts +32 -0
- package/dist/server/src/preview/services/preview-config.d.ts.map +1 -0
- package/dist/server/src/preview/services/preview.d.ts +12 -0
- package/dist/server/src/preview/services/preview.d.ts.map +1 -0
- package/dist/server/src/preview/utils.d.ts +19 -0
- package/dist/server/src/preview/utils.d.ts.map +1 -0
- package/dist/server/src/register.d.ts.map +1 -1
- package/dist/server/src/routes/index.d.ts.map +1 -1
- package/dist/server/src/services/document-manager.d.ts.map +1 -1
- package/dist/server/src/services/document-metadata.d.ts +8 -8
- package/dist/server/src/services/document-metadata.d.ts.map +1 -1
- package/dist/server/src/services/index.d.ts +4 -4
- package/dist/server/src/services/index.d.ts.map +1 -1
- package/dist/server/src/services/utils/configuration/index.d.ts +2 -2
- package/dist/server/src/services/utils/configuration/layouts.d.ts +2 -2
- package/dist/server/src/utils/index.d.ts +2 -0
- package/dist/server/src/utils/index.d.ts.map +1 -1
- package/dist/shared/contracts/collection-types.d.ts +3 -1
- package/dist/shared/contracts/collection-types.d.ts.map +1 -1
- package/dist/shared/contracts/index.d.ts +1 -0
- package/dist/shared/contracts/index.d.ts.map +1 -1
- package/dist/shared/contracts/preview.d.ts +27 -0
- package/dist/shared/contracts/preview.d.ts.map +1 -0
- package/dist/shared/index.js +4 -0
- package/dist/shared/index.js.map +1 -1
- package/dist/shared/index.mjs +4 -0
- package/dist/shared/index.mjs.map +1 -1
- package/package.json +15 -15
- package/dist/_chunks/EditViewPage-B-RJeiJD.js.map +0 -1
- package/dist/_chunks/EditViewPage-De8GyU8P.mjs.map +0 -1
- package/dist/_chunks/Field-dq8Tg1M_.js.map +0 -1
- package/dist/_chunks/Field-pb2o8uBe.mjs.map +0 -1
- package/dist/_chunks/Form-DGIf4jQU.js.map +0 -1
- package/dist/_chunks/Form-DJn0Dxha.mjs.map +0 -1
- package/dist/_chunks/History-BowL3JKP.mjs.map +0 -1
- package/dist/_chunks/History-Dh2NEHnR.js.map +0 -1
- package/dist/_chunks/ListConfigurationPage-BpVOB-hn.mjs.map +0 -1
- package/dist/_chunks/ListConfigurationPage-BxYCWz9e.js.map +0 -1
- package/dist/_chunks/ListViewPage-4XsciqHZ.js.map +0 -1
- package/dist/_chunks/ListViewPage-CXFUjZQC.mjs.map +0 -1
- package/dist/_chunks/Relations-CVNLrn1Y.mjs.map +0 -1
- package/dist/_chunks/Relations-DPFCAa7b.js.map +0 -1
- package/dist/_chunks/index-C3fJE-1-.js.map +0 -1
- package/dist/_chunks/index-DiMrfcfy.mjs.map +0 -1
- package/dist/_chunks/relations-CLcOmGO0.mjs.map +0 -1
- package/dist/_chunks/relations-DYeotliT.js.map +0 -1
- package/dist/_chunks/usePrev-B9w_-eYc.js.map +0 -1
- package/dist/_chunks/usePrev-DH6iah0A.mjs +0 -16
- package/dist/_chunks/usePrev-DH6iah0A.mjs.map +0 -1
- package/strapi-server.js +0 -3
package/dist/server/index.js
CHANGED
@@ -10,8 +10,7 @@ const qs = require("qs");
|
|
10
10
|
const slugify = require("@sindresorhus/slugify");
|
11
11
|
const _interopDefault = (e) => e && e.__esModule ? e : { default: e };
|
12
12
|
function _interopNamespace(e) {
|
13
|
-
if (e && e.__esModule)
|
14
|
-
return e;
|
13
|
+
if (e && e.__esModule) return e;
|
15
14
|
const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
|
16
15
|
if (e) {
|
17
16
|
for (const k in e) {
|
@@ -33,10 +32,10 @@ const isNil__default = /* @__PURE__ */ _interopDefault(isNil);
|
|
33
32
|
const ___default = /* @__PURE__ */ _interopDefault(_);
|
34
33
|
const qs__default = /* @__PURE__ */ _interopDefault(qs);
|
35
34
|
const slugify__default = /* @__PURE__ */ _interopDefault(slugify);
|
36
|
-
const getService$
|
35
|
+
const getService$2 = (name) => {
|
37
36
|
return strapi.plugin("content-manager").service(name);
|
38
37
|
};
|
39
|
-
function getService(strapi2, name) {
|
38
|
+
function getService$1(strapi2, name) {
|
40
39
|
return strapi2.service(`plugin::content-manager.${name}`);
|
41
40
|
}
|
42
41
|
const historyRestoreVersionSchema = yup__namespace.object().shape({
|
@@ -72,7 +71,7 @@ const createHistoryVersionController = ({ strapi: strapi2 }) => {
|
|
72
71
|
if (!isSingleType && (!contentTypeUid || !ctx.query.documentId)) {
|
73
72
|
throw new strapiUtils.errors.ForbiddenError("contentType and documentId are required");
|
74
73
|
}
|
75
|
-
const permissionChecker2 = getService$
|
74
|
+
const permissionChecker2 = getService$2("permission-checker").create({
|
76
75
|
userAbility: ctx.state.userAbility,
|
77
76
|
model: ctx.query.contentType
|
78
77
|
});
|
@@ -80,7 +79,7 @@ const createHistoryVersionController = ({ strapi: strapi2 }) => {
|
|
80
79
|
return ctx.forbidden();
|
81
80
|
}
|
82
81
|
const query = await permissionChecker2.sanitizeQuery(ctx.query);
|
83
|
-
const { results, pagination } = await getService(strapi2, "history").findVersionsPage({
|
82
|
+
const { results, pagination } = await getService$1(strapi2, "history").findVersionsPage({
|
84
83
|
query: {
|
85
84
|
...query,
|
86
85
|
...getValidPagination({ page: query.page, pageSize: query.pageSize })
|
@@ -105,14 +104,14 @@ const createHistoryVersionController = ({ strapi: strapi2 }) => {
|
|
105
104
|
async restoreVersion(ctx) {
|
106
105
|
const request = ctx.request;
|
107
106
|
await validateRestoreVersion(request.body, "contentType is required");
|
108
|
-
const permissionChecker2 = getService$
|
107
|
+
const permissionChecker2 = getService$2("permission-checker").create({
|
109
108
|
userAbility: ctx.state.userAbility,
|
110
109
|
model: request.body.contentType
|
111
110
|
});
|
112
111
|
if (permissionChecker2.cannot.update()) {
|
113
112
|
throw new strapiUtils.errors.ForbiddenError();
|
114
113
|
}
|
115
|
-
const restoredDocument = await getService(strapi2, "history").restoreVersion(
|
114
|
+
const restoredDocument = await getService$1(strapi2, "history").restoreVersion(
|
116
115
|
request.params.versionId
|
117
116
|
);
|
118
117
|
return {
|
@@ -121,7 +120,7 @@ const createHistoryVersionController = ({ strapi: strapi2 }) => {
|
|
121
120
|
}
|
122
121
|
};
|
123
122
|
};
|
124
|
-
const controllers$
|
123
|
+
const controllers$2 = {
|
125
124
|
"history-version": createHistoryVersionController
|
126
125
|
/**
|
127
126
|
* Casting is needed because the types aren't aware that Strapi supports
|
@@ -167,8 +166,7 @@ const createServiceUtils = ({ strapi: strapi2 }) => {
|
|
167
166
|
};
|
168
167
|
const getRelationRestoreValue = async (versionRelationData, attribute) => {
|
169
168
|
if (Array.isArray(versionRelationData)) {
|
170
|
-
if (versionRelationData.length === 0)
|
171
|
-
return versionRelationData;
|
169
|
+
if (versionRelationData.length === 0) return versionRelationData;
|
172
170
|
const existingAndMissingRelations = await Promise.all(
|
173
171
|
versionRelationData.map((relation) => {
|
174
172
|
return strapi2.documents(attribute.target).findOne({
|
@@ -199,10 +197,11 @@ const createServiceUtils = ({ strapi: strapi2 }) => {
|
|
199
197
|
return strapi2.db.query("plugin::upload.file").findOne({ where: { id: versionRelationData.id } });
|
200
198
|
};
|
201
199
|
const localesService = strapi2.plugin("i18n")?.service("locales");
|
200
|
+
const i18nContentTypeService = strapi2.plugin("i18n")?.service("content-types");
|
202
201
|
const getDefaultLocale = async () => localesService ? localesService.getDefaultLocale() : null;
|
202
|
+
const isLocalizedContentType = (model) => i18nContentTypeService ? i18nContentTypeService.isLocalizedContentType(model) : false;
|
203
203
|
const getLocaleDictionary = async () => {
|
204
|
-
if (!localesService)
|
205
|
-
return {};
|
204
|
+
if (!localesService) return {};
|
206
205
|
const locales = await localesService.find() || [];
|
207
206
|
return locales.reduce(
|
208
207
|
(acc, locale) => {
|
@@ -226,6 +225,17 @@ const createServiceUtils = ({ strapi: strapi2 }) => {
|
|
226
225
|
const meta = await documentMetadataService.getMetadata(contentTypeUid, document);
|
227
226
|
return documentMetadataService.getStatus(document, meta.availableStatus);
|
228
227
|
};
|
228
|
+
const getComponentFields = (componentUID) => {
|
229
|
+
return Object.entries(strapi2.getModel(componentUID).attributes).reduce(
|
230
|
+
(fieldsAcc, [key, attribute]) => {
|
231
|
+
if (!["relation", "media", "component", "dynamiczone"].includes(attribute.type)) {
|
232
|
+
fieldsAcc.push(key);
|
233
|
+
}
|
234
|
+
return fieldsAcc;
|
235
|
+
},
|
236
|
+
[]
|
237
|
+
);
|
238
|
+
};
|
229
239
|
const getDeepPopulate2 = (uid2, useDatabaseSyntax = false) => {
|
230
240
|
const model = strapi2.getModel(uid2);
|
231
241
|
const attributes = Object.entries(model.attributes);
|
@@ -249,13 +259,19 @@ const createServiceUtils = ({ strapi: strapi2 }) => {
|
|
249
259
|
}
|
250
260
|
case "component": {
|
251
261
|
const populate = getDeepPopulate2(attribute.component);
|
252
|
-
acc[attributeName] = {
|
262
|
+
acc[attributeName] = {
|
263
|
+
populate,
|
264
|
+
[fieldSelector]: getComponentFields(attribute.component)
|
265
|
+
};
|
253
266
|
break;
|
254
267
|
}
|
255
268
|
case "dynamiczone": {
|
256
269
|
const populatedComponents = (attribute.components || []).reduce(
|
257
270
|
(acc2, componentUID) => {
|
258
|
-
acc2[componentUID] = {
|
271
|
+
acc2[componentUID] = {
|
272
|
+
populate: getDeepPopulate2(componentUID),
|
273
|
+
[fieldSelector]: getComponentFields(componentUID)
|
274
|
+
};
|
259
275
|
return acc2;
|
260
276
|
},
|
261
277
|
{}
|
@@ -317,6 +333,7 @@ const createServiceUtils = ({ strapi: strapi2 }) => {
|
|
317
333
|
getRelationRestoreValue,
|
318
334
|
getMediaRestoreValue,
|
319
335
|
getDefaultLocale,
|
336
|
+
isLocalizedContentType,
|
320
337
|
getLocaleDictionary,
|
321
338
|
getRetentionDays,
|
322
339
|
getVersionStatus,
|
@@ -339,7 +356,13 @@ const createHistoryService = ({ strapi: strapi2 }) => {
|
|
339
356
|
});
|
340
357
|
},
|
341
358
|
async findVersionsPage(params) {
|
342
|
-
const
|
359
|
+
const model = strapi2.getModel(params.query.contentType);
|
360
|
+
const isLocalizedContentType = serviceUtils.isLocalizedContentType(model);
|
361
|
+
const defaultLocale = await serviceUtils.getDefaultLocale();
|
362
|
+
let locale = null;
|
363
|
+
if (isLocalizedContentType) {
|
364
|
+
locale = params.query.locale || defaultLocale;
|
365
|
+
}
|
343
366
|
const [{ results, pagination }, localeDictionary] = await Promise.all([
|
344
367
|
query.findPage({
|
345
368
|
...params.query,
|
@@ -361,7 +384,7 @@ const createHistoryService = ({ strapi: strapi2 }) => {
|
|
361
384
|
const attributeValue = entry.data[attributeKey];
|
362
385
|
const attributeValues = Array.isArray(attributeValue) ? attributeValue : [attributeValue];
|
363
386
|
if (attributeSchema.type === "media") {
|
364
|
-
const permissionChecker2 = getService$
|
387
|
+
const permissionChecker2 = getService$2("permission-checker").create({
|
365
388
|
userAbility: params.state.userAbility,
|
366
389
|
model: "plugin::upload.file"
|
367
390
|
});
|
@@ -384,7 +407,12 @@ const createHistoryService = ({ strapi: strapi2 }) => {
|
|
384
407
|
if (userToPopulate == null) {
|
385
408
|
return null;
|
386
409
|
}
|
387
|
-
return strapi2.query("admin::user").findOne({
|
410
|
+
return strapi2.query("admin::user").findOne({
|
411
|
+
where: {
|
412
|
+
...userToPopulate.id ? { id: userToPopulate.id } : {},
|
413
|
+
...userToPopulate.documentId ? { documentId: userToPopulate.documentId } : {}
|
414
|
+
}
|
415
|
+
});
|
388
416
|
})
|
389
417
|
);
|
390
418
|
return {
|
@@ -397,7 +425,7 @@ const createHistoryService = ({ strapi: strapi2 }) => {
|
|
397
425
|
[attributeKey]: adminUsers
|
398
426
|
};
|
399
427
|
}
|
400
|
-
const permissionChecker2 = getService$
|
428
|
+
const permissionChecker2 = getService$2("permission-checker").create({
|
401
429
|
userAbility: params.state.userAbility,
|
402
430
|
model: attributeSchema.target
|
403
431
|
});
|
@@ -555,11 +583,13 @@ const createLifecyclesService = ({ strapi: strapi2 }) => {
|
|
555
583
|
}
|
556
584
|
const uid2 = context.contentType.uid;
|
557
585
|
const schemas = getSchemas(uid2);
|
586
|
+
const model = strapi2.getModel(uid2);
|
587
|
+
const isLocalizedContentType = serviceUtils.isLocalizedContentType(model);
|
558
588
|
const localeEntries = await strapi2.db.query(uid2).findMany({
|
559
589
|
where: {
|
560
590
|
documentId,
|
561
|
-
locale: { $in: locales },
|
562
|
-
publishedAt: null
|
591
|
+
...isLocalizedContentType ? { locale: { $in: locales } } : {},
|
592
|
+
...strapiUtils.contentTypes.hasDraftAndPublish(strapi2.contentTypes[uid2]) ? { publishedAt: null } : {}
|
563
593
|
},
|
564
594
|
populate: serviceUtils.getDeepPopulate(
|
565
595
|
uid2,
|
@@ -571,7 +601,7 @@ const createLifecyclesService = ({ strapi: strapi2 }) => {
|
|
571
601
|
onCommit(async () => {
|
572
602
|
for (const entry of localeEntries) {
|
573
603
|
const status = await serviceUtils.getVersionStatus(uid2, entry);
|
574
|
-
await getService(strapi2, "history").createVersion({
|
604
|
+
await getService$1(strapi2, "history").createVersion({
|
575
605
|
contentType: uid2,
|
576
606
|
data: fp.omit(FIELDS_TO_IGNORE, entry),
|
577
607
|
relatedDocumentId: documentId,
|
@@ -584,15 +614,19 @@ const createLifecyclesService = ({ strapi: strapi2 }) => {
|
|
584
614
|
});
|
585
615
|
return result;
|
586
616
|
});
|
587
|
-
state.deleteExpiredJob = nodeSchedule.scheduleJob("0 0 * * *", () => {
|
617
|
+
state.deleteExpiredJob = nodeSchedule.scheduleJob("historyDaily", "0 0 * * *", () => {
|
588
618
|
const retentionDaysInMilliseconds = serviceUtils.getRetentionDays() * 24 * 60 * 60 * 1e3;
|
589
619
|
const expirationDate = new Date(Date.now() - retentionDaysInMilliseconds);
|
590
620
|
strapi2.db.query(HISTORY_VERSION_UID).deleteMany({
|
591
621
|
where: {
|
592
622
|
created_at: {
|
593
|
-
$lt: expirationDate
|
623
|
+
$lt: expirationDate
|
594
624
|
}
|
595
625
|
}
|
626
|
+
}).catch((error) => {
|
627
|
+
if (error instanceof Error) {
|
628
|
+
strapi2.log.error("Error deleting expired history versions", error.message);
|
629
|
+
}
|
596
630
|
});
|
597
631
|
});
|
598
632
|
state.isInitialized = true;
|
@@ -604,17 +638,17 @@ const createLifecyclesService = ({ strapi: strapi2 }) => {
|
|
604
638
|
}
|
605
639
|
};
|
606
640
|
};
|
607
|
-
const services$
|
641
|
+
const services$2 = {
|
608
642
|
history: createHistoryService,
|
609
643
|
lifecycles: createLifecyclesService
|
610
644
|
};
|
611
|
-
const info = { pluginName: "content-manager", type: "admin" };
|
645
|
+
const info$1 = { pluginName: "content-manager", type: "admin" };
|
612
646
|
const historyVersionRouter = {
|
613
647
|
type: "admin",
|
614
648
|
routes: [
|
615
649
|
{
|
616
650
|
method: "GET",
|
617
|
-
info,
|
651
|
+
info: info$1,
|
618
652
|
path: "/history-versions",
|
619
653
|
handler: "history-version.findMany",
|
620
654
|
config: {
|
@@ -623,7 +657,7 @@ const historyVersionRouter = {
|
|
623
657
|
},
|
624
658
|
{
|
625
659
|
method: "PUT",
|
626
|
-
info,
|
660
|
+
info: info$1,
|
627
661
|
path: "/history-versions/:versionId/restore",
|
628
662
|
handler: "history-version.restoreVersion",
|
629
663
|
config: {
|
@@ -632,7 +666,7 @@ const historyVersionRouter = {
|
|
632
666
|
}
|
633
667
|
]
|
634
668
|
};
|
635
|
-
const routes$
|
669
|
+
const routes$2 = {
|
636
670
|
"history-version": historyVersionRouter
|
637
671
|
};
|
638
672
|
const historyVersion = {
|
@@ -679,21 +713,21 @@ const historyVersion = {
|
|
679
713
|
}
|
680
714
|
}
|
681
715
|
};
|
682
|
-
const getFeature = () => {
|
716
|
+
const getFeature$1 = () => {
|
683
717
|
if (strapi.ee.features.isEnabled("cms-content-history")) {
|
684
718
|
return {
|
685
719
|
register({ strapi: strapi2 }) {
|
686
720
|
strapi2.get("models").add(historyVersion);
|
687
721
|
},
|
688
722
|
bootstrap({ strapi: strapi2 }) {
|
689
|
-
getService(strapi2, "lifecycles").bootstrap();
|
723
|
+
getService$1(strapi2, "lifecycles").bootstrap();
|
690
724
|
},
|
691
725
|
destroy({ strapi: strapi2 }) {
|
692
|
-
getService(strapi2, "lifecycles").destroy();
|
726
|
+
getService$1(strapi2, "lifecycles").destroy();
|
693
727
|
},
|
694
|
-
controllers: controllers$
|
695
|
-
services: services$
|
696
|
-
routes: routes$
|
728
|
+
controllers: controllers$2,
|
729
|
+
services: services$2,
|
730
|
+
routes: routes$2
|
697
731
|
};
|
698
732
|
}
|
699
733
|
return {
|
@@ -702,9 +736,205 @@ const getFeature = () => {
|
|
702
736
|
}
|
703
737
|
};
|
704
738
|
};
|
705
|
-
const history = getFeature();
|
739
|
+
const history = getFeature$1();
|
740
|
+
const FEATURE_ID = "preview";
|
741
|
+
const info = { pluginName: "content-manager", type: "admin" };
|
742
|
+
const previewRouter = {
|
743
|
+
type: "admin",
|
744
|
+
routes: [
|
745
|
+
{
|
746
|
+
method: "GET",
|
747
|
+
info,
|
748
|
+
path: "/preview/url/:contentType",
|
749
|
+
handler: "preview.getPreviewUrl",
|
750
|
+
config: {
|
751
|
+
policies: ["admin::isAuthenticatedAdmin"]
|
752
|
+
}
|
753
|
+
}
|
754
|
+
]
|
755
|
+
};
|
756
|
+
const routes$1 = {
|
757
|
+
preview: previewRouter
|
758
|
+
};
|
759
|
+
function getService(strapi2, name) {
|
760
|
+
return strapi2.service(`plugin::content-manager.${name}`);
|
761
|
+
}
|
762
|
+
const getPreviewUrlSchema = yup__namespace.object().shape({
|
763
|
+
// Will be undefined for single types
|
764
|
+
documentId: yup__namespace.string(),
|
765
|
+
locale: yup__namespace.string().nullable(),
|
766
|
+
status: yup__namespace.string()
|
767
|
+
}).required();
|
768
|
+
const validatePreviewUrl = async (strapi2, uid2, params) => {
|
769
|
+
await strapiUtils.validateYupSchema(getPreviewUrlSchema)(params);
|
770
|
+
const newParams = fp.pick(["documentId", "locale", "status"], params);
|
771
|
+
const model = strapi2.getModel(uid2);
|
772
|
+
if (!model || model.modelType !== "contentType") {
|
773
|
+
throw new strapiUtils.errors.ValidationError("Invalid content type");
|
774
|
+
}
|
775
|
+
const isSingleType = model?.kind === "singleType";
|
776
|
+
if (!isSingleType && !params.documentId) {
|
777
|
+
throw new strapiUtils.errors.ValidationError("documentId is required for Collection Types");
|
778
|
+
}
|
779
|
+
if (isSingleType) {
|
780
|
+
const doc = await strapi2.documents(uid2).findFirst();
|
781
|
+
if (!doc) {
|
782
|
+
throw new strapiUtils.errors.NotFoundError("Document not found");
|
783
|
+
}
|
784
|
+
newParams.documentId = doc?.documentId;
|
785
|
+
}
|
786
|
+
if (!newParams.status) {
|
787
|
+
const isDPEnabled = model?.options?.draftAndPublish;
|
788
|
+
newParams.status = isDPEnabled ? "draft" : "published";
|
789
|
+
}
|
790
|
+
return newParams;
|
791
|
+
};
|
792
|
+
const createPreviewController = () => {
|
793
|
+
return {
|
794
|
+
/**
|
795
|
+
* Transforms an entry into a preview URL, so that it can be previewed
|
796
|
+
* in the Content Manager.
|
797
|
+
*/
|
798
|
+
async getPreviewUrl(ctx) {
|
799
|
+
const uid2 = ctx.params.contentType;
|
800
|
+
const query = ctx.request.query;
|
801
|
+
const params = await validatePreviewUrl(strapi, uid2, query);
|
802
|
+
const previewService = getService(strapi, "preview");
|
803
|
+
const url = await previewService.getPreviewUrl(uid2, params);
|
804
|
+
if (!url) {
|
805
|
+
ctx.status = 204;
|
806
|
+
}
|
807
|
+
return {
|
808
|
+
data: { url }
|
809
|
+
};
|
810
|
+
}
|
811
|
+
};
|
812
|
+
};
|
813
|
+
const controllers$1 = {
|
814
|
+
preview: createPreviewController
|
815
|
+
/**
|
816
|
+
* Casting is needed because the types aren't aware that Strapi supports
|
817
|
+
* passing a controller factory as the value, instead of a controller object directly
|
818
|
+
*/
|
819
|
+
};
|
820
|
+
const createPreviewService = ({ strapi: strapi2 }) => {
|
821
|
+
const config = getService(strapi2, "preview-config");
|
822
|
+
return {
|
823
|
+
async getPreviewUrl(uid2, params) {
|
824
|
+
const handler = config.getPreviewHandler();
|
825
|
+
try {
|
826
|
+
return handler(uid2, params);
|
827
|
+
} catch (error) {
|
828
|
+
strapi2.log.error(`Failed to get preview URL: ${error}`);
|
829
|
+
throw new strapiUtils.errors.ApplicationError("Failed to get preview URL");
|
830
|
+
}
|
831
|
+
return;
|
832
|
+
}
|
833
|
+
};
|
834
|
+
};
|
835
|
+
const extendMiddlewareConfiguration = (middleware = { name: "", config: {} }) => {
|
836
|
+
const middlewares = strapi.config.get("middlewares");
|
837
|
+
const configuredMiddlewares = middlewares.map((currentMiddleware) => {
|
838
|
+
if (currentMiddleware === middleware.name) {
|
839
|
+
return middleware;
|
840
|
+
}
|
841
|
+
if (currentMiddleware.name === middleware.name) {
|
842
|
+
return fp.mergeWith(
|
843
|
+
(objValue, srcValue) => {
|
844
|
+
if (Array.isArray(objValue)) {
|
845
|
+
return objValue.concat(srcValue);
|
846
|
+
}
|
847
|
+
return void 0;
|
848
|
+
},
|
849
|
+
currentMiddleware,
|
850
|
+
middleware
|
851
|
+
);
|
852
|
+
}
|
853
|
+
return currentMiddleware;
|
854
|
+
});
|
855
|
+
strapi.config.set("middlewares", configuredMiddlewares);
|
856
|
+
};
|
857
|
+
const createPreviewConfigService = ({ strapi: strapi2 }) => {
|
858
|
+
return {
|
859
|
+
register() {
|
860
|
+
if (!this.isEnabled()) {
|
861
|
+
return;
|
862
|
+
}
|
863
|
+
const config = strapi2.config.get("admin.preview");
|
864
|
+
if (config.config?.allowedOrigins) {
|
865
|
+
extendMiddlewareConfiguration({
|
866
|
+
name: "strapi::security",
|
867
|
+
config: {
|
868
|
+
contentSecurityPolicy: {
|
869
|
+
directives: {
|
870
|
+
"frame-src": config.config.allowedOrigins
|
871
|
+
}
|
872
|
+
}
|
873
|
+
}
|
874
|
+
});
|
875
|
+
}
|
876
|
+
},
|
877
|
+
isEnabled() {
|
878
|
+
const config = strapi2.config.get("admin.preview");
|
879
|
+
if (!config) {
|
880
|
+
return false;
|
881
|
+
}
|
882
|
+
return config?.enabled ?? true;
|
883
|
+
},
|
884
|
+
/**
|
885
|
+
* Validate if the configuration is valid
|
886
|
+
*/
|
887
|
+
validate() {
|
888
|
+
if (!this.isEnabled()) {
|
889
|
+
return;
|
890
|
+
}
|
891
|
+
const handler = this.getPreviewHandler();
|
892
|
+
if (typeof handler !== "function") {
|
893
|
+
throw new strapiUtils.errors.ValidationError(
|
894
|
+
"Preview configuration is invalid. Handler must be a function"
|
895
|
+
);
|
896
|
+
}
|
897
|
+
},
|
898
|
+
/**
|
899
|
+
* Utility to get the preview handler from the configuration
|
900
|
+
*/
|
901
|
+
getPreviewHandler() {
|
902
|
+
const config = strapi2.config.get("admin.preview");
|
903
|
+
const emptyHandler = () => {
|
904
|
+
return void 0;
|
905
|
+
};
|
906
|
+
if (!this.isEnabled()) {
|
907
|
+
return emptyHandler;
|
908
|
+
}
|
909
|
+
return config?.config?.handler || emptyHandler;
|
910
|
+
}
|
911
|
+
};
|
912
|
+
};
|
913
|
+
const services$1 = {
|
914
|
+
preview: createPreviewService,
|
915
|
+
"preview-config": createPreviewConfigService
|
916
|
+
};
|
917
|
+
const getFeature = () => {
|
918
|
+
if (!strapi.features.future.isEnabled(FEATURE_ID)) {
|
919
|
+
return {};
|
920
|
+
}
|
921
|
+
return {
|
922
|
+
register() {
|
923
|
+
const config = getService(strapi, "preview-config");
|
924
|
+
config.validate();
|
925
|
+
config.register();
|
926
|
+
},
|
927
|
+
bootstrap() {
|
928
|
+
},
|
929
|
+
routes: routes$1,
|
930
|
+
controllers: controllers$1,
|
931
|
+
services: services$1
|
932
|
+
};
|
933
|
+
};
|
934
|
+
const preview = getFeature();
|
706
935
|
const register = async ({ strapi: strapi2 }) => {
|
707
936
|
await history.register?.({ strapi: strapi2 });
|
937
|
+
await preview.register?.({ strapi: strapi2 });
|
708
938
|
};
|
709
939
|
const ALLOWED_WEBHOOK_EVENTS = {
|
710
940
|
ENTRY_PUBLISH: "entry.publish",
|
@@ -714,11 +944,12 @@ const bootstrap = async () => {
|
|
714
944
|
Object.entries(ALLOWED_WEBHOOK_EVENTS).forEach(([key, value]) => {
|
715
945
|
strapi.get("webhookStore").addAllowedEvent(key, value);
|
716
946
|
});
|
717
|
-
getService$
|
718
|
-
await getService$
|
719
|
-
await getService$
|
720
|
-
await getService$
|
947
|
+
getService$2("field-sizes").setCustomFieldInputSizes();
|
948
|
+
await getService$2("components").syncConfigurations();
|
949
|
+
await getService$2("content-types").syncConfigurations();
|
950
|
+
await getService$2("permission").registerPermissions();
|
721
951
|
await history.bootstrap?.({ strapi });
|
952
|
+
await preview.bootstrap?.({ strapi });
|
722
953
|
};
|
723
954
|
const destroy = async ({ strapi: strapi2 }) => {
|
724
955
|
await history.destroy?.({ strapi: strapi2 });
|
@@ -1208,7 +1439,8 @@ const admin = {
|
|
1208
1439
|
};
|
1209
1440
|
const routes = {
|
1210
1441
|
admin,
|
1211
|
-
...history.routes ? history.routes : {}
|
1442
|
+
...history.routes ? history.routes : {},
|
1443
|
+
...preview.routes ? preview.routes : {}
|
1212
1444
|
};
|
1213
1445
|
const hasPermissionsSchema = strapiUtils.yup.object({
|
1214
1446
|
actions: strapiUtils.yup.array().of(strapiUtils.yup.string()),
|
@@ -1271,8 +1503,7 @@ const isSortable = (schema, name) => {
|
|
1271
1503
|
if (!___default.default.has(schema.attributes, name)) {
|
1272
1504
|
return false;
|
1273
1505
|
}
|
1274
|
-
if (schema.modelType === "component" && name === "id")
|
1275
|
-
return false;
|
1506
|
+
if (schema.modelType === "component" && name === "id") return false;
|
1276
1507
|
const attribute = schema.attributes[name];
|
1277
1508
|
if (NON_SORTABLES.includes(attribute.type)) {
|
1278
1509
|
return false;
|
@@ -1417,8 +1648,7 @@ const createDefaultSettings = async (schema) => {
|
|
1417
1648
|
};
|
1418
1649
|
};
|
1419
1650
|
const syncSettings = async (configuration, schema) => {
|
1420
|
-
if (fp.isEmpty(configuration.settings))
|
1421
|
-
return createDefaultSettings(schema);
|
1651
|
+
if (fp.isEmpty(configuration.settings)) return createDefaultSettings(schema);
|
1422
1652
|
const defaultField = getDefaultMainField(schema);
|
1423
1653
|
const { mainField = defaultField, defaultSortBy = defaultField } = configuration.settings || {};
|
1424
1654
|
return {
|
@@ -1465,7 +1695,7 @@ const createMetadasSchema = (schema) => {
|
|
1465
1695
|
if (!value) {
|
1466
1696
|
return strapiUtils.yup.string();
|
1467
1697
|
}
|
1468
|
-
const targetSchema = getService$
|
1698
|
+
const targetSchema = getService$2("content-types").findContentType(
|
1469
1699
|
schema.attributes[key].targetModel
|
1470
1700
|
);
|
1471
1701
|
if (!targetSchema) {
|
@@ -1594,8 +1824,7 @@ const excludeNotCreatableFields = (uid2, permissionChecker2) => (body, path = []
|
|
1594
1824
|
}
|
1595
1825
|
switch (attribute.type) {
|
1596
1826
|
case "relation": {
|
1597
|
-
if (canCreate(attributePath))
|
1598
|
-
return body2;
|
1827
|
+
if (canCreate(attributePath)) return body2;
|
1599
1828
|
return fp.set(attributePath, { set: [] }, body2);
|
1600
1829
|
}
|
1601
1830
|
case "component": {
|
@@ -1605,8 +1834,7 @@ const excludeNotCreatableFields = (uid2, permissionChecker2) => (body, path = []
|
|
1605
1834
|
]);
|
1606
1835
|
}
|
1607
1836
|
default: {
|
1608
|
-
if (canCreate(attributePath))
|
1609
|
-
return body2;
|
1837
|
+
if (canCreate(attributePath)) return body2;
|
1610
1838
|
return fp.set(attributePath, null, body2);
|
1611
1839
|
}
|
1612
1840
|
}
|
@@ -1634,7 +1862,7 @@ const getDocumentLocaleAndStatus = async (request, model, opts = { allowMultiple
|
|
1634
1862
|
}
|
1635
1863
|
};
|
1636
1864
|
const formatDocumentWithMetadata = async (permissionChecker2, uid2, document, opts = {}) => {
|
1637
|
-
const documentMetadata2 = getService$
|
1865
|
+
const documentMetadata2 = getService$2("document-metadata");
|
1638
1866
|
const serviceOutput = await documentMetadata2.formatDocumentWithMetadata(uid2, document, opts);
|
1639
1867
|
let {
|
1640
1868
|
meta: { availableLocales, availableStatus }
|
@@ -1660,8 +1888,8 @@ const createDocument = async (ctx, opts) => {
|
|
1660
1888
|
const { userAbility, user } = ctx.state;
|
1661
1889
|
const { model } = ctx.params;
|
1662
1890
|
const { body } = ctx.request;
|
1663
|
-
const documentManager2 = getService$
|
1664
|
-
const permissionChecker2 = getService$
|
1891
|
+
const documentManager2 = getService$2("document-manager");
|
1892
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
1665
1893
|
if (permissionChecker2.cannot.create()) {
|
1666
1894
|
throw new strapiUtils.errors.ForbiddenError();
|
1667
1895
|
}
|
@@ -1681,13 +1909,13 @@ const updateDocument = async (ctx, opts) => {
|
|
1681
1909
|
const { userAbility, user } = ctx.state;
|
1682
1910
|
const { id, model } = ctx.params;
|
1683
1911
|
const { body } = ctx.request;
|
1684
|
-
const documentManager2 = getService$
|
1685
|
-
const permissionChecker2 = getService$
|
1912
|
+
const documentManager2 = getService$2("document-manager");
|
1913
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
1686
1914
|
if (permissionChecker2.cannot.update()) {
|
1687
1915
|
throw new strapiUtils.errors.ForbiddenError();
|
1688
1916
|
}
|
1689
1917
|
const permissionQuery = await permissionChecker2.sanitizedQuery.update(ctx.query);
|
1690
|
-
const populate = await getService$
|
1918
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).build();
|
1691
1919
|
const { locale } = await getDocumentLocaleAndStatus(body, model);
|
1692
1920
|
const [documentVersion, documentExists] = await Promise.all([
|
1693
1921
|
documentManager2.findOne(id, model, { populate, locale, status: "draft" }),
|
@@ -1704,7 +1932,7 @@ const updateDocument = async (ctx, opts) => {
|
|
1704
1932
|
throw new strapiUtils.errors.ForbiddenError();
|
1705
1933
|
}
|
1706
1934
|
const pickPermittedFields = documentVersion ? permissionChecker2.sanitizeUpdateInput(documentVersion) : permissionChecker2.sanitizeCreateInput;
|
1707
|
-
const setCreator = strapiUtils.setCreatorFields({ user, isEdition: true });
|
1935
|
+
const setCreator = documentVersion ? strapiUtils.setCreatorFields({ user, isEdition: true }) : strapiUtils.setCreatorFields({ user });
|
1708
1936
|
const sanitizeFn = strapiUtils.async.pipe(pickPermittedFields, setCreator);
|
1709
1937
|
const sanitizedBody = await sanitizeFn(body);
|
1710
1938
|
return documentManager2.update(documentVersion?.documentId || id, model, {
|
@@ -1718,14 +1946,14 @@ const collectionTypes = {
|
|
1718
1946
|
const { userAbility } = ctx.state;
|
1719
1947
|
const { model } = ctx.params;
|
1720
1948
|
const { query } = ctx.request;
|
1721
|
-
const documentMetadata2 = getService$
|
1722
|
-
const documentManager2 = getService$
|
1723
|
-
const permissionChecker2 = getService$
|
1949
|
+
const documentMetadata2 = getService$2("document-metadata");
|
1950
|
+
const documentManager2 = getService$2("document-manager");
|
1951
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
1724
1952
|
if (permissionChecker2.cannot.read()) {
|
1725
1953
|
return ctx.forbidden();
|
1726
1954
|
}
|
1727
1955
|
const permissionQuery = await permissionChecker2.sanitizedQuery.read(query);
|
1728
|
-
const populate = await getService$
|
1956
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).populateDeep(1).countRelations({ toOne: false, toMany: true }).build();
|
1729
1957
|
const { locale, status } = await getDocumentLocaleAndStatus(query, model);
|
1730
1958
|
const { results: documents, pagination } = await documentManager2.findPage(
|
1731
1959
|
{ ...permissionQuery, populate, locale, status },
|
@@ -1754,13 +1982,13 @@ const collectionTypes = {
|
|
1754
1982
|
async findOne(ctx) {
|
1755
1983
|
const { userAbility } = ctx.state;
|
1756
1984
|
const { model, id } = ctx.params;
|
1757
|
-
const documentManager2 = getService$
|
1758
|
-
const permissionChecker2 = getService$
|
1985
|
+
const documentManager2 = getService$2("document-manager");
|
1986
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
1759
1987
|
if (permissionChecker2.cannot.read()) {
|
1760
1988
|
return ctx.forbidden();
|
1761
1989
|
}
|
1762
1990
|
const permissionQuery = await permissionChecker2.sanitizedQuery.read(ctx.query);
|
1763
|
-
const populate = await getService$
|
1991
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).populateDeep(Infinity).countRelations().build();
|
1764
1992
|
const { locale, status } = await getDocumentLocaleAndStatus(ctx.query, model);
|
1765
1993
|
const version = await documentManager2.findOne(id, model, {
|
1766
1994
|
populate,
|
@@ -1776,7 +2004,7 @@ const collectionTypes = {
|
|
1776
2004
|
permissionChecker2,
|
1777
2005
|
model,
|
1778
2006
|
// @ts-expect-error TODO: fix
|
1779
|
-
{ id, locale, publishedAt: null },
|
2007
|
+
{ documentId: id, locale, publishedAt: null },
|
1780
2008
|
{ availableLocales: true, availableStatus: false }
|
1781
2009
|
);
|
1782
2010
|
ctx.body = { data: {}, meta };
|
@@ -1791,7 +2019,7 @@ const collectionTypes = {
|
|
1791
2019
|
async create(ctx) {
|
1792
2020
|
const { userAbility } = ctx.state;
|
1793
2021
|
const { model } = ctx.params;
|
1794
|
-
const permissionChecker2 = getService$
|
2022
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
1795
2023
|
const [totalEntries, document] = await Promise.all([
|
1796
2024
|
strapi.db.query(model).count(),
|
1797
2025
|
createDocument(ctx)
|
@@ -1812,7 +2040,7 @@ const collectionTypes = {
|
|
1812
2040
|
async update(ctx) {
|
1813
2041
|
const { userAbility } = ctx.state;
|
1814
2042
|
const { model } = ctx.params;
|
1815
|
-
const permissionChecker2 = getService$
|
2043
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
1816
2044
|
const updatedVersion = await updateDocument(ctx);
|
1817
2045
|
const sanitizedVersion = await permissionChecker2.sanitizeOutput(updatedVersion);
|
1818
2046
|
ctx.body = await formatDocumentWithMetadata(permissionChecker2, model, sanitizedVersion);
|
@@ -1821,13 +2049,13 @@ const collectionTypes = {
|
|
1821
2049
|
const { userAbility, user } = ctx.state;
|
1822
2050
|
const { model, sourceId: id } = ctx.params;
|
1823
2051
|
const { body } = ctx.request;
|
1824
|
-
const documentManager2 = getService$
|
1825
|
-
const permissionChecker2 = getService$
|
2052
|
+
const documentManager2 = getService$2("document-manager");
|
2053
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
1826
2054
|
if (permissionChecker2.cannot.create()) {
|
1827
2055
|
return ctx.forbidden();
|
1828
2056
|
}
|
1829
2057
|
const permissionQuery = await permissionChecker2.sanitizedQuery.create(ctx.query);
|
1830
|
-
const populate = await getService$
|
2058
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).build();
|
1831
2059
|
const { locale } = await getDocumentLocaleAndStatus(body, model);
|
1832
2060
|
const document = await documentManager2.findOne(id, model, {
|
1833
2061
|
populate,
|
@@ -1866,13 +2094,13 @@ const collectionTypes = {
|
|
1866
2094
|
async delete(ctx) {
|
1867
2095
|
const { userAbility } = ctx.state;
|
1868
2096
|
const { id, model } = ctx.params;
|
1869
|
-
const documentManager2 = getService$
|
1870
|
-
const permissionChecker2 = getService$
|
2097
|
+
const documentManager2 = getService$2("document-manager");
|
2098
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
1871
2099
|
if (permissionChecker2.cannot.delete()) {
|
1872
2100
|
return ctx.forbidden();
|
1873
2101
|
}
|
1874
2102
|
const permissionQuery = await permissionChecker2.sanitizedQuery.delete(ctx.query);
|
1875
|
-
const populate = await getService$
|
2103
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).build();
|
1876
2104
|
const { locale } = await getDocumentLocaleAndStatus(ctx.query, model);
|
1877
2105
|
const documentLocales = await documentManager2.findLocales(id, model, { populate, locale });
|
1878
2106
|
if (documentLocales.length === 0) {
|
@@ -1894,14 +2122,14 @@ const collectionTypes = {
|
|
1894
2122
|
const { userAbility } = ctx.state;
|
1895
2123
|
const { id, model } = ctx.params;
|
1896
2124
|
const { body } = ctx.request;
|
1897
|
-
const documentManager2 = getService$
|
1898
|
-
const permissionChecker2 = getService$
|
2125
|
+
const documentManager2 = getService$2("document-manager");
|
2126
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
1899
2127
|
if (permissionChecker2.cannot.publish()) {
|
1900
2128
|
return ctx.forbidden();
|
1901
2129
|
}
|
1902
2130
|
const publishedDocument = await strapi.db.transaction(async () => {
|
1903
2131
|
const permissionQuery = await permissionChecker2.sanitizedQuery.publish(ctx.query);
|
1904
|
-
const populate = await getService$
|
2132
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).populateDeep(Infinity).countRelations().build();
|
1905
2133
|
let document;
|
1906
2134
|
const { locale } = await getDocumentLocaleAndStatus(body, model);
|
1907
2135
|
const isCreate = fp.isNil(id);
|
@@ -1913,11 +2141,17 @@ const collectionTypes = {
|
|
1913
2141
|
}
|
1914
2142
|
const isUpdate = !isCreate;
|
1915
2143
|
if (isUpdate) {
|
1916
|
-
|
1917
|
-
if (!
|
2144
|
+
const documentExists = documentManager2.exists(model, id);
|
2145
|
+
if (!documentExists) {
|
1918
2146
|
throw new strapiUtils.errors.NotFoundError("Document not found");
|
1919
2147
|
}
|
1920
|
-
|
2148
|
+
document = await documentManager2.findOne(id, model, { populate, locale });
|
2149
|
+
if (!document) {
|
2150
|
+
if (permissionChecker2.cannot.create({ locale }) || permissionChecker2.cannot.publish({ locale })) {
|
2151
|
+
throw new strapiUtils.errors.ForbiddenError();
|
2152
|
+
}
|
2153
|
+
document = await updateDocument(ctx);
|
2154
|
+
} else if (permissionChecker2.can.update(document)) {
|
1921
2155
|
await updateDocument(ctx);
|
1922
2156
|
}
|
1923
2157
|
}
|
@@ -1943,13 +2177,13 @@ const collectionTypes = {
|
|
1943
2177
|
const { body } = ctx.request;
|
1944
2178
|
const { documentIds } = body;
|
1945
2179
|
await validateBulkActionInput(body);
|
1946
|
-
const documentManager2 = getService$
|
1947
|
-
const permissionChecker2 = getService$
|
2180
|
+
const documentManager2 = getService$2("document-manager");
|
2181
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
1948
2182
|
if (permissionChecker2.cannot.publish()) {
|
1949
2183
|
return ctx.forbidden();
|
1950
2184
|
}
|
1951
2185
|
const permissionQuery = await permissionChecker2.sanitizedQuery.publish(ctx.query);
|
1952
|
-
const populate = await getService$
|
2186
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).populateDeep(Infinity).countRelations().build();
|
1953
2187
|
const { locale } = await getDocumentLocaleAndStatus(body, model, {
|
1954
2188
|
allowMultipleLocales: true
|
1955
2189
|
});
|
@@ -1974,12 +2208,14 @@ const collectionTypes = {
|
|
1974
2208
|
const { body } = ctx.request;
|
1975
2209
|
const { documentIds } = body;
|
1976
2210
|
await validateBulkActionInput(body);
|
1977
|
-
const documentManager2 = getService$
|
1978
|
-
const permissionChecker2 = getService$
|
2211
|
+
const documentManager2 = getService$2("document-manager");
|
2212
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
1979
2213
|
if (permissionChecker2.cannot.unpublish()) {
|
1980
2214
|
return ctx.forbidden();
|
1981
2215
|
}
|
1982
|
-
const { locale } = await getDocumentLocaleAndStatus(body, model
|
2216
|
+
const { locale } = await getDocumentLocaleAndStatus(body, model, {
|
2217
|
+
allowMultipleLocales: true
|
2218
|
+
});
|
1983
2219
|
const entityPromises = documentIds.map(
|
1984
2220
|
(documentId) => documentManager2.findLocales(documentId, model, { locale, isPublished: true })
|
1985
2221
|
);
|
@@ -2002,8 +2238,8 @@ const collectionTypes = {
|
|
2002
2238
|
const {
|
2003
2239
|
body: { discardDraft, ...body }
|
2004
2240
|
} = ctx.request;
|
2005
|
-
const documentManager2 = getService$
|
2006
|
-
const permissionChecker2 = getService$
|
2241
|
+
const documentManager2 = getService$2("document-manager");
|
2242
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2007
2243
|
if (permissionChecker2.cannot.unpublish()) {
|
2008
2244
|
return ctx.forbidden();
|
2009
2245
|
}
|
@@ -2011,7 +2247,7 @@ const collectionTypes = {
|
|
2011
2247
|
return ctx.forbidden();
|
2012
2248
|
}
|
2013
2249
|
const permissionQuery = await permissionChecker2.sanitizedQuery.unpublish(ctx.query);
|
2014
|
-
const populate = await getService$
|
2250
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).build();
|
2015
2251
|
const { locale } = await getDocumentLocaleAndStatus(body, model);
|
2016
2252
|
const document = await documentManager2.findOne(id, model, {
|
2017
2253
|
populate,
|
@@ -2042,13 +2278,13 @@ const collectionTypes = {
|
|
2042
2278
|
const { userAbility } = ctx.state;
|
2043
2279
|
const { id, model } = ctx.params;
|
2044
2280
|
const { body } = ctx.request;
|
2045
|
-
const documentManager2 = getService$
|
2046
|
-
const permissionChecker2 = getService$
|
2281
|
+
const documentManager2 = getService$2("document-manager");
|
2282
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2047
2283
|
if (permissionChecker2.cannot.discard()) {
|
2048
2284
|
return ctx.forbidden();
|
2049
2285
|
}
|
2050
2286
|
const permissionQuery = await permissionChecker2.sanitizedQuery.discard(ctx.query);
|
2051
|
-
const populate = await getService$
|
2287
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).build();
|
2052
2288
|
const { locale } = await getDocumentLocaleAndStatus(body, model);
|
2053
2289
|
const document = await documentManager2.findOne(id, model, {
|
2054
2290
|
populate,
|
@@ -2073,13 +2309,13 @@ const collectionTypes = {
|
|
2073
2309
|
const { query, body } = ctx.request;
|
2074
2310
|
const { documentIds } = body;
|
2075
2311
|
await validateBulkActionInput(body);
|
2076
|
-
const documentManager2 = getService$
|
2077
|
-
const permissionChecker2 = getService$
|
2312
|
+
const documentManager2 = getService$2("document-manager");
|
2313
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2078
2314
|
if (permissionChecker2.cannot.delete()) {
|
2079
2315
|
return ctx.forbidden();
|
2080
2316
|
}
|
2081
2317
|
const permissionQuery = await permissionChecker2.sanitizedQuery.delete(query);
|
2082
|
-
const populate = await getService$
|
2318
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).build();
|
2083
2319
|
const { locale } = await getDocumentLocaleAndStatus(body, model);
|
2084
2320
|
const documentLocales = await documentManager2.findLocales(documentIds, model, {
|
2085
2321
|
populate,
|
@@ -2100,13 +2336,13 @@ const collectionTypes = {
|
|
2100
2336
|
async countDraftRelations(ctx) {
|
2101
2337
|
const { userAbility } = ctx.state;
|
2102
2338
|
const { model, id } = ctx.params;
|
2103
|
-
const documentManager2 = getService$
|
2104
|
-
const permissionChecker2 = getService$
|
2339
|
+
const documentManager2 = getService$2("document-manager");
|
2340
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2105
2341
|
if (permissionChecker2.cannot.read()) {
|
2106
2342
|
return ctx.forbidden();
|
2107
2343
|
}
|
2108
2344
|
const permissionQuery = await permissionChecker2.sanitizedQuery.read(ctx.query);
|
2109
|
-
const populate = await getService$
|
2345
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).build();
|
2110
2346
|
const { locale, status } = await getDocumentLocaleAndStatus(ctx.query, model);
|
2111
2347
|
const entity = await documentManager2.findOne(id, model, { populate, locale, status });
|
2112
2348
|
if (!entity) {
|
@@ -2125,8 +2361,8 @@ const collectionTypes = {
|
|
2125
2361
|
const ids = ctx.request.query.documentIds;
|
2126
2362
|
const locale = ctx.request.query.locale;
|
2127
2363
|
const { model } = ctx.params;
|
2128
|
-
const documentManager2 = getService$
|
2129
|
-
const permissionChecker2 = getService$
|
2364
|
+
const documentManager2 = getService$2("document-manager");
|
2365
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2130
2366
|
if (permissionChecker2.cannot.read()) {
|
2131
2367
|
return ctx.forbidden();
|
2132
2368
|
}
|
@@ -2150,13 +2386,13 @@ const collectionTypes = {
|
|
2150
2386
|
};
|
2151
2387
|
const components$1 = {
|
2152
2388
|
findComponents(ctx) {
|
2153
|
-
const components2 = getService$
|
2154
|
-
const { toDto } = getService$
|
2389
|
+
const components2 = getService$2("components").findAllComponents();
|
2390
|
+
const { toDto } = getService$2("data-mapper");
|
2155
2391
|
ctx.body = { data: components2.map(toDto) };
|
2156
2392
|
},
|
2157
2393
|
async findComponentConfiguration(ctx) {
|
2158
2394
|
const { uid: uid2 } = ctx.params;
|
2159
|
-
const componentService = getService$
|
2395
|
+
const componentService = getService$2("components");
|
2160
2396
|
const component = componentService.findComponent(uid2);
|
2161
2397
|
if (!component) {
|
2162
2398
|
return ctx.notFound("component.notFound");
|
@@ -2173,7 +2409,7 @@ const components$1 = {
|
|
2173
2409
|
async updateComponentConfiguration(ctx) {
|
2174
2410
|
const { uid: uid2 } = ctx.params;
|
2175
2411
|
const { body } = ctx.request;
|
2176
|
-
const componentService = getService$
|
2412
|
+
const componentService = getService$2("components");
|
2177
2413
|
const component = componentService.findComponent(uid2);
|
2178
2414
|
if (!component) {
|
2179
2415
|
return ctx.notFound("component.notFound");
|
@@ -2207,12 +2443,12 @@ const contentTypes = {
|
|
2207
2443
|
} catch (error) {
|
2208
2444
|
return ctx.send({ error }, 400);
|
2209
2445
|
}
|
2210
|
-
const contentTypes2 = getService$
|
2211
|
-
const { toDto } = getService$
|
2446
|
+
const contentTypes2 = getService$2("content-types").findContentTypesByKind(kind);
|
2447
|
+
const { toDto } = getService$2("data-mapper");
|
2212
2448
|
ctx.body = { data: contentTypes2.map(toDto) };
|
2213
2449
|
},
|
2214
2450
|
async findContentTypesSettings(ctx) {
|
2215
|
-
const { findAllContentTypes, findConfiguration } = getService$
|
2451
|
+
const { findAllContentTypes, findConfiguration } = getService$2("content-types");
|
2216
2452
|
const contentTypes2 = await findAllContentTypes();
|
2217
2453
|
const configurations = await Promise.all(
|
2218
2454
|
contentTypes2.map(async (contentType) => {
|
@@ -2226,7 +2462,7 @@ const contentTypes = {
|
|
2226
2462
|
},
|
2227
2463
|
async findContentTypeConfiguration(ctx) {
|
2228
2464
|
const { uid: uid2 } = ctx.params;
|
2229
|
-
const contentTypeService = getService$
|
2465
|
+
const contentTypeService = getService$2("content-types");
|
2230
2466
|
const contentType = await contentTypeService.findContentType(uid2);
|
2231
2467
|
if (!contentType) {
|
2232
2468
|
return ctx.notFound("contentType.notFound");
|
@@ -2248,13 +2484,13 @@ const contentTypes = {
|
|
2248
2484
|
const { userAbility } = ctx.state;
|
2249
2485
|
const { uid: uid2 } = ctx.params;
|
2250
2486
|
const { body } = ctx.request;
|
2251
|
-
const contentTypeService = getService$
|
2252
|
-
const metricsService = getService$
|
2487
|
+
const contentTypeService = getService$2("content-types");
|
2488
|
+
const metricsService = getService$2("metrics");
|
2253
2489
|
const contentType = await contentTypeService.findContentType(uid2);
|
2254
2490
|
if (!contentType) {
|
2255
2491
|
return ctx.notFound("contentType.notFound");
|
2256
2492
|
}
|
2257
|
-
if (!getService$
|
2493
|
+
if (!getService$2("permission").canConfigureContentType({ userAbility, contentType })) {
|
2258
2494
|
return ctx.forbidden();
|
2259
2495
|
}
|
2260
2496
|
let input;
|
@@ -2287,10 +2523,10 @@ const contentTypes = {
|
|
2287
2523
|
};
|
2288
2524
|
const init = {
|
2289
2525
|
getInitData(ctx) {
|
2290
|
-
const { toDto } = getService$
|
2291
|
-
const { findAllComponents } = getService$
|
2292
|
-
const { getAllFieldSizes } = getService$
|
2293
|
-
const { findAllContentTypes } = getService$
|
2526
|
+
const { toDto } = getService$2("data-mapper");
|
2527
|
+
const { findAllComponents } = getService$2("components");
|
2528
|
+
const { getAllFieldSizes } = getService$2("field-sizes");
|
2529
|
+
const { findAllContentTypes } = getService$2("content-types");
|
2294
2530
|
ctx.body = {
|
2295
2531
|
data: {
|
2296
2532
|
fieldSizes: getAllFieldSizes(),
|
@@ -2326,7 +2562,7 @@ const addFiltersClause = (params, filtersClause) => {
|
|
2326
2562
|
params.filters.$and.push(filtersClause);
|
2327
2563
|
};
|
2328
2564
|
const sanitizeMainField = (model, mainField, userAbility) => {
|
2329
|
-
const permissionChecker2 = getService$
|
2565
|
+
const permissionChecker2 = getService$2("permission-checker").create({
|
2330
2566
|
userAbility,
|
2331
2567
|
model: model.uid
|
2332
2568
|
});
|
@@ -2340,15 +2576,27 @@ const sanitizeMainField = (model, mainField, userAbility) => {
|
|
2340
2576
|
}
|
2341
2577
|
return mainField;
|
2342
2578
|
};
|
2343
|
-
const addStatusToRelations = async (
|
2344
|
-
if (!strapiUtils.contentTypes.hasDraftAndPublish(strapi.
|
2579
|
+
const addStatusToRelations = async (targetUid, relations2) => {
|
2580
|
+
if (!strapiUtils.contentTypes.hasDraftAndPublish(strapi.getModel(targetUid))) {
|
2581
|
+
return relations2;
|
2582
|
+
}
|
2583
|
+
const documentMetadata2 = getService$2("document-metadata");
|
2584
|
+
if (!relations2.length) {
|
2345
2585
|
return relations2;
|
2346
2586
|
}
|
2347
|
-
const
|
2348
|
-
const
|
2587
|
+
const firstRelation = relations2[0];
|
2588
|
+
const filters = {
|
2589
|
+
documentId: { $in: relations2.map((r) => r.documentId) },
|
2590
|
+
// NOTE: find the "opposite" status
|
2591
|
+
publishedAt: firstRelation.publishedAt !== null ? { $null: true } : { $notNull: true }
|
2592
|
+
};
|
2593
|
+
const availableStatus = await strapi.query(targetUid).findMany({
|
2594
|
+
select: ["id", "documentId", "locale", "updatedAt", "createdAt", "publishedAt"],
|
2595
|
+
filters
|
2596
|
+
});
|
2349
2597
|
return relations2.map((relation) => {
|
2350
|
-
const availableStatuses =
|
2351
|
-
(availableDocument) => availableDocument.documentId === relation.documentId
|
2598
|
+
const availableStatuses = availableStatus.filter(
|
2599
|
+
(availableDocument) => availableDocument.documentId === relation.documentId && (relation.locale ? availableDocument.locale === relation.locale : true)
|
2352
2600
|
);
|
2353
2601
|
return {
|
2354
2602
|
...relation,
|
@@ -2369,11 +2617,8 @@ const validateLocale = (sourceUid, targetUid, locale) => {
|
|
2369
2617
|
const isLocalized = strapi.plugin("i18n").service("content-types").isLocalizedContentType;
|
2370
2618
|
const isSourceLocalized = isLocalized(sourceModel);
|
2371
2619
|
const isTargetLocalized = isLocalized(targetModel);
|
2372
|
-
let validatedLocale = locale;
|
2373
|
-
if (!targetModel || !isTargetLocalized)
|
2374
|
-
validatedLocale = void 0;
|
2375
2620
|
return {
|
2376
|
-
locale
|
2621
|
+
locale,
|
2377
2622
|
isSourceLocalized,
|
2378
2623
|
isTargetLocalized
|
2379
2624
|
};
|
@@ -2382,8 +2627,7 @@ const validateStatus = (sourceUid, status) => {
|
|
2382
2627
|
const sourceModel = strapi.getModel(sourceUid);
|
2383
2628
|
const isDP = strapiUtils.contentTypes.hasDraftAndPublish;
|
2384
2629
|
const isSourceDP = isDP(sourceModel);
|
2385
|
-
if (!isSourceDP)
|
2386
|
-
return { status: void 0 };
|
2630
|
+
if (!isSourceDP) return { status: void 0 };
|
2387
2631
|
switch (status) {
|
2388
2632
|
case "published":
|
2389
2633
|
return { status: "published" };
|
@@ -2413,7 +2657,7 @@ const relations = {
|
|
2413
2657
|
ctx.request?.query?.locale
|
2414
2658
|
);
|
2415
2659
|
const { status } = validateStatus(sourceUid, ctx.request?.query?.status);
|
2416
|
-
const permissionChecker2 = getService$
|
2660
|
+
const permissionChecker2 = getService$2("permission-checker").create({
|
2417
2661
|
userAbility,
|
2418
2662
|
model
|
2419
2663
|
});
|
@@ -2438,7 +2682,7 @@ const relations = {
|
|
2438
2682
|
where.id = id;
|
2439
2683
|
}
|
2440
2684
|
const permissionQuery = await permissionChecker2.sanitizedQuery.read(ctx.query);
|
2441
|
-
const populate = await getService$
|
2685
|
+
const populate = await getService$2("populate-builder")(model).populateFromQuery(permissionQuery).build();
|
2442
2686
|
const currentEntity = await strapi.db.query(model).findOne({
|
2443
2687
|
where,
|
2444
2688
|
populate
|
@@ -2453,7 +2697,7 @@ const relations = {
|
|
2453
2697
|
}
|
2454
2698
|
entryId = currentEntity.id;
|
2455
2699
|
}
|
2456
|
-
const modelConfig = isComponent2 ? await getService$
|
2700
|
+
const modelConfig = isComponent2 ? await getService$2("components").findConfiguration(sourceSchema) : await getService$2("content-types").findConfiguration(sourceSchema);
|
2457
2701
|
const targetSchema = strapi.getModel(targetUid);
|
2458
2702
|
const mainField = fp.flow(
|
2459
2703
|
fp.prop(`metadatas.${targetField}.edit.mainField`),
|
@@ -2476,7 +2720,7 @@ const relations = {
|
|
2476
2720
|
attribute,
|
2477
2721
|
fieldsToSelect,
|
2478
2722
|
mainField,
|
2479
|
-
source: { schema: sourceSchema },
|
2723
|
+
source: { schema: sourceSchema, isLocalized: isSourceLocalized },
|
2480
2724
|
target: { schema: targetSchema, isLocalized: isTargetLocalized },
|
2481
2725
|
sourceSchema,
|
2482
2726
|
targetSchema,
|
@@ -2498,7 +2742,8 @@ const relations = {
|
|
2498
2742
|
fieldsToSelect,
|
2499
2743
|
mainField,
|
2500
2744
|
source: {
|
2501
|
-
schema: { uid: sourceUid, modelType: sourceModelType }
|
2745
|
+
schema: { uid: sourceUid, modelType: sourceModelType },
|
2746
|
+
isLocalized: isSourceLocalized
|
2502
2747
|
},
|
2503
2748
|
target: {
|
2504
2749
|
schema: { uid: targetUid },
|
@@ -2506,7 +2751,7 @@ const relations = {
|
|
2506
2751
|
}
|
2507
2752
|
} = await this.extractAndValidateRequestInfo(ctx, id);
|
2508
2753
|
const { idsToOmit, idsToInclude, _q, ...query } = ctx.request.query;
|
2509
|
-
const permissionChecker2 = getService$
|
2754
|
+
const permissionChecker2 = getService$2("permission-checker").create({
|
2510
2755
|
userAbility: ctx.state.userAbility,
|
2511
2756
|
model: targetUid
|
2512
2757
|
});
|
@@ -2536,12 +2781,16 @@ const relations = {
|
|
2536
2781
|
} else {
|
2537
2782
|
where.id = id;
|
2538
2783
|
}
|
2539
|
-
|
2540
|
-
|
2784
|
+
const publishedAt = getPublishedAtClause(status, targetUid);
|
2785
|
+
if (!fp.isEmpty(publishedAt)) {
|
2786
|
+
where[`${alias}.published_at`] = publishedAt;
|
2541
2787
|
}
|
2542
|
-
if (
|
2788
|
+
if (isTargetLocalized && locale) {
|
2543
2789
|
where[`${alias}.locale`] = locale;
|
2544
2790
|
}
|
2791
|
+
if (isSourceLocalized && locale) {
|
2792
|
+
where.locale = locale;
|
2793
|
+
}
|
2545
2794
|
if ((idsToInclude?.length ?? 0) !== 0) {
|
2546
2795
|
where[`${alias}.id`].$notIn = idsToInclude;
|
2547
2796
|
}
|
@@ -2559,7 +2808,8 @@ const relations = {
|
|
2559
2808
|
id: { $notIn: fp.uniq(idsToOmit) }
|
2560
2809
|
});
|
2561
2810
|
}
|
2562
|
-
const
|
2811
|
+
const dbQuery = strapi.get("query-params").transform(targetUid, queryParams);
|
2812
|
+
const res = await strapi.db.query(targetUid).findPage(dbQuery);
|
2563
2813
|
ctx.body = {
|
2564
2814
|
...res,
|
2565
2815
|
results: await addStatusToRelations(targetUid, res.results)
|
@@ -2574,21 +2824,33 @@ const relations = {
|
|
2574
2824
|
attribute,
|
2575
2825
|
targetField,
|
2576
2826
|
fieldsToSelect,
|
2577
|
-
|
2578
|
-
|
2579
|
-
}
|
2580
|
-
target: {
|
2581
|
-
schema: { uid: targetUid }
|
2582
|
-
}
|
2827
|
+
status,
|
2828
|
+
source: { schema: sourceSchema },
|
2829
|
+
target: { schema: targetSchema }
|
2583
2830
|
} = await this.extractAndValidateRequestInfo(ctx, id);
|
2584
|
-
const
|
2831
|
+
const { uid: sourceUid } = sourceSchema;
|
2832
|
+
const { uid: targetUid } = targetSchema;
|
2833
|
+
const permissionQuery = await getService$2("permission-checker").create({ userAbility, model: targetUid }).sanitizedQuery.read({ fields: fieldsToSelect });
|
2585
2834
|
const dbQuery = strapi.db.query(sourceUid);
|
2586
2835
|
const loadRelations = strapiUtils.relations.isAnyToMany(attribute) ? (...args) => dbQuery.loadPages(...args) : (...args) => dbQuery.load(...args).then((res2) => ({ results: res2 ? [res2] : [] }));
|
2836
|
+
const filters = {};
|
2837
|
+
if (sourceSchema?.options?.draftAndPublish) {
|
2838
|
+
if (targetSchema?.options?.draftAndPublish) {
|
2839
|
+
if (status === "published") {
|
2840
|
+
filters.publishedAt = { $notNull: true };
|
2841
|
+
} else {
|
2842
|
+
filters.publishedAt = { $null: true };
|
2843
|
+
}
|
2844
|
+
}
|
2845
|
+
} else if (targetSchema?.options?.draftAndPublish) {
|
2846
|
+
filters.publishedAt = { $null: true };
|
2847
|
+
}
|
2587
2848
|
const res = await loadRelations({ id: entryId }, targetField, {
|
2588
|
-
select: ["id", "documentId", "locale", "publishedAt"],
|
2849
|
+
select: ["id", "documentId", "locale", "publishedAt", "updatedAt"],
|
2589
2850
|
ordering: "desc",
|
2590
2851
|
page: ctx.request.query.page,
|
2591
|
-
pageSize: ctx.request.query.pageSize
|
2852
|
+
pageSize: ctx.request.query.pageSize,
|
2853
|
+
filters
|
2592
2854
|
});
|
2593
2855
|
const loadedIds = res.results.map((item) => item.id);
|
2594
2856
|
addFiltersClause(permissionQuery, { id: { $in: loadedIds } });
|
@@ -2609,10 +2871,10 @@ const relations = {
|
|
2609
2871
|
}
|
2610
2872
|
};
|
2611
2873
|
const buildPopulateFromQuery = async (query, model) => {
|
2612
|
-
return getService$
|
2874
|
+
return getService$2("populate-builder")(model).populateFromQuery(query).populateDeep(Infinity).countRelations().build();
|
2613
2875
|
};
|
2614
2876
|
const findDocument = async (query, uid2, opts = {}) => {
|
2615
|
-
const documentManager2 = getService$
|
2877
|
+
const documentManager2 = getService$2("document-manager");
|
2616
2878
|
const populate = await buildPopulateFromQuery(query, uid2);
|
2617
2879
|
return documentManager2.findMany({ ...opts, populate }, uid2).then((documents) => documents[0]);
|
2618
2880
|
};
|
@@ -2620,8 +2882,8 @@ const createOrUpdateDocument = async (ctx, opts) => {
|
|
2620
2882
|
const { user, userAbility } = ctx.state;
|
2621
2883
|
const { model } = ctx.params;
|
2622
2884
|
const { body, query } = ctx.request;
|
2623
|
-
const documentManager2 = getService$
|
2624
|
-
const permissionChecker2 = getService$
|
2885
|
+
const documentManager2 = getService$2("document-manager");
|
2886
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2625
2887
|
if (permissionChecker2.cannot.create() && permissionChecker2.cannot.update()) {
|
2626
2888
|
throw new strapiUtils.errors.ForbiddenError();
|
2627
2889
|
}
|
@@ -2662,7 +2924,7 @@ const singleTypes = {
|
|
2662
2924
|
const { userAbility } = ctx.state;
|
2663
2925
|
const { model } = ctx.params;
|
2664
2926
|
const { query = {} } = ctx.request;
|
2665
|
-
const permissionChecker2 = getService$
|
2927
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2666
2928
|
if (permissionChecker2.cannot.read()) {
|
2667
2929
|
return ctx.forbidden();
|
2668
2930
|
}
|
@@ -2681,7 +2943,7 @@ const singleTypes = {
|
|
2681
2943
|
permissionChecker2,
|
2682
2944
|
model,
|
2683
2945
|
// @ts-expect-error - fix types
|
2684
|
-
{
|
2946
|
+
{ documentId: document.documentId, locale, publishedAt: null },
|
2685
2947
|
{ availableLocales: true, availableStatus: false }
|
2686
2948
|
);
|
2687
2949
|
ctx.body = { data: {}, meta };
|
@@ -2696,7 +2958,7 @@ const singleTypes = {
|
|
2696
2958
|
async createOrUpdate(ctx) {
|
2697
2959
|
const { userAbility } = ctx.state;
|
2698
2960
|
const { model } = ctx.params;
|
2699
|
-
const permissionChecker2 = getService$
|
2961
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2700
2962
|
const document = await createOrUpdateDocument(ctx);
|
2701
2963
|
const sanitizedDocument = await permissionChecker2.sanitizeOutput(document);
|
2702
2964
|
ctx.body = await formatDocumentWithMetadata(permissionChecker2, model, sanitizedDocument);
|
@@ -2705,8 +2967,8 @@ const singleTypes = {
|
|
2705
2967
|
const { userAbility } = ctx.state;
|
2706
2968
|
const { model } = ctx.params;
|
2707
2969
|
const { query = {} } = ctx.request;
|
2708
|
-
const documentManager2 = getService$
|
2709
|
-
const permissionChecker2 = getService$
|
2970
|
+
const documentManager2 = getService$2("document-manager");
|
2971
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2710
2972
|
if (permissionChecker2.cannot.delete()) {
|
2711
2973
|
return ctx.forbidden();
|
2712
2974
|
}
|
@@ -2734,8 +2996,8 @@ const singleTypes = {
|
|
2734
2996
|
const { userAbility } = ctx.state;
|
2735
2997
|
const { model } = ctx.params;
|
2736
2998
|
const { query = {} } = ctx.request;
|
2737
|
-
const documentManager2 = getService$
|
2738
|
-
const permissionChecker2 = getService$
|
2999
|
+
const documentManager2 = getService$2("document-manager");
|
3000
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2739
3001
|
if (permissionChecker2.cannot.publish()) {
|
2740
3002
|
return ctx.forbidden();
|
2741
3003
|
}
|
@@ -2763,8 +3025,8 @@ const singleTypes = {
|
|
2763
3025
|
body: { discardDraft, ...body },
|
2764
3026
|
query = {}
|
2765
3027
|
} = ctx.request;
|
2766
|
-
const documentManager2 = getService$
|
2767
|
-
const permissionChecker2 = getService$
|
3028
|
+
const documentManager2 = getService$2("document-manager");
|
3029
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2768
3030
|
if (permissionChecker2.cannot.unpublish()) {
|
2769
3031
|
return ctx.forbidden();
|
2770
3032
|
}
|
@@ -2798,8 +3060,8 @@ const singleTypes = {
|
|
2798
3060
|
const { userAbility } = ctx.state;
|
2799
3061
|
const { model } = ctx.params;
|
2800
3062
|
const { body, query = {} } = ctx.request;
|
2801
|
-
const documentManager2 = getService$
|
2802
|
-
const permissionChecker2 = getService$
|
3063
|
+
const documentManager2 = getService$2("document-manager");
|
3064
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2803
3065
|
if (permissionChecker2.cannot.discard()) {
|
2804
3066
|
return ctx.forbidden();
|
2805
3067
|
}
|
@@ -2822,8 +3084,8 @@ const singleTypes = {
|
|
2822
3084
|
const { userAbility } = ctx.state;
|
2823
3085
|
const { model } = ctx.params;
|
2824
3086
|
const { query } = ctx.request;
|
2825
|
-
const documentManager2 = getService$
|
2826
|
-
const permissionChecker2 = getService$
|
3087
|
+
const documentManager2 = getService$2("document-manager");
|
3088
|
+
const permissionChecker2 = getService$2("permission-checker").create({ userAbility, model });
|
2827
3089
|
const { locale } = await getDocumentLocaleAndStatus(query, model);
|
2828
3090
|
if (permissionChecker2.cannot.read()) {
|
2829
3091
|
return ctx.forbidden();
|
@@ -2847,7 +3109,7 @@ const uid$1 = {
|
|
2847
3109
|
const { query = {} } = ctx.request;
|
2848
3110
|
const { locale } = await getDocumentLocaleAndStatus(query, contentTypeUID);
|
2849
3111
|
await validateUIDField(contentTypeUID, field);
|
2850
|
-
const uidService = getService$
|
3112
|
+
const uidService = getService$2("uid");
|
2851
3113
|
ctx.body = {
|
2852
3114
|
data: await uidService.generateUIDField({ contentTypeUID, field, data, locale })
|
2853
3115
|
};
|
@@ -2859,7 +3121,7 @@ const uid$1 = {
|
|
2859
3121
|
const { query = {} } = ctx.request;
|
2860
3122
|
const { locale } = await getDocumentLocaleAndStatus(query, contentTypeUID);
|
2861
3123
|
await validateUIDField(contentTypeUID, field);
|
2862
|
-
const uidService = getService$
|
3124
|
+
const uidService = getService$2("uid");
|
2863
3125
|
const isAvailable = await uidService.checkUIDAvailability({
|
2864
3126
|
contentTypeUID,
|
2865
3127
|
field,
|
@@ -2880,7 +3142,8 @@ const controllers = {
|
|
2880
3142
|
relations,
|
2881
3143
|
"single-types": singleTypes,
|
2882
3144
|
uid: uid$1,
|
2883
|
-
...history.controllers ? history.controllers : {}
|
3145
|
+
...history.controllers ? history.controllers : {},
|
3146
|
+
...preview.controllers ? preview.controllers : {}
|
2884
3147
|
};
|
2885
3148
|
const keys = {
|
2886
3149
|
CONFIGURATION: "configuration"
|
@@ -3009,18 +3272,15 @@ async function syncMetadatas(configuration, schema) {
|
|
3009
3272
|
___default.default.set(updatedMeta, ["list", "searchable"], false);
|
3010
3273
|
___default.default.set(acc, [key], updatedMeta);
|
3011
3274
|
}
|
3012
|
-
if (!___default.default.has(edit, "mainField"))
|
3013
|
-
return acc;
|
3275
|
+
if (!___default.default.has(edit, "mainField")) return acc;
|
3014
3276
|
if (!isRelation$1(attr)) {
|
3015
3277
|
___default.default.set(updatedMeta, "edit", ___default.default.omit(edit, ["mainField"]));
|
3016
3278
|
___default.default.set(acc, [key], updatedMeta);
|
3017
3279
|
return acc;
|
3018
3280
|
}
|
3019
|
-
if (edit.mainField === "id")
|
3020
|
-
return acc;
|
3281
|
+
if (edit.mainField === "id") return acc;
|
3021
3282
|
const targetSchema = getTargetSchema(attr.targetModel);
|
3022
|
-
if (!targetSchema)
|
3023
|
-
return acc;
|
3283
|
+
if (!targetSchema) return acc;
|
3024
3284
|
if (!isSortable(targetSchema, edit.mainField) && !isListable(targetSchema, edit.mainField)) {
|
3025
3285
|
___default.default.set(updatedMeta, ["edit", "mainField"], getDefaultMainField(targetSchema));
|
3026
3286
|
___default.default.set(acc, [key], updatedMeta);
|
@@ -3031,12 +3291,12 @@ async function syncMetadatas(configuration, schema) {
|
|
3031
3291
|
return ___default.default.assign(metasWithDefaults, updatedMetas);
|
3032
3292
|
}
|
3033
3293
|
const getTargetSchema = (targetModel) => {
|
3034
|
-
return getService$
|
3294
|
+
return getService$2("content-types").findContentType(targetModel);
|
3035
3295
|
};
|
3036
3296
|
const DEFAULT_LIST_LENGTH = 4;
|
3037
3297
|
const MAX_ROW_SIZE = 12;
|
3038
3298
|
const isAllowedFieldSize = (type, size) => {
|
3039
|
-
const { getFieldSize } = getService$
|
3299
|
+
const { getFieldSize } = getService$2("field-sizes");
|
3040
3300
|
const fieldSize = getFieldSize(type);
|
3041
3301
|
if (!fieldSize.isResizable && size !== fieldSize.default) {
|
3042
3302
|
return false;
|
@@ -3044,7 +3304,7 @@ const isAllowedFieldSize = (type, size) => {
|
|
3044
3304
|
return size <= MAX_ROW_SIZE;
|
3045
3305
|
};
|
3046
3306
|
const getDefaultFieldSize = (attribute) => {
|
3047
|
-
const { hasFieldSize, getFieldSize } = getService$
|
3307
|
+
const { hasFieldSize, getFieldSize } = getService$2("field-sizes");
|
3048
3308
|
return getFieldSize(hasFieldSize(attribute.customField) ? attribute.customField : attribute.type).default;
|
3049
3309
|
};
|
3050
3310
|
async function createDefaultLayouts(schema) {
|
@@ -3065,8 +3325,7 @@ function createDefaultEditLayout(schema) {
|
|
3065
3325
|
return appendToEditLayout([], keys2, schema);
|
3066
3326
|
}
|
3067
3327
|
function syncLayouts(configuration, schema) {
|
3068
|
-
if (___default.default.isEmpty(configuration.layouts))
|
3069
|
-
return createDefaultLayouts(schema);
|
3328
|
+
if (___default.default.isEmpty(configuration.layouts)) return createDefaultLayouts(schema);
|
3070
3329
|
const { list = [], editRelations = [], edit = [] } = configuration.layouts || {};
|
3071
3330
|
let cleanList = list.filter((attr) => isListable(schema, attr));
|
3072
3331
|
const cleanEditRelations = editRelations.filter(
|
@@ -3077,9 +3336,8 @@ function syncLayouts(configuration, schema) {
|
|
3077
3336
|
for (const row of edit) {
|
3078
3337
|
const newRow = [];
|
3079
3338
|
for (const el of row) {
|
3080
|
-
if (!hasEditableAttribute(schema, el.name))
|
3081
|
-
|
3082
|
-
const { hasFieldSize } = getService$1("field-sizes");
|
3339
|
+
if (!hasEditableAttribute(schema, el.name)) continue;
|
3340
|
+
const { hasFieldSize } = getService$2("field-sizes");
|
3083
3341
|
const fieldType = hasFieldSize(schema.attributes[el.name].customField) ? schema.attributes[el.name].customField : schema.attributes[el.name].type;
|
3084
3342
|
if (!isAllowedFieldSize(fieldType, el.size)) {
|
3085
3343
|
elementsToReAppend.push(el.name);
|
@@ -3109,8 +3367,7 @@ function syncLayouts(configuration, schema) {
|
|
3109
3367
|
};
|
3110
3368
|
}
|
3111
3369
|
const appendToEditLayout = (layout = [], keysToAppend, schema) => {
|
3112
|
-
if (keysToAppend.length === 0)
|
3113
|
-
return layout;
|
3370
|
+
if (keysToAppend.length === 0) return layout;
|
3114
3371
|
let currentRowIndex = Math.max(layout.length - 1, 0);
|
3115
3372
|
if (!layout[currentRowIndex]) {
|
3116
3373
|
layout[currentRowIndex] = [];
|
@@ -3219,17 +3476,17 @@ const configurationService$1 = createConfigurationService({
|
|
3219
3476
|
isComponent: true,
|
3220
3477
|
prefix: STORE_KEY_PREFIX,
|
3221
3478
|
getModels() {
|
3222
|
-
const { toContentManagerModel } = getService$
|
3479
|
+
const { toContentManagerModel } = getService$2("data-mapper");
|
3223
3480
|
return fp.mapValues(toContentManagerModel, strapi.components);
|
3224
3481
|
}
|
3225
3482
|
});
|
3226
3483
|
const components = ({ strapi: strapi2 }) => ({
|
3227
3484
|
findAllComponents() {
|
3228
|
-
const { toContentManagerModel } = getService$
|
3485
|
+
const { toContentManagerModel } = getService$2("data-mapper");
|
3229
3486
|
return Object.values(strapi2.components).map(toContentManagerModel);
|
3230
3487
|
},
|
3231
3488
|
findComponent(uid2) {
|
3232
|
-
const { toContentManagerModel } = getService$
|
3489
|
+
const { toContentManagerModel } = getService$2("data-mapper");
|
3233
3490
|
const component = strapi2.components[uid2];
|
3234
3491
|
return fp.isNil(component) ? component : toContentManagerModel(component);
|
3235
3492
|
},
|
@@ -3280,17 +3537,17 @@ const configurationService = createConfigurationService({
|
|
3280
3537
|
storeUtils,
|
3281
3538
|
prefix: "content_types",
|
3282
3539
|
getModels() {
|
3283
|
-
const { toContentManagerModel } = getService$
|
3540
|
+
const { toContentManagerModel } = getService$2("data-mapper");
|
3284
3541
|
return fp.mapValues(toContentManagerModel, strapi.contentTypes);
|
3285
3542
|
}
|
3286
3543
|
});
|
3287
3544
|
const service = ({ strapi: strapi2 }) => ({
|
3288
3545
|
findAllContentTypes() {
|
3289
|
-
const { toContentManagerModel } = getService$
|
3546
|
+
const { toContentManagerModel } = getService$2("data-mapper");
|
3290
3547
|
return Object.values(strapi2.contentTypes).map(toContentManagerModel);
|
3291
3548
|
},
|
3292
3549
|
findContentType(uid2) {
|
3293
|
-
const { toContentManagerModel } = getService$
|
3550
|
+
const { toContentManagerModel } = getService$2("data-mapper");
|
3294
3551
|
const contentType = strapi2.contentTypes[uid2];
|
3295
3552
|
return fp.isNil(contentType) ? contentType : toContentManagerModel(contentType);
|
3296
3553
|
},
|
@@ -3319,7 +3576,7 @@ const service = ({ strapi: strapi2 }) => ({
|
|
3319
3576
|
return this.findConfiguration(contentType);
|
3320
3577
|
},
|
3321
3578
|
findComponentsConfigurations(contentType) {
|
3322
|
-
return getService$
|
3579
|
+
return getService$2("components").findComponentsConfigurations(contentType);
|
3323
3580
|
},
|
3324
3581
|
syncConfigurations() {
|
3325
3582
|
return configurationService.syncConfigurations();
|
@@ -3591,7 +3848,7 @@ const permission = ({ strapi: strapi2 }) => ({
|
|
3591
3848
|
return userAbility.can(action);
|
3592
3849
|
},
|
3593
3850
|
async registerPermissions() {
|
3594
|
-
const displayedContentTypes = getService$
|
3851
|
+
const displayedContentTypes = getService$2("content-types").findDisplayedContentTypes();
|
3595
3852
|
const contentTypesUids = displayedContentTypes.map(fp.prop("uid"));
|
3596
3853
|
const actions = [
|
3597
3854
|
{
|
@@ -3867,7 +4124,7 @@ const getQueryPopulate = async (uid2, query) => {
|
|
3867
4124
|
return populateQuery;
|
3868
4125
|
};
|
3869
4126
|
const buildDeepPopulate = (uid2) => {
|
3870
|
-
return getService$
|
4127
|
+
return getService$2("populate-builder")(uid2).populateDeep(Infinity).countRelations().build();
|
3871
4128
|
};
|
3872
4129
|
const populateBuilder = (uid2) => {
|
3873
4130
|
let getInitialPopulate = async () => {
|
@@ -4052,7 +4309,9 @@ const documentMetadata = ({ strapi: strapi2 }) => ({
|
|
4052
4309
|
*/
|
4053
4310
|
async getAvailableLocales(uid2, version, allVersions, validatableFields = []) {
|
4054
4311
|
const versionsByLocale = fp.groupBy("locale", allVersions);
|
4055
|
-
|
4312
|
+
if (version.locale) {
|
4313
|
+
delete versionsByLocale[version.locale];
|
4314
|
+
}
|
4056
4315
|
const model = strapi2.getModel(uid2);
|
4057
4316
|
const keysToKeep = [...AVAILABLE_LOCALES_FIELDS, ...validatableFields];
|
4058
4317
|
const traversalFunction = async (localeVersion) => strapiUtils.traverseEntity(
|
@@ -4099,8 +4358,7 @@ const documentMetadata = ({ strapi: strapi2 }) => ({
|
|
4099
4358
|
const matchStatus = status === "published" ? v.publishedAt !== null : v.publishedAt === null;
|
4100
4359
|
return matchLocale && matchStatus;
|
4101
4360
|
});
|
4102
|
-
if (!availableStatus)
|
4103
|
-
return availableStatus;
|
4361
|
+
if (!availableStatus) return availableStatus;
|
4104
4362
|
return fp.pick(AVAILABLE_STATUS_FIELDS, availableStatus);
|
4105
4363
|
},
|
4106
4364
|
/**
|
@@ -4110,8 +4368,7 @@ const documentMetadata = ({ strapi: strapi2 }) => ({
|
|
4110
4368
|
* @returns
|
4111
4369
|
*/
|
4112
4370
|
async getManyAvailableStatus(uid2, documents) {
|
4113
|
-
if (!documents.length)
|
4114
|
-
return [];
|
4371
|
+
if (!documents.length) return [];
|
4115
4372
|
const status = documents[0].publishedAt !== null ? "published" : "draft";
|
4116
4373
|
const locale = documents[0]?.locale;
|
4117
4374
|
const otherStatus = status === "published" ? "draft" : "published";
|
@@ -4138,10 +4395,8 @@ const documentMetadata = ({ strapi: strapi2 }) => ({
|
|
4138
4395
|
} else if (otherVersion) {
|
4139
4396
|
draftVersion = otherVersion;
|
4140
4397
|
}
|
4141
|
-
if (!draftVersion)
|
4142
|
-
|
4143
|
-
if (!publishedVersion)
|
4144
|
-
return CONTENT_MANAGER_STATUS.DRAFT;
|
4398
|
+
if (!draftVersion) return CONTENT_MANAGER_STATUS.PUBLISHED;
|
4399
|
+
if (!publishedVersion) return CONTENT_MANAGER_STATUS.DRAFT;
|
4145
4400
|
const isDraftModified = getIsVersionLatestModification(draftVersion, publishedVersion);
|
4146
4401
|
return isDraftModified ? CONTENT_MANAGER_STATUS.MODIFIED : CONTENT_MANAGER_STATUS.PUBLISHED;
|
4147
4402
|
},
|
@@ -4408,7 +4663,8 @@ const services = {
|
|
4408
4663
|
permission,
|
4409
4664
|
"populate-builder": populateBuilder$1,
|
4410
4665
|
uid,
|
4411
|
-
...history.services ? history.services : {}
|
4666
|
+
...history.services ? history.services : {},
|
4667
|
+
...preview.services ? preview.services : {}
|
4412
4668
|
};
|
4413
4669
|
const index = () => {
|
4414
4670
|
return {
|