summaryrefslogtreecommitdiffhomepage
path: root/cloud/web/src/pages/components/context-workspace.tsx
blob: 6bad39840c48f25e13d789ebf99f589dbbcae905 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import { useNavigate, useParams } from "@solidjs/router"
import { createInitializedContext } from "../../util/context"
import { useAccount } from "../../components/context-account"
import { createEffect, createMemo } from "solid-js"

export const { use: useWorkspace, provider: WorkspaceProvider } =
  createInitializedContext("WorkspaceProvider", () => {
    const params = useParams()
    const account = useAccount()
    const workspace = createMemo(() =>
      account.current?.workspaces.find(
        (x) => x.id === params.workspace || x.slug === params.workspace,
      ),
    )
    const nav = useNavigate()

    createEffect(() => {
      if (!workspace()) nav("/")
    })

    const result = () => workspace()!
    result.ready = true

    return {
      get id() {
        return workspace()!.id
      },
      get slug() {
        return workspace()!.slug
      },
      get name() {
        return workspace()!.name
      },
      get ready() {
        return workspace() !== undefined
      },
    }
  })