feat(time-tracking) : add pending complete entry flow and redesign sidebar timer
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -103,11 +103,24 @@
|
||||
</main>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<TimeEntryDrawer
|
||||
v-model="completeDrawerOpen"
|
||||
:entry="timerStore.pendingCompleteEntry"
|
||||
:users="refData.users"
|
||||
:projects="refData.projects"
|
||||
:types="refData.types"
|
||||
@saved="onCompleteSaved"
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import {useAppVersion} from "~/composables/useAppVersion";
|
||||
import type { UserData } from '~/services/dto/user-data'
|
||||
import type { Project } from '~/services/dto/project'
|
||||
import type { TaskType } from '~/services/dto/task-type'
|
||||
import { useAppVersion } from '~/composables/useAppVersion'
|
||||
import { extractHydraMembers } from '~/utils/api'
|
||||
|
||||
const auth = useAuthStore()
|
||||
const ui = useUiStore()
|
||||
@@ -125,6 +138,50 @@ onMounted(() => {
|
||||
timerStore.fetchActive()
|
||||
})
|
||||
|
||||
const completeDrawerOpen = ref(false)
|
||||
const refData = reactive({
|
||||
users: [] as UserData[],
|
||||
projects: [] as Project[],
|
||||
types: [] as TaskType[],
|
||||
loaded: false,
|
||||
})
|
||||
|
||||
async function loadRefData() {
|
||||
if (refData.loaded) return
|
||||
const api = useApi()
|
||||
const [usersData, projectsData, typesData] = await Promise.all([
|
||||
api.get<any>('/users'),
|
||||
api.get<any>('/projects'),
|
||||
api.get<any>('/task_types'),
|
||||
])
|
||||
refData.users = extractHydraMembers(usersData)
|
||||
refData.projects = extractHydraMembers(projectsData)
|
||||
refData.types = extractHydraMembers(typesData)
|
||||
refData.loaded = true
|
||||
}
|
||||
|
||||
watch(() => timerStore.pendingCompleteEntry, async (entry) => {
|
||||
if (entry) {
|
||||
await loadRefData()
|
||||
completeDrawerOpen.value = true
|
||||
}
|
||||
})
|
||||
|
||||
watch(completeDrawerOpen, (open) => {
|
||||
if (!open) {
|
||||
nextTick(() => {
|
||||
timerStore.clearPendingEntry()
|
||||
})
|
||||
}
|
||||
})
|
||||
|
||||
function onCompleteSaved() {
|
||||
completeDrawerOpen.value = false
|
||||
nextTick(() => {
|
||||
timerStore.clearPendingEntry()
|
||||
})
|
||||
}
|
||||
|
||||
const handleLogout = async () => {
|
||||
await auth.logout()
|
||||
await navigateTo('/login')
|
||||
|
||||
Reference in New Issue
Block a user