Files
remanso/src/modules/history/hooks/useLastVisitedRepos.hook.ts
Julien Calixte b003a3e008 perf: move PouchDB/IndexedDB operations to a Web Worker
All database reads and writes now run off the main thread via a
dedicated worker, eliminating IndexedDB overhead from the frame budget.

- Create data.worker.ts exposing the Data class via Comlink
- Refactor data.ts to export a Comlink-wrapped proxy and a standalone
  generateId() pure function (workers can't expose sync methods cleanly)
- Update all 10 call sites to import generateId directly instead of
  calling data.generateId()

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-04 11:27:45 +02:00

44 lines
1.1 KiB
TypeScript

import { useAsyncState } from "@vueuse/core"
import { computed } from "vue"
import { data, generateId } from "@/data/data"
import { DataType } from "@/data/DataType.enum"
import { History } from "@/data/models/History"
const HISTORY_ID = generateId(DataType.History, "history")
export const useLastVisitedRepos = () => {
const history = useAsyncState(
() =>
data.get<DataType.History, History>(
generateId(DataType.History, "history")
),
null
)
const lastVisitedRepos = computed(() => history.state.value?.repos ?? [])
const removeRepo = async (params: { user: string; repo: string }) => {
const storedHistory = await data.get<DataType.History, History>(HISTORY_ID)
if (!storedHistory) {
return
}
const clearedRepo = storedHistory.repos.filter(
(repo) => repo.user !== params.user && repo.repo !== params.repo
)
const newHistory: History = {
...storedHistory,
repos: clearedRepo
}
await data.update(newHistory)
history.execute()
}
return {
lastVisitedRepos,
removeRepo
}
}