@strapi/content-manager 5.56.0 → 5.57.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/components/ConfigurationForm/Form.js +3 -3
- package/dist/admin/components/ConfigurationForm/Form.js.map +1 -1
- package/dist/admin/components/ConfigurationForm/Form.mjs +2 -2
- package/dist/admin/components/ConfigurationForm/Form.mjs.map +1 -1
- package/dist/admin/components/RelativeTime.js +9 -0
- package/dist/admin/components/RelativeTime.js.map +1 -1
- package/dist/admin/components/RelativeTime.mjs +10 -1
- package/dist/admin/components/RelativeTime.mjs.map +1 -1
- package/dist/admin/features/DocumentRBAC.js +0 -3
- package/dist/admin/features/DocumentRBAC.js.map +1 -1
- package/dist/admin/features/DocumentRBAC.mjs +1 -4
- package/dist/admin/features/DocumentRBAC.mjs.map +1 -1
- package/dist/admin/history/components/VersionContent.js +3 -3
- package/dist/admin/history/components/VersionContent.js.map +1 -1
- package/dist/admin/history/components/VersionContent.mjs +2 -2
- package/dist/admin/history/components/VersionContent.mjs.map +1 -1
- package/dist/admin/history/pages/History.js +2 -1
- package/dist/admin/history/pages/History.js.map +1 -1
- package/dist/admin/history/pages/History.mjs +3 -2
- package/dist/admin/history/pages/History.mjs.map +1 -1
- package/dist/admin/pages/EditView/EditViewPage.js +2 -2
- package/dist/admin/pages/EditView/EditViewPage.js.map +1 -1
- package/dist/admin/pages/EditView/EditViewPage.mjs +2 -2
- package/dist/admin/pages/EditView/EditViewPage.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/DocumentActions.js +37 -2
- package/dist/admin/pages/EditView/components/DocumentActions.js.map +1 -1
- package/dist/admin/pages/EditView/components/DocumentActions.mjs +37 -3
- package/dist/admin/pages/EditView/components/DocumentActions.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.js +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.mjs +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js +3 -3
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs +2 -2
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js +30 -2
- package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs +31 -4
- package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js +14 -2
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs +14 -2
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs.map +1 -1
- package/dist/admin/pages/EditView/utils/data.js +3 -3
- package/dist/admin/pages/EditView/utils/data.js.map +1 -1
- package/dist/admin/pages/EditView/utils/data.mjs +2 -2
- package/dist/admin/pages/EditView/utils/data.mjs.map +1 -1
- package/dist/admin/pages/ListView/ListViewPage.js +4 -3
- package/dist/admin/pages/ListView/ListViewPage.js.map +1 -1
- package/dist/admin/pages/ListView/ListViewPage.mjs +4 -3
- package/dist/admin/pages/ListView/ListViewPage.mjs.map +1 -1
- package/dist/admin/preview/pages/Preview.js +2 -1
- package/dist/admin/preview/pages/Preview.js.map +1 -1
- package/dist/admin/preview/pages/Preview.mjs +3 -2
- package/dist/admin/preview/pages/Preview.mjs.map +1 -1
- package/dist/admin/services/documents.js +3 -2
- package/dist/admin/services/documents.js.map +1 -1
- package/dist/admin/services/documents.mjs +2 -2
- package/dist/admin/services/documents.mjs.map +1 -1
- package/dist/admin/src/pages/EditView/components/DocumentActions.d.ts +2 -1
- package/dist/admin/src/pages/EditView/components/FormInputs/Relations/RelationModal.d.ts +19 -2
- package/dist/admin/src/services/documents.d.ts +10 -2
- package/dist/admin/translations/en.json.js +2 -0
- package/dist/admin/translations/en.json.js.map +1 -1
- package/dist/admin/translations/en.json.mjs +2 -0
- package/dist/admin/translations/en.json.mjs.map +1 -1
- package/dist/admin/utils/validation.js +3 -3
- package/dist/admin/utils/validation.js.map +1 -1
- package/dist/admin/utils/validation.mjs +2 -2
- package/dist/admin/utils/validation.mjs.map +1 -1
- package/dist/server/controllers/collection-types.js +4 -4
- package/dist/server/controllers/collection-types.js.map +1 -1
- package/dist/server/controllers/collection-types.mjs +4 -4
- package/dist/server/controllers/collection-types.mjs.map +1 -1
- package/dist/server/controllers/content-types.js +5 -7
- package/dist/server/controllers/content-types.js.map +1 -1
- package/dist/server/controllers/content-types.mjs +5 -7
- package/dist/server/controllers/content-types.mjs.map +1 -1
- package/dist/server/controllers/relations.js +19 -15
- package/dist/server/controllers/relations.js.map +1 -1
- package/dist/server/controllers/relations.mjs +17 -13
- package/dist/server/controllers/relations.mjs.map +1 -1
- package/dist/server/controllers/utils/clone.js +3 -4
- package/dist/server/controllers/utils/clone.js.map +1 -1
- package/dist/server/controllers/utils/clone.mjs +4 -5
- package/dist/server/controllers/utils/clone.mjs.map +1 -1
- package/dist/server/controllers/validation/index.js +1 -1
- package/dist/server/controllers/validation/index.mjs +1 -1
- package/dist/server/history/controllers/history-version.js +3 -3
- package/dist/server/history/controllers/history-version.js.map +1 -1
- package/dist/server/history/controllers/history-version.mjs +3 -3
- package/dist/server/history/controllers/history-version.mjs.map +1 -1
- package/dist/server/history/services/history.js +4 -4
- package/dist/server/history/services/history.js.map +1 -1
- package/dist/server/history/services/history.mjs +4 -4
- package/dist/server/history/services/history.mjs.map +1 -1
- package/dist/server/history/services/lifecycles.js +8 -8
- package/dist/server/history/services/lifecycles.js.map +1 -1
- package/dist/server/history/services/lifecycles.mjs +3 -3
- package/dist/server/history/services/lifecycles.mjs.map +1 -1
- package/dist/server/history/services/utils.js +7 -10
- package/dist/server/history/services/utils.js.map +1 -1
- package/dist/server/history/services/utils.mjs +5 -8
- package/dist/server/history/services/utils.mjs.map +1 -1
- package/dist/server/mcp/permissions.js +2 -2
- package/dist/server/mcp/permissions.js.map +1 -1
- package/dist/server/mcp/permissions.mjs +2 -2
- package/dist/server/mcp/permissions.mjs.map +1 -1
- package/dist/server/mcp/register-content-manager-mcp-tools.js +7 -5
- package/dist/server/mcp/register-content-manager-mcp-tools.js.map +1 -1
- package/dist/server/mcp/register-content-manager-mcp-tools.mjs +7 -5
- package/dist/server/mcp/register-content-manager-mcp-tools.mjs.map +1 -1
- package/dist/server/preview/controllers/previewScript.js +30 -15
- package/dist/server/preview/controllers/validation/preview.js +3 -3
- package/dist/server/preview/controllers/validation/preview.js.map +1 -1
- package/dist/server/preview/controllers/validation/preview.mjs +3 -3
- package/dist/server/preview/controllers/validation/preview.mjs.map +1 -1
- package/dist/server/services/components.js +3 -3
- package/dist/server/services/components.js.map +1 -1
- package/dist/server/services/components.mjs +3 -3
- package/dist/server/services/components.mjs.map +1 -1
- package/dist/server/services/content-structure.js +2 -2
- package/dist/server/services/content-structure.js.map +1 -1
- package/dist/server/services/content-structure.mjs +2 -2
- package/dist/server/services/content-structure.mjs.map +1 -1
- package/dist/server/services/content-types.js +3 -3
- package/dist/server/services/content-types.js.map +1 -1
- package/dist/server/services/content-types.mjs +3 -3
- package/dist/server/services/content-types.mjs.map +1 -1
- package/dist/server/services/data-mapper.js +3 -3
- package/dist/server/services/data-mapper.js.map +1 -1
- package/dist/server/services/data-mapper.mjs +3 -3
- package/dist/server/services/data-mapper.mjs.map +1 -1
- package/dist/server/services/document-manager.js +6 -6
- package/dist/server/services/document-manager.js.map +1 -1
- package/dist/server/services/document-manager.mjs +6 -6
- package/dist/server/services/document-manager.mjs.map +1 -1
- package/dist/server/services/document-metadata.js +29 -31
- package/dist/server/services/document-metadata.js.map +1 -1
- package/dist/server/services/document-metadata.mjs +29 -31
- package/dist/server/services/document-metadata.mjs.map +1 -1
- package/dist/server/services/metrics.js +3 -3
- package/dist/server/services/metrics.js.map +1 -1
- package/dist/server/services/metrics.mjs +3 -3
- package/dist/server/services/metrics.mjs.map +1 -1
- package/dist/server/services/permission-checker.js +2 -2
- package/dist/server/services/permission-checker.js.map +1 -1
- package/dist/server/services/permission-checker.mjs +1 -1
- package/dist/server/services/permission-checker.mjs.map +1 -1
- package/dist/server/services/permission.js +2 -3
- package/dist/server/services/permission.js.map +1 -1
- package/dist/server/services/permission.mjs +2 -3
- package/dist/server/services/permission.mjs.map +1 -1
- package/dist/server/services/populate-builder.js +4 -4
- package/dist/server/services/populate-builder.js.map +1 -1
- package/dist/server/services/populate-builder.mjs +4 -4
- package/dist/server/services/populate-builder.mjs.map +1 -1
- package/dist/server/services/utils/configuration/attributes.js +1 -2
- package/dist/server/services/utils/configuration/attributes.js.map +1 -1
- package/dist/server/services/utils/configuration/attributes.mjs +2 -3
- package/dist/server/services/utils/configuration/attributes.mjs.map +1 -1
- package/dist/server/services/utils/configuration/settings.js +4 -7
- package/dist/server/services/utils/configuration/settings.js.map +1 -1
- package/dist/server/services/utils/configuration/settings.mjs +2 -5
- package/dist/server/services/utils/configuration/settings.mjs.map +1 -1
- package/dist/server/services/utils/draft.js +8 -7
- package/dist/server/services/utils/draft.js.map +1 -1
- package/dist/server/services/utils/draft.mjs +6 -5
- package/dist/server/services/utils/draft.mjs.map +1 -1
- package/dist/server/services/utils/populate.js +10 -11
- package/dist/server/services/utils/populate.js.map +1 -1
- package/dist/server/services/utils/populate.mjs +9 -10
- package/dist/server/services/utils/populate.mjs.map +1 -1
- package/dist/server/src/controllers/relations.d.ts.map +1 -1
- package/dist/server/src/history/controllers/history-version.d.ts.map +1 -1
- package/dist/server/src/history/services/utils.d.ts +2 -2
- package/dist/server/src/history/services/utils.d.ts.map +1 -1
- package/dist/server/src/index.d.ts +1 -1
- package/dist/server/src/index.d.ts.map +1 -1
- package/dist/server/src/mcp/permissions.d.ts +1 -1
- package/dist/server/src/mcp/permissions.d.ts.map +1 -1
- package/dist/server/src/mcp/register-content-manager-mcp-tools.d.ts +3 -1
- package/dist/server/src/mcp/register-content-manager-mcp-tools.d.ts.map +1 -1
- package/dist/server/src/mcp/types.d.ts +2 -2
- package/dist/server/src/services/content-types.d.ts.map +1 -1
- package/dist/server/src/services/data-mapper.d.ts +1 -1
- package/dist/server/src/services/data-mapper.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.map +1 -1
- package/dist/server/src/services/index.d.ts +1 -1
- package/dist/server/src/services/index.d.ts.map +1 -1
- package/dist/server/src/services/metrics.d.ts.map +1 -1
- package/dist/server/src/services/permission-checker.d.ts.map +1 -1
- package/dist/server/src/services/permission.d.ts.map +1 -1
- package/dist/server/src/services/populate-builder.d.ts.map +1 -1
- package/dist/server/src/services/utils/configuration/index.d.ts +10 -1
- package/dist/server/src/services/utils/configuration/index.d.ts.map +1 -1
- package/dist/server/src/services/utils/configuration/settings.d.ts +10 -1
- package/dist/server/src/services/utils/configuration/settings.d.ts.map +1 -1
- package/dist/server/src/services/utils/draft.d.ts.map +1 -1
- package/dist/server/src/services/utils/populate.d.ts.map +1 -1
- package/package.json +6 -6
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var _ = require('lodash');
|
|
4
4
|
var populate = require('./utils/populate.js');
|
|
5
5
|
|
|
6
6
|
/**
|
|
@@ -38,10 +38,10 @@ var populate = require('./utils/populate.js');
|
|
|
38
38
|
toMany: true,
|
|
39
39
|
toOne: true
|
|
40
40
|
}) {
|
|
41
|
-
if (
|
|
41
|
+
if (toMany != null) {
|
|
42
42
|
deepPopulateOptions.countMany = toMany;
|
|
43
43
|
}
|
|
44
|
-
if (
|
|
44
|
+
if (toOne != null) {
|
|
45
45
|
deepPopulateOptions.countOne = toOne;
|
|
46
46
|
}
|
|
47
47
|
return builder;
|
|
@@ -61,7 +61,7 @@ var populate = require('./utils/populate.js');
|
|
|
61
61
|
*/ withPopulateOverride (overrides) {
|
|
62
62
|
const prev = getInitialPopulate;
|
|
63
63
|
// merge(base, overrides): overrides win for overlapping keys, so e.g. localizations
|
|
64
|
-
getInitialPopulate = async ()=>
|
|
64
|
+
getInitialPopulate = async ()=>_.merge({}, await prev() || {}, overrides);
|
|
65
65
|
return builder;
|
|
66
66
|
},
|
|
67
67
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"populate-builder.js","sources":["../../../server/src/services/populate-builder.ts"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"populate-builder.js","sources":["../../../server/src/services/populate-builder.ts"],"sourcesContent":["import { merge } from 'lodash';\n\nimport type { UID } from '@strapi/types';\nimport { type Populate, getDeepPopulate, getQueryPopulate } from './utils/populate';\n\n/**\n * Builder to create a Strapi populate object.\n *\n * @param uid - Content type UID\n *\n * @example\n * const populate = await populateBuilder('api::article.article').countRelations().build();\n * // populate = { article: { populate: { count: true } } }\n *\n */\nconst populateBuilder = (uid: UID.Schema) => {\n let getInitialPopulate = async (): Promise<undefined | Populate> => {\n return undefined;\n };\n const deepPopulateOptions = {\n countMany: false,\n countOne: false,\n maxLevel: -1,\n };\n\n const builder = {\n /**\n * Populates all attribute fields present in a query.\n * @param query - Strapi query object\n */\n populateFromQuery(query: object) {\n getInitialPopulate = async () => getQueryPopulate(uid, query);\n return builder;\n },\n\n /**\n * Populate relations as count.\n * @param [options]\n * @param [options.toMany] - Populate XtoMany relations as count if true.\n * @param [options.toOne] - Populate XtoOne relations as count if true.\n */\n countRelations({ toMany, toOne } = { toMany: true, toOne: true }) {\n if (toMany != null) {\n deepPopulateOptions.countMany = toMany;\n }\n if (toOne != null) {\n deepPopulateOptions.countOne = toOne;\n }\n return builder;\n },\n\n /**\n * Populate relations deeply, up to a certain level.\n * @param [level=Infinity] - Max level of nested populate.\n */\n populateDeep(level = Infinity) {\n deepPopulateOptions.maxLevel = level;\n return builder;\n },\n\n /**\n * Override the populate for specific attributes, taking precedence over\n * query-derived or deep populate defaults.\n *\n * @param overrides - Populate overrides to merge (e.g. { localizations: { fields: ['locale'] } })\n */\n withPopulateOverride(overrides: Record<string, any>) {\n const prev = getInitialPopulate;\n // merge(base, overrides): overrides win for overlapping keys, so e.g. localizations\n getInitialPopulate = async () => merge({}, (await prev()) || {}, overrides);\n return builder;\n },\n\n /**\n * Construct the populate object based on the builder options.\n * @returns Populate object\n */\n async build() {\n const initialPopulate = await getInitialPopulate();\n\n if (deepPopulateOptions.maxLevel === -1) {\n return initialPopulate;\n }\n\n return getDeepPopulate(uid, {\n ...deepPopulateOptions,\n initialPopulate,\n });\n },\n };\n\n return builder;\n};\n\nexport default () => populateBuilder;\n"],"names":["populateBuilder","uid","getInitialPopulate","undefined","deepPopulateOptions","countMany","countOne","maxLevel","builder","populateFromQuery","query","getQueryPopulate","countRelations","toMany","toOne","populateDeep","level","Infinity","withPopulateOverride","overrides","prev","merge","build","initialPopulate","getDeepPopulate"],"mappings":";;;;;AAKA;;;;;;;;;IAUA,MAAMA,kBAAkB,CAACC,GAAAA,GAAAA;AACvB,IAAA,IAAIC,kBAAAA,GAAqB,UAAA;QACvB,OAAOC,SAAAA;AACT,IAAA,CAAA;AACA,IAAA,MAAMC,mBAAAA,GAAsB;QAC1BC,SAAAA,EAAW,KAAA;QACXC,QAAAA,EAAU,KAAA;AACVC,QAAAA,QAAAA,EAAU;AACZ,KAAA;AAEA,IAAA,MAAMC,OAAAA,GAAU;AACd;;;AAGC,QACDC,mBAAkBC,KAAa,EAAA;YAC7BR,kBAAAA,GAAqB,UAAYS,0BAAiBV,GAAAA,EAAKS,KAAAA,CAAAA;YACvD,OAAOF,OAAAA;AACT,QAAA,CAAA;AAEA;;;;;AAKC,QACDI,gBAAe,EAAEC,MAAM,EAAEC,KAAK,EAAE,GAAG;YAAED,MAAAA,EAAQ,IAAA;YAAMC,KAAAA,EAAO;SAAM,EAAA;AAC9D,YAAA,IAAID,UAAU,IAAA,EAAM;AAClBT,gBAAAA,mBAAAA,CAAoBC,SAAS,GAAGQ,MAAAA;AAClC,YAAA;AACA,YAAA,IAAIC,SAAS,IAAA,EAAM;AACjBV,gBAAAA,mBAAAA,CAAoBE,QAAQ,GAAGQ,KAAAA;AACjC,YAAA;YACA,OAAON,OAAAA;AACT,QAAA,CAAA;AAEA;;;QAIAO,YAAAA,CAAAA,CAAaC,QAAQC,QAAQ,EAAA;AAC3Bb,YAAAA,mBAAAA,CAAoBG,QAAQ,GAAGS,KAAAA;YAC/B,OAAOR,OAAAA;AACT,QAAA,CAAA;AAEA;;;;;AAKC,QACDU,sBAAqBC,SAA8B,EAAA;AACjD,YAAA,MAAMC,IAAAA,GAAOlB,kBAAAA;;YAEbA,kBAAAA,GAAqB,UAAYmB,QAAM,EAAC,EAAG,MAAOD,IAAAA,EAAAA,IAAW,EAAC,EAAGD,SAAAA,CAAAA;YACjE,OAAOX,OAAAA;AACT,QAAA,CAAA;AAEA;;;AAGC,QACD,MAAMc,KAAAA,CAAAA,GAAAA;AACJ,YAAA,MAAMC,kBAAkB,MAAMrB,kBAAAA,EAAAA;AAE9B,YAAA,IAAIE,mBAAAA,CAAoBG,QAAQ,KAAK,EAAC,EAAG;gBACvC,OAAOgB,eAAAA;AACT,YAAA;AAEA,YAAA,OAAOC,yBAAgBvB,GAAAA,EAAK;AAC1B,gBAAA,GAAGG,mBAAmB;AACtBmB,gBAAAA;AACF,aAAA,CAAA;AACF,QAAA;AACF,KAAA;IAEA,OAAOf,OAAAA;AACT,CAAA;AAEA,wBAAe,CAAA,IAAMR,eAAc;;;;"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { merge
|
|
1
|
+
import { merge } from 'lodash';
|
|
2
2
|
import { getQueryPopulate, getDeepPopulate } from './utils/populate.mjs';
|
|
3
3
|
|
|
4
4
|
/**
|
|
@@ -36,10 +36,10 @@ import { getQueryPopulate, getDeepPopulate } from './utils/populate.mjs';
|
|
|
36
36
|
toMany: true,
|
|
37
37
|
toOne: true
|
|
38
38
|
}) {
|
|
39
|
-
if (
|
|
39
|
+
if (toMany != null) {
|
|
40
40
|
deepPopulateOptions.countMany = toMany;
|
|
41
41
|
}
|
|
42
|
-
if (
|
|
42
|
+
if (toOne != null) {
|
|
43
43
|
deepPopulateOptions.countOne = toOne;
|
|
44
44
|
}
|
|
45
45
|
return builder;
|
|
@@ -59,7 +59,7 @@ import { getQueryPopulate, getDeepPopulate } from './utils/populate.mjs';
|
|
|
59
59
|
*/ withPopulateOverride (overrides) {
|
|
60
60
|
const prev = getInitialPopulate;
|
|
61
61
|
// merge(base, overrides): overrides win for overlapping keys, so e.g. localizations
|
|
62
|
-
getInitialPopulate = async ()=>merge(await prev() || {}, overrides);
|
|
62
|
+
getInitialPopulate = async ()=>merge({}, await prev() || {}, overrides);
|
|
63
63
|
return builder;
|
|
64
64
|
},
|
|
65
65
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"populate-builder.mjs","sources":["../../../server/src/services/populate-builder.ts"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"populate-builder.mjs","sources":["../../../server/src/services/populate-builder.ts"],"sourcesContent":["import { merge } from 'lodash';\n\nimport type { UID } from '@strapi/types';\nimport { type Populate, getDeepPopulate, getQueryPopulate } from './utils/populate';\n\n/**\n * Builder to create a Strapi populate object.\n *\n * @param uid - Content type UID\n *\n * @example\n * const populate = await populateBuilder('api::article.article').countRelations().build();\n * // populate = { article: { populate: { count: true } } }\n *\n */\nconst populateBuilder = (uid: UID.Schema) => {\n let getInitialPopulate = async (): Promise<undefined | Populate> => {\n return undefined;\n };\n const deepPopulateOptions = {\n countMany: false,\n countOne: false,\n maxLevel: -1,\n };\n\n const builder = {\n /**\n * Populates all attribute fields present in a query.\n * @param query - Strapi query object\n */\n populateFromQuery(query: object) {\n getInitialPopulate = async () => getQueryPopulate(uid, query);\n return builder;\n },\n\n /**\n * Populate relations as count.\n * @param [options]\n * @param [options.toMany] - Populate XtoMany relations as count if true.\n * @param [options.toOne] - Populate XtoOne relations as count if true.\n */\n countRelations({ toMany, toOne } = { toMany: true, toOne: true }) {\n if (toMany != null) {\n deepPopulateOptions.countMany = toMany;\n }\n if (toOne != null) {\n deepPopulateOptions.countOne = toOne;\n }\n return builder;\n },\n\n /**\n * Populate relations deeply, up to a certain level.\n * @param [level=Infinity] - Max level of nested populate.\n */\n populateDeep(level = Infinity) {\n deepPopulateOptions.maxLevel = level;\n return builder;\n },\n\n /**\n * Override the populate for specific attributes, taking precedence over\n * query-derived or deep populate defaults.\n *\n * @param overrides - Populate overrides to merge (e.g. { localizations: { fields: ['locale'] } })\n */\n withPopulateOverride(overrides: Record<string, any>) {\n const prev = getInitialPopulate;\n // merge(base, overrides): overrides win for overlapping keys, so e.g. localizations\n getInitialPopulate = async () => merge({}, (await prev()) || {}, overrides);\n return builder;\n },\n\n /**\n * Construct the populate object based on the builder options.\n * @returns Populate object\n */\n async build() {\n const initialPopulate = await getInitialPopulate();\n\n if (deepPopulateOptions.maxLevel === -1) {\n return initialPopulate;\n }\n\n return getDeepPopulate(uid, {\n ...deepPopulateOptions,\n initialPopulate,\n });\n },\n };\n\n return builder;\n};\n\nexport default () => populateBuilder;\n"],"names":["populateBuilder","uid","getInitialPopulate","undefined","deepPopulateOptions","countMany","countOne","maxLevel","builder","populateFromQuery","query","getQueryPopulate","countRelations","toMany","toOne","populateDeep","level","Infinity","withPopulateOverride","overrides","prev","merge","build","initialPopulate","getDeepPopulate"],"mappings":";;;AAKA;;;;;;;;;IAUA,MAAMA,oBAAkB,CAACC,GAAAA,GAAAA;AACvB,IAAA,IAAIC,kBAAAA,GAAqB,UAAA;QACvB,OAAOC,SAAAA;AACT,IAAA,CAAA;AACA,IAAA,MAAMC,mBAAAA,GAAsB;QAC1BC,SAAAA,EAAW,KAAA;QACXC,QAAAA,EAAU,KAAA;AACVC,QAAAA,QAAAA,EAAU;AACZ,KAAA;AAEA,IAAA,MAAMC,OAAAA,GAAU;AACd;;;AAGC,QACDC,mBAAkBC,KAAa,EAAA;YAC7BR,kBAAAA,GAAqB,UAAYS,iBAAiBV,GAAAA,EAAKS,KAAAA,CAAAA;YACvD,OAAOF,OAAAA;AACT,QAAA,CAAA;AAEA;;;;;AAKC,QACDI,gBAAe,EAAEC,MAAM,EAAEC,KAAK,EAAE,GAAG;YAAED,MAAAA,EAAQ,IAAA;YAAMC,KAAAA,EAAO;SAAM,EAAA;AAC9D,YAAA,IAAID,UAAU,IAAA,EAAM;AAClBT,gBAAAA,mBAAAA,CAAoBC,SAAS,GAAGQ,MAAAA;AAClC,YAAA;AACA,YAAA,IAAIC,SAAS,IAAA,EAAM;AACjBV,gBAAAA,mBAAAA,CAAoBE,QAAQ,GAAGQ,KAAAA;AACjC,YAAA;YACA,OAAON,OAAAA;AACT,QAAA,CAAA;AAEA;;;QAIAO,YAAAA,CAAAA,CAAaC,QAAQC,QAAQ,EAAA;AAC3Bb,YAAAA,mBAAAA,CAAoBG,QAAQ,GAAGS,KAAAA;YAC/B,OAAOR,OAAAA;AACT,QAAA,CAAA;AAEA;;;;;AAKC,QACDU,sBAAqBC,SAA8B,EAAA;AACjD,YAAA,MAAMC,IAAAA,GAAOlB,kBAAAA;;YAEbA,kBAAAA,GAAqB,UAAYmB,MAAM,EAAC,EAAG,MAAOD,IAAAA,EAAAA,IAAW,EAAC,EAAGD,SAAAA,CAAAA;YACjE,OAAOX,OAAAA;AACT,QAAA,CAAA;AAEA;;;AAGC,QACD,MAAMc,KAAAA,CAAAA,GAAAA;AACJ,YAAA,MAAMC,kBAAkB,MAAMrB,kBAAAA,EAAAA;AAE9B,YAAA,IAAIE,mBAAAA,CAAoBG,QAAQ,KAAK,EAAC,EAAG;gBACvC,OAAOgB,eAAAA;AACT,YAAA;AAEA,YAAA,OAAOC,gBAAgBvB,GAAAA,EAAK;AAC1B,gBAAA,GAAGG,mBAAmB;AACtBmB,gBAAAA;AACF,aAAA,CAAA;AACF,QAAA;AACF,KAAA;IAEA,OAAOf,OAAAA;AACT,CAAA;AAEA,sBAAe,CAAA,IAAMR,iBAAc;;;;"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var _ = require('lodash');
|
|
4
|
-
var fp = require('lodash/fp');
|
|
5
4
|
var strapiUtils = require('@strapi/utils');
|
|
6
5
|
|
|
7
6
|
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
@@ -167,7 +166,7 @@ const getDefaultMainField = (schema)=>findFirstStringAttribute(schema) || 'id';
|
|
|
167
166
|
*/ const getSortableAttributes = (schema)=>{
|
|
168
167
|
const validAttributes = Object.keys(schema.attributes).filter((key)=>isListable(schema, key));
|
|
169
168
|
const model = strapi.getModel(schema.uid);
|
|
170
|
-
const nonVisibleWritableAttributes =
|
|
169
|
+
const nonVisibleWritableAttributes = _.intersection(getWritableAttributes(model), getNonVisibleAttributes(model));
|
|
171
170
|
const identifierField = ___default.default.has(schema.attributes, 'documentId') ? 'documentId' : 'id';
|
|
172
171
|
return [
|
|
173
172
|
identifierField,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attributes.js","sources":["../../../../../server/src/services/utils/configuration/attributes.ts"],"sourcesContent":["import _ from 'lodash';\nimport { intersection } from 'lodash/fp';\nimport { contentTypes as contentTypesUtils } from '@strapi/utils';\n\nconst { getNonVisibleAttributes, getWritableAttributes } = contentTypesUtils;\nconst { PUBLISHED_AT_ATTRIBUTE, CREATED_BY_ATTRIBUTE, UPDATED_BY_ATTRIBUTE } =\n contentTypesUtils.constants;\n\nconst NON_SORTABLES = ['component', 'json', 'media', 'richtext', 'dynamiczone', 'blocks'];\nconst SORTABLE_RELATIONS = ['oneToOne', 'manyToOne'];\n\nconst NON_LISTABLES = ['json', 'password', 'richtext', 'dynamiczone', 'blocks'];\nconst LISTABLE_RELATIONS = ['oneToOne', 'oneToMany', 'manyToOne', 'manyToMany'];\n\n// hidden fields are fields that are configured to be hidden from list, and edit views\nconst isHidden = (schema: any, name: any) => {\n if (!_.has(schema.attributes, name)) {\n return false;\n }\n\n const isHidden = _.get(schema, ['config', 'attributes', name, 'hidden'], false);\n if (isHidden === true) {\n return true;\n }\n\n return false;\n};\n\nconst isListable = (schema: any, name: any) => {\n if (!_.has(schema.attributes, name)) {\n return false;\n }\n\n if (isHidden(schema, name)) {\n return false;\n }\n\n const attribute = schema.attributes[name];\n if (NON_LISTABLES.includes(attribute.type)) {\n return false;\n }\n\n if (isRelation(attribute) && !LISTABLE_RELATIONS.includes(attribute.relationType)) {\n return false;\n }\n\n return true;\n};\n\nconst isSortable = (schema: any, name: any) => {\n if (!_.has(schema.attributes, name)) {\n return false;\n }\n\n if (schema.modelType === 'component' && name === 'id') return false;\n\n const attribute = schema.attributes[name];\n if (NON_SORTABLES.includes(attribute.type)) {\n return false;\n }\n\n if (isRelation(attribute) && !SORTABLE_RELATIONS.includes(attribute.relationType)) {\n return false;\n }\n\n return true;\n};\n\nconst isSearchable = (schema: any, name: any) => {\n return isSortable(schema, name);\n};\n\nconst isVisible = (schema: any, name: any) => {\n if (!_.has(schema.attributes, name)) {\n return false;\n }\n\n if (isHidden(schema, name)) {\n return false;\n }\n\n if (isTimestamp(schema, name) || name === 'id' || name === 'documentId') {\n return false;\n }\n\n if (isPublicationField(name)) {\n return false;\n }\n\n if (isCreatorField(schema, name)) {\n return false;\n }\n\n return true;\n};\n\nconst isPublicationField = (name: any) => PUBLISHED_AT_ATTRIBUTE === name;\n\nconst isTimestamp = (schema: any, name: any) => {\n if (!_.has(schema.attributes, name)) {\n return false;\n }\n\n const timestamps = contentTypesUtils.getTimestamps(schema);\n if (!timestamps || !Array.isArray(timestamps)) {\n return false;\n }\n\n if (timestamps.includes(name)) {\n return true;\n }\n};\n\nconst isCreatorField = (schema: any, name: any) => {\n if (!_.has(schema.attributes, name)) {\n return false;\n }\n\n const creatorFields = contentTypesUtils.getCreatorFields(schema);\n if (!creatorFields || !Array.isArray(creatorFields)) {\n return false;\n }\n\n if (creatorFields.includes(name)) {\n return true;\n }\n};\n\nconst isRelation = (attribute: any) => attribute.type === 'relation';\n\nconst hasRelationAttribute = (schema: any, name: any) => {\n if (!_.has(schema.attributes, name)) {\n return false;\n }\n\n if (isHidden(schema, name)) {\n return false;\n }\n\n if (!isVisible(schema, name)) {\n return false;\n }\n\n return isRelation(schema.attributes[name]);\n};\n\nconst hasEditableAttribute = (schema: any, name: any) => {\n if (!_.has(schema.attributes, name)) {\n return false;\n }\n\n if (isHidden(schema, name)) {\n return false;\n }\n\n if (!isVisible(schema, name)) {\n return false;\n }\n\n return true;\n};\n\nconst findFirstStringAttribute = (schema: any) => {\n return Object.keys(schema.attributes || {}).find((key) => {\n const { type } = schema.attributes[key];\n return type === 'string' && key !== 'id';\n });\n};\n\nconst getDefaultMainField = (schema: any) => findFirstStringAttribute(schema) || 'id';\n\n/**\n * Returns list of all sortable attributes for a given content type schema\n * TODO V5: Refactor non visible fields to be a part of content-manager schema so we can use isSortable instead\n * @param {*} schema\n * @returns\n */\nconst getSortableAttributes = (schema: any) => {\n const validAttributes = Object.keys(schema.attributes).filter((key) => isListable(schema, key));\n\n const model = strapi.getModel(schema.uid);\n const nonVisibleWritableAttributes = intersection(\n getNonVisibleAttributes(model),\n getWritableAttributes(model)\n );\n\n const identifierField = _.has(schema.attributes, 'documentId') ? 'documentId' : 'id';\n return [\n identifierField,\n ...validAttributes,\n ...nonVisibleWritableAttributes,\n CREATED_BY_ATTRIBUTE,\n UPDATED_BY_ATTRIBUTE,\n ];\n};\n\nexport {\n isSortable,\n isVisible,\n isSearchable,\n isRelation,\n isListable,\n hasEditableAttribute,\n hasRelationAttribute,\n getDefaultMainField,\n getSortableAttributes,\n};\n"],"names":["getNonVisibleAttributes","getWritableAttributes","contentTypesUtils","PUBLISHED_AT_ATTRIBUTE","CREATED_BY_ATTRIBUTE","UPDATED_BY_ATTRIBUTE","constants","NON_SORTABLES","SORTABLE_RELATIONS","NON_LISTABLES","LISTABLE_RELATIONS","isHidden","schema","name","_","has","attributes","get","isListable","attribute","includes","type","isRelation","relationType","isSortable","modelType","isSearchable","isVisible","isTimestamp","isPublicationField","isCreatorField","timestamps","getTimestamps","Array","isArray","creatorFields","getCreatorFields","hasRelationAttribute","hasEditableAttribute","findFirstStringAttribute","Object","keys","find","key","getDefaultMainField","getSortableAttributes","validAttributes","filter","model","strapi","getModel","uid","nonVisibleWritableAttributes","intersection","identifierField"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"attributes.js","sources":["../../../../../server/src/services/utils/configuration/attributes.ts"],"sourcesContent":["import _, { intersection } from 'lodash';\n\nimport { contentTypes as contentTypesUtils } from '@strapi/utils';\n\nconst { getNonVisibleAttributes, getWritableAttributes } = contentTypesUtils;\nconst { PUBLISHED_AT_ATTRIBUTE, CREATED_BY_ATTRIBUTE, UPDATED_BY_ATTRIBUTE } =\n contentTypesUtils.constants;\n\nconst NON_SORTABLES = ['component', 'json', 'media', 'richtext', 'dynamiczone', 'blocks'];\nconst SORTABLE_RELATIONS = ['oneToOne', 'manyToOne'];\n\nconst NON_LISTABLES = ['json', 'password', 'richtext', 'dynamiczone', 'blocks'];\nconst LISTABLE_RELATIONS = ['oneToOne', 'oneToMany', 'manyToOne', 'manyToMany'];\n\n// hidden fields are fields that are configured to be hidden from list, and edit views\nconst isHidden = (schema: any, name: any) => {\n if (!_.has(schema.attributes, name)) {\n return false;\n }\n\n const isHidden = _.get(schema, ['config', 'attributes', name, 'hidden'], false);\n if (isHidden === true) {\n return true;\n }\n\n return false;\n};\n\nconst isListable = (schema: any, name: any) => {\n if (!_.has(schema.attributes, name)) {\n return false;\n }\n\n if (isHidden(schema, name)) {\n return false;\n }\n\n const attribute = schema.attributes[name];\n if (NON_LISTABLES.includes(attribute.type)) {\n return false;\n }\n\n if (isRelation(attribute) && !LISTABLE_RELATIONS.includes(attribute.relationType)) {\n return false;\n }\n\n return true;\n};\n\nconst isSortable = (schema: any, name: any) => {\n if (!_.has(schema.attributes, name)) {\n return false;\n }\n\n if (schema.modelType === 'component' && name === 'id') return false;\n\n const attribute = schema.attributes[name];\n if (NON_SORTABLES.includes(attribute.type)) {\n return false;\n }\n\n if (isRelation(attribute) && !SORTABLE_RELATIONS.includes(attribute.relationType)) {\n return false;\n }\n\n return true;\n};\n\nconst isSearchable = (schema: any, name: any) => {\n return isSortable(schema, name);\n};\n\nconst isVisible = (schema: any, name: any) => {\n if (!_.has(schema.attributes, name)) {\n return false;\n }\n\n if (isHidden(schema, name)) {\n return false;\n }\n\n if (isTimestamp(schema, name) || name === 'id' || name === 'documentId') {\n return false;\n }\n\n if (isPublicationField(name)) {\n return false;\n }\n\n if (isCreatorField(schema, name)) {\n return false;\n }\n\n return true;\n};\n\nconst isPublicationField = (name: any) => PUBLISHED_AT_ATTRIBUTE === name;\n\nconst isTimestamp = (schema: any, name: any) => {\n if (!_.has(schema.attributes, name)) {\n return false;\n }\n\n const timestamps = contentTypesUtils.getTimestamps(schema);\n if (!timestamps || !Array.isArray(timestamps)) {\n return false;\n }\n\n if (timestamps.includes(name)) {\n return true;\n }\n};\n\nconst isCreatorField = (schema: any, name: any) => {\n if (!_.has(schema.attributes, name)) {\n return false;\n }\n\n const creatorFields = contentTypesUtils.getCreatorFields(schema);\n if (!creatorFields || !Array.isArray(creatorFields)) {\n return false;\n }\n\n if (creatorFields.includes(name)) {\n return true;\n }\n};\n\nconst isRelation = (attribute: any) => attribute.type === 'relation';\n\nconst hasRelationAttribute = (schema: any, name: any) => {\n if (!_.has(schema.attributes, name)) {\n return false;\n }\n\n if (isHidden(schema, name)) {\n return false;\n }\n\n if (!isVisible(schema, name)) {\n return false;\n }\n\n return isRelation(schema.attributes[name]);\n};\n\nconst hasEditableAttribute = (schema: any, name: any) => {\n if (!_.has(schema.attributes, name)) {\n return false;\n }\n\n if (isHidden(schema, name)) {\n return false;\n }\n\n if (!isVisible(schema, name)) {\n return false;\n }\n\n return true;\n};\n\nconst findFirstStringAttribute = (schema: any) => {\n return Object.keys(schema.attributes || {}).find((key) => {\n const { type } = schema.attributes[key];\n return type === 'string' && key !== 'id';\n });\n};\n\nconst getDefaultMainField = (schema: any) => findFirstStringAttribute(schema) || 'id';\n\n/**\n * Returns list of all sortable attributes for a given content type schema\n * TODO V5: Refactor non visible fields to be a part of content-manager schema so we can use isSortable instead\n * @param {*} schema\n * @returns\n */\nconst getSortableAttributes = (schema: any) => {\n const validAttributes = Object.keys(schema.attributes).filter((key) => isListable(schema, key));\n\n const model = strapi.getModel(schema.uid);\n const nonVisibleWritableAttributes = intersection(\n getWritableAttributes(model),\n getNonVisibleAttributes(model)\n );\n\n const identifierField = _.has(schema.attributes, 'documentId') ? 'documentId' : 'id';\n return [\n identifierField,\n ...validAttributes,\n ...nonVisibleWritableAttributes,\n CREATED_BY_ATTRIBUTE,\n UPDATED_BY_ATTRIBUTE,\n ];\n};\n\nexport {\n isSortable,\n isVisible,\n isSearchable,\n isRelation,\n isListable,\n hasEditableAttribute,\n hasRelationAttribute,\n getDefaultMainField,\n getSortableAttributes,\n};\n"],"names":["getNonVisibleAttributes","getWritableAttributes","contentTypesUtils","PUBLISHED_AT_ATTRIBUTE","CREATED_BY_ATTRIBUTE","UPDATED_BY_ATTRIBUTE","constants","NON_SORTABLES","SORTABLE_RELATIONS","NON_LISTABLES","LISTABLE_RELATIONS","isHidden","schema","name","_","has","attributes","get","isListable","attribute","includes","type","isRelation","relationType","isSortable","modelType","isSearchable","isVisible","isTimestamp","isPublicationField","isCreatorField","timestamps","getTimestamps","Array","isArray","creatorFields","getCreatorFields","hasRelationAttribute","hasEditableAttribute","findFirstStringAttribute","Object","keys","find","key","getDefaultMainField","getSortableAttributes","validAttributes","filter","model","strapi","getModel","uid","nonVisibleWritableAttributes","intersection","identifierField"],"mappings":"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"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import _ from 'lodash';
|
|
2
|
-
import { intersection } from 'lodash/fp';
|
|
1
|
+
import _, { intersection } from 'lodash';
|
|
3
2
|
import { contentTypes } from '@strapi/utils';
|
|
4
3
|
|
|
5
4
|
const { getNonVisibleAttributes, getWritableAttributes } = contentTypes;
|
|
@@ -161,7 +160,7 @@ const getDefaultMainField = (schema)=>findFirstStringAttribute(schema) || 'id';
|
|
|
161
160
|
*/ const getSortableAttributes = (schema)=>{
|
|
162
161
|
const validAttributes = Object.keys(schema.attributes).filter((key)=>isListable(schema, key));
|
|
163
162
|
const model = strapi.getModel(schema.uid);
|
|
164
|
-
const nonVisibleWritableAttributes = intersection(
|
|
163
|
+
const nonVisibleWritableAttributes = intersection(getWritableAttributes(model), getNonVisibleAttributes(model));
|
|
165
164
|
const identifierField = _.has(schema.attributes, 'documentId') ? 'documentId' : 'id';
|
|
166
165
|
return [
|
|
167
166
|
identifierField,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attributes.mjs","sources":["../../../../../server/src/services/utils/configuration/attributes.ts"],"sourcesContent":["import _ from 'lodash';\nimport { intersection } from 'lodash/fp';\nimport { contentTypes as contentTypesUtils } from '@strapi/utils';\n\nconst { getNonVisibleAttributes, getWritableAttributes } = contentTypesUtils;\nconst { PUBLISHED_AT_ATTRIBUTE, CREATED_BY_ATTRIBUTE, UPDATED_BY_ATTRIBUTE } =\n contentTypesUtils.constants;\n\nconst NON_SORTABLES = ['component', 'json', 'media', 'richtext', 'dynamiczone', 'blocks'];\nconst SORTABLE_RELATIONS = ['oneToOne', 'manyToOne'];\n\nconst NON_LISTABLES = ['json', 'password', 'richtext', 'dynamiczone', 'blocks'];\nconst LISTABLE_RELATIONS = ['oneToOne', 'oneToMany', 'manyToOne', 'manyToMany'];\n\n// hidden fields are fields that are configured to be hidden from list, and edit views\nconst isHidden = (schema: any, name: any) => {\n if (!_.has(schema.attributes, name)) {\n return false;\n }\n\n const isHidden = _.get(schema, ['config', 'attributes', name, 'hidden'], false);\n if (isHidden === true) {\n return true;\n }\n\n return false;\n};\n\nconst isListable = (schema: any, name: any) => {\n if (!_.has(schema.attributes, name)) {\n return false;\n }\n\n if (isHidden(schema, name)) {\n return false;\n }\n\n const attribute = schema.attributes[name];\n if (NON_LISTABLES.includes(attribute.type)) {\n return false;\n }\n\n if (isRelation(attribute) && !LISTABLE_RELATIONS.includes(attribute.relationType)) {\n return false;\n }\n\n return true;\n};\n\nconst isSortable = (schema: any, name: any) => {\n if (!_.has(schema.attributes, name)) {\n return false;\n }\n\n if (schema.modelType === 'component' && name === 'id') return false;\n\n const attribute = schema.attributes[name];\n if (NON_SORTABLES.includes(attribute.type)) {\n return false;\n }\n\n if (isRelation(attribute) && !SORTABLE_RELATIONS.includes(attribute.relationType)) {\n return false;\n }\n\n return true;\n};\n\nconst isSearchable = (schema: any, name: any) => {\n return isSortable(schema, name);\n};\n\nconst isVisible = (schema: any, name: any) => {\n if (!_.has(schema.attributes, name)) {\n return false;\n }\n\n if (isHidden(schema, name)) {\n return false;\n }\n\n if (isTimestamp(schema, name) || name === 'id' || name === 'documentId') {\n return false;\n }\n\n if (isPublicationField(name)) {\n return false;\n }\n\n if (isCreatorField(schema, name)) {\n return false;\n }\n\n return true;\n};\n\nconst isPublicationField = (name: any) => PUBLISHED_AT_ATTRIBUTE === name;\n\nconst isTimestamp = (schema: any, name: any) => {\n if (!_.has(schema.attributes, name)) {\n return false;\n }\n\n const timestamps = contentTypesUtils.getTimestamps(schema);\n if (!timestamps || !Array.isArray(timestamps)) {\n return false;\n }\n\n if (timestamps.includes(name)) {\n return true;\n }\n};\n\nconst isCreatorField = (schema: any, name: any) => {\n if (!_.has(schema.attributes, name)) {\n return false;\n }\n\n const creatorFields = contentTypesUtils.getCreatorFields(schema);\n if (!creatorFields || !Array.isArray(creatorFields)) {\n return false;\n }\n\n if (creatorFields.includes(name)) {\n return true;\n }\n};\n\nconst isRelation = (attribute: any) => attribute.type === 'relation';\n\nconst hasRelationAttribute = (schema: any, name: any) => {\n if (!_.has(schema.attributes, name)) {\n return false;\n }\n\n if (isHidden(schema, name)) {\n return false;\n }\n\n if (!isVisible(schema, name)) {\n return false;\n }\n\n return isRelation(schema.attributes[name]);\n};\n\nconst hasEditableAttribute = (schema: any, name: any) => {\n if (!_.has(schema.attributes, name)) {\n return false;\n }\n\n if (isHidden(schema, name)) {\n return false;\n }\n\n if (!isVisible(schema, name)) {\n return false;\n }\n\n return true;\n};\n\nconst findFirstStringAttribute = (schema: any) => {\n return Object.keys(schema.attributes || {}).find((key) => {\n const { type } = schema.attributes[key];\n return type === 'string' && key !== 'id';\n });\n};\n\nconst getDefaultMainField = (schema: any) => findFirstStringAttribute(schema) || 'id';\n\n/**\n * Returns list of all sortable attributes for a given content type schema\n * TODO V5: Refactor non visible fields to be a part of content-manager schema so we can use isSortable instead\n * @param {*} schema\n * @returns\n */\nconst getSortableAttributes = (schema: any) => {\n const validAttributes = Object.keys(schema.attributes).filter((key) => isListable(schema, key));\n\n const model = strapi.getModel(schema.uid);\n const nonVisibleWritableAttributes = intersection(\n getNonVisibleAttributes(model),\n getWritableAttributes(model)\n );\n\n const identifierField = _.has(schema.attributes, 'documentId') ? 'documentId' : 'id';\n return [\n identifierField,\n ...validAttributes,\n ...nonVisibleWritableAttributes,\n CREATED_BY_ATTRIBUTE,\n UPDATED_BY_ATTRIBUTE,\n ];\n};\n\nexport {\n isSortable,\n isVisible,\n isSearchable,\n isRelation,\n isListable,\n hasEditableAttribute,\n hasRelationAttribute,\n getDefaultMainField,\n getSortableAttributes,\n};\n"],"names":["getNonVisibleAttributes","getWritableAttributes","contentTypesUtils","PUBLISHED_AT_ATTRIBUTE","CREATED_BY_ATTRIBUTE","UPDATED_BY_ATTRIBUTE","constants","NON_SORTABLES","SORTABLE_RELATIONS","NON_LISTABLES","LISTABLE_RELATIONS","isHidden","schema","name","_","has","attributes","get","isListable","attribute","includes","type","isRelation","relationType","isSortable","modelType","isSearchable","isVisible","isTimestamp","isPublicationField","isCreatorField","timestamps","getTimestamps","Array","isArray","creatorFields","getCreatorFields","hasRelationAttribute","hasEditableAttribute","findFirstStringAttribute","Object","keys","find","key","getDefaultMainField","getSortableAttributes","validAttributes","filter","model","strapi","getModel","uid","nonVisibleWritableAttributes","intersection","identifierField"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"attributes.mjs","sources":["../../../../../server/src/services/utils/configuration/attributes.ts"],"sourcesContent":["import _, { intersection } from 'lodash';\n\nimport { contentTypes as contentTypesUtils } from '@strapi/utils';\n\nconst { getNonVisibleAttributes, getWritableAttributes } = contentTypesUtils;\nconst { PUBLISHED_AT_ATTRIBUTE, CREATED_BY_ATTRIBUTE, UPDATED_BY_ATTRIBUTE } =\n contentTypesUtils.constants;\n\nconst NON_SORTABLES = ['component', 'json', 'media', 'richtext', 'dynamiczone', 'blocks'];\nconst SORTABLE_RELATIONS = ['oneToOne', 'manyToOne'];\n\nconst NON_LISTABLES = ['json', 'password', 'richtext', 'dynamiczone', 'blocks'];\nconst LISTABLE_RELATIONS = ['oneToOne', 'oneToMany', 'manyToOne', 'manyToMany'];\n\n// hidden fields are fields that are configured to be hidden from list, and edit views\nconst isHidden = (schema: any, name: any) => {\n if (!_.has(schema.attributes, name)) {\n return false;\n }\n\n const isHidden = _.get(schema, ['config', 'attributes', name, 'hidden'], false);\n if (isHidden === true) {\n return true;\n }\n\n return false;\n};\n\nconst isListable = (schema: any, name: any) => {\n if (!_.has(schema.attributes, name)) {\n return false;\n }\n\n if (isHidden(schema, name)) {\n return false;\n }\n\n const attribute = schema.attributes[name];\n if (NON_LISTABLES.includes(attribute.type)) {\n return false;\n }\n\n if (isRelation(attribute) && !LISTABLE_RELATIONS.includes(attribute.relationType)) {\n return false;\n }\n\n return true;\n};\n\nconst isSortable = (schema: any, name: any) => {\n if (!_.has(schema.attributes, name)) {\n return false;\n }\n\n if (schema.modelType === 'component' && name === 'id') return false;\n\n const attribute = schema.attributes[name];\n if (NON_SORTABLES.includes(attribute.type)) {\n return false;\n }\n\n if (isRelation(attribute) && !SORTABLE_RELATIONS.includes(attribute.relationType)) {\n return false;\n }\n\n return true;\n};\n\nconst isSearchable = (schema: any, name: any) => {\n return isSortable(schema, name);\n};\n\nconst isVisible = (schema: any, name: any) => {\n if (!_.has(schema.attributes, name)) {\n return false;\n }\n\n if (isHidden(schema, name)) {\n return false;\n }\n\n if (isTimestamp(schema, name) || name === 'id' || name === 'documentId') {\n return false;\n }\n\n if (isPublicationField(name)) {\n return false;\n }\n\n if (isCreatorField(schema, name)) {\n return false;\n }\n\n return true;\n};\n\nconst isPublicationField = (name: any) => PUBLISHED_AT_ATTRIBUTE === name;\n\nconst isTimestamp = (schema: any, name: any) => {\n if (!_.has(schema.attributes, name)) {\n return false;\n }\n\n const timestamps = contentTypesUtils.getTimestamps(schema);\n if (!timestamps || !Array.isArray(timestamps)) {\n return false;\n }\n\n if (timestamps.includes(name)) {\n return true;\n }\n};\n\nconst isCreatorField = (schema: any, name: any) => {\n if (!_.has(schema.attributes, name)) {\n return false;\n }\n\n const creatorFields = contentTypesUtils.getCreatorFields(schema);\n if (!creatorFields || !Array.isArray(creatorFields)) {\n return false;\n }\n\n if (creatorFields.includes(name)) {\n return true;\n }\n};\n\nconst isRelation = (attribute: any) => attribute.type === 'relation';\n\nconst hasRelationAttribute = (schema: any, name: any) => {\n if (!_.has(schema.attributes, name)) {\n return false;\n }\n\n if (isHidden(schema, name)) {\n return false;\n }\n\n if (!isVisible(schema, name)) {\n return false;\n }\n\n return isRelation(schema.attributes[name]);\n};\n\nconst hasEditableAttribute = (schema: any, name: any) => {\n if (!_.has(schema.attributes, name)) {\n return false;\n }\n\n if (isHidden(schema, name)) {\n return false;\n }\n\n if (!isVisible(schema, name)) {\n return false;\n }\n\n return true;\n};\n\nconst findFirstStringAttribute = (schema: any) => {\n return Object.keys(schema.attributes || {}).find((key) => {\n const { type } = schema.attributes[key];\n return type === 'string' && key !== 'id';\n });\n};\n\nconst getDefaultMainField = (schema: any) => findFirstStringAttribute(schema) || 'id';\n\n/**\n * Returns list of all sortable attributes for a given content type schema\n * TODO V5: Refactor non visible fields to be a part of content-manager schema so we can use isSortable instead\n * @param {*} schema\n * @returns\n */\nconst getSortableAttributes = (schema: any) => {\n const validAttributes = Object.keys(schema.attributes).filter((key) => isListable(schema, key));\n\n const model = strapi.getModel(schema.uid);\n const nonVisibleWritableAttributes = intersection(\n getWritableAttributes(model),\n getNonVisibleAttributes(model)\n );\n\n const identifierField = _.has(schema.attributes, 'documentId') ? 'documentId' : 'id';\n return [\n identifierField,\n ...validAttributes,\n ...nonVisibleWritableAttributes,\n CREATED_BY_ATTRIBUTE,\n UPDATED_BY_ATTRIBUTE,\n ];\n};\n\nexport {\n isSortable,\n isVisible,\n isSearchable,\n isRelation,\n isListable,\n hasEditableAttribute,\n hasRelationAttribute,\n getDefaultMainField,\n getSortableAttributes,\n};\n"],"names":["getNonVisibleAttributes","getWritableAttributes","contentTypesUtils","PUBLISHED_AT_ATTRIBUTE","CREATED_BY_ATTRIBUTE","UPDATED_BY_ATTRIBUTE","constants","NON_SORTABLES","SORTABLE_RELATIONS","NON_LISTABLES","LISTABLE_RELATIONS","isHidden","schema","name","_","has","attributes","get","isListable","attribute","includes","type","isRelation","relationType","isSortable","modelType","isSearchable","isVisible","isTimestamp","isPublicationField","isCreatorField","timestamps","getTimestamps","Array","isArray","creatorFields","getCreatorFields","hasRelationAttribute","hasEditableAttribute","findFirstStringAttribute","Object","keys","find","key","getDefaultMainField","getSortableAttributes","validAttributes","filter","model","strapi","getModel","uid","nonVisibleWritableAttributes","intersection","identifierField"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var _ = require('lodash');
|
|
4
4
|
var strapiUtils = require('@strapi/utils');
|
|
5
5
|
var qs = require('qs');
|
|
6
6
|
var attributes = require('./attributes.js');
|
|
@@ -26,10 +26,7 @@ const settingsFields = [
|
|
|
26
26
|
'defaultSortOrder',
|
|
27
27
|
'relationOpenMode'
|
|
28
28
|
];
|
|
29
|
-
const getModelSettings =
|
|
30
|
-
fp.propOr({}, 'config.settings'),
|
|
31
|
-
fp.pick(settingsFields)
|
|
32
|
-
]);
|
|
29
|
+
const getModelSettings = (model)=>_.pick(_.get(model, 'config.settings', {}), settingsFields);
|
|
33
30
|
async function isValidDefaultSort(schema, value) {
|
|
34
31
|
const parsedValue = qs__default.default.parse(value);
|
|
35
32
|
const omitNonSortableAttributes = ({ schema, key }, { remove })=>{
|
|
@@ -43,7 +40,7 @@ async function isValidDefaultSort(schema, value) {
|
|
|
43
40
|
getModel: strapi.getModel.bind(strapi)
|
|
44
41
|
}, parsedValue);
|
|
45
42
|
// If any of the keys has been removed, the sort attribute is not valid
|
|
46
|
-
return
|
|
43
|
+
return _.isEqual(parsedValue, sanitizedValue);
|
|
47
44
|
}
|
|
48
45
|
const createDefaultSettings = async (schema)=>{
|
|
49
46
|
const defaultField = attributes.getDefaultMainField(schema);
|
|
@@ -56,7 +53,7 @@ const createDefaultSettings = async (schema)=>{
|
|
|
56
53
|
};
|
|
57
54
|
};
|
|
58
55
|
const syncSettings = async (configuration, schema)=>{
|
|
59
|
-
if (
|
|
56
|
+
if (_.isEmpty(configuration.settings)) return createDefaultSettings(schema);
|
|
60
57
|
const defaultField = attributes.getDefaultMainField(schema);
|
|
61
58
|
const { mainField = defaultField, defaultSortBy = defaultField } = configuration.settings || {};
|
|
62
59
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings.js","sources":["../../../../../server/src/services/utils/configuration/settings.ts"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"settings.js","sources":["../../../../../server/src/services/utils/configuration/settings.ts"],"sourcesContent":["import { get, pick, isEmpty, isEqual } from 'lodash';\n\nimport { traverse } from '@strapi/utils';\nimport qs from 'qs';\nimport { isSortable, getDefaultMainField, getSortableAttributes } from './attributes';\n\n/** General settings */\nconst DEFAULT_SETTINGS = {\n bulkable: true,\n filterable: true,\n searchable: true,\n pageSize: 10,\n relationOpenMode: 'modal' as const,\n};\n\nconst settingsFields = [\n 'searchable',\n 'filterable',\n 'bulkable',\n 'pageSize',\n 'mainField',\n 'defaultSortBy',\n 'defaultSortOrder',\n 'relationOpenMode',\n];\n\nconst getModelSettings = (model: unknown) =>\n pick(get(model, 'config.settings', {}), settingsFields);\n\nasync function isValidDefaultSort(schema: any, value: any) {\n const parsedValue = qs.parse(value);\n\n const omitNonSortableAttributes = ({ schema, key }: any, { remove }: any) => {\n const sortableAttributes = getSortableAttributes(schema);\n if (!sortableAttributes.includes(key)) {\n remove(key);\n }\n };\n\n const sanitizedValue = await traverse.traverseQuerySort(\n omitNonSortableAttributes,\n { schema, getModel: strapi.getModel.bind(strapi) },\n parsedValue\n );\n\n // If any of the keys has been removed, the sort attribute is not valid\n return isEqual(parsedValue, sanitizedValue);\n}\n\nconst createDefaultSettings = async (schema: any) => {\n const defaultField = getDefaultMainField(schema);\n\n return {\n ...DEFAULT_SETTINGS,\n mainField: defaultField,\n defaultSortBy: defaultField,\n defaultSortOrder: 'ASC',\n ...getModelSettings(schema),\n };\n};\n\nconst syncSettings = async (configuration: any, schema: any) => {\n if (isEmpty(configuration.settings)) return createDefaultSettings(schema);\n\n const defaultField = getDefaultMainField(schema);\n\n const { mainField = defaultField, defaultSortBy = defaultField } = configuration.settings || {};\n\n return {\n ...configuration.settings,\n mainField: isSortable(schema, mainField) ? mainField : defaultField,\n defaultSortBy: (await isValidDefaultSort(schema, defaultSortBy)) ? defaultSortBy : defaultField,\n };\n};\n\nexport { isValidDefaultSort, createDefaultSettings, syncSettings };\n"],"names":["DEFAULT_SETTINGS","bulkable","filterable","searchable","pageSize","relationOpenMode","settingsFields","getModelSettings","model","pick","get","isValidDefaultSort","schema","value","parsedValue","qs","parse","omitNonSortableAttributes","key","remove","sortableAttributes","getSortableAttributes","includes","sanitizedValue","traverse","traverseQuerySort","getModel","strapi","bind","isEqual","createDefaultSettings","defaultField","getDefaultMainField","mainField","defaultSortBy","defaultSortOrder","syncSettings","configuration","isEmpty","settings","isSortable"],"mappings":";;;;;;;;;;;AAMA,wBACA,MAAMA,gBAAAA,GAAmB;IACvBC,QAAAA,EAAU,IAAA;IACVC,UAAAA,EAAY,IAAA;IACZC,UAAAA,EAAY,IAAA;IACZC,QAAAA,EAAU,EAAA;IACVC,gBAAAA,EAAkB;AACpB,CAAA;AAEA,MAAMC,cAAAA,GAAiB;AACrB,IAAA,YAAA;AACA,IAAA,YAAA;AACA,IAAA,UAAA;AACA,IAAA,UAAA;AACA,IAAA,WAAA;AACA,IAAA,eAAA;AACA,IAAA,kBAAA;AACA,IAAA;AACD,CAAA;AAED,MAAMC,gBAAAA,GAAmB,CAACC,KAAAA,GACxBC,MAAAA,CAAKC,MAAIF,KAAAA,EAAO,iBAAA,EAAmB,EAAC,CAAA,EAAIF,cAAAA,CAAAA;AAE1C,eAAeK,kBAAAA,CAAmBC,MAAW,EAAEC,KAAU,EAAA;IACvD,MAAMC,WAAAA,GAAcC,mBAAAA,CAAGC,KAAK,CAACH,KAAAA,CAAAA;IAE7B,MAAMI,yBAAAA,GAA4B,CAAC,EAAEL,MAAM,EAAEM,GAAG,EAAO,EAAE,EAAEC,MAAM,EAAO,GAAA;AACtE,QAAA,MAAMC,qBAAqBC,gCAAAA,CAAsBT,MAAAA,CAAAA;AACjD,QAAA,IAAI,CAACQ,kBAAAA,CAAmBE,QAAQ,CAACJ,GAAAA,CAAAA,EAAM;YACrCC,MAAAA,CAAOD,GAAAA,CAAAA;AACT,QAAA;AACF,IAAA,CAAA;AAEA,IAAA,MAAMK,cAAAA,GAAiB,MAAMC,oBAAAA,CAASC,iBAAiB,CACrDR,yBAAAA,EACA;AAAEL,QAAAA,MAAAA;AAAQc,QAAAA,QAAAA,EAAUC,MAAAA,CAAOD,QAAQ,CAACE,IAAI,CAACD,MAAAA;KAAQ,EACjDb,WAAAA,CAAAA;;AAIF,IAAA,OAAOe,UAAQf,WAAAA,EAAaS,cAAAA,CAAAA;AAC9B;AAEA,MAAMO,wBAAwB,OAAOlB,MAAAA,GAAAA;AACnC,IAAA,MAAMmB,eAAeC,8BAAAA,CAAoBpB,MAAAA,CAAAA;IAEzC,OAAO;AACL,QAAA,GAAGZ,gBAAgB;QACnBiC,SAAAA,EAAWF,YAAAA;QACXG,aAAAA,EAAeH,YAAAA;QACfI,gBAAAA,EAAkB,KAAA;AAClB,QAAA,GAAG5B,iBAAiBK,MAAAA;AACtB,KAAA;AACF;AAEA,MAAMwB,YAAAA,GAAe,OAAOC,aAAAA,EAAoBzB,MAAAA,GAAAA;AAC9C,IAAA,IAAI0B,SAAAA,CAAQD,aAAAA,CAAcE,QAAQ,CAAA,EAAG,OAAOT,qBAAAA,CAAsBlB,MAAAA,CAAAA;AAElE,IAAA,MAAMmB,eAAeC,8BAAAA,CAAoBpB,MAAAA,CAAAA;IAEzC,MAAM,EAAEqB,SAAAA,GAAYF,YAAY,EAAEG,aAAAA,GAAgBH,YAAY,EAAE,GAAGM,aAAAA,CAAcE,QAAQ,IAAI,EAAC;IAE9F,OAAO;AACL,QAAA,GAAGF,cAAcE,QAAQ;QACzBN,SAAAA,EAAWO,qBAAAA,CAAW5B,MAAAA,EAAQqB,SAAAA,CAAAA,GAAaA,SAAAA,GAAYF,YAAAA;AACvDG,QAAAA,aAAAA,EAAe,MAAOvB,kBAAAA,CAAmBC,MAAAA,EAAQsB,iBAAkBA,aAAAA,GAAgBH;AACrF,KAAA;AACF;;;;;;"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { isEqual, isEmpty, pick, get } from 'lodash';
|
|
2
2
|
import { traverse } from '@strapi/utils';
|
|
3
3
|
import qs from 'qs';
|
|
4
4
|
import { getDefaultMainField, isSortable, getSortableAttributes } from './attributes.mjs';
|
|
@@ -20,10 +20,7 @@ const settingsFields = [
|
|
|
20
20
|
'defaultSortOrder',
|
|
21
21
|
'relationOpenMode'
|
|
22
22
|
];
|
|
23
|
-
const getModelSettings =
|
|
24
|
-
propOr({}, 'config.settings'),
|
|
25
|
-
pick(settingsFields)
|
|
26
|
-
]);
|
|
23
|
+
const getModelSettings = (model)=>pick(get(model, 'config.settings', {}), settingsFields);
|
|
27
24
|
async function isValidDefaultSort(schema, value) {
|
|
28
25
|
const parsedValue = qs.parse(value);
|
|
29
26
|
const omitNonSortableAttributes = ({ schema, key }, { remove })=>{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings.mjs","sources":["../../../../../server/src/services/utils/configuration/settings.ts"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"settings.mjs","sources":["../../../../../server/src/services/utils/configuration/settings.ts"],"sourcesContent":["import { get, pick, isEmpty, isEqual } from 'lodash';\n\nimport { traverse } from '@strapi/utils';\nimport qs from 'qs';\nimport { isSortable, getDefaultMainField, getSortableAttributes } from './attributes';\n\n/** General settings */\nconst DEFAULT_SETTINGS = {\n bulkable: true,\n filterable: true,\n searchable: true,\n pageSize: 10,\n relationOpenMode: 'modal' as const,\n};\n\nconst settingsFields = [\n 'searchable',\n 'filterable',\n 'bulkable',\n 'pageSize',\n 'mainField',\n 'defaultSortBy',\n 'defaultSortOrder',\n 'relationOpenMode',\n];\n\nconst getModelSettings = (model: unknown) =>\n pick(get(model, 'config.settings', {}), settingsFields);\n\nasync function isValidDefaultSort(schema: any, value: any) {\n const parsedValue = qs.parse(value);\n\n const omitNonSortableAttributes = ({ schema, key }: any, { remove }: any) => {\n const sortableAttributes = getSortableAttributes(schema);\n if (!sortableAttributes.includes(key)) {\n remove(key);\n }\n };\n\n const sanitizedValue = await traverse.traverseQuerySort(\n omitNonSortableAttributes,\n { schema, getModel: strapi.getModel.bind(strapi) },\n parsedValue\n );\n\n // If any of the keys has been removed, the sort attribute is not valid\n return isEqual(parsedValue, sanitizedValue);\n}\n\nconst createDefaultSettings = async (schema: any) => {\n const defaultField = getDefaultMainField(schema);\n\n return {\n ...DEFAULT_SETTINGS,\n mainField: defaultField,\n defaultSortBy: defaultField,\n defaultSortOrder: 'ASC',\n ...getModelSettings(schema),\n };\n};\n\nconst syncSettings = async (configuration: any, schema: any) => {\n if (isEmpty(configuration.settings)) return createDefaultSettings(schema);\n\n const defaultField = getDefaultMainField(schema);\n\n const { mainField = defaultField, defaultSortBy = defaultField } = configuration.settings || {};\n\n return {\n ...configuration.settings,\n mainField: isSortable(schema, mainField) ? mainField : defaultField,\n defaultSortBy: (await isValidDefaultSort(schema, defaultSortBy)) ? defaultSortBy : defaultField,\n };\n};\n\nexport { isValidDefaultSort, createDefaultSettings, syncSettings };\n"],"names":["DEFAULT_SETTINGS","bulkable","filterable","searchable","pageSize","relationOpenMode","settingsFields","getModelSettings","model","pick","get","isValidDefaultSort","schema","value","parsedValue","qs","parse","omitNonSortableAttributes","key","remove","sortableAttributes","getSortableAttributes","includes","sanitizedValue","traverse","traverseQuerySort","getModel","strapi","bind","isEqual","createDefaultSettings","defaultField","getDefaultMainField","mainField","defaultSortBy","defaultSortOrder","syncSettings","configuration","isEmpty","settings","isSortable"],"mappings":";;;;;AAMA,wBACA,MAAMA,gBAAAA,GAAmB;IACvBC,QAAAA,EAAU,IAAA;IACVC,UAAAA,EAAY,IAAA;IACZC,UAAAA,EAAY,IAAA;IACZC,QAAAA,EAAU,EAAA;IACVC,gBAAAA,EAAkB;AACpB,CAAA;AAEA,MAAMC,cAAAA,GAAiB;AACrB,IAAA,YAAA;AACA,IAAA,YAAA;AACA,IAAA,UAAA;AACA,IAAA,UAAA;AACA,IAAA,WAAA;AACA,IAAA,eAAA;AACA,IAAA,kBAAA;AACA,IAAA;AACD,CAAA;AAED,MAAMC,gBAAAA,GAAmB,CAACC,KAAAA,GACxBC,IAAAA,CAAKC,IAAIF,KAAAA,EAAO,iBAAA,EAAmB,EAAC,CAAA,EAAIF,cAAAA,CAAAA;AAE1C,eAAeK,kBAAAA,CAAmBC,MAAW,EAAEC,KAAU,EAAA;IACvD,MAAMC,WAAAA,GAAcC,EAAAA,CAAGC,KAAK,CAACH,KAAAA,CAAAA;IAE7B,MAAMI,yBAAAA,GAA4B,CAAC,EAAEL,MAAM,EAAEM,GAAG,EAAO,EAAE,EAAEC,MAAM,EAAO,GAAA;AACtE,QAAA,MAAMC,qBAAqBC,qBAAAA,CAAsBT,MAAAA,CAAAA;AACjD,QAAA,IAAI,CAACQ,kBAAAA,CAAmBE,QAAQ,CAACJ,GAAAA,CAAAA,EAAM;YACrCC,MAAAA,CAAOD,GAAAA,CAAAA;AACT,QAAA;AACF,IAAA,CAAA;AAEA,IAAA,MAAMK,cAAAA,GAAiB,MAAMC,QAAAA,CAASC,iBAAiB,CACrDR,yBAAAA,EACA;AAAEL,QAAAA,MAAAA;AAAQc,QAAAA,QAAAA,EAAUC,MAAAA,CAAOD,QAAQ,CAACE,IAAI,CAACD,MAAAA;KAAQ,EACjDb,WAAAA,CAAAA;;AAIF,IAAA,OAAOe,QAAQf,WAAAA,EAAaS,cAAAA,CAAAA;AAC9B;AAEA,MAAMO,wBAAwB,OAAOlB,MAAAA,GAAAA;AACnC,IAAA,MAAMmB,eAAeC,mBAAAA,CAAoBpB,MAAAA,CAAAA;IAEzC,OAAO;AACL,QAAA,GAAGZ,gBAAgB;QACnBiC,SAAAA,EAAWF,YAAAA;QACXG,aAAAA,EAAeH,YAAAA;QACfI,gBAAAA,EAAkB,KAAA;AAClB,QAAA,GAAG5B,iBAAiBK,MAAAA;AACtB,KAAA;AACF;AAEA,MAAMwB,YAAAA,GAAe,OAAOC,aAAAA,EAAoBzB,MAAAA,GAAAA;AAC9C,IAAA,IAAI0B,OAAAA,CAAQD,aAAAA,CAAcE,QAAQ,CAAA,EAAG,OAAOT,qBAAAA,CAAsBlB,MAAAA,CAAAA;AAElE,IAAA,MAAMmB,eAAeC,mBAAAA,CAAoBpB,MAAAA,CAAAA;IAEzC,MAAM,EAAEqB,SAAAA,GAAYF,YAAY,EAAEG,aAAAA,GAAgBH,YAAY,EAAE,GAAGM,aAAAA,CAAcE,QAAQ,IAAI,EAAC;IAE9F,OAAO;AACL,QAAA,GAAGF,cAAcE,QAAQ;QACzBN,SAAAA,EAAWO,UAAAA,CAAW5B,MAAAA,EAAQqB,SAAAA,CAAAA,GAAaA,SAAAA,GAAYF,YAAAA;AACvDG,QAAAA,aAAAA,EAAe,MAAOvB,kBAAAA,CAAmBC,MAAAA,EAAQsB,iBAAkBA,aAAAA,GAAgBH;AACrF,KAAA;AACF;;;;"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var _ = require('lodash');
|
|
4
4
|
var strapiUtils = require('@strapi/utils');
|
|
5
5
|
var draftRelations = require('./draft-relations.js');
|
|
6
6
|
|
|
@@ -25,7 +25,6 @@ function _interopNamespace(e) {
|
|
|
25
25
|
var strapiUtils__namespace = /*#__PURE__*/_interopNamespace(strapiUtils);
|
|
26
26
|
|
|
27
27
|
const { isVisibleAttribute, hasDraftAndPublish } = strapiUtils__namespace.contentTypes;
|
|
28
|
-
const isLocalizedContentType = (model)=>model.pluginOptions?.i18n?.localized === true;
|
|
29
28
|
const toPublishedDocumentKey = (documentId, locale)=>`${documentId}:${locale ?? ''}`;
|
|
30
29
|
const mergeCollectedLinks = (left, right)=>({
|
|
31
30
|
m2mLinks: [
|
|
@@ -69,8 +68,8 @@ const collectDraftRelationLinks = (strapi, entity, uid, documentLocale)=>{
|
|
|
69
68
|
if (attribute.target === uid || !isVisibleAttribute(model, attributeName)) {
|
|
70
69
|
return collected;
|
|
71
70
|
}
|
|
72
|
-
const targetIsLocalized = isLocalizedContentType(targetModel);
|
|
73
|
-
const relatedEntries =
|
|
71
|
+
const targetIsLocalized = strapi.localization.isLocalizedContentType(targetModel);
|
|
72
|
+
const relatedEntries = _.castArray(value);
|
|
74
73
|
const links = relatedEntries.map((entry)=>toDraftRelationLink(entry, attribute.target, targetIsLocalized, locale)).filter((link)=>link !== null);
|
|
75
74
|
if (links.length === 0) {
|
|
76
75
|
return collected;
|
|
@@ -94,7 +93,7 @@ const collectDraftRelationLinks = (strapi, entity, uid, documentLocale)=>{
|
|
|
94
93
|
}
|
|
95
94
|
case 'component':
|
|
96
95
|
{
|
|
97
|
-
return
|
|
96
|
+
return _.castArray(value).reduce((componentCollected, componentValue)=>mergeCollectedLinks(componentCollected, collectDraftRelationLinks(strapi, componentValue, attribute.component, locale)), collected);
|
|
98
97
|
}
|
|
99
98
|
case 'dynamiczone':
|
|
100
99
|
{
|
|
@@ -122,14 +121,16 @@ const countLinksToUnpublishedDocuments = async (strapi, links)=>{
|
|
|
122
121
|
}, new Map());
|
|
123
122
|
const counts = await Promise.all(Array.from(linksByTarget.entries()).map(async ([targetUid, targetLinks])=>{
|
|
124
123
|
const targetModel = strapi.getModel(targetUid);
|
|
125
|
-
const targetIsLocalized = isLocalizedContentType(targetModel);
|
|
124
|
+
const targetIsLocalized = strapi.localization.isLocalizedContentType(targetModel);
|
|
126
125
|
const documentIds = [
|
|
127
126
|
...new Set(targetLinks.map((link)=>link.documentId))
|
|
128
127
|
];
|
|
129
128
|
const publishedRows = await strapi.db.query(targetUid).findMany({
|
|
130
|
-
select: [
|
|
129
|
+
select: targetIsLocalized === true ? [
|
|
131
130
|
'documentId',
|
|
132
131
|
'locale'
|
|
132
|
+
] : [
|
|
133
|
+
'documentId'
|
|
133
134
|
],
|
|
134
135
|
where: {
|
|
135
136
|
documentId: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"draft.js","sources":["../../../../server/src/services/utils/draft.ts"],"sourcesContent":["import { castArray } from 'lodash/fp';\nimport * as strapiUtils from '@strapi/utils';\nimport type { Core, UID } from '@strapi/types';\n\nimport { type DraftRelationCounts, isBidirectionalManyToMany } from './draft-relations';\n\nconst { isVisibleAttribute, hasDraftAndPublish } = strapiUtils.contentTypes;\n\nconst isLocalizedContentType = (model: { pluginOptions?: unknown }) =>\n (model.pluginOptions as { i18n?: { localized?: boolean } } | undefined)?.i18n?.localized === true;\n\ntype DraftRelationLinkRef = {\n targetUid: UID.Schema;\n documentId: string;\n locale?: string | null;\n};\n\ntype CollectedDraftRelationLinks = {\n m2mLinks: DraftRelationLinkRef[];\n xToOneLinks: DraftRelationLinkRef[];\n};\n\nconst toPublishedDocumentKey = (documentId: string, locale?: string | null) =>\n `${documentId}:${locale ?? ''}`;\n\nconst mergeCollectedLinks = (\n left: CollectedDraftRelationLinks,\n right: CollectedDraftRelationLinks\n): CollectedDraftRelationLinks => ({\n m2mLinks: [...left.m2mLinks, ...right.m2mLinks],\n xToOneLinks: [...left.xToOneLinks, ...right.xToOneLinks],\n});\n\nconst toDraftRelationLink = (\n entry: { documentId?: string; locale?: string | null },\n targetUid: UID.Schema,\n targetIsLocalized: boolean,\n documentLocale?: string | null\n): DraftRelationLinkRef | null => {\n if (!entry?.documentId) {\n return null;\n }\n\n return {\n targetUid,\n documentId: entry.documentId,\n locale: targetIsLocalized ? (entry.locale ?? documentLocale) : null,\n };\n};\n\nconst collectDraftRelationLinks = (\n strapi: Core.Strapi,\n entity: any,\n uid: UID.Schema,\n documentLocale?: string | null\n): CollectedDraftRelationLinks => {\n const model = strapi.getModel(uid);\n const locale = entity.locale ?? documentLocale;\n\n return Object.keys(model.attributes).reduce(\n (collected, attributeName) => {\n const attribute: any = model.attributes[attributeName];\n const value = entity[attributeName];\n\n if (!value) {\n return collected;\n }\n\n switch (attribute.type) {\n case 'relation': {\n if (!('target' in attribute)) {\n return collected;\n }\n\n const targetModel = strapi.getModel(attribute.target as UID.Schema);\n if (!targetModel || !hasDraftAndPublish(targetModel)) {\n return collected;\n }\n\n if (attribute.target === uid || !isVisibleAttribute(model, attributeName)) {\n return collected;\n }\n\n const targetIsLocalized = isLocalizedContentType(targetModel);\n const relatedEntries = castArray(value);\n const links = relatedEntries\n .map((entry) => toDraftRelationLink(entry, attribute.target, targetIsLocalized, locale))\n .filter((link): link is DraftRelationLinkRef => link !== null);\n\n if (links.length === 0) {\n return collected;\n }\n\n if (isBidirectionalManyToMany(attribute)) {\n return {\n ...collected,\n m2mLinks: [...collected.m2mLinks, ...links],\n };\n }\n\n return {\n ...collected,\n xToOneLinks: [...collected.xToOneLinks, ...links],\n };\n }\n case 'component': {\n return castArray(value).reduce(\n (componentCollected, componentValue) =>\n mergeCollectedLinks(\n componentCollected,\n collectDraftRelationLinks(strapi, componentValue, attribute.component, locale)\n ),\n collected\n );\n }\n case 'dynamiczone': {\n return value.reduce((zoneCollected: CollectedDraftRelationLinks, componentValue: any) => {\n return mergeCollectedLinks(\n zoneCollected,\n collectDraftRelationLinks(strapi, componentValue, componentValue.__component, locale)\n );\n }, collected);\n }\n default:\n return collected;\n }\n },\n { m2mLinks: [], xToOneLinks: [] } as CollectedDraftRelationLinks\n );\n};\n\nconst countLinksToUnpublishedDocuments = async (\n strapi: Core.Strapi,\n links: DraftRelationLinkRef[]\n) => {\n if (links.length === 0) {\n return 0;\n }\n\n const linksByTarget = links.reduce<Map<UID.Schema, DraftRelationLinkRef[]>>((acc, link) => {\n const targetLinks = acc.get(link.targetUid) ?? [];\n targetLinks.push(link);\n acc.set(link.targetUid, targetLinks);\n return acc;\n }, new Map());\n\n const counts = await Promise.all(\n Array.from(linksByTarget.entries()).map(async ([targetUid, targetLinks]) => {\n const targetModel = strapi.getModel(targetUid);\n const targetIsLocalized = isLocalizedContentType(targetModel);\n const documentIds = [...new Set(targetLinks.map((link) => link.documentId))];\n\n const publishedRows = await strapi.db.query(targetUid).findMany({\n select: ['documentId', 'locale'],\n where: {\n documentId: { $in: documentIds },\n publishedAt: { $notNull: true },\n },\n });\n\n if (!targetIsLocalized) {\n const publishedDocumentIds = new Set(publishedRows.map((row) => row.documentId));\n\n return targetLinks.filter((link) => !publishedDocumentIds.has(link.documentId)).length;\n }\n\n const publishedDocumentKeys = new Set(\n publishedRows.map((row) => toPublishedDocumentKey(row.documentId, row.locale))\n );\n\n return targetLinks.filter(\n (link) => !publishedDocumentKeys.has(toPublishedDocumentKey(link.documentId, link.locale))\n ).length;\n })\n );\n\n return counts.reduce((total, count) => total + count, 0);\n};\n\n/**\n * sumDraftCounts works recursively on the attributes of a model counting draft relations\n * that matter for publish warnings.\n *\n * - unpublishedRelations: xToOne / oneToMany style links stripped from the published version\n * - draftM2mLinks: bidirectional manyToMany links to documents without a published version\n */\nconst sumDraftCounts = async (\n strapi: Core.Strapi,\n entity: any,\n uid: UID.Schema\n): Promise<DraftRelationCounts> => {\n const { m2mLinks, xToOneLinks } = collectDraftRelationLinks(strapi, entity, uid);\n\n const [draftM2mLinks, unpublishedRelations] = await Promise.all([\n countLinksToUnpublishedDocuments(strapi, m2mLinks),\n countLinksToUnpublishedDocuments(strapi, xToOneLinks),\n ]);\n\n return {\n unpublishedRelations,\n draftM2mLinks,\n };\n};\n\nexport { sumDraftCounts };\n"],"names":["isVisibleAttribute","hasDraftAndPublish","strapiUtils","contentTypes","isLocalizedContentType","model","pluginOptions","i18n","localized","toPublishedDocumentKey","documentId","locale","mergeCollectedLinks","left","right","m2mLinks","xToOneLinks","toDraftRelationLink","entry","targetUid","targetIsLocalized","documentLocale","collectDraftRelationLinks","strapi","entity","uid","getModel","Object","keys","attributes","reduce","collected","attributeName","attribute","value","type","targetModel","target","relatedEntries","castArray","links","map","filter","link","length","isBidirectionalManyToMany","componentCollected","componentValue","component","zoneCollected","__component","countLinksToUnpublishedDocuments","linksByTarget","acc","targetLinks","get","push","set","Map","counts","Promise","all","Array","from","entries","documentIds","Set","publishedRows","db","query","findMany","select","where","$in","publishedAt","$notNull","publishedDocumentIds","row","has","publishedDocumentKeys","total","count","sumDraftCounts","draftM2mLinks","unpublishedRelations"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"draft.js","sources":["../../../../server/src/services/utils/draft.ts"],"sourcesContent":["import { castArray } from 'lodash';\n\nimport * as strapiUtils from '@strapi/utils';\nimport type { Core, UID } from '@strapi/types';\n\nimport { type DraftRelationCounts, isBidirectionalManyToMany } from './draft-relations';\n\nconst { isVisibleAttribute, hasDraftAndPublish } = strapiUtils.contentTypes;\n\ntype DraftRelationLinkRef = {\n targetUid: UID.Schema;\n documentId: string;\n locale?: string | null;\n};\n\ntype CollectedDraftRelationLinks = {\n m2mLinks: DraftRelationLinkRef[];\n xToOneLinks: DraftRelationLinkRef[];\n};\n\nconst toPublishedDocumentKey = (documentId: string, locale?: string | null) =>\n `${documentId}:${locale ?? ''}`;\n\nconst mergeCollectedLinks = (\n left: CollectedDraftRelationLinks,\n right: CollectedDraftRelationLinks\n): CollectedDraftRelationLinks => ({\n m2mLinks: [...left.m2mLinks, ...right.m2mLinks],\n xToOneLinks: [...left.xToOneLinks, ...right.xToOneLinks],\n});\n\nconst toDraftRelationLink = (\n entry: { documentId?: string; locale?: string | null },\n targetUid: UID.Schema,\n targetIsLocalized: boolean,\n documentLocale?: string | null\n): DraftRelationLinkRef | null => {\n if (!entry?.documentId) {\n return null;\n }\n\n return {\n targetUid,\n documentId: entry.documentId,\n locale: targetIsLocalized ? (entry.locale ?? documentLocale) : null,\n };\n};\n\nconst collectDraftRelationLinks = (\n strapi: Core.Strapi,\n entity: any,\n uid: UID.Schema,\n documentLocale?: string | null\n): CollectedDraftRelationLinks => {\n const model = strapi.getModel(uid);\n const locale = entity.locale ?? documentLocale;\n\n return Object.keys(model.attributes).reduce(\n (collected, attributeName) => {\n const attribute: any = model.attributes[attributeName];\n const value = entity[attributeName];\n\n if (!value) {\n return collected;\n }\n\n switch (attribute.type) {\n case 'relation': {\n if (!('target' in attribute)) {\n return collected;\n }\n\n const targetModel = strapi.getModel(attribute.target as UID.Schema);\n if (!targetModel || !hasDraftAndPublish(targetModel)) {\n return collected;\n }\n\n if (attribute.target === uid || !isVisibleAttribute(model, attributeName)) {\n return collected;\n }\n\n const targetIsLocalized = strapi.localization.isLocalizedContentType(targetModel);\n const relatedEntries = castArray(value);\n const links = relatedEntries\n .map((entry) => toDraftRelationLink(entry, attribute.target, targetIsLocalized, locale))\n .filter((link): link is DraftRelationLinkRef => link !== null);\n\n if (links.length === 0) {\n return collected;\n }\n\n if (isBidirectionalManyToMany(attribute)) {\n return {\n ...collected,\n m2mLinks: [...collected.m2mLinks, ...links],\n };\n }\n\n return {\n ...collected,\n xToOneLinks: [...collected.xToOneLinks, ...links],\n };\n }\n case 'component': {\n return castArray(value).reduce(\n (componentCollected, componentValue) =>\n mergeCollectedLinks(\n componentCollected,\n collectDraftRelationLinks(strapi, componentValue, attribute.component, locale)\n ),\n collected\n );\n }\n case 'dynamiczone': {\n return value.reduce((zoneCollected: CollectedDraftRelationLinks, componentValue: any) => {\n return mergeCollectedLinks(\n zoneCollected,\n collectDraftRelationLinks(strapi, componentValue, componentValue.__component, locale)\n );\n }, collected);\n }\n default:\n return collected;\n }\n },\n { m2mLinks: [], xToOneLinks: [] } as CollectedDraftRelationLinks\n );\n};\n\nconst countLinksToUnpublishedDocuments = async (\n strapi: Core.Strapi,\n links: DraftRelationLinkRef[]\n) => {\n if (links.length === 0) {\n return 0;\n }\n\n const linksByTarget = links.reduce<Map<UID.Schema, DraftRelationLinkRef[]>>((acc, link) => {\n const targetLinks = acc.get(link.targetUid) ?? [];\n targetLinks.push(link);\n acc.set(link.targetUid, targetLinks);\n return acc;\n }, new Map());\n\n const counts = await Promise.all(\n Array.from(linksByTarget.entries()).map(async ([targetUid, targetLinks]) => {\n const targetModel = strapi.getModel(targetUid);\n const targetIsLocalized = strapi.localization.isLocalizedContentType(targetModel);\n const documentIds = [...new Set(targetLinks.map((link) => link.documentId))];\n\n const publishedRows = await strapi.db.query(targetUid).findMany({\n select: targetIsLocalized === true ? ['documentId', 'locale'] : ['documentId'],\n where: {\n documentId: { $in: documentIds },\n publishedAt: { $notNull: true },\n },\n });\n\n if (!targetIsLocalized) {\n const publishedDocumentIds = new Set(publishedRows.map((row) => row.documentId));\n\n return targetLinks.filter((link) => !publishedDocumentIds.has(link.documentId)).length;\n }\n\n const publishedDocumentKeys = new Set(\n publishedRows.map((row) => toPublishedDocumentKey(row.documentId, row.locale))\n );\n\n return targetLinks.filter(\n (link) => !publishedDocumentKeys.has(toPublishedDocumentKey(link.documentId, link.locale))\n ).length;\n })\n );\n\n return counts.reduce((total, count) => total + count, 0);\n};\n\n/**\n * sumDraftCounts works recursively on the attributes of a model counting draft relations\n * that matter for publish warnings.\n *\n * - unpublishedRelations: xToOne / oneToMany style links stripped from the published version\n * - draftM2mLinks: bidirectional manyToMany links to documents without a published version\n */\nconst sumDraftCounts = async (\n strapi: Core.Strapi,\n entity: any,\n uid: UID.Schema\n): Promise<DraftRelationCounts> => {\n const { m2mLinks, xToOneLinks } = collectDraftRelationLinks(strapi, entity, uid);\n\n const [draftM2mLinks, unpublishedRelations] = await Promise.all([\n countLinksToUnpublishedDocuments(strapi, m2mLinks),\n countLinksToUnpublishedDocuments(strapi, xToOneLinks),\n ]);\n\n return {\n unpublishedRelations,\n draftM2mLinks,\n };\n};\n\nexport { sumDraftCounts };\n"],"names":["isVisibleAttribute","hasDraftAndPublish","strapiUtils","contentTypes","toPublishedDocumentKey","documentId","locale","mergeCollectedLinks","left","right","m2mLinks","xToOneLinks","toDraftRelationLink","entry","targetUid","targetIsLocalized","documentLocale","collectDraftRelationLinks","strapi","entity","uid","model","getModel","Object","keys","attributes","reduce","collected","attributeName","attribute","value","type","targetModel","target","localization","isLocalizedContentType","relatedEntries","castArray","links","map","filter","link","length","isBidirectionalManyToMany","componentCollected","componentValue","component","zoneCollected","__component","countLinksToUnpublishedDocuments","linksByTarget","acc","targetLinks","get","push","set","Map","counts","Promise","all","Array","from","entries","documentIds","Set","publishedRows","db","query","findMany","select","where","$in","publishedAt","$notNull","publishedDocumentIds","row","has","publishedDocumentKeys","total","count","sumDraftCounts","draftM2mLinks","unpublishedRelations"],"mappings":"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"}
|
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
import { castArray } from 'lodash
|
|
1
|
+
import { castArray } from 'lodash';
|
|
2
2
|
import * as strapiUtils from '@strapi/utils';
|
|
3
3
|
import { isBidirectionalManyToMany } from './draft-relations.mjs';
|
|
4
4
|
|
|
5
5
|
const { isVisibleAttribute, hasDraftAndPublish } = strapiUtils.contentTypes;
|
|
6
|
-
const isLocalizedContentType = (model)=>model.pluginOptions?.i18n?.localized === true;
|
|
7
6
|
const toPublishedDocumentKey = (documentId, locale)=>`${documentId}:${locale ?? ''}`;
|
|
8
7
|
const mergeCollectedLinks = (left, right)=>({
|
|
9
8
|
m2mLinks: [
|
|
@@ -47,7 +46,7 @@ const collectDraftRelationLinks = (strapi, entity, uid, documentLocale)=>{
|
|
|
47
46
|
if (attribute.target === uid || !isVisibleAttribute(model, attributeName)) {
|
|
48
47
|
return collected;
|
|
49
48
|
}
|
|
50
|
-
const targetIsLocalized = isLocalizedContentType(targetModel);
|
|
49
|
+
const targetIsLocalized = strapi.localization.isLocalizedContentType(targetModel);
|
|
51
50
|
const relatedEntries = castArray(value);
|
|
52
51
|
const links = relatedEntries.map((entry)=>toDraftRelationLink(entry, attribute.target, targetIsLocalized, locale)).filter((link)=>link !== null);
|
|
53
52
|
if (links.length === 0) {
|
|
@@ -100,14 +99,16 @@ const countLinksToUnpublishedDocuments = async (strapi, links)=>{
|
|
|
100
99
|
}, new Map());
|
|
101
100
|
const counts = await Promise.all(Array.from(linksByTarget.entries()).map(async ([targetUid, targetLinks])=>{
|
|
102
101
|
const targetModel = strapi.getModel(targetUid);
|
|
103
|
-
const targetIsLocalized = isLocalizedContentType(targetModel);
|
|
102
|
+
const targetIsLocalized = strapi.localization.isLocalizedContentType(targetModel);
|
|
104
103
|
const documentIds = [
|
|
105
104
|
...new Set(targetLinks.map((link)=>link.documentId))
|
|
106
105
|
];
|
|
107
106
|
const publishedRows = await strapi.db.query(targetUid).findMany({
|
|
108
|
-
select: [
|
|
107
|
+
select: targetIsLocalized === true ? [
|
|
109
108
|
'documentId',
|
|
110
109
|
'locale'
|
|
110
|
+
] : [
|
|
111
|
+
'documentId'
|
|
111
112
|
],
|
|
112
113
|
where: {
|
|
113
114
|
documentId: {
|