@@ -124,26 +124,24 @@ import ParticipantManager from '@/managers/ParticipantManager/ParticipantManager
import ReviewerManager from '@/managers/ReviewerManager/ReviewerManager.vue';
import ContributorManager from '@/managers/ContributorManager/ContributorManager.vue';
-import PrimaryBasicMetadata from './primaryItems/PrimaryBasicMetadata.vue';
-import ReviewRoundStatus from './primaryItems/ReviewRoundStatus.vue';
+import WorkflowPrimaryBasicMetadata from './components/primary/WorkflowPrimaryBasicMetadata.vue';
+import WorkflowReviewRoundStatus from './components/primary/WorkflowReviewRoundStatus.vue';
// Publications
-import WorkflowNotificationDisplay from './primaryItems/WorkflowNotificationDisplay.vue';
-import WorkflowPaymentDropdown from './actionItems/WorkflowPaymentDropdown.vue';
-import PublicationForm from './primaryItems/PublicationForm.vue';
-import PublicationJats from './primaryItems/PublicationJats.vue';
-import PublicationVersionControl from './publicationControls/PublicationVersionControl.vue';
-import WorkflowChangeSubmissionLanguage from './publicationControls/WorkflowChangeSubmissionLanguage.vue';
+import WorkflowNotificationDisplay from './components/primary/WorkflowNotificationDisplay.vue';
+import WorkflowPaymentDropdown from './components/header/WorkflowPaymentDropdown.vue';
+import WorkflowPublicationForm from './components/publication/WorkflowPublicationForm.vue';
+import WorkflowPublicationJats from './components/publication/WorkflowPublicationJats.vue';
+import WorkflowPublicationVersionControl from './components/publication/WorkflowPublicationVersionControl.vue';
+import WorkflowChangeSubmissionLanguage from './components/publication/WorkflowChangeSubmissionLanguage.vue';
-import ActionButton from './actionItems/ActionButton.vue';
-import WorkflowRecommendOnlyControls from './actionItems/WorkflowRecommendOnlyControls.vue';
-import WorkflowRecommendOnlyListingRecommendations from './components/WorkflowRecommendOnlyListingRecommendations.vue';
+import WorkflowActionButton from './components/action/WorkflowActionButton.vue';
+import WorkflowRecommendOnlyControls from './components/action/WorkflowRecommendOnlyControls.vue';
+import WorkflowRecommendOnlyListingRecommendations from './components/secondary/WorkflowRecommendOnlyListingRecommendations.vue';
-import BasicMetadata from './metaItems/BasicMetadata.vue';
-import SubmissionStatus from './primaryItems/SubmissionStatus.vue';
+import WorkflowSubmissionStatus from './components/primary/WorkflowSubmissionStatus.vue';
import GalleyManager from '@/managers/GalleyManager/GalleyManager.vue';
-import PublicationEditDisabled from './primaryItems/PublicationEditDisabled.vue';
-import IssueAssigned from './metaItems/IssueAssigned.vue';
-import {useSubmissionSummaryStore} from './submissionSummaryStore';
+import WorkflowPublicationEditDisabled from './components/publication/WorkflowPublicationEditDisabled.vue';
+import {useWorkflowStore} from './workflowStore';
import SideModalLayoutMenu2Columns from '@/components/Modal/SideModalLayoutMenu2Columns.vue';
import {useLocalize} from '@/composables/useLocalize';
@@ -157,21 +155,19 @@ const Components = {
ContributorManager,
ParticipantManager,
GalleyManager,
- ActionButton,
+ WorkflowActionButton,
WorkflowRecommendOnlyControls,
WorkflowRecommendOnlyListingRecommendations,
WorkflowNotificationDisplay,
- BasicMetadata,
WorkflowPaymentDropdown,
- PrimaryBasicMetadata,
- IssueAssigned,
- ReviewRoundStatus,
- PublicationForm,
- PublicationJats,
- PublicationVersionControl,
+ WorkflowPrimaryBasicMetadata,
+ WorkflowReviewRoundStatus,
+ WorkflowPublicationForm,
+ WorkflowPublicationJats,
+ WorkflowPublicationVersionControl,
WorkflowChangeSubmissionLanguage,
- SubmissionStatus,
- PublicationEditDisabled,
+ WorkflowSubmissionStatus,
+ WorkflowPublicationEditDisabled,
};
const props = defineProps({
@@ -179,7 +175,7 @@ const props = defineProps({
pageInitConfig: {type: Object, required: true},
});
-const summaryStore = useSubmissionSummaryStore(props);
+const workflowStore = useWorkflowStore(props);
const {getExtendedStage, getExtendedStageLabel} = useSubmission();
@@ -190,5 +186,5 @@ const stageLabel = computed(
() => submission.value && getExtendedStageLabel(submission.value),
);
-const {submission, selectedPublication} = storeToRefs(summaryStore);
+const {submission, selectedPublication} = storeToRefs(workflowStore);
diff --git a/src/pages/workflow/WorkflowLogResponseForModal.vue b/src/pages/workflow/WorkflowLogResponseForModal.vue
deleted file mode 100644
index 08d560f93..000000000
--- a/src/pages/workflow/WorkflowLogResponseForModal.vue
+++ /dev/null
@@ -1,39 +0,0 @@
-
-
-
- {{ 15 }}
-
-
- Title
-
- Description
-
-
-
SubmissionId {{ submissionId }}
-
ReviewAssignmentId {{ reviewAssignmentId }}
-
-
Submit Things
-
-
-
-
-
diff --git a/src/pages/dashboard/SubmissionSummaryModal/actionItems/ActionButton.vue b/src/pages/workflow/components/action/WorkflowActionButton.vue
similarity index 84%
rename from src/pages/dashboard/SubmissionSummaryModal/actionItems/ActionButton.vue
rename to src/pages/workflow/components/action/WorkflowActionButton.vue
index aaf7e5732..edc0bf45c 100644
--- a/src/pages/dashboard/SubmissionSummaryModal/actionItems/ActionButton.vue
+++ b/src/pages/workflow/components/action/WorkflowActionButton.vue
@@ -20,7 +20,7 @@ defineProps({
label: {type: String, required: true},
});
-import {useSubmissionSummaryStore} from '../submissionSummaryStore';
+import {useWorkflowStore} from '@/pages/workflow/workflowStore';
-const store = useSubmissionSummaryStore();
+const store = useWorkflowStore();
diff --git a/src/pages/dashboard/SubmissionSummaryModal/actionItems/WorkflowRecommendOnlyControls.vue b/src/pages/workflow/components/action/WorkflowRecommendOnlyControls.vue
similarity index 96%
rename from src/pages/dashboard/SubmissionSummaryModal/actionItems/WorkflowRecommendOnlyControls.vue
rename to src/pages/workflow/components/action/WorkflowRecommendOnlyControls.vue
index 4c0dbf54c..684abdf31 100644
--- a/src/pages/dashboard/SubmissionSummaryModal/actionItems/WorkflowRecommendOnlyControls.vue
+++ b/src/pages/workflow/components/action/WorkflowRecommendOnlyControls.vue
@@ -42,7 +42,7 @@
import PkpButton from '@/components/Button/Button.vue';
import {computed, ref, watch} from 'vue';
import {useLocalize} from '@/composables/useLocalize';
-import {useSubmissionSummaryStore} from '../submissionSummaryStore';
+import {useWorkflowStore} from '@/pages/workflow/workflowStore';
import {useUrl} from '@/composables/useUrl';
import {useFetch} from '@/composables/useFetch';
@@ -153,9 +153,9 @@ const currentRecommendation = computed(() => {
}
});
-const summaryStore = useSubmissionSummaryStore();
+const workflowStore = useWorkflowStore();
function handleAction(actionName) {
- summaryStore[actionName]({
+ workflowStore[actionName]({
reviewRoundId: props.reviewRoundId,
stageId: props.stageId,
});
diff --git a/src/pages/dashboard/SubmissionSummaryModal/actionItems/WorkflowPaymentDropdown.vue b/src/pages/workflow/components/header/WorkflowPaymentDropdown.vue
similarity index 100%
rename from src/pages/dashboard/SubmissionSummaryModal/actionItems/WorkflowPaymentDropdown.vue
rename to src/pages/workflow/components/header/WorkflowPaymentDropdown.vue
diff --git a/src/pages/dashboard/SubmissionSummaryModal/primaryItems/WorkflowNotificationDisplay.vue b/src/pages/workflow/components/primary/WorkflowNotificationDisplay.vue
similarity index 100%
rename from src/pages/dashboard/SubmissionSummaryModal/primaryItems/WorkflowNotificationDisplay.vue
rename to src/pages/workflow/components/primary/WorkflowNotificationDisplay.vue
diff --git a/src/pages/dashboard/SubmissionSummaryModal/primaryItems/PrimaryBasicMetadata.vue b/src/pages/workflow/components/primary/WorkflowPrimaryBasicMetadata.vue
similarity index 100%
rename from src/pages/dashboard/SubmissionSummaryModal/primaryItems/PrimaryBasicMetadata.vue
rename to src/pages/workflow/components/primary/WorkflowPrimaryBasicMetadata.vue
diff --git a/src/pages/dashboard/SubmissionSummaryModal/primaryItems/ReviewRoundStatus.vue b/src/pages/workflow/components/primary/WorkflowReviewRoundStatus.vue
similarity index 100%
rename from src/pages/dashboard/SubmissionSummaryModal/primaryItems/ReviewRoundStatus.vue
rename to src/pages/workflow/components/primary/WorkflowReviewRoundStatus.vue
diff --git a/src/pages/dashboard/SubmissionSummaryModal/primaryItems/SubmissionStatus.vue b/src/pages/workflow/components/primary/WorkflowSubmissionStatus.vue
similarity index 100%
rename from src/pages/dashboard/SubmissionSummaryModal/primaryItems/SubmissionStatus.vue
rename to src/pages/workflow/components/primary/WorkflowSubmissionStatus.vue
diff --git a/src/pages/dashboard/SubmissionSummaryModal/publicationControls/WorkflowChangeSubmissionLanguage.vue b/src/pages/workflow/components/publication/WorkflowChangeSubmissionLanguage.vue
similarity index 89%
rename from src/pages/dashboard/SubmissionSummaryModal/publicationControls/WorkflowChangeSubmissionLanguage.vue
rename to src/pages/workflow/components/publication/WorkflowChangeSubmissionLanguage.vue
index 9013f0c54..be0ac0a39 100644
--- a/src/pages/dashboard/SubmissionSummaryModal/publicationControls/WorkflowChangeSubmissionLanguage.vue
+++ b/src/pages/workflow/components/publication/WorkflowChangeSubmissionLanguage.vue
@@ -18,7 +18,7 @@
import {computed} from 'vue';
import {useLocalize} from '@/composables/useLocalize';
import PkpButton from '@/components/Button/Button.vue';
-import {useSubmissionSummaryStore} from '../submissionSummaryStore';
+import {useWorkflowStore} from '@/pages/workflow/workflowStore';
const {t} = useLocalize();
@@ -31,7 +31,7 @@ const languageLabel = computed(
() => props.submission.metadataLocales[props.submission.locale],
);
-const store = useSubmissionSummaryStore();
+const store = useWorkflowStore();
function handleChangeLanguage() {
store.workflowChangeSubmissionLanguage();
diff --git a/src/pages/dashboard/SubmissionSummaryModal/primaryItems/PublicationEditDisabled.vue b/src/pages/workflow/components/publication/WorkflowPublicationEditDisabled.vue
similarity index 100%
rename from src/pages/dashboard/SubmissionSummaryModal/primaryItems/PublicationEditDisabled.vue
rename to src/pages/workflow/components/publication/WorkflowPublicationEditDisabled.vue
diff --git a/src/pages/dashboard/SubmissionSummaryModal/primaryItems/PublicationForm.vue b/src/pages/workflow/components/publication/WorkflowPublicationForm.vue
similarity index 100%
rename from src/pages/dashboard/SubmissionSummaryModal/primaryItems/PublicationForm.vue
rename to src/pages/workflow/components/publication/WorkflowPublicationForm.vue
diff --git a/src/pages/dashboard/SubmissionSummaryModal/primaryItems/PublicationJats.vue b/src/pages/workflow/components/publication/WorkflowPublicationJats.vue
similarity index 100%
rename from src/pages/dashboard/SubmissionSummaryModal/primaryItems/PublicationJats.vue
rename to src/pages/workflow/components/publication/WorkflowPublicationJats.vue
diff --git a/src/pages/workflow/PublicationSectionJats.vue b/src/pages/workflow/components/publication/WorkflowPublicationSectionJats.vue
similarity index 99%
rename from src/pages/workflow/PublicationSectionJats.vue
rename to src/pages/workflow/components/publication/WorkflowPublicationSectionJats.vue
index 5d481a141..005d3d03d 100644
--- a/src/pages/workflow/PublicationSectionJats.vue
+++ b/src/pages/workflow/components/publication/WorkflowPublicationSectionJats.vue
@@ -145,6 +145,7 @@ export default {
},
},
},
+ emits: ['set'],
data() {
return {
isLoading: false,
diff --git a/src/pages/dashboard/SubmissionSummaryModal/publicationControls/PublicationVersionControl.vue b/src/pages/workflow/components/publication/WorkflowPublicationVersionControl.vue
similarity index 94%
rename from src/pages/dashboard/SubmissionSummaryModal/publicationControls/PublicationVersionControl.vue
rename to src/pages/workflow/components/publication/WorkflowPublicationVersionControl.vue
index 37aadf11a..320832fc8 100644
--- a/src/pages/dashboard/SubmissionSummaryModal/publicationControls/PublicationVersionControl.vue
+++ b/src/pages/workflow/components/publication/WorkflowPublicationVersionControl.vue
@@ -27,7 +27,7 @@
import {computed} from 'vue';
import DropdownActions from '@/components/DropdownActions/DropdownActions.vue';
import {useLocalize} from '@/composables/useLocalize';
-import {useSubmissionSummaryStore} from '../submissionSummaryStore';
+import {useWorkflowStore} from '@/pages/workflow/workflowStore';
const props = defineProps({
submission: {type: Object, required: true},
@@ -97,9 +97,9 @@ const dropdownActionsProps = computed(() => {
return {label: t('publication.version.all'), actions};
});
-const summaryStore = useSubmissionSummaryStore();
+const workflowStore = useWorkflowStore();
function handleAction(publicationId) {
- summaryStore.selectPublicationId(publicationId);
+ workflowStore.selectPublicationId(publicationId);
}
diff --git a/src/pages/dashboard/SubmissionSummaryModal/components/WorkflowRecommendOnlyListingRecommendations.vue b/src/pages/workflow/components/secondary/WorkflowRecommendOnlyListingRecommendations.vue
similarity index 100%
rename from src/pages/dashboard/SubmissionSummaryModal/components/WorkflowRecommendOnlyListingRecommendations.vue
rename to src/pages/workflow/components/secondary/WorkflowRecommendOnlyListingRecommendations.vue
diff --git a/src/pages/dashboard/composables/useWorkflowActions.js b/src/pages/workflow/composables/useWorkflowActions.js
similarity index 94%
rename from src/pages/dashboard/composables/useWorkflowActions.js
rename to src/pages/workflow/composables/useWorkflowActions.js
index b2388b36a..17c7219ce 100644
--- a/src/pages/dashboard/composables/useWorkflowActions.js
+++ b/src/pages/workflow/composables/useWorkflowActions.js
@@ -5,11 +5,11 @@ import {useUrl} from '@/composables/useUrl';
import {useForm} from '@/composables/useForm';
import {useFetch} from '@/composables/useFetch';
import {useLegacyGridUrl} from '@/composables/useLegacyGridUrl';
-import ChangeSubmissionLanguage from '@/pages/workflow/ChangeSubmissionLanguage.vue';
+import WorkflowModalChangeSubmissionLanguage from '@/pages/workflow/modals/WorkflowChangeSubmissionLanguageModal.vue';
-import SelectRevisionFormModal from '../components/SelectRevisionFormModal.vue';
+import WorkflowSelectRevisionFormModal from '@/pages/workflow/modals/WorkflowSelectRevisionFormModal.vue';
-import {useWorkflowDecisions} from './useWorkflowDecisions';
+import {useWorkflowDecisions} from '@/pages/workflow/composables/useWorkflowDecisions';
export const Actions = {
WORKFLOW_VIEW_PUBLISHED_SUBMISSION: 'workflowViewPublishedSubmission',
@@ -94,7 +94,7 @@ export function useWorkflowActions({
// open modal
const {openSideModal} = useModal();
const {set, form, getValue} = useForm(selectRevisionDecisionForm);
- openSideModal(SelectRevisionFormModal, {
+ openSideModal(WorkflowSelectRevisionFormModal, {
formProps: form,
onSet: set,
onSuccess: () => {
@@ -112,7 +112,7 @@ export function useWorkflowActions({
const {openSideModal} = useModal();
const {set, form, getValue} = useForm(selectRevisionRecommendationForm);
- openSideModal(SelectRevisionFormModal, {
+ openSideModal(WorkflowSelectRevisionFormModal, {
formProps: form,
onSet: set,
onSuccess: () => {
@@ -302,7 +302,7 @@ export function useWorkflowActions({
function workflowChangeSubmissionLanguage({submission}) {
const {openSideModal} = useModal();
- openSideModal(ChangeSubmissionLanguage, {
+ openSideModal(WorkflowModalChangeSubmissionLanguage, {
publicationId: submission.currentPublicationId,
submissionId: submission.id,
});
diff --git a/src/pages/dashboard/SubmissionSummaryModal/composables/useWorkflowAuthorConfig.js b/src/pages/workflow/composables/useWorkflowAuthorConfig.js
similarity index 94%
rename from src/pages/dashboard/SubmissionSummaryModal/composables/useWorkflowAuthorConfig.js
rename to src/pages/workflow/composables/useWorkflowAuthorConfig.js
index eae7645fe..8101db906 100644
--- a/src/pages/dashboard/SubmissionSummaryModal/composables/useWorkflowAuthorConfig.js
+++ b/src/pages/workflow/composables/useWorkflowAuthorConfig.js
@@ -1,5 +1,5 @@
import {useLocalize} from '@/composables/useLocalize';
-import {Actions} from '../../composables/useWorkflowActions';
+import {Actions} from './useWorkflowActions';
import {useSubmission} from '@/composables/useSubmission';
const {hasSubmissionPassedStage, getOpenReviewAssignmentsForRound} =
@@ -19,7 +19,7 @@ function getHeaderItems({
const actions = [];
actions.push({
- component: 'ActionButton',
+ component: 'WorkflowActionButton',
props: {
label: t('editor.submissionLibrary'),
action: Actions.WORKFLOW_VIEW_LIBRARY,
@@ -88,7 +88,7 @@ export const WorkflowConfig = {
if (!selectedReviewRound) {
return [
{
- component: 'PrimaryBasicMetadata',
+ component: 'WorkflowPrimaryBasicMetadata',
props: {body: t('editor.review.notInitiated')},
},
];
@@ -102,7 +102,7 @@ export const WorkflowConfig = {
if (selectedReviewRound.round < currentReviewRound.round) {
items.push({
- component: 'PrimaryBasicMetadata',
+ component: 'WorkflowPrimaryBasicMetadata',
props: {
body: t(
'editor.submission.workflowDecision.submission.reviewRound',
@@ -113,7 +113,7 @@ export const WorkflowConfig = {
if (selectedReviewRound.id === currentReviewRound.id) {
items.push({
- component: 'ReviewRoundStatus',
+ component: 'WorkflowReviewRoundStatus',
props: {reviewRound: selectedReviewRound},
});
}
@@ -165,7 +165,7 @@ export const WorkflowConfig = {
)
) {
items.push({
- component: 'PrimaryBasicMetadata',
+ component: 'WorkflowPrimaryBasicMetadata',
props: {
body: t('editor.submission.workflowDecision.submission.production'),
},
@@ -197,7 +197,7 @@ export const WorkflowConfig = {
const items = [];
if (submission.status === pkp.const.STATUS_PUBLISHED) {
items.push({
- component: 'PrimaryBasicMetadata',
+ component: 'WorkflowPrimaryBasicMetadata',
props: {
body: t('editor.submission.workflowDecision.submission.published'),
},
@@ -232,7 +232,7 @@ export const PublicationConfig = {
const items = [];
if (selectedPublication.status === pkp.const.STATUS_PUBLISHED) {
items.push({
- component: 'PublicationEditDisabled',
+ component: 'WorkflowPublicationEditDisabled',
props: {},
});
}
@@ -246,7 +246,7 @@ export const PublicationConfig = {
const items = [];
items.push({
- component: 'PublicationVersionControl',
+ component: 'WorkflowPublicationVersionControl',
props: {
submission,
selectedPublicationId: selectedPublicationId,
@@ -273,7 +273,7 @@ export const PublicationConfig = {
}) => {
return [
{
- component: 'PublicationForm',
+ component: 'WorkflowPublicationForm',
props: {
formName: 'titleAbstract',
submission,
@@ -312,7 +312,7 @@ export const PublicationConfig = {
}) => {
return [
{
- component: 'PublicationForm',
+ component: 'WorkflowPublicationForm',
props: {
formName: 'metadata',
submission,
@@ -333,7 +333,7 @@ export const PublicationConfig = {
}) => {
return [
{
- component: 'PublicationForm',
+ component: 'WorkflowPublicationForm',
props: {
formName: 'reference',
submission,
diff --git a/src/pages/dashboard/composables/useWorkflowDecisions.js b/src/pages/workflow/composables/useWorkflowDecisions.js
similarity index 100%
rename from src/pages/dashboard/composables/useWorkflowDecisions.js
rename to src/pages/workflow/composables/useWorkflowDecisions.js
diff --git a/src/pages/dashboard/SubmissionSummaryModal/composables/useWorkflowEditorialConfig.js b/src/pages/workflow/composables/useWorkflowEditorialConfig.js
similarity index 92%
rename from src/pages/dashboard/SubmissionSummaryModal/composables/useWorkflowEditorialConfig.js
rename to src/pages/workflow/composables/useWorkflowEditorialConfig.js
index 3d6ac0475..d272a3fbe 100644
--- a/src/pages/dashboard/SubmissionSummaryModal/composables/useWorkflowEditorialConfig.js
+++ b/src/pages/workflow/composables/useWorkflowEditorialConfig.js
@@ -1,8 +1,8 @@
import {useLocalize} from '@/composables/useLocalize';
-import {Actions} from '../../composables/useWorkflowActions';
+import {Actions} from './useWorkflowActions';
import {useSubmission} from '@/composables/useSubmission';
-import {Actions as WorkflowActions} from '../../composables/useWorkflowActions';
-import {Actions as DecisionActions} from '../../composables/useWorkflowDecisions';
+import {Actions as WorkflowActions} from './useWorkflowActions';
+import {Actions as DecisionActions} from './useWorkflowDecisions';
const {hasSubmissionPassedStage, hasNotSubmissionStartedStage, getStageById} =
useSubmission();
@@ -29,7 +29,7 @@ function getHeaderItems({
if (submission.status === pkp.const.STATUS_PUBLISHED) {
actions.push({
- component: 'ActionButton',
+ component: 'WorkflowActionButton',
props: {
label: t('common.view'),
action: Actions.WORKFLOW_VIEW_PUBLISHED_SUBMISSION,
@@ -39,7 +39,7 @@ function getHeaderItems({
if (permissions.canAccessEditorialHistory) {
actions.push({
- component: 'ActionButton',
+ component: 'WorkflowActionButton',
props: {
label: t('editor.activityLog'),
action: Actions.WORKFLOW_VIEW_ACTIVITY_LOG,
@@ -47,7 +47,7 @@ function getHeaderItems({
});
}
actions.push({
- component: 'ActionButton',
+ component: 'WorkflowActionButton',
props: {
label: t('editor.submissionLibrary'),
action: Actions.WORKFLOW_VIEW_LIBRARY,
@@ -125,7 +125,7 @@ export const WorkflowConfig = {
}
items.push({
- component: 'ActionButton',
+ component: 'WorkflowActionButton',
props: {
label: t('editor.submission.decision.sendExternalReview'),
isPrimary: true,
@@ -134,7 +134,7 @@ export const WorkflowConfig = {
});
items.push({
- component: 'ActionButton',
+ component: 'WorkflowActionButton',
props: {
label: t('editor.submission.decision.skipReview'),
isSecondary: true,
@@ -143,7 +143,7 @@ export const WorkflowConfig = {
});
items.push({
- component: 'ActionButton',
+ component: 'WorkflowActionButton',
props: {
label: t('editor.submission.decision.decline'),
isWarnable: true,
@@ -160,7 +160,7 @@ export const WorkflowConfig = {
if (!selectedReviewRound) {
return [
{
- component: 'PrimaryBasicMetadata',
+ component: 'WorkflowPrimaryBasicMetadata',
props: {body: t('editor.review.notInitiated')},
},
];
@@ -174,7 +174,7 @@ export const WorkflowConfig = {
if (selectedReviewRound.round < currentReviewRound.round) {
items.push({
- component: 'PrimaryBasicMetadata',
+ component: 'WorkflowPrimaryBasicMetadata',
props: {
body: t(
'editor.submission.workflowDecision.submission.reviewRound',
@@ -185,7 +185,7 @@ export const WorkflowConfig = {
if (selectedReviewRound.id === currentReviewRound.id) {
items.push({
- component: 'ReviewRoundStatus',
+ component: 'WorkflowReviewRoundStatus',
props: {reviewRound: selectedReviewRound},
});
}
@@ -298,7 +298,7 @@ export const WorkflowConfig = {
};
items.push({
- component: 'ActionButton',
+ component: 'WorkflowActionButton',
props: {
label: t('dashboard.summary.requestRevisions'),
isSecondary: true,
@@ -308,7 +308,7 @@ export const WorkflowConfig = {
});
items.push({
- component: 'ActionButton',
+ component: 'WorkflowActionButton',
props: {
label: t('editor.submission.decision.accept'),
action: DecisionActions.DECISION_ACCEPT,
@@ -318,7 +318,7 @@ export const WorkflowConfig = {
});
items.push({
- component: 'ActionButton',
+ component: 'WorkflowActionButton',
props: {
label: t('editor.submission.createNewRound'),
action: DecisionActions.DECISION_NEW_EXTERNAL_ROUND,
@@ -327,7 +327,7 @@ export const WorkflowConfig = {
});
items.push({
- component: 'ActionButton',
+ component: 'WorkflowActionButton',
props: {
label: t('editor.submission.decision.cancelReviewRound'),
isWarnable: true,
@@ -336,7 +336,7 @@ export const WorkflowConfig = {
});
items.push({
- component: 'ActionButton',
+ component: 'WorkflowActionButton',
props: {
label: t('editor.submission.decision.decline'),
isWarnable: true,
@@ -358,7 +358,7 @@ export const WorkflowConfig = {
)
) {
items.push({
- component: 'PrimaryBasicMetadata',
+ component: 'WorkflowPrimaryBasicMetadata',
props: {
body: t('editor.submission.workflowDecision.submission.production'),
},
@@ -422,7 +422,7 @@ export const WorkflowConfig = {
}
items.push({
- component: 'ActionButton',
+ component: 'WorkflowActionButton',
props: {
label: t('editor.submission.decision.sendToProduction'),
isPrimary: true,
@@ -431,7 +431,7 @@ export const WorkflowConfig = {
});
items.push({
- component: 'ActionButton',
+ component: 'WorkflowActionButton',
props: {
label: t('editor.submission.decision.backFromCopyediting'),
isWarnable: true,
@@ -447,7 +447,7 @@ export const WorkflowConfig = {
const items = [];
if (submission.status === pkp.const.STATUS_PUBLISHED) {
items.push({
- component: 'PrimaryBasicMetadata',
+ component: 'WorkflowPrimaryBasicMetadata',
props: {
body: t('editor.submission.workflowDecision.submission.published'),
},
@@ -507,7 +507,7 @@ export const WorkflowConfig = {
}
items.push({
- component: 'ActionButton',
+ component: 'WorkflowActionButton',
props: {
label: t('editor.submission.schedulePublication'),
isPrimary: true,
@@ -518,7 +518,7 @@ export const WorkflowConfig = {
if (submission.status === pkp.const.STATUS_QUEUED) {
items.push({
- component: 'ActionButton',
+ component: 'WorkflowActionButton',
props: {
label: t('editor.submission.decision.backToCopyediting'),
isWarnable: true,
@@ -542,7 +542,7 @@ export const PublicationConfig = {
const items = [];
if (selectedPublication.status === pkp.const.STATUS_PUBLISHED) {
items.push({
- component: 'PublicationEditDisabled',
+ component: 'WorkflowPublicationEditDisabled',
props: {},
});
}
@@ -571,7 +571,7 @@ export const PublicationConfig = {
}
items.push({
- component: 'PublicationVersionControl',
+ component: 'WorkflowPublicationVersionControl',
props: {
submission,
selectedPublicationId: selectedPublicationId,
@@ -600,7 +600,7 @@ export const PublicationConfig = {
)
) {
items.push({
- component: 'ActionButton',
+ component: 'WorkflowActionButton',
props: {
label: t('common.preview'),
isSecondary: true,
@@ -610,7 +610,7 @@ export const PublicationConfig = {
}
items.push({
- component: 'ActionButton',
+ component: 'WorkflowActionButton',
props: {
// {{ submission.status === getConstant('STATUS_PUBLISHED') ? publishLabel : schedulePublicationLabel }}
@@ -625,7 +625,7 @@ export const PublicationConfig = {
});
} else if (selectedPublication.status === pkp.const.STATUS_SCHEDULED) {
items.push({
- component: 'ActionButton',
+ component: 'WorkflowActionButton',
props: {
label: t('dashboard.summary.preview'),
isSecondary: true,
@@ -634,7 +634,7 @@ export const PublicationConfig = {
});
items.push({
- component: 'ActionButton',
+ component: 'WorkflowActionButton',
props: {
label: t('publication.unschedule'),
isWarnable: true,
@@ -643,7 +643,7 @@ export const PublicationConfig = {
});
} else if (selectedPublication.status === pkp.const.STATUS_PUBLISHED) {
items.push({
- component: 'ActionButton',
+ component: 'WorkflowActionButton',
props: {
label: t('publication.unpublish'),
isWarnable: true,
@@ -656,7 +656,7 @@ export const PublicationConfig = {
if (latestPublication.id === selectedPublication.id) {
items.push({
- component: 'ActionButton',
+ component: 'WorkflowActionButton',
props: {
label: t('publication.createVersion'),
isSecondary: true,
@@ -678,7 +678,7 @@ export const PublicationConfig = {
}) => {
return [
{
- component: 'PublicationForm',
+ component: 'WorkflowPublicationForm',
props: {
formName: 'titleAbstract',
submission,
@@ -718,7 +718,7 @@ export const PublicationConfig = {
}) => {
return [
{
- component: 'PublicationForm',
+ component: 'WorkflowPublicationForm',
props: {
formName: 'metadata',
submission,
@@ -739,7 +739,7 @@ export const PublicationConfig = {
}) => {
return [
{
- component: 'PublicationForm',
+ component: 'WorkflowPublicationForm',
props: {
formName: 'reference',
submission,
@@ -759,7 +759,7 @@ export const PublicationConfig = {
}) => {
return [
{
- component: 'PublicationForm',
+ component: 'WorkflowPublicationForm',
props: {
formName: 'identifier',
submission,
@@ -779,7 +779,7 @@ export const PublicationConfig = {
}) => {
return [
{
- component: 'PublicationJats',
+ component: 'WorkflowPublicationJats',
props: {
canEditPublication: permissions.canEditPublication,
submission,
@@ -812,7 +812,7 @@ export const PublicationConfig = {
}) => {
return [
{
- component: 'PublicationForm',
+ component: 'WorkflowPublicationForm',
props: {
formName: 'permissionDisclosure',
submission,
@@ -832,7 +832,7 @@ export const PublicationConfig = {
}) => {
return [
{
- component: 'PublicationForm',
+ component: 'WorkflowPublicationForm',
props: {
formName: 'issue',
submission,
diff --git a/src/pages/dashboard/SubmissionSummaryModal/composables/useWorkflowNavigationConfig.js b/src/pages/workflow/composables/useWorkflowNavigationConfig.js
similarity index 100%
rename from src/pages/dashboard/SubmissionSummaryModal/composables/useWorkflowNavigationConfig.js
rename to src/pages/workflow/composables/useWorkflowNavigationConfig.js
diff --git a/src/pages/workflow/ChangeSubmissionLanguage.vue b/src/pages/workflow/modals/WorkflowChangeSubmissionLanguageModal.vue
similarity index 85%
rename from src/pages/workflow/ChangeSubmissionLanguage.vue
rename to src/pages/workflow/modals/WorkflowChangeSubmissionLanguageModal.vue
index c0e8d93e7..8f28641e5 100644
--- a/src/pages/workflow/ChangeSubmissionLanguage.vue
+++ b/src/pages/workflow/modals/WorkflowChangeSubmissionLanguageModal.vue
@@ -29,7 +29,7 @@
import {defineProps} from 'vue';
import PkpForm from '@/components/Form/Form.vue';
import SideModalBody from '@/components/Modal/SideModalBody.vue';
-import {useChangeSubmissionLanguageStore} from '@/pages/workflow/changeSubmissionLanguageStore';
+import {useWorkflowChangeSubmissionLanguageModalStore} from './workflowChangeSubmissionLanguageModalStore';
const props = defineProps({
publicationId: {
@@ -41,7 +41,7 @@ const props = defineProps({
required: true,
},
});
-const store = useChangeSubmissionLanguageStore({
+const store = useWorkflowChangeSubmissionLanguageModalStore({
form: props.form,
publicationId: props.publicationId,
submissionId: props.submissionId,
diff --git a/src/pages/workflow/SelectRevisionDecisionModal.vue b/src/pages/workflow/modals/WorkflowSelectRevisionDecisionModalLegacyWorkflow.vue
similarity index 100%
rename from src/pages/workflow/SelectRevisionDecisionModal.vue
rename to src/pages/workflow/modals/WorkflowSelectRevisionDecisionModalLegacyWorkflow.vue
diff --git a/src/pages/dashboard/components/SelectRevisionFormModal.vue b/src/pages/workflow/modals/WorkflowSelectRevisionFormModal.vue
similarity index 100%
rename from src/pages/dashboard/components/SelectRevisionFormModal.vue
rename to src/pages/workflow/modals/WorkflowSelectRevisionFormModal.vue
diff --git a/src/pages/workflow/changeSubmissionLanguageStore.js b/src/pages/workflow/modals/workflowChangeSubmissionLanguageModalStore.js
similarity index 95%
rename from src/pages/workflow/changeSubmissionLanguageStore.js
rename to src/pages/workflow/modals/workflowChangeSubmissionLanguageModalStore.js
index e55372d0a..447095c6f 100644
--- a/src/pages/workflow/changeSubmissionLanguageStore.js
+++ b/src/pages/workflow/modals/workflowChangeSubmissionLanguageModalStore.js
@@ -5,9 +5,8 @@ import {useFetch} from '@/composables/useFetch';
import {useForm} from '@/composables/useForm';
import {useLocalize} from '@/composables/useLocalize';
-export const useChangeSubmissionLanguageStore = defineComponentStore(
- 'changeSubmissionLanguage',
- (props) => {
+export const useWorkflowChangeSubmissionLanguageModalStore =
+ defineComponentStore('workflowChangeSubmissionLanguageModal', (props) => {
/**
* Variables and init data
*/
@@ -132,5 +131,4 @@ export const useChangeSubmissionLanguageStore = defineComponentStore(
.find(({name}) => name === 'locale')
.options.find(({value}) => value === locale).label;
}
- },
-);
+ });
diff --git a/src/pages/workflow/workflowStore.js b/src/pages/workflow/workflowStore.js
new file mode 100644
index 000000000..18bb57e04
--- /dev/null
+++ b/src/pages/workflow/workflowStore.js
@@ -0,0 +1,413 @@
+import {computed, ref, watch} from 'vue';
+
+import {defineComponentStore} from '@/utils/defineComponentStore';
+import {useFetch} from '@/composables/useFetch';
+import {useUrl} from '@/composables/useUrl';
+import {EditorialRoles, useCurrentUser} from '@/composables/useCurrentUser';
+import {
+ useWorkflowActions,
+ Actions as WorkflowActions,
+} from './composables/useWorkflowActions';
+
+import {
+ useWorkflowDecisions,
+ Actions as DecisionActions,
+} from './composables/useWorkflowDecisions';
+
+import {DashboardPageTypes} from '../dashboard/dashboardPageStore';
+
+import {useWorkflowEditorialConfig} from './composables/useWorkflowEditorialConfig';
+import {useWorkflowAuthorConfig} from './composables/useWorkflowAuthorConfig';
+
+import {useDataChangedProvider} from '@/composables/useDataChangedProvider';
+import {useWorkflowNavigationConfig} from './composables/useWorkflowNavigationConfig';
+import {useSubmission} from '@/composables/useSubmission';
+import {useSideMenu} from '@/composables/useSideMenu';
+
+export const useWorkflowStore = defineComponentStore('workflow', (props) => {
+ const dashboardPage = props.pageInitConfig.dashboardPage;
+
+ const {getReviewRound, getCurrentReviewRound} = useSubmission();
+
+ /**
+ * Fetch submission details
+ */
+ const {apiUrl: submissionApiUrl} = useUrl(
+ `submissions/${encodeURIComponent(props.submissionId)}`,
+ );
+ const {data: submission, fetch: fetchSubmission} = useFetch(submissionApiUrl);
+
+ /** Fetch publications */
+ const selectedPublicationId = ref(null);
+ function selectPublicationId(publicationId) {
+ if (selectedPublicationId.value !== publicationId) {
+ selectedPublicationId.value = publicationId;
+ selectedPublication.value = null;
+ fetchSelectedPublication();
+ }
+ }
+ const selectedPublicationUrlRelative = computed(
+ () =>
+ `submissions/${encodeURIComponent(props.submissionId)}/publications/${selectedPublicationId.value}`,
+ );
+ const {apiUrl: selectedPublicationUrl} = useUrl(
+ selectedPublicationUrlRelative,
+ );
+ const {data: selectedPublication, fetch: fetchSelectedPublication} = useFetch(
+ selectedPublicationUrl,
+ );
+
+ /**
+ * Data changes tracking
+ */
+ const {triggerDataChange} = useDataChangedProvider(() => {
+ return Promise.all([fetchSubmission(), fetchSelectedPublication()]);
+ });
+
+ /** Current publication is fetched always when the new submission is fetched */
+ watch(submission, (newSubmission, oldSubmission) => {
+ // Once the submission is fetched, select relevant stage in navigaton
+ if (!oldSubmission && newSubmission) {
+ selectedPublicationId.value =
+ newSubmission.publications[newSubmission.publications.length - 1].id;
+ fetchSelectedPublication();
+
+ if (
+ newSubmission.stageId === pkp.const.WORKFLOW_STAGE_ID_EXTERNAL_REVIEW
+ ) {
+ setActiveItemKey(
+ `workflow_${newSubmission.stageId}_${
+ getCurrentReviewRound(
+ newSubmission,
+ pkp.const.WORKFLOW_STAGE_ID_EXTERNAL_REVIEW,
+ )?.id
+ }`,
+ );
+ } else if (
+ newSubmission.stageId === pkp.const.WORKFLOW_STAGE_ID_PRODUCTION &&
+ newSubmission.status !== pkp.const.STATUS_QUEUED
+ ) {
+ setActiveItemKey(`publication_titleAbstract`);
+ } else {
+ setActiveItemKey(`workflow_${newSubmission.stageId}`);
+ }
+ }
+ });
+
+ fetchSubmission();
+
+ /**
+ * UI Permissions
+ */
+
+ const {getActiveStage, getStageById} = useSubmission();
+ const {hasCurrentUserAtLeastOneRole} = useCurrentUser();
+
+ function hasIntersection(arr1, arr2) {
+ const set = new Set(arr1);
+ return arr2.some((item) => set.has(item));
+ }
+
+ const permissions = computed(() => {
+ // View title, metadata, etc.
+ let canAccessPublication = false;
+ let canEditPublication = false;
+ // Access to galleys and issue entry
+ let canAccessProduction = false;
+ // Ability to publish, unpublish and create versions
+ let canPublish = false;
+ // Access to activity log
+ let canAccessEditorialHistory = false;
+ // Changing submission language
+ let canChangeSubmissionLanguage = false;
+
+ let accessibleStages = [];
+
+ if (!submission.value) {
+ return {
+ canAccessPublication,
+ canAccessProduction,
+ canEditPublication,
+ canPublish,
+ canAccessEditorialHistory,
+ accessibleStages,
+ };
+ }
+
+ const activeStage = getActiveStage(submission.value);
+ const productionStage = getStageById(
+ submission.value,
+ pkp.const.WORKFLOW_STAGE_ID_PRODUCTION,
+ );
+
+ submission.value.stages.forEach((stage) => {
+ if (stage.currentUserAssignedRoles.length) {
+ accessibleStages.push(stage.id);
+ }
+ });
+
+ // TODO this will be replaced by with one flag from backend
+ productionStage.stageAssignments
+ .filter(
+ (stageAssignment) => stageAssignment.userId === pkp.currentUser.id,
+ )
+ .forEach((stageAssignment) => {
+ if (stageAssignment.canChangeMetadata) {
+ canEditPublication = true;
+ }
+ });
+ if (hasCurrentUserAtLeastOneRole([pkp.const.ROLE_ID_MANAGER])) {
+ canEditPublication = true;
+ }
+
+ if (
+ selectedPublication.value &&
+ selectedPublication.value?.status === pkp.const.STATUS_PUBLISHED
+ ) {
+ canEditPublication = false;
+ }
+
+ if (
+ hasIntersection(activeStage.currentUserAssignedRoles, [
+ ...EditorialRoles,
+ pkp.const.ROLE_ID_AUTHOR,
+ ])
+ ) {
+ canAccessPublication = true;
+
+ if (
+ hasIntersection(productionStage.currentUserAssignedRoles, [
+ ...EditorialRoles,
+ pkp.const.ROLE_ID_AUTHOR,
+ ])
+ ) {
+ canAccessProduction = true;
+ }
+ if (
+ !productionStage.currentUserCanRecommendOnly &&
+ hasIntersection(productionStage.currentUserAssignedRoles, [
+ pkp.const.ROLE_ID_SITE_ADMIN,
+ pkp.const.ROLE_ID_MANAGER,
+ ])
+ ) {
+ canPublish = true;
+ }
+ }
+
+ if (
+ hasIntersection(activeStage.currentUserAssignedRoles, [
+ pkp.const.ROLE_ID_MANAGER,
+ pkp.const.ROLE_ID_SITE_ADMIN,
+ pkp.const.ROLE_ID_SUB_EDITOR,
+ ])
+ ) {
+ canAccessEditorialHistory = true;
+ }
+
+ if (canPublish || canEditPublication) {
+ canChangeSubmissionLanguage = true;
+ }
+
+ return {
+ canAccessPublication,
+ canAccessProduction,
+ canEditPublication,
+ canPublish,
+ canAccessEditorialHistory,
+ canChangeSubmissionLanguage,
+ accessibleStages,
+ };
+ });
+
+ /**
+ * Handling navigation
+ */
+ const {getMenuItems} = useWorkflowNavigationConfig(props.pageInitConfig);
+ const menuItems = computed(() => {
+ if (!submission.value) {
+ return [];
+ }
+
+ return getMenuItems({
+ submission: submission.value,
+ permissions: permissions.value,
+ });
+ });
+
+ function navigateToMenu({key}) {
+ setActiveItemKey(key);
+ return;
+ }
+
+ const {
+ sideMenuProps,
+ setExpandedKeys,
+ setActiveItemKey,
+ selectedItem: selectedMenuItem,
+ } = useSideMenu(menuItems);
+
+ const selectedMenuState = computed(() => {
+ return selectedMenuItem.value?.actionArgs || {};
+ });
+
+ setExpandedKeys([
+ 'workflow',
+ 'publication',
+ `workflow_${pkp.const.WORKFLOW_STAGE_ID_EXTERNAL_REVIEW}`,
+ ]);
+
+ const selectedReviewRound = computed(() => {
+ if (!selectedMenuState.value.reviewRoundId) {
+ return null;
+ }
+ const reviewRound = getReviewRound(
+ submission.value,
+ selectedMenuState.value.reviewRoundId,
+ );
+ return reviewRound;
+ });
+
+ /**
+ * Expose workflow actions
+ *
+ */
+ const _workflowActionsFns = useWorkflowActions(props.pageInitConfig);
+ const workflowActions = Object.values(WorkflowActions).reduce(
+ (acc, actionName) => {
+ acc[actionName] = (noArgs, finishedCallback = null) =>
+ _workflowActionsFns[actionName](
+ {
+ submission: submission.value,
+ selectedPublication: selectedPublication.value,
+ reviewRoundId: selectedReviewRound.value?.id,
+ store,
+ },
+ (finishedData) => {
+ triggerDataChange();
+ if (finishedCallback) {
+ finishedCallback(finishedData);
+ }
+ },
+ );
+ return acc;
+ },
+ {},
+ );
+
+ /**
+ * Expose decision functions
+ *
+ * */
+ const _workflowDecisionsFns = useWorkflowDecisions();
+ const decisionActions = Object.values(DecisionActions).reduce(
+ (acc, actionName) => {
+ acc[actionName] = (noArgs) =>
+ _workflowDecisionsFns[actionName]({
+ submission: submission.value,
+ selectedPublication: selectedPublication.value,
+ reviewRoundId: selectedReviewRound.value?.id,
+ });
+ return acc;
+ },
+ {},
+ );
+
+ /**
+ * Items
+ *
+ * */
+
+ const _workflowEditorialConfigFns =
+ dashboardPage === DashboardPageTypes.EDITORIAL_DASHBOARD
+ ? useWorkflowEditorialConfig()
+ : useWorkflowAuthorConfig();
+
+ const stageTitle = computed(() => {
+ return selectedMenuState.value?.title || '';
+ });
+
+ function _getItemsArgs() {
+ return {
+ selectedMenuState: selectedMenuState.value,
+ submission: submission.value,
+ pageInitConfig: props.pageInitConfig,
+ selectedPublication: selectedPublication.value,
+ selectedPublicationId: selectedPublicationId.value,
+ selectedReviewRound: selectedReviewRound.value,
+ permissions: permissions.value,
+ };
+ }
+
+ /** Header Actions */
+ const headerItems = computed(() => {
+ return _workflowEditorialConfigFns.getHeaderItems({
+ submission: submission.value,
+ selectedPublication: selectedPublication.value,
+ publicationSettings: props.pageInitConfig.publicationSettings,
+ permissions: permissions.value,
+ });
+ });
+
+ const primaryItems = computed(() => {
+ return _workflowEditorialConfigFns.getPrimaryItems(_getItemsArgs());
+ });
+
+ const secondaryItems = computed(() => {
+ return _workflowEditorialConfigFns.getSecondaryItems(_getItemsArgs());
+ });
+
+ const actionItems = computed(() => {
+ return _workflowEditorialConfigFns.getActionItems(_getItemsArgs());
+ });
+
+ const publicationControlsLeft = computed(() => {
+ return _workflowEditorialConfigFns.getPublicationControlsLeft(
+ _getItemsArgs(),
+ );
+ });
+
+ const publicationControlsRight = computed(() => {
+ return _workflowEditorialConfigFns.getPublicationControlsRight(
+ _getItemsArgs(),
+ );
+ });
+
+ const store = {
+ dashboardPage,
+ submission,
+ selectedPublication,
+ selectPublicationId,
+
+ /**
+ * Navigation
+ * */
+ selectedMenuItem,
+ sideMenuProps,
+ selectedMenuState,
+ navigateToMenu,
+
+ /** Actions
+ *
+ */
+ ...workflowActions,
+ ...decisionActions,
+
+ /**
+ * Summary
+ */
+ stageTitle,
+ headerItems,
+ primaryItems,
+ secondaryItems,
+ actionItems,
+ publicationControlsLeft,
+ publicationControlsRight,
+
+ /**
+ * Expose for extensions
+ */
+
+ _workflowActionsFns,
+ };
+ return store;
+});