feat(documents): prepare inbox suggestions and add entity assignments
This commit is contained in:
31
frontend/composables/useDocumentInboxCount.ts
Normal file
31
frontend/composables/useDocumentInboxCount.ts
Normal file
@@ -0,0 +1,31 @@
|
||||
import { createSharedComposable } from "@vueuse/core"
|
||||
|
||||
export const useDocumentInboxCount = createSharedComposable(() => {
|
||||
const auth = useAuthStore()
|
||||
const { $api } = useNuxtApp()
|
||||
const count = ref(0)
|
||||
const scope = computed(() => auth.user?.id && auth.activeTenant && !auth.profile?.customer_for_portal && auth.activeTenantData?.features?.files !== false
|
||||
? `${auth.user.id}:${auth.activeTenant}` : "")
|
||||
let version = 0
|
||||
let disposed = false
|
||||
let controller: AbortController | undefined
|
||||
let timer: ReturnType<typeof setTimeout> | undefined
|
||||
const refresh = async () => {
|
||||
const request = ++version
|
||||
clearTimeout(timer)
|
||||
controller?.abort()
|
||||
if (!scope.value || disposed) { count.value = 0; return }
|
||||
controller = new AbortController()
|
||||
try {
|
||||
const result = await $api<{ total: number }>("/api/document-inbox/count", { signal: controller.signal })
|
||||
if (!disposed && request === version) count.value = Math.max(0, Number(result.total) || 0)
|
||||
} catch {
|
||||
if (request === version) count.value = 0
|
||||
} finally {
|
||||
if (!disposed && request === version && scope.value) timer = setTimeout(refresh, 10000)
|
||||
}
|
||||
}
|
||||
watch(scope, () => { count.value = 0; void refresh() }, { immediate: true, flush: "sync" })
|
||||
onScopeDispose(() => { disposed = true; version++; controller?.abort(); clearTimeout(timer) })
|
||||
return { count, refresh }
|
||||
})
|
||||
Reference in New Issue
Block a user