refacto task record metadat
This commit is contained in:
@@ -1,9 +1,10 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { useTaskStore } from '@/modules/task/stores/useTask.store'
|
import { useTaskStore } from '@/modules/task/stores/useTask.store'
|
||||||
import { formatDiffInMinutes, formatLongDate } from '@/shared/format-date'
|
import { formatLongDate } from '@/shared/format-date'
|
||||||
import { toISODate } from '@/shared/types/date'
|
import { toISODate } from '@/shared/types/date'
|
||||||
import { useMagicKeys, whenever } from '@vueuse/core'
|
import { useMagicKeys, whenever } from '@vueuse/core'
|
||||||
import { computed } from 'vue'
|
import { computed } from 'vue'
|
||||||
|
import { useTaskRecordMetadata } from '../hooks/useTaskRecordMetadata'
|
||||||
import { useTaskRecordStore } from '../stores/useTaskRecordStore'
|
import { useTaskRecordStore } from '../stores/useTaskRecordStore'
|
||||||
import StepRecord from './StepRecord.vue'
|
import StepRecord from './StepRecord.vue'
|
||||||
|
|
||||||
@@ -20,6 +21,7 @@ const task = computed(() => taskStore.getTask(props.taskId))
|
|||||||
const record = computed(() =>
|
const record = computed(() =>
|
||||||
recordStore.createAndRetrieveTaskRecord(props.taskId, props.recordId)
|
recordStore.createAndRetrieveTaskRecord(props.taskId, props.recordId)
|
||||||
)
|
)
|
||||||
|
const { duration } = useTaskRecordMetadata(record)
|
||||||
|
|
||||||
const getNextStepId = () => {
|
const getNextStepId = () => {
|
||||||
if (!task.value) {
|
if (!task.value) {
|
||||||
@@ -76,14 +78,6 @@ whenever(n, () => {
|
|||||||
nextStep()
|
nextStep()
|
||||||
})
|
})
|
||||||
|
|
||||||
const duration = computed(() => {
|
|
||||||
if (!record.value?.end) {
|
|
||||||
return null
|
|
||||||
}
|
|
||||||
|
|
||||||
return formatDiffInMinutes(record.value.start, record.value?.end)
|
|
||||||
})
|
|
||||||
|
|
||||||
const isSuperiorToEstimation = computed(() => {
|
const isSuperiorToEstimation = computed(() => {
|
||||||
if (!task.value || !record.value || !duration.value) {
|
if (!task.value || !record.value || !duration.value) {
|
||||||
return false
|
return false
|
||||||
|
|||||||
30
src/modules/record/components/TaskRecordLink.vue
Normal file
30
src/modules/record/components/TaskRecordLink.vue
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
<script setup lang="ts">
|
||||||
|
import { formatDate } from '@/shared/format-date'
|
||||||
|
import { useTaskRecordMetadata } from '../hooks/useTaskRecordMetadata'
|
||||||
|
import type { TaskRecord } from '../models/task-record'
|
||||||
|
|
||||||
|
const props = defineProps<{
|
||||||
|
record: TaskRecord
|
||||||
|
}>()
|
||||||
|
|
||||||
|
const { duration } = useTaskRecordMetadata(props.record)
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<span>
|
||||||
|
<router-link
|
||||||
|
class="task-record-link"
|
||||||
|
:to="{
|
||||||
|
name: 'record-view',
|
||||||
|
params: { taskId: record.taskId, recordId: record.id }
|
||||||
|
}"
|
||||||
|
>{{ formatDate(record.start) }}</router-link
|
||||||
|
>
|
||||||
|
{{ duration }} minutes
|
||||||
|
</span>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<style scoped lang="scss">
|
||||||
|
.task-record-link {
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { createUuid } from '@/shared/create-uuid'
|
import { createUuid } from '@/shared/create-uuid'
|
||||||
import { formatDate } from '@/shared/format-date'
|
|
||||||
import { useTaskRecordStore } from '../stores/useTaskRecordStore'
|
import { useTaskRecordStore } from '../stores/useTaskRecordStore'
|
||||||
|
import TaskRecordLink from './TaskRecordLink.vue'
|
||||||
|
|
||||||
const props = defineProps<{
|
const props = defineProps<{
|
||||||
taskId: string
|
taskId: string
|
||||||
@@ -16,13 +16,7 @@ const newRecordId = createUuid()
|
|||||||
<template>
|
<template>
|
||||||
<ol v-if="records.length" class="task-record-list">
|
<ol v-if="records.length" class="task-record-list">
|
||||||
<li v-for="record in records" :key="record.id">
|
<li v-for="record in records" :key="record.id">
|
||||||
<router-link
|
<task-record-link :record="record" />
|
||||||
:to="{
|
|
||||||
name: 'record-view',
|
|
||||||
params: { taskId, recordId: record.id }
|
|
||||||
}"
|
|
||||||
>{{ formatDate(record.start) }}</router-link
|
|
||||||
>
|
|
||||||
</li>
|
</li>
|
||||||
</ol>
|
</ol>
|
||||||
<div v-else>No record yet</div>
|
<div v-else>No record yet</div>
|
||||||
|
|||||||
18
src/modules/record/hooks/useTaskRecordMetadata.ts
Normal file
18
src/modules/record/hooks/useTaskRecordMetadata.ts
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
import { formatDiffInMinutes } from '@/shared/format-date'
|
||||||
|
import { computed, isRef, type Ref } from 'vue'
|
||||||
|
import type { TaskRecord } from '../models/task-record'
|
||||||
|
|
||||||
|
export const useTaskRecordMetadata = (record: TaskRecord | Ref<TaskRecord>) => {
|
||||||
|
const duration = computed(() => {
|
||||||
|
const recordValue = isRef(record) ? record.value : record
|
||||||
|
if (!recordValue?.end) {
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
|
||||||
|
return formatDiffInMinutes(recordValue.start, recordValue?.end)
|
||||||
|
})
|
||||||
|
|
||||||
|
return {
|
||||||
|
duration
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user