2025-04-12 02:41:52 +00:00
|
|
|
import { create } from "zustand";
|
|
|
|
import type { DockviewApi } from "dockview";
|
2025-04-14 02:39:06 +00:00
|
|
|
import { createJSONStorage, persist } from "zustand/middleware";
|
2025-04-14 06:12:15 +00:00
|
|
|
import type { SubmissionWithTestcaseResult } from "@/types/prisma";
|
2025-04-12 02:41:52 +00:00
|
|
|
|
|
|
|
export type DockviewState = {
|
|
|
|
api: DockviewApi | null;
|
2025-04-14 06:12:15 +00:00
|
|
|
submission: SubmissionWithTestcaseResult | null;
|
2025-04-12 02:41:52 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
export type DockviewActions = {
|
|
|
|
setApi: (api: DockviewApi) => void;
|
2025-04-14 06:12:15 +00:00
|
|
|
setSubmission: (submission: SubmissionWithTestcaseResult) => void;
|
2025-04-12 02:41:52 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
export type DockviewStore = DockviewState & DockviewActions;
|
|
|
|
|
2025-04-14 02:39:06 +00:00
|
|
|
export const useDockviewStore = create<DockviewStore>()(
|
|
|
|
persist(
|
|
|
|
(set) => ({
|
|
|
|
api: null,
|
|
|
|
submission: null,
|
|
|
|
setApi: (api) => set({ api }),
|
|
|
|
setSubmission: (submission) => set({ submission }),
|
|
|
|
}),
|
|
|
|
{
|
|
|
|
name: "zustand:dockview",
|
|
|
|
storage: createJSONStorage(() => localStorage),
|
|
|
|
partialize: (state) => ({
|
|
|
|
submission: state.submission,
|
|
|
|
}),
|
|
|
|
}
|
|
|
|
)
|
|
|
|
);
|