make sure task record are always sync with task

This commit is contained in:
Julien Calixte
2023-05-20 12:51:30 +02:00
parent 5d936476d0
commit f5334e5e6d
2 changed files with 39 additions and 12 deletions

View File

@@ -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))

View File

@@ -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,7 +126,10 @@ export const useTaskRecordStore = defineStore('task-record-store', {
updateRecordNotes(taskId: string, notes: string) {
const record = this.records[taskId]
if (record) {
if (!record) {
return
}
this.$patch({
records: {
...this.records,
@@ -114,7 +139,6 @@ export const useTaskRecordStore = defineStore('task-record-store', {
}
}
})
}
},
reset(taskId: string) {
if (!this.records[taskId]) {