1"use client";
2
3
14import { create } from "zustand";
15import type { UploadProgress } from "./upload";
16
17interface UploadStore {
18
19 active: Record<string, UploadProgress>;
20 cancelFns: Record<string, () => void>;
21 set: (fileId: string, progress: UploadProgress) => void;
22 registerCancel: (fileId: string, fn: () => void) => void;
23 clear: (fileId: string) => void;
24}
25
26export const useUploadStore = create<UploadStore>()((set) => ({
27 active: {},
28 cancelFns: {},
29 set: (fileId, progress) =>
30 set((s) => ({ active: { ...s.active, [fileId]: progress } })),
31 registerCancel: (fileId, fn) =>
32 set((s) => ({ cancelFns: { ...s.cancelFns, [fileId]: fn } })),
33 clear: (fileId) =>
34 set((s) => {
35 const active = { ...s.active };
36 const cancelFns = { ...s.cancelFns };
37 delete active[fileId];
38 delete cancelFns[fileId];
39 return { active, cancelFns };
40 }),
41}));
42