@strapi/review-workflows 0.0.0-experimental.f75e3c6d67cc47c64ab37479efdbb7b43be50b78 → 0.0.0-experimental.f9cac24ba3b2f6acb12d0fb5669106e5a134174e
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/LICENSE +12 -17
- package/dist/_chunks/{Layout-lg3hbwGL.mjs → Layout-CJZ4iUxI.mjs} +8 -9
- package/dist/_chunks/Layout-CJZ4iUxI.mjs.map +1 -0
- package/dist/_chunks/{Layout-BMqtFafC.js → Layout-D7wwT4c7.js} +8 -9
- package/dist/_chunks/Layout-D7wwT4c7.js.map +1 -0
- package/dist/_chunks/{_id-B3jMqqMH.mjs → _id-DA44l-QM.mjs} +131 -165
- package/dist/_chunks/_id-DA44l-QM.mjs.map +1 -0
- package/dist/_chunks/{_id-B853wt9z.js → _id-DgUOk637.js} +130 -164
- package/dist/_chunks/_id-DgUOk637.js.map +1 -0
- package/dist/_chunks/{index-lebOqdrv.mjs → index-C33Q2-Fc.mjs} +108 -92
- package/dist/_chunks/index-C33Q2-Fc.mjs.map +1 -0
- package/dist/_chunks/{index-BhJmjDbj.mjs → index-CnyO97Gi.mjs} +16 -44
- package/dist/_chunks/index-CnyO97Gi.mjs.map +1 -0
- package/dist/_chunks/{index-CdU1x9cZ.js → index-DL9odlOl.js} +14 -42
- package/dist/_chunks/index-DL9odlOl.js.map +1 -0
- package/dist/_chunks/{index-Ujtj1Rcp.js → index-mQar1hfK.js} +106 -90
- package/dist/_chunks/index-mQar1hfK.js.map +1 -0
- package/dist/_chunks/{router-BboD243b.js → router-B1YtLp6u.js} +3 -3
- package/dist/_chunks/{router-BboD243b.js.map → router-B1YtLp6u.js.map} +1 -1
- package/dist/_chunks/{router-CvMnSjb9.mjs → router-BFv8U71z.mjs} +3 -3
- package/dist/_chunks/{router-CvMnSjb9.mjs.map → router-BFv8U71z.mjs.map} +1 -1
- package/dist/admin/index.js +1 -1
- package/dist/admin/index.mjs +1 -1
- package/dist/admin/src/components/LimitsModal.d.ts +2 -4
- package/dist/admin/src/services/admin.d.ts +1 -1
- package/dist/admin/src/services/api.d.ts +1 -1
- package/dist/admin/src/services/content-manager.d.ts +4 -4
- package/dist/admin/src/services/settings.d.ts +1733 -7
- package/dist/server/index.js +41 -62
- package/dist/server/index.js.map +1 -1
- package/dist/server/index.mjs +41 -62
- package/dist/server/index.mjs.map +1 -1
- package/dist/server/src/controllers/assignees.d.ts.map +1 -1
- package/dist/server/src/controllers/index.d.ts +0 -1
- package/dist/server/src/controllers/index.d.ts.map +1 -1
- package/dist/server/src/controllers/stages.d.ts.map +1 -1
- package/dist/server/src/controllers/workflows.d.ts +0 -7
- package/dist/server/src/controllers/workflows.d.ts.map +1 -1
- package/dist/server/src/index.d.ts +1 -2
- package/dist/server/src/index.d.ts.map +1 -1
- package/dist/server/src/routes/review-workflows.d.ts.map +1 -1
- package/dist/server/src/services/document-service-middleware.d.ts.map +1 -1
- package/dist/server/src/services/index.d.ts +1 -1
- package/dist/server/src/services/metrics/weekly-metrics.d.ts.map +1 -1
- package/dist/server/src/services/stages.d.ts +2 -7
- package/dist/server/src/services/stages.d.ts.map +1 -1
- package/dist/shared/contracts/review-workflows.d.ts +1 -14
- package/dist/shared/contracts/review-workflows.d.ts.map +1 -1
- package/package.json +10 -10
- package/dist/_chunks/Layout-BMqtFafC.js.map +0 -1
- package/dist/_chunks/Layout-lg3hbwGL.mjs.map +0 -1
- package/dist/_chunks/_id-B3jMqqMH.mjs.map +0 -1
- package/dist/_chunks/_id-B853wt9z.js.map +0 -1
- package/dist/_chunks/index-BhJmjDbj.mjs.map +0 -1
- package/dist/_chunks/index-CdU1x9cZ.js.map +0 -1
- package/dist/_chunks/index-Ujtj1Rcp.js.map +0 -1
- package/dist/_chunks/index-lebOqdrv.mjs.map +0 -1
- package/strapi-server.js +0 -3
package/dist/server/index.mjs
CHANGED
|
@@ -6837,23 +6837,6 @@ const reviewWorkflows = {
|
|
|
6837
6837
|
]
|
|
6838
6838
|
}
|
|
6839
6839
|
},
|
|
6840
|
-
{
|
|
6841
|
-
method: "GET",
|
|
6842
|
-
path: "/workflows/:id",
|
|
6843
|
-
handler: "workflows.findById",
|
|
6844
|
-
config: {
|
|
6845
|
-
middlewares: [enableFeatureMiddleware("review-workflows")],
|
|
6846
|
-
policies: [
|
|
6847
|
-
"admin::isAuthenticatedAdmin",
|
|
6848
|
-
{
|
|
6849
|
-
name: "admin::hasPermissions",
|
|
6850
|
-
config: {
|
|
6851
|
-
actions: ["admin::review-workflows.read"]
|
|
6852
|
-
}
|
|
6853
|
-
}
|
|
6854
|
-
]
|
|
6855
|
-
}
|
|
6856
|
-
},
|
|
6857
6840
|
{
|
|
6858
6841
|
method: "GET",
|
|
6859
6842
|
path: "/workflows/:workflow_id/stages",
|
|
@@ -6917,7 +6900,7 @@ const reviewWorkflows = {
|
|
|
6917
6900
|
{
|
|
6918
6901
|
name: "admin::hasPermissions",
|
|
6919
6902
|
config: {
|
|
6920
|
-
actions: ["admin::users.read"
|
|
6903
|
+
actions: ["admin::users.read"]
|
|
6921
6904
|
}
|
|
6922
6905
|
}
|
|
6923
6906
|
]
|
|
@@ -7338,23 +7321,17 @@ const stages$1 = ({ strapi: strapi2 }) => {
|
|
|
7338
7321
|
},
|
|
7339
7322
|
/**
|
|
7340
7323
|
* Update the stage of an entity
|
|
7341
|
-
*
|
|
7342
|
-
* @param {object} entityInfo
|
|
7343
|
-
* @param {number} entityInfo.id - Entity id
|
|
7344
|
-
* @param {string} entityInfo.modelUID - the content-type of the entity
|
|
7345
|
-
* @param {number} stageId - The id of the stage to assign to the entity
|
|
7346
7324
|
*/
|
|
7347
|
-
async updateEntity(
|
|
7325
|
+
async updateEntity(documentId, locale, model, stageId) {
|
|
7348
7326
|
const stage = await this.findById(stageId);
|
|
7349
7327
|
await workflowValidator.validateWorkflowCount();
|
|
7350
7328
|
if (!stage) {
|
|
7351
7329
|
throw new ApplicationError$2(`Selected stage does not exist`);
|
|
7352
7330
|
}
|
|
7353
|
-
const entity = await strapi2.
|
|
7354
|
-
|
|
7355
|
-
|
|
7356
|
-
},
|
|
7357
|
-
data: { [ENTITY_STAGE_ATTRIBUTE]: stageId },
|
|
7331
|
+
const entity = await strapi2.documents(model).update({
|
|
7332
|
+
documentId,
|
|
7333
|
+
locale,
|
|
7334
|
+
data: { [ENTITY_STAGE_ATTRIBUTE]: stage },
|
|
7358
7335
|
populate: [ENTITY_STAGE_ATTRIBUTE]
|
|
7359
7336
|
});
|
|
7360
7337
|
metrics.sendDidChangeEntryStage();
|
|
@@ -7771,7 +7748,12 @@ const reviewWorkflowsWeeklyMetrics = ({ strapi: strapi2 }) => {
|
|
|
7771
7748
|
},
|
|
7772
7749
|
async registerCron() {
|
|
7773
7750
|
const weeklySchedule = await this.ensureWeeklyStoredCronSchedule();
|
|
7774
|
-
strapi2.cron.add({
|
|
7751
|
+
strapi2.cron.add({
|
|
7752
|
+
reviewWorkflowsWeekly: {
|
|
7753
|
+
task: this.sendMetrics.bind(this),
|
|
7754
|
+
options: weeklySchedule
|
|
7755
|
+
}
|
|
7756
|
+
});
|
|
7775
7757
|
}
|
|
7776
7758
|
};
|
|
7777
7759
|
};
|
|
@@ -7827,6 +7809,7 @@ const handleStageOnUpdate = async (ctx, next) => {
|
|
|
7827
7809
|
strapi.eventHub.emit(WORKFLOW_UPDATE_STAGE, {
|
|
7828
7810
|
model: model.modelName,
|
|
7829
7811
|
uid: model.uid,
|
|
7812
|
+
// TODO v6: Rename to "entry", which is what is used for regular CRUD updates
|
|
7830
7813
|
entity: {
|
|
7831
7814
|
// @ts-expect-error
|
|
7832
7815
|
id: result?.id,
|
|
@@ -8028,30 +8011,6 @@ const workflows = {
|
|
|
8028
8011
|
workflowCount
|
|
8029
8012
|
}
|
|
8030
8013
|
};
|
|
8031
|
-
},
|
|
8032
|
-
/**
|
|
8033
|
-
* Get one workflow based on its id contained in request parameters
|
|
8034
|
-
* Returns count of workflows in meta, used to prevent workflow edition when
|
|
8035
|
-
* max workflow count is reached for the current plan
|
|
8036
|
-
* @param {import('koa').BaseContext} ctx - koa context
|
|
8037
|
-
*/
|
|
8038
|
-
async findById(ctx) {
|
|
8039
|
-
const { id } = ctx.params;
|
|
8040
|
-
const { query } = ctx.request;
|
|
8041
|
-
const { sanitizeOutput, sanitizedQuery } = getWorkflowsPermissionChecker(
|
|
8042
|
-
{ strapi },
|
|
8043
|
-
ctx.state.userAbility
|
|
8044
|
-
);
|
|
8045
|
-
const { populate } = await sanitizedQuery.read(query);
|
|
8046
|
-
const workflowService = getService("workflows");
|
|
8047
|
-
const [workflow2, workflowCount] = await Promise.all([
|
|
8048
|
-
workflowService.findById(id, { populate }).then(formatWorkflowToAdmin),
|
|
8049
|
-
workflowService.count()
|
|
8050
|
-
]);
|
|
8051
|
-
ctx.body = {
|
|
8052
|
-
data: await sanitizeOutput(workflow2),
|
|
8053
|
-
meta: { workflowCount }
|
|
8054
|
-
};
|
|
8055
8014
|
}
|
|
8056
8015
|
};
|
|
8057
8016
|
function sanitizeStage({ strapi: strapi2 }, userAbility) {
|
|
@@ -8136,7 +8095,12 @@ const stages = {
|
|
|
8136
8095
|
);
|
|
8137
8096
|
const workflow2 = await workflowService.assertContentTypeBelongsToWorkflow(modelUID);
|
|
8138
8097
|
workflowService.assertStageBelongsToWorkflow(stageId, workflow2);
|
|
8139
|
-
const updatedEntity = await stagesService.updateEntity(
|
|
8098
|
+
const updatedEntity = await stagesService.updateEntity(
|
|
8099
|
+
entity.documentId,
|
|
8100
|
+
entity.locale,
|
|
8101
|
+
modelUID,
|
|
8102
|
+
stageId
|
|
8103
|
+
);
|
|
8140
8104
|
ctx.body = { data: await sanitizeOutput(updatedEntity) };
|
|
8141
8105
|
},
|
|
8142
8106
|
/**
|
|
@@ -8156,10 +8120,9 @@ const stages = {
|
|
|
8156
8120
|
if (strapi.plugin("content-manager").service("permission-checker").create({ userAbility: ctx.state.userAbility, model: modelUID }).cannot.read()) {
|
|
8157
8121
|
return ctx.forbidden();
|
|
8158
8122
|
}
|
|
8159
|
-
const locale = await validateLocale(query?.locale);
|
|
8123
|
+
const locale = await validateLocale(query?.locale) ?? void 0;
|
|
8160
8124
|
const entity = await strapi.documents(modelUID).findOne({
|
|
8161
8125
|
documentId,
|
|
8162
|
-
// @ts-expect-error - locale should be also null in the doc service types
|
|
8163
8126
|
locale,
|
|
8164
8127
|
populate: [ENTITY_STAGE_ATTRIBUTE]
|
|
8165
8128
|
});
|
|
@@ -8168,12 +8131,13 @@ const stages = {
|
|
|
8168
8131
|
}
|
|
8169
8132
|
const entityStageId = entity[ENTITY_STAGE_ATTRIBUTE]?.id;
|
|
8170
8133
|
const canTransition = stagePermissions2.can(STAGE_TRANSITION_UID, entityStageId);
|
|
8171
|
-
const [workflowCount,
|
|
8134
|
+
const [workflowCount, workflowResult] = await Promise.all([
|
|
8172
8135
|
workflowService.count(),
|
|
8173
8136
|
workflowService.getAssignedWorkflow(modelUID, {
|
|
8174
8137
|
populate: "stages"
|
|
8175
8138
|
})
|
|
8176
8139
|
]);
|
|
8140
|
+
const workflowStages = workflowResult ? workflowResult.stages : [];
|
|
8177
8141
|
const meta = {
|
|
8178
8142
|
stageCount: workflowStages.length,
|
|
8179
8143
|
workflowCount
|
|
@@ -8209,22 +8173,37 @@ const assignees = {
|
|
|
8209
8173
|
async updateEntity(ctx) {
|
|
8210
8174
|
const assigneeService = getService("assignees");
|
|
8211
8175
|
const workflowService = getService("workflows");
|
|
8176
|
+
const stagePermissions2 = getService("stage-permissions");
|
|
8212
8177
|
const { model_uid: model, id: documentId } = ctx.params;
|
|
8213
|
-
const
|
|
8178
|
+
const locale = await validateLocale(ctx.request.query?.locale) ?? void 0;
|
|
8214
8179
|
const { sanitizeOutput } = strapi.plugin("content-manager").service("permission-checker").create({ userAbility: ctx.state.userAbility, model });
|
|
8180
|
+
const entity = await strapi.documents(model).findOne({
|
|
8181
|
+
documentId,
|
|
8182
|
+
locale,
|
|
8183
|
+
populate: [ENTITY_STAGE_ATTRIBUTE]
|
|
8184
|
+
});
|
|
8185
|
+
if (!entity) {
|
|
8186
|
+
ctx.throw(404, "Entity not found");
|
|
8187
|
+
}
|
|
8188
|
+
const canTransitionStage = stagePermissions2.can(
|
|
8189
|
+
STAGE_TRANSITION_UID,
|
|
8190
|
+
entity[ENTITY_STAGE_ATTRIBUTE]?.id
|
|
8191
|
+
);
|
|
8192
|
+
if (!canTransitionStage) {
|
|
8193
|
+
ctx.throw(403, "Stage transition permission is required");
|
|
8194
|
+
}
|
|
8215
8195
|
const { id: assigneeId } = await validateUpdateAssigneeOnEntity(
|
|
8216
8196
|
ctx.request?.body?.data,
|
|
8217
8197
|
"You should pass a valid id to the body of the put request."
|
|
8218
8198
|
);
|
|
8219
|
-
await validateLocale(locale);
|
|
8220
8199
|
await workflowService.assertContentTypeBelongsToWorkflow(model);
|
|
8221
|
-
const
|
|
8200
|
+
const updatedEntity = await assigneeService.updateEntityAssignee(
|
|
8222
8201
|
documentId,
|
|
8223
8202
|
locale || null,
|
|
8224
8203
|
model,
|
|
8225
8204
|
assigneeId
|
|
8226
8205
|
);
|
|
8227
|
-
ctx.body = { data: await sanitizeOutput(
|
|
8206
|
+
ctx.body = { data: await sanitizeOutput(updatedEntity) };
|
|
8228
8207
|
}
|
|
8229
8208
|
};
|
|
8230
8209
|
const controllers = {
|