Skip to content

Commit

Permalink
pkp/pkp-lib#10674 Refine editorial activity
Browse files Browse the repository at this point in the history
  • Loading branch information
jardakotesovec committed Feb 19, 2025
1 parent f863067 commit e6c93fa
Show file tree
Hide file tree
Showing 7 changed files with 116 additions and 49 deletions.
2 changes: 2 additions & 0 deletions public/globals.js
Original file line number Diff line number Diff line change
Expand Up @@ -758,6 +758,7 @@ window.pkp = {
'Enter submission title here in {$language}. You can format your title as needed',
'submission.list.changeSubmissionLanguage.title':
'Change Submission Language For',
'submission.list.completeSubmission': 'Complete submission',
'submission.list.copyeditsSubmitted': 'Copyedited files submitted',
'submission.list.currentStage': 'Currently in the {$stage} stage.',
'submission.list.discussions': 'Open discussions',
Expand Down Expand Up @@ -785,6 +786,7 @@ window.pkp = {
'submission.stage.published': 'Published',
'submission.stage.scheduledForPublication': 'Scheduled For Publication',
'submission.stageParticipants.notify': 'Notify',
'submission.status.scheduled': 'Scheduled',
'submission.submit.newSubmissionSingle': 'New Submission',
'submission.submit.submissionFiles': 'Submission Files',
'submission.submit.uploadSubmissionFile': 'Upload Submission File',
Expand Down
23 changes: 22 additions & 1 deletion src/composables/useSubmission.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,11 +20,27 @@ export const ExtendedStagesLabels = {
externalReview: tk('submission.stage.externalReviewWithRound'),
editing: tk('submission.copyediting'),
productionQueued: tk('manager.publication.productionStage'),
productionScheduled: tk('submission.stage.scheduledForPublication'),
productionScheduled: tk('submission.status.scheduled'),
productionPublished: tk('submission.stage.published'),
declined: tk('submissions.declined'),
};

export const StageLabels = {
[pkp.const.WORKFLOW_STAGE_ID_SUBMISSION]: tk(
'manager.publication.submissionStage',
),
[pkp.const.WORKFLOW_STAGE_ID_INTERNAL_REVIEW]: tk(
'submission.stage.internalReviewWithRound',
),
[pkp.const.WORKFLOW_STAGE_ID_EXTERNAL_REVIEW]: tk(
'submission.stage.externalReviewWithRound',
),
[pkp.const.WORKFLOW_STAGE_ID_EDITING]: tk('submission.copyediting'),
[pkp.const.WORKFLOW_STAGE_ID_PRODUCTION]: tk(
'manager.publication.productionStage',
),
};

export const RecommendationTranslations = {
[pkp.const.SUBMISSION_REVIEWER_RECOMMENDATION_ACCEPT]: tk(
'reviewer.article.decision.accept',
Expand Down Expand Up @@ -178,6 +194,10 @@ export function useSubmission() {
});
}

function getStageLabel(submission) {
return t(StageLabels[submission.stageId]);
}

function hasSubmissionPassedStage(submission, stageId) {
return submission.stageId > stageId;
}
Expand Down Expand Up @@ -248,6 +268,7 @@ export function useSubmission() {
getSubmissionById,
getActiveStage,
getStageById,
getStageLabel,
getExtendedStage,
getExtendedStageLabel,
getCurrentReviewRound,
Expand Down
42 changes: 22 additions & 20 deletions src/pages/dashboard/DashboardPage.stories.js
Original file line number Diff line number Diff line change
Expand Up @@ -63,26 +63,28 @@ export const Init = {
};

const SubmissionScenariosDescription = `<ul class="text-sm-normal">
<li>1. Submission stage</li>
<li>2. Submission stage - no editors assigned</li>
<li>3. Review stage - REVIEW_ROUND_STATUS_REVISIONS_REQUESTED: Revisions requested for the same round</li>
<li>4. Review stage - REVIEW_ROUND_STATUS_RESUBMIT_FOR_REVIEW: Revisions requested, to be used in next round</li>
<li>5. Review stage - REVIEW_ROUND_STATUS_DECLINED: Declined in review stage</li>
<li>6. Review stage - REVIEW_ROUND_STATUS_PENDING_REVIEWERS: No reviewers have been assigned</li>
<li>7. Review stage - REVIEW_ROUND_STATUS_PENDING_REVIEWS: Waiting for reviews to be submitted by reviewers</li>
<li>8. Review stage - REVIEW_ROUND_STATUS_REVIEWS_READY: One or more reviews is ready for an editor to view</li>
<li>9. Review stage - REVIEW_ROUND_STATUS_REVIEWS_COMPLETED: All assigned reviews have been confirmed by an editor</li>
<li>10. Review stage - REVIEW_ROUND_STATUS_REVIEWS_OVERDUE: One or more reviews is overdue</li>
<li>11. Review stage - REVIEW_ROUND_STATUS_REVISIONS_SUBMITTED: at least one revision file has been uploaded</li>
<li>12. Review stage - REVIEW_ROUND_STATUS_RESUBMIT_FOR_REVIEW_SUBMITTED: at least one revision file has been uploaded.</li>
<li>13. Review stage - REVIEW_ROUND_STATUS_RETURNED_TO_REVIEW:The following status is set when a submission return back from copyediting stage to last review round again </li>
<li>14. Review stage - REVIEW_ROUND_STATUS_PENDING_RECOMMENDATIONS: Waiting for recommendations to be submitted by recommendOnly editors</li>
<li>15. Review stage - REVIEW_ROUND_STATUS_RECOMMENDATIONS_READY: One or more recommendations are ready for an editor to view</li>
<li>16. Review stage - REVIEW_ROUND_STATUS_RECOMMENDATIONS_COMPLETED: All assigned recommendOnly editors have made a recommendation</li>
<li>17. Review stage - Recommend only editor provided recommendation (relevant only for recommend only editor)
<li>18. Review stage - Open reviews</li>
<li>19. Copyediting stage </li>
<li>20. Production stage</li>
<li>1. Incomplete submission</li>
<li>2. Declined in submission stage</li>
<li>3. Submission stage</li>
<li>4. Submission stage - no editors assigned</li>
<li>5. Review stage - REVIEW_ROUND_STATUS_REVISIONS_REQUESTED: Revisions requested for the same round</li>
<li>6. Review stage - REVIEW_ROUND_STATUS_RESUBMIT_FOR_REVIEW: Revisions requested, to be used in next round</li>
<li>7. Review stage - REVIEW_ROUND_STATUS_DECLINED: Declined in review stage</li>
<li>8. Review stage - REVIEW_ROUND_STATUS_PENDING_REVIEWERS: No reviewers have been assigned</li>
<li>9. Review stage - REVIEW_ROUND_STATUS_PENDING_REVIEWS: Waiting for reviews to be submitted by reviewers</li>
<li>10. Review stage - REVIEW_ROUND_STATUS_REVIEWS_READY: One or more reviews is ready for an editor to view</li>
<li>11. Review stage - REVIEW_ROUND_STATUS_REVIEWS_COMPLETED: All assigned reviews have been confirmed by an editor</li>
<li>12. Review stage - REVIEW_ROUND_STATUS_REVIEWS_OVERDUE: One or more reviews is overdue</li>
<li>13. Review stage - REVIEW_ROUND_STATUS_REVISIONS_SUBMITTED: at least one revision file has been uploaded</li>
<li>14. Review stage - REVIEW_ROUND_STATUS_RESUBMIT_FOR_REVIEW_SUBMITTED: at least one revision file has been uploaded.</li>
<li>15. Review stage - REVIEW_ROUND_STATUS_RETURNED_TO_REVIEW:The following status is set when a submission return back from copyediting stage to last review round again </li>
<li>16. Review stage - REVIEW_ROUND_STATUS_PENDING_RECOMMENDATIONS: Waiting for recommendations to be submitted by recommendOnly editors</li>
<li>17. Review stage - REVIEW_ROUND_STATUS_RECOMMENDATIONS_READY: One or more recommendations are ready for an editor to view</li>
<li>18. Review stage - REVIEW_ROUND_STATUS_RECOMMENDATIONS_COMPLETED: All assigned recommendOnly editors have made a recommendation</li>
<li>19. Review stage - Recommend only editor provided recommendation (relevant only for recommend only editor)
<li>20. Review stage - Open reviews</li>
<li>21. Copyediting stage </li>
<li>22. Production stage</li>
</ul>`;

export const EditorEditorialActivity = {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
<template>
<TableCell>
<PkpButton
v-if="showButton"
class="-ms-3"
:aria-describedby="'submission-title-' + item.id"
:is-link="true"
Expand All @@ -11,7 +12,7 @@
</TableCell>
</template>
<script setup>
import {defineProps} from 'vue';
import {defineProps, computed} from 'vue';
import PkpButton from '@/components/Button/Button.vue';
import TableCell from '@/components/Table/TableCell.vue';
import {useDashboardPageStore} from '@/pages/dashboard/dashboardPageStore.js';
Expand All @@ -20,12 +21,10 @@ const props = defineProps({
item: {type: Object, required: true},
});
const showButton = computed(() => !props.item.submissionProgress);
function handleAction() {
if (props.item.submissionProgress) {
dashboardPageStore.openSubmissionWizard(props.item.id);
} else {
dashboardPageStore.openWorkflowModal(props.item.id);
}
dashboardPageStore.openWorkflowModal(props.item.id);
}
const dashboardPageStore = useDashboardPageStore();
Expand Down
26 changes: 26 additions & 0 deletions src/pages/dashboard/composables/useEditorialLogic.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import {useDate} from '@/composables/useDate';
import {Actions as ParticipantManagerActions} from '@/managers/ParticipantManager/useParticipantManagerActions';
import {Actions as ReviewerManagerActions} from '@/managers/ReviewerManager/useReviewerManagerActions';
import {Actions as FileManagerActions} from '@/managers/FileManager/useFileManagerActions';

const {formatShortDate} = useDate();

const {t} = useLocalize();
Expand All @@ -13,13 +14,38 @@ const {
getCurrentReviewAssignments,
getActiveReviewAssignments,
getReviewAssignmentsForRound,
getStageLabel,
} = useSubmission();

export function useEditorialLogic() {
function getEditorialActivityForEditorialDashboard(submission) {
const activeStage = getActiveStage(submission);

if (submission.status === pkp.const.STATUS_DECLINED) {
return [
{
component: 'CellSubmissionActivityActionAlert',
props: {
alert: t('dashboard.declinedDuringStage', {
stageName: getStageLabel(submission),
}),
},
},
];
}
if (activeStage.id === pkp.const.WORKFLOW_STAGE_ID_SUBMISSION) {
if (submission.submissionProgress) {
return [
{
component: 'CellSubmissionActivityActionAlert',
props: {
actionName: 'openSubmissionWizard',
actionLabel: t('submission.list.completeSubmission'),
actionArgs: {submissionId: submission.id},
},
},
];
}
if (!submission.editorAssigned) {
return [
{
Expand Down
2 changes: 1 addition & 1 deletion src/pages/dashboard/dashboardPageStore.js
Original file line number Diff line number Diff line change
Expand Up @@ -390,7 +390,7 @@ export const useDashboardPageStore = defineComponentStore(
openWorkflowModal(queryParamsUrl.workflowSubmissionId);
}

function openSubmissionWizard(submissionId) {
function openSubmissionWizard({submissionId}) {
const {redirectToPage} = useUrl(`submission?id=${submissionId}`);
redirectToPage();
}
Expand Down
59 changes: 38 additions & 21 deletions src/pages/dashboard/mocks/submissionScenariosMock.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,22 +3,34 @@ import {getReviewRoundMock} from './reviewRoundsMock';
import {getReviewAssignmentShortMock} from './reviewAssignmentsMock';

export const EditorialActivityScenario = [
// Submission stage
// Incomplete
getSubmissionMock({
id: 1,
stageId: pkp.const.WORKFLOW_STAGE_ID_SUBMISSION,
submissionProgress: true,
}),
// Submission page - assign editor
// Declined
getSubmissionMock({
id: 2,
stageId: pkp.const.WORKFLOW_STAGE_ID_SUBMISSION,
status: pkp.const.STATUS_DECLINED,
}),
// Submission stage
getSubmissionMock({
id: 3,
stageId: pkp.const.WORKFLOW_STAGE_ID_SUBMISSION,
}),
// Submission page - assign editor
getSubmissionMock({
id: 4,
stageId: pkp.const.WORKFLOW_STAGE_ID_SUBMISSION,
editorAssigned: false,
}),

// Review stage
// REVIEW_ROUND_STATUS_REVISIONS_REQUESTED
getSubmissionMock({
id: 3,
id: 5,
reviewAssignments: [
getReviewAssignmentShortMock({
statusId: pkp.const.REVIEW_ASSIGNMENT_STATUS_RECEIVED,
Expand All @@ -34,7 +46,7 @@ export const EditorialActivityScenario = [
}),
//REVIEW_ROUND_STATUS_RESUBMIT_FOR_REVIEW
getSubmissionMock({
id: 4,
id: 6,
reviewAssignments: [
getReviewAssignmentShortMock({
statusId: pkp.const.REVIEW_ASSIGNMENT_STATUS_RECEIVED,
Expand All @@ -52,7 +64,7 @@ export const EditorialActivityScenario = [
// -- Does not happen as its moved to next stage
// REVIEW_ROUND_STATUS_DECLINED
getSubmissionMock({
id: 5,
id: 7,
status: pkp.const.STATUS_DECLINED,
reviewAssignments: [
getReviewAssignmentShortMock({
Expand All @@ -67,13 +79,13 @@ export const EditorialActivityScenario = [
}),
// REVIEW_ROUND_STATUS_PENDING_REVIEWERS
getSubmissionMock({
id: 6,
id: 8,
reviewAssignments: [],
reviewRounds: [getReviewRoundMock()],
}),
// REVIEW_ROUND_STATUS_PENDING_REVIEWS
getSubmissionMock({
id: 7,
id: 9,
reviewAssignments: [
getReviewAssignmentShortMock({
statusId: pkp.const.REVIEW_ASSIGNMENT_STATUS_COMPLETE,
Expand All @@ -90,7 +102,7 @@ export const EditorialActivityScenario = [
}),
// REVIEW_ROUND_STATUS_REVIEWS_READY
getSubmissionMock({
id: 8,
id: 10,
reviewAssignments: [
getReviewAssignmentShortMock({
statusId: pkp.const.REVIEW_ASSIGNMENT_STATUS_COMPLETE,
Expand All @@ -110,7 +122,7 @@ export const EditorialActivityScenario = [
}),
// REVIEW_ROUND_STATUS_REVIEWS_COMPLETED
getSubmissionMock({
id: 9,
id: 11,
reviewAssignments: [
getReviewAssignmentShortMock({
statusId: pkp.const.REVIEW_ASSIGNMENT_STATUS_COMPLETE,
Expand All @@ -127,7 +139,7 @@ export const EditorialActivityScenario = [
}),
// REVIEW_ROUND_STATUS_REVIEWS_OVERDUE
getSubmissionMock({
id: 10,
id: 12,
reviewAssignments: [
getReviewAssignmentShortMock({
statusId: pkp.const.REVIEW_ASSIGNMENT_STATUS_COMPLETE,
Expand All @@ -144,7 +156,7 @@ export const EditorialActivityScenario = [
}),
// REVIEW_ROUND_STATUS_REVISIONS_SUBMITTED
getSubmissionMock({
id: 11,
id: 13,
reviewAssignments: [
getReviewAssignmentShortMock({
statusId: pkp.const.REVIEW_ASSIGNMENT_STATUS_COMPLETE,
Expand All @@ -161,7 +173,7 @@ export const EditorialActivityScenario = [
}),
// REVIEW_ROUND_STATUS_RESUBMIT_FOR_REVIEW_SUBMITTED
getSubmissionMock({
id: 12,
id: 14,
reviewAssignments: [
getReviewAssignmentShortMock({
statusId: pkp.const.REVIEW_ASSIGNMENT_STATUS_COMPLETE,
Expand All @@ -178,7 +190,7 @@ export const EditorialActivityScenario = [
}),
// REVIEW_ROUND_STATUS_RETURNED_TO_REVIEW
getSubmissionMock({
id: 13,
id: 15,
reviewAssignments: [
getReviewAssignmentShortMock({
statusId: pkp.const.REVIEW_ASSIGNMENT_STATUS_COMPLETE,
Expand All @@ -196,7 +208,7 @@ export const EditorialActivityScenario = [

// REVIEW_ROUND_STATUS_PENDING_RECOMMENDATIONS
getSubmissionMock({
id: 14,
id: 16,
reviewAssignments: [
getReviewAssignmentShortMock({
statusId: pkp.const.REVIEW_ASSIGNMENT_STATUS_COMPLETE,
Expand All @@ -213,7 +225,7 @@ export const EditorialActivityScenario = [
}),
// REVIEW_ROUND_STATUS_RECOMMENDATIONS_READY
getSubmissionMock({
id: 15,
id: 17,
reviewAssignments: [
getReviewAssignmentShortMock({
statusId: pkp.const.REVIEW_ASSIGNMENT_STATUS_COMPLETE,
Expand All @@ -230,7 +242,7 @@ export const EditorialActivityScenario = [
}),
// REVIEW_ROUND_STATUS_RECOMMENDATIONS_COMPLETED
getSubmissionMock({
id: 16,
id: 18,
reviewAssignments: [
getReviewAssignmentShortMock({
statusId: pkp.const.REVIEW_ASSIGNMENT_STATUS_COMPLETE,
Expand All @@ -247,7 +259,7 @@ export const EditorialActivityScenario = [
}),
// Recommend only editor provided recommendation
getSubmissionMock({
id: 17,
id: 19,
stages: [
{
id: 3,
Expand All @@ -270,7 +282,7 @@ export const EditorialActivityScenario = [
}),
// Open review assignments
getSubmissionMock({
id: 18,
id: 20,
reviewAssignments: [
getReviewAssignmentShortMock({
statusId: pkp.const.REVIEW_ASSIGNMENT_STATUS_COMPLETE,
Expand All @@ -290,15 +302,20 @@ export const EditorialActivityScenario = [
}),
],
}),

// Editorial stage
getSubmissionMock({
id: 19,
id: 21,
stageId: pkp.const.WORKFLOW_STAGE_ID_EDITING,
}),
// Scheduled
getSubmissionMock({
id: 22,
stageId: pkp.const.WORKFLOW_STAGE_ID_PRODUCTION,
status: pkp.const.STATUS_SCHEDULED,
}),
// Production stage
getSubmissionMock({
id: 20,
id: 23,
stageId: pkp.const.WORKFLOW_STAGE_ID_PRODUCTION,
}),
];

0 comments on commit e6c93fa

Please sign in to comment.