import { createStore } from "solid-js/store" import { createMemo } from "solid-js" import { createSimpleContext } from "./helper" import { makePersisted } from "@solid-primitives/storage" export const { use: useLayout, provider: LayoutProvider } = createSimpleContext({ name: "Layout", init: () => { const [store, setStore] = makePersisted( createStore({ sidebar: { opened: true, width: 280, }, review: { state: "pane" as "pane" | "tab", }, }), { name: "__default-layout", }, ) return { sidebar: { opened: createMemo(() => store.sidebar.opened), open() { setStore("sidebar", "opened", true) }, close() { setStore("sidebar", "opened", false) }, toggle() { setStore("sidebar", "opened", (x) => !x) }, width: createMemo(() => store.sidebar.width), resize(width: number) { setStore("sidebar", "width", width) }, }, review: { state: createMemo(() => store.review?.state ?? "closed"), pane() { setStore("review", "state", "pane") }, tab() { setStore("review", "state", "tab") }, }, } }, })