From 7c6e6bcc781238bdf4c4c20d7cba0d030597ab6f Mon Sep 17 00:00:00 2001 From: karimouf Date: Tue, 23 Jun 2026 01:58:08 +0200 Subject: [PATCH 01/10] feat: use same component for both single and bulk assignment --- frontend/src/components/dashboard/Study.vue | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/frontend/src/components/dashboard/Study.vue b/frontend/src/components/dashboard/Study.vue index 7925801db..cca5a1a3d 100644 --- a/frontend/src/components/dashboard/Study.vue +++ b/frontend/src/components/dashboard/Study.vue @@ -61,7 +61,7 @@ - + @@ -75,7 +75,6 @@ import StudySessionModal from "@/components/dashboard/study/StudySessionModal.vu import BasicButton from "@/basic/Button.vue"; import ConfirmModal from "@/basic/modal/ConfirmModal.vue"; import BulkAssignmentsModal from "./study/BulkAssignmentModal.vue"; -import SingleAssignmentModal from "./study/SingleAssignmentModal.vue"; import InformationModal from "@/basic/modal/InformationModal.vue"; import BulkCloseModal from "@/components/dashboard/study/BulkCloseModal.vue"; import StudyCloseModal from "@/components/dashboard/study/StudyCloseModal.vue"; @@ -98,7 +97,6 @@ export default { BasicButton, ConfirmModal, BulkAssignmentsModal, - SingleAssignmentModal, InformationModal, SavedTemplatesModal }, From 8162ffdc1b763d09ea65bd63528e63357d6c9224 Mon Sep 17 00:00:00 2001 From: karimouf Date: Tue, 23 Jun 2026 02:29:13 +0200 Subject: [PATCH 02/10] refactor: change name of component to serve single and multiple assignment --- .../dashboard/study/AssignmentModal.vue | 503 +++++++ .../dashboard/study/BulkAssignmentModal.vue | 1237 ----------------- 2 files changed, 503 insertions(+), 1237 deletions(-) create mode 100644 frontend/src/components/dashboard/study/AssignmentModal.vue delete mode 100644 frontend/src/components/dashboard/study/BulkAssignmentModal.vue diff --git a/frontend/src/components/dashboard/study/AssignmentModal.vue b/frontend/src/components/dashboard/study/AssignmentModal.vue new file mode 100644 index 000000000..21d8f02c7 --- /dev/null +++ b/frontend/src/components/dashboard/study/AssignmentModal.vue @@ -0,0 +1,503 @@ + + + diff --git a/frontend/src/components/dashboard/study/BulkAssignmentModal.vue b/frontend/src/components/dashboard/study/BulkAssignmentModal.vue deleted file mode 100644 index be3267575..000000000 --- a/frontend/src/components/dashboard/study/BulkAssignmentModal.vue +++ /dev/null @@ -1,1237 +0,0 @@ - - - - - \ No newline at end of file From 18fd823aa4b8e31410a48affe4439c45a7f33be0 Mon Sep 17 00:00:00 2001 From: karimouf Date: Tue, 23 Jun 2026 02:30:14 +0200 Subject: [PATCH 03/10] refactor: create a step tempale for each step in the assignment creation --- .../AssignmentSelectionStep.vue | 275 ++++++++++++++++++ .../bulk-assignment/ConfirmationStep.vue | 181 ++++++++++++ .../bulk-assignment/DistributionStep.vue | 164 +++++++++++ .../bulk-assignment/ReviewerSelectionStep.vue | 161 ++++++++++ .../bulk-assignment/TemplateSelectionStep.vue | 173 +++++++++++ .../bulk-assignment/WorkflowMappingStep.vue | 182 ++++++++++++ 6 files changed, 1136 insertions(+) create mode 100644 frontend/src/components/dashboard/study/bulk-assignment/AssignmentSelectionStep.vue create mode 100644 frontend/src/components/dashboard/study/bulk-assignment/ConfirmationStep.vue create mode 100644 frontend/src/components/dashboard/study/bulk-assignment/DistributionStep.vue create mode 100644 frontend/src/components/dashboard/study/bulk-assignment/ReviewerSelectionStep.vue create mode 100644 frontend/src/components/dashboard/study/bulk-assignment/TemplateSelectionStep.vue create mode 100644 frontend/src/components/dashboard/study/bulk-assignment/WorkflowMappingStep.vue diff --git a/frontend/src/components/dashboard/study/bulk-assignment/AssignmentSelectionStep.vue b/frontend/src/components/dashboard/study/bulk-assignment/AssignmentSelectionStep.vue new file mode 100644 index 000000000..16b5ef72c --- /dev/null +++ b/frontend/src/components/dashboard/study/bulk-assignment/AssignmentSelectionStep.vue @@ -0,0 +1,275 @@ + + + diff --git a/frontend/src/components/dashboard/study/bulk-assignment/ConfirmationStep.vue b/frontend/src/components/dashboard/study/bulk-assignment/ConfirmationStep.vue new file mode 100644 index 000000000..4df5f28ce --- /dev/null +++ b/frontend/src/components/dashboard/study/bulk-assignment/ConfirmationStep.vue @@ -0,0 +1,181 @@ + + + diff --git a/frontend/src/components/dashboard/study/bulk-assignment/DistributionStep.vue b/frontend/src/components/dashboard/study/bulk-assignment/DistributionStep.vue new file mode 100644 index 000000000..7453fbef7 --- /dev/null +++ b/frontend/src/components/dashboard/study/bulk-assignment/DistributionStep.vue @@ -0,0 +1,164 @@ + + + diff --git a/frontend/src/components/dashboard/study/bulk-assignment/ReviewerSelectionStep.vue b/frontend/src/components/dashboard/study/bulk-assignment/ReviewerSelectionStep.vue new file mode 100644 index 000000000..c633b11bb --- /dev/null +++ b/frontend/src/components/dashboard/study/bulk-assignment/ReviewerSelectionStep.vue @@ -0,0 +1,161 @@ + + + diff --git a/frontend/src/components/dashboard/study/bulk-assignment/TemplateSelectionStep.vue b/frontend/src/components/dashboard/study/bulk-assignment/TemplateSelectionStep.vue new file mode 100644 index 000000000..412721d2e --- /dev/null +++ b/frontend/src/components/dashboard/study/bulk-assignment/TemplateSelectionStep.vue @@ -0,0 +1,173 @@ + + + + + diff --git a/frontend/src/components/dashboard/study/bulk-assignment/WorkflowMappingStep.vue b/frontend/src/components/dashboard/study/bulk-assignment/WorkflowMappingStep.vue new file mode 100644 index 000000000..51714f092 --- /dev/null +++ b/frontend/src/components/dashboard/study/bulk-assignment/WorkflowMappingStep.vue @@ -0,0 +1,182 @@ + + + From b0e2c1068922577108a92eb82294ae1f66737115 Mon Sep 17 00:00:00 2001 From: karimouf Date: Tue, 23 Jun 2026 02:47:30 +0200 Subject: [PATCH 04/10] refactor: rename modal --- frontend/src/components/dashboard/Study.vue | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/frontend/src/components/dashboard/Study.vue b/frontend/src/components/dashboard/Study.vue index 7d61f61f1..1d5213aff 100644 --- a/frontend/src/components/dashboard/Study.vue +++ b/frontend/src/components/dashboard/Study.vue @@ -67,8 +67,8 @@ - - + + @@ -82,7 +82,7 @@ import StudyModal from "@/components/dashboard/coordinator/Study.vue"; import StudySessionModal from "@/components/dashboard/study/StudySessionModal.vue"; import BasicButton from "@/basic/Button.vue"; import ConfirmModal from "@/basic/modal/ConfirmModal.vue"; -import BulkAssignmentsModal from "./study/BulkAssignmentModal.vue"; +import AssignmentModal from "@/components/dashboard/study/AssignmentModal.vue"; import InformationModal from "@/basic/modal/InformationModal.vue"; import BulkCloseModal from "@/components/dashboard/study/BulkCloseModal.vue"; import StudyCloseModal from "@/components/dashboard/study/StudyCloseModal.vue"; @@ -104,7 +104,7 @@ export default { StudySessionModal, BasicButton, ConfirmModal, - BulkAssignmentsModal, + AssignmentModal, InformationModal, SavedTemplatesModal }, From 8ddc7cf4d66f672299ac6ce48c71a632298b9621 Mon Sep 17 00:00:00 2001 From: karimouf Date: Tue, 23 Jun 2026 02:48:27 +0200 Subject: [PATCH 05/10] refactor: rename folder name --- .../components/dashboard/study/AssignmentModal.vue | 14 +++++++------- .../AssignmentSelectionStep.vue | 7 +++++++ .../ConfirmationStep.vue | 8 ++++++++ .../DistributionStep.vue | 8 ++++++++ .../ReviewerSelectionStep.vue | 7 +++++++ .../TemplateSelectionStep.vue | 7 +++++++ .../WorkflowMappingStep.vue | 8 ++++++++ 7 files changed, 52 insertions(+), 7 deletions(-) rename frontend/src/components/dashboard/study/{bulk-assignment => assignment}/AssignmentSelectionStep.vue (96%) rename frontend/src/components/dashboard/study/{bulk-assignment => assignment}/ConfirmationStep.vue (95%) rename frontend/src/components/dashboard/study/{bulk-assignment => assignment}/DistributionStep.vue (93%) rename frontend/src/components/dashboard/study/{bulk-assignment => assignment}/ReviewerSelectionStep.vue (93%) rename frontend/src/components/dashboard/study/{bulk-assignment => assignment}/TemplateSelectionStep.vue (93%) rename frontend/src/components/dashboard/study/{bulk-assignment => assignment}/WorkflowMappingStep.vue (94%) diff --git a/frontend/src/components/dashboard/study/AssignmentModal.vue b/frontend/src/components/dashboard/study/AssignmentModal.vue index 21d8f02c7..40e0a0cf9 100644 --- a/frontend/src/components/dashboard/study/AssignmentModal.vue +++ b/frontend/src/components/dashboard/study/AssignmentModal.vue @@ -144,16 +144,16 @@ import StepperModal from "@/basic/modal/StepperModal.vue"; import { downloadObjectsAs } from "@/assets/utils"; import { computed } from "vue"; -import TemplateSelectionStep from "./bulk-assignment/TemplateSelectionStep.vue"; -import WorkflowMappingStep from "./bulk-assignment/WorkflowMappingStep.vue"; -import AssignmentSelectionStep from "./bulk-assignment/AssignmentSelectionStep.vue"; -import ReviewerSelectionStep from "./bulk-assignment/ReviewerSelectionStep.vue"; -import DistributionStep from "./bulk-assignment/DistributionStep.vue"; -import ConfirmationStep from "./bulk-assignment/ConfirmationStep.vue"; +import TemplateSelectionStep from "./assignment/TemplateSelectionStep.vue"; +import WorkflowMappingStep from "./assignment/WorkflowMappingStep.vue"; +import AssignmentSelectionStep from "./assignment/AssignmentSelectionStep.vue"; +import ReviewerSelectionStep from "./assignment/ReviewerSelectionStep.vue"; +import DistributionStep from "./assignment/DistributionStep.vue"; +import ConfirmationStep from "./assignment/ConfirmationStep.vue"; /** * Modal for bulk creating assignments - * @author: Dennis Zyska, Alexander Bürkle, Linyin Huang + * @author: Dennis Zyska, Alexander Bürkle, Linyin Huang, Karim Ouf */ export default { name: "ImportModal", diff --git a/frontend/src/components/dashboard/study/bulk-assignment/AssignmentSelectionStep.vue b/frontend/src/components/dashboard/study/assignment/AssignmentSelectionStep.vue similarity index 96% rename from frontend/src/components/dashboard/study/bulk-assignment/AssignmentSelectionStep.vue rename to frontend/src/components/dashboard/study/assignment/AssignmentSelectionStep.vue index 16b5ef72c..fe08dbbc6 100644 --- a/frontend/src/components/dashboard/study/bulk-assignment/AssignmentSelectionStep.vue +++ b/frontend/src/components/dashboard/study/assignment/AssignmentSelectionStep.vue @@ -13,6 +13,13 @@ - - diff --git a/frontend/src/components/dashboard/study/assignment/AssignmentSelectionStep.vue b/frontend/src/components/dashboard/study/assignment/AssignmentSelectionStep.vue index fe08dbbc6..ddb671dc2 100644 --- a/frontend/src/components/dashboard/study/assignment/AssignmentSelectionStep.vue +++ b/frontend/src/components/dashboard/study/assignment/AssignmentSelectionStep.vue @@ -230,7 +230,6 @@ export default { watch: { selectedAssignments: { handler(val) { - console.log('[AssignmentSelectionStep] selectedAssignments changed:', val); this.$emit('update:modalValue', val); this.$emit('update:selectedAssignmentUserIds', this.selectedAssignmentUserIds); }, diff --git a/frontend/src/components/dashboard/study/assignment/ConfirmationStep.vue b/frontend/src/components/dashboard/study/assignment/ConfirmationStep.vue index 83861b117..3fd0cd999 100644 --- a/frontend/src/components/dashboard/study/assignment/ConfirmationStep.vue +++ b/frontend/src/components/dashboard/study/assignment/ConfirmationStep.vue @@ -11,10 +11,9 @@
  • - Workflow Step {{ index + 1 }}: - - {{ documents.find(doc => doc.id === stepAssignment.documentId).name }} - ({{ reviewer.find(u => u.id === documents.find(doc => doc.id === stepAssignment.documentId).userId)?.firstName }} - {{ reviewer.find(u => u.id === documents.find(doc => doc.id === stepAssignment.documentId).userId)?.lastName }}) + + {{ getDoc(stepAssignment.documentId).name }} + ({{ getDocReviewerName(stepAssignment) }}) Create new document
  • @@ -127,13 +126,6 @@ */ export default { name: "ConfirmationStep", - props: { - variant: { - type: String, - required: true, - validator: v => ['doc-sub-single', 'doc-sub-bulk', 'session-single', 'session-bulk'].includes(v), - }, - }, inject: { template: { type: Object, required: false, default: null }, workflow: { type: Object, required: false, default: null }, @@ -151,6 +143,13 @@ export default { roleSelection: { type: Object, required: false, default: () => ({}) }, reviewerSelection: { type: Object, required: false, default: () => ({}) }, }, + props: { + variant: { + type: String, + required: true, + validator: v => ['doc-sub-single', 'doc-sub-bulk', 'session-single', 'session-bulk'].includes(v), + }, + }, computed: { targetWorkflowName() { if (!this.targetWorkflowId) return 'Unknown'; @@ -185,5 +184,15 @@ export default { return this.selectedReviewer.filter(rev => !selectedSessionUserIds.has(rev.id)); }, }, + methods: { + getDoc(documentId) { + return this.documents.find(doc => doc.id === documentId); + }, + getDocReviewerName(stepAssignment) { + const doc = this.getDoc(stepAssignment.documentId); + const user = doc ? this.reviewer.find(u => u.id === doc.userId) : null; + return user ? `${user.firstName} ${user.lastName}` : ''; + }, + }, }; diff --git a/frontend/src/components/dashboard/study/assignment/DistributionStep.vue b/frontend/src/components/dashboard/study/assignment/DistributionStep.vue index 1c3339943..5c0f8179e 100644 --- a/frontend/src/components/dashboard/study/assignment/DistributionStep.vue +++ b/frontend/src/components/dashboard/study/assignment/DistributionStep.vue @@ -57,16 +57,19 @@ export default { return [...new Set(this.selectedReviewer.flatMap(obj => obj.roles))]; }, roleSelectionFields() { - return this.selectedReviewerRoles.map(roleId => ({ - key: this.roles.find(role => role.id === roleId).id, - label: "Number of reviews for role: " + this.roles.find(role => role.id === roleId).name, - type: "slider", - class: 'custom-slider-class', - min: 0, - max: 10, - step: 1, - unit: 'review(s)', - })); + return this.selectedReviewerRoles.map(roleId => { + const role = this.roles.find(r => r.id === roleId); + return { + key: role.id, + label: "Number of reviews for role: " + role.name, + type: "slider", + class: 'custom-slider-class', + min: 0, + max: 10, + step: 1, + unit: 'review(s)', + }; + }); }, reviewerNumberOfAssignments() { return Object.values(this.reviewerSelection) diff --git a/frontend/src/components/dashboard/study/assignment/TemplateSelectionStep.vue b/frontend/src/components/dashboard/study/assignment/TemplateSelectionStep.vue index adf026b85..748132a1a 100644 --- a/frontend/src/components/dashboard/study/assignment/TemplateSelectionStep.vue +++ b/frontend/src/components/dashboard/study/assignment/TemplateSelectionStep.vue @@ -45,6 +45,7 @@ import FormSelect from "@/basic/form/Select.vue"; export default { name: "TemplateSelectionStep", components: { BasicForm, FormSelect }, + emits: ['update:modalValue', 'update:assignmentType', 'update:workflowSteps', 'update:workflowStepsAssignment', 'update:template', 'update:workflow', 'update:isValid'], subscribeTable: [ { filter: [{ key: "template", value: true }], table: "study" }, {table: "workflow"}, diff --git a/frontend/src/components/dashboard/study/assignment/WorkflowMappingStep.vue b/frontend/src/components/dashboard/study/assignment/WorkflowMappingStep.vue index 12b961e6b..5934a9aac 100644 --- a/frontend/src/components/dashboard/study/assignment/WorkflowMappingStep.vue +++ b/frontend/src/components/dashboard/study/assignment/WorkflowMappingStep.vue @@ -120,7 +120,6 @@ export default { if (this.modalValue.workflowMapping) this.workflowMapping = { ...this.modalValue.workflowMapping }; if (this.modalValue.newStudyOwner) this.newStudyOwner = this.modalValue.newStudyOwner; } - console.log('[WorkflowMappingStep] mounted isValid:', this.isValid); this.$emit('update:isValid', this.isValid); }, methods: { @@ -162,24 +161,6 @@ export default { } return options; }, - getSubmission(studyId) { - const studySteps = this.$store.getters["table/study_step/getFiltered"]( - s => s.studyId === studyId - ) || []; - for (const step of studySteps) { - if (step.stepType === 1 && step.documentId !== null) { - let document = this.$store.getters["table/document/get"](step.documentId); - while (document && document.parentDocumentId !== null) { - document = this.$store.getters["table/document/get"](document.parentDocumentId); - } - if (document && document.submissionId) { - const submission = this.$store.getters["table/submission/get"](document.submissionId); - if (submission) return submission; - } - } - } - return null; - }, reset() { this.targetWorkflowId = null; this.workflowMapping = {}; From 4c5d4808ffbb2d362824b00c197aaa9d332dd79a Mon Sep 17 00:00:00 2001 From: karimouf Date: Sat, 11 Jul 2026 15:02:26 +0200 Subject: [PATCH 08/10] refactor: remove console logs --- .../dashboard/study/assignment/ReviewerSelectionStep.vue | 3 --- .../dashboard/study/assignment/WorkflowMappingStep.vue | 1 - 2 files changed, 4 deletions(-) diff --git a/frontend/src/components/dashboard/study/assignment/ReviewerSelectionStep.vue b/frontend/src/components/dashboard/study/assignment/ReviewerSelectionStep.vue index 56bb5e112..f5ec9299e 100644 --- a/frontend/src/components/dashboard/study/assignment/ReviewerSelectionStep.vue +++ b/frontend/src/components/dashboard/study/assignment/ReviewerSelectionStep.vue @@ -127,7 +127,6 @@ export default { watch: { selectedReviewer: { handler(val) { - console.log('[ReviewerSelectionStep] selectedReviewer changed:', val); this.$emit('update:selectedReviewer', val); this.$emit('update:selectedReviewerRoles', this.selectedReviewerRoles); }, @@ -137,12 +136,10 @@ export default { this.$emit('update:selectedReviewerRoles', val); }, isValid(val) { - console.log('[ReviewerSelectionStep] isValid emit:', val); this.$emit('update:isValid', val); }, }, mounted() { - console.log('[ReviewerSelectionStep] mounted isValid:', this.isValid); this.$emit('update:isValid', this.isValid); if (this.selectedReviewer.length > 0) { this.$emit('update:selectedReviewer', this.selectedReviewer); diff --git a/frontend/src/components/dashboard/study/assignment/WorkflowMappingStep.vue b/frontend/src/components/dashboard/study/assignment/WorkflowMappingStep.vue index 5934a9aac..4738a650d 100644 --- a/frontend/src/components/dashboard/study/assignment/WorkflowMappingStep.vue +++ b/frontend/src/components/dashboard/study/assignment/WorkflowMappingStep.vue @@ -110,7 +110,6 @@ export default { this.$emit('update:isWorkflowMappingComplete', val); }, isValid(val) { - console.log('[WorkflowMappingStep] isValid emit:', val); this.$emit('update:isValid', val); }, }, From 46e383e303fc9f36b333ce21b353fc70e0d6c323 Mon Sep 17 00:00:00 2001 From: karimouf Date: Wed, 22 Jul 2026 20:36:32 +0300 Subject: [PATCH 09/10] fix: add author names --- .../dashboard/study/assignment/AssignmentSelectionStep.vue | 2 +- .../components/dashboard/study/assignment/ConfirmationStep.vue | 2 +- .../components/dashboard/study/assignment/DistributionStep.vue | 2 +- .../dashboard/study/assignment/ReviewerSelectionStep.vue | 2 +- .../dashboard/study/assignment/TemplateSelectionStep.vue | 2 +- .../dashboard/study/assignment/WorkflowMappingStep.vue | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/frontend/src/components/dashboard/study/assignment/AssignmentSelectionStep.vue b/frontend/src/components/dashboard/study/assignment/AssignmentSelectionStep.vue index ddb671dc2..8e0aa63f2 100644 --- a/frontend/src/components/dashboard/study/assignment/AssignmentSelectionStep.vue +++ b/frontend/src/components/dashboard/study/assignment/AssignmentSelectionStep.vue @@ -18,7 +18,7 @@ import BasicTable from "@/basic/Table.vue"; * Renders a selectable table of documents, submissions, or study sessions depending * on the assignment type chosen in the template step. Supports both single-select * (for single assignment flow) and multi-select (for bulk flow). - * @author karim ouf + * @author: Dennis Zyska, Alexander Bürkle, Linyin Huang, Karim Ouf */ export default { name: "AssignmentSelectionStep", diff --git a/frontend/src/components/dashboard/study/assignment/ConfirmationStep.vue b/frontend/src/components/dashboard/study/assignment/ConfirmationStep.vue index 3fd0cd999..253b5be51 100644 --- a/frontend/src/components/dashboard/study/assignment/ConfirmationStep.vue +++ b/frontend/src/components/dashboard/study/assignment/ConfirmationStep.vue @@ -122,7 +122,7 @@ * Supports four variants: doc-sub-single, doc-sub-bulk, session-single, and session-bulk, * each rendering an appropriate summary layout. Also warns when reviewers lack matching * study sessions in session_user mode. - * @author karim ouf + * @author: Dennis Zyska, Alexander Bürkle, Linyin Huang, Karim Ouf */ export default { name: "ConfirmationStep", diff --git a/frontend/src/components/dashboard/study/assignment/DistributionStep.vue b/frontend/src/components/dashboard/study/assignment/DistributionStep.vue index 5c0f8179e..ef5d990b3 100644 --- a/frontend/src/components/dashboard/study/assignment/DistributionStep.vue +++ b/frontend/src/components/dashboard/study/assignment/DistributionStep.vue @@ -27,7 +27,7 @@ import BasicForm from "@/basic/Form.vue"; * (documents split manually between selected reviewers), and session-user-based * (each study session is assigned to its original user). * State is persisted via modalValue so navigating back restores the user's choices. - * @author karim ouf + * @author: Dennis Zyska, Alexander Bürkle, Linyin Huang, Karim Ouf */ export default { name: "DistributionStep", diff --git a/frontend/src/components/dashboard/study/assignment/ReviewerSelectionStep.vue b/frontend/src/components/dashboard/study/assignment/ReviewerSelectionStep.vue index f5ec9299e..d94848ab2 100644 --- a/frontend/src/components/dashboard/study/assignment/ReviewerSelectionStep.vue +++ b/frontend/src/components/dashboard/study/assignment/ReviewerSelectionStep.vue @@ -25,7 +25,7 @@ import BasicTable from "@/basic/Table.vue"; * Displays a filterable, selectable table of all users with optional filters to * show only users who have documents or users from previously selected assignments. * State is persisted via modalValue so navigating back restores the selection. - * @author karim ouf + * @author: Dennis Zyska, Alexander Bürkle, Linyin Huang, Karim Ouf */ export default { name: "ReviewerSelectionStep", diff --git a/frontend/src/components/dashboard/study/assignment/TemplateSelectionStep.vue b/frontend/src/components/dashboard/study/assignment/TemplateSelectionStep.vue index 748132a1a..1727d8bc7 100644 --- a/frontend/src/components/dashboard/study/assignment/TemplateSelectionStep.vue +++ b/frontend/src/components/dashboard/study/assignment/TemplateSelectionStep.vue @@ -40,7 +40,7 @@ import FormSelect from "@/basic/form/Select.vue"; * choose whether assignments are based on documents, submissions, or study sessions, * and opt in to email notifications for reviewers. Emits template and workflow data * to the parent so downstream steps can filter and map workflow steps accordingly. - * @author karim ouf + * @author: Dennis Zyska, Alexander Bürkle, Linyin Huang, Karim Ouf */ export default { name: "TemplateSelectionStep", diff --git a/frontend/src/components/dashboard/study/assignment/WorkflowMappingStep.vue b/frontend/src/components/dashboard/study/assignment/WorkflowMappingStep.vue index 4738a650d..07222da70 100644 --- a/frontend/src/components/dashboard/study/assignment/WorkflowMappingStep.vue +++ b/frontend/src/components/dashboard/study/assignment/WorkflowMappingStep.vue @@ -41,7 +41,7 @@ import FormSelect from "@/basic/form/Select.vue"; * target workflow and then maps each annotator/editor step from the template to a * corresponding step in the target. Also allows choosing the new study owner (session * user vs. study owner) when creating bulk assignments. - * @author karim ouf + * @author: Dennis Zyska, Alexander Bürkle, Linyin Huang, Karim Ouf */ export default { name: "WorkflowMappingStep", From af8931ac955500b8b9237f4c677611156a0cd5d6 Mon Sep 17 00:00:00 2001 From: karimouf Date: Wed, 22 Jul 2026 20:40:30 +0300 Subject: [PATCH 10/10] refactor: control assignment type using open function --- frontend/src/components/dashboard/Study.vue | 14 ++++++-------- .../components/dashboard/study/AssignmentModal.vue | 12 +++++------- 2 files changed, 11 insertions(+), 15 deletions(-) diff --git a/frontend/src/components/dashboard/Study.vue b/frontend/src/components/dashboard/Study.vue index 5fee58109..99eaf8186 100644 --- a/frontend/src/components/dashboard/Study.vue +++ b/frontend/src/components/dashboard/Study.vue @@ -67,8 +67,7 @@ - - + @@ -134,8 +133,7 @@ export default { deleteConf: false, confirm: false, bulkConfirm: false, - bulkAssignments: false, - singleAssignment: false, + assignment: false, information: false, savedTemplates: false, }, @@ -470,12 +468,12 @@ export default { this.$nextTick(() => this.$refs.bulkConfirmModal?.open()); }, openBulkAssignmentsModal() { - this.modals.bulkAssignments = true; - this.$nextTick(() => this.$refs.bulkAssignmentsModal?.open()); + this.modals.assignment = true; + this.$nextTick(() => this.$refs.assignmentModal?.open(true)); }, openSingleAssignmentModal() { - this.modals.singleAssignment = true; - this.$nextTick(() => this.$refs.singleAssignmentModal?.open()); + this.modals.assignment = true; + this.$nextTick(() => this.$refs.assignmentModal?.open(false)); }, openInformationModal(params) { this.modals.information = true; diff --git a/frontend/src/components/dashboard/study/AssignmentModal.vue b/frontend/src/components/dashboard/study/AssignmentModal.vue index b4a5a50a6..8d6c1474f 100644 --- a/frontend/src/components/dashboard/study/AssignmentModal.vue +++ b/frontend/src/components/dashboard/study/AssignmentModal.vue @@ -166,12 +166,6 @@ export default { DistributionStep, ConfirmationStep, }, - props: { - bulk: { - type: Boolean, - default: true, - }, - }, subscribeTable: [ { table: "document", filter: [{ key: "readyForReview", value: true }] }, { table: "user" }, @@ -203,6 +197,9 @@ export default { data() { return { + // Whether the modal is creating a bulk or single assignment, set via open(bulk) + bulk: true, + // Incremented on each reset to force step components to remount cleanly stepResetKey: 0, @@ -371,7 +368,8 @@ export default { } return docs[0].id; }, - open() { + open(bulk = true) { + this.bulk = bulk; this.reset(); this.$refs.assignmentStepper.open(); },