@strapi/content-releases 5.0.0-rc.3 → 5.0.0-rc.30
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-UQxgTJY5.mjs → App-BA2xDdy0.mjs} +43 -20
- package/dist/_chunks/App-BA2xDdy0.mjs.map +1 -0
- package/dist/_chunks/{App-D-lWdVb2.js → App-D4Wira1X.js} +42 -19
- package/dist/_chunks/App-D4Wira1X.js.map +1 -0
- package/dist/_chunks/{ReleasesSettingsPage-CuUXvABk.mjs → ReleasesSettingsPage-BAlbMWpw.mjs} +4 -4
- package/dist/_chunks/ReleasesSettingsPage-BAlbMWpw.mjs.map +1 -0
- package/dist/_chunks/{ReleasesSettingsPage-xfAoY8N3.js → ReleasesSettingsPage-xhFyRXCM.js} +4 -4
- package/dist/_chunks/ReleasesSettingsPage-xhFyRXCM.js.map +1 -0
- package/dist/_chunks/{en-BCDLTJn3.js → en-CmYoEnA7.js} +2 -1
- package/dist/_chunks/en-CmYoEnA7.js.map +1 -0
- package/dist/_chunks/{en-CGXIF4vQ.mjs → en-D0yVZFqf.mjs} +2 -1
- package/dist/_chunks/en-D0yVZFqf.mjs.map +1 -0
- package/dist/_chunks/{index-b3Ej95H7.mjs → index-CCFFG3Zs.mjs} +289 -23
- package/dist/_chunks/index-CCFFG3Zs.mjs.map +1 -0
- package/dist/_chunks/{index-jnv9zdcE.js → index-DxkQGp4N.js} +286 -20
- package/dist/_chunks/index-DxkQGp4N.js.map +1 -0
- package/dist/_chunks/{schemas-z5zp-_Gd.js → schemas-BE1LxE9J.js} +2 -2
- package/dist/_chunks/schemas-BE1LxE9J.js.map +1 -0
- package/dist/_chunks/{schemas-63pFihNF.mjs → schemas-DdA2ic2U.mjs} +2 -2
- package/dist/_chunks/schemas-DdA2ic2U.mjs.map +1 -0
- package/dist/admin/index.js +1 -1
- package/dist/admin/index.mjs +1 -1
- package/dist/admin/src/components/ReleaseListCell.d.ts +28 -0
- package/dist/admin/src/services/release.d.ts +34 -32
- package/dist/server/index.js +108 -79
- package/dist/server/index.js.map +1 -1
- package/dist/server/index.mjs +108 -79
- package/dist/server/index.mjs.map +1 -1
- package/dist/server/src/controllers/index.d.ts +2 -0
- package/dist/server/src/controllers/index.d.ts.map +1 -1
- package/dist/server/src/controllers/release-action.d.ts +1 -0
- package/dist/server/src/controllers/release-action.d.ts.map +1 -1
- package/dist/server/src/controllers/release.d.ts +1 -0
- package/dist/server/src/controllers/release.d.ts.map +1 -1
- package/dist/server/src/index.d.ts +4 -0
- package/dist/server/src/index.d.ts.map +1 -1
- package/dist/server/src/routes/release-action.d.ts.map +1 -1
- package/dist/server/src/routes/release.d.ts.map +1 -1
- package/dist/server/src/services/index.d.ts +2 -0
- package/dist/server/src/services/index.d.ts.map +1 -1
- package/dist/server/src/services/release-action.d.ts +3 -1
- package/dist/server/src/services/release-action.d.ts.map +1 -1
- package/dist/shared/contracts/release-actions.d.ts +3 -5
- package/dist/shared/contracts/release-actions.d.ts.map +1 -1
- package/dist/shared/contracts/releases.d.ts +3 -2
- package/dist/shared/contracts/releases.d.ts.map +1 -1
- package/package.json +12 -11
- package/dist/_chunks/App-D-lWdVb2.js.map +0 -1
- package/dist/_chunks/App-UQxgTJY5.mjs.map +0 -1
- package/dist/_chunks/ReleasesSettingsPage-CuUXvABk.mjs.map +0 -1
- package/dist/_chunks/ReleasesSettingsPage-xfAoY8N3.js.map +0 -1
- package/dist/_chunks/en-BCDLTJn3.js.map +0 -1
- package/dist/_chunks/en-CGXIF4vQ.mjs.map +0 -1
- package/dist/_chunks/index-b3Ej95H7.mjs.map +0 -1
- package/dist/_chunks/index-jnv9zdcE.js.map +0 -1
- package/dist/_chunks/schemas-63pFihNF.mjs.map +0 -1
- package/dist/_chunks/schemas-z5zp-_Gd.js.map +0 -1
- package/strapi-server.js +0 -3
package/dist/server/index.mjs
CHANGED
|
@@ -906,7 +906,7 @@ const createReleaseActionService = ({ strapi: strapi2 }) => {
|
|
|
906
906
|
return contentTypesData;
|
|
907
907
|
};
|
|
908
908
|
return {
|
|
909
|
-
async create(releaseId, action) {
|
|
909
|
+
async create(releaseId, action, { disableUpdateReleaseStatus = false } = {}) {
|
|
910
910
|
const { validateEntryData, validateUniqueEntry } = getService("release-validation", {
|
|
911
911
|
strapi: strapi2
|
|
912
912
|
});
|
|
@@ -914,6 +914,14 @@ const createReleaseActionService = ({ strapi: strapi2 }) => {
|
|
|
914
914
|
validateEntryData(action.contentType, action.entryDocumentId),
|
|
915
915
|
validateUniqueEntry(releaseId, action)
|
|
916
916
|
]);
|
|
917
|
+
const model = strapi2.contentType(action.contentType);
|
|
918
|
+
if (model.kind === "singleType") {
|
|
919
|
+
const document = await strapi2.db.query(model.uid).findOne({ select: ["documentId"] });
|
|
920
|
+
if (!document) {
|
|
921
|
+
throw new errors.NotFoundError(`No entry found for contentType ${action.contentType}`);
|
|
922
|
+
}
|
|
923
|
+
action.entryDocumentId = document.documentId;
|
|
924
|
+
}
|
|
917
925
|
const release2 = await strapi2.db.query(RELEASE_MODEL_UID).findOne({ where: { id: releaseId } });
|
|
918
926
|
if (!release2) {
|
|
919
927
|
throw new errors.NotFoundError(`No release found for id ${releaseId}`);
|
|
@@ -939,7 +947,9 @@ const createReleaseActionService = ({ strapi: strapi2 }) => {
|
|
|
939
947
|
},
|
|
940
948
|
populate: { release: { select: ["id"] } }
|
|
941
949
|
});
|
|
942
|
-
|
|
950
|
+
if (!disableUpdateReleaseStatus) {
|
|
951
|
+
getService("release", { strapi: strapi2 }).updateReleaseStatus(release2.id);
|
|
952
|
+
}
|
|
943
953
|
return releaseAction2;
|
|
944
954
|
},
|
|
945
955
|
async findPage(releaseId, query) {
|
|
@@ -1042,7 +1052,7 @@ const createReleaseActionService = ({ strapi: strapi2 }) => {
|
|
|
1042
1052
|
`Action with id ${actionId} not found in release with id ${releaseId} or it is already published`
|
|
1043
1053
|
);
|
|
1044
1054
|
}
|
|
1045
|
-
const actionStatus = update.type === "publish" ? getDraftEntryValidStatus(
|
|
1055
|
+
const actionStatus = update.type === "publish" ? await getDraftEntryValidStatus(
|
|
1046
1056
|
{
|
|
1047
1057
|
contentType: action.contentType,
|
|
1048
1058
|
documentId: action.entryDocumentId,
|
|
@@ -1112,11 +1122,11 @@ const createReleaseValidationService = ({ strapi: strapi2 }) => ({
|
|
|
1112
1122
|
throw new errors.NotFoundError(`No release found for id ${releaseId}`);
|
|
1113
1123
|
}
|
|
1114
1124
|
const isEntryInRelease = release2.actions.some(
|
|
1115
|
-
(action) =>
|
|
1125
|
+
(action) => action.entryDocumentId === releaseActionArgs.entryDocumentId && action.contentType === releaseActionArgs.contentType && (releaseActionArgs.locale ? action.locale === releaseActionArgs.locale : true)
|
|
1116
1126
|
);
|
|
1117
1127
|
if (isEntryInRelease) {
|
|
1118
1128
|
throw new AlreadyOnReleaseError(
|
|
1119
|
-
`Entry with documentId ${releaseActionArgs.entryDocumentId}
|
|
1129
|
+
`Entry with documentId ${releaseActionArgs.entryDocumentId}${releaseActionArgs.locale ? `( ${releaseActionArgs.locale})` : ""} and contentType ${releaseActionArgs.contentType} already exists in release with id ${releaseId}`
|
|
1120
1130
|
);
|
|
1121
1131
|
}
|
|
1122
1132
|
},
|
|
@@ -1283,7 +1293,15 @@ const releaseController = {
|
|
|
1283
1293
|
const releaseService = getService("release", { strapi });
|
|
1284
1294
|
const query = await permissionsManager.sanitizeQuery(ctx.query);
|
|
1285
1295
|
await validatefindByDocumentAttachedParams(query);
|
|
1286
|
-
const
|
|
1296
|
+
const model = strapi.getModel(query.contentType);
|
|
1297
|
+
if (model.kind && model.kind === "singleType") {
|
|
1298
|
+
const document = await strapi.db.query(model.uid).findOne({ select: ["documentId"] });
|
|
1299
|
+
if (!document) {
|
|
1300
|
+
throw new errors.NotFoundError(`No entry found for contentType ${query.contentType}`);
|
|
1301
|
+
}
|
|
1302
|
+
query.entryDocumentId = document.documentId;
|
|
1303
|
+
}
|
|
1304
|
+
const { contentType, hasEntryAttached, entryDocumentId, locale } = query;
|
|
1287
1305
|
const isEntryAttached = typeof hasEntryAttached === "string" ? Boolean(JSON.parse(hasEntryAttached)) : false;
|
|
1288
1306
|
if (isEntryAttached) {
|
|
1289
1307
|
const releases = await releaseService.findMany({
|
|
@@ -1297,7 +1315,12 @@ const releaseController = {
|
|
|
1297
1315
|
},
|
|
1298
1316
|
populate: {
|
|
1299
1317
|
actions: {
|
|
1300
|
-
fields: ["type"]
|
|
1318
|
+
fields: ["type"],
|
|
1319
|
+
filters: {
|
|
1320
|
+
contentType,
|
|
1321
|
+
entryDocumentId: entryDocumentId ?? null,
|
|
1322
|
+
locale: locale ?? null
|
|
1323
|
+
}
|
|
1301
1324
|
}
|
|
1302
1325
|
}
|
|
1303
1326
|
});
|
|
@@ -1385,43 +1408,50 @@ const releaseController = {
|
|
|
1385
1408
|
};
|
|
1386
1409
|
ctx.body = { data };
|
|
1387
1410
|
},
|
|
1388
|
-
|
|
1389
|
-
|
|
1390
|
-
|
|
1391
|
-
|
|
1392
|
-
|
|
1393
|
-
|
|
1411
|
+
async mapEntriesToReleases(ctx) {
|
|
1412
|
+
const { contentTypeUid, documentIds, locale } = ctx.query;
|
|
1413
|
+
if (!contentTypeUid || !documentIds) {
|
|
1414
|
+
throw new errors.ValidationError("Missing required query parameters");
|
|
1415
|
+
}
|
|
1416
|
+
const releaseService = getService("release", { strapi });
|
|
1417
|
+
const releasesWithActions = await releaseService.findMany({
|
|
1418
|
+
where: {
|
|
1419
|
+
releasedAt: null,
|
|
1420
|
+
actions: {
|
|
1421
|
+
contentType: contentTypeUid,
|
|
1422
|
+
entryDocumentId: {
|
|
1423
|
+
$in: documentIds
|
|
1424
|
+
},
|
|
1425
|
+
locale
|
|
1426
|
+
}
|
|
1427
|
+
},
|
|
1428
|
+
populate: {
|
|
1429
|
+
actions: true
|
|
1394
1430
|
}
|
|
1395
|
-
|
|
1396
|
-
|
|
1397
|
-
|
|
1398
|
-
|
|
1399
|
-
|
|
1400
|
-
|
|
1401
|
-
|
|
1402
|
-
|
|
1403
|
-
|
|
1404
|
-
|
|
1405
|
-
|
|
1406
|
-
|
|
1407
|
-
|
|
1408
|
-
|
|
1409
|
-
|
|
1410
|
-
|
|
1411
|
-
|
|
1412
|
-
|
|
1413
|
-
|
|
1414
|
-
|
|
1415
|
-
|
|
1416
|
-
|
|
1417
|
-
|
|
1418
|
-
|
|
1419
|
-
|
|
1420
|
-
ctx.body = {
|
|
1421
|
-
data: mappedEntriesInReleases,
|
|
1422
|
-
};
|
|
1423
|
-
},
|
|
1424
|
-
*/
|
|
1431
|
+
});
|
|
1432
|
+
const mappedEntriesInReleases = releasesWithActions.reduce(
|
|
1433
|
+
(acc, release2) => {
|
|
1434
|
+
release2.actions.forEach((action) => {
|
|
1435
|
+
if (action.contentType !== contentTypeUid) {
|
|
1436
|
+
return;
|
|
1437
|
+
}
|
|
1438
|
+
if (locale && action.locale !== locale) {
|
|
1439
|
+
return;
|
|
1440
|
+
}
|
|
1441
|
+
if (!acc[action.entryDocumentId]) {
|
|
1442
|
+
acc[action.entryDocumentId] = [{ id: release2.id, name: release2.name }];
|
|
1443
|
+
} else {
|
|
1444
|
+
acc[action.entryDocumentId].push({ id: release2.id, name: release2.name });
|
|
1445
|
+
}
|
|
1446
|
+
});
|
|
1447
|
+
return acc;
|
|
1448
|
+
},
|
|
1449
|
+
{}
|
|
1450
|
+
);
|
|
1451
|
+
ctx.body = {
|
|
1452
|
+
data: mappedEntriesInReleases
|
|
1453
|
+
};
|
|
1454
|
+
},
|
|
1425
1455
|
async create(ctx) {
|
|
1426
1456
|
const user = ctx.state.user;
|
|
1427
1457
|
const releaseArgs = ctx.request.body;
|
|
@@ -1514,22 +1544,23 @@ const releaseActionController = {
|
|
|
1514
1544
|
data: releaseAction2
|
|
1515
1545
|
});
|
|
1516
1546
|
},
|
|
1517
|
-
|
|
1518
|
-
|
|
1519
|
-
const
|
|
1520
|
-
const releaseActionsArgs = ctx.request.body as CreateManyReleaseActions.Request['body'];
|
|
1547
|
+
async createMany(ctx) {
|
|
1548
|
+
const releaseId = ctx.params.releaseId;
|
|
1549
|
+
const releaseActionsArgs = ctx.request.body;
|
|
1521
1550
|
await Promise.all(
|
|
1522
1551
|
releaseActionsArgs.map((releaseActionArgs) => validateReleaseAction(releaseActionArgs))
|
|
1523
1552
|
);
|
|
1524
|
-
const releaseActionService = getService(
|
|
1553
|
+
const releaseActionService = getService("release-action", { strapi });
|
|
1554
|
+
const releaseService = getService("release", { strapi });
|
|
1525
1555
|
const releaseActions = await strapi.db.transaction(async () => {
|
|
1526
|
-
const
|
|
1556
|
+
const releaseActions2 = await Promise.all(
|
|
1527
1557
|
releaseActionsArgs.map(async (releaseActionArgs) => {
|
|
1528
1558
|
try {
|
|
1529
|
-
const action = await releaseActionService.create(releaseId, releaseActionArgs
|
|
1559
|
+
const action = await releaseActionService.create(releaseId, releaseActionArgs, {
|
|
1560
|
+
disableUpdateReleaseStatus: true
|
|
1561
|
+
});
|
|
1530
1562
|
return action;
|
|
1531
1563
|
} catch (error) {
|
|
1532
|
-
// If the entry is already in the release, we don't want to throw an error, so we catch and ignore it
|
|
1533
1564
|
if (error instanceof AlreadyOnReleaseError) {
|
|
1534
1565
|
return null;
|
|
1535
1566
|
}
|
|
@@ -1537,18 +1568,20 @@ const releaseActionController = {
|
|
|
1537
1568
|
}
|
|
1538
1569
|
})
|
|
1539
1570
|
);
|
|
1540
|
-
return
|
|
1571
|
+
return releaseActions2;
|
|
1541
1572
|
});
|
|
1542
1573
|
const newReleaseActions = releaseActions.filter((action) => action !== null);
|
|
1574
|
+
if (newReleaseActions.length > 0) {
|
|
1575
|
+
releaseService.updateReleaseStatus(releaseId);
|
|
1576
|
+
}
|
|
1543
1577
|
ctx.created({
|
|
1544
1578
|
data: newReleaseActions,
|
|
1545
1579
|
meta: {
|
|
1546
1580
|
entriesAlreadyInRelease: releaseActions.length - newReleaseActions.length,
|
|
1547
|
-
totalEntries: releaseActions.length
|
|
1548
|
-
}
|
|
1581
|
+
totalEntries: releaseActions.length
|
|
1582
|
+
}
|
|
1549
1583
|
});
|
|
1550
1584
|
},
|
|
1551
|
-
*/
|
|
1552
1585
|
async findMany(ctx) {
|
|
1553
1586
|
const releaseId = ctx.params.releaseId;
|
|
1554
1587
|
const permissionsManager = strapi.service("admin::permission").createPermissionsManager({
|
|
@@ -1647,24 +1680,22 @@ const controllers = {
|
|
|
1647
1680
|
const release = {
|
|
1648
1681
|
type: "admin",
|
|
1649
1682
|
routes: [
|
|
1650
|
-
/*
|
|
1651
1683
|
{
|
|
1652
|
-
method:
|
|
1653
|
-
path:
|
|
1654
|
-
handler:
|
|
1684
|
+
method: "GET",
|
|
1685
|
+
path: "/mapEntriesToReleases",
|
|
1686
|
+
handler: "release.mapEntriesToReleases",
|
|
1655
1687
|
config: {
|
|
1656
1688
|
policies: [
|
|
1657
|
-
|
|
1689
|
+
"admin::isAuthenticatedAdmin",
|
|
1658
1690
|
{
|
|
1659
|
-
name:
|
|
1691
|
+
name: "admin::hasPermissions",
|
|
1660
1692
|
config: {
|
|
1661
|
-
actions: [
|
|
1662
|
-
}
|
|
1663
|
-
}
|
|
1664
|
-
]
|
|
1665
|
-
}
|
|
1693
|
+
actions: ["plugin::content-releases.read"]
|
|
1694
|
+
}
|
|
1695
|
+
}
|
|
1696
|
+
]
|
|
1697
|
+
}
|
|
1666
1698
|
},
|
|
1667
|
-
*/
|
|
1668
1699
|
{
|
|
1669
1700
|
method: "GET",
|
|
1670
1701
|
path: "/getByDocumentAttached",
|
|
@@ -1798,24 +1829,22 @@ const releaseAction = {
|
|
|
1798
1829
|
]
|
|
1799
1830
|
}
|
|
1800
1831
|
},
|
|
1801
|
-
/*
|
|
1802
1832
|
{
|
|
1803
|
-
method:
|
|
1804
|
-
path:
|
|
1805
|
-
handler:
|
|
1833
|
+
method: "POST",
|
|
1834
|
+
path: "/:releaseId/actions/bulk",
|
|
1835
|
+
handler: "release-action.createMany",
|
|
1806
1836
|
config: {
|
|
1807
1837
|
policies: [
|
|
1808
|
-
|
|
1838
|
+
"admin::isAuthenticatedAdmin",
|
|
1809
1839
|
{
|
|
1810
|
-
name:
|
|
1840
|
+
name: "admin::hasPermissions",
|
|
1811
1841
|
config: {
|
|
1812
|
-
actions: [
|
|
1813
|
-
}
|
|
1814
|
-
}
|
|
1815
|
-
]
|
|
1816
|
-
}
|
|
1842
|
+
actions: ["plugin::content-releases.create-action"]
|
|
1843
|
+
}
|
|
1844
|
+
}
|
|
1845
|
+
]
|
|
1846
|
+
}
|
|
1817
1847
|
},
|
|
1818
|
-
*/
|
|
1819
1848
|
{
|
|
1820
1849
|
method: "GET",
|
|
1821
1850
|
path: "/:releaseId/actions",
|