53 lines
1.3 KiB
TypeScript
53 lines
1.3 KiB
TypeScript
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")
|
|
},
|
|
},
|
|
}
|
|
},
|
|
})
|