@strapi/content-releases 0.0.0-experimental.edc24aaa3bb5a90fa5fd4fee208167dd4e2e38d4 → 0.0.0-experimental.f0d3b2d782e972f1dcb8acf0dce31d4090d1e420
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-D-lWdVb2.js → App-BKB1esYS.js} +42 -19
- package/dist/_chunks/App-BKB1esYS.js.map +1 -0
- package/dist/_chunks/{App-UQxgTJY5.mjs → App-Cne--1Z8.mjs} +43 -20
- package/dist/_chunks/App-Cne--1Z8.mjs.map +1 -0
- package/dist/_chunks/{ReleasesSettingsPage-CuUXvABk.mjs → ReleasesSettingsPage-C1WwGWIH.mjs} +4 -4
- package/dist/_chunks/ReleasesSettingsPage-C1WwGWIH.mjs.map +1 -0
- package/dist/_chunks/{ReleasesSettingsPage-xfAoY8N3.js → ReleasesSettingsPage-kuXIwpWp.js} +4 -4
- package/dist/_chunks/ReleasesSettingsPage-kuXIwpWp.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-jnv9zdcE.js → index-5Odi61vw.js} +286 -23
- package/dist/_chunks/index-5Odi61vw.js.map +1 -0
- package/dist/_chunks/{index-b3Ej95H7.mjs → index-Cy7qwpaU.mjs} +289 -26
- package/dist/_chunks/index-Cy7qwpaU.mjs.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 +112 -79
- package/dist/server/index.js.map +1 -1
- package/dist/server/index.mjs +112 -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/migrations/database/5.0.0-document-id-in-actions.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 +16 -15
- 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.js
CHANGED
|
@@ -329,6 +329,10 @@ async function enableContentTypeLocalized({ oldContentTypes, contentTypes: conte
|
|
|
329
329
|
const addEntryDocumentToReleaseActions = {
|
|
330
330
|
name: "content-releases::5.0.0-add-entry-document-id-to-release-actions",
|
|
331
331
|
async up(trx, db) {
|
|
332
|
+
const hasTable = await trx.schema.hasTable("strapi_release_actions");
|
|
333
|
+
if (!hasTable) {
|
|
334
|
+
return;
|
|
335
|
+
}
|
|
332
336
|
const hasPolymorphicColumn = await trx.schema.hasColumn("strapi_release_actions", "target_id");
|
|
333
337
|
if (hasPolymorphicColumn) {
|
|
334
338
|
const hasEntryDocumentIdColumn = await trx.schema.hasColumn(
|
|
@@ -929,7 +933,7 @@ const createReleaseActionService = ({ strapi: strapi2 }) => {
|
|
|
929
933
|
return contentTypesData;
|
|
930
934
|
};
|
|
931
935
|
return {
|
|
932
|
-
async create(releaseId, action) {
|
|
936
|
+
async create(releaseId, action, { disableUpdateReleaseStatus = false } = {}) {
|
|
933
937
|
const { validateEntryData, validateUniqueEntry } = getService("release-validation", {
|
|
934
938
|
strapi: strapi2
|
|
935
939
|
});
|
|
@@ -937,6 +941,14 @@ const createReleaseActionService = ({ strapi: strapi2 }) => {
|
|
|
937
941
|
validateEntryData(action.contentType, action.entryDocumentId),
|
|
938
942
|
validateUniqueEntry(releaseId, action)
|
|
939
943
|
]);
|
|
944
|
+
const model = strapi2.contentType(action.contentType);
|
|
945
|
+
if (model.kind === "singleType") {
|
|
946
|
+
const document = await strapi2.db.query(model.uid).findOne({ select: ["documentId"] });
|
|
947
|
+
if (!document) {
|
|
948
|
+
throw new utils.errors.NotFoundError(`No entry found for contentType ${action.contentType}`);
|
|
949
|
+
}
|
|
950
|
+
action.entryDocumentId = document.documentId;
|
|
951
|
+
}
|
|
940
952
|
const release2 = await strapi2.db.query(RELEASE_MODEL_UID).findOne({ where: { id: releaseId } });
|
|
941
953
|
if (!release2) {
|
|
942
954
|
throw new utils.errors.NotFoundError(`No release found for id ${releaseId}`);
|
|
@@ -962,7 +974,9 @@ const createReleaseActionService = ({ strapi: strapi2 }) => {
|
|
|
962
974
|
},
|
|
963
975
|
populate: { release: { select: ["id"] } }
|
|
964
976
|
});
|
|
965
|
-
|
|
977
|
+
if (!disableUpdateReleaseStatus) {
|
|
978
|
+
getService("release", { strapi: strapi2 }).updateReleaseStatus(release2.id);
|
|
979
|
+
}
|
|
966
980
|
return releaseAction2;
|
|
967
981
|
},
|
|
968
982
|
async findPage(releaseId, query) {
|
|
@@ -1065,7 +1079,7 @@ const createReleaseActionService = ({ strapi: strapi2 }) => {
|
|
|
1065
1079
|
`Action with id ${actionId} not found in release with id ${releaseId} or it is already published`
|
|
1066
1080
|
);
|
|
1067
1081
|
}
|
|
1068
|
-
const actionStatus = update.type === "publish" ? getDraftEntryValidStatus(
|
|
1082
|
+
const actionStatus = update.type === "publish" ? await getDraftEntryValidStatus(
|
|
1069
1083
|
{
|
|
1070
1084
|
contentType: action.contentType,
|
|
1071
1085
|
documentId: action.entryDocumentId,
|
|
@@ -1135,11 +1149,11 @@ const createReleaseValidationService = ({ strapi: strapi2 }) => ({
|
|
|
1135
1149
|
throw new utils.errors.NotFoundError(`No release found for id ${releaseId}`);
|
|
1136
1150
|
}
|
|
1137
1151
|
const isEntryInRelease = release2.actions.some(
|
|
1138
|
-
(action) =>
|
|
1152
|
+
(action) => action.entryDocumentId === releaseActionArgs.entryDocumentId && action.contentType === releaseActionArgs.contentType && (releaseActionArgs.locale ? action.locale === releaseActionArgs.locale : true)
|
|
1139
1153
|
);
|
|
1140
1154
|
if (isEntryInRelease) {
|
|
1141
1155
|
throw new AlreadyOnReleaseError(
|
|
1142
|
-
`Entry with documentId ${releaseActionArgs.entryDocumentId}
|
|
1156
|
+
`Entry with documentId ${releaseActionArgs.entryDocumentId}${releaseActionArgs.locale ? `( ${releaseActionArgs.locale})` : ""} and contentType ${releaseActionArgs.contentType} already exists in release with id ${releaseId}`
|
|
1143
1157
|
);
|
|
1144
1158
|
}
|
|
1145
1159
|
},
|
|
@@ -1306,7 +1320,15 @@ const releaseController = {
|
|
|
1306
1320
|
const releaseService = getService("release", { strapi });
|
|
1307
1321
|
const query = await permissionsManager.sanitizeQuery(ctx.query);
|
|
1308
1322
|
await validatefindByDocumentAttachedParams(query);
|
|
1309
|
-
const
|
|
1323
|
+
const model = strapi.getModel(query.contentType);
|
|
1324
|
+
if (model.kind && model.kind === "singleType") {
|
|
1325
|
+
const document = await strapi.db.query(model.uid).findOne({ select: ["documentId"] });
|
|
1326
|
+
if (!document) {
|
|
1327
|
+
throw new utils.errors.NotFoundError(`No entry found for contentType ${query.contentType}`);
|
|
1328
|
+
}
|
|
1329
|
+
query.entryDocumentId = document.documentId;
|
|
1330
|
+
}
|
|
1331
|
+
const { contentType, hasEntryAttached, entryDocumentId, locale } = query;
|
|
1310
1332
|
const isEntryAttached = typeof hasEntryAttached === "string" ? Boolean(JSON.parse(hasEntryAttached)) : false;
|
|
1311
1333
|
if (isEntryAttached) {
|
|
1312
1334
|
const releases = await releaseService.findMany({
|
|
@@ -1320,7 +1342,12 @@ const releaseController = {
|
|
|
1320
1342
|
},
|
|
1321
1343
|
populate: {
|
|
1322
1344
|
actions: {
|
|
1323
|
-
fields: ["type"]
|
|
1345
|
+
fields: ["type"],
|
|
1346
|
+
filters: {
|
|
1347
|
+
contentType,
|
|
1348
|
+
entryDocumentId: entryDocumentId ?? null,
|
|
1349
|
+
locale: locale ?? null
|
|
1350
|
+
}
|
|
1324
1351
|
}
|
|
1325
1352
|
}
|
|
1326
1353
|
});
|
|
@@ -1408,43 +1435,50 @@ const releaseController = {
|
|
|
1408
1435
|
};
|
|
1409
1436
|
ctx.body = { data };
|
|
1410
1437
|
},
|
|
1411
|
-
|
|
1412
|
-
|
|
1413
|
-
|
|
1414
|
-
|
|
1415
|
-
|
|
1416
|
-
|
|
1438
|
+
async mapEntriesToReleases(ctx) {
|
|
1439
|
+
const { contentTypeUid, documentIds, locale } = ctx.query;
|
|
1440
|
+
if (!contentTypeUid || !documentIds) {
|
|
1441
|
+
throw new utils.errors.ValidationError("Missing required query parameters");
|
|
1442
|
+
}
|
|
1443
|
+
const releaseService = getService("release", { strapi });
|
|
1444
|
+
const releasesWithActions = await releaseService.findMany({
|
|
1445
|
+
where: {
|
|
1446
|
+
releasedAt: null,
|
|
1447
|
+
actions: {
|
|
1448
|
+
contentType: contentTypeUid,
|
|
1449
|
+
entryDocumentId: {
|
|
1450
|
+
$in: documentIds
|
|
1451
|
+
},
|
|
1452
|
+
locale
|
|
1453
|
+
}
|
|
1454
|
+
},
|
|
1455
|
+
populate: {
|
|
1456
|
+
actions: true
|
|
1417
1457
|
}
|
|
1418
|
-
|
|
1419
|
-
|
|
1420
|
-
|
|
1421
|
-
|
|
1422
|
-
|
|
1423
|
-
|
|
1424
|
-
|
|
1425
|
-
|
|
1426
|
-
|
|
1427
|
-
|
|
1428
|
-
|
|
1429
|
-
|
|
1430
|
-
|
|
1431
|
-
|
|
1432
|
-
|
|
1433
|
-
|
|
1434
|
-
|
|
1435
|
-
|
|
1436
|
-
|
|
1437
|
-
|
|
1438
|
-
|
|
1439
|
-
|
|
1440
|
-
|
|
1441
|
-
|
|
1442
|
-
|
|
1443
|
-
ctx.body = {
|
|
1444
|
-
data: mappedEntriesInReleases,
|
|
1445
|
-
};
|
|
1446
|
-
},
|
|
1447
|
-
*/
|
|
1458
|
+
});
|
|
1459
|
+
const mappedEntriesInReleases = releasesWithActions.reduce(
|
|
1460
|
+
(acc, release2) => {
|
|
1461
|
+
release2.actions.forEach((action) => {
|
|
1462
|
+
if (action.contentType !== contentTypeUid) {
|
|
1463
|
+
return;
|
|
1464
|
+
}
|
|
1465
|
+
if (locale && action.locale !== locale) {
|
|
1466
|
+
return;
|
|
1467
|
+
}
|
|
1468
|
+
if (!acc[action.entryDocumentId]) {
|
|
1469
|
+
acc[action.entryDocumentId] = [{ id: release2.id, name: release2.name }];
|
|
1470
|
+
} else {
|
|
1471
|
+
acc[action.entryDocumentId].push({ id: release2.id, name: release2.name });
|
|
1472
|
+
}
|
|
1473
|
+
});
|
|
1474
|
+
return acc;
|
|
1475
|
+
},
|
|
1476
|
+
{}
|
|
1477
|
+
);
|
|
1478
|
+
ctx.body = {
|
|
1479
|
+
data: mappedEntriesInReleases
|
|
1480
|
+
};
|
|
1481
|
+
},
|
|
1448
1482
|
async create(ctx) {
|
|
1449
1483
|
const user = ctx.state.user;
|
|
1450
1484
|
const releaseArgs = ctx.request.body;
|
|
@@ -1537,22 +1571,23 @@ const releaseActionController = {
|
|
|
1537
1571
|
data: releaseAction2
|
|
1538
1572
|
});
|
|
1539
1573
|
},
|
|
1540
|
-
|
|
1541
|
-
|
|
1542
|
-
const
|
|
1543
|
-
const releaseActionsArgs = ctx.request.body as CreateManyReleaseActions.Request['body'];
|
|
1574
|
+
async createMany(ctx) {
|
|
1575
|
+
const releaseId = ctx.params.releaseId;
|
|
1576
|
+
const releaseActionsArgs = ctx.request.body;
|
|
1544
1577
|
await Promise.all(
|
|
1545
1578
|
releaseActionsArgs.map((releaseActionArgs) => validateReleaseAction(releaseActionArgs))
|
|
1546
1579
|
);
|
|
1547
|
-
const releaseActionService = getService(
|
|
1580
|
+
const releaseActionService = getService("release-action", { strapi });
|
|
1581
|
+
const releaseService = getService("release", { strapi });
|
|
1548
1582
|
const releaseActions = await strapi.db.transaction(async () => {
|
|
1549
|
-
const
|
|
1583
|
+
const releaseActions2 = await Promise.all(
|
|
1550
1584
|
releaseActionsArgs.map(async (releaseActionArgs) => {
|
|
1551
1585
|
try {
|
|
1552
|
-
const action = await releaseActionService.create(releaseId, releaseActionArgs
|
|
1586
|
+
const action = await releaseActionService.create(releaseId, releaseActionArgs, {
|
|
1587
|
+
disableUpdateReleaseStatus: true
|
|
1588
|
+
});
|
|
1553
1589
|
return action;
|
|
1554
1590
|
} catch (error) {
|
|
1555
|
-
// If the entry is already in the release, we don't want to throw an error, so we catch and ignore it
|
|
1556
1591
|
if (error instanceof AlreadyOnReleaseError) {
|
|
1557
1592
|
return null;
|
|
1558
1593
|
}
|
|
@@ -1560,18 +1595,20 @@ const releaseActionController = {
|
|
|
1560
1595
|
}
|
|
1561
1596
|
})
|
|
1562
1597
|
);
|
|
1563
|
-
return
|
|
1598
|
+
return releaseActions2;
|
|
1564
1599
|
});
|
|
1565
1600
|
const newReleaseActions = releaseActions.filter((action) => action !== null);
|
|
1601
|
+
if (newReleaseActions.length > 0) {
|
|
1602
|
+
releaseService.updateReleaseStatus(releaseId);
|
|
1603
|
+
}
|
|
1566
1604
|
ctx.created({
|
|
1567
1605
|
data: newReleaseActions,
|
|
1568
1606
|
meta: {
|
|
1569
1607
|
entriesAlreadyInRelease: releaseActions.length - newReleaseActions.length,
|
|
1570
|
-
totalEntries: releaseActions.length
|
|
1571
|
-
}
|
|
1608
|
+
totalEntries: releaseActions.length
|
|
1609
|
+
}
|
|
1572
1610
|
});
|
|
1573
1611
|
},
|
|
1574
|
-
*/
|
|
1575
1612
|
async findMany(ctx) {
|
|
1576
1613
|
const releaseId = ctx.params.releaseId;
|
|
1577
1614
|
const permissionsManager = strapi.service("admin::permission").createPermissionsManager({
|
|
@@ -1670,24 +1707,22 @@ const controllers = {
|
|
|
1670
1707
|
const release = {
|
|
1671
1708
|
type: "admin",
|
|
1672
1709
|
routes: [
|
|
1673
|
-
/*
|
|
1674
1710
|
{
|
|
1675
|
-
method:
|
|
1676
|
-
path:
|
|
1677
|
-
handler:
|
|
1711
|
+
method: "GET",
|
|
1712
|
+
path: "/mapEntriesToReleases",
|
|
1713
|
+
handler: "release.mapEntriesToReleases",
|
|
1678
1714
|
config: {
|
|
1679
1715
|
policies: [
|
|
1680
|
-
|
|
1716
|
+
"admin::isAuthenticatedAdmin",
|
|
1681
1717
|
{
|
|
1682
|
-
name:
|
|
1718
|
+
name: "admin::hasPermissions",
|
|
1683
1719
|
config: {
|
|
1684
|
-
actions: [
|
|
1685
|
-
}
|
|
1686
|
-
}
|
|
1687
|
-
]
|
|
1688
|
-
}
|
|
1720
|
+
actions: ["plugin::content-releases.read"]
|
|
1721
|
+
}
|
|
1722
|
+
}
|
|
1723
|
+
]
|
|
1724
|
+
}
|
|
1689
1725
|
},
|
|
1690
|
-
*/
|
|
1691
1726
|
{
|
|
1692
1727
|
method: "GET",
|
|
1693
1728
|
path: "/getByDocumentAttached",
|
|
@@ -1821,24 +1856,22 @@ const releaseAction = {
|
|
|
1821
1856
|
]
|
|
1822
1857
|
}
|
|
1823
1858
|
},
|
|
1824
|
-
/*
|
|
1825
1859
|
{
|
|
1826
|
-
method:
|
|
1827
|
-
path:
|
|
1828
|
-
handler:
|
|
1860
|
+
method: "POST",
|
|
1861
|
+
path: "/:releaseId/actions/bulk",
|
|
1862
|
+
handler: "release-action.createMany",
|
|
1829
1863
|
config: {
|
|
1830
1864
|
policies: [
|
|
1831
|
-
|
|
1865
|
+
"admin::isAuthenticatedAdmin",
|
|
1832
1866
|
{
|
|
1833
|
-
name:
|
|
1867
|
+
name: "admin::hasPermissions",
|
|
1834
1868
|
config: {
|
|
1835
|
-
actions: [
|
|
1836
|
-
}
|
|
1837
|
-
}
|
|
1838
|
-
]
|
|
1839
|
-
}
|
|
1869
|
+
actions: ["plugin::content-releases.create-action"]
|
|
1870
|
+
}
|
|
1871
|
+
}
|
|
1872
|
+
]
|
|
1873
|
+
}
|
|
1840
1874
|
},
|
|
1841
|
-
*/
|
|
1842
1875
|
{
|
|
1843
1876
|
method: "GET",
|
|
1844
1877
|
path: "/:releaseId/actions",
|