@strapi/content-releases 0.0.0-next.4052765aa209dd4f3d92b81baee295fc0213c04c → 0.0.0-next.4119cc523a8fec549bb2f1869c6e789650f7f4de
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_chunks/{App-BA2xDdy0.mjs → App-FQyYFBJT.mjs} +298 -113
- package/dist/_chunks/App-FQyYFBJT.mjs.map +1 -0
- package/dist/_chunks/{App-D4Wira1X.js → App-lx4Ucy9W.js} +337 -152
- package/dist/_chunks/App-lx4Ucy9W.js.map +1 -0
- package/dist/_chunks/{ReleasesSettingsPage-BAlbMWpw.mjs → ReleasesSettingsPage-DqBxvJ9i.mjs} +2 -2
- package/dist/_chunks/{ReleasesSettingsPage-BAlbMWpw.mjs.map → ReleasesSettingsPage-DqBxvJ9i.mjs.map} +1 -1
- package/dist/_chunks/{ReleasesSettingsPage-xhFyRXCM.js → ReleasesSettingsPage-T5VEAV03.js} +2 -2
- package/dist/_chunks/{ReleasesSettingsPage-xhFyRXCM.js.map → ReleasesSettingsPage-T5VEAV03.js.map} +1 -1
- package/dist/_chunks/{en-CmYoEnA7.js → en-BWPPsSH-.js} +11 -2
- package/dist/_chunks/en-BWPPsSH-.js.map +1 -0
- package/dist/_chunks/{en-D0yVZFqf.mjs → en-D9Q4YW03.mjs} +11 -2
- package/dist/_chunks/en-D9Q4YW03.mjs.map +1 -0
- package/dist/_chunks/{index-CCFFG3Zs.mjs → index-CK9G80CL.mjs} +22 -7
- package/dist/_chunks/index-CK9G80CL.mjs.map +1 -0
- package/dist/_chunks/{index-DxkQGp4N.js → index-Cl3tM1YW.js} +22 -7
- package/dist/_chunks/index-Cl3tM1YW.js.map +1 -0
- package/dist/admin/index.js +1 -1
- package/dist/admin/index.mjs +1 -1
- package/dist/admin/src/components/EntryValidationPopover.d.ts +13 -0
- package/dist/server/index.js +83 -9
- package/dist/server/index.js.map +1 -1
- package/dist/server/index.mjs +83 -9
- package/dist/server/index.mjs.map +1 -1
- package/dist/server/src/index.d.ts +2 -6
- package/dist/server/src/index.d.ts.map +1 -1
- package/dist/server/src/middlewares/documents.d.ts.map +1 -1
- package/dist/server/src/migrations/database/5.0.0-document-id-in-actions.d.ts.map +1 -1
- package/dist/server/src/services/index.d.ts +2 -6
- package/dist/server/src/services/index.d.ts.map +1 -1
- package/dist/server/src/services/release-action.d.ts +3 -7
- package/dist/server/src/services/release-action.d.ts.map +1 -1
- package/dist/server/src/utils/index.d.ts.map +1 -1
- package/dist/shared/contracts/release-actions.d.ts +8 -1
- package/dist/shared/contracts/release-actions.d.ts.map +1 -1
- package/package.json +15 -14
- package/dist/_chunks/App-BA2xDdy0.mjs.map +0 -1
- package/dist/_chunks/App-D4Wira1X.js.map +0 -1
- package/dist/_chunks/en-CmYoEnA7.js.map +0 -1
- package/dist/_chunks/en-D0yVZFqf.mjs.map +0 -1
- package/dist/_chunks/index-CCFFG3Zs.mjs.map +0 -1
- package/dist/_chunks/index-DxkQGp4N.js.map +0 -1
package/dist/server/index.mjs
CHANGED
|
@@ -88,6 +88,13 @@ const isEntryValid = async (contentTypeUid, entry, { strapi: strapi2 }) => {
|
|
|
88
88
|
// @ts-expect-error - FIXME: entity here is unnecessary
|
|
89
89
|
entry
|
|
90
90
|
);
|
|
91
|
+
const workflowsService = strapi2.plugin("review-workflows").service("workflows");
|
|
92
|
+
const workflow = await workflowsService.getAssignedWorkflow(contentTypeUid, {
|
|
93
|
+
populate: "stageRequiredToPublish"
|
|
94
|
+
});
|
|
95
|
+
if (workflow?.stageRequiredToPublish) {
|
|
96
|
+
return entry.strapi_stage.id === workflow.stageRequiredToPublish.id;
|
|
97
|
+
}
|
|
91
98
|
return true;
|
|
92
99
|
} catch {
|
|
93
100
|
return false;
|
|
@@ -101,7 +108,11 @@ const getEntry = async ({
|
|
|
101
108
|
status = "draft"
|
|
102
109
|
}, { strapi: strapi2 }) => {
|
|
103
110
|
if (documentId) {
|
|
104
|
-
|
|
111
|
+
const entry = await strapi2.documents(contentType).findOne({ documentId, locale, populate, status });
|
|
112
|
+
if (status === "published" && !entry) {
|
|
113
|
+
return strapi2.documents(contentType).findOne({ documentId, locale, populate, status: "draft" });
|
|
114
|
+
}
|
|
115
|
+
return entry;
|
|
105
116
|
}
|
|
106
117
|
return strapi2.documents(contentType).findFirst({ locale, populate, status });
|
|
107
118
|
};
|
|
@@ -306,6 +317,10 @@ async function enableContentTypeLocalized({ oldContentTypes, contentTypes: conte
|
|
|
306
317
|
const addEntryDocumentToReleaseActions = {
|
|
307
318
|
name: "content-releases::5.0.0-add-entry-document-id-to-release-actions",
|
|
308
319
|
async up(trx, db) {
|
|
320
|
+
const hasTable = await trx.schema.hasTable("strapi_release_actions");
|
|
321
|
+
if (!hasTable) {
|
|
322
|
+
return;
|
|
323
|
+
}
|
|
309
324
|
const hasPolymorphicColumn = await trx.schema.hasColumn("strapi_release_actions", "target_id");
|
|
310
325
|
if (hasPolymorphicColumn) {
|
|
311
326
|
const hasEntryDocumentIdColumn = await trx.schema.hasColumn(
|
|
@@ -347,6 +362,7 @@ const register = async ({ strapi: strapi2 }) => {
|
|
|
347
362
|
const updateActionsStatusAndUpdateReleaseStatus = async (contentType, entry) => {
|
|
348
363
|
const releases = await strapi.db.query(RELEASE_MODEL_UID).findMany({
|
|
349
364
|
where: {
|
|
365
|
+
releasedAt: null,
|
|
350
366
|
actions: {
|
|
351
367
|
contentType,
|
|
352
368
|
entryDocumentId: entry.documentId,
|
|
@@ -355,7 +371,7 @@ const updateActionsStatusAndUpdateReleaseStatus = async (contentType, entry) =>
|
|
|
355
371
|
}
|
|
356
372
|
});
|
|
357
373
|
const entryStatus = await isEntryValid(contentType, entry, { strapi });
|
|
358
|
-
await strapi.db.query(RELEASE_ACTION_MODEL_UID).
|
|
374
|
+
await strapi.db.query(RELEASE_ACTION_MODEL_UID).updateMany({
|
|
359
375
|
where: {
|
|
360
376
|
contentType,
|
|
361
377
|
entryDocumentId: entry.documentId,
|
|
@@ -459,8 +475,8 @@ const bootstrap = async ({ strapi: strapi2 }) => {
|
|
|
459
475
|
const { where } = event.params;
|
|
460
476
|
deleteReleasesActionsAndUpdateReleaseStatus({
|
|
461
477
|
contentType: model.uid,
|
|
462
|
-
locale: where
|
|
463
|
-
...where
|
|
478
|
+
locale: where?.locale ?? null,
|
|
479
|
+
...where?.documentId && { entryDocumentId: where.documentId }
|
|
464
480
|
});
|
|
465
481
|
}
|
|
466
482
|
} catch (error) {
|
|
@@ -1015,16 +1031,26 @@ const createReleaseActionService = ({ strapi: strapi2 }) => {
|
|
|
1015
1031
|
const groupName = getGroupName(groupBy);
|
|
1016
1032
|
return _.groupBy(groupName)(formattedData);
|
|
1017
1033
|
},
|
|
1018
|
-
getContentTypeModelsFromActions(actions) {
|
|
1034
|
+
async getContentTypeModelsFromActions(actions) {
|
|
1019
1035
|
const contentTypeUids = actions.reduce((acc, action) => {
|
|
1020
1036
|
if (!acc.includes(action.contentType)) {
|
|
1021
1037
|
acc.push(action.contentType);
|
|
1022
1038
|
}
|
|
1023
1039
|
return acc;
|
|
1024
1040
|
}, []);
|
|
1025
|
-
const
|
|
1026
|
-
|
|
1027
|
-
|
|
1041
|
+
const workflowsService = strapi2.plugin("review-workflows").service("workflows");
|
|
1042
|
+
const contentTypeModelsMap = await async.reduce(contentTypeUids)(
|
|
1043
|
+
async (accPromise, contentTypeUid) => {
|
|
1044
|
+
const acc = await accPromise;
|
|
1045
|
+
const contentTypeModel = strapi2.getModel(contentTypeUid);
|
|
1046
|
+
const workflow = await workflowsService.getAssignedWorkflow(contentTypeUid, {
|
|
1047
|
+
populate: "stageRequiredToPublish"
|
|
1048
|
+
});
|
|
1049
|
+
acc[contentTypeUid] = {
|
|
1050
|
+
...contentTypeModel,
|
|
1051
|
+
hasReviewWorkflow: !!workflow,
|
|
1052
|
+
stageRequiredToPublish: workflow?.stageRequiredToPublish
|
|
1053
|
+
};
|
|
1028
1054
|
return acc;
|
|
1029
1055
|
},
|
|
1030
1056
|
{}
|
|
@@ -1099,6 +1125,54 @@ const createReleaseActionService = ({ strapi: strapi2 }) => {
|
|
|
1099
1125
|
}
|
|
1100
1126
|
getService("release", { strapi: strapi2 }).updateReleaseStatus(releaseId);
|
|
1101
1127
|
return deletedAction;
|
|
1128
|
+
},
|
|
1129
|
+
async validateActionsByContentTypes(contentTypeUids) {
|
|
1130
|
+
const actions = await strapi2.db.query(RELEASE_ACTION_MODEL_UID).findMany({
|
|
1131
|
+
where: {
|
|
1132
|
+
contentType: {
|
|
1133
|
+
$in: contentTypeUids
|
|
1134
|
+
},
|
|
1135
|
+
// We only want to validate actions that are going to be published
|
|
1136
|
+
type: "publish",
|
|
1137
|
+
release: {
|
|
1138
|
+
releasedAt: {
|
|
1139
|
+
$null: true
|
|
1140
|
+
}
|
|
1141
|
+
}
|
|
1142
|
+
},
|
|
1143
|
+
populate: { release: true }
|
|
1144
|
+
});
|
|
1145
|
+
const releasesUpdated = [];
|
|
1146
|
+
await async.map(actions, async (action) => {
|
|
1147
|
+
const isValid = await getDraftEntryValidStatus(
|
|
1148
|
+
{
|
|
1149
|
+
contentType: action.contentType,
|
|
1150
|
+
documentId: action.entryDocumentId,
|
|
1151
|
+
locale: action.locale
|
|
1152
|
+
},
|
|
1153
|
+
{ strapi: strapi2 }
|
|
1154
|
+
);
|
|
1155
|
+
await strapi2.db.query(RELEASE_ACTION_MODEL_UID).update({
|
|
1156
|
+
where: {
|
|
1157
|
+
id: action.id
|
|
1158
|
+
},
|
|
1159
|
+
data: {
|
|
1160
|
+
isEntryValid: isValid
|
|
1161
|
+
}
|
|
1162
|
+
});
|
|
1163
|
+
if (!releasesUpdated.includes(action.release.id)) {
|
|
1164
|
+
releasesUpdated.push(action.release.id);
|
|
1165
|
+
}
|
|
1166
|
+
return {
|
|
1167
|
+
id: action.id,
|
|
1168
|
+
isEntryValid: isValid
|
|
1169
|
+
};
|
|
1170
|
+
});
|
|
1171
|
+
if (releasesUpdated.length > 0) {
|
|
1172
|
+
await async.map(releasesUpdated, async (releaseId) => {
|
|
1173
|
+
await getService("release", { strapi: strapi2 }).updateReleaseStatus(releaseId);
|
|
1174
|
+
});
|
|
1175
|
+
}
|
|
1102
1176
|
}
|
|
1103
1177
|
};
|
|
1104
1178
|
};
|
|
@@ -1617,7 +1691,7 @@ const releaseActionController = {
|
|
|
1617
1691
|
entry: action.entry ? await contentTypeOutputSanitizers[action.contentType](action.entry) : {}
|
|
1618
1692
|
}));
|
|
1619
1693
|
const groupedData = await releaseActionService.groupActions(sanitizedResults, query.sort);
|
|
1620
|
-
const contentTypes2 = releaseActionService.getContentTypeModelsFromActions(results);
|
|
1694
|
+
const contentTypes2 = await releaseActionService.getContentTypeModelsFromActions(results);
|
|
1621
1695
|
const releaseService = getService("release", { strapi });
|
|
1622
1696
|
const components = await releaseService.getAllComponents();
|
|
1623
1697
|
ctx.body = {
|