@strapi/content-releases 5.1.1 → 5.3.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/_chunks/{App-Cne--1Z8.mjs → App-BX6_LcmS.mjs} +297 -112
- package/dist/_chunks/App-BX6_LcmS.mjs.map +1 -0
- package/dist/_chunks/{App-BKB1esYS.js → App-DITZWWqI.js} +337 -152
- package/dist/_chunks/App-DITZWWqI.js.map +1 -0
- package/dist/_chunks/{ReleasesSettingsPage-C1WwGWIH.mjs → ReleasesSettingsPage-BMgLwqci.mjs} +2 -2
- package/dist/_chunks/{ReleasesSettingsPage-C1WwGWIH.mjs.map → ReleasesSettingsPage-BMgLwqci.mjs.map} +1 -1
- package/dist/_chunks/{ReleasesSettingsPage-kuXIwpWp.js → ReleasesSettingsPage-DZcRvN_O.js} +2 -2
- package/dist/_chunks/{ReleasesSettingsPage-kuXIwpWp.js.map → ReleasesSettingsPage-DZcRvN_O.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-Cy7qwpaU.mjs → index-CBsSVKTv.mjs} +22 -4
- package/dist/_chunks/index-CBsSVKTv.mjs.map +1 -0
- package/dist/_chunks/{index-5Odi61vw.js → index-TfMp19WL.js} +22 -4
- package/dist/_chunks/index-TfMp19WL.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 +79 -9
- package/dist/server/index.js.map +1 -1
- package/dist/server/index.mjs +79 -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/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 +11 -10
- package/dist/_chunks/App-BKB1esYS.js.map +0 -1
- package/dist/_chunks/App-Cne--1Z8.mjs.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-5Odi61vw.js.map +0 -1
- package/dist/_chunks/index-Cy7qwpaU.mjs.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
|
};
|
|
@@ -351,6 +362,7 @@ const register = async ({ strapi: strapi2 }) => {
|
|
|
351
362
|
const updateActionsStatusAndUpdateReleaseStatus = async (contentType, entry) => {
|
|
352
363
|
const releases = await strapi.db.query(RELEASE_MODEL_UID).findMany({
|
|
353
364
|
where: {
|
|
365
|
+
releasedAt: null,
|
|
354
366
|
actions: {
|
|
355
367
|
contentType,
|
|
356
368
|
entryDocumentId: entry.documentId,
|
|
@@ -359,7 +371,7 @@ const updateActionsStatusAndUpdateReleaseStatus = async (contentType, entry) =>
|
|
|
359
371
|
}
|
|
360
372
|
});
|
|
361
373
|
const entryStatus = await isEntryValid(contentType, entry, { strapi });
|
|
362
|
-
await strapi.db.query(RELEASE_ACTION_MODEL_UID).
|
|
374
|
+
await strapi.db.query(RELEASE_ACTION_MODEL_UID).updateMany({
|
|
363
375
|
where: {
|
|
364
376
|
contentType,
|
|
365
377
|
entryDocumentId: entry.documentId,
|
|
@@ -463,8 +475,8 @@ const bootstrap = async ({ strapi: strapi2 }) => {
|
|
|
463
475
|
const { where } = event.params;
|
|
464
476
|
deleteReleasesActionsAndUpdateReleaseStatus({
|
|
465
477
|
contentType: model.uid,
|
|
466
|
-
locale: where
|
|
467
|
-
...where
|
|
478
|
+
locale: where?.locale ?? null,
|
|
479
|
+
...where?.documentId && { entryDocumentId: where.documentId }
|
|
468
480
|
});
|
|
469
481
|
}
|
|
470
482
|
} catch (error) {
|
|
@@ -1019,16 +1031,26 @@ const createReleaseActionService = ({ strapi: strapi2 }) => {
|
|
|
1019
1031
|
const groupName = getGroupName(groupBy);
|
|
1020
1032
|
return _.groupBy(groupName)(formattedData);
|
|
1021
1033
|
},
|
|
1022
|
-
getContentTypeModelsFromActions(actions) {
|
|
1034
|
+
async getContentTypeModelsFromActions(actions) {
|
|
1023
1035
|
const contentTypeUids = actions.reduce((acc, action) => {
|
|
1024
1036
|
if (!acc.includes(action.contentType)) {
|
|
1025
1037
|
acc.push(action.contentType);
|
|
1026
1038
|
}
|
|
1027
1039
|
return acc;
|
|
1028
1040
|
}, []);
|
|
1029
|
-
const
|
|
1030
|
-
|
|
1031
|
-
|
|
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
|
+
};
|
|
1032
1054
|
return acc;
|
|
1033
1055
|
},
|
|
1034
1056
|
{}
|
|
@@ -1103,6 +1125,54 @@ const createReleaseActionService = ({ strapi: strapi2 }) => {
|
|
|
1103
1125
|
}
|
|
1104
1126
|
getService("release", { strapi: strapi2 }).updateReleaseStatus(releaseId);
|
|
1105
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
|
+
}
|
|
1106
1176
|
}
|
|
1107
1177
|
};
|
|
1108
1178
|
};
|
|
@@ -1621,7 +1691,7 @@ const releaseActionController = {
|
|
|
1621
1691
|
entry: action.entry ? await contentTypeOutputSanitizers[action.contentType](action.entry) : {}
|
|
1622
1692
|
}));
|
|
1623
1693
|
const groupedData = await releaseActionService.groupActions(sanitizedResults, query.sort);
|
|
1624
|
-
const contentTypes2 = releaseActionService.getContentTypeModelsFromActions(results);
|
|
1694
|
+
const contentTypes2 = await releaseActionService.getContentTypeModelsFromActions(results);
|
|
1625
1695
|
const releaseService = getService("release", { strapi });
|
|
1626
1696
|
const components = await releaseService.getAllComponents();
|
|
1627
1697
|
ctx.body = {
|