diff --git a/frontend/components/task/TaskModal.vue b/frontend/components/task/TaskModal.vue index ab7155d..12915ba 100644 --- a/frontend/components/task/TaskModal.vue +++ b/frontend/components/task/TaskModal.vue @@ -671,10 +671,27 @@ const touched = reactive({ project: false, }) -const statusOptions = computed(() => - props.statuses.map(s => ({ label: s.label, value: s.id })) +const showProjectSelect = computed(() => !!props.projects?.length && !isEditing.value) + +const projectOptions = computed(() => + (props.projects ?? []).map(p => ({ label: p.name, value: p.id })) ) +const resolvedProjectId = computed(() => + showProjectSelect.value ? form.projectId : props.projectId +) + +const statusOptions = computed(() => { + const project = props.projects?.find(p => p.id === resolvedProjectId.value) + const wfStatuses = project?.workflow?.statuses ?? props.statuses + const opts = wfStatuses.map(s => ({ label: s.label, value: s.id })) + const current = props.task?.status + if (current && !wfStatuses.some(s => s.id === current.id)) { + opts.unshift({ label: current.label, value: current.id }) + } + return opts +}) + const effortOptions = computed(() => props.efforts.map(e => ({ label: e.label, value: e.id })) ) @@ -707,16 +724,6 @@ const groupOptions = computed(() => { return filtered.map(g => ({ label: g.title, value: g.id })) }) -const showProjectSelect = computed(() => !!props.projects?.length && !isEditing.value) - -const projectOptions = computed(() => - (props.projects ?? []).map(p => ({ label: p.name, value: p.id })) -) - -const resolvedProjectId = computed(() => - showProjectSelect.value ? form.projectId : props.projectId -) - const canArchive = computed(() => { if (!isEditing.value || !props.task) return false if (props.task.archived) return false