From f5334e5e6da8598e51eb33c30096685b8a7c2021 Mon Sep 17 00:00:00 2001 From: Julien Calixte Date: Sat, 20 May 2023 12:51:30 +0200 Subject: [PATCH] make sure task record are always sync with task --- src/modules/record/components/TaskRecord.vue | 7 ++- .../record/stores/useTaskRecordStore.ts | 44 ++++++++++++++----- 2 files changed, 39 insertions(+), 12 deletions(-) diff --git a/src/modules/record/components/TaskRecord.vue b/src/modules/record/components/TaskRecord.vue index 8668dfc..dc9e652 100644 --- a/src/modules/record/components/TaskRecord.vue +++ b/src/modules/record/components/TaskRecord.vue @@ -19,10 +19,13 @@ const taskStore = useTaskStore() const recordStore = useTaskRecordStore() const router = useRouter() -recordStore.addRecord(props.taskId) - const task = computed(() => taskStore.getTask(props.taskId)) +if (task.value) { + recordStore.syncTaskRecord(task.value) +} +recordStore.addRecord(props.taskId) + useLoopyTitle(task.value?.title ?? '') const record = computed(() => recordStore.getTaskRecord(props.taskId)) diff --git a/src/modules/record/stores/useTaskRecordStore.ts b/src/modules/record/stores/useTaskRecordStore.ts index bdb033f..d18d32a 100644 --- a/src/modules/record/stores/useTaskRecordStore.ts +++ b/src/modules/record/stores/useTaskRecordStore.ts @@ -1,3 +1,5 @@ +import TaskList from '@/modules/task/components/TaskList.vue' +import type { Task } from '@/modules/task/models/task' import { toISODate, type ISODate } from '@/shared/types/date' import { defineStore } from 'pinia' import type { Recordable } from '../interfaces/recordable' @@ -15,6 +17,26 @@ export const useTaskRecordStore = defineStore('task-record-store', { records: {} }), actions: { + syncTaskRecord(task: Task) { + if (!(task.id in this.records)) { + return + } + + const record = this.records[task.id] + + const taskRecordStepIds = Object.keys(record) + const taskStepIds = new Set(task.steps.map((step) => step.id)) + + const hasSameSteps = + taskRecordStepIds.length === taskStepIds.size && + taskRecordStepIds.every((taskRecordStepId) => + taskStepIds.has(taskRecordStepId) + ) + + if (!hasSameSteps) { + this.records[task.id] = new TaskRecord(task.id) + } + }, addRecord(taskId: string) { if (taskId in this.records) { return @@ -104,17 +126,19 @@ export const useTaskRecordStore = defineStore('task-record-store', { updateRecordNotes(taskId: string, notes: string) { const record = this.records[taskId] - if (record) { - this.$patch({ - records: { - ...this.records, - [taskId]: { - ...record, - notes - } - } - }) + if (!record) { + return } + + this.$patch({ + records: { + ...this.records, + [taskId]: { + ...record, + notes + } + } + }) }, reset(taskId: string) { if (!this.records[taskId]) {