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>
44 lines
1.1 KiB
TypeScript
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
|
|
}
|
|
}
|