Skip to content

Commit 243ead3

Browse files
pkp/pkp-lib#11923 Render new Tasks/Discussions UI on the submission review page, Apply template API call (#719)
* pkp/pkp-lib#11825 Directly call participant API instead of using participantMaagerStore for fetching participant options * pkp/pkp-lib#11825 Update source of startedBy name * pkp/pkp-lib#11825 Remove unused discussions prop * pkp/pkp-lib#11825 Fix access configuration roles to manage tasks/discussions * pkp/pkp-lib#11825 Add DiscussionManagerReviewer component to use for reviwers page * pkp/pkp-lib#11825 Fix access config to allow discussion manager for reviewers * pkp/pkp-lib#11825 Update mapping for participants options * pkp/pkp-lib#11825 Re-add deleted comment on adding site admin as a participant * pkp/pkp-lib#11825 Disable Edit button when task/discussion is still loading * pkp/pkp-lib#11825 Disable task/discussion form when apply template api is loading * pkp/pkp-lib#11825 Set correct value for task/discussion template type * pkp/pkp-lib#11825 Set correct attribute for template discussion text * pkp/pkp-lib#11825 Call apply template api when selecting a template from the task/discussion form * pkp/pkp-lib#11825 Use showFullScreenSpinner to display full screen loader when applying a template * pkp/pkp-lib#11825 Remove use of useWorkflowDataSubmissionPublication and directly call submission api * pkp/pkp-lib#11825 Rename file DiscussionManagerFormDisplay with DiscussionManagerFormDisplayModal * pkp/pkp-lib#11825 Remove novalidate and add button type in templates selection list
1 parent 6186e2e commit 243ead3

12 files changed

+178
-90
lines changed

