@strapi/content-manager 5.60.0 → 5.61.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/constants/customOrder.js +14 -0
- package/dist/admin/constants/customOrder.js.map +1 -0
- package/dist/admin/constants/customOrder.mjs +10 -0
- package/dist/admin/constants/customOrder.mjs.map +1 -0
- package/dist/admin/hooks/useDocument.js +22 -11
- package/dist/admin/hooks/useDocument.js.map +1 -1
- package/dist/admin/hooks/useDocument.mjs +22 -11
- package/dist/admin/hooks/useDocument.mjs.map +1 -1
- package/dist/admin/hooks/useDocumentLayout.js.map +1 -1
- package/dist/admin/hooks/useDocumentLayout.mjs.map +1 -1
- package/dist/admin/hooks/useHasBeenNearViewport.js +70 -0
- package/dist/admin/hooks/useHasBeenNearViewport.js.map +1 -0
- package/dist/admin/hooks/useHasBeenNearViewport.mjs +46 -0
- package/dist/admin/hooks/useHasBeenNearViewport.mjs.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Image.js +102 -32
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Image.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Image.mjs +104 -35
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Image.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/List.js +20 -17
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/List.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/List.mjs +20 -17
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/List.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js +15 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.mjs +17 -3
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/plugins/withStrapiSchema.js +21 -0
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/plugins/withStrapiSchema.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/plugins/withStrapiSchema.mjs +22 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/plugins/withStrapiSchema.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js +4 -7
- package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs +4 -7
- package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js +46 -10
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs +47 -11
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormLayout.js +201 -51
- package/dist/admin/pages/EditView/components/FormLayout.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormLayout.mjs +202 -53
- package/dist/admin/pages/EditView/components/FormLayout.mjs.map +1 -1
- package/dist/admin/pages/ListConfiguration/components/Settings.js +31 -2
- package/dist/admin/pages/ListConfiguration/components/Settings.js.map +1 -1
- package/dist/admin/pages/ListConfiguration/components/Settings.mjs +31 -2
- package/dist/admin/pages/ListConfiguration/components/Settings.mjs.map +1 -1
- package/dist/admin/pages/ListView/ListViewPage.js +196 -132
- package/dist/admin/pages/ListView/ListViewPage.js.map +1 -1
- package/dist/admin/pages/ListView/ListViewPage.mjs +196 -132
- package/dist/admin/pages/ListView/ListViewPage.mjs.map +1 -1
- package/dist/admin/pages/ListView/components/CustomOrder.js +571 -0
- package/dist/admin/pages/ListView/components/CustomOrder.js.map +1 -0
- package/dist/admin/pages/ListView/components/CustomOrder.mjs +546 -0
- package/dist/admin/pages/ListView/components/CustomOrder.mjs.map +1 -0
- package/dist/admin/pages/ListView/components/TableActions.js +4 -1
- package/dist/admin/pages/ListView/components/TableActions.js.map +1 -1
- package/dist/admin/pages/ListView/components/TableActions.mjs +4 -1
- package/dist/admin/pages/ListView/components/TableActions.mjs.map +1 -1
- package/dist/admin/services/documents.js +22 -1
- package/dist/admin/services/documents.js.map +1 -1
- package/dist/admin/services/documents.mjs +21 -2
- package/dist/admin/services/documents.mjs.map +1 -1
- package/dist/admin/src/constants/customOrder.d.ts +8 -0
- package/dist/admin/src/exports.d.ts +1 -1
- package/dist/admin/src/hooks/useDocument.d.ts +4 -0
- package/dist/admin/src/hooks/useDocumentLayout.d.ts +6 -2
- package/dist/admin/src/hooks/useHasBeenNearViewport.d.ts +13 -0
- package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/Blocks/Image.d.ts +13 -1
- package/dist/admin/src/pages/EditView/components/FormLayout.d.ts +11 -1
- package/dist/admin/src/pages/ListView/components/CustomOrder.d.ts +72 -0
- package/dist/admin/src/services/documents.d.ts +10 -2
- package/dist/admin/translations/en.json.js +9 -0
- package/dist/admin/translations/en.json.js.map +1 -1
- package/dist/admin/translations/en.json.mjs +9 -0
- package/dist/admin/translations/en.json.mjs.map +1 -1
- package/dist/server/audit-logs.js +36 -0
- package/dist/server/audit-logs.js.map +1 -0
- package/dist/server/audit-logs.mjs +33 -0
- package/dist/server/audit-logs.mjs.map +1 -0
- package/dist/server/bootstrap.js +8 -0
- package/dist/server/bootstrap.js.map +1 -1
- package/dist/server/bootstrap.mjs +8 -0
- package/dist/server/bootstrap.mjs.map +1 -1
- package/dist/server/controllers/collection-types.js +8 -0
- package/dist/server/controllers/collection-types.js.map +1 -1
- package/dist/server/controllers/collection-types.mjs +8 -0
- package/dist/server/controllers/collection-types.mjs.map +1 -1
- package/dist/server/controllers/content-types.js +15 -0
- package/dist/server/controllers/content-types.js.map +1 -1
- package/dist/server/controllers/content-types.mjs +16 -1
- package/dist/server/controllers/content-types.mjs.map +1 -1
- package/dist/server/controllers/index.js +3 -1
- package/dist/server/controllers/index.js.map +1 -1
- package/dist/server/controllers/index.mjs +2 -0
- package/dist/server/controllers/index.mjs.map +1 -1
- package/dist/server/controllers/relations.js +5 -1
- package/dist/server/controllers/relations.js.map +1 -1
- package/dist/server/controllers/relations.mjs +5 -1
- package/dist/server/controllers/relations.mjs.map +1 -1
- package/dist/server/controllers/single-types.js +10 -1
- package/dist/server/controllers/single-types.js.map +1 -1
- package/dist/server/controllers/single-types.mjs +10 -1
- package/dist/server/controllers/single-types.mjs.map +1 -1
- package/dist/server/controllers/validation/model-configuration.js +2 -1
- package/dist/server/controllers/validation/model-configuration.js.map +1 -1
- package/dist/server/controllers/validation/model-configuration.mjs +2 -1
- package/dist/server/controllers/validation/model-configuration.mjs.map +1 -1
- package/dist/server/custom-order/constants.js +21 -0
- package/dist/server/custom-order/constants.js.map +1 -0
- package/dist/server/custom-order/constants.mjs +17 -0
- package/dist/server/custom-order/constants.mjs.map +1 -0
- package/dist/server/custom-order/controllers/custom-order.js +77 -0
- package/dist/server/custom-order/controllers/custom-order.js.map +1 -0
- package/dist/server/custom-order/controllers/custom-order.mjs +75 -0
- package/dist/server/custom-order/controllers/custom-order.mjs.map +1 -0
- package/dist/server/custom-order/controllers/index.js +10 -0
- package/dist/server/custom-order/controllers/index.js.map +1 -0
- package/dist/server/custom-order/controllers/index.mjs +8 -0
- package/dist/server/custom-order/controllers/index.mjs.map +1 -0
- package/dist/server/custom-order/index.js +71 -0
- package/dist/server/custom-order/index.js.map +1 -0
- package/dist/server/custom-order/index.mjs +69 -0
- package/dist/server/custom-order/index.mjs.map +1 -0
- package/dist/server/custom-order/routes/custom-order.js +38 -0
- package/dist/server/custom-order/routes/custom-order.js.map +1 -0
- package/dist/server/custom-order/routes/custom-order.mjs +36 -0
- package/dist/server/custom-order/routes/custom-order.mjs.map +1 -0
- package/dist/server/custom-order/routes/index.js +13 -0
- package/dist/server/custom-order/routes/index.js.map +1 -0
- package/dist/server/custom-order/routes/index.mjs +11 -0
- package/dist/server/custom-order/routes/index.mjs.map +1 -0
- package/dist/server/custom-order/services/custom-order.js +286 -0
- package/dist/server/custom-order/services/custom-order.js.map +1 -0
- package/dist/server/custom-order/services/custom-order.mjs +284 -0
- package/dist/server/custom-order/services/custom-order.mjs.map +1 -0
- package/dist/server/custom-order/services/document-middleware.js +83 -0
- package/dist/server/custom-order/services/document-middleware.js.map +1 -0
- package/dist/server/custom-order/services/document-middleware.mjs +81 -0
- package/dist/server/custom-order/services/document-middleware.mjs.map +1 -0
- package/dist/server/custom-order/services/index.js +10 -0
- package/dist/server/custom-order/services/index.js.map +1 -0
- package/dist/server/custom-order/services/index.mjs +8 -0
- package/dist/server/custom-order/services/index.mjs.map +1 -0
- package/dist/server/custom-order/services/utils.js +152 -0
- package/dist/server/custom-order/services/utils.js.map +1 -0
- package/dist/server/custom-order/services/utils.mjs +148 -0
- package/dist/server/custom-order/services/utils.mjs.map +1 -0
- package/dist/server/custom-order/utils.js +13 -0
- package/dist/server/custom-order/utils.js.map +1 -0
- package/dist/server/custom-order/utils.mjs +10 -0
- package/dist/server/custom-order/utils.mjs.map +1 -0
- package/dist/server/history/constants.js +2 -1
- package/dist/server/history/constants.js.map +1 -1
- package/dist/server/history/constants.mjs +2 -1
- package/dist/server/history/constants.mjs.map +1 -1
- package/dist/server/history/controllers/history-version.js +6 -2
- package/dist/server/history/controllers/history-version.js.map +1 -1
- package/dist/server/history/controllers/history-version.mjs +6 -2
- package/dist/server/history/controllers/history-version.mjs.map +1 -1
- package/dist/server/history/services/history.js +23 -6
- package/dist/server/history/services/history.js.map +1 -1
- package/dist/server/history/services/history.mjs +24 -7
- package/dist/server/history/services/history.mjs.map +1 -1
- package/dist/server/history/services/lifecycles.js +2 -16
- package/dist/server/history/services/lifecycles.js.map +1 -1
- package/dist/server/history/services/lifecycles.mjs +2 -16
- package/dist/server/history/services/lifecycles.mjs.map +1 -1
- package/dist/server/register.js +4 -0
- package/dist/server/register.js.map +1 -1
- package/dist/server/register.mjs +4 -0
- package/dist/server/register.mjs.map +1 -1
- package/dist/server/routes/index.js +3 -1
- package/dist/server/routes/index.js.map +1 -1
- package/dist/server/routes/index.mjs +2 -0
- package/dist/server/routes/index.mjs.map +1 -1
- package/dist/server/services/content-types.js +2 -2
- package/dist/server/services/content-types.js.map +1 -1
- package/dist/server/services/content-types.mjs +2 -2
- package/dist/server/services/content-types.mjs.map +1 -1
- package/dist/server/services/document-manager.js +13 -0
- package/dist/server/services/document-manager.js.map +1 -1
- package/dist/server/services/document-manager.mjs +14 -1
- package/dist/server/services/document-manager.mjs.map +1 -1
- package/dist/server/services/index.js +3 -1
- package/dist/server/services/index.js.map +1 -1
- package/dist/server/services/index.mjs +2 -0
- package/dist/server/services/index.mjs.map +1 -1
- package/dist/server/services/utils/configuration/settings.js +2 -1
- package/dist/server/services/utils/configuration/settings.js.map +1 -1
- package/dist/server/services/utils/configuration/settings.mjs +2 -1
- package/dist/server/services/utils/configuration/settings.mjs.map +1 -1
- package/dist/server/src/audit-logs.d.ts +40 -0
- package/dist/server/src/audit-logs.d.ts.map +1 -0
- package/dist/server/src/bootstrap.d.ts.map +1 -1
- package/dist/server/src/controllers/collection-types.d.ts +1 -1
- package/dist/server/src/controllers/collection-types.d.ts.map +1 -1
- package/dist/server/src/controllers/content-types.d.ts.map +1 -1
- package/dist/server/src/controllers/index.d.ts +21 -3
- package/dist/server/src/controllers/index.d.ts.map +1 -1
- package/dist/server/src/controllers/relations.d.ts +19 -1
- package/dist/server/src/controllers/relations.d.ts.map +1 -1
- package/dist/server/src/controllers/single-types.d.ts +1 -1
- package/dist/server/src/controllers/single-types.d.ts.map +1 -1
- package/dist/server/src/custom-order/constants.d.ts +18 -0
- package/dist/server/src/custom-order/constants.d.ts.map +1 -0
- package/dist/server/src/custom-order/controllers/custom-order.d.ts +8 -0
- package/dist/server/src/custom-order/controllers/custom-order.d.ts.map +1 -0
- package/dist/server/src/custom-order/controllers/index.d.ts +3 -0
- package/dist/server/src/custom-order/controllers/index.d.ts.map +1 -0
- package/dist/server/src/custom-order/index.d.ts +8 -0
- package/dist/server/src/custom-order/index.d.ts.map +1 -0
- package/dist/server/src/custom-order/routes/custom-order.d.ts +4 -0
- package/dist/server/src/custom-order/routes/custom-order.d.ts.map +1 -0
- package/dist/server/src/custom-order/routes/index.d.ts +10 -0
- package/dist/server/src/custom-order/routes/index.d.ts.map +1 -0
- package/dist/server/src/custom-order/services/custom-order.d.ts +43 -0
- package/dist/server/src/custom-order/services/custom-order.d.ts.map +1 -0
- package/dist/server/src/custom-order/services/document-middleware.d.ts +16 -0
- package/dist/server/src/custom-order/services/document-middleware.d.ts.map +1 -0
- package/dist/server/src/custom-order/services/index.d.ts +24 -0
- package/dist/server/src/custom-order/services/index.d.ts.map +1 -0
- package/dist/server/src/custom-order/services/utils.d.ts +34 -0
- package/dist/server/src/custom-order/services/utils.d.ts.map +1 -0
- package/dist/server/src/custom-order/utils.d.ts +6 -0
- package/dist/server/src/custom-order/utils.d.ts.map +1 -0
- package/dist/server/src/history/constants.d.ts.map +1 -1
- package/dist/server/src/history/controllers/history-version.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/index.d.ts +22 -6
- package/dist/server/src/index.d.ts.map +1 -1
- 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/content-types.d.ts +1 -3
- package/dist/server/src/services/content-types.d.ts.map +1 -1
- package/dist/server/src/services/document-manager.d.ts.map +1 -1
- package/dist/server/src/services/index.d.ts +1 -3
- package/dist/server/src/services/index.d.ts.map +1 -1
- package/dist/server/src/services/utils/configuration/settings.d.ts.map +1 -1
- package/dist/shared/contracts/content-types.d.ts +5 -0
- package/dist/shared/contracts/content-types.d.ts.map +1 -1
- package/dist/shared/contracts/custom-order.d.ts +33 -0
- package/dist/shared/contracts/custom-order.d.ts.map +1 -0
- package/dist/shared/contracts/custom-order.js +3 -0
- package/dist/shared/contracts/custom-order.js.map +1 -0
- package/dist/shared/contracts/custom-order.mjs +2 -0
- package/dist/shared/contracts/custom-order.mjs.map +1 -0
- package/dist/shared/contracts/history-versions.d.ts +0 -1
- package/dist/shared/contracts/history-versions.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/index.js +2 -0
- package/dist/shared/contracts/index.js.map +1 -1
- package/dist/shared/contracts/index.mjs +2 -0
- package/dist/shared/contracts/index.mjs.map +1 -1
- package/package.json +8 -8
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"single-types.mjs","sources":["../../../server/src/controllers/single-types.ts"],"sourcesContent":["import type { UID, Modules } from '@strapi/types';\nimport { setCreatorFields, async, errors } from '@strapi/utils';\n\nimport { getDocumentLocaleAndStatus } from './validation/dimensions';\nimport { getService } from '../utils';\nimport { formatDocumentWithMetadata } from './utils/metadata';\nimport { getPopulateForLocalizations } from '../services/utils/populate';\nimport { EMPTY_DRAFT_RELATION_COUNTS } from '../services/utils/draft-relations';\n\ntype OptionsWithPopulate = Modules.Documents.Params.Pick<UID.ContentType, 'populate:object'>;\n\nconst buildPopulateFromQuery = async (query: any, model: any) => {\n return getService('populate-builder')(model)\n .populateFromQuery(query)\n .populateDeep(Infinity)\n .countRelations()\n .withPopulateOverride(getPopulateForLocalizations(model))\n .build();\n};\n\nconst findDocument = async (query: any, uid: UID.SingleType, opts: any = {}) => {\n const documentManager = getService('document-manager');\n const populate = await buildPopulateFromQuery(query, uid);\n\n return (\n documentManager\n .findMany({ ...opts, populate }, uid)\n // Return the first document found\n .then((documents: any) => documents[0])\n );\n};\n\nconst createOrUpdateDocument = async (ctx: any, opts?: OptionsWithPopulate) => {\n const { user, userAbility } = ctx.state;\n const { model } = ctx.params;\n const { body, query } = ctx.request;\n\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.create() && permissionChecker.cannot.update()) {\n throw new errors.ForbiddenError();\n }\n\n const sanitizedQuery = await permissionChecker.sanitizedQuery.update(query);\n\n const { locale } = await getDocumentLocaleAndStatus(body, model);\n\n // Load document version to update\n const [documentVersion, otherDocumentVersion] = await Promise.all([\n findDocument(sanitizedQuery, model, { locale, status: 'draft' }),\n // Find the first document to check if it exists\n strapi.db.query(model).findOne({ select: ['documentId'] }),\n ]);\n\n const documentId = otherDocumentVersion?.documentId;\n\n const pickPermittedFields = documentVersion\n ? permissionChecker.sanitizeUpdateInput(documentVersion)\n : permissionChecker.sanitizeCreateInput;\n\n const setCreator = documentVersion\n ? setCreatorFields({ user, isEdition: true })\n : setCreatorFields({ user });\n\n const sanitizeFn = async.pipe(pickPermittedFields, setCreator as any);\n\n // If version is not found, but document exists,\n // the intent is to create a new document locale\n if (documentVersion) {\n if (permissionChecker.cannot.update(documentVersion)) {\n throw new errors.ForbiddenError();\n }\n } else if (permissionChecker.cannot.create()) {\n throw new errors.ForbiddenError();\n }\n\n const sanitizedBody = await sanitizeFn(body);\n\n if (!documentId) {\n return documentManager.create(model, {\n data: sanitizedBody,\n ...sanitizedQuery,\n locale,\n });\n }\n\n return documentManager.update(documentId, model, {\n data: sanitizedBody as any,\n populate: opts?.populate,\n locale,\n });\n};\n\nexport default {\n async find(ctx: any) {\n const { userAbility } = ctx.state;\n const { model } = ctx.params;\n const { query = {} } = ctx.request;\n\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.read()) {\n return ctx.forbidden();\n }\n\n const permissionQuery = await permissionChecker.sanitizedQuery.read(query);\n const { locale, status } = await getDocumentLocaleAndStatus(query, model);\n\n const version = await findDocument(permissionQuery, model, { locale, status });\n\n // allow user with create permission to know a single type is not created\n if (!version) {\n if (permissionChecker.cannot.create()) {\n return ctx.forbidden();\n }\n // Check if document exists\n const document = await strapi.db.query(model).findOne({});\n\n if (!document) {\n return ctx.notFound();\n }\n\n // If the requested locale doesn't exist, return an empty response\n const { meta } = await formatDocumentWithMetadata(\n permissionChecker,\n model,\n // @ts-expect-error - fix types\n { documentId: document.documentId, locale, publishedAt: null },\n { availableLocales: true, availableStatus: false }\n );\n ctx.body = { data: {}, meta };\n return;\n }\n\n if (permissionChecker.cannot.read(version)) {\n return ctx.forbidden();\n }\n\n const sanitizedDocument = await permissionChecker.sanitizeOutput(version);\n ctx.body = await formatDocumentWithMetadata(permissionChecker, model, sanitizedDocument);\n },\n\n async createOrUpdate(ctx: any) {\n const { userAbility } = ctx.state;\n const { model } = ctx.params;\n\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n const document = await createOrUpdateDocument(ctx);\n\n const sanitizedDocument = await permissionChecker.sanitizeOutput(document);\n ctx.body = await formatDocumentWithMetadata(permissionChecker, model, sanitizedDocument);\n },\n\n async delete(ctx: any) {\n const { userAbility } = ctx.state;\n const { model } = ctx.params;\n const { query = {} } = ctx.request;\n\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.delete()) {\n return ctx.forbidden();\n }\n\n const sanitizedQuery = await permissionChecker.sanitizedQuery.delete(query);\n const populate = await buildPopulateFromQuery(sanitizedQuery, model);\n\n const { locale } = await getDocumentLocaleAndStatus(query, model);\n const documentLocales = await documentManager.findLocales(undefined, model, {\n populate,\n locale,\n });\n\n if (documentLocales.length === 0) {\n return ctx.notFound();\n }\n\n for (const document of documentLocales) {\n if (permissionChecker.cannot.delete(document)) {\n return ctx.forbidden();\n }\n }\n\n const deletedEntity = await documentManager.delete(documentLocales.at(0).documentId, model, {\n locale,\n });\n\n ctx.body = await permissionChecker.sanitizeOutput(deletedEntity);\n },\n\n async publish(ctx: any) {\n const { userAbility } = ctx.state;\n const { model } = ctx.params;\n const { body, query = {} } = ctx.request;\n\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.publish()) {\n return ctx.forbidden();\n }\n\n const publishedDocument = await strapi.db.transaction(async () => {\n const sanitizedQuery = await permissionChecker.sanitizedQuery.publish(query);\n const populate = await buildPopulateFromQuery(sanitizedQuery, model);\n const { locale } = await getDocumentLocaleAndStatus(body, model);\n\n // Find the existing document\n let document = await findDocument(sanitizedQuery, model, { locale, status: 'draft' });\n\n // If document exists and user can update it, update it before publishing\n const shouldUpdate = document && permissionChecker.can.update(document);\n // If document doesn't exist and user can create it, create it before publishing\n const shouldCreate = !document && permissionChecker.can.create();\n if (shouldUpdate || shouldCreate) {\n document = await createOrUpdateDocument(ctx, { populate });\n } else if (!document) {\n // Document doesn't exist and user can't create it\n throw new errors.ForbiddenError();\n }\n\n // If document doesn't exist, throw an error\n if (!document) {\n throw new errors.NotFoundError();\n }\n\n if (permissionChecker.cannot.publish(document)) {\n throw new errors.ForbiddenError();\n }\n\n const publishResult = await documentManager.publish(document.documentId, model, { locale });\n\n return publishResult.at(0);\n });\n\n const sanitizedDocument = await permissionChecker.sanitizeOutput(publishedDocument);\n ctx.body = await formatDocumentWithMetadata(permissionChecker, model, sanitizedDocument);\n },\n\n async unpublish(ctx: any) {\n const { userAbility } = ctx.state;\n const { model } = ctx.params;\n const {\n body: { discardDraft, ...body },\n query = {},\n } = ctx.request;\n\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.unpublish()) {\n return ctx.forbidden();\n }\n\n if (discardDraft && permissionChecker.cannot.discard()) {\n return ctx.forbidden();\n }\n\n const sanitizedQuery = await permissionChecker.sanitizedQuery.unpublish(query);\n const { locale } = await getDocumentLocaleAndStatus(body, model);\n\n const document = await findDocument(sanitizedQuery, model, { locale });\n\n if (!document) {\n return ctx.notFound();\n }\n\n if (permissionChecker.cannot.unpublish(document)) {\n return ctx.forbidden();\n }\n\n if (discardDraft && permissionChecker.cannot.discard(document)) {\n return ctx.forbidden();\n }\n\n await strapi.db.transaction(async () => {\n if (discardDraft) {\n await documentManager.discardDraft(document.documentId, model, { locale });\n }\n\n ctx.body = await async.pipe(\n (document) => documentManager.unpublish(document.documentId, model, { locale }),\n permissionChecker.sanitizeOutput,\n (document) => formatDocumentWithMetadata(permissionChecker, model, document)\n )(document);\n });\n },\n\n async discard(ctx: any) {\n const { userAbility } = ctx.state;\n const { model } = ctx.params;\n const { body, query = {} } = ctx.request;\n\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.discard()) {\n return ctx.forbidden();\n }\n\n const sanitizedQuery = await permissionChecker.sanitizedQuery.discard(query);\n const { locale } = await getDocumentLocaleAndStatus(body, model);\n\n const document = await findDocument(sanitizedQuery, model, { locale, status: 'published' });\n\n // Can not discard a document that is not published\n if (!document) {\n return ctx.notFound();\n }\n\n if (permissionChecker.cannot.discard(document)) {\n return ctx.forbidden();\n }\n\n ctx.body = await async.pipe(\n (document) => documentManager.discardDraft(document.documentId, model, { locale }),\n permissionChecker.sanitizeOutput,\n (document) => formatDocumentWithMetadata(permissionChecker, model, document)\n )(document);\n },\n\n async countDraftRelations(ctx: any) {\n const { userAbility } = ctx.state;\n const { model } = ctx.params;\n const { query } = ctx.request;\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.read()) {\n return ctx.forbidden();\n }\n\n const permissionQuery = await permissionChecker.sanitizedQuery.read(query);\n const { locale } = await getDocumentLocaleAndStatus(query, model);\n\n const document = await findDocument(permissionQuery, model, { locale });\n\n if (!document) {\n // The single type may simply not have a version in the requested locale yet.\n // Check every existing locale/status version — findLocales returns one row\n // per locale AND per publication state — before deciding it truly doesn't exist.\n const populate = await buildPopulateFromQuery(permissionQuery, model);\n const versions = await documentManager.findLocales(undefined, model, { populate });\n\n if (versions.length === 0) {\n return ctx.notFound();\n }\n\n if (versions.every((version) => permissionChecker.cannot.read(version))) {\n return ctx.forbidden();\n }\n\n return { data: EMPTY_DRAFT_RELATION_COUNTS };\n }\n\n if (permissionChecker.cannot.read(document)) {\n return ctx.forbidden();\n }\n\n const counts = await documentManager.countDraftRelations(document.documentId, model, locale);\n\n return {\n data: counts,\n };\n },\n};\n"],"names":["buildPopulateFromQuery","query","model","getService","populateFromQuery","populateDeep","Infinity","countRelations","withPopulateOverride","getPopulateForLocalizations","build","findDocument","uid","opts","documentManager","populate","findMany","then","documents","createOrUpdateDocument","ctx","user","userAbility","state","params","body","request","permissionChecker","create","cannot","update","errors","ForbiddenError","sanitizedQuery","locale","getDocumentLocaleAndStatus","documentVersion","otherDocumentVersion","Promise","all","status","strapi","db","findOne","select","documentId","pickPermittedFields","sanitizeUpdateInput","sanitizeCreateInput","setCreator","setCreatorFields","isEdition","sanitizeFn","async","pipe","sanitizedBody","data","find","read","forbidden","permissionQuery","version","document","notFound","meta","formatDocumentWithMetadata","publishedAt","availableLocales","availableStatus","sanitizedDocument","sanitizeOutput","createOrUpdate","delete","documentLocales","findLocales","undefined","length","deletedEntity","at","publish","publishedDocument","transaction","shouldUpdate","can","shouldCreate","NotFoundError","publishResult","unpublish","discardDraft","discard","countDraftRelations","versions","every","EMPTY_DRAFT_RELATION_COUNTS","counts"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"single-types.mjs","sources":["../../../server/src/controllers/single-types.ts"],"sourcesContent":["import type { UID, Modules } from '@strapi/types';\nimport { setCreatorFields, async, errors } from '@strapi/utils';\n\nimport { getDocumentLocaleAndStatus } from './validation/dimensions';\nimport { getService } from '../utils';\nimport { formatDocumentWithMetadata } from './utils/metadata';\nimport { getPopulateForLocalizations } from '../services/utils/populate';\nimport { EMPTY_DRAFT_RELATION_COUNTS } from '../services/utils/draft-relations';\n\ntype OptionsWithPopulate = Modules.Documents.Params.Pick<UID.ContentType, 'populate:object'>;\n\nconst buildPopulateFromQuery = async (query: any, model: any) => {\n return getService('populate-builder')(model)\n .populateFromQuery(query)\n .populateDeep(Infinity)\n .countRelations()\n .withPopulateOverride(getPopulateForLocalizations(model))\n .build();\n};\n\nconst findDocument = async (query: any, uid: UID.SingleType, opts: any = {}) => {\n const documentManager = getService('document-manager');\n const populate = await buildPopulateFromQuery(query, uid);\n\n return (\n documentManager\n .findMany({ ...opts, populate }, uid)\n // Return the first document found\n .then((documents: any) => documents[0])\n );\n};\n\nconst createOrUpdateDocument = async (ctx: any, opts?: OptionsWithPopulate) => {\n const { user, userAbility } = ctx.state;\n const { model } = ctx.params;\n const { body, query } = ctx.request;\n\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.create() && permissionChecker.cannot.update()) {\n throw new errors.ForbiddenError();\n }\n\n const sanitizedQuery = await permissionChecker.sanitizedQuery.update(query);\n\n const { locale } = await getDocumentLocaleAndStatus(body, model);\n\n // Load document version to update\n const [documentVersion, otherDocumentVersion] = await Promise.all([\n findDocument(sanitizedQuery, model, { locale, status: 'draft' }),\n // Find the first document to check if it exists\n strapi.db.query(model).findOne({ select: ['documentId'] }),\n ]);\n\n const documentId = otherDocumentVersion?.documentId;\n\n const pickPermittedFields = documentVersion\n ? permissionChecker.sanitizeUpdateInput(documentVersion)\n : permissionChecker.sanitizeCreateInput;\n\n const setCreator = documentVersion\n ? setCreatorFields({ user, isEdition: true })\n : setCreatorFields({ user });\n\n const sanitizeFn = async.pipe(pickPermittedFields, setCreator as any);\n\n // If version is not found, but document exists,\n // the intent is to create a new document locale\n if (documentVersion) {\n if (permissionChecker.cannot.update(documentVersion)) {\n throw new errors.ForbiddenError();\n }\n } else if (permissionChecker.cannot.create()) {\n throw new errors.ForbiddenError();\n }\n\n const sanitizedBody = await sanitizeFn(body);\n\n if (!documentId) {\n return documentManager.create(model, {\n data: sanitizedBody,\n ...sanitizedQuery,\n locale,\n });\n }\n\n return documentManager.update(documentId, model, {\n data: sanitizedBody as any,\n populate: opts?.populate,\n locale,\n });\n};\n\nexport default {\n async find(ctx: any) {\n const { userAbility } = ctx.state;\n const { model } = ctx.params;\n const { query = {} } = ctx.request;\n\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.read()) {\n return ctx.forbidden();\n }\n\n const permissionQuery = await permissionChecker.sanitizedQuery.read(query);\n const { locale, status } = await getDocumentLocaleAndStatus(query, model);\n\n const version = await findDocument(permissionQuery, model, { locale, status });\n\n // allow user with create permission to know a single type is not created\n if (!version) {\n if (permissionChecker.cannot.create()) {\n return ctx.forbidden();\n }\n // Check if document exists\n const document = await strapi.db.query(model).findOne({});\n\n if (!document) {\n return ctx.notFound();\n }\n\n // If the requested locale doesn't exist, return an empty response\n const { meta } = await formatDocumentWithMetadata(\n permissionChecker,\n model,\n // @ts-expect-error - fix types\n { documentId: document.documentId, locale, publishedAt: null },\n { availableLocales: true, availableStatus: false }\n );\n ctx.body = { data: {}, meta };\n return;\n }\n\n if (permissionChecker.cannot.read(version)) {\n return ctx.forbidden();\n }\n\n const sanitizedDocument = await permissionChecker.sanitizeOutput(version);\n ctx.body = await formatDocumentWithMetadata(permissionChecker, model, sanitizedDocument);\n },\n\n async createOrUpdate(ctx: any) {\n const { userAbility } = ctx.state;\n const { model } = ctx.params;\n\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n const document = await createOrUpdateDocument(ctx);\n\n // The document can be deleted between the existence check and the update\n if (document === null) {\n return ctx.notFound();\n }\n\n const sanitizedDocument = await permissionChecker.sanitizeOutput(document);\n ctx.body = await formatDocumentWithMetadata(permissionChecker, model, sanitizedDocument);\n },\n\n async delete(ctx: any) {\n const { userAbility } = ctx.state;\n const { model } = ctx.params;\n const { query = {} } = ctx.request;\n\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.delete()) {\n return ctx.forbidden();\n }\n\n const sanitizedQuery = await permissionChecker.sanitizedQuery.delete(query);\n const populate = await buildPopulateFromQuery(sanitizedQuery, model);\n\n const { locale } = await getDocumentLocaleAndStatus(query, model);\n const documentLocales = await documentManager.findLocales(undefined, model, {\n populate,\n locale,\n });\n\n if (documentLocales.length === 0) {\n return ctx.notFound();\n }\n\n for (const document of documentLocales) {\n if (permissionChecker.cannot.delete(document)) {\n return ctx.forbidden();\n }\n }\n\n const deletedEntity = await documentManager.delete(documentLocales.at(0).documentId, model, {\n locale,\n });\n\n ctx.body = await permissionChecker.sanitizeOutput(deletedEntity);\n },\n\n async publish(ctx: any) {\n const { userAbility } = ctx.state;\n const { model } = ctx.params;\n const { body, query = {} } = ctx.request;\n\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.publish()) {\n return ctx.forbidden();\n }\n\n const publishedDocument = await strapi.db.transaction(async () => {\n const sanitizedQuery = await permissionChecker.sanitizedQuery.publish(query);\n const populate = await buildPopulateFromQuery(sanitizedQuery, model);\n const { locale } = await getDocumentLocaleAndStatus(body, model);\n\n // Find the existing document\n let document = await findDocument(sanitizedQuery, model, { locale, status: 'draft' });\n\n // If document exists and user can update it, update it before publishing\n const shouldUpdate = document && permissionChecker.can.update(document);\n // If document doesn't exist and user can create it, create it before publishing\n const shouldCreate = !document && permissionChecker.can.create();\n if (shouldUpdate || shouldCreate) {\n document = await createOrUpdateDocument(ctx, { populate });\n } else if (!document) {\n // Document doesn't exist and user can't create it\n throw new errors.ForbiddenError();\n }\n\n // If document doesn't exist, throw an error\n if (!document) {\n throw new errors.NotFoundError();\n }\n\n if (permissionChecker.cannot.publish(document)) {\n throw new errors.ForbiddenError();\n }\n\n const publishResult = await documentManager.publish(document.documentId, model, { locale });\n const publishedVersion = publishResult.at(0);\n\n // The draft can be deleted between the existence check and the publish\n if (publishedVersion === undefined) {\n throw new errors.NotFoundError();\n }\n\n return publishedVersion;\n });\n\n const sanitizedDocument = await permissionChecker.sanitizeOutput(publishedDocument);\n ctx.body = await formatDocumentWithMetadata(permissionChecker, model, sanitizedDocument);\n },\n\n async unpublish(ctx: any) {\n const { userAbility } = ctx.state;\n const { model } = ctx.params;\n const {\n body: { discardDraft, ...body },\n query = {},\n } = ctx.request;\n\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.unpublish()) {\n return ctx.forbidden();\n }\n\n if (discardDraft && permissionChecker.cannot.discard()) {\n return ctx.forbidden();\n }\n\n const sanitizedQuery = await permissionChecker.sanitizedQuery.unpublish(query);\n const { locale } = await getDocumentLocaleAndStatus(body, model);\n\n const document = await findDocument(sanitizedQuery, model, { locale });\n\n if (!document) {\n return ctx.notFound();\n }\n\n if (permissionChecker.cannot.unpublish(document)) {\n return ctx.forbidden();\n }\n\n if (discardDraft && permissionChecker.cannot.discard(document)) {\n return ctx.forbidden();\n }\n\n await strapi.db.transaction(async () => {\n if (discardDraft) {\n await documentManager.discardDraft(document.documentId, model, { locale });\n }\n\n ctx.body = await async.pipe(\n (document) => documentManager.unpublish(document.documentId, model, { locale }),\n permissionChecker.sanitizeOutput,\n (document) => formatDocumentWithMetadata(permissionChecker, model, document)\n )(document);\n });\n },\n\n async discard(ctx: any) {\n const { userAbility } = ctx.state;\n const { model } = ctx.params;\n const { body, query = {} } = ctx.request;\n\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.discard()) {\n return ctx.forbidden();\n }\n\n const sanitizedQuery = await permissionChecker.sanitizedQuery.discard(query);\n const { locale } = await getDocumentLocaleAndStatus(body, model);\n\n const document = await findDocument(sanitizedQuery, model, { locale, status: 'published' });\n\n // Can not discard a document that is not published\n if (!document) {\n return ctx.notFound();\n }\n\n if (permissionChecker.cannot.discard(document)) {\n return ctx.forbidden();\n }\n\n ctx.body = await async.pipe(\n (document) => documentManager.discardDraft(document.documentId, model, { locale }),\n permissionChecker.sanitizeOutput,\n (document) => formatDocumentWithMetadata(permissionChecker, model, document)\n )(document);\n },\n\n async countDraftRelations(ctx: any) {\n const { userAbility } = ctx.state;\n const { model } = ctx.params;\n const { query } = ctx.request;\n const documentManager = getService('document-manager');\n const permissionChecker = getService('permission-checker').create({ userAbility, model });\n\n if (permissionChecker.cannot.read()) {\n return ctx.forbidden();\n }\n\n const permissionQuery = await permissionChecker.sanitizedQuery.read(query);\n const { locale } = await getDocumentLocaleAndStatus(query, model);\n\n const document = await findDocument(permissionQuery, model, { locale });\n\n if (!document) {\n // The single type may simply not have a version in the requested locale yet.\n // Check every existing locale/status version — findLocales returns one row\n // per locale AND per publication state — before deciding it truly doesn't exist.\n const populate = await buildPopulateFromQuery(permissionQuery, model);\n const versions = await documentManager.findLocales(undefined, model, { populate });\n\n if (versions.length === 0) {\n return ctx.notFound();\n }\n\n if (versions.every((version) => permissionChecker.cannot.read(version))) {\n return ctx.forbidden();\n }\n\n return { data: EMPTY_DRAFT_RELATION_COUNTS };\n }\n\n if (permissionChecker.cannot.read(document)) {\n return ctx.forbidden();\n }\n\n const counts = await documentManager.countDraftRelations(document.documentId, model, locale);\n\n return {\n data: counts,\n };\n },\n};\n"],"names":["buildPopulateFromQuery","query","model","getService","populateFromQuery","populateDeep","Infinity","countRelations","withPopulateOverride","getPopulateForLocalizations","build","findDocument","uid","opts","documentManager","populate","findMany","then","documents","createOrUpdateDocument","ctx","user","userAbility","state","params","body","request","permissionChecker","create","cannot","update","errors","ForbiddenError","sanitizedQuery","locale","getDocumentLocaleAndStatus","documentVersion","otherDocumentVersion","Promise","all","status","strapi","db","findOne","select","documentId","pickPermittedFields","sanitizeUpdateInput","sanitizeCreateInput","setCreator","setCreatorFields","isEdition","sanitizeFn","async","pipe","sanitizedBody","data","find","read","forbidden","permissionQuery","version","document","notFound","meta","formatDocumentWithMetadata","publishedAt","availableLocales","availableStatus","sanitizedDocument","sanitizeOutput","createOrUpdate","delete","documentLocales","findLocales","undefined","length","deletedEntity","at","publish","publishedDocument","transaction","shouldUpdate","can","shouldCreate","NotFoundError","publishResult","publishedVersion","unpublish","discardDraft","discard","countDraftRelations","versions","every","EMPTY_DRAFT_RELATION_COUNTS","counts"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model-configuration.js","sources":["../../../../server/src/controllers/validation/model-configuration.ts"],"sourcesContent":["import { yup } from '@strapi/utils';\nimport { getService } from '../../utils';\nimport { isListable, hasEditableAttribute } from '../../services/utils/configuration/attributes';\nimport { isValidDefaultSort } from '../../services/utils/configuration/settings';\n\n/**\n * Creates the validation schema for content-type configurations\n */\nexport default (schema: any, opts = {}) =>\n yup\n .object()\n .shape({\n settings: createSettingsSchema(schema).default(null).nullable(),\n metadatas: createMetadasSchema(schema).default(null).nullable(),\n layouts: createLayoutsSchema(schema, opts).default(null).nullable(),\n options: yup.object().optional(),\n })\n .noUnknown();\n\nconst createSettingsSchema = (schema: any) => {\n const validAttributes = Object.keys(schema.attributes).filter((key) => isListable(schema, key));\n\n return yup\n .object()\n .shape({\n bulkable: yup.boolean().required(),\n filterable: yup.boolean().required(),\n pageSize: yup.number().integer().min(10).max(100).required(),\n searchable: yup.boolean().required(),\n // should be reset when the type changes\n mainField: yup.string().oneOf(validAttributes.concat('id')).default('id'),\n // should be reset when the type changes\n defaultSortBy: yup\n .string()\n // eslint-disable-next-line no-template-curly-in-string -- Yup interpolation placeholder\n .test('is-valid-sort-attribute', '${path} is not a valid sort attribute', async (value) =>\n isValidDefaultSort(schema, value)\n )\n .default('id'),\n defaultSortOrder: yup.string().oneOf(['ASC', 'DESC']).default('ASC'),\n relationOpenMode: yup.string().oneOf(['modal', 'page', 'newTab']).default('modal'),\n })\n .noUnknown();\n};\n\nconst createMetadasSchema = (schema: any) => {\n return yup.object().shape(\n Object.keys(schema.attributes).reduce((acc: any, key) => {\n acc[key] = yup\n .object()\n .shape({\n edit: yup\n .object()\n .shape({\n label: yup.string(),\n description: yup.string().nullable(),\n placeholder: yup.string().nullable(),\n editable: yup.boolean(),\n visible: yup.boolean(),\n mainField: yup.lazy((value) => {\n if (!value) {\n return yup.string();\n }\n\n const targetSchema = getService('content-types').findContentType(\n schema.attributes[key].targetModel\n );\n\n if (!targetSchema) {\n return yup.string();\n }\n\n const validAttributes = Object.keys(targetSchema.attributes).filter((key) =>\n isListable(targetSchema, key)\n );\n\n return yup.string().oneOf(validAttributes.concat('id')).default('id');\n }),\n })\n .noUnknown()\n .required(),\n list: yup\n .object()\n .shape({\n label: yup.string(),\n searchable: yup.boolean(),\n sortable: yup.boolean(),\n })\n .noUnknown()\n .required(),\n })\n .noUnknown();\n\n return acc;\n }, {})\n );\n};\n\nconst createArrayTest = ({ allowUndefined = false } = {}) => ({\n name: 'isArray',\n // eslint-disable-next-line no-template-curly-in-string -- Yup interpolation placeholder\n message: '${path} is required and must be an array',\n test: (val: any) => (allowUndefined === true && val === undefined ? true : Array.isArray(val)),\n});\n\nconst createLayoutsSchema = (schema: any, opts = {}) => {\n const validAttributes = Object.keys(schema.attributes).filter((key) => isListable(schema, key));\n\n const editAttributes = Object.keys(schema.attributes).filter((key) =>\n hasEditableAttribute(schema, key)\n );\n\n return yup.object().shape({\n edit: yup\n .array()\n .of(\n yup.array().of(\n yup\n .object()\n .shape({\n name: yup.string().oneOf(editAttributes).required(),\n size: yup.number().integer().positive().required(),\n })\n .noUnknown()\n )\n )\n .test(createArrayTest(opts)),\n list: yup.array().of(yup.string().oneOf(validAttributes)).test(createArrayTest(opts)),\n });\n};\n"],"names":["schema","opts","yup","object","shape","settings","createSettingsSchema","default","nullable","metadatas","createMetadasSchema","layouts","createLayoutsSchema","options","optional","noUnknown","validAttributes","Object","keys","attributes","filter","key","isListable","bulkable","boolean","required","filterable","pageSize","number","integer","min","max","searchable","mainField","string","oneOf","concat","defaultSortBy","test","value","isValidDefaultSort","defaultSortOrder","relationOpenMode","reduce","acc","edit","label","description","placeholder","editable","visible","lazy","targetSchema","getService","findContentType","targetModel","list","sortable","createArrayTest","allowUndefined","name","message","val","undefined","Array","isArray","editAttributes","hasEditableAttribute","array","of","size","positive"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"model-configuration.js","sources":["../../../../server/src/controllers/validation/model-configuration.ts"],"sourcesContent":["import { yup } from '@strapi/utils';\nimport { getService } from '../../utils';\nimport { isListable, hasEditableAttribute } from '../../services/utils/configuration/attributes';\nimport { isValidDefaultSort } from '../../services/utils/configuration/settings';\n\n/**\n * Creates the validation schema for content-type configurations\n */\nexport default (schema: any, opts = {}) =>\n yup\n .object()\n .shape({\n settings: createSettingsSchema(schema).default(null).nullable(),\n metadatas: createMetadasSchema(schema).default(null).nullable(),\n layouts: createLayoutsSchema(schema, opts).default(null).nullable(),\n options: yup.object().optional(),\n })\n .noUnknown();\n\nconst createSettingsSchema = (schema: any) => {\n const validAttributes = Object.keys(schema.attributes).filter((key) => isListable(schema, key));\n\n return yup\n .object()\n .shape({\n bulkable: yup.boolean().required(),\n filterable: yup.boolean().required(),\n pageSize: yup.number().integer().min(10).max(100).required(),\n searchable: yup.boolean().required(),\n // should be reset when the type changes\n mainField: yup.string().oneOf(validAttributes.concat('id')).default('id'),\n // should be reset when the type changes\n defaultSortBy: yup\n .string()\n // eslint-disable-next-line no-template-curly-in-string -- Yup interpolation placeholder\n .test('is-valid-sort-attribute', '${path} is not a valid sort attribute', async (value) =>\n isValidDefaultSort(schema, value)\n )\n .default('id'),\n defaultSortOrder: yup.string().oneOf(['ASC', 'DESC']).default('ASC'),\n relationOpenMode: yup.string().oneOf(['modal', 'page', 'newTab']).default('modal'),\n customOrder: yup.boolean().nullable(),\n })\n .noUnknown();\n};\n\nconst createMetadasSchema = (schema: any) => {\n return yup.object().shape(\n Object.keys(schema.attributes).reduce((acc: any, key) => {\n acc[key] = yup\n .object()\n .shape({\n edit: yup\n .object()\n .shape({\n label: yup.string(),\n description: yup.string().nullable(),\n placeholder: yup.string().nullable(),\n editable: yup.boolean(),\n visible: yup.boolean(),\n mainField: yup.lazy((value) => {\n if (!value) {\n return yup.string();\n }\n\n const targetSchema = getService('content-types').findContentType(\n schema.attributes[key].targetModel\n );\n\n if (!targetSchema) {\n return yup.string();\n }\n\n const validAttributes = Object.keys(targetSchema.attributes).filter((key) =>\n isListable(targetSchema, key)\n );\n\n return yup.string().oneOf(validAttributes.concat('id')).default('id');\n }),\n })\n .noUnknown()\n .required(),\n list: yup\n .object()\n .shape({\n label: yup.string(),\n searchable: yup.boolean(),\n sortable: yup.boolean(),\n })\n .noUnknown()\n .required(),\n })\n .noUnknown();\n\n return acc;\n }, {})\n );\n};\n\nconst createArrayTest = ({ allowUndefined = false } = {}) => ({\n name: 'isArray',\n // eslint-disable-next-line no-template-curly-in-string -- Yup interpolation placeholder\n message: '${path} is required and must be an array',\n test: (val: any) => (allowUndefined === true && val === undefined ? true : Array.isArray(val)),\n});\n\nconst createLayoutsSchema = (schema: any, opts = {}) => {\n const validAttributes = Object.keys(schema.attributes).filter((key) => isListable(schema, key));\n\n const editAttributes = Object.keys(schema.attributes).filter((key) =>\n hasEditableAttribute(schema, key)\n );\n\n return yup.object().shape({\n edit: yup\n .array()\n .of(\n yup.array().of(\n yup\n .object()\n .shape({\n name: yup.string().oneOf(editAttributes).required(),\n size: yup.number().integer().positive().required(),\n })\n .noUnknown()\n )\n )\n .test(createArrayTest(opts)),\n list: yup.array().of(yup.string().oneOf(validAttributes)).test(createArrayTest(opts)),\n });\n};\n"],"names":["schema","opts","yup","object","shape","settings","createSettingsSchema","default","nullable","metadatas","createMetadasSchema","layouts","createLayoutsSchema","options","optional","noUnknown","validAttributes","Object","keys","attributes","filter","key","isListable","bulkable","boolean","required","filterable","pageSize","number","integer","min","max","searchable","mainField","string","oneOf","concat","defaultSortBy","test","value","isValidDefaultSort","defaultSortOrder","relationOpenMode","customOrder","reduce","acc","edit","label","description","placeholder","editable","visible","lazy","targetSchema","getService","findContentType","targetModel","list","sortable","createArrayTest","allowUndefined","name","message","val","undefined","Array","isArray","editAttributes","hasEditableAttribute","array","of","size","positive"],"mappings":";;;;;;;AAKA;;AAEC,IACD,qCAAe,CAAA,CAACA,MAAAA,EAAaC,IAAAA,GAAO,EAAE,GACpCC,eAAAA,CACGC,MAAM,EAAA,CACNC,KAAK,CAAC;AACLC,QAAAA,QAAAA,EAAUC,oBAAAA,CAAqBN,MAAAA,CAAAA,CAAQO,OAAO,CAAC,MAAMC,QAAQ,EAAA;AAC7DC,QAAAA,SAAAA,EAAWC,mBAAAA,CAAoBV,MAAAA,CAAAA,CAAQO,OAAO,CAAC,MAAMC,QAAQ,EAAA;AAC7DG,QAAAA,OAAAA,EAASC,oBAAoBZ,MAAAA,EAAQC,IAAAA,CAAAA,CAAMM,OAAO,CAAC,MAAMC,QAAQ,EAAA;QACjEK,OAAAA,EAASX,eAAAA,CAAIC,MAAM,EAAA,CAAGW,QAAQ;KAChC,CAAA,CACCC,SAAS,EAAC;AAEf,MAAMT,uBAAuB,CAACN,MAAAA,GAAAA;AAC5B,IAAA,MAAMgB,eAAAA,GAAkBC,MAAAA,CAAOC,IAAI,CAAClB,MAAAA,CAAOmB,UAAU,CAAA,CAAEC,MAAM,CAAC,CAACC,GAAAA,GAAQC,qBAAAA,CAAWtB,MAAAA,EAAQqB,GAAAA,CAAAA,CAAAA;AAE1F,IAAA,OAAOnB,eAAAA,CACJC,MAAM,EAAA,CACNC,KAAK,CAAC;QACLmB,QAAAA,EAAUrB,eAAAA,CAAIsB,OAAO,EAAA,CAAGC,QAAQ,EAAA;QAChCC,UAAAA,EAAYxB,eAAAA,CAAIsB,OAAO,EAAA,CAAGC,QAAQ,EAAA;QAClCE,QAAAA,EAAUzB,eAAAA,CAAI0B,MAAM,EAAA,CAAGC,OAAO,EAAA,CAAGC,GAAG,CAAC,EAAA,CAAA,CAAIC,GAAG,CAAC,GAAA,CAAA,CAAKN,QAAQ,EAAA;QAC1DO,UAAAA,EAAY9B,eAAAA,CAAIsB,OAAO,EAAA,CAAGC,QAAQ,EAAA;;QAElCQ,SAAAA,EAAW/B,eAAAA,CAAIgC,MAAM,EAAA,CAAGC,KAAK,CAACnB,gBAAgBoB,MAAM,CAAC,IAAA,CAAA,CAAA,CAAO7B,OAAO,CAAC,IAAA,CAAA;;QAEpE8B,aAAAA,EAAenC,eAAAA,CACZgC,MAAM,EACP;SACCI,IAAI,CAAC,2BAA2B,uCAAA,EAAyC,OAAOC,QAC/EC,2BAAAA,CAAmBxC,MAAAA,EAAQuC,KAAAA,CAAAA,CAAAA,CAE5BhC,OAAO,CAAC,IAAA,CAAA;AACXkC,QAAAA,gBAAAA,EAAkBvC,eAAAA,CAAIgC,MAAM,EAAA,CAAGC,KAAK,CAAC;AAAC,YAAA,KAAA;AAAO,YAAA;AAAO,SAAA,CAAA,CAAE5B,OAAO,CAAC,KAAA,CAAA;AAC9DmC,QAAAA,gBAAAA,EAAkBxC,eAAAA,CAAIgC,MAAM,EAAA,CAAGC,KAAK,CAAC;AAAC,YAAA,OAAA;AAAS,YAAA,MAAA;AAAQ,YAAA;AAAS,SAAA,CAAA,CAAE5B,OAAO,CAAC,OAAA,CAAA;QAC1EoC,WAAAA,EAAazC,eAAAA,CAAIsB,OAAO,EAAA,CAAGhB,QAAQ;AACrC,KAAA,CAAA,CACCO,SAAS,EAAA;AACd,CAAA;AAEA,MAAML,sBAAsB,CAACV,MAAAA,GAAAA;AAC3B,IAAA,OAAOE,eAAAA,CAAIC,MAAM,EAAA,CAAGC,KAAK,CACvBa,MAAAA,CAAOC,IAAI,CAAClB,MAAAA,CAAOmB,UAAU,CAAA,CAAEyB,MAAM,CAAC,CAACC,GAAAA,EAAUxB,GAAAA,GAAAA;AAC/CwB,QAAAA,GAAG,CAACxB,GAAAA,CAAI,GAAGnB,gBACRC,MAAM,EAAA,CACNC,KAAK,CAAC;AACL0C,YAAAA,IAAAA,EAAM5C,eAAAA,CACHC,MAAM,EAAA,CACNC,KAAK,CAAC;AACL2C,gBAAAA,KAAAA,EAAO7C,gBAAIgC,MAAM,EAAA;gBACjBc,WAAAA,EAAa9C,eAAAA,CAAIgC,MAAM,EAAA,CAAG1B,QAAQ,EAAA;gBAClCyC,WAAAA,EAAa/C,eAAAA,CAAIgC,MAAM,EAAA,CAAG1B,QAAQ,EAAA;AAClC0C,gBAAAA,QAAAA,EAAUhD,gBAAIsB,OAAO,EAAA;AACrB2B,gBAAAA,OAAAA,EAASjD,gBAAIsB,OAAO,EAAA;gBACpBS,SAAAA,EAAW/B,eAAAA,CAAIkD,IAAI,CAAC,CAACb,KAAAA,GAAAA;AACnB,oBAAA,IAAI,CAACA,KAAAA,EAAO;AACV,wBAAA,OAAOrC,gBAAIgC,MAAM,EAAA;AACnB,oBAAA;oBAEA,MAAMmB,YAAAA,GAAeC,gBAAAA,CAAW,eAAA,CAAA,CAAiBC,eAAe,CAC9DvD,OAAOmB,UAAU,CAACE,GAAAA,CAAI,CAACmC,WAAW,CAAA;AAGpC,oBAAA,IAAI,CAACH,YAAAA,EAAc;AACjB,wBAAA,OAAOnD,gBAAIgC,MAAM,EAAA;AACnB,oBAAA;AAEA,oBAAA,MAAMlB,eAAAA,GAAkBC,MAAAA,CAAOC,IAAI,CAACmC,YAAAA,CAAalC,UAAU,CAAA,CAAEC,MAAM,CAAC,CAACC,GAAAA,GACnEC,qBAAAA,CAAW+B,YAAAA,EAAchC,GAAAA,CAAAA,CAAAA;oBAG3B,OAAOnB,eAAAA,CAAIgC,MAAM,EAAA,CAAGC,KAAK,CAACnB,gBAAgBoB,MAAM,CAAC,IAAA,CAAA,CAAA,CAAO7B,OAAO,CAAC,IAAA,CAAA;AAClE,gBAAA,CAAA;aACF,CAAA,CACCQ,SAAS,GACTU,QAAQ,EAAA;AACXgC,YAAAA,IAAAA,EAAMvD,eAAAA,CACHC,MAAM,EAAA,CACNC,KAAK,CAAC;AACL2C,gBAAAA,KAAAA,EAAO7C,gBAAIgC,MAAM,EAAA;AACjBF,gBAAAA,UAAAA,EAAY9B,gBAAIsB,OAAO,EAAA;AACvBkC,gBAAAA,QAAAA,EAAUxD,gBAAIsB,OAAO;aACvB,CAAA,CACCT,SAAS,GACTU,QAAQ;AACb,SAAA,CAAA,CACCV,SAAS,EAAA;QAEZ,OAAO8B,GAAAA;AACT,IAAA,CAAA,EAAG,EAAC,CAAA,CAAA;AAER,CAAA;AAEA,MAAMc,eAAAA,GAAkB,CAAC,EAAEC,cAAAA,GAAiB,KAAK,EAAE,GAAG,EAAE,IAAM;QAC5DC,IAAAA,EAAM,SAAA;;QAENC,OAAAA,EAAS,0CAAA;QACTxB,IAAAA,EAAM,CAACyB,MAAcH,cAAAA,KAAmB,IAAA,IAAQG,QAAQC,SAAAA,GAAY,IAAA,GAAOC,KAAAA,CAAMC,OAAO,CAACH,GAAAA;KAC3F,CAAA;AAEA,MAAMnD,mBAAAA,GAAsB,CAACZ,MAAAA,EAAaC,IAAAA,GAAO,EAAE,GAAA;AACjD,IAAA,MAAMe,eAAAA,GAAkBC,MAAAA,CAAOC,IAAI,CAAClB,MAAAA,CAAOmB,UAAU,CAAA,CAAEC,MAAM,CAAC,CAACC,GAAAA,GAAQC,qBAAAA,CAAWtB,MAAAA,EAAQqB,GAAAA,CAAAA,CAAAA;AAE1F,IAAA,MAAM8C,cAAAA,GAAiBlD,MAAAA,CAAOC,IAAI,CAAClB,MAAAA,CAAOmB,UAAU,CAAA,CAAEC,MAAM,CAAC,CAACC,GAAAA,GAC5D+C,+BAAAA,CAAqBpE,MAAAA,EAAQqB,GAAAA,CAAAA,CAAAA;AAG/B,IAAA,OAAOnB,eAAAA,CAAIC,MAAM,EAAA,CAAGC,KAAK,CAAC;AACxB0C,QAAAA,IAAAA,EAAM5C,eAAAA,CACHmE,KAAK,EAAA,CACLC,EAAE,CACDpE,eAAAA,CAAImE,KAAK,EAAA,CAAGC,EAAE,CACZpE,eAAAA,CACGC,MAAM,EAAA,CACNC,KAAK,CAAC;AACLyD,YAAAA,IAAAA,EAAM3D,gBAAIgC,MAAM,EAAA,CAAGC,KAAK,CAACgC,gBAAgB1C,QAAQ,EAAA;AACjD8C,YAAAA,IAAAA,EAAMrE,gBAAI0B,MAAM,EAAA,CAAGC,OAAO,EAAA,CAAG2C,QAAQ,GAAG/C,QAAQ;AAClD,SAAA,CAAA,CACCV,SAAS,EAAA,CAAA,CAAA,CAGfuB,IAAI,CAACqB,eAAAA,CAAgB1D,IAAAA,CAAAA,CAAAA;AACxBwD,QAAAA,IAAAA,EAAMvD,eAAAA,CAAImE,KAAK,EAAA,CAAGC,EAAE,CAACpE,eAAAA,CAAIgC,MAAM,EAAA,CAAGC,KAAK,CAACnB,eAAAA,CAAAA,CAAAA,CAAkBsB,IAAI,CAACqB,eAAAA,CAAgB1D,IAAAA,CAAAA;AACjF,KAAA,CAAA;AACF,CAAA;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model-configuration.mjs","sources":["../../../../server/src/controllers/validation/model-configuration.ts"],"sourcesContent":["import { yup } from '@strapi/utils';\nimport { getService } from '../../utils';\nimport { isListable, hasEditableAttribute } from '../../services/utils/configuration/attributes';\nimport { isValidDefaultSort } from '../../services/utils/configuration/settings';\n\n/**\n * Creates the validation schema for content-type configurations\n */\nexport default (schema: any, opts = {}) =>\n yup\n .object()\n .shape({\n settings: createSettingsSchema(schema).default(null).nullable(),\n metadatas: createMetadasSchema(schema).default(null).nullable(),\n layouts: createLayoutsSchema(schema, opts).default(null).nullable(),\n options: yup.object().optional(),\n })\n .noUnknown();\n\nconst createSettingsSchema = (schema: any) => {\n const validAttributes = Object.keys(schema.attributes).filter((key) => isListable(schema, key));\n\n return yup\n .object()\n .shape({\n bulkable: yup.boolean().required(),\n filterable: yup.boolean().required(),\n pageSize: yup.number().integer().min(10).max(100).required(),\n searchable: yup.boolean().required(),\n // should be reset when the type changes\n mainField: yup.string().oneOf(validAttributes.concat('id')).default('id'),\n // should be reset when the type changes\n defaultSortBy: yup\n .string()\n // eslint-disable-next-line no-template-curly-in-string -- Yup interpolation placeholder\n .test('is-valid-sort-attribute', '${path} is not a valid sort attribute', async (value) =>\n isValidDefaultSort(schema, value)\n )\n .default('id'),\n defaultSortOrder: yup.string().oneOf(['ASC', 'DESC']).default('ASC'),\n relationOpenMode: yup.string().oneOf(['modal', 'page', 'newTab']).default('modal'),\n })\n .noUnknown();\n};\n\nconst createMetadasSchema = (schema: any) => {\n return yup.object().shape(\n Object.keys(schema.attributes).reduce((acc: any, key) => {\n acc[key] = yup\n .object()\n .shape({\n edit: yup\n .object()\n .shape({\n label: yup.string(),\n description: yup.string().nullable(),\n placeholder: yup.string().nullable(),\n editable: yup.boolean(),\n visible: yup.boolean(),\n mainField: yup.lazy((value) => {\n if (!value) {\n return yup.string();\n }\n\n const targetSchema = getService('content-types').findContentType(\n schema.attributes[key].targetModel\n );\n\n if (!targetSchema) {\n return yup.string();\n }\n\n const validAttributes = Object.keys(targetSchema.attributes).filter((key) =>\n isListable(targetSchema, key)\n );\n\n return yup.string().oneOf(validAttributes.concat('id')).default('id');\n }),\n })\n .noUnknown()\n .required(),\n list: yup\n .object()\n .shape({\n label: yup.string(),\n searchable: yup.boolean(),\n sortable: yup.boolean(),\n })\n .noUnknown()\n .required(),\n })\n .noUnknown();\n\n return acc;\n }, {})\n );\n};\n\nconst createArrayTest = ({ allowUndefined = false } = {}) => ({\n name: 'isArray',\n // eslint-disable-next-line no-template-curly-in-string -- Yup interpolation placeholder\n message: '${path} is required and must be an array',\n test: (val: any) => (allowUndefined === true && val === undefined ? true : Array.isArray(val)),\n});\n\nconst createLayoutsSchema = (schema: any, opts = {}) => {\n const validAttributes = Object.keys(schema.attributes).filter((key) => isListable(schema, key));\n\n const editAttributes = Object.keys(schema.attributes).filter((key) =>\n hasEditableAttribute(schema, key)\n );\n\n return yup.object().shape({\n edit: yup\n .array()\n .of(\n yup.array().of(\n yup\n .object()\n .shape({\n name: yup.string().oneOf(editAttributes).required(),\n size: yup.number().integer().positive().required(),\n })\n .noUnknown()\n )\n )\n .test(createArrayTest(opts)),\n list: yup.array().of(yup.string().oneOf(validAttributes)).test(createArrayTest(opts)),\n });\n};\n"],"names":["schema","opts","yup","object","shape","settings","createSettingsSchema","default","nullable","metadatas","createMetadasSchema","layouts","createLayoutsSchema","options","optional","noUnknown","validAttributes","Object","keys","attributes","filter","key","isListable","bulkable","boolean","required","filterable","pageSize","number","integer","min","max","searchable","mainField","string","oneOf","concat","defaultSortBy","test","value","isValidDefaultSort","defaultSortOrder","relationOpenMode","reduce","acc","edit","label","description","placeholder","editable","visible","lazy","targetSchema","getService","findContentType","targetModel","list","sortable","createArrayTest","allowUndefined","name","message","val","undefined","Array","isArray","editAttributes","hasEditableAttribute","array","of","size","positive"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"model-configuration.mjs","sources":["../../../../server/src/controllers/validation/model-configuration.ts"],"sourcesContent":["import { yup } from '@strapi/utils';\nimport { getService } from '../../utils';\nimport { isListable, hasEditableAttribute } from '../../services/utils/configuration/attributes';\nimport { isValidDefaultSort } from '../../services/utils/configuration/settings';\n\n/**\n * Creates the validation schema for content-type configurations\n */\nexport default (schema: any, opts = {}) =>\n yup\n .object()\n .shape({\n settings: createSettingsSchema(schema).default(null).nullable(),\n metadatas: createMetadasSchema(schema).default(null).nullable(),\n layouts: createLayoutsSchema(schema, opts).default(null).nullable(),\n options: yup.object().optional(),\n })\n .noUnknown();\n\nconst createSettingsSchema = (schema: any) => {\n const validAttributes = Object.keys(schema.attributes).filter((key) => isListable(schema, key));\n\n return yup\n .object()\n .shape({\n bulkable: yup.boolean().required(),\n filterable: yup.boolean().required(),\n pageSize: yup.number().integer().min(10).max(100).required(),\n searchable: yup.boolean().required(),\n // should be reset when the type changes\n mainField: yup.string().oneOf(validAttributes.concat('id')).default('id'),\n // should be reset when the type changes\n defaultSortBy: yup\n .string()\n // eslint-disable-next-line no-template-curly-in-string -- Yup interpolation placeholder\n .test('is-valid-sort-attribute', '${path} is not a valid sort attribute', async (value) =>\n isValidDefaultSort(schema, value)\n )\n .default('id'),\n defaultSortOrder: yup.string().oneOf(['ASC', 'DESC']).default('ASC'),\n relationOpenMode: yup.string().oneOf(['modal', 'page', 'newTab']).default('modal'),\n customOrder: yup.boolean().nullable(),\n })\n .noUnknown();\n};\n\nconst createMetadasSchema = (schema: any) => {\n return yup.object().shape(\n Object.keys(schema.attributes).reduce((acc: any, key) => {\n acc[key] = yup\n .object()\n .shape({\n edit: yup\n .object()\n .shape({\n label: yup.string(),\n description: yup.string().nullable(),\n placeholder: yup.string().nullable(),\n editable: yup.boolean(),\n visible: yup.boolean(),\n mainField: yup.lazy((value) => {\n if (!value) {\n return yup.string();\n }\n\n const targetSchema = getService('content-types').findContentType(\n schema.attributes[key].targetModel\n );\n\n if (!targetSchema) {\n return yup.string();\n }\n\n const validAttributes = Object.keys(targetSchema.attributes).filter((key) =>\n isListable(targetSchema, key)\n );\n\n return yup.string().oneOf(validAttributes.concat('id')).default('id');\n }),\n })\n .noUnknown()\n .required(),\n list: yup\n .object()\n .shape({\n label: yup.string(),\n searchable: yup.boolean(),\n sortable: yup.boolean(),\n })\n .noUnknown()\n .required(),\n })\n .noUnknown();\n\n return acc;\n }, {})\n );\n};\n\nconst createArrayTest = ({ allowUndefined = false } = {}) => ({\n name: 'isArray',\n // eslint-disable-next-line no-template-curly-in-string -- Yup interpolation placeholder\n message: '${path} is required and must be an array',\n test: (val: any) => (allowUndefined === true && val === undefined ? true : Array.isArray(val)),\n});\n\nconst createLayoutsSchema = (schema: any, opts = {}) => {\n const validAttributes = Object.keys(schema.attributes).filter((key) => isListable(schema, key));\n\n const editAttributes = Object.keys(schema.attributes).filter((key) =>\n hasEditableAttribute(schema, key)\n );\n\n return yup.object().shape({\n edit: yup\n .array()\n .of(\n yup.array().of(\n yup\n .object()\n .shape({\n name: yup.string().oneOf(editAttributes).required(),\n size: yup.number().integer().positive().required(),\n })\n .noUnknown()\n )\n )\n .test(createArrayTest(opts)),\n list: yup.array().of(yup.string().oneOf(validAttributes)).test(createArrayTest(opts)),\n });\n};\n"],"names":["schema","opts","yup","object","shape","settings","createSettingsSchema","default","nullable","metadatas","createMetadasSchema","layouts","createLayoutsSchema","options","optional","noUnknown","validAttributes","Object","keys","attributes","filter","key","isListable","bulkable","boolean","required","filterable","pageSize","number","integer","min","max","searchable","mainField","string","oneOf","concat","defaultSortBy","test","value","isValidDefaultSort","defaultSortOrder","relationOpenMode","customOrder","reduce","acc","edit","label","description","placeholder","editable","visible","lazy","targetSchema","getService","findContentType","targetModel","list","sortable","createArrayTest","allowUndefined","name","message","val","undefined","Array","isArray","editAttributes","hasEditableAttribute","array","of","size","positive"],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Future flag gating the feature. While it is off, the position attribute is not added
|
|
5
|
+
* to the content types and the Content Manager behaves as before.
|
|
6
|
+
*/ const FUTURE_FLAG = 'unstableCustomOrder';
|
|
7
|
+
/**
|
|
8
|
+
* Hidden attribute holding the position of a document in the custom order of its
|
|
9
|
+
* collection type. Every row of a document (all locales, draft and published) shares
|
|
10
|
+
* the same value. Lower comes first.
|
|
11
|
+
*/ const POSITION_ATTRIBUTE = 'strapi_position';
|
|
12
|
+
/**
|
|
13
|
+
* How long an instance trusts its view of which content types have custom order enabled
|
|
14
|
+
* before reading the settings again. The setting can be changed at runtime from another
|
|
15
|
+
* instance.
|
|
16
|
+
*/ const ENABLED_CACHE_TTL_MS = 10000;
|
|
17
|
+
|
|
18
|
+
exports.ENABLED_CACHE_TTL_MS = ENABLED_CACHE_TTL_MS;
|
|
19
|
+
exports.FUTURE_FLAG = FUTURE_FLAG;
|
|
20
|
+
exports.POSITION_ATTRIBUTE = POSITION_ATTRIBUTE;
|
|
21
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sources":["../../../server/src/custom-order/constants.ts"],"sourcesContent":["/**\n * Future flag gating the feature. While it is off, the position attribute is not added\n * to the content types and the Content Manager behaves as before.\n */\nexport const FUTURE_FLAG = 'unstableCustomOrder';\n\n/**\n * Hidden attribute holding the position of a document in the custom order of its\n * collection type. Every row of a document (all locales, draft and published) shares\n * the same value. Lower comes first.\n */\nexport const POSITION_ATTRIBUTE = 'strapi_position';\n\n/**\n * How long an instance trusts its view of which content types have custom order enabled\n * before reading the settings again. The setting can be changed at runtime from another\n * instance.\n */\nexport const ENABLED_CACHE_TTL_MS = 10_000;\n"],"names":["FUTURE_FLAG","POSITION_ATTRIBUTE","ENABLED_CACHE_TTL_MS"],"mappings":";;AAAA;;;IAIO,MAAMA,WAAAA,GAAc;AAE3B;;;;IAKO,MAAMC,kBAAAA,GAAqB;AAElC;;;;IAKO,MAAMC,oBAAAA,GAAuB;;;;;;"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Future flag gating the feature. While it is off, the position attribute is not added
|
|
3
|
+
* to the content types and the Content Manager behaves as before.
|
|
4
|
+
*/ const FUTURE_FLAG = 'unstableCustomOrder';
|
|
5
|
+
/**
|
|
6
|
+
* Hidden attribute holding the position of a document in the custom order of its
|
|
7
|
+
* collection type. Every row of a document (all locales, draft and published) shares
|
|
8
|
+
* the same value. Lower comes first.
|
|
9
|
+
*/ const POSITION_ATTRIBUTE = 'strapi_position';
|
|
10
|
+
/**
|
|
11
|
+
* How long an instance trusts its view of which content types have custom order enabled
|
|
12
|
+
* before reading the settings again. The setting can be changed at runtime from another
|
|
13
|
+
* instance.
|
|
14
|
+
*/ const ENABLED_CACHE_TTL_MS = 10000;
|
|
15
|
+
|
|
16
|
+
export { ENABLED_CACHE_TTL_MS, FUTURE_FLAG, POSITION_ATTRIBUTE };
|
|
17
|
+
//# sourceMappingURL=constants.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.mjs","sources":["../../../server/src/custom-order/constants.ts"],"sourcesContent":["/**\n * Future flag gating the feature. While it is off, the position attribute is not added\n * to the content types and the Content Manager behaves as before.\n */\nexport const FUTURE_FLAG = 'unstableCustomOrder';\n\n/**\n * Hidden attribute holding the position of a document in the custom order of its\n * collection type. Every row of a document (all locales, draft and published) shares\n * the same value. Lower comes first.\n */\nexport const POSITION_ATTRIBUTE = 'strapi_position';\n\n/**\n * How long an instance trusts its view of which content types have custom order enabled\n * before reading the settings again. The setting can be changed at runtime from another\n * instance.\n */\nexport const ENABLED_CACHE_TTL_MS = 10_000;\n"],"names":["FUTURE_FLAG","POSITION_ATTRIBUTE","ENABLED_CACHE_TTL_MS"],"mappings":"AAAA;;;IAIO,MAAMA,WAAAA,GAAc;AAE3B;;;;IAKO,MAAMC,kBAAAA,GAAqB;AAElC;;;;IAKO,MAAMC,oBAAAA,GAAuB;;;;"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var strapiUtils = require('@strapi/utils');
|
|
4
|
+
var index = require('../../utils/index.js');
|
|
5
|
+
var dimensions = require('../../controllers/validation/dimensions.js');
|
|
6
|
+
var zod = require('../../validation/zod.js');
|
|
7
|
+
var utils = require('../utils.js');
|
|
8
|
+
|
|
9
|
+
// Not strict: like for the other document actions, i18n adds the locale of the request to the body
|
|
10
|
+
const moveInputSchema = strapiUtils.z.looseObject({
|
|
11
|
+
before: strapiUtils.z.string().min(1).optional(),
|
|
12
|
+
after: strapiUtils.z.string().min(1).optional()
|
|
13
|
+
}).refine(({ before, after })=>before === undefined !== (after === undefined), {
|
|
14
|
+
error: 'Expected either "before" or "after" to be the documentId of another entry'
|
|
15
|
+
});
|
|
16
|
+
const validateMoveInput = zod.validateZodAsync(moveInputSchema);
|
|
17
|
+
const createCustomOrderController = ({ strapi })=>{
|
|
18
|
+
return {
|
|
19
|
+
async move (ctx) {
|
|
20
|
+
if (!utils.isFeatureEnabled(strapi)) {
|
|
21
|
+
return ctx.notFound();
|
|
22
|
+
}
|
|
23
|
+
const { userAbility } = ctx.state;
|
|
24
|
+
const { id } = ctx.params;
|
|
25
|
+
const model = ctx.params.model;
|
|
26
|
+
const { body } = ctx.request;
|
|
27
|
+
const { before, after } = await validateMoveInput(body);
|
|
28
|
+
const placement = before !== undefined ? 'before' : 'after';
|
|
29
|
+
const anchorId = before ?? after;
|
|
30
|
+
if (anchorId === undefined || anchorId === id) {
|
|
31
|
+
throw new strapiUtils.errors.ValidationError('An entry cannot be moved next to itself');
|
|
32
|
+
}
|
|
33
|
+
const customOrder = utils.getService(strapi, 'custom-order');
|
|
34
|
+
// The setting may have just been turned on from another instance
|
|
35
|
+
if (!customOrder.isEnabled(model)) {
|
|
36
|
+
await customOrder.refresh();
|
|
37
|
+
}
|
|
38
|
+
if (!customOrder.isEnabled(model)) {
|
|
39
|
+
throw new strapiUtils.errors.ValidationError('Custom order is not enabled for this content type');
|
|
40
|
+
}
|
|
41
|
+
const permissionChecker = index.getService('permission-checker').create({
|
|
42
|
+
userAbility,
|
|
43
|
+
model
|
|
44
|
+
});
|
|
45
|
+
if (permissionChecker.cannot.update()) {
|
|
46
|
+
return ctx.forbidden();
|
|
47
|
+
}
|
|
48
|
+
const permissionQuery = await permissionChecker.sanitizedQuery.update(ctx.query);
|
|
49
|
+
const populate = await index.getService('populate-builder')(model).populateFromQuery(permissionQuery).build();
|
|
50
|
+
const { locale } = await dimensions.getDocumentLocaleAndStatus(body, model);
|
|
51
|
+
const document = await index.getService('document-manager').findOne(id, model, {
|
|
52
|
+
populate,
|
|
53
|
+
locale
|
|
54
|
+
});
|
|
55
|
+
if (!document) {
|
|
56
|
+
return ctx.notFound();
|
|
57
|
+
}
|
|
58
|
+
if (permissionChecker.cannot.update(document)) {
|
|
59
|
+
return ctx.forbidden();
|
|
60
|
+
}
|
|
61
|
+
await customOrder.move({
|
|
62
|
+
uid: model,
|
|
63
|
+
documentId: id,
|
|
64
|
+
anchorId,
|
|
65
|
+
placement
|
|
66
|
+
});
|
|
67
|
+
return {
|
|
68
|
+
data: {
|
|
69
|
+
documentId: id
|
|
70
|
+
}
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
exports.createCustomOrderController = createCustomOrderController;
|
|
77
|
+
//# sourceMappingURL=custom-order.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"custom-order.js","sources":["../../../../server/src/custom-order/controllers/custom-order.ts"],"sourcesContent":["import { errors, z } from '@strapi/utils';\nimport type { Core, UID } from '@strapi/types';\n\nimport { getService as getContentManagerService } from '../../utils';\nimport { getDocumentLocaleAndStatus } from '../../controllers/validation/dimensions';\nimport { validateZodAsync } from '../../validation/zod';\nimport { getService, isFeatureEnabled } from '../utils';\nimport type { CustomOrder } from '../../../../shared/contracts';\n\n// Not strict: like for the other document actions, i18n adds the locale of the request to the body\nconst moveInputSchema = z\n .looseObject({\n before: z.string().min(1).optional(),\n after: z.string().min(1).optional(),\n })\n .refine(({ before, after }) => (before === undefined) !== (after === undefined), {\n error: 'Expected either \"before\" or \"after\" to be the documentId of another entry',\n });\n\nconst validateMoveInput = validateZodAsync(moveInputSchema);\n\nconst createCustomOrderController = ({ strapi }: { strapi: Core.Strapi }) => {\n return {\n async move(ctx) {\n if (!isFeatureEnabled(strapi)) {\n return ctx.notFound();\n }\n\n const { userAbility } = ctx.state;\n const { id } = ctx.params as CustomOrder.MoveDocument.Params;\n const model = ctx.params.model as UID.CollectionType;\n const { body } = ctx.request;\n\n const { before, after } = await validateMoveInput(body);\n\n const placement = before !== undefined ? 'before' : 'after';\n const anchorId = before ?? after;\n\n if (anchorId === undefined || anchorId === id) {\n throw new errors.ValidationError('An entry cannot be moved next to itself');\n }\n\n const customOrder = getService(strapi, 'custom-order');\n\n // The setting may have just been turned on from another instance\n if (!customOrder.isEnabled(model)) {\n await customOrder.refresh();\n }\n\n if (!customOrder.isEnabled(model)) {\n throw new errors.ValidationError('Custom order is not enabled for this content type');\n }\n\n const permissionChecker = getContentManagerService('permission-checker').create({\n userAbility,\n model,\n });\n\n if (permissionChecker.cannot.update()) {\n return ctx.forbidden();\n }\n\n const permissionQuery = await permissionChecker.sanitizedQuery.update(ctx.query);\n const populate = await getContentManagerService('populate-builder')(model)\n .populateFromQuery(permissionQuery)\n .build();\n\n const { locale } = await getDocumentLocaleAndStatus(body, model);\n const document = await getContentManagerService('document-manager').findOne(id, model, {\n populate,\n locale,\n });\n\n if (!document) {\n return ctx.notFound();\n }\n\n if (permissionChecker.cannot.update(document)) {\n return ctx.forbidden();\n }\n\n await customOrder.move({ uid: model, documentId: id, anchorId, placement });\n\n return {\n data: { documentId: id },\n } satisfies CustomOrder.MoveDocument.Response;\n },\n } satisfies Core.Controller;\n};\n\nexport { createCustomOrderController };\n"],"names":["moveInputSchema","z","looseObject","before","string","min","optional","after","refine","undefined","error","validateMoveInput","validateZodAsync","createCustomOrderController","strapi","move","ctx","isFeatureEnabled","notFound","userAbility","state","id","params","model","body","request","placement","anchorId","errors","ValidationError","customOrder","getService","isEnabled","refresh","permissionChecker","getContentManagerService","create","cannot","update","forbidden","permissionQuery","sanitizedQuery","query","populate","populateFromQuery","build","locale","getDocumentLocaleAndStatus","document","findOne","uid","documentId","data"],"mappings":"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"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { z, errors } from '@strapi/utils';
|
|
2
|
+
import { getService as getService$1 } from '../../utils/index.mjs';
|
|
3
|
+
import { getDocumentLocaleAndStatus } from '../../controllers/validation/dimensions.mjs';
|
|
4
|
+
import { validateZodAsync } from '../../validation/zod.mjs';
|
|
5
|
+
import { isFeatureEnabled, getService } from '../utils.mjs';
|
|
6
|
+
|
|
7
|
+
// Not strict: like for the other document actions, i18n adds the locale of the request to the body
|
|
8
|
+
const moveInputSchema = z.looseObject({
|
|
9
|
+
before: z.string().min(1).optional(),
|
|
10
|
+
after: z.string().min(1).optional()
|
|
11
|
+
}).refine(({ before, after })=>before === undefined !== (after === undefined), {
|
|
12
|
+
error: 'Expected either "before" or "after" to be the documentId of another entry'
|
|
13
|
+
});
|
|
14
|
+
const validateMoveInput = validateZodAsync(moveInputSchema);
|
|
15
|
+
const createCustomOrderController = ({ strapi })=>{
|
|
16
|
+
return {
|
|
17
|
+
async move (ctx) {
|
|
18
|
+
if (!isFeatureEnabled(strapi)) {
|
|
19
|
+
return ctx.notFound();
|
|
20
|
+
}
|
|
21
|
+
const { userAbility } = ctx.state;
|
|
22
|
+
const { id } = ctx.params;
|
|
23
|
+
const model = ctx.params.model;
|
|
24
|
+
const { body } = ctx.request;
|
|
25
|
+
const { before, after } = await validateMoveInput(body);
|
|
26
|
+
const placement = before !== undefined ? 'before' : 'after';
|
|
27
|
+
const anchorId = before ?? after;
|
|
28
|
+
if (anchorId === undefined || anchorId === id) {
|
|
29
|
+
throw new errors.ValidationError('An entry cannot be moved next to itself');
|
|
30
|
+
}
|
|
31
|
+
const customOrder = getService(strapi, 'custom-order');
|
|
32
|
+
// The setting may have just been turned on from another instance
|
|
33
|
+
if (!customOrder.isEnabled(model)) {
|
|
34
|
+
await customOrder.refresh();
|
|
35
|
+
}
|
|
36
|
+
if (!customOrder.isEnabled(model)) {
|
|
37
|
+
throw new errors.ValidationError('Custom order is not enabled for this content type');
|
|
38
|
+
}
|
|
39
|
+
const permissionChecker = getService$1('permission-checker').create({
|
|
40
|
+
userAbility,
|
|
41
|
+
model
|
|
42
|
+
});
|
|
43
|
+
if (permissionChecker.cannot.update()) {
|
|
44
|
+
return ctx.forbidden();
|
|
45
|
+
}
|
|
46
|
+
const permissionQuery = await permissionChecker.sanitizedQuery.update(ctx.query);
|
|
47
|
+
const populate = await getService$1('populate-builder')(model).populateFromQuery(permissionQuery).build();
|
|
48
|
+
const { locale } = await getDocumentLocaleAndStatus(body, model);
|
|
49
|
+
const document = await getService$1('document-manager').findOne(id, model, {
|
|
50
|
+
populate,
|
|
51
|
+
locale
|
|
52
|
+
});
|
|
53
|
+
if (!document) {
|
|
54
|
+
return ctx.notFound();
|
|
55
|
+
}
|
|
56
|
+
if (permissionChecker.cannot.update(document)) {
|
|
57
|
+
return ctx.forbidden();
|
|
58
|
+
}
|
|
59
|
+
await customOrder.move({
|
|
60
|
+
uid: model,
|
|
61
|
+
documentId: id,
|
|
62
|
+
anchorId,
|
|
63
|
+
placement
|
|
64
|
+
});
|
|
65
|
+
return {
|
|
66
|
+
data: {
|
|
67
|
+
documentId: id
|
|
68
|
+
}
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
};
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
export { createCustomOrderController };
|
|
75
|
+
//# sourceMappingURL=custom-order.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"custom-order.mjs","sources":["../../../../server/src/custom-order/controllers/custom-order.ts"],"sourcesContent":["import { errors, z } from '@strapi/utils';\nimport type { Core, UID } from '@strapi/types';\n\nimport { getService as getContentManagerService } from '../../utils';\nimport { getDocumentLocaleAndStatus } from '../../controllers/validation/dimensions';\nimport { validateZodAsync } from '../../validation/zod';\nimport { getService, isFeatureEnabled } from '../utils';\nimport type { CustomOrder } from '../../../../shared/contracts';\n\n// Not strict: like for the other document actions, i18n adds the locale of the request to the body\nconst moveInputSchema = z\n .looseObject({\n before: z.string().min(1).optional(),\n after: z.string().min(1).optional(),\n })\n .refine(({ before, after }) => (before === undefined) !== (after === undefined), {\n error: 'Expected either \"before\" or \"after\" to be the documentId of another entry',\n });\n\nconst validateMoveInput = validateZodAsync(moveInputSchema);\n\nconst createCustomOrderController = ({ strapi }: { strapi: Core.Strapi }) => {\n return {\n async move(ctx) {\n if (!isFeatureEnabled(strapi)) {\n return ctx.notFound();\n }\n\n const { userAbility } = ctx.state;\n const { id } = ctx.params as CustomOrder.MoveDocument.Params;\n const model = ctx.params.model as UID.CollectionType;\n const { body } = ctx.request;\n\n const { before, after } = await validateMoveInput(body);\n\n const placement = before !== undefined ? 'before' : 'after';\n const anchorId = before ?? after;\n\n if (anchorId === undefined || anchorId === id) {\n throw new errors.ValidationError('An entry cannot be moved next to itself');\n }\n\n const customOrder = getService(strapi, 'custom-order');\n\n // The setting may have just been turned on from another instance\n if (!customOrder.isEnabled(model)) {\n await customOrder.refresh();\n }\n\n if (!customOrder.isEnabled(model)) {\n throw new errors.ValidationError('Custom order is not enabled for this content type');\n }\n\n const permissionChecker = getContentManagerService('permission-checker').create({\n userAbility,\n model,\n });\n\n if (permissionChecker.cannot.update()) {\n return ctx.forbidden();\n }\n\n const permissionQuery = await permissionChecker.sanitizedQuery.update(ctx.query);\n const populate = await getContentManagerService('populate-builder')(model)\n .populateFromQuery(permissionQuery)\n .build();\n\n const { locale } = await getDocumentLocaleAndStatus(body, model);\n const document = await getContentManagerService('document-manager').findOne(id, model, {\n populate,\n locale,\n });\n\n if (!document) {\n return ctx.notFound();\n }\n\n if (permissionChecker.cannot.update(document)) {\n return ctx.forbidden();\n }\n\n await customOrder.move({ uid: model, documentId: id, anchorId, placement });\n\n return {\n data: { documentId: id },\n } satisfies CustomOrder.MoveDocument.Response;\n },\n } satisfies Core.Controller;\n};\n\nexport { createCustomOrderController };\n"],"names":["moveInputSchema","z","looseObject","before","string","min","optional","after","refine","undefined","error","validateMoveInput","validateZodAsync","createCustomOrderController","strapi","move","ctx","isFeatureEnabled","notFound","userAbility","state","id","params","model","body","request","placement","anchorId","errors","ValidationError","customOrder","getService","isEnabled","refresh","permissionChecker","getContentManagerService","create","cannot","update","forbidden","permissionQuery","sanitizedQuery","query","populate","populateFromQuery","build","locale","getDocumentLocaleAndStatus","document","findOne","uid","documentId","data"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../server/src/custom-order/controllers/index.ts"],"sourcesContent":["import type { Plugin } from '@strapi/types';\nimport { createCustomOrderController } from './custom-order';\n\nexport const controllers = {\n 'custom-order': createCustomOrderController,\n /**\n * Casting is needed because the types aren't aware that Strapi supports\n * passing a controller factory as the value, instead of a controller object directly\n */\n} as unknown as Plugin.LoadedPlugin['controllers'];\n"],"names":["controllers","createCustomOrderController"],"mappings":";;;;MAGaA,WAAAA,GAAc;IACzB,cAAA,EAAgBC;AAKlB;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../../../../server/src/custom-order/controllers/index.ts"],"sourcesContent":["import type { Plugin } from '@strapi/types';\nimport { createCustomOrderController } from './custom-order';\n\nexport const controllers = {\n 'custom-order': createCustomOrderController,\n /**\n * Casting is needed because the types aren't aware that Strapi supports\n * passing a controller factory as the value, instead of a controller object directly\n */\n} as unknown as Plugin.LoadedPlugin['controllers'];\n"],"names":["controllers","createCustomOrderController"],"mappings":";;MAGaA,WAAAA,GAAc;IACzB,cAAA,EAAgBC;AAKlB;;;;"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var strapiUtils = require('@strapi/utils');
|
|
4
|
+
var _ = require('lodash');
|
|
5
|
+
var index$2 = require('./controllers/index.js');
|
|
6
|
+
var index = require('./services/index.js');
|
|
7
|
+
var index$1 = require('./routes/index.js');
|
|
8
|
+
var constants = require('./constants.js');
|
|
9
|
+
var utils = require('./utils.js');
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Custom order can be turned on for any collection type listed in the Content Manager.
|
|
13
|
+
*/ const isOrderable = (contentType)=>strapiUtils.contentTypes.isCollectionType(contentType) && _.get(contentType, 'pluginOptions.content-manager.visible', true) === true;
|
|
14
|
+
/**
|
|
15
|
+
* The future flag is read when the server starts rather than when this module is loaded,
|
|
16
|
+
* so the controllers, services and routes are always there and do nothing while it is off.
|
|
17
|
+
*/ const feature = {
|
|
18
|
+
register ({ strapi }) {
|
|
19
|
+
if (!utils.isFeatureEnabled(strapi)) {
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* The setting is changed at runtime, while columns are only created when the server
|
|
24
|
+
* starts, so every content type that could be ordered needs the attribute up front.
|
|
25
|
+
*/ for (const contentType of Object.values(strapi.contentTypes)){
|
|
26
|
+
if (!isOrderable(contentType)) {
|
|
27
|
+
continue;
|
|
28
|
+
}
|
|
29
|
+
strapi.get('content-types').extend(contentType.uid, (schema)=>{
|
|
30
|
+
Object.assign(schema.attributes, {
|
|
31
|
+
[constants.POSITION_ATTRIBUTE]: {
|
|
32
|
+
type: 'integer',
|
|
33
|
+
configurable: false,
|
|
34
|
+
visible: false,
|
|
35
|
+
// Needed for the Content Manager to sort on it, the value itself is only ever
|
|
36
|
+
// written by moving a document
|
|
37
|
+
writable: true,
|
|
38
|
+
private: true
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
// Every default list sorts on the position, and moves look for rows without one
|
|
42
|
+
const { identifiers } = strapi.db.metadata;
|
|
43
|
+
const collectionName = schema.collectionName ?? schema.uid;
|
|
44
|
+
schema.indexes = [
|
|
45
|
+
...schema.indexes ?? [],
|
|
46
|
+
{
|
|
47
|
+
name: identifiers.getIndexName([
|
|
48
|
+
collectionName,
|
|
49
|
+
constants.POSITION_ATTRIBUTE
|
|
50
|
+
]),
|
|
51
|
+
columns: [
|
|
52
|
+
identifiers.getColumnName(constants.POSITION_ATTRIBUTE)
|
|
53
|
+
]
|
|
54
|
+
}
|
|
55
|
+
];
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
},
|
|
59
|
+
async bootstrap ({ strapi }) {
|
|
60
|
+
if (!utils.isFeatureEnabled(strapi)) {
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
await utils.getService(strapi, 'custom-order').bootstrap();
|
|
64
|
+
},
|
|
65
|
+
controllers: index$2.controllers,
|
|
66
|
+
services: index.services,
|
|
67
|
+
routes: index$1.routes
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
module.exports = feature;
|
|
71
|
+
//# sourceMappingURL=index.js.map
|