mirror of
https://github.com/massbug/judge4c.git
synced 2025-07-03 23:30:50 +00:00
116 lines
2.6 KiB
TypeScript
116 lines
2.6 KiB
TypeScript
|
import { create } from "zustand";
|
||
|
import { IJsonModel, Model } from "flexlayout-react";
|
||
|
import { createJSONStorage, persist } from "zustand/middleware";
|
||
|
|
||
|
const initialJsonModel: IJsonModel = {
|
||
|
global: {
|
||
|
// tabEnableClose: false,
|
||
|
tabEnableRename: false,
|
||
|
},
|
||
|
borders: [],
|
||
|
layout: {
|
||
|
type: "row",
|
||
|
weight: 100,
|
||
|
children: [
|
||
|
{
|
||
|
type: "tabset",
|
||
|
id: "1",
|
||
|
weight: 50,
|
||
|
children: [
|
||
|
{
|
||
|
type: "tab",
|
||
|
id: "description",
|
||
|
name: "Description",
|
||
|
component: "description",
|
||
|
enableClose: false,
|
||
|
},
|
||
|
{
|
||
|
type: "tab",
|
||
|
id: "solution",
|
||
|
name: "Solutions",
|
||
|
component: "solution",
|
||
|
enableClose: false,
|
||
|
},
|
||
|
{
|
||
|
type: "tab",
|
||
|
id: "submission",
|
||
|
name: "Submissions",
|
||
|
component: "submission",
|
||
|
enableClose: false,
|
||
|
},
|
||
|
// {
|
||
|
// type: "tab",
|
||
|
// id: "detail",
|
||
|
// name: "Details",
|
||
|
// component: "detail",
|
||
|
// },
|
||
|
],
|
||
|
},
|
||
|
{
|
||
|
type: "row",
|
||
|
weight: 50,
|
||
|
children: [
|
||
|
{
|
||
|
type: "tabset",
|
||
|
id: "2",
|
||
|
weight: 50,
|
||
|
children: [
|
||
|
{
|
||
|
type: "tab",
|
||
|
id: "code",
|
||
|
name: "Code",
|
||
|
component: "code",
|
||
|
enableClose: false,
|
||
|
},
|
||
|
],
|
||
|
},
|
||
|
{
|
||
|
type: "tabset",
|
||
|
id: "3",
|
||
|
weight: 50,
|
||
|
children: [
|
||
|
{
|
||
|
type: "tab",
|
||
|
id: "testcase",
|
||
|
name: "Testcase",
|
||
|
component: "testcase",
|
||
|
enableClose: false,
|
||
|
},
|
||
|
],
|
||
|
},
|
||
|
],
|
||
|
},
|
||
|
],
|
||
|
},
|
||
|
};
|
||
|
|
||
|
type ProblemFlexLayoutState = {
|
||
|
model: Model | null;
|
||
|
jsonModel: IJsonModel;
|
||
|
};
|
||
|
|
||
|
type ProblemFlexLayoutAction = {
|
||
|
setModel: (model: Model) => void;
|
||
|
setJsonModel: (jsonModel: IJsonModel) => void;
|
||
|
};
|
||
|
|
||
|
type ProblemFlexLayoutStore = ProblemFlexLayoutState & ProblemFlexLayoutAction;
|
||
|
|
||
|
export const useProblemFlexLayoutStore = create<ProblemFlexLayoutStore>()(
|
||
|
persist(
|
||
|
(set) => ({
|
||
|
model: null,
|
||
|
jsonModel: initialJsonModel,
|
||
|
setModel: (model) => set({ model }),
|
||
|
setJsonModel: (jsonModel) => set({ jsonModel }),
|
||
|
}),
|
||
|
{
|
||
|
name: "problem-flexlayout",
|
||
|
storage: createJSONStorage(() => localStorage),
|
||
|
partialize: (state) => ({
|
||
|
jsonModel: state.jsonModel,
|
||
|
}),
|
||
|
}
|
||
|
)
|
||
|
);
|