src/components/Container/Container.vue

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import PkpForm from '@/components/Form/Form.vue';
44
import SelectReviewerListPanel from '@/components/ListPanel/users/SelectReviewerListPanel.vue';
55
import SubmissionsListPanel from '@/components/ListPanel/submissions/SubmissionsListPanel.vue';
66
import ReviewerManagerReadReviewModal from '@/managers/ReviewerManager/ReviewerManagerReadReviewModal.vue';
7+
import DiscussionManagerReviewer from '@/managers/DiscussionManager/DiscussionManagerReviewer.vue';
78
89
export default {
910
name: 'Container',
@@ -13,6 +14,7 @@ export default {
1314
SelectReviewerListPanel,
1415
SubmissionsListPanel,
1516
ReviewerManagerReadReviewModal,
17+
DiscussionManagerReviewer,
1618
},
1719
data() {
1820
return {

src/managers/DiscussionManager/DiscussionManager.stories.js

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import {within, userEvent} from 'storybook/test';
22
import {http, HttpResponse} from 'msw';
3+
import {useDate} from '@/composables/useDate';
34
import DiscussionManager from './DiscussionManager.vue';
45
import {DiscussionsDataMock} from '@/mockFactories/discussionMock';
56
import {TemplatesDataMock} from '@/mockFactories/taskDiscussionTemplates';
@@ -24,6 +25,8 @@ const baseArgs = {
2425
submissionStageId: pkp.const.WORKFLOW_STAGE_ID_SUBMISSION,
2526
};
2627

28+
const {getRelativeTargetDate} = useDate();
29+
2730
const renderComponent = (args) => ({
2831
components: {DiscussionManager},
2932
setup() {
@@ -89,6 +92,24 @@ DiscussionsDataMock.forEach((discussion) => {
8992
);
9093
});
9194

95+
TemplatesDataMock.forEach((template) => {
96+
mswHandlers.push(
97+
http.get(
98+
`https://mock/index.php/publicknowledge/api/v1/submissions/19/stages/1/tasks/fromTemplate/${template.id}`,
99+
() => {
100+
return HttpResponse.json({
101+
...template,
102+
dateDue: getRelativeTargetDate(template.dueInterval),
103+
participants: template.userGroups.filter(({id}) =>
104+
[2, 3, 5].includes(id),
105+
),
106+
notes: [{contents: template.description}],
107+
});
108+
},
109+
),
110+
);
111+
});
112+
92113
export const Default = {
93114
render: renderComponent,
94115
args: baseArgs,

src/managers/DiscussionManager/DiscussionManager.vue

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,6 @@ const Components = {
109109
const props = defineProps({
110110
submission: {type: Object, required: true},
111111
submissionStageId: {type: Number, required: true},
112-
discussions: {type: Array, required: true},
113112
});
114113
115114
const discussionManagerStore = useDiscussionManagerStore(props);

src/managers/DiscussionManager/DiscussionManagerFormDisplay.vue renamed to src/managers/DiscussionManager/DiscussionManagerFormDisplayModal.vue

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,10 @@
1313
<Spinner v-if="isLoadingWorkItem"></Spinner>
1414
</template>
1515
<template v-if="allowEdit" #actions>
16-
<PkpButton :disabled="isWorkItemClosed" @click="editForm">
16+
<PkpButton
17+
:disabled="isWorkItemClosed || isLoadingWorkItem"
18+
@click="editForm"
19+
>
1720
{{ t('common.edit') }}
1821
</PkpButton>
1922
</template>
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
<template>
2+
<template v-if="submission">
3+
<DiscussionManager
4+
:submission="submission"
5+
:submission-stage-id="submissionStageId"
6+
></DiscussionManager>
7+
</template>
8+
</template>
9+
10+
<script setup>
11+
import {useFetch} from '@/composables/useFetch';
12+
import {useUrl} from '@/composables/useUrl';
13+
import DiscussionManager from './DiscussionManager.vue';
14+
15+
const props = defineProps({
16+
submissionId: {type: String, required: true},
17+
submissionStageId: {type: Number, required: true},
18+
});
19+
20+
const {apiUrl: submissionApiUrl} = useUrl(
21+
`submissions/${encodeURIComponent(props.submissionId)}`,
22+
);
23+
const {data: submission, fetch: fetchSubmission} = useFetch(submissionApiUrl);
24+
fetchSubmission();
25+
</script>

src/managers/DiscussionManager/DiscussionManagerTaskInfo.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
<FormDisplayItemBasic
2424
heading-element="h2"
2525
:heading="t('task.startedBy')"
26-
:value="workItem?.startedBy"
26+
:value="workItem?.startedByName"
2727
/>
2828
<FormDisplayItemBasic
2929
heading-element="h2"

src/managers/DiscussionManager/DiscussionManagerTemplates.vue

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
'border-light hover:border-hover': !isDisabled(template),
3131
}"
3232
:disabled="isDisabled(template)"
33+
type="button"
3334
@click="emit('selectTemplate', template)"
3435
>
3536
<div
@@ -38,7 +39,7 @@
3839
>
3940
<span class="uppercase">
4041
{{
41-
template.type === 'Task'
42+
isTaskTemplate(template)
4243
? t('submission.query.task')
4344
: t('discussion.name')
4445
}}
@@ -47,7 +48,7 @@
4748
</div>
4849
<div class="mt-1 text-base-normal text-secondary">
4950
{{
50-
template.type === 'Task'
51+
isTaskTemplate(template)
5152
? t('discussion.template.taskDescription')
5253
: t('discussion.template.discussionDescription')
5354
}}
@@ -86,6 +87,12 @@ const props = defineProps({
8687
});
8788
8889
function isDisabled(template) {
89-
return props.isTask && template.type === 'Discussion';
90+
return (
91+
props.isTask && template.type === pkp.const.EDITORIAL_TASK_TYPE_DISCUSSION
92+
);
93+
}
94+
95+
function isTaskTemplate(template) {
96+
return template.type === pkp.const.EDITORIAL_TASK_TYPE_TASK;
9097
}
9198
</script>

src/managers/DiscussionManager/useDiscussionManagerActions.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import {useFetch} from '../../composables/useFetch';
44
import {useUrl} from '../../composables/useUrl';
55
import {useDiscussionManagerStatusUpdater} from './useDiscussionManagerStatusUpdater';
66
import DiscussionManagerFormModal from './DiscussionManagerFormModal.vue';
7-
import DiscussionManagerFormDisplay from './DiscussionManagerFormDisplay.vue';
7+
import DiscussionManagerFormDisplayModal from './DiscussionManagerFormDisplayModal.vue';
88

99
export const Actions = {
1010
TASKS_AND_DISCUSSIONS_LIST: 'discussionList',
@@ -26,11 +26,11 @@ export function useDiscussionManagerActions() {
2626
const {openSideModal, closeSideModal} = useModal();
2727

2828
function onCloseFn() {
29-
closeSideModal(DiscussionManagerFormDisplay);
29+
closeSideModal(DiscussionManagerFormDisplayModal);
3030
}
3131

3232
openSideModal(
33-
DiscussionManagerFormDisplay,
33+
DiscussionManagerFormDisplayModal,
3434
{
3535
workItem,
3636
submission,

src/managers/DiscussionManager/useDiscussionManagerConfig.js

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -4,19 +4,14 @@ import {useCurrentUser} from '@/composables/useCurrentUser';
44

55
export const DiscussionManagerConfigurations = {
66
permissions: [
7-
{
8-
roles: [pkp.const.ROLE_ID_AUTHOR],
9-
actions: [
10-
Actions.TASKS_AND_DISCUSSIONS_LIST,
11-
Actions.TASKS_AND_DISCUSSIONS_SEARCH,
12-
],
13-
},
147
{
158
roles: [
169
pkp.const.ROLE_ID_SUB_EDITOR,
1710
pkp.const.ROLE_ID_MANAGER,
1811
pkp.const.ROLE_ID_SITE_ADMIN,
1912
pkp.const.ROLE_ID_ASSISTANT,
13+
pkp.const.ROLE_ID_AUTHOR,
14+
pkp.const.ROLE_ID_REVIEWER,
2015
],
2116
actions: [
2217
Actions.TASKS_AND_DISCUSSIONS_LIST,
@@ -42,7 +37,10 @@ export const DiscussionManagerConfigurations = {
4237

4338
export function useDiscussionManagerConfig() {
4439
const {t} = useLocalize();
45-
const {hasCurrentUserAtLeastOneAssignedRoleInStage} = useCurrentUser();
40+
const {
41+
hasCurrentUserAtLeastOneAssignedRoleInStage,
42+
isCurrentUserAssignedAsReviewer,
43+
} = useCurrentUser();
4644

4745
function getColumns() {
4846
const columns = [];
@@ -86,12 +84,13 @@ export function useDiscussionManagerConfig() {
8684
(action) => {
8785
return DiscussionManagerConfigurations.permissions.some((perm) => {
8886
return (
89-
perm.actions.includes(action) &&
90-
hasCurrentUserAtLeastOneAssignedRoleInStage(
91-
submission.value,
92-
submissionStageId,
93-
perm.roles,
94-
)
87+
(perm.actions.includes(action) &&
88+
hasCurrentUserAtLeastOneAssignedRoleInStage(
89+
submission.value,
90+
submissionStageId,
91+
perm.roles,
92+
)) ||
93+
isCurrentUserAssignedAsReviewer(submission.value)
9594
);
9695
});
9796
},

0 commit comments

Comments
 (0)