Skip to content

Commit c577c26

Browse files
committed
add reviewer mockups
1 parent 2f13f94 commit c577c26

File tree

7 files changed

+76
-25
lines changed

7 files changed

+76
-25
lines changed

public/globals.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1018,7 +1018,10 @@ window.pkp = {
10181018
'reviewer.reviewDueDate':'Review Response Due Date',
10191019
'reviewer.reviewTypes':'Review Types',
10201020
'reviewerInvitation.modal.message':'{$email} has been invited to review the submission "{$articleTitle}"<br><br> You can be updated about the user\'s descision on the reviewer panel in the review workflow or through email and OJS notifications',
1021-
'reviewerInvitation.modal.button':'View submission'
1021+
'reviewerInvitation.modal.button':'View submission',
1022+
'reviewerInvitation.reviewTypes.anonymusAuthorOrReviewer':'Anonymus Reviewer / Anonymus Author',
1023+
'reviewerInvitation.reviewTypes.disclosedAuthor':'Anonymus Reviewer / Disclosed Author',
1024+
'reviewerInvitation.reviewTypes.open':'Open'
10221025
},
10231026
tinyMCE: {
10241027
skinUrl: '/styles/tinymce',

src/pages/userInvitation/ReviewerReviewDetailsStep.vue

Lines changed: 29 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@
22
<FieldOptions
33
:is-required="false"
44
component="field-options"
5-
:all-errors="{}"
65
name="reviewTypes"
76
:label="t('reviewer.reviewTypes')"
87
type="radio"
98
:options="options"
9+
:all-errors="sectionErrors"
1010
@change="
1111
(fieldName, propName, newValue, localeKey) =>
1212
updateReviewDetails(index, fieldName, newValue)
@@ -19,7 +19,7 @@
1919
input-type="date"
2020
:is-required="true"
2121
value=""
22-
:all-errors="{}"
22+
:all-errors="sectionErrors"
2323
@change="
2424
(fieldName, propName, newValue, localeKey) =>
2525
updateReviewDetails(index, fieldName, newValue)
@@ -31,7 +31,7 @@
3131
input-type="date"
3232
:is-required="true"
3333
value=""
34-
:all-errors="{}"
34+
:all-errors="sectionErrors"
3535
@change="
3636
(fieldName, propName, newValue, localeKey) =>
3737
updateReviewDetails(index, fieldName, newValue)
@@ -40,30 +40,45 @@
4040
</div>
4141
</template>
4242
<script setup>
43-
import {defineProps} from 'vue';
43+
import {defineProps, computed} from 'vue';
4444
import FieldOptions from '@/components/Form/fields/FieldOptions.vue';
4545
import FieldText from '@/components/Form/fields/FieldText.vue';
4646
import {useLocalize} from '@/composables/useLocalize';
4747
import {useUserInvitationPageStore} from './UserInvitationPageStore';
4848
49-
defineProps({
50-
validateFields: {
51-
type: Array,
52-
default() {
53-
return null;
54-
},
55-
},
49+
const props = defineProps({
50+
validateFields: {type: Array, required: true},
5651
});
5752
5853
const store = useUserInvitationPageStore();
5954
const {t} = useLocalize();
6055
const options = [
61-
{value: 'anonymus', label: 'Anonymus Reviewer / Anonymus Author'},
62-
{value: 'disclosed', label: 'Anonymus Reviewer / Disclosed Author'},
63-
{value: 'open', label: 'open'},
56+
{
57+
value: 'anonymus',
58+
label: t('reviewerInvitation.reviewTypes.anonymusAuthorOrReviewer'),
59+
},
60+
{
61+
value: 'disclosed',
62+
label: t('reviewerInvitation.reviewTypes.disclosedAuthor'),
63+
},
64+
{value: 'open', label: t('reviewerInvitation.reviewTypes.open')},
6465
];
6566
67+
props.validateFields.forEach((field) => {
68+
store.updatePayload(field, '', false);
69+
});
70+
6671
function updateReviewDetails(index, fieldName, newValue) {
72+
delete store.errors[fieldName];
6773
store.updatePayload(fieldName, newValue, false);
6874
}
75+
76+
const sectionErrors = computed(() => {
77+
return props.validateFields.reduce((obj, key) => {
78+
if (store.errors[key]) {
79+
obj[key] = store.errors[key];
80+
}
81+
return obj;
82+
}, {});
83+
});
6984
</script>

src/pages/userInvitation/UserInvitationPage.stories.js

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ export const Reviewer = {
132132
msw: {
133133
handlers: [
134134
http.post(
135-
'https://mock/index.php/publicknowledge/api/v1/invitations/add/reviewerAccess',
135+
'https://mock/index.php/publicknowledge/api/v1/invitations/add/reviewerAccessInvite',
136136
() => {
137137
return HttpResponse.json({invitationId: 15});
138138
},
@@ -142,6 +142,7 @@ export const Reviewer = {
142142
async ({request}) => {
143143
const data = await request.json();
144144
let errors = {};
145+
console.log(data.invitationData);
145146

146147
data.invitationData.userGroupsToAdd.forEach((element, index) => {
147148
Object.keys(element).forEach((key) => {
@@ -166,6 +167,18 @@ export const Reviewer = {
166167
errors['givenName'] = ['This field is required'];
167168
}
168169

170+
if (data.invitationData.responseDueDate === '') {
171+
errors['responseDueDate'] = ['This field is required'];
172+
}
173+
174+
if (data.invitationData.reviewDueDate === '') {
175+
errors['reviewDueDate'] = ['This field is required'];
176+
}
177+
178+
if (data.invitationData.reviewTypes === '') {
179+
errors['reviewTypes'] = ['This field is required'];
180+
}
181+
169182
if (data.invitationData.emailComposer) {
170183
Object.keys(data.invitationData.emailComposer).forEach(
171184
(element) => {

src/pages/userInvitation/UserInvitationPage.vue

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@ import UserInvitationHeader from './UserInvitationHeader.vue';
9191
import UserInvitationDetailsFormStep from './UserInvitationDetailsFormStep.vue';
9292
import UserInvitationSearchFormStep from './UserInvitationSearchFormStep.vue';
9393
import UserInvitationEmailComposerStep from './UserInvitationEmailComposerStep.vue';
94+
import ReviewerReviewDetailsStep from './ReviewerReviewDetailsStep.vue';
9495
9596
const props = defineProps({
9697
/** steps for invite user */
@@ -140,5 +141,7 @@ const userInvitationComponents = {
140141
UserInvitationDetailsFormStep,
141142
UserInvitationSearchFormStep,
142143
UserInvitationEmailComposerStep,
144+
ReviewerReviewDetailsStep,
143145
};
146+
console.log(props);
144147
</script>

src/pages/userInvitation/UserInvitationPageStore.js

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@ import {useModal} from '@/composables/useModal';
77
export const useUserInvitationPageStore = defineComponentStore(
88
'userInvitationPage',
99
(pageInitConfig) => {
10-
const INVITATION_USER_ROLE_ASSIGNMENT = 'userRoleAssignment';
10+
const invitationUserRoleAssignment = 'userRoleAssignment';
11+
const invitationReviewerAccessInvite = 'reviewerAccessInvite';
1112
const {openDialog} = useModal();
1213
const {t} = useLocalize();
1314
/**
@@ -77,6 +78,14 @@ export const useUserInvitationPageStore = defineComponentStore(
7778
return currentStepIndex.value === steps.value.length - 1;
7879
});
7980

81+
const isUserRoleAssignment = computed(() => {
82+
return invitationType.value === invitationUserRoleAssignment;
83+
});
84+
85+
const isReviewerAccess = computed(() => {
86+
return invitationType.value === invitationReviewerAccessInvite;
87+
});
88+
8089
/**
8190
* Add a step change to the browser history so the
8291
* user can use the browser's back button
@@ -341,7 +350,7 @@ export const useUserInvitationPageStore = defineComponentStore(
341350
openDialog({
342351
title: t('userInvitation.modal.title'),
343352
message:
344-
invitationType.value === INVITATION_USER_ROLE_ASSIGNMENT
353+
invitationType.value === invitationUserRoleAssignment
345354
? t('userInvitation.modal.message', {
346355
email: invitationPayload.value.inviteeEmail,
347356
})
@@ -352,7 +361,7 @@ export const useUserInvitationPageStore = defineComponentStore(
352361
actions: [
353362
{
354363
label:
355-
invitationType.value === INVITATION_USER_ROLE_ASSIGNMENT
364+
invitationType.value === invitationUserRoleAssignment
356365
? t('userInvitation.modal.button')
357366
: t('reviewerInvitation.modal.button'),
358367
callback: (close) => {
@@ -423,6 +432,8 @@ export const useUserInvitationPageStore = defineComponentStore(
423432
registerActionForStepId,
424433
emailTemplatesApiUrl,
425434
invitationUserData,
435+
isUserRoleAssignment,
436+
isReviewerAccess,
426437

427438
currentStep,
428439
currentStepIndex,

src/pages/userInvitation/UserInvitationUserGroupsTable.vue

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@
6666
<TableCell>
6767
<FieldSelect
6868
name="userGroupId"
69+
:disabled="store.isReviewerAccess"
6970
:label="t('invitation.role.selectRole')"
7071
:is-required="true"
7172
:value="userGroupToAdd.userGroupId"
@@ -119,8 +120,9 @@
119120
<TableCell>
120121
<PkpButton
121122
v-if="
122-
store.invitationPayload.userGroupsToAdd.length > 1 ||
123-
isUserGroupsToAddPopulated()
123+
(store.invitationPayload.userGroupsToAdd.length > 1 ||
124+
isUserGroupsToAddPopulated()) &&
125+
store.isUserRoleAssignment
124126
"
125127
:is-warnable="true"
126128
@click="removeInvitedUserGroup(index)"
@@ -131,7 +133,7 @@
131133
</TableRow>
132134
</template>
133135
</TableBody>
134-
<template #bottom-controls>
136+
<template v-if="store.isUserRoleAssignment" #bottom-controls>
135137
<PkpButton
136138
:is-disabled="store.invitationPayload.disabled"
137139
@click="addUserGroup()"

src/pages/userInvitation/mocks/reviewerPageInitConfig.js

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ export default {
3939
pageTitleDescription:
4040
'You are inviting a user to take a role in OJS along with appearing in the journal masthead',
4141
primaryLocale: 'en',
42-
invitationType: 'reviewerAccess',
42+
invitationType: 'reviewerAccessInvite',
4343
invitationMode: 'create',
4444
invitationPayload: {
4545
userId: null,
@@ -48,7 +48,10 @@ export default {
4848
givenName: '',
4949
familyName: '',
5050
orcidValidation: false,
51-
userGroupsToAdd: [{userGroupId: null, dateStart: null, masthead: null}],
51+
responseDueDate: '',
52+
reviewDueDate: '',
53+
reviewTypes: '',
54+
userGroupsToAdd: [{userGroupId: 16, dateStart: null, masthead: null}],
5255
currentUserGroups: [],
5356
userGroupsToRemove: [],
5457
emailComposer: {
@@ -561,14 +564,15 @@ export default {
561564
stepLabel: '{$step} - Enter Review Details',
562565
description: 'You can add review related details',
563566
nextButtonLabel: 'Invite user to the role (t)',
567+
skipInvitationUpdate: false,
564568
sections: [
565569
{
566570
id: 'reviewDetails',
567571
description:
568572
'<p>Please provide the following details to help us manage your submission in our system.</p>',
569573
sectionComponent: 'ReviewerReviewDetailsStep',
570574
props: {
571-
validateFields: [],
575+
validateFields: ['responseDueDate', 'reviewTypes', 'reviewDueDate'],
572576
},
573577
},
574578
],

0 commit comments

Comments
 (0)