{"version":3,"file":"AddEditTaskDialog-859bf269.js","sources":["../../src/components/pages/tasks/subcomponents/AddEditTaskDialog.vue"],"sourcesContent":["<template>\n <bm-dialog\n ref=\"bmDialogRef\"\n :visible=\"value\"\n :label=\"isNewTask ? $m.tasks_new_task_title : $m.tasks_edit_task_title\"\n @accept=\"addOrUpdateTask\"\n @cancel=\"cancel\"\n >\n <v-container fluid pa-0 data-qa=\"add_edit_task_dialog\">\n <v-row v-if=\"taskIsCancelledOrComplete\">\n <v-col cols=\"12\">\n <bm-alert type=\"error\">\n {{ taskCancelledOrCompleteAlertText }}\n </bm-alert>\n </v-col>\n </v-row>\n <v-row dense>\n <v-col cols=\"12\">\n <bm-text-area\n v-model=\"internalTask.description\"\n :t=\"$m.keys.tasks_description\"\n :disabled=\"taskIsCancelledOrComplete\"\n />\n </v-col>\n <v-col cols=\"12\" md=\"6\">\n <bm-dropdown\n v-model=\"internalTask.taskTypeId\"\n :t=\"$m.keys.tasks_type\"\n :items=\"cache.taskTypes.all\"\n :sort-items=\"false\"\n item-value=\"id\"\n item-text=\"name\"\n :disabled=\"taskIsCancelledOrComplete\"\n :rules=\"[$ruleSet.required()]\"\n />\n </v-col>\n <v-col cols=\"12\" md=\"6\">\n <bm-dropdown\n v-model=\"internalTask.taskQueueId\"\n :t=\"$m.keys.queue\"\n :items=\"cache.taskQueues.all\"\n :sort-items=\"false\"\n item-value=\"id\"\n item-text=\"name\"\n :disabled=\"taskIsCancelledOrComplete\"\n :rules=\"[$ruleSet.required()]\"\n />\n </v-col>\n <v-col cols=\"12\">\n <v-divider />\n </v-col>\n <v-col cols=\"12\" md=\"6\">\n <bm-date\n v-model=\"internalTask.dueDate\"\n :t=\"$m.keys.tasks_due_date\"\n :disabled=\"taskIsCancelledOrComplete\"\n clearable\n />\n </v-col>\n <v-col cols=\"12\" md=\"6\">\n <bm-time\n v-model=\"internalTask.dueTime\"\n :t=\"$m.keys.tasks_due_time\"\n :disabled=\"taskIsCancelledOrComplete\"\n clearable\n />\n </v-col>\n <v-col cols=\"12\" md=\"6\">\n <bm-number\n v-model=\"durationMinutes\"\n :t=\"$m.keys.task_type_duration\"\n :placeholder=\"durationPlaceholder.toString()\"\n :disabled=\"taskIsCancelledOrComplete\"\n :rules=\"[$ruleSet.notNegativeNumber(), $ruleSet.notZero()]\"\n :suffix=\"$m.units_mins_suffix\"\n :min=\"1\"\n :default-value=\"null\"\n integral\n clearable\n />\n </v-col>\n <v-col cols=\"12\">\n <v-divider />\n </v-col>\n <v-slide-x-transition>\n <v-col\n v-if=\"internalTask.dueDate && repeatParameterIsRelevant\"\n cols=\"12\"\n md=\"6\"\n >\n <bm-number\n v-model=\"internalTask.taskRepeatParameter\"\n :t=\"$m.keys.tasks_repeats_every\"\n :min=\"1\"\n :max=\"maxRepeatParameter\"\n :disabled=\"taskIsCancelledOrComplete\"\n :rules=\"[$ruleSet.numberInRange(1, maxRepeatParameter)]\"\n integral\n />\n </v-col>\n </v-slide-x-transition>\n <v-slide-x-transition>\n <v-col v-if=\"internalTask.dueDate\" cols=\"12\" md=\"6\">\n <bm-dropdown\n v-model=\"internalTask.taskRepeatBasis\"\n :t=\"$m.keys.tasks_repeats\"\n :items=\"EnumTaskRepeatBasis.getValues()\"\n :item-text=\"(basis) => getRepeatBasisText(internalTask, basis)\"\n :item-value=\"(basis) => basis.key\"\n :sort-items=\"false\"\n :searchable=\"false\"\n :disabled=\"taskIsCancelledOrComplete\"\n return-object\n />\n </v-col>\n </v-slide-x-transition>\n <v-col cols=\"12\" md=\"6\">\n <bm-enum-ddl\n v-model=\"internalTask.associatedBmEntityType\"\n :t=\"$m.keys.tasks_associated_with\"\n :enum-type=\"EnumBmEntityType\"\n :enum-filter=\"availableEntityTypesFilter\"\n :sorted-initial-value=\"EnumBmEntityType.none\"\n :disabled=\"taskIsCancelledOrComplete\"\n />\n </v-col>\n <v-slide-x-transition>\n <v-col\n v-if=\"associatedDependencies && !fetchingAssociatedItems\"\n cols=\"12\"\n md=\"6\"\n >\n <bm-dropdown\n v-model=\"internalTask.associatedBmEntityId\"\n :t=\"$m.keys.tasks_record\"\n :items=\"associatedItems\"\n :item-text=\"associatedDependencies.getText\"\n :item-value=\"associatedDependencies.getValue\"\n :disabled=\"taskIsCancelledOrComplete\"\n />\n </v-col>\n </v-slide-x-transition>\n <v-col cols=\"12\" md=\"6\">\n <bm-dropdown\n v-model=\"internalTask.assignedToUserId\"\n :t=\"$m.keys.tasks_assigned_to\"\n :items=\"users\"\n item-value=\"id\"\n item-text=\"name\"\n :disabled=\"taskIsCancelledOrComplete\"\n clearable\n />\n </v-col>\n <v-col cols=\"12\">\n <bm-text-area\n v-model=\"internalTask.notes\"\n :t=\"$m.keys.tasks_notes\"\n :disabled=\"taskIsCancelledOrComplete\"\n />\n </v-col>\n </v-row>\n </v-container>\n <template #controls>\n <wrapped-control :control=\"btnBar\"></wrapped-control>\n </template>\n </bm-dialog>\n</template>\n\n<script setup lang=\"ts\">\nimport type { BmDialogInterface } from \"@/components/dialogs/BmDialog.vue\";\nimport BmDialog from \"@/components/dialogs/BmDialog.vue\";\nimport api from \"@/app/api\";\nimport type { User } from \"@/app/services/generated/userService\";\nimport type { BmTask } from \"@/app/services/generated/bmtaskService\";\nimport { bmTaskService } from \"@/app/services/generated/bmtaskService\";\nimport { EnumBmEntityType } from \"@/app/services/generated/enums/enumBmEntityType.generated\";\nimport { EnumTaskRepeatBasis } from \"@/app/services/generated/enums/enumTaskRepeatBasis.generated\";\nimport {\n makeDeepRef,\n makeRef,\n withLoading,\n wrapPromiseWithErrorHandling,\n} from \"@/components/composables/componentTools\";\nimport type { DialogEvents } from \"@/components/mixins/dialogs\";\nimport { useReactiveDialogScriptSetup } from \"@/components/mixins/dialogs\";\nimport {\n computed,\n toRef,\n shallowRef,\n onBeforeMount,\n watch,\n ref,\n watchEffect,\n} from \"vue\";\nimport Guid from \"@/app/types/common/guid\";\nimport type { Associations } from \"@/components/pages/tasks/composables/taskAssociations\";\nimport {\n getAssociationFromType,\n availableEntityTypesFilter,\n} from \"@/components/pages/tasks/composables/taskAssociations\";\nimport userStore from \"@/store/modules/userStore\";\nimport tasksStore from \"@/store/modules/tasksStore\";\nimport { useI18n } from \"@/plugins/i18n\";\nimport { userService } from \"@/app/services/extensions/userServiceExtended\";\nimport { getRepeatBasisText } from \"@/components/pages/tasks/composables/tasks\";\nimport { EnumTaskStatus } from \"@/app/services/generated/enums/enumTaskStatus.generated\";\nimport BmAlert from \"@/components/controls/BmAlert.vue\";\nimport { buildCache } from \"@/app/caching/buildCache\";\nimport { buttons } from \"@/controls/buttons\";\nimport { WrappedControl } from \"@/controls/control\";\n\ninterface AddEditTaskDialogProps {\n value: boolean;\n addOrEditTask: BmTask;\n}\n\nconst props = defineProps<AddEditTaskDialogProps>();\n\nexport interface AddEditTaskDialogEvents extends DialogEvents {\n (event: \"cancel-task\", task: BmTask): void;\n (event: \"complete-task\", task: BmTask): void;\n (event: \"save-and-duplicate\", task: BmTask): void;\n (event: \"save-and-create\", task: BmTask): void;\n}\n\nconst emit = defineEmits<AddEditTaskDialogEvents>();\n\nconst { $t, $m } = useI18n();\nconst internalTask = makeDeepRef(props.addOrEditTask.clone());\nconst durationMinutes = ref<number | null>(null);\n\nconst { accept, cancel } = useReactiveDialogScriptSetup(\n toRef(props, \"value\"),\n emit\n);\n\nconst bmDialogRef = ref<BmDialogInterface | null>(null);\n\nconst cache = buildCache()\n .withTaskTypes()\n .withTaskQueues()\n .withOutletSummaries()\n .withSupplierManufacturers()\n .withGroups()\n .withItems()\n .withPriceLists()\n .withVessels()\n .build();\n\nconst users = makeRef<readonly User[]>([]);\nconst isNewTask = computed(() => internalTask.value.version === 0);\n\nconst taskIsCancelledOrComplete = computed(\n () =>\n internalTask.value.calculated.status === EnumTaskStatus.cancelled ||\n internalTask.value.calculated.status === EnumTaskStatus.complete\n);\n\nconst taskCancelledOrCompleteAlertText = computed(() => {\n if (internalTask.value.calculated.status === EnumTaskStatus.cancelled) {\n return $m.tasks_task_cannot_edit_cancelled;\n }\n\n if (internalTask.value.calculated.status === EnumTaskStatus.complete) {\n return $m.tasks_task_cannot_edit_complete;\n }\n\n return \"\";\n});\n\nconst associatedDependencies = shallowRef<Associations | null>(null);\nconst associatedItems = shallowRef<readonly any[]>([]);\n\nconst maxRepeatParameter = computed(() => {\n if (\n internalTask.value.taskRepeatBasis ===\n EnumTaskRepeatBasis.nthMatchingDayOfEachMonth\n ) {\n return 4;\n }\n\n return undefined;\n});\n\nconst repeatParameterIsRelevant = computed(() => {\n return (\n internalTask.value.taskRepeatBasis === EnumTaskRepeatBasis.everyNWeeks ||\n internalTask.value.taskRepeatBasis === EnumTaskRepeatBasis.everyNMonths ||\n internalTask.value.taskRepeatBasis ===\n EnumTaskRepeatBasis.nthMatchingDayOfEachMonth\n );\n});\n\nconst durationPlaceholder = computed(() => {\n const taskTypeId = internalTask.value.taskTypeId;\n const defaultDuration = 30;\n\n return (\n cache.taskTypes.allReactive.value.find((type) => type.id.equals(taskTypeId))\n ?.durationMinutes ?? defaultDuration\n );\n});\n\nconst saveTask = async () => {\n internalTask.value.durationMinutes =\n durationMinutes.value ?? durationPlaceholder.value;\n\n await bmTaskService.saveBmTask(api.tenantId, internalTask.value);\n};\n\nconst addOrUpdateTask = withLoading(async () => {\n await saveTask();\n await tasksStore.refresh();\n accept();\n});\n\n// Handle the canceling/completing internally, but push an event to listen to if we're on the page\nconst cancelTask = withLoading(async () => {\n await bmTaskService.cancelBmTask(api.tenantId, props.addOrEditTask.id);\n await tasksStore.refresh();\n emit(\"cancel-task\", props.addOrEditTask);\n cancel();\n});\n\nconst completeTask = withLoading(async () => {\n await bmTaskService.completeBmTask(api.tenantId, props.addOrEditTask.id);\n await tasksStore.refresh();\n emit(\"complete-task\", props.addOrEditTask);\n cancel();\n});\n\nconst saveAndDuplicate = withLoading(async () => {\n await saveTask();\n await tasksStore.refresh();\n emit(\"save-and-duplicate\", internalTask.value);\n internalTask.value.id = Guid.create();\n internalTask.value.version = 0;\n});\n\nconst saveAndCreate = withLoading(async () => {\n await saveTask();\n await tasksStore.refresh();\n emit(\"save-and-create\", props.addOrEditTask);\n internalTask.value = props.addOrEditTask.clone();\n internalTask.value.version = 0;\n setTaskDefaults();\n});\n\nconst setTaskDefaults = () => {\n internalTask.value.id = Guid.create();\n internalTask.value.assignedToUserId = userStore.state.user!.id;\n durationMinutes.value = null;\n\n // task type\n if (internalTask.value.taskTypeId.isEmpty()) {\n const taskTypes = cache.taskTypes.all.filter((type) => !type.isHidden);\n\n if (taskTypes.length > 0) {\n internalTask.value.taskTypeId = taskTypes[0].id;\n }\n }\n\n // task queue\n if (internalTask.value.taskQueueId.isEmpty()) {\n const taskQueues = cache.taskQueues.all.filter((type) => !type.isHidden);\n\n if (taskQueues.length > 0) {\n internalTask.value.taskQueueId = taskQueues[0].id;\n }\n }\n};\n\nconst cancelTaskBtn = buttons.secondary($m.tasks_cancel);\ncancelTaskBtn.onClick = cancelTask;\n\nconst completeTaskBtn = buttons.secondary($m.tasks_complete_task);\ncompleteTaskBtn.onClick = completeTask;\n\nconst saveAndCreateBtn = buttons.secondary($m.tasks_save_and_create);\nsaveAndCreateBtn.onClick = saveAndCreate;\n\nconst saveAndDuplicateBtn = buttons.secondary($m.tasks_save_and_duplicate);\nsaveAndDuplicateBtn.onClick = saveAndDuplicate;\n\nconst saveBtn = buttons.primary($m.save);\nsaveBtn.onClick = addOrUpdateTask;\n\nconst cancelBtn = buttons.secondary($m.cancel);\ncancelBtn.onClick = cancel;\n\nconst btnBar = buttons.dialogButtonLayout({\n primary: [saveBtn],\n right: [\n cancelTaskBtn,\n completeTaskBtn,\n saveAndCreateBtn,\n saveAndDuplicateBtn,\n ],\n left: [cancelBtn],\n});\n\nwatchEffect(() => {\n const canSave =\n !!bmDialogRef.value?.isValid() && !taskIsCancelledOrComplete.value;\n cancelTaskBtn.in.visible =\n !isNewTask.value && !taskIsCancelledOrComplete.value;\n\n completeTaskBtn.in.visible =\n !isNewTask.value && !taskIsCancelledOrComplete.value;\n\n saveAndCreateBtn.in.visible = isNewTask.value;\n saveAndCreateBtn.in.enabled = canSave;\n\n saveAndDuplicateBtn.in.visible = isNewTask.value;\n saveAndDuplicateBtn.in.enabled = canSave;\n\n saveBtn.in.text = isNewTask.value ? $m.save : $m.update;\n saveBtn.in.enabled = canSave;\n});\n\n// prevent bm-dropdown from passing a callback of a different type to\n// item-text and item-value while fetching associated dependencies (prevent\n// undefined errors when switching association types)\nconst fetchingAssociatedItems = ref(false);\n\nwatch(\n () => internalTask.value.associatedBmEntityType,\n withLoading(\n wrapPromiseWithErrorHandling(async () => {\n fetchingAssociatedItems.value = true;\n await cache.update();\n\n associatedDependencies.value = getAssociationFromType(\n internalTask.value.associatedBmEntityType,\n cache\n );\n\n if (associatedDependencies.value) {\n associatedItems.value = await associatedDependencies.value.getAll({\n initialItemId: internalTask.value.associatedBmEntityId,\n });\n }\n fetchingAssociatedItems.value = false;\n })\n ),\n { immediate: true }\n);\n\nwatch(\n () => internalTask.value.associatedBmEntityType,\n () => (internalTask.value.associatedBmEntityId = null)\n);\n\nonBeforeMount(\n withLoading(async () => {\n users.value = await userService.getAllUsersWithPremierUsersHidden(\n api.tenantGroupId\n );\n\n if (isNewTask.value) {\n internalTask.value.taskRepeatParameter = 1;\n setTaskDefaults();\n }\n })\n);\n\nwatch(\n () => internalTask.value.durationMinutes,\n () => {\n if (internalTask.value.durationMinutes !== 0) {\n durationMinutes.value = internalTask.value.durationMinutes;\n }\n },\n {\n immediate: true,\n }\n);\n</script>\n"],"names":["ref"],"mappings":"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"}