@strapi/content-manager 0.0.0-experimental.06e300737ca79fa320fff00b809f095a5d7fe7c4 → 0.0.0-experimental.072258cbcd42181dea057515b972de0e71a24ebc

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.
Files changed (88) hide show
  1. package/dist/admin/components/Widgets.js +253 -0
  2. package/dist/admin/components/Widgets.js.map +1 -1
  3. package/dist/admin/components/Widgets.mjs +236 -3
  4. package/dist/admin/components/Widgets.mjs.map +1 -1
  5. package/dist/admin/index.js +22 -2
  6. package/dist/admin/index.js.map +1 -1
  7. package/dist/admin/index.mjs +22 -3
  8. package/dist/admin/index.mjs.map +1 -1
  9. package/dist/admin/pages/EditView/EditViewPage.js +12 -5
  10. package/dist/admin/pages/EditView/EditViewPage.js.map +1 -1
  11. package/dist/admin/pages/EditView/EditViewPage.mjs +14 -7
  12. package/dist/admin/pages/EditView/EditViewPage.mjs.map +1 -1
  13. package/dist/admin/pages/EditView/components/DocumentActions.js +26 -16
  14. package/dist/admin/pages/EditView/components/DocumentActions.js.map +1 -1
  15. package/dist/admin/pages/EditView/components/DocumentActions.mjs +27 -17
  16. package/dist/admin/pages/EditView/components/DocumentActions.mjs.map +1 -1
  17. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js +1 -0
  18. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js.map +1 -1
  19. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs +1 -0
  20. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs.map +1 -1
  21. package/dist/admin/pages/ListView/ListViewPage.js +74 -65
  22. package/dist/admin/pages/ListView/ListViewPage.js.map +1 -1
  23. package/dist/admin/pages/ListView/ListViewPage.mjs +75 -66
  24. package/dist/admin/pages/ListView/ListViewPage.mjs.map +1 -1
  25. package/dist/admin/services/api.js +3 -1
  26. package/dist/admin/services/api.js.map +1 -1
  27. package/dist/admin/services/api.mjs +3 -1
  28. package/dist/admin/services/api.mjs.map +1 -1
  29. package/dist/admin/services/documents.js +30 -14
  30. package/dist/admin/services/documents.js.map +1 -1
  31. package/dist/admin/services/documents.mjs +30 -14
  32. package/dist/admin/services/documents.mjs.map +1 -1
  33. package/dist/admin/services/homepage.js +11 -2
  34. package/dist/admin/services/homepage.js.map +1 -1
  35. package/dist/admin/services/homepage.mjs +11 -3
  36. package/dist/admin/services/homepage.mjs.map +1 -1
  37. package/dist/admin/src/components/Widgets.d.ts +2 -1
  38. package/dist/admin/src/exports.d.ts +1 -0
  39. package/dist/admin/src/history/services/historyVersion.d.ts +1 -1
  40. package/dist/admin/src/preview/services/preview.d.ts +1 -1
  41. package/dist/admin/src/services/api.d.ts +1 -1
  42. package/dist/admin/src/services/components.d.ts +2 -2
  43. package/dist/admin/src/services/contentTypes.d.ts +3 -3
  44. package/dist/admin/src/services/documents.d.ts +16 -16
  45. package/dist/admin/src/services/homepage.d.ts +6 -2
  46. package/dist/admin/src/services/init.d.ts +1 -1
  47. package/dist/admin/src/services/relations.d.ts +2 -2
  48. package/dist/admin/src/services/uid.d.ts +3 -3
  49. package/dist/admin/translations/en.json.js +2 -0
  50. package/dist/admin/translations/en.json.js.map +1 -1
  51. package/dist/admin/translations/en.json.mjs +2 -0
  52. package/dist/admin/translations/en.json.mjs.map +1 -1
  53. package/dist/admin/translations/es.json.js +5 -2
  54. package/dist/admin/translations/es.json.js.map +1 -1
  55. package/dist/admin/translations/es.json.mjs +5 -2
  56. package/dist/admin/translations/es.json.mjs.map +1 -1
  57. package/dist/admin/translations/fr.json.js +4 -1
  58. package/dist/admin/translations/fr.json.js.map +1 -1
  59. package/dist/admin/translations/fr.json.mjs +4 -1
  60. package/dist/admin/translations/fr.json.mjs.map +1 -1
  61. package/dist/server/homepage/controllers/homepage.js +5 -0
  62. package/dist/server/homepage/controllers/homepage.js.map +1 -1
  63. package/dist/server/homepage/controllers/homepage.mjs +5 -0
  64. package/dist/server/homepage/controllers/homepage.mjs.map +1 -1
  65. package/dist/server/homepage/routes/homepage.js +11 -0
  66. package/dist/server/homepage/routes/homepage.js.map +1 -1
  67. package/dist/server/homepage/routes/homepage.mjs +11 -0
  68. package/dist/server/homepage/routes/homepage.mjs.map +1 -1
  69. package/dist/server/homepage/services/homepage.js +86 -46
  70. package/dist/server/homepage/services/homepage.js.map +1 -1
  71. package/dist/server/homepage/services/homepage.mjs +86 -46
  72. package/dist/server/homepage/services/homepage.mjs.map +1 -1
  73. package/dist/server/src/homepage/controllers/homepage.d.ts +2 -1
  74. package/dist/server/src/homepage/controllers/homepage.d.ts.map +1 -1
  75. package/dist/server/src/homepage/index.d.ts +7 -0
  76. package/dist/server/src/homepage/index.d.ts.map +1 -1
  77. package/dist/server/src/homepage/routes/homepage.d.ts.map +1 -1
  78. package/dist/server/src/homepage/services/homepage.d.ts +4 -1
  79. package/dist/server/src/homepage/services/homepage.d.ts.map +1 -1
  80. package/dist/server/src/homepage/services/index.d.ts +7 -0
  81. package/dist/server/src/homepage/services/index.d.ts.map +1 -1
  82. package/dist/server/src/index.d.ts +7 -0
  83. package/dist/server/src/index.d.ts.map +1 -1
  84. package/dist/server/src/services/index.d.ts +7 -0
  85. package/dist/server/src/services/index.d.ts.map +1 -1
  86. package/dist/shared/contracts/homepage.d.ts +13 -0
  87. package/dist/shared/contracts/homepage.d.ts.map +1 -1
  88. package/package.json +7 -7
@@ -64,8 +64,12 @@ const createHomepageService = ({ strapi })=>{
64
64
  };
65
65
  });
66
66
  };
