@strapi/content-manager 5.39.0 → 5.41.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/hooks/useDocument.js +21 -5
- package/dist/admin/hooks/useDocument.js.map +1 -1
- package/dist/admin/hooks/useDocument.mjs +22 -6
- package/dist/admin/hooks/useDocument.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/DocumentActions.js +1 -0
- package/dist/admin/pages/EditView/components/DocumentActions.js.map +1 -1
- package/dist/admin/pages/EditView/components/DocumentActions.mjs +3 -2
- package/dist/admin/pages/EditView/components/DocumentActions.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/Input.mjs +4 -4
- package/dist/admin/pages/EditView/components/FormInputs/Component/Input.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js +71 -44
- package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs +54 -46
- package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js +107 -88
- package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs +109 -90
- package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js +91 -106
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs +94 -109
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js +43 -23
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs +45 -25
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs +2 -2
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js +30 -19
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs +34 -23
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/UID.mjs +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.mjs +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygStyles.mjs +1 -1
- package/dist/admin/pages/EditView/components/FormLayout.js +23 -3
- package/dist/admin/pages/EditView/components/FormLayout.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormLayout.mjs +4 -3
- package/dist/admin/pages/EditView/components/FormLayout.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/Header.js +59 -9
- package/dist/admin/pages/EditView/components/Header.js.map +1 -1
- package/dist/admin/pages/EditView/components/Header.mjs +63 -13
- package/dist/admin/pages/EditView/components/Header.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/InputRenderer.js +19 -7
- package/dist/admin/pages/EditView/components/InputRenderer.js.map +1 -1
- package/dist/admin/pages/EditView/components/InputRenderer.mjs +20 -8
- package/dist/admin/pages/EditView/components/InputRenderer.mjs.map +1 -1
- package/dist/admin/pages/ListView/ListViewPage.js +47 -0
- package/dist/admin/pages/ListView/ListViewPage.js.map +1 -1
- package/dist/admin/pages/ListView/ListViewPage.mjs +50 -3
- package/dist/admin/pages/ListView/ListViewPage.mjs.map +1 -1
- package/dist/admin/pages/ListView/components/BulkActions/PublishAction.js +15 -19
- package/dist/admin/pages/ListView/components/BulkActions/PublishAction.js.map +1 -1
- package/dist/admin/pages/ListView/components/BulkActions/PublishAction.mjs +15 -20
- package/dist/admin/pages/ListView/components/BulkActions/PublishAction.mjs.map +1 -1
- package/dist/admin/src/pages/EditView/components/FormInputs/Component/NonRepeatable.d.ts +3 -2
- package/dist/admin/src/pages/EditView/components/FormInputs/Component/Repeatable.d.ts +3 -2
- package/dist/admin/src/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.d.ts +3 -3
- package/dist/admin/src/pages/EditView/components/FormLayout.d.ts +1 -1
- package/dist/admin/src/pages/EditView/components/InputRenderer.d.ts +1 -1
- package/dist/admin/src/pages/ListView/components/BulkActions/PublishAction.d.ts +3 -0
- package/dist/admin/src/pages/ListView/components/Filters.d.ts +3 -0
- package/dist/admin/translations/en.json.js +3 -0
- package/dist/admin/translations/en.json.js.map +1 -1
- package/dist/admin/translations/en.json.mjs +3 -0
- package/dist/admin/translations/en.json.mjs.map +1 -1
- package/dist/server/controllers/collection-types.js +25 -28
- package/dist/server/controllers/collection-types.js.map +1 -1
- package/dist/server/controllers/collection-types.mjs +20 -23
- package/dist/server/controllers/collection-types.mjs.map +1 -1
- package/dist/server/controllers/single-types.js +2 -1
- package/dist/server/controllers/single-types.js.map +1 -1
- package/dist/server/controllers/single-types.mjs +2 -1
- package/dist/server/controllers/single-types.mjs.map +1 -1
- package/dist/server/services/document-manager.js +10 -9
- package/dist/server/services/document-manager.js.map +1 -1
- package/dist/server/services/document-manager.mjs +10 -9
- package/dist/server/services/document-manager.mjs.map +1 -1
- package/dist/server/services/document-metadata.js +84 -41
- package/dist/server/services/document-metadata.js.map +1 -1
- package/dist/server/services/document-metadata.mjs +85 -42
- package/dist/server/services/document-metadata.mjs.map +1 -1
- package/dist/server/services/populate-builder.js +11 -0
- package/dist/server/services/populate-builder.js.map +1 -1
- package/dist/server/services/populate-builder.mjs +12 -1
- package/dist/server/services/populate-builder.mjs.map +1 -1
- package/dist/server/services/utils/configuration/attributes.js +2 -1
- package/dist/server/services/utils/configuration/attributes.js.map +1 -1
- package/dist/server/services/utils/configuration/attributes.mjs +2 -1
- package/dist/server/services/utils/configuration/attributes.mjs.map +1 -1
- package/dist/server/services/utils/draft.js +8 -1
- package/dist/server/services/utils/draft.js.map +1 -1
- package/dist/server/services/utils/draft.mjs +8 -1
- package/dist/server/services/utils/draft.mjs.map +1 -1
- package/dist/server/services/utils/populate.js +73 -8
- package/dist/server/services/utils/populate.js.map +1 -1
- package/dist/server/services/utils/populate.mjs +73 -9
- package/dist/server/services/utils/populate.mjs.map +1 -1
- package/dist/server/src/controllers/collection-types.d.ts.map +1 -1
- package/dist/server/src/controllers/single-types.d.ts.map +1 -1
- package/dist/server/src/controllers/utils/metadata.d.ts +2 -2
- package/dist/server/src/index.d.ts +18 -3
- package/dist/server/src/index.d.ts.map +1 -1
- package/dist/server/src/services/document-manager.d.ts +9 -3
- package/dist/server/src/services/document-manager.d.ts.map +1 -1
- package/dist/server/src/services/document-metadata.d.ts +8 -0
- package/dist/server/src/services/document-metadata.d.ts.map +1 -1
- package/dist/server/src/services/index.d.ts +18 -3
- package/dist/server/src/services/index.d.ts.map +1 -1
- package/dist/server/src/services/populate-builder.d.ts +7 -0
- package/dist/server/src/services/populate-builder.d.ts.map +1 -1
- package/dist/server/src/services/utils/configuration/attributes.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 +21 -17
- package/dist/server/src/services/utils/populate.d.ts.map +1 -1
- package/package.json +6 -6
|
@@ -57,9 +57,10 @@ const documentManager = ({ strapi })=>{
|
|
|
57
57
|
const params = strapiUtils.pagination.withDefaultPagination(opts || {}, {
|
|
58
58
|
maxLimit: 1000
|
|
59
59
|
});
|
|
60
|
+
const { populate, sort, ...countParams } = params;
|
|
60
61
|
const [documents, total = 0] = await Promise.all([
|
|
61
62
|
strapi.documents(uid).findMany(params),
|
|
62
|
-
strapi.documents(uid).count(
|
|
63
|
+
strapi.documents(uid).count(countParams)
|
|
63
64
|
]);
|
|
64
65
|
return {
|
|
65
66
|
results: documents,
|
|
@@ -124,11 +125,9 @@ const documentManager = ({ strapi })=>{
|
|
|
124
125
|
return count > 0;
|
|
125
126
|
},
|
|
126
127
|
async delete (id, uid, opts = {}) {
|
|
127
|
-
const populate$1 = await populate.buildDeepPopulate(uid);
|
|
128
128
|
await strapi.documents(uid).delete({
|
|
129
129
|
...opts,
|
|
130
|
-
documentId: id
|
|
131
|
-
populate: populate$1
|
|
130
|
+
documentId: id
|
|
132
131
|
});
|
|
133
132
|
return {};
|
|
134
133
|
},
|
|
@@ -142,7 +141,7 @@ const documentManager = ({ strapi })=>{
|
|
|
142
141
|
};
|
|
143
142
|
},
|
|
144
143
|
async publish (id, uid, opts = {}) {
|
|
145
|
-
const populate$1 = await populate.buildDeepPopulate(uid);
|
|
144
|
+
const populate$1 = opts.populate ?? await populate.buildDeepPopulate(uid);
|
|
146
145
|
const params = {
|
|
147
146
|
...opts,
|
|
148
147
|
populate: populate$1
|
|
@@ -155,7 +154,8 @@ const documentManager = ({ strapi })=>{
|
|
|
155
154
|
async publishMany (uid, documentIds, locale) {
|
|
156
155
|
return strapi.db.transaction(async ()=>{
|
|
157
156
|
const results = await Promise.all(documentIds.map((documentId)=>this.publish(documentId, uid, {
|
|
158
|
-
locale
|
|
157
|
+
locale,
|
|
158
|
+
populate: {}
|
|
159
159
|
})));
|
|
160
160
|
const publishedEntitiesCount = results.flat().filter(Boolean).length;
|
|
161
161
|
return publishedEntitiesCount;
|
|
@@ -165,7 +165,8 @@ const documentManager = ({ strapi })=>{
|
|
|
165
165
|
const unpublishedEntries = await strapi.db.transaction(async ()=>{
|
|
166
166
|
return Promise.all(documentIds.map((id)=>strapi.documents(uid).unpublish({
|
|
167
167
|
...opts,
|
|
168
|
-
documentId: id
|
|
168
|
+
documentId: id,
|
|
169
|
+
populate: {}
|
|
169
170
|
}).then((result)=>result?.entries)));
|
|
170
171
|
});
|
|
171
172
|
const unpublishedEntitiesCount = unpublishedEntries.flat().filter(Boolean).length;
|
|
@@ -175,7 +176,7 @@ const documentManager = ({ strapi })=>{
|
|
|
175
176
|
};
|
|
176
177
|
},
|
|
177
178
|
async unpublish (id, uid, opts = {}) {
|
|
178
|
-
const populate$1 = await populate.buildDeepPopulate(uid);
|
|
179
|
+
const populate$1 = opts.populate ?? await populate.buildDeepPopulate(uid);
|
|
179
180
|
const params = {
|
|
180
181
|
...opts,
|
|
181
182
|
populate: populate$1
|
|
@@ -186,7 +187,7 @@ const documentManager = ({ strapi })=>{
|
|
|
186
187
|
}).then((result)=>result?.entries.at(0));
|
|
187
188
|
},
|
|
188
189
|
async discardDraft (id, uid, opts = {}) {
|
|
189
|
-
const populate$1 = await populate.buildDeepPopulate(uid);
|
|
190
|
+
const populate$1 = opts.populate ?? await populate.buildDeepPopulate(uid);
|
|
190
191
|
const params = {
|
|
191
192
|
...opts,
|
|
192
193
|
populate: populate$1
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"document-manager.js","sources":["../../../server/src/services/document-manager.ts"],"sourcesContent":["import { omit, pipe } from 'lodash/fp';\n\nimport { contentTypes, errors, pagination } from '@strapi/utils';\nimport type { Core, Modules, UID } from '@strapi/types';\n\nimport { buildDeepPopulate, getDeepPopulate, getDeepPopulateDraftCount } from './utils/populate';\nimport { sumDraftCounts } from './utils/draft';\n\ntype DocService = Modules.Documents.ServiceInstance;\ntype DocServiceParams<TAction extends keyof DocService> = Parameters<DocService[TAction]>[0];\nexport type Document = Modules.Documents.Result<UID.ContentType>;\n\nconst { ApplicationError } = errors;\nconst { PUBLISHED_AT_ATTRIBUTE } = contentTypes.constants;\n\nconst omitPublishedAtField = omit(PUBLISHED_AT_ATTRIBUTE);\nconst omitIdField = omit('id');\n\nconst documentManager = ({ strapi }: { strapi: Core.Strapi }) => {\n return {\n async findOne(\n id: string,\n uid: UID.CollectionType,\n opts: Omit<DocServiceParams<'findOne'>, 'documentId'> = {}\n ) {\n return strapi.documents(uid).findOne({ ...opts, documentId: id });\n },\n\n /**\n * Find multiple (or all) locales for a document\n */\n async findLocales(\n id: string | string[] | undefined,\n uid: UID.CollectionType,\n opts: {\n populate?: Modules.Documents.Params.Pick<any, 'populate'>;\n locale?: string | string[] | '*';\n isPublished?: boolean;\n }\n ) {\n // Will look for a specific locale by default\n const where: any = {};\n\n // Might not have an id if querying a single type\n if (id) {\n where.documentId = id;\n }\n\n // Search in array of locales\n if (Array.isArray(opts.locale)) {\n where.locale = { $in: opts.locale };\n } else if (opts.locale && opts.locale !== '*') {\n // Look for a specific locale, ignore if looking for all locales\n where.locale = opts.locale;\n }\n\n // Published is passed, so we filter on it, otherwise we don't filter\n if (typeof opts.isPublished === 'boolean') {\n where.publishedAt = { $notNull: opts.isPublished };\n }\n\n return strapi.db.query(uid).findMany({ populate: opts.populate, where });\n },\n\n async findMany(opts: DocServiceParams<'findMany'>, uid: UID.CollectionType) {\n const params = { ...opts, populate: getDeepPopulate(uid) } as typeof opts;\n return strapi.documents(uid).findMany(params);\n },\n\n async findPage(opts: DocServiceParams<'findMany'>, uid: UID.CollectionType) {\n const params = pagination.withDefaultPagination(opts || {}, {\n maxLimit: 1000,\n });\n\n const [documents, total = 0] = await Promise.all([\n strapi.documents(uid).findMany(params),\n strapi.documents(uid).count(params),\n ]);\n\n return {\n results: documents,\n pagination: pagination.transformPagedPaginationInfo(params, total),\n };\n },\n\n async create(uid: UID.CollectionType, opts: DocServiceParams<'create'> = {} as any) {\n const populate = opts.populate ?? (await buildDeepPopulate(uid));\n const params = { ...opts, status: 'draft' as const, populate };\n\n return strapi.documents(uid).create(params);\n },\n\n async update(\n id: Modules.Documents.ID,\n uid: UID.CollectionType,\n opts: Omit<DocServiceParams<'update'>, 'documentId'> = {} as any\n ) {\n const publishData = pipe(omitPublishedAtField, omitIdField)(opts.data || {});\n const populate = opts.populate ?? (await buildDeepPopulate(uid));\n const params = { ...opts, data: publishData, populate, status: 'draft' };\n\n return strapi.documents(uid).update({ ...params, documentId: id });\n },\n\n async clone(\n id: Modules.Documents.ID,\n body: Partial<Modules.Documents.Params.Data.Input<UID.CollectionType>>,\n uid: UID.CollectionType\n ) {\n const populate = await buildDeepPopulate(uid);\n\n // Extract the locale to pass it as a plain param\n const locale = body?.locale;\n const params = {\n // Ensure id and documentId are not copied to the clone\n data: omit(['id', 'documentId'], body),\n locale,\n populate,\n };\n\n return strapi\n .documents(uid)\n .clone({ ...params, documentId: id })\n .then((result) => result?.entries.at(0));\n },\n\n /**\n * Check if a document exists\n */\n async exists(uid: UID.CollectionType, id?: string) {\n // Collection type\n if (id) {\n const count = await strapi.db.query(uid).count({ where: { documentId: id } });\n return count > 0;\n }\n\n // Single type\n const count = await strapi.db.query(uid).count();\n return count > 0;\n },\n\n async delete(\n id: Modules.Documents.ID,\n uid: UID.CollectionType,\n opts: Omit<DocServiceParams<'delete'>, 'documentId'> = {} as any\n ) {\n const populate = await buildDeepPopulate(uid);\n\n await strapi.documents(uid).delete({\n ...opts,\n documentId: id,\n populate,\n });\n return {};\n },\n\n // FIXME: handle relations\n async deleteMany(\n documentIds: Modules.Documents.ID[],\n uid: UID.CollectionType,\n opts: DocServiceParams<'findMany'> & { locale?: string } = {}\n ) {\n const deletedEntries = await strapi.db.transaction(async () => {\n return Promise.all(documentIds.map(async (id) => this.delete(id, uid, opts)));\n });\n\n return { count: deletedEntries.length };\n },\n\n async publish(\n id: Modules.Documents.ID,\n uid: UID.CollectionType,\n opts: Omit<DocServiceParams<'publish'>, 'documentId'> = {} as any\n ) {\n const populate = await buildDeepPopulate(uid);\n const params = { ...opts, populate };\n\n return strapi\n .documents(uid)\n .publish({ ...params, documentId: id })\n .then((result) => result?.entries);\n },\n\n async publishMany(uid: UID.ContentType, documentIds: string[], locale?: string | string[]) {\n return strapi.db.transaction(async () => {\n const results = await Promise.all(\n documentIds.map((documentId) => this.publish(documentId, uid, { locale }))\n );\n\n const publishedEntitiesCount = results.flat().filter(Boolean).length;\n return publishedEntitiesCount;\n });\n },\n\n async unpublishMany(\n documentIds: Modules.Documents.ID[],\n uid: UID.CollectionType,\n opts: Omit<DocServiceParams<'unpublish'>, 'documentId'> = {} as any\n ) {\n const unpublishedEntries = await strapi.db.transaction(async () => {\n return Promise.all(\n documentIds.map((id) =>\n strapi\n .documents(uid)\n .unpublish({ ...opts, documentId: id })\n .then((result) => result?.entries)\n )\n );\n });\n\n const unpublishedEntitiesCount = unpublishedEntries.flat().filter(Boolean).length;\n\n // Return the number of unpublished entities\n return { count: unpublishedEntitiesCount };\n },\n\n async unpublish(\n id: Modules.Documents.ID,\n uid: UID.CollectionType,\n opts: Omit<DocServiceParams<'unpublish'>, 'documentId'> = {} as any\n ) {\n const populate = await buildDeepPopulate(uid);\n const params = { ...opts, populate };\n\n return strapi\n .documents(uid)\n .unpublish({ ...params, documentId: id })\n .then((result) => result?.entries.at(0));\n },\n\n async discardDraft(\n id: Modules.Documents.ID,\n uid: UID.CollectionType,\n opts: Omit<DocServiceParams<'discardDraft'>, 'documentId'> = {} as any\n ) {\n const populate = await buildDeepPopulate(uid);\n const params = { ...opts, populate };\n\n return strapi\n .documents(uid)\n .discardDraft({ ...params, documentId: id })\n .then((result) => result?.entries.at(0));\n },\n\n async countDraftRelations(id: string, uid: UID.ContentType, locale: string) {\n const { populate, hasRelations } = getDeepPopulateDraftCount(uid);\n\n if (!hasRelations) {\n return 0;\n }\n\n const document = await strapi.documents(uid).findOne({ documentId: id, populate, locale });\n if (!document) {\n throw new ApplicationError(\n `Unable to count draft relations, document with id ${id} and locale ${locale} not found`\n );\n }\n\n return sumDraftCounts(document, uid);\n },\n\n async countManyEntriesDraftRelations(\n documentIds: Modules.Documents.ID[],\n uid: UID.CollectionType,\n locale: string | string[]\n ) {\n const { populate, hasRelations } = getDeepPopulateDraftCount(uid);\n\n if (!hasRelations) {\n return 0;\n }\n\n let localeFilter = {};\n if (locale) {\n localeFilter = Array.isArray(locale) ? { locale: { $in: locale } } : { locale };\n }\n\n const entities = await strapi.db.query(uid).findMany({\n populate,\n where: {\n documentId: { $in: documentIds },\n ...localeFilter,\n },\n });\n\n const totalNumberDraftRelations: number = entities!.reduce(\n (count: number, entity: Document) => sumDraftCounts(entity, uid) + count,\n 0\n );\n\n return totalNumberDraftRelations;\n },\n };\n};\n\nexport type DocumentManagerService = typeof documentManager;\n\nexport default documentManager;\n"],"names":["ApplicationError","errors","PUBLISHED_AT_ATTRIBUTE","contentTypes","constants","omitPublishedAtField","omit","omitIdField","documentManager","strapi","findOne","id","uid","opts","documents","documentId","findLocales","where","Array","isArray","locale","$in","isPublished","publishedAt","$notNull","db","query","findMany","populate","params","getDeepPopulate","findPage","pagination","withDefaultPagination","maxLimit","total","Promise","all","count","results","transformPagedPaginationInfo","create","buildDeepPopulate","status","update","publishData","pipe","data","clone","body","then","result","entries","at","exists","delete","deleteMany","documentIds","deletedEntries","transaction","map","length","publish","publishMany","publishedEntitiesCount","flat","filter","Boolean","unpublishMany","unpublishedEntries","unpublish","unpublishedEntitiesCount","discardDraft","countDraftRelations","hasRelations","getDeepPopulateDraftCount","document","sumDraftCounts","countManyEntriesDraftRelations","localeFilter","entities","totalNumberDraftRelations","reduce","entity"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"document-manager.js","sources":["../../../server/src/services/document-manager.ts"],"sourcesContent":["import { omit, pipe } from 'lodash/fp';\n\nimport { contentTypes, errors, pagination } from '@strapi/utils';\nimport type { Core, Modules, UID } from '@strapi/types';\n\nimport { buildDeepPopulate, getDeepPopulate, getDeepPopulateDraftCount } from './utils/populate';\nimport { sumDraftCounts } from './utils/draft';\n\ntype DocService = Modules.Documents.ServiceInstance;\ntype DocServiceParams<TAction extends keyof DocService> = Parameters<DocService[TAction]>[0];\nexport type Document = Modules.Documents.Result<UID.ContentType>;\n\nconst { ApplicationError } = errors;\nconst { PUBLISHED_AT_ATTRIBUTE } = contentTypes.constants;\n\nconst omitPublishedAtField = omit(PUBLISHED_AT_ATTRIBUTE);\nconst omitIdField = omit('id');\n\nconst documentManager = ({ strapi }: { strapi: Core.Strapi }) => {\n return {\n async findOne(\n id: string,\n uid: UID.CollectionType,\n opts: Omit<DocServiceParams<'findOne'>, 'documentId'> = {}\n ) {\n return strapi.documents(uid).findOne({ ...opts, documentId: id });\n },\n\n /**\n * Find multiple (or all) locales for a document\n */\n async findLocales(\n id: string | string[] | undefined,\n uid: UID.CollectionType,\n opts: {\n populate?: Modules.Documents.Params.Pick<any, 'populate'>;\n locale?: string | string[] | '*';\n isPublished?: boolean;\n }\n ) {\n // Will look for a specific locale by default\n const where: any = {};\n\n // Might not have an id if querying a single type\n if (id) {\n where.documentId = id;\n }\n\n // Search in array of locales\n if (Array.isArray(opts.locale)) {\n where.locale = { $in: opts.locale };\n } else if (opts.locale && opts.locale !== '*') {\n // Look for a specific locale, ignore if looking for all locales\n where.locale = opts.locale;\n }\n\n // Published is passed, so we filter on it, otherwise we don't filter\n if (typeof opts.isPublished === 'boolean') {\n where.publishedAt = { $notNull: opts.isPublished };\n }\n\n return strapi.db.query(uid).findMany({ populate: opts.populate, where });\n },\n\n async findMany(opts: DocServiceParams<'findMany'>, uid: UID.CollectionType) {\n const params = { ...opts, populate: getDeepPopulate(uid) } as typeof opts;\n return strapi.documents(uid).findMany(params);\n },\n\n async findPage(opts: DocServiceParams<'findMany'>, uid: UID.CollectionType) {\n const params = pagination.withDefaultPagination(opts || {}, {\n maxLimit: 1000,\n });\n\n const { populate, sort, ...countParams } = params;\n const [documents, total = 0] = await Promise.all([\n strapi.documents(uid).findMany(params),\n strapi.documents(uid).count(countParams),\n ]);\n\n return {\n results: documents,\n pagination: pagination.transformPagedPaginationInfo(params, total),\n };\n },\n\n async create(uid: UID.CollectionType, opts: DocServiceParams<'create'> = {} as any) {\n const populate = opts.populate ?? (await buildDeepPopulate(uid));\n const params = { ...opts, status: 'draft' as const, populate };\n\n return strapi.documents(uid).create(params);\n },\n\n async update(\n id: Modules.Documents.ID,\n uid: UID.CollectionType,\n opts: Omit<DocServiceParams<'update'>, 'documentId'> = {} as any\n ) {\n const publishData = pipe(omitPublishedAtField, omitIdField)(opts.data || {});\n const populate = opts.populate ?? (await buildDeepPopulate(uid));\n const params = { ...opts, data: publishData, populate, status: 'draft' };\n\n return strapi.documents(uid).update({ ...params, documentId: id });\n },\n\n async clone(\n id: Modules.Documents.ID,\n body: Partial<Modules.Documents.Params.Data.Input<UID.CollectionType>>,\n uid: UID.CollectionType\n ) {\n const populate = await buildDeepPopulate(uid);\n\n // Extract the locale to pass it as a plain param\n const locale = body?.locale;\n const params = {\n // Ensure id and documentId are not copied to the clone\n data: omit(['id', 'documentId'], body),\n locale,\n populate,\n };\n\n return strapi\n .documents(uid)\n .clone({ ...params, documentId: id })\n .then((result) => result?.entries.at(0));\n },\n\n /**\n * Check if a document exists\n */\n async exists(uid: UID.CollectionType, id?: string) {\n // Collection type\n if (id) {\n const count = await strapi.db.query(uid).count({ where: { documentId: id } });\n return count > 0;\n }\n\n // Single type\n const count = await strapi.db.query(uid).count();\n return count > 0;\n },\n\n async delete(\n id: Modules.Documents.ID,\n uid: UID.CollectionType,\n opts: Omit<DocServiceParams<'delete'>, 'documentId'> = {} as any\n ) {\n await strapi.documents(uid).delete({\n ...opts,\n documentId: id,\n });\n return {};\n },\n\n // FIXME: handle relations\n async deleteMany(\n documentIds: Modules.Documents.ID[],\n uid: UID.CollectionType,\n opts: DocServiceParams<'findMany'> & { locale?: string } = {}\n ) {\n const deletedEntries = await strapi.db.transaction(async () => {\n return Promise.all(documentIds.map(async (id) => this.delete(id, uid, opts)));\n });\n\n return { count: deletedEntries.length };\n },\n\n async publish(\n id: Modules.Documents.ID,\n uid: UID.CollectionType,\n opts: Omit<DocServiceParams<'publish'>, 'documentId'> & { populate?: object } = {} as any\n ) {\n const populate = opts.populate ?? (await buildDeepPopulate(uid));\n const params = { ...opts, populate };\n\n return strapi\n .documents(uid)\n .publish({ ...params, documentId: id })\n .then((result) => result?.entries);\n },\n\n async publishMany(uid: UID.ContentType, documentIds: string[], locale?: string | string[]) {\n return strapi.db.transaction(async () => {\n const results = await Promise.all(\n documentIds.map((documentId) => this.publish(documentId, uid, { locale, populate: {} }))\n );\n\n const publishedEntitiesCount = results.flat().filter(Boolean).length;\n return publishedEntitiesCount;\n });\n },\n\n async unpublishMany(\n documentIds: Modules.Documents.ID[],\n uid: UID.CollectionType,\n opts: Omit<DocServiceParams<'unpublish'>, 'documentId'> = {} as any\n ) {\n const unpublishedEntries = await strapi.db.transaction(async () => {\n return Promise.all(\n documentIds.map((id) =>\n strapi\n .documents(uid)\n .unpublish({ ...opts, documentId: id, populate: {} })\n .then((result) => result?.entries)\n )\n );\n });\n\n const unpublishedEntitiesCount = unpublishedEntries.flat().filter(Boolean).length;\n\n // Return the number of unpublished entities\n return { count: unpublishedEntitiesCount };\n },\n\n async unpublish(\n id: Modules.Documents.ID,\n uid: UID.CollectionType,\n opts: Omit<DocServiceParams<'unpublish'>, 'documentId'> & { populate?: object } = {} as any\n ) {\n const populate = opts.populate ?? (await buildDeepPopulate(uid));\n const params = { ...opts, populate };\n\n return strapi\n .documents(uid)\n .unpublish({ ...params, documentId: id })\n .then((result) => result?.entries.at(0));\n },\n\n async discardDraft(\n id: Modules.Documents.ID,\n uid: UID.CollectionType,\n opts: Omit<DocServiceParams<'discardDraft'>, 'documentId'> & { populate?: object } = {} as any\n ) {\n const populate = opts.populate ?? (await buildDeepPopulate(uid));\n const params = { ...opts, populate };\n\n return strapi\n .documents(uid)\n .discardDraft({ ...params, documentId: id })\n .then((result) => result?.entries.at(0));\n },\n\n async countDraftRelations(id: string, uid: UID.ContentType, locale: string) {\n const { populate, hasRelations } = getDeepPopulateDraftCount(uid);\n\n if (!hasRelations) {\n return 0;\n }\n\n const document = await strapi.documents(uid).findOne({ documentId: id, populate, locale });\n if (!document) {\n throw new ApplicationError(\n `Unable to count draft relations, document with id ${id} and locale ${locale} not found`\n );\n }\n\n return sumDraftCounts(document, uid);\n },\n\n async countManyEntriesDraftRelations(\n documentIds: Modules.Documents.ID[],\n uid: UID.CollectionType,\n locale: string | string[]\n ) {\n const { populate, hasRelations } = getDeepPopulateDraftCount(uid);\n\n if (!hasRelations) {\n return 0;\n }\n\n let localeFilter = {};\n if (locale) {\n localeFilter = Array.isArray(locale) ? { locale: { $in: locale } } : { locale };\n }\n\n const entities = await strapi.db.query(uid).findMany({\n populate,\n where: {\n documentId: { $in: documentIds },\n ...localeFilter,\n },\n });\n\n const totalNumberDraftRelations: number = entities!.reduce(\n (count: number, entity: Document) => sumDraftCounts(entity, uid) + count,\n 0\n );\n\n return totalNumberDraftRelations;\n },\n };\n};\n\nexport type DocumentManagerService = typeof documentManager;\n\nexport default documentManager;\n"],"names":["ApplicationError","errors","PUBLISHED_AT_ATTRIBUTE","contentTypes","constants","omitPublishedAtField","omit","omitIdField","documentManager","strapi","findOne","id","uid","opts","documents","documentId","findLocales","where","Array","isArray","locale","$in","isPublished","publishedAt","$notNull","db","query","findMany","populate","params","getDeepPopulate","findPage","pagination","withDefaultPagination","maxLimit","sort","countParams","total","Promise","all","count","results","transformPagedPaginationInfo","create","buildDeepPopulate","status","update","publishData","pipe","data","clone","body","then","result","entries","at","exists","delete","deleteMany","documentIds","deletedEntries","transaction","map","length","publish","publishMany","publishedEntitiesCount","flat","filter","Boolean","unpublishMany","unpublishedEntries","unpublish","unpublishedEntitiesCount","discardDraft","countDraftRelations","hasRelations","getDeepPopulateDraftCount","document","sumDraftCounts","countManyEntriesDraftRelations","localeFilter","entities","totalNumberDraftRelations","reduce","entity"],"mappings":"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"}
|
|
@@ -55,9 +55,10 @@ const documentManager = ({ strapi })=>{
|
|
|
55
55
|
const params = pagination.withDefaultPagination(opts || {}, {
|
|
56
56
|
maxLimit: 1000
|
|
57
57
|
});
|
|
58
|
+
const { populate, sort, ...countParams } = params;
|
|
58
59
|
const [documents, total = 0] = await Promise.all([
|
|
59
60
|
strapi.documents(uid).findMany(params),
|
|
60
|
-
strapi.documents(uid).count(
|
|
61
|
+
strapi.documents(uid).count(countParams)
|
|
61
62
|
]);
|
|
62
63
|
return {
|
|
63
64
|
results: documents,
|
|
@@ -122,11 +123,9 @@ const documentManager = ({ strapi })=>{
|
|
|
122
123
|
return count > 0;
|
|
123
124
|
},
|
|
124
125
|
async delete (id, uid, opts = {}) {
|
|
125
|
-
const populate = await buildDeepPopulate(uid);
|
|
126
126
|
await strapi.documents(uid).delete({
|
|
127
127
|
...opts,
|
|
128
|
-
documentId: id
|
|
129
|
-
populate
|
|
128
|
+
documentId: id
|
|
130
129
|
});
|
|
131
130
|
return {};
|
|
132
131
|
},
|
|
@@ -140,7 +139,7 @@ const documentManager = ({ strapi })=>{
|
|
|
140
139
|
};
|
|
141
140
|
},
|
|
142
141
|
async publish (id, uid, opts = {}) {
|
|
143
|
-
const populate = await buildDeepPopulate(uid);
|
|
142
|
+
const populate = opts.populate ?? await buildDeepPopulate(uid);
|
|
144
143
|
const params = {
|
|
145
144
|
...opts,
|
|
146
145
|
populate
|
|
@@ -153,7 +152,8 @@ const documentManager = ({ strapi })=>{
|
|
|
153
152
|
async publishMany (uid, documentIds, locale) {
|
|
154
153
|
return strapi.db.transaction(async ()=>{
|
|
155
154
|
const results = await Promise.all(documentIds.map((documentId)=>this.publish(documentId, uid, {
|
|
156
|
-
locale
|
|
155
|
+
locale,
|
|
156
|
+
populate: {}
|
|
157
157
|
})));
|
|
158
158
|
const publishedEntitiesCount = results.flat().filter(Boolean).length;
|
|
159
159
|
return publishedEntitiesCount;
|
|
@@ -163,7 +163,8 @@ const documentManager = ({ strapi })=>{
|
|
|
163
163
|
const unpublishedEntries = await strapi.db.transaction(async ()=>{
|
|
164
164
|
return Promise.all(documentIds.map((id)=>strapi.documents(uid).unpublish({
|
|
165
165
|
...opts,
|
|
166
|
-
documentId: id
|
|
166
|
+
documentId: id,
|
|
167
|
+
populate: {}
|
|
167
168
|
}).then((result)=>result?.entries)));
|
|
168
169
|
});
|
|
169
170
|
const unpublishedEntitiesCount = unpublishedEntries.flat().filter(Boolean).length;
|
|
@@ -173,7 +174,7 @@ const documentManager = ({ strapi })=>{
|
|
|
173
174
|
};
|
|
174
175
|
},
|
|
175
176
|
async unpublish (id, uid, opts = {}) {
|
|
176
|
-
const populate = await buildDeepPopulate(uid);
|
|
177
|
+
const populate = opts.populate ?? await buildDeepPopulate(uid);
|
|
177
178
|
const params = {
|
|
178
179
|
...opts,
|
|
179
180
|
populate
|
|
@@ -184,7 +185,7 @@ const documentManager = ({ strapi })=>{
|
|
|
184
185
|
}).then((result)=>result?.entries.at(0));
|
|
185
186
|
},
|
|
186
187
|
async discardDraft (id, uid, opts = {}) {
|
|
187
|
-
const populate = await buildDeepPopulate(uid);
|
|
188
|
+
const populate = opts.populate ?? await buildDeepPopulate(uid);
|
|
188
189
|
const params = {
|
|
189
190
|
...opts,
|
|
190
191
|
populate
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"document-manager.mjs","sources":["../../../server/src/services/document-manager.ts"],"sourcesContent":["import { omit, pipe } from 'lodash/fp';\n\nimport { contentTypes, errors, pagination } from '@strapi/utils';\nimport type { Core, Modules, UID } from '@strapi/types';\n\nimport { buildDeepPopulate, getDeepPopulate, getDeepPopulateDraftCount } from './utils/populate';\nimport { sumDraftCounts } from './utils/draft';\n\ntype DocService = Modules.Documents.ServiceInstance;\ntype DocServiceParams<TAction extends keyof DocService> = Parameters<DocService[TAction]>[0];\nexport type Document = Modules.Documents.Result<UID.ContentType>;\n\nconst { ApplicationError } = errors;\nconst { PUBLISHED_AT_ATTRIBUTE } = contentTypes.constants;\n\nconst omitPublishedAtField = omit(PUBLISHED_AT_ATTRIBUTE);\nconst omitIdField = omit('id');\n\nconst documentManager = ({ strapi }: { strapi: Core.Strapi }) => {\n return {\n async findOne(\n id: string,\n uid: UID.CollectionType,\n opts: Omit<DocServiceParams<'findOne'>, 'documentId'> = {}\n ) {\n return strapi.documents(uid).findOne({ ...opts, documentId: id });\n },\n\n /**\n * Find multiple (or all) locales for a document\n */\n async findLocales(\n id: string | string[] | undefined,\n uid: UID.CollectionType,\n opts: {\n populate?: Modules.Documents.Params.Pick<any, 'populate'>;\n locale?: string | string[] | '*';\n isPublished?: boolean;\n }\n ) {\n // Will look for a specific locale by default\n const where: any = {};\n\n // Might not have an id if querying a single type\n if (id) {\n where.documentId = id;\n }\n\n // Search in array of locales\n if (Array.isArray(opts.locale)) {\n where.locale = { $in: opts.locale };\n } else if (opts.locale && opts.locale !== '*') {\n // Look for a specific locale, ignore if looking for all locales\n where.locale = opts.locale;\n }\n\n // Published is passed, so we filter on it, otherwise we don't filter\n if (typeof opts.isPublished === 'boolean') {\n where.publishedAt = { $notNull: opts.isPublished };\n }\n\n return strapi.db.query(uid).findMany({ populate: opts.populate, where });\n },\n\n async findMany(opts: DocServiceParams<'findMany'>, uid: UID.CollectionType) {\n const params = { ...opts, populate: getDeepPopulate(uid) } as typeof opts;\n return strapi.documents(uid).findMany(params);\n },\n\n async findPage(opts: DocServiceParams<'findMany'>, uid: UID.CollectionType) {\n const params = pagination.withDefaultPagination(opts || {}, {\n maxLimit: 1000,\n });\n\n const [documents, total = 0] = await Promise.all([\n strapi.documents(uid).findMany(params),\n strapi.documents(uid).count(params),\n ]);\n\n return {\n results: documents,\n pagination: pagination.transformPagedPaginationInfo(params, total),\n };\n },\n\n async create(uid: UID.CollectionType, opts: DocServiceParams<'create'> = {} as any) {\n const populate = opts.populate ?? (await buildDeepPopulate(uid));\n const params = { ...opts, status: 'draft' as const, populate };\n\n return strapi.documents(uid).create(params);\n },\n\n async update(\n id: Modules.Documents.ID,\n uid: UID.CollectionType,\n opts: Omit<DocServiceParams<'update'>, 'documentId'> = {} as any\n ) {\n const publishData = pipe(omitPublishedAtField, omitIdField)(opts.data || {});\n const populate = opts.populate ?? (await buildDeepPopulate(uid));\n const params = { ...opts, data: publishData, populate, status: 'draft' };\n\n return strapi.documents(uid).update({ ...params, documentId: id });\n },\n\n async clone(\n id: Modules.Documents.ID,\n body: Partial<Modules.Documents.Params.Data.Input<UID.CollectionType>>,\n uid: UID.CollectionType\n ) {\n const populate = await buildDeepPopulate(uid);\n\n // Extract the locale to pass it as a plain param\n const locale = body?.locale;\n const params = {\n // Ensure id and documentId are not copied to the clone\n data: omit(['id', 'documentId'], body),\n locale,\n populate,\n };\n\n return strapi\n .documents(uid)\n .clone({ ...params, documentId: id })\n .then((result) => result?.entries.at(0));\n },\n\n /**\n * Check if a document exists\n */\n async exists(uid: UID.CollectionType, id?: string) {\n // Collection type\n if (id) {\n const count = await strapi.db.query(uid).count({ where: { documentId: id } });\n return count > 0;\n }\n\n // Single type\n const count = await strapi.db.query(uid).count();\n return count > 0;\n },\n\n async delete(\n id: Modules.Documents.ID,\n uid: UID.CollectionType,\n opts: Omit<DocServiceParams<'delete'>, 'documentId'> = {} as any\n ) {\n const populate = await buildDeepPopulate(uid);\n\n await strapi.documents(uid).delete({\n ...opts,\n documentId: id,\n populate,\n });\n return {};\n },\n\n // FIXME: handle relations\n async deleteMany(\n documentIds: Modules.Documents.ID[],\n uid: UID.CollectionType,\n opts: DocServiceParams<'findMany'> & { locale?: string } = {}\n ) {\n const deletedEntries = await strapi.db.transaction(async () => {\n return Promise.all(documentIds.map(async (id) => this.delete(id, uid, opts)));\n });\n\n return { count: deletedEntries.length };\n },\n\n async publish(\n id: Modules.Documents.ID,\n uid: UID.CollectionType,\n opts: Omit<DocServiceParams<'publish'>, 'documentId'> = {} as any\n ) {\n const populate = await buildDeepPopulate(uid);\n const params = { ...opts, populate };\n\n return strapi\n .documents(uid)\n .publish({ ...params, documentId: id })\n .then((result) => result?.entries);\n },\n\n async publishMany(uid: UID.ContentType, documentIds: string[], locale?: string | string[]) {\n return strapi.db.transaction(async () => {\n const results = await Promise.all(\n documentIds.map((documentId) => this.publish(documentId, uid, { locale }))\n );\n\n const publishedEntitiesCount = results.flat().filter(Boolean).length;\n return publishedEntitiesCount;\n });\n },\n\n async unpublishMany(\n documentIds: Modules.Documents.ID[],\n uid: UID.CollectionType,\n opts: Omit<DocServiceParams<'unpublish'>, 'documentId'> = {} as any\n ) {\n const unpublishedEntries = await strapi.db.transaction(async () => {\n return Promise.all(\n documentIds.map((id) =>\n strapi\n .documents(uid)\n .unpublish({ ...opts, documentId: id })\n .then((result) => result?.entries)\n )\n );\n });\n\n const unpublishedEntitiesCount = unpublishedEntries.flat().filter(Boolean).length;\n\n // Return the number of unpublished entities\n return { count: unpublishedEntitiesCount };\n },\n\n async unpublish(\n id: Modules.Documents.ID,\n uid: UID.CollectionType,\n opts: Omit<DocServiceParams<'unpublish'>, 'documentId'> = {} as any\n ) {\n const populate = await buildDeepPopulate(uid);\n const params = { ...opts, populate };\n\n return strapi\n .documents(uid)\n .unpublish({ ...params, documentId: id })\n .then((result) => result?.entries.at(0));\n },\n\n async discardDraft(\n id: Modules.Documents.ID,\n uid: UID.CollectionType,\n opts: Omit<DocServiceParams<'discardDraft'>, 'documentId'> = {} as any\n ) {\n const populate = await buildDeepPopulate(uid);\n const params = { ...opts, populate };\n\n return strapi\n .documents(uid)\n .discardDraft({ ...params, documentId: id })\n .then((result) => result?.entries.at(0));\n },\n\n async countDraftRelations(id: string, uid: UID.ContentType, locale: string) {\n const { populate, hasRelations } = getDeepPopulateDraftCount(uid);\n\n if (!hasRelations) {\n return 0;\n }\n\n const document = await strapi.documents(uid).findOne({ documentId: id, populate, locale });\n if (!document) {\n throw new ApplicationError(\n `Unable to count draft relations, document with id ${id} and locale ${locale} not found`\n );\n }\n\n return sumDraftCounts(document, uid);\n },\n\n async countManyEntriesDraftRelations(\n documentIds: Modules.Documents.ID[],\n uid: UID.CollectionType,\n locale: string | string[]\n ) {\n const { populate, hasRelations } = getDeepPopulateDraftCount(uid);\n\n if (!hasRelations) {\n return 0;\n }\n\n let localeFilter = {};\n if (locale) {\n localeFilter = Array.isArray(locale) ? { locale: { $in: locale } } : { locale };\n }\n\n const entities = await strapi.db.query(uid).findMany({\n populate,\n where: {\n documentId: { $in: documentIds },\n ...localeFilter,\n },\n });\n\n const totalNumberDraftRelations: number = entities!.reduce(\n (count: number, entity: Document) => sumDraftCounts(entity, uid) + count,\n 0\n );\n\n return totalNumberDraftRelations;\n },\n };\n};\n\nexport type DocumentManagerService = typeof documentManager;\n\nexport default documentManager;\n"],"names":["ApplicationError","errors","PUBLISHED_AT_ATTRIBUTE","contentTypes","constants","omitPublishedAtField","omit","omitIdField","documentManager","strapi","findOne","id","uid","opts","documents","documentId","findLocales","where","Array","isArray","locale","$in","isPublished","publishedAt","$notNull","db","query","findMany","populate","params","getDeepPopulate","findPage","pagination","withDefaultPagination","maxLimit","total","Promise","all","count","results","transformPagedPaginationInfo","create","buildDeepPopulate","status","update","publishData","pipe","data","clone","body","then","result","entries","at","exists","delete","deleteMany","documentIds","deletedEntries","transaction","map","length","publish","publishMany","publishedEntitiesCount","flat","filter","Boolean","unpublishMany","unpublishedEntries","unpublish","unpublishedEntitiesCount","discardDraft","countDraftRelations","hasRelations","getDeepPopulateDraftCount","document","sumDraftCounts","countManyEntriesDraftRelations","localeFilter","entities","totalNumberDraftRelations","reduce","entity"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"document-manager.mjs","sources":["../../../server/src/services/document-manager.ts"],"sourcesContent":["import { omit, pipe } from 'lodash/fp';\n\nimport { contentTypes, errors, pagination } from '@strapi/utils';\nimport type { Core, Modules, UID } from '@strapi/types';\n\nimport { buildDeepPopulate, getDeepPopulate, getDeepPopulateDraftCount } from './utils/populate';\nimport { sumDraftCounts } from './utils/draft';\n\ntype DocService = Modules.Documents.ServiceInstance;\ntype DocServiceParams<TAction extends keyof DocService> = Parameters<DocService[TAction]>[0];\nexport type Document = Modules.Documents.Result<UID.ContentType>;\n\nconst { ApplicationError } = errors;\nconst { PUBLISHED_AT_ATTRIBUTE } = contentTypes.constants;\n\nconst omitPublishedAtField = omit(PUBLISHED_AT_ATTRIBUTE);\nconst omitIdField = omit('id');\n\nconst documentManager = ({ strapi }: { strapi: Core.Strapi }) => {\n return {\n async findOne(\n id: string,\n uid: UID.CollectionType,\n opts: Omit<DocServiceParams<'findOne'>, 'documentId'> = {}\n ) {\n return strapi.documents(uid).findOne({ ...opts, documentId: id });\n },\n\n /**\n * Find multiple (or all) locales for a document\n */\n async findLocales(\n id: string | string[] | undefined,\n uid: UID.CollectionType,\n opts: {\n populate?: Modules.Documents.Params.Pick<any, 'populate'>;\n locale?: string | string[] | '*';\n isPublished?: boolean;\n }\n ) {\n // Will look for a specific locale by default\n const where: any = {};\n\n // Might not have an id if querying a single type\n if (id) {\n where.documentId = id;\n }\n\n // Search in array of locales\n if (Array.isArray(opts.locale)) {\n where.locale = { $in: opts.locale };\n } else if (opts.locale && opts.locale !== '*') {\n // Look for a specific locale, ignore if looking for all locales\n where.locale = opts.locale;\n }\n\n // Published is passed, so we filter on it, otherwise we don't filter\n if (typeof opts.isPublished === 'boolean') {\n where.publishedAt = { $notNull: opts.isPublished };\n }\n\n return strapi.db.query(uid).findMany({ populate: opts.populate, where });\n },\n\n async findMany(opts: DocServiceParams<'findMany'>, uid: UID.CollectionType) {\n const params = { ...opts, populate: getDeepPopulate(uid) } as typeof opts;\n return strapi.documents(uid).findMany(params);\n },\n\n async findPage(opts: DocServiceParams<'findMany'>, uid: UID.CollectionType) {\n const params = pagination.withDefaultPagination(opts || {}, {\n maxLimit: 1000,\n });\n\n const { populate, sort, ...countParams } = params;\n const [documents, total = 0] = await Promise.all([\n strapi.documents(uid).findMany(params),\n strapi.documents(uid).count(countParams),\n ]);\n\n return {\n results: documents,\n pagination: pagination.transformPagedPaginationInfo(params, total),\n };\n },\n\n async create(uid: UID.CollectionType, opts: DocServiceParams<'create'> = {} as any) {\n const populate = opts.populate ?? (await buildDeepPopulate(uid));\n const params = { ...opts, status: 'draft' as const, populate };\n\n return strapi.documents(uid).create(params);\n },\n\n async update(\n id: Modules.Documents.ID,\n uid: UID.CollectionType,\n opts: Omit<DocServiceParams<'update'>, 'documentId'> = {} as any\n ) {\n const publishData = pipe(omitPublishedAtField, omitIdField)(opts.data || {});\n const populate = opts.populate ?? (await buildDeepPopulate(uid));\n const params = { ...opts, data: publishData, populate, status: 'draft' };\n\n return strapi.documents(uid).update({ ...params, documentId: id });\n },\n\n async clone(\n id: Modules.Documents.ID,\n body: Partial<Modules.Documents.Params.Data.Input<UID.CollectionType>>,\n uid: UID.CollectionType\n ) {\n const populate = await buildDeepPopulate(uid);\n\n // Extract the locale to pass it as a plain param\n const locale = body?.locale;\n const params = {\n // Ensure id and documentId are not copied to the clone\n data: omit(['id', 'documentId'], body),\n locale,\n populate,\n };\n\n return strapi\n .documents(uid)\n .clone({ ...params, documentId: id })\n .then((result) => result?.entries.at(0));\n },\n\n /**\n * Check if a document exists\n */\n async exists(uid: UID.CollectionType, id?: string) {\n // Collection type\n if (id) {\n const count = await strapi.db.query(uid).count({ where: { documentId: id } });\n return count > 0;\n }\n\n // Single type\n const count = await strapi.db.query(uid).count();\n return count > 0;\n },\n\n async delete(\n id: Modules.Documents.ID,\n uid: UID.CollectionType,\n opts: Omit<DocServiceParams<'delete'>, 'documentId'> = {} as any\n ) {\n await strapi.documents(uid).delete({\n ...opts,\n documentId: id,\n });\n return {};\n },\n\n // FIXME: handle relations\n async deleteMany(\n documentIds: Modules.Documents.ID[],\n uid: UID.CollectionType,\n opts: DocServiceParams<'findMany'> & { locale?: string } = {}\n ) {\n const deletedEntries = await strapi.db.transaction(async () => {\n return Promise.all(documentIds.map(async (id) => this.delete(id, uid, opts)));\n });\n\n return { count: deletedEntries.length };\n },\n\n async publish(\n id: Modules.Documents.ID,\n uid: UID.CollectionType,\n opts: Omit<DocServiceParams<'publish'>, 'documentId'> & { populate?: object } = {} as any\n ) {\n const populate = opts.populate ?? (await buildDeepPopulate(uid));\n const params = { ...opts, populate };\n\n return strapi\n .documents(uid)\n .publish({ ...params, documentId: id })\n .then((result) => result?.entries);\n },\n\n async publishMany(uid: UID.ContentType, documentIds: string[], locale?: string | string[]) {\n return strapi.db.transaction(async () => {\n const results = await Promise.all(\n documentIds.map((documentId) => this.publish(documentId, uid, { locale, populate: {} }))\n );\n\n const publishedEntitiesCount = results.flat().filter(Boolean).length;\n return publishedEntitiesCount;\n });\n },\n\n async unpublishMany(\n documentIds: Modules.Documents.ID[],\n uid: UID.CollectionType,\n opts: Omit<DocServiceParams<'unpublish'>, 'documentId'> = {} as any\n ) {\n const unpublishedEntries = await strapi.db.transaction(async () => {\n return Promise.all(\n documentIds.map((id) =>\n strapi\n .documents(uid)\n .unpublish({ ...opts, documentId: id, populate: {} })\n .then((result) => result?.entries)\n )\n );\n });\n\n const unpublishedEntitiesCount = unpublishedEntries.flat().filter(Boolean).length;\n\n // Return the number of unpublished entities\n return { count: unpublishedEntitiesCount };\n },\n\n async unpublish(\n id: Modules.Documents.ID,\n uid: UID.CollectionType,\n opts: Omit<DocServiceParams<'unpublish'>, 'documentId'> & { populate?: object } = {} as any\n ) {\n const populate = opts.populate ?? (await buildDeepPopulate(uid));\n const params = { ...opts, populate };\n\n return strapi\n .documents(uid)\n .unpublish({ ...params, documentId: id })\n .then((result) => result?.entries.at(0));\n },\n\n async discardDraft(\n id: Modules.Documents.ID,\n uid: UID.CollectionType,\n opts: Omit<DocServiceParams<'discardDraft'>, 'documentId'> & { populate?: object } = {} as any\n ) {\n const populate = opts.populate ?? (await buildDeepPopulate(uid));\n const params = { ...opts, populate };\n\n return strapi\n .documents(uid)\n .discardDraft({ ...params, documentId: id })\n .then((result) => result?.entries.at(0));\n },\n\n async countDraftRelations(id: string, uid: UID.ContentType, locale: string) {\n const { populate, hasRelations } = getDeepPopulateDraftCount(uid);\n\n if (!hasRelations) {\n return 0;\n }\n\n const document = await strapi.documents(uid).findOne({ documentId: id, populate, locale });\n if (!document) {\n throw new ApplicationError(\n `Unable to count draft relations, document with id ${id} and locale ${locale} not found`\n );\n }\n\n return sumDraftCounts(document, uid);\n },\n\n async countManyEntriesDraftRelations(\n documentIds: Modules.Documents.ID[],\n uid: UID.CollectionType,\n locale: string | string[]\n ) {\n const { populate, hasRelations } = getDeepPopulateDraftCount(uid);\n\n if (!hasRelations) {\n return 0;\n }\n\n let localeFilter = {};\n if (locale) {\n localeFilter = Array.isArray(locale) ? { locale: { $in: locale } } : { locale };\n }\n\n const entities = await strapi.db.query(uid).findMany({\n populate,\n where: {\n documentId: { $in: documentIds },\n ...localeFilter,\n },\n });\n\n const totalNumberDraftRelations: number = entities!.reduce(\n (count: number, entity: Document) => sumDraftCounts(entity, uid) + count,\n 0\n );\n\n return totalNumberDraftRelations;\n },\n };\n};\n\nexport type DocumentManagerService = typeof documentManager;\n\nexport default documentManager;\n"],"names":["ApplicationError","errors","PUBLISHED_AT_ATTRIBUTE","contentTypes","constants","omitPublishedAtField","omit","omitIdField","documentManager","strapi","findOne","id","uid","opts","documents","documentId","findLocales","where","Array","isArray","locale","$in","isPublished","publishedAt","$notNull","db","query","findMany","populate","params","getDeepPopulate","findPage","pagination","withDefaultPagination","maxLimit","sort","countParams","total","Promise","all","count","results","transformPagedPaginationInfo","create","buildDeepPopulate","status","update","publishData","pipe","data","clone","body","then","result","entries","at","exists","delete","deleteMany","documentIds","deletedEntries","transaction","map","length","publish","publishMany","publishedEntitiesCount","flat","filter","Boolean","unpublishMany","unpublishedEntries","unpublish","unpublishedEntitiesCount","discardDraft","countDraftRelations","hasRelations","getDeepPopulateDraftCount","document","sumDraftCounts","countManyEntriesDraftRelations","localeFilter","entities","totalNumberDraftRelations","reduce","entity"],"mappings":"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"}
|
|
@@ -2,16 +2,39 @@
|
|
|
2
2
|
|
|
3
3
|
var fp = require('lodash/fp');
|
|
4
4
|
var strapiUtils = require('@strapi/utils');
|
|
5
|
-
var populate = require('./utils/populate.js');
|
|
6
5
|
|
|
7
6
|
const { getScalarAttributes, getMediaAttributes } = strapiUtils.contentTypes;
|
|
8
|
-
|
|
7
|
+
// Scalar fields that can be used in a DB `select`
|
|
8
|
+
const AVAILABLE_STATUS_SCALAR_FIELDS = [
|
|
9
9
|
'id',
|
|
10
10
|
'documentId',
|
|
11
11
|
'locale',
|
|
12
12
|
'updatedAt',
|
|
13
13
|
'createdAt',
|
|
14
|
-
'publishedAt'
|
|
14
|
+
'publishedAt'
|
|
15
|
+
];
|
|
16
|
+
// Relation populate shared by both the fast path and the full path
|
|
17
|
+
const AVAILABLE_STATUS_POPULATE = {
|
|
18
|
+
createdBy: {
|
|
19
|
+
select: [
|
|
20
|
+
'id',
|
|
21
|
+
'firstname',
|
|
22
|
+
'lastname',
|
|
23
|
+
'email'
|
|
24
|
+
]
|
|
25
|
+
},
|
|
26
|
+
updatedBy: {
|
|
27
|
+
select: [
|
|
28
|
+
'id',
|
|
29
|
+
'firstname',
|
|
30
|
+
'lastname',
|
|
31
|
+
'email'
|
|
32
|
+
]
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
// All fields to pick from a hydrated result (scalars + populated relations + virtual)
|
|
36
|
+
const AVAILABLE_STATUS_FIELDS = [
|
|
37
|
+
...AVAILABLE_STATUS_SCALAR_FIELDS,
|
|
15
38
|
'createdBy',
|
|
16
39
|
'updatedBy',
|
|
17
40
|
'status'
|
|
@@ -22,9 +45,13 @@ const AVAILABLE_LOCALES_FIELDS = [
|
|
|
22
45
|
'locale',
|
|
23
46
|
'updatedAt',
|
|
24
47
|
'createdAt',
|
|
25
|
-
'publishedAt'
|
|
26
|
-
'documentId'
|
|
48
|
+
'publishedAt'
|
|
27
49
|
];
|
|
50
|
+
/** Returns a DB filter that matches the opposite publish status. */ const oppositePublishStatus = (publishedAt)=>publishedAt !== null ? {
|
|
51
|
+
$null: true
|
|
52
|
+
} : {
|
|
53
|
+
$notNull: true
|
|
54
|
+
};
|
|
28
55
|
const CONTENT_MANAGER_STATUS = {
|
|
29
56
|
PUBLISHED: 'published',
|
|
30
57
|
DRAFT: 'draft',
|
|
@@ -112,14 +139,7 @@ var documentMetadata = (({ strapi })=>({
|
|
|
112
139
|
}
|
|
113
140
|
return strapi.query(uid).findMany({
|
|
114
141
|
where,
|
|
115
|
-
select:
|
|
116
|
-
'id',
|
|
117
|
-
'documentId',
|
|
118
|
-
'locale',
|
|
119
|
-
'updatedAt',
|
|
120
|
-
'createdAt',
|
|
121
|
-
'publishedAt'
|
|
122
|
-
]
|
|
142
|
+
select: AVAILABLE_STATUS_SCALAR_FIELDS
|
|
123
143
|
});
|
|
124
144
|
},
|
|
125
145
|
getStatus (version, otherDocumentStatuses) {
|
|
@@ -148,9 +168,49 @@ var documentMetadata = (({ strapi })=>({
|
|
|
148
168
|
// We could refactor this so the locales are only loaded when they're
|
|
149
169
|
// needed. e.g. in the bulk locale action modal.
|
|
150
170
|
async getMetadata (uid, version, { availableLocales = true, availableStatus = true } = {}) {
|
|
171
|
+
const model = strapi.getModel(uid);
|
|
172
|
+
const hasDnP = strapiUtils.contentTypes.hasDraftAndPublish(model);
|
|
173
|
+
const isLocalized = model.pluginOptions?.i18n?.localized === true;
|
|
174
|
+
if (!availableLocales && !availableStatus) {
|
|
175
|
+
// Nothing to compute.
|
|
176
|
+
return {
|
|
177
|
+
availableLocales: [],
|
|
178
|
+
availableStatus: [],
|
|
179
|
+
versions: []
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
if (!isLocalized && !hasDnP) {
|
|
183
|
+
// If there are no locales and no draft/publish, there's only ever 1 version of any document.
|
|
184
|
+
return {
|
|
185
|
+
availableLocales: [],
|
|
186
|
+
availableStatus: [],
|
|
187
|
+
versions: []
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
const onlyStatusIsRelevant = hasDnP && (!isLocalized || !availableLocales);
|
|
191
|
+
if (onlyStatusIsRelevant) {
|
|
192
|
+
const otherVersion = availableStatus ? await strapi.db.query(uid).findOne({
|
|
193
|
+
where: {
|
|
194
|
+
documentId: version.documentId,
|
|
195
|
+
...version.locale ? {
|
|
196
|
+
locale: version.locale
|
|
197
|
+
} : {},
|
|
198
|
+
publishedAt: oppositePublishStatus(version.publishedAt)
|
|
199
|
+
},
|
|
200
|
+
select: AVAILABLE_STATUS_SCALAR_FIELDS,
|
|
201
|
+
populate: AVAILABLE_STATUS_POPULATE
|
|
202
|
+
}) : null;
|
|
203
|
+
return {
|
|
204
|
+
availableLocales: [],
|
|
205
|
+
availableStatus: otherVersion ? [
|
|
206
|
+
fp.pick(AVAILABLE_STATUS_FIELDS, otherVersion)
|
|
207
|
+
] : [],
|
|
208
|
+
versions: []
|
|
209
|
+
};
|
|
210
|
+
}
|
|
211
|
+
// Full path for localized content types
|
|
151
212
|
// TODO: Ignore publishedAt if availableStatus=false, and ignore locale if
|
|
152
213
|
// i18n is disabled
|
|
153
|
-
const { populate: populate$1 = {}, fields = [] } = populate.getPopulateForValidation(uid);
|
|
154
214
|
// Include non-translatable scalar and media fields in availableLocales for i18n prefilling
|
|
155
215
|
let nonLocalizedFields = [];
|
|
156
216
|
let nonLocalizedMediaFields = [];
|
|
@@ -159,7 +219,6 @@ var documentMetadata = (({ strapi })=>({
|
|
|
159
219
|
if (i18nPlugin) {
|
|
160
220
|
const i18nService = i18nPlugin.service('content-types');
|
|
161
221
|
if (i18nService?.getNonLocalizedAttributes) {
|
|
162
|
-
const model = strapi.getModel(uid);
|
|
163
222
|
if (model?.attributes) {
|
|
164
223
|
const allNonLocalized = i18nService.getNonLocalizedAttributes(model);
|
|
165
224
|
// Get scalar and media attributes separately
|
|
@@ -185,29 +244,11 @@ var documentMetadata = (({ strapi })=>({
|
|
|
185
244
|
}, {});
|
|
186
245
|
const params = {
|
|
187
246
|
populate: {
|
|
188
|
-
...populate$1,
|
|
189
247
|
...mediaPopulate,
|
|
190
|
-
|
|
191
|
-
createdBy: {
|
|
192
|
-
select: [
|
|
193
|
-
'id',
|
|
194
|
-
'firstname',
|
|
195
|
-
'lastname',
|
|
196
|
-
'email'
|
|
197
|
-
]
|
|
198
|
-
},
|
|
199
|
-
updatedBy: {
|
|
200
|
-
select: [
|
|
201
|
-
'id',
|
|
202
|
-
'firstname',
|
|
203
|
-
'lastname',
|
|
204
|
-
'email'
|
|
205
|
-
]
|
|
206
|
-
}
|
|
248
|
+
...AVAILABLE_STATUS_POPULATE
|
|
207
249
|
},
|
|
208
250
|
fields: fp.uniq([
|
|
209
251
|
...AVAILABLE_LOCALES_FIELDS,
|
|
210
|
-
...fields,
|
|
211
252
|
...nonLocalizedFields
|
|
212
253
|
]),
|
|
213
254
|
filters: {
|
|
@@ -223,7 +264,8 @@ var documentMetadata = (({ strapi })=>({
|
|
|
223
264
|
availableLocales: availableLocalesResult,
|
|
224
265
|
availableStatus: availableStatusResult ? [
|
|
225
266
|
availableStatusResult
|
|
226
|
-
] : []
|
|
267
|
+
] : [],
|
|
268
|
+
versions
|
|
227
269
|
};
|
|
228
270
|
},
|
|
229
271
|
/**
|
|
@@ -245,16 +287,17 @@ var documentMetadata = (({ strapi })=>({
|
|
|
245
287
|
if (!hasDraftAndPublish) {
|
|
246
288
|
opts.availableStatus = false;
|
|
247
289
|
}
|
|
248
|
-
const meta = await this.getMetadata(uid, document, opts);
|
|
290
|
+
const { versions, ...meta } = await this.getMetadata(uid, document, opts);
|
|
249
291
|
// Populate localization statuses
|
|
250
|
-
if (document.localizations) {
|
|
251
|
-
const otherStatus = await this.getManyAvailableStatus(uid, document.localizations);
|
|
292
|
+
if (document.localizations?.length) {
|
|
252
293
|
document.localizations = document.localizations.map((d)=>{
|
|
253
|
-
|
|
294
|
+
// Find the counterpart version (same documentId + locale, opposite publishedAt) from
|
|
295
|
+
// the already-fetched versions array, avoiding an extra DB query.
|
|
296
|
+
const counterpart = versions.find((v)=>v.documentId === d.documentId && v.locale === d.locale && d.publishedAt === null !== (v.publishedAt === null));
|
|
254
297
|
return {
|
|
255
298
|
...d,
|
|
256
|
-
status: this.getStatus(d,
|
|
257
|
-
|
|
299
|
+
status: this.getStatus(d, counterpart ? [
|
|
300
|
+
counterpart
|
|
258
301
|
] : [])
|
|
259
302
|
};
|
|
260
303
|
});
|