summaryrefslogtreecommitdiffhomepage
path: root/packages/desktop/src/context/helper.tsx
diff options
context:
space:
mode:
authorAdam <[email protected]>2025-10-23 15:27:31 -0500
committerAdam <[email protected]>2025-10-24 12:16:32 -0500
commit3eb2db98ed0a9c266e1bf00544e460cb0633b368 (patch)
treeeb04fea563b3a3b74a3d89ca9500e92cf4b908c8 /packages/desktop/src/context/helper.tsx
parent35dec0649db8f46bffd7121af9cd301668e69e8c (diff)
downloadopencode-3eb2db98ed0a9c266e1bf00544e460cb0633b368.tar.gz
opencode-3eb2db98ed0a9c266e1bf00544e460cb0633b368.zip
wip: desktop work
Diffstat (limited to 'packages/desktop/src/context/helper.tsx')
-rw-r--r--packages/desktop/src/context/helper.tsx25
1 files changed, 25 insertions, 0 deletions
diff --git a/packages/desktop/src/context/helper.tsx b/packages/desktop/src/context/helper.tsx
new file mode 100644
index 000000000..6be88e775
--- /dev/null
+++ b/packages/desktop/src/context/helper.tsx
@@ -0,0 +1,25 @@
+import { createContext, Show, useContext, type ParentProps } from "solid-js"
+
+export function createSimpleContext<T, Props extends Record<string, any>>(input: {
+ name: string
+ init: ((input: Props) => T) | (() => T)
+}) {
+ const ctx = createContext<T>()
+
+ return {
+ provider: (props: ParentProps<Props>) => {
+ const init = input.init(props)
+ return (
+ // @ts-expect-error
+ <Show when={init.ready === undefined || init.ready === true}>
+ <ctx.Provider value={init}>{props.children}</ctx.Provider>
+ </Show>
+ )
+ },
+ use() {
+ const value = useContext(ctx)
+ if (!value) throw new Error(`${input.name} context must be used within a context provider`)
+ return value
+ },
+ }
+}