{"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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"}