67
- const formatDocuments = (documents, meta)=>{
67
+ const formatDocuments = (documents, meta, populate)=>{
68
68
  return documents.map((document)=>{
69
+ const additionalFields = populate?.reduce((acc, key)=>{
70
+ acc[key] = document[key];
71
+ return acc;
72
+ }, {}) || {};
69
73
  return {
70
74
  documentId: document.documentId,
71
75
  locale: document.locale ?? null,
@@ -74,79 +78,115 @@ const createHomepageService = ({ strapi })=>{
74
78
  publishedAt: meta.hasDraftAndPublish && document.publishedAt ? new Date(document.publishedAt) : null,
75
79
  contentTypeUid: meta.uid,
76
80
  contentTypeDisplayName: meta.contentType.info.displayName,
77
- kind: meta.contentType.kind
81
+ kind: meta.contentType.kind,
82
+ ...additionalFields
78
83
  };
79
84
  });
80
85
  };
81
- const addStatusToDocuments = async (documents)=>{
82
- return Promise.all(documents.map(async (recentDocument)=>{
83
- const hasDraftAndPublish = contentTypes.hasDraftAndPublish(strapi.contentType(recentDocument.contentTypeUid));
84
- /**
85
- * Tries to query the other version of the document if draft and publish is enabled,
86
- * so that we know when to give the "modified" status.
87
- */ const { availableStatus } = await metadataService.getMetadata(recentDocument.contentTypeUid, recentDocument, {
88
- availableStatus: hasDraftAndPublish,
89
- availableLocales: false
90
- });
91
- const status = metadataService.getStatus(recentDocument, availableStatus);
92
- return {
93
- ...recentDocument,
94
- status: hasDraftAndPublish ? status : undefined
95
- };
96
- }));
97
- };
98
86
  const permissionCheckerService = strapi.plugin('content-manager').service('permission-checker');
99
87
  const getPermissionChecker = (uid)=>permissionCheckerService.create({
100
88
  userAbility: strapi.requestContext.get()?.state.userAbility,
101
89
  model: uid
102
90
  });
103
91
  return {
104
- async getRecentlyPublishedDocuments () {
92
+ async addStatusToDocuments (documents) {
93
+ return Promise.all(documents.map(async (recentDocument)=>{
94
+ const hasDraftAndPublish = contentTypes.hasDraftAndPublish(strapi.contentType(recentDocument.contentTypeUid));
95
+ /**
96
+ * Tries to query the other version of the document if draft and publish is enabled,
97
+ * so that we know when to give the "modified" status.
98
+ */ const { availableStatus } = await metadataService.getMetadata(recentDocument.contentTypeUid, recentDocument, {
99
+ availableStatus: hasDraftAndPublish,
100
+ availableLocales: false
101
+ });
102
+ const status = metadataService.getStatus(recentDocument, availableStatus);
103
+ return {
104
+ ...recentDocument,
105
+ status: hasDraftAndPublish ? status : undefined
106
+ };
107
+ }));
108
+ },
109
+ async queryLastDocuments (additionalQueryParams, draftAndPublishOnly) {
105
110
  const permittedContentTypes = await getPermittedContentTypes();
106
- const allowedContentTypeUids = permittedContentTypes.filter((uid)=>{
111
+ const allowedContentTypeUids = draftAndPublishOnly ? permittedContentTypes.filter((uid)=>{
107
112
  return contentTypes.hasDraftAndPublish(strapi.contentType(uid));
108
- });
113
+ }) : permittedContentTypes;
109
114
  // Fetch the configuration for each content type in a single query
110
115
  const configurations = await getConfiguration(allowedContentTypeUids);
111
116
  // Get the necessary metadata for the documents
112
117
  const contentTypesMeta = getContentTypesMeta(allowedContentTypeUids, configurations);
113
- // Now actually fetch and format the documents
114
118
  const recentDocuments = await Promise.all(contentTypesMeta.map(async (meta)=>{
115
119
  const permissionQuery = await getPermissionChecker(meta.uid).sanitizedQuery.read({
116
120
  limit: MAX_DOCUMENTS,
117
- sort: 'publishedAt:desc',
118
121
  fields: meta.fields,
119
- status: 'published'
122
+ ...additionalQueryParams
120
123
  });
121
124
  const docs = await strapi.documents(meta.uid).findMany(permissionQuery);
122
- return formatDocuments(docs, meta);
125
+ const populate = additionalQueryParams?.populate;
126
+ return formatDocuments(docs, meta, populate);
123
127
  }));
124
- const overallRecentDocuments = recentDocuments.flat().sort((a, b)=>{
125
- if (!a.publishedAt || !b.publishedAt) return 0;
126
- return b.publishedAt.valueOf() - a.publishedAt.valueOf();
128
+ return recentDocuments.flat().sort((a, b)=>{
129
+ switch(additionalQueryParams?.sort){
130
+ case 'publishedAt:desc':
131
+ if (!a.publishedAt || !b.publishedAt) return 0;
132
+ return b.publishedAt.valueOf() - a.publishedAt.valueOf();
133
+ case 'publishedAt:asc':
134
+ if (!a.publishedAt || !b.publishedAt) return 0;
135
+ return a.publishedAt.valueOf() - b.publishedAt.valueOf();
136
+ case 'updatedAt:desc':
137
+ if (!a.updatedAt || !b.updatedAt) return 0;
138
+ return b.updatedAt.valueOf() - a.updatedAt.valueOf();
139
+ case 'updatedAt:asc':
140
+ if (!a.updatedAt || !b.updatedAt) return 0;
141
+ return a.updatedAt.valueOf() - b.updatedAt.valueOf();
142
+ default:
143
+ return 0;
144
+ }
127
145
  }).slice(0, MAX_DOCUMENTS);
128
- return addStatusToDocuments(overallRecentDocuments);
146
+ },
147
+ async getRecentlyPublishedDocuments () {
148
+ const recentlyPublishedDocuments = await this.queryLastDocuments({
149
+ sort: 'publishedAt:desc',
150
+ status: 'published'
151
+ }, true);
152
+ return this.addStatusToDocuments(recentlyPublishedDocuments);
129
153
  },
130
154
  async getRecentlyUpdatedDocuments () {
131
- const allowedContentTypeUids = await getPermittedContentTypes();
155
+ const recentlyUpdatedDocuments = await this.queryLastDocuments({
156
+ sort: 'updatedAt:desc'
157
+ });
158
+ return this.addStatusToDocuments(recentlyUpdatedDocuments);
159
+ },
160
+ async getCountDocuments () {
161
+ const permittedContentTypes = await getPermittedContentTypes();
132
162
  // Fetch the configuration for each content type in a single query
133
- const configurations = await getConfiguration(allowedContentTypeUids);
163
+ const configurations = await getConfiguration(permittedContentTypes);
134
164
  // Get the necessary metadata for the documents
135
- const contentTypesMeta = getContentTypesMeta(allowedContentTypeUids, configurations);
136
- // Now actually fetch and format the documents
137
- const recentDocuments = await Promise.all(contentTypesMeta.map(async (meta)=>{
138
- const permissionQuery = await getPermissionChecker(meta.uid).sanitizedQuery.read({
139
- limit: MAX_DOCUMENTS,
140
- sort: 'updatedAt:desc',
141
- fields: meta.fields
142
- });
143
- const docs = await strapi.documents(meta.uid).findMany(permissionQuery);
144
- return formatDocuments(docs, meta);
165
+ const contentTypesMeta = getContentTypesMeta(permittedContentTypes, configurations);
166
+ const countDocuments = {
167
+ draft: 0,
168
+ published: 0,
169
+ modified: 0
170
+ };
171
+ await Promise.all(contentTypesMeta.map(async (meta)=>{
172
+ const strapiDBConnection = strapi.db.connection;
173
+ const tableName = strapi.contentType(meta.uid).collectionName;
174
+ if (tableName) {
175
+ const draftDocuments = await strapiDBConnection(tableName).whereNull('published_at').whereIn('document_id', function() {
176
+ this.select('document_id').from(tableName).groupBy('document_id').havingRaw('COUNT(*) = 1');
177
+ }).count('* as count').first();
178
+ countDocuments.draft += Number(draftDocuments?.count) || 0;
179
+ const publishedDocuments = meta.hasDraftAndPublish ? await strapiDBConnection(tableName).select('draft.document_id').from(`${tableName} as draft`).join(`${tableName} as published`, function() {
180
+ this.on('draft.document_id', '=', 'published.document_id').andOn('draft.updated_at', '=', 'published.updated_at').andOnNull('draft.published_at').andOnNotNull('published.published_at');
181
+ }).countDistinct('draft.document_id as count').first() : await strapiDBConnection(tableName).select('document_id').from(`${tableName}`).countDistinct('document_id as count').first();
182
+ countDocuments.published += Number(publishedDocuments?.count) || 0;
183
+ const modifiedDocuments = await strapiDBConnection(tableName).select('draft.document_id').from(`${tableName} as draft`).join(`${tableName} as published`, function() {
184
+ this.on('draft.document_id', '=', 'published.document_id').andOn('draft.updated_at', '!=', 'published.updated_at').andOnNull('draft.published_at').andOnNotNull('published.published_at');
185
+ }).countDistinct('draft.document_id as count').first();
186
+ countDocuments.modified += Number(modifiedDocuments?.count) || 0;
187
+ }
145
188
  }));
146
- const overallRecentDocuments = recentDocuments.flat().sort((a, b)=>{
147
- return b.updatedAt.valueOf() - a.updatedAt.valueOf();
148
- }).slice(0, MAX_DOCUMENTS);
149
- return addStatusToDocuments(overallRecentDocuments);
189
+ return countDocuments;
150
190
  }
151
191
  };
152
192
  };
@@ -1 +1 @@
1
- {"version":3,"file":"homepage.mjs","sources":["../../../../server/src/homepage/services/homepage.ts"],"sourcesContent":["import type { Core, Modules, Schema } from '@strapi/types';\nimport { contentTypes } from '@strapi/utils';\n\nimport type { GetRecentDocuments, RecentDocument } from '../../../../shared/contracts/homepage';\n\nconst createHomepageService = ({ strapi }: { strapi: Core.Strapi }) => {\n const MAX_DOCUMENTS = 4;\n\n const metadataService = strapi.plugin('content-manager').service('document-metadata');\n const permissionService = strapi.admin.services.permission;\n\n type ContentTypeConfiguration = {\n uid: RecentDocument['contentTypeUid'];\n settings: { mainField: string };\n };\n const getConfiguration = async (\n contentTypeUids: RecentDocument['contentTypeUid'][]\n ): Promise<ContentTypeConfiguration[]> => {\n /**\n * Don't use the strapi.store util because we need to make\n * more precise queries than exact key matches, in order to make as few queries as possible.\n */\n const coreStore = strapi.db.query('strapi::core-store');\n const rawConfigurations = await coreStore.findMany({\n where: {\n key: {\n $in: contentTypeUids.map(\n (contentType) => `plugin_content_manager_configuration_content_types::${contentType}`\n ),\n },\n },\n });\n\n return rawConfigurations.map((rawConfiguration) => {\n return JSON.parse(rawConfiguration.value);\n });\n };\n\n const getPermittedContentTypes = async () => {\n const readPermissions: Modules.Permissions.PermissionRule[] = await permissionService.findMany({\n where: {\n role: { users: { id: strapi.requestContext.get()?.state?.user.id } },\n action: 'plugin::content-manager.explorer.read',\n },\n });\n\n return readPermissions\n .map((permission) => permission.subject)\n .filter(Boolean) as RecentDocument['contentTypeUid'][];\n };\n\n type ContentTypeMeta = {\n fields: string[];\n mainField: string;\n contentType: Schema.ContentType;\n hasDraftAndPublish: boolean;\n uid: RecentDocument['contentTypeUid'];\n };\n\n const getContentTypesMeta = (\n allowedContentTypeUids: RecentDocument['contentTypeUid'][],\n configurations: ContentTypeConfiguration[]\n ): ContentTypeMeta[] => {\n return allowedContentTypeUids.map((uid) => {\n const configuration = configurations.find((config) => config.uid === uid);\n const contentType = strapi.contentType(uid);\n const fields = ['documentId', 'updatedAt'];\n\n // Add fields required to get the status if D&P is enabled\n const hasDraftAndPublish = contentTypes.hasDraftAndPublish(contentType);\n if (hasDraftAndPublish) {\n fields.push('publishedAt');\n }\n\n // Only add the main field if it's defined\n if (configuration?.settings.mainField) {\n fields.push(configuration.settings.mainField);\n }\n\n // Only add locale if it's localized\n const isLocalized = (contentType.pluginOptions?.i18n as any)?.localized;\n if (isLocalized) {\n fields.push('locale');\n }\n\n return {\n fields,\n mainField: configuration!.settings.mainField,\n contentType,\n hasDraftAndPublish,\n uid,\n };\n });\n };\n\n const formatDocuments = (documents: Modules.Documents.AnyDocument[], meta: ContentTypeMeta) => {\n return documents.map((document) => {\n return {\n documentId: document.documentId,\n locale: document.locale ?? null,\n updatedAt: new Date(document.updatedAt),\n title: document[meta.mainField ?? 'documentId'],\n publishedAt:\n meta.hasDraftAndPublish && document.publishedAt ? new Date(document.publishedAt) : null,\n contentTypeUid: meta.uid,\n contentTypeDisplayName: meta.contentType.info.displayName,\n kind: meta.contentType.kind,\n };\n });\n };\n\n const addStatusToDocuments = async (documents: RecentDocument[]): Promise<RecentDocument[]> => {\n return Promise.all(\n documents.map(async (recentDocument) => {\n const hasDraftAndPublish = contentTypes.hasDraftAndPublish(\n strapi.contentType(recentDocument.contentTypeUid)\n );\n /**\n * Tries to query the other version of the document if draft and publish is enabled,\n * so that we know when to give the \"modified\" status.\n */\n const { availableStatus } = await metadataService.getMetadata(\n recentDocument.contentTypeUid,\n recentDocument,\n {\n availableStatus: hasDraftAndPublish,\n availableLocales: false,\n }\n );\n const status: RecentDocument['status'] = metadataService.getStatus(\n recentDocument,\n availableStatus\n );\n\n return {\n ...recentDocument,\n status: hasDraftAndPublish ? status : undefined,\n };\n })\n );\n };\n\n const permissionCheckerService = strapi.plugin('content-manager').service('permission-checker');\n const getPermissionChecker = (uid: string) =>\n permissionCheckerService.create({\n userAbility: strapi.requestContext.get()?.state.userAbility,\n model: uid,\n });\n\n return {\n async getRecentlyPublishedDocuments(): Promise<GetRecentDocuments.Response['data']> {\n const permittedContentTypes = await getPermittedContentTypes();\n const allowedContentTypeUids = permittedContentTypes.filter((uid) => {\n return contentTypes.hasDraftAndPublish(strapi.contentType(uid));\n });\n // Fetch the configuration for each content type in a single query\n const configurations = await getConfiguration(allowedContentTypeUids);\n // Get the necessary metadata for the documents\n const contentTypesMeta = getContentTypesMeta(allowedContentTypeUids, configurations);\n // Now actually fetch and format the documents\n const recentDocuments = await Promise.all(\n contentTypesMeta.map(async (meta) => {\n const permissionQuery = await getPermissionChecker(meta.uid).sanitizedQuery.read({\n limit: MAX_DOCUMENTS,\n sort: 'publishedAt:desc',\n fields: meta.fields,\n status: 'published',\n });\n\n const docs = await strapi.documents(meta.uid).findMany(permissionQuery);\n\n return formatDocuments(docs, meta);\n })\n );\n\n const overallRecentDocuments = recentDocuments\n .flat()\n .sort((a, b) => {\n if (!a.publishedAt || !b.publishedAt) return 0;\n return b.publishedAt.valueOf() - a.publishedAt.valueOf();\n })\n .slice(0, MAX_DOCUMENTS);\n\n return addStatusToDocuments(overallRecentDocuments);\n },\n\n async getRecentlyUpdatedDocuments(): Promise<GetRecentDocuments.Response['data']> {\n const allowedContentTypeUids = await getPermittedContentTypes();\n // Fetch the configuration for each content type in a single query\n const configurations = await getConfiguration(allowedContentTypeUids);\n // Get the necessary metadata for the documents\n const contentTypesMeta = getContentTypesMeta(allowedContentTypeUids, configurations);\n // Now actually fetch and format the documents\n const recentDocuments = await Promise.all(\n contentTypesMeta.map(async (meta) => {\n const permissionQuery = await getPermissionChecker(meta.uid).sanitizedQuery.read({\n limit: MAX_DOCUMENTS,\n sort: 'updatedAt:desc',\n fields: meta.fields,\n });\n\n const docs = await strapi.documents(meta.uid).findMany(permissionQuery);\n\n return formatDocuments(docs, meta);\n })\n );\n\n const overallRecentDocuments = recentDocuments\n .flat()\n .sort((a, b) => {\n return b.updatedAt.valueOf() - a.updatedAt.valueOf();\n })\n .slice(0, MAX_DOCUMENTS);\n\n return addStatusToDocuments(overallRecentDocuments);\n },\n };\n};\n\nexport { createHomepageService };\n"],"names":["createHomepageService","strapi","MAX_DOCUMENTS","metadataService","plugin","service","permissionService","admin","services","permission","getConfiguration","contentTypeUids","coreStore","db","query","rawConfigurations","findMany","where","key","$in","map","contentType","rawConfiguration","JSON","parse","value","getPermittedContentTypes","readPermissions","role","users","id","requestContext","get","state","user","action","subject","filter","Boolean","getContentTypesMeta","allowedContentTypeUids","configurations","uid","configuration","find","config","fields","hasDraftAndPublish","contentTypes","push","settings","mainField","isLocalized","pluginOptions","i18n","localized","formatDocuments","documents","meta","document","documentId","locale","updatedAt","Date","title","publishedAt","contentTypeUid","contentTypeDisplayName","info","displayName","kind","addStatusToDocuments","Promise","all","recentDocument","availableStatus","getMetadata","availableLocales","status","getStatus","undefined","permissionCheckerService","getPermissionChecker","create","userAbility","model","getRecentlyPublishedDocuments","permittedContentTypes","contentTypesMeta","recentDocuments","permissionQuery","sanitizedQuery","read","limit","sort","docs","overallRecentDocuments","flat","a","b","valueOf","slice","getRecentlyUpdatedDocuments"],"mappings":"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"}
1
+ {"version":3,"file":"homepage.mjs","sources":["../../../../server/src/homepage/services/homepage.ts"],"sourcesContent":["import type { Core, Modules, Schema } from '@strapi/types';\nimport { contentTypes } from '@strapi/utils';\n\nimport type {\n GetCountDocuments,\n GetRecentDocuments,\n RecentDocument,\n} from '../../../../shared/contracts/homepage';\n\nconst createHomepageService = ({ strapi }: { strapi: Core.Strapi }) => {\n const MAX_DOCUMENTS = 4;\n\n const metadataService = strapi.plugin('content-manager').service('document-metadata');\n const permissionService = strapi.admin.services.permission;\n\n type ContentTypeConfiguration = {\n uid: RecentDocument['contentTypeUid'];\n settings: { mainField: string };\n };\n const getConfiguration = async (\n contentTypeUids: RecentDocument['contentTypeUid'][]\n ): Promise<ContentTypeConfiguration[]> => {\n /**\n * Don't use the strapi.store util because we need to make\n * more precise queries than exact key matches, in order to make as few queries as possible.\n */\n const coreStore = strapi.db.query('strapi::core-store');\n const rawConfigurations = await coreStore.findMany({\n where: {\n key: {\n $in: contentTypeUids.map(\n (contentType) => `plugin_content_manager_configuration_content_types::${contentType}`\n ),\n },\n },\n });\n\n return rawConfigurations.map((rawConfiguration) => {\n return JSON.parse(rawConfiguration.value);\n });\n };\n\n const getPermittedContentTypes = async () => {\n const readPermissions: Modules.Permissions.PermissionRule[] = await permissionService.findMany({\n where: {\n role: { users: { id: strapi.requestContext.get()?.state?.user.id } },\n action: 'plugin::content-manager.explorer.read',\n },\n });\n\n return readPermissions\n .map((permission) => permission.subject)\n .filter(Boolean) as RecentDocument['contentTypeUid'][];\n };\n\n type ContentTypeMeta = {\n fields: string[];\n mainField: string;\n contentType: Schema.ContentType;\n hasDraftAndPublish: boolean;\n uid: RecentDocument['contentTypeUid'];\n };\n\n const getContentTypesMeta = (\n allowedContentTypeUids: RecentDocument['contentTypeUid'][],\n configurations: ContentTypeConfiguration[]\n ): ContentTypeMeta[] => {\n return allowedContentTypeUids.map((uid) => {\n const configuration = configurations.find((config) => config.uid === uid);\n const contentType = strapi.contentType(uid);\n const fields = ['documentId', 'updatedAt'];\n\n // Add fields required to get the status if D&P is enabled\n const hasDraftAndPublish = contentTypes.hasDraftAndPublish(contentType);\n if (hasDraftAndPublish) {\n fields.push('publishedAt');\n }\n\n // Only add the main field if it's defined\n if (configuration?.settings.mainField) {\n fields.push(configuration.settings.mainField);\n }\n\n // Only add locale if it's localized\n const isLocalized = (contentType.pluginOptions?.i18n as any)?.localized;\n if (isLocalized) {\n fields.push('locale');\n }\n\n return {\n fields,\n mainField: configuration!.settings.mainField,\n contentType,\n hasDraftAndPublish,\n uid,\n };\n });\n };\n\n const formatDocuments = (\n documents: Modules.Documents.AnyDocument[],\n meta: ContentTypeMeta,\n populate?: string[]\n ) => {\n return documents.map((document) => {\n const additionalFields =\n populate?.reduce(\n (acc, key) => {\n acc[key] = document[key];\n return acc;\n },\n {} as Record<string, any>\n ) || {};\n return {\n documentId: document.documentId,\n locale: document.locale ?? null,\n updatedAt: new Date(document.updatedAt),\n title: document[meta.mainField ?? 'documentId'],\n publishedAt:\n meta.hasDraftAndPublish && document.publishedAt ? new Date(document.publishedAt) : null,\n contentTypeUid: meta.uid,\n contentTypeDisplayName: meta.contentType.info.displayName,\n kind: meta.contentType.kind,\n ...additionalFields,\n };\n });\n };\n\n const permissionCheckerService = strapi.plugin('content-manager').service('permission-checker');\n const getPermissionChecker = (uid: string) =>\n permissionCheckerService.create({\n userAbility: strapi.requestContext.get()?.state.userAbility,\n model: uid,\n });\n\n return {\n async addStatusToDocuments(documents: RecentDocument[]): Promise<RecentDocument[]> {\n return Promise.all(\n documents.map(async (recentDocument) => {\n const hasDraftAndPublish = contentTypes.hasDraftAndPublish(\n strapi.contentType(recentDocument.contentTypeUid)\n );\n /**\n * Tries to query the other version of the document if draft and publish is enabled,\n * so that we know when to give the \"modified\" status.\n */\n const { availableStatus } = await metadataService.getMetadata(\n recentDocument.contentTypeUid,\n recentDocument,\n {\n availableStatus: hasDraftAndPublish,\n availableLocales: false,\n }\n );\n const status: RecentDocument['status'] = metadataService.getStatus(\n recentDocument,\n availableStatus\n );\n\n return {\n ...recentDocument,\n status: hasDraftAndPublish ? status : undefined,\n };\n })\n );\n },\n\n async queryLastDocuments(\n additionalQueryParams?: Record<string, unknown>,\n draftAndPublishOnly?: boolean\n ): Promise<RecentDocument[]> {\n const permittedContentTypes = await getPermittedContentTypes();\n const allowedContentTypeUids = draftAndPublishOnly\n ? permittedContentTypes.filter((uid) => {\n return contentTypes.hasDraftAndPublish(strapi.contentType(uid));\n })\n : permittedContentTypes;\n // Fetch the configuration for each content type in a single query\n const configurations = await getConfiguration(allowedContentTypeUids);\n // Get the necessary metadata for the documents\n const contentTypesMeta = getContentTypesMeta(allowedContentTypeUids, configurations);\n\n const recentDocuments = await Promise.all(\n contentTypesMeta.map(async (meta) => {\n const permissionQuery = await getPermissionChecker(meta.uid).sanitizedQuery.read({\n limit: MAX_DOCUMENTS,\n fields: meta.fields,\n ...additionalQueryParams,\n });\n\n const docs = await strapi.documents(meta.uid).findMany(permissionQuery);\n const populate = additionalQueryParams?.populate as string[];\n\n return formatDocuments(docs, meta, populate);\n })\n );\n\n return recentDocuments\n .flat()\n .sort((a, b) => {\n switch (additionalQueryParams?.sort) {\n case 'publishedAt:desc':\n if (!a.publishedAt || !b.publishedAt) return 0;\n return b.publishedAt.valueOf() - a.publishedAt.valueOf();\n case 'publishedAt:asc':\n if (!a.publishedAt || !b.publishedAt) return 0;\n return a.publishedAt.valueOf() - b.publishedAt.valueOf();\n case 'updatedAt:desc':\n if (!a.updatedAt || !b.updatedAt) return 0;\n return b.updatedAt.valueOf() - a.updatedAt.valueOf();\n case 'updatedAt:asc':\n if (!a.updatedAt || !b.updatedAt) return 0;\n return a.updatedAt.valueOf() - b.updatedAt.valueOf();\n default:\n return 0;\n }\n })\n .slice(0, MAX_DOCUMENTS);\n },\n\n async getRecentlyPublishedDocuments(): Promise<GetRecentDocuments.Response['data']> {\n const recentlyPublishedDocuments = await this.queryLastDocuments(\n {\n sort: 'publishedAt:desc',\n status: 'published',\n },\n true\n );\n\n return this.addStatusToDocuments(recentlyPublishedDocuments);\n },\n\n async getRecentlyUpdatedDocuments(): Promise<GetRecentDocuments.Response['data']> {\n const recentlyUpdatedDocuments = await this.queryLastDocuments({\n sort: 'updatedAt:desc',\n });\n\n return this.addStatusToDocuments(recentlyUpdatedDocuments);\n },\n\n async getCountDocuments(): Promise<GetCountDocuments.Response['data']> {\n const permittedContentTypes = await getPermittedContentTypes();\n // Fetch the configuration for each content type in a single query\n const configurations = await getConfiguration(permittedContentTypes);\n // Get the necessary metadata for the documents\n const contentTypesMeta = getContentTypesMeta(permittedContentTypes, configurations);\n\n const countDocuments = {\n draft: 0,\n published: 0,\n modified: 0,\n };\n\n await Promise.all(\n contentTypesMeta.map(async (meta) => {\n const strapiDBConnection = strapi.db.connection;\n const tableName = strapi.contentType(meta.uid).collectionName;\n if (tableName) {\n const draftDocuments = await strapiDBConnection(tableName)\n .whereNull('published_at')\n .whereIn('document_id', function () {\n this.select('document_id')\n .from(tableName)\n .groupBy('document_id')\n .havingRaw('COUNT(*) = 1');\n })\n .count('* as count')\n .first();\n countDocuments.draft += Number(draftDocuments?.count) || 0;\n\n const publishedDocuments = meta.hasDraftAndPublish\n ? await strapiDBConnection(tableName)\n .select('draft.document_id')\n .from(`${tableName} as draft`)\n .join(`${tableName} as published`, function () {\n this.on('draft.document_id', '=', 'published.document_id')\n .andOn('draft.updated_at', '=', 'published.updated_at')\n .andOnNull('draft.published_at')\n .andOnNotNull('published.published_at');\n })\n .countDistinct('draft.document_id as count')\n .first()\n : await strapiDBConnection(tableName)\n .select('document_id')\n .from(`${tableName}`)\n .countDistinct('document_id as count')\n .first();\n countDocuments.published += Number(publishedDocuments?.count) || 0;\n\n const modifiedDocuments = await strapiDBConnection(tableName)\n .select('draft.document_id')\n .from(`${tableName} as draft`)\n .join(`${tableName} as published`, function () {\n this.on('draft.document_id', '=', 'published.document_id')\n .andOn('draft.updated_at', '!=', 'published.updated_at')\n .andOnNull('draft.published_at')\n .andOnNotNull('published.published_at');\n })\n .countDistinct('draft.document_id as count')\n .first();\n countDocuments.modified += Number(modifiedDocuments?.count) || 0;\n }\n })\n );\n\n return countDocuments;\n },\n };\n};\n\nexport { createHomepageService };\n"],"names":["createHomepageService","strapi","MAX_DOCUMENTS","metadataService","plugin","service","permissionService","admin","services","permission","getConfiguration","contentTypeUids","coreStore","db","query","rawConfigurations","findMany","where","key","$in","map","contentType","rawConfiguration","JSON","parse","value","getPermittedContentTypes","readPermissions","role","users","id","requestContext","get","state","user","action","subject","filter","Boolean","getContentTypesMeta","allowedContentTypeUids","configurations","uid","configuration","find","config","fields","hasDraftAndPublish","contentTypes","push","settings","mainField","isLocalized","pluginOptions","i18n","localized","formatDocuments","documents","meta","populate","document","additionalFields","reduce","acc","documentId","locale","updatedAt","Date","title","publishedAt","contentTypeUid","contentTypeDisplayName","info","displayName","kind","permissionCheckerService","getPermissionChecker","create","userAbility","model","addStatusToDocuments","Promise","all","recentDocument","availableStatus","getMetadata","availableLocales","status","getStatus","undefined","queryLastDocuments","additionalQueryParams","draftAndPublishOnly","permittedContentTypes","contentTypesMeta","recentDocuments","permissionQuery","sanitizedQuery","read","limit","docs","flat","sort","a","b","valueOf","slice","getRecentlyPublishedDocuments","recentlyPublishedDocuments","getRecentlyUpdatedDocuments","recentlyUpdatedDocuments","getCountDocuments","countDocuments","draft","published","modified","strapiDBConnection","connection","tableName","collectionName","draftDocuments","whereNull","whereIn","select","from","groupBy","havingRaw","count","first","Number","publishedDocuments","join","on","andOn","andOnNull","andOnNotNull","countDistinct","modifiedDocuments"],"mappings":"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"}
@@ -1,7 +1,8 @@
1
1
  /// <reference types="node" />
2
- import type { GetRecentDocuments } from '../../../../shared/contracts/homepage';
2
+ import type { GetRecentDocuments, GetCountDocuments } from '../../../../shared/contracts/homepage';
3
3
  declare const createHomepageController: () => {
4
4
  getRecentDocuments(ctx: import("koa").Context): Promise<GetRecentDocuments.Response>;
5
+ getCountDocuments(): Promise<GetCountDocuments.Response>;
5
6
  };
6
7
  export { createHomepageController };
7
8
  //# sourceMappingURL=homepage.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"homepage.d.ts","sourceRoot":"","sources":["../../../../../server/src/homepage/controllers/homepage.ts"],"names":[],"mappings":";AAGA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uCAAuC,CAAC;AAEhF,QAAA,MAAM,wBAAwB;oDAWK,QAAQ,2BAA2B,CAAC;CAmBtE,CAAC;AAEF,OAAO,EAAE,wBAAwB,EAAE,CAAC"}
1
+ {"version":3,"file":"homepage.d.ts","sourceRoot":"","sources":["../../../../../server/src/homepage/controllers/homepage.ts"],"names":[],"mappings":";AAGA,OAAO,KAAK,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAEnG,QAAA,MAAM,wBAAwB;oDAWK,QAAQ,2BAA2B,CAAC;yBAkBxC,QAAQ,0BAA0B,CAAC;CAIjE,CAAC;AAEF,OAAO,EAAE,wBAAwB,EAAE,CAAC"}
@@ -7,8 +7,15 @@ declare const _default: {
7
7
  homepage: ({ strapi }: {
8
8
  strapi: import("@strapi/types/dist/core").Strapi;
9
9
  }) => {
10
+ addStatusToDocuments(documents: import("../../../shared/contracts/homepage").RecentDocument[]): Promise<import("../../../shared/contracts/homepage").RecentDocument[]>;
11
+ queryLastDocuments(additionalQueryParams?: Record<string, unknown> | undefined, draftAndPublishOnly?: boolean | undefined): Promise<import("../../../shared/contracts/homepage").RecentDocument[]>;
10
12
  getRecentlyPublishedDocuments(): Promise<import("../../../shared/contracts/homepage").RecentDocument[]>;
11
13
  getRecentlyUpdatedDocuments(): Promise<import("../../../shared/contracts/homepage").RecentDocument[]>;
14
+ getCountDocuments(): Promise<{
15
+ draft: number;
16
+ published: number;
17
+ modified: number;
18
+ }>;
12
19
  };
13
20
  };
14
21
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../server/src/homepage/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAIA,wBAIE"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../server/src/homepage/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AAIA,wBAIE"}
@@ -1 +1 @@
1
- {"version":3,"file":"homepage.d.ts","sourceRoot":"","sources":["../../../../../server/src/homepage/routes/homepage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAI5C,QAAA,MAAM,cAAc,EAAE,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,MAAM,CAazD,CAAC;AAEF,OAAO,EAAE,cAAc,EAAE,CAAC"}
1
+ {"version":3,"file":"homepage.d.ts","sourceRoot":"","sources":["../../../../../server/src/homepage/routes/homepage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAI5C,QAAA,MAAM,cAAc,EAAE,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,MAAM,CAsBzD,CAAC;AAEF,OAAO,EAAE,cAAc,EAAE,CAAC"}
@@ -1,11 +1,14 @@
1
1
  /// <reference types="node" />
2
2
  import type { Core } from '@strapi/types';
3
- import type { GetRecentDocuments } from '../../../../shared/contracts/homepage';
3
+ import type { GetCountDocuments, GetRecentDocuments, RecentDocument } from '../../../../shared/contracts/homepage';
4
4
  declare const createHomepageService: ({ strapi }: {
5
5
  strapi: Core.Strapi;
6
6
  }) => {
7
+ addStatusToDocuments(documents: RecentDocument[]): Promise<RecentDocument[]>;
8
+ queryLastDocuments(additionalQueryParams?: Record<string, unknown>, draftAndPublishOnly?: boolean): Promise<RecentDocument[]>;
7
9
  getRecentlyPublishedDocuments(): Promise<GetRecentDocuments.Response['data']>;
8
10
  getRecentlyUpdatedDocuments(): Promise<GetRecentDocuments.Response['data']>;
11
+ getCountDocuments(): Promise<GetCountDocuments.Response['data']>;
9
12
  };
10
13
  export { createHomepageService };
11
14
  //# sourceMappingURL=homepage.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"homepage.d.ts","sourceRoot":"","sources":["../../../../../server/src/homepage/services/homepage.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,IAAI,EAAmB,MAAM,eAAe,CAAC;AAG3D,OAAO,KAAK,EAAE,kBAAkB,EAAkB,MAAM,uCAAuC,CAAC;AAEhG,QAAA,MAAM,qBAAqB,eAAgB;IAAE,MAAM,EAAE,KAAK,MAAM,CAAA;CAAE;qCAiJvB,QAAQ,2BAA2B,CAAC,MAAM,CAAC,CAAC;mCAoC9C,QAAQ,2BAA2B,CAAC,MAAM,CAAC,CAAC;CA+BpF,CAAC;AAEF,OAAO,EAAE,qBAAqB,EAAE,CAAC"}
1
+ {"version":3,"file":"homepage.d.ts","sourceRoot":"","sources":["../../../../../server/src/homepage/services/homepage.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,IAAI,EAAmB,MAAM,eAAe,CAAC;AAG3D,OAAO,KAAK,EACV,iBAAiB,EACjB,kBAAkB,EAClB,cAAc,EACf,MAAM,uCAAuC,CAAC;AAE/C,QAAA,MAAM,qBAAqB,eAAgB;IAAE,MAAM,EAAE,KAAK,MAAM,CAAA;CAAE;oCA+HxB,cAAc,EAAE,GAAG,QAAQ,cAAc,EAAE,CAAC;+CAgCxD,OAAO,MAAM,EAAE,OAAO,CAAC,wBACzB,OAAO,GAC5B,QAAQ,cAAc,EAAE,CAAC;qCAkDW,QAAQ,2BAA2B,CAAC,MAAM,CAAC,CAAC;mCAY9C,QAAQ,2BAA2B,CAAC,MAAM,CAAC,CAAC;yBAQtD,QAAQ,0BAA0B,CAAC,MAAM,CAAC,CAAC;CAoEzE,CAAC;AAEF,OAAO,EAAE,qBAAqB,EAAE,CAAC"}
@@ -2,8 +2,15 @@ export declare const services: {
2
2
  homepage: ({ strapi }: {
3
3
  strapi: import("@strapi/types/dist/core").Strapi;
4
4
  }) => {
5
+ addStatusToDocuments(documents: import("../../../../shared/contracts/homepage").RecentDocument[]): Promise<import("../../../../shared/contracts/homepage").RecentDocument[]>;
6
+ queryLastDocuments(additionalQueryParams?: Record<string, unknown> | undefined, draftAndPublishOnly?: boolean | undefined): Promise<import("../../../../shared/contracts/homepage").RecentDocument[]>;
5
7
  getRecentlyPublishedDocuments(): Promise<import("../../../../shared/contracts/homepage").RecentDocument[]>;
6
8
  getRecentlyUpdatedDocuments(): Promise<import("../../../../shared/contracts/homepage").RecentDocument[]>;
9
+ getCountDocuments(): Promise<{
10
+ draft: number;
11
+ published: number;
12
+ modified: number;
13
+ }>;
7
14
  };
8
15
  };
9
16
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../server/src/homepage/services/index.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,QAAQ;;;;;;;CAEsB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../server/src/homepage/services/index.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;CAEsB,CAAC"}
@@ -110,8 +110,15 @@ declare const _default: () => {
110
110
  homepage: ({ strapi }: {
111
111
  strapi: import("@strapi/types/dist/core").Strapi;
112
112
  }) => {
113
+ addStatusToDocuments(documents: import("../../shared/contracts/homepage").RecentDocument[]): Promise<import("../../shared/contracts/homepage").RecentDocument[]>;
114
+ queryLastDocuments(additionalQueryParams?: Record<string, unknown> | undefined, draftAndPublishOnly?: boolean | undefined): Promise<import("../../shared/contracts/homepage").RecentDocument[]>;
113
115
  getRecentlyPublishedDocuments(): Promise<import("../../shared/contracts/homepage").RecentDocument[]>;
114
116
  getRecentlyUpdatedDocuments(): Promise<import("../../shared/contracts/homepage").RecentDocument[]>;
117
+ getCountDocuments(): Promise<{
118
+ draft: number;
119
+ published: number;
120
+ modified: number;
121
+ }>;
115
122
  };
116
123
  components: ({ strapi }: {
117
124
  strapi: import("@strapi/types/dist/core").Strapi;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../server/src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAQA,wBAUE"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../server/src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAQA,wBAUE"}
@@ -2,8 +2,15 @@ declare const _default: {
2
2
  homepage: ({ strapi }: {
3
3
  strapi: import("@strapi/types/dist/core").Strapi;
4
4
  }) => {
5
+ addStatusToDocuments(documents: import("../../../shared/contracts/homepage").RecentDocument[]): Promise<import("../../../shared/contracts/homepage").RecentDocument[]>;
6
+ queryLastDocuments(additionalQueryParams?: Record<string, unknown> | undefined, draftAndPublishOnly?: boolean | undefined): Promise<import("../../../shared/contracts/homepage").RecentDocument[]>;
5
7
  getRecentlyPublishedDocuments(): Promise<import("../../../shared/contracts/homepage").RecentDocument[]>;
6
8
  getRecentlyUpdatedDocuments(): Promise<import("../../../shared/contracts/homepage").RecentDocument[]>;
9
+ getCountDocuments(): Promise<{
10
+ draft: number;
11
+ published: number;
12
+ modified: number;
13
+ }>;
7
14
  };
8
15
  components: ({ strapi }: {
9
16
  strapi: import("@strapi/types/dist/core").Strapi;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../server/src/services/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAeA,wBAeE"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../server/src/services/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAeA,wBAeE"}
@@ -23,3 +23,16 @@ export declare namespace GetRecentDocuments {
23
23
  error?: errors.ApplicationError;
24
24
  }
25
25
  }
26
+ export declare namespace GetCountDocuments {
27
+ interface Request {
28
+ body: {};
29
+ }
30
+ interface Response {
31
+ data: {
32
+ draft: number;
33
+ published: number;
34
+ modified: number;
35
+ };
36
+ error?: errors.ApplicationError;
37
+ }
38
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"homepage.d.ts","sourceRoot":"","sources":["../../../shared/contracts/homepage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAGjD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC,eAAe,CAAC;IAC7B,cAAc,EAAE,GAAG,CAAC,WAAW,CAAC;IAChC,sBAAsB,EAAE,MAAM,CAAC;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,CAAC,EAAE,OAAO,GAAG,WAAW,GAAG,UAAU,CAAC;IAC5C,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,IAAI,CAAC;IAChB,WAAW,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;CAC3B;AAED,MAAM,CAAC,OAAO,WAAW,kBAAkB,CAAC;IAC1C,UAAiB,OAAO;QACtB,IAAI,EAAE,EAAE,CAAC;QACT,KAAK,EAAE;YACL,MAAM,EAAE,QAAQ,GAAG,SAAS,CAAC;SAC9B,CAAC;KACH;IAED,UAAiB,QAAQ;QACvB,IAAI,EAAE,cAAc,EAAE,CAAC;QACvB,KAAK,CAAC,EAAE,MAAM,CAAC,gBAAgB,CAAC;KACjC;CACF"}
1
+ {"version":3,"file":"homepage.d.ts","sourceRoot":"","sources":["../../../shared/contracts/homepage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAGjD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC,eAAe,CAAC;IAC7B,cAAc,EAAE,GAAG,CAAC,WAAW,CAAC;IAChC,sBAAsB,EAAE,MAAM,CAAC;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,CAAC,EAAE,OAAO,GAAG,WAAW,GAAG,UAAU,CAAC;IAC5C,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,IAAI,CAAC;IAChB,WAAW,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;CAC3B;AAED,MAAM,CAAC,OAAO,WAAW,kBAAkB,CAAC;IAC1C,UAAiB,OAAO;QACtB,IAAI,EAAE,EAAE,CAAC;QACT,KAAK,EAAE;YACL,MAAM,EAAE,QAAQ,GAAG,SAAS,CAAC;SAC9B,CAAC;KACH;IAED,UAAiB,QAAQ;QACvB,IAAI,EAAE,cAAc,EAAE,CAAC;QACvB,KAAK,CAAC,EAAE,MAAM,CAAC,gBAAgB,CAAC;KACjC;CACF;AAED,MAAM,CAAC,OAAO,WAAW,iBAAiB,CAAC;IACzC,UAAiB,OAAO;QACtB,IAAI,EAAE,EAAE,CAAC;KACV;IAED,UAAiB,QAAQ;QACvB,IAAI,EAAE;YACJ,KAAK,EAAE,MAAM,CAAC;YACd,SAAS,EAAE,MAAM,CAAC;YAClB,QAAQ,EAAE,MAAM,CAAC;SAClB,CAAC;QACF,KAAK,CAAC,EAAE,MAAM,CAAC,gBAAgB,CAAC;KACjC;CACF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@strapi/content-manager",
3
- "version": "0.0.0-experimental.06e300737ca79fa320fff00b809f095a5d7fe7c4",
3
+ "version": "0.0.0-experimental.072258cbcd42181dea057515b972de0e71a24ebc",
4
4
  "description": "A powerful UI to easily manage your data.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -67,10 +67,10 @@
67
67
  "@radix-ui/react-toolbar": "1.0.4",
68
68
  "@reduxjs/toolkit": "1.9.7",
69
69
  "@sindresorhus/slugify": "1.1.0",
70
- "@strapi/design-system": "2.0.0-rc.27",
71
- "@strapi/icons": "2.0.0-rc.27",
72
- "@strapi/types": "0.0.0-experimental.06e300737ca79fa320fff00b809f095a5d7fe7c4",
73
- "@strapi/utils": "0.0.0-experimental.06e300737ca79fa320fff00b809f095a5d7fe7c4",
70
+ "@strapi/design-system": "2.0.0-rc.29",
71
+ "@strapi/icons": "2.0.0-rc.29",
72
+ "@strapi/types": "0.0.0-experimental.072258cbcd42181dea057515b972de0e71a24ebc",
73
+ "@strapi/utils": "0.0.0-experimental.072258cbcd42181dea057515b972de0e71a24ebc",
74
74
  "codemirror5": "npm:codemirror@^5.65.11",
75
75
  "date-fns": "2.30.0",
76
76
  "fractional-indexing": "3.2.0",
@@ -105,8 +105,8 @@
105
105
  "yup": "0.32.9"
106
106
  },
107
107
  "devDependencies": {
108
- "@strapi/admin": "0.0.0-experimental.06e300737ca79fa320fff00b809f095a5d7fe7c4",
109
- "@strapi/database": "0.0.0-experimental.06e300737ca79fa320fff00b809f095a5d7fe7c4",
108
+ "@strapi/admin": "0.0.0-experimental.072258cbcd42181dea057515b972de0e71a24ebc",
109
+ "@strapi/database": "0.0.0-experimental.072258cbcd42181dea057515b972de0e71a24ebc",
110
110
  "@testing-library/react": "15.0.7",
111
111
  "@types/jest": "29.5.2",
112
112
  "@types/lodash": "^4.14.191",