79 lines
1.9 KiB
TypeScript
79 lines
1.9 KiB
TypeScript
import { create } from "zustand";
|
|
|
|
export interface PageMeta {
|
|
name: string;
|
|
title: string | null;
|
|
published: boolean;
|
|
has_source: boolean;
|
|
last_modified: number | null;
|
|
size: number | null;
|
|
}
|
|
|
|
interface EditorStore {
|
|
// Source
|
|
ufSource: string;
|
|
isDirty: boolean;
|
|
currentPage: PageMeta | null;
|
|
|
|
// Compiled output
|
|
compiledAscii: string;
|
|
compiledMicron: string;
|
|
compileWarnings: string[];
|
|
isCompiling: boolean;
|
|
compileError: string | null;
|
|
|
|
// Preview
|
|
previewMode: "ascii" | "micron" | "raw";
|
|
|
|
// Actions
|
|
setSource: (s: string) => void;
|
|
setCurrentPage: (p: PageMeta | null) => void;
|
|
setDirty: (v: boolean) => void;
|
|
setCompileResult: (ascii: string, micron: string, warnings: string[]) => void;
|
|
setCompiling: (v: boolean) => void;
|
|
setCompileError: (e: string | null) => void;
|
|
setPreviewMode: (mode: "ascii" | "micron" | "raw") => void;
|
|
reset: () => void;
|
|
}
|
|
|
|
export const useEditorStore = create<EditorStore>((set) => ({
|
|
ufSource: "",
|
|
isDirty: false,
|
|
currentPage: null,
|
|
|
|
compiledAscii: "",
|
|
compiledMicron: "",
|
|
compileWarnings: [],
|
|
isCompiling: false,
|
|
compileError: null,
|
|
|
|
previewMode: "ascii",
|
|
|
|
setSource: (s) => set({ ufSource: s, isDirty: true }),
|
|
setCurrentPage: (p) => set({ currentPage: p }),
|
|
setDirty: (v) => set({ isDirty: v }),
|
|
setCompileResult: (ascii, micron, warnings) =>
|
|
set({
|
|
compiledAscii: ascii,
|
|
compiledMicron: micron,
|
|
compileWarnings: warnings,
|
|
isCompiling: false,
|
|
compileError: null,
|
|
}),
|
|
setCompiling: (v) => set({ isCompiling: v }),
|
|
setCompileError: (e) => set({ compileError: e, isCompiling: false }),
|
|
setPreviewMode: (mode) => set({ previewMode: mode }),
|
|
reset: () =>
|
|
set({
|
|
ufSource: "",
|
|
isDirty: false,
|
|
currentPage: null,
|
|
compiledAscii: "",
|
|
compiledMicron: "",
|
|
compileWarnings: [],
|
|
isCompiling: false,
|
|
compileError: null,
|
|
previewMode: "ascii",
|
|
}),
|
|
}));
|