Skip to content
Source
Sign inSign up

WorkspaceMutationIdProvider.tsx

25 lines884 Bytes

1import { useAtomValue } from "@effect/atom-react";
2import type { ScopedThreadRef } from "@t3tools/contracts";
3import { Atom } from "effect/reactivity";
4import type { ReactNode } from "react";
5​
6import { environmentThreadDetails } from "../../state/threads";
7import { WorkspaceMutationIdContext } from "./workspaceMutationIdContext";
8​
9const NO_WORKSPACE_MUTATION_ID_ATOM = Atom.make<string | null | undefined>(undefined);
10​
11export function WorkspaceMutationIdProvider(props: {
12 readonly threadRef: ScopedThreadRef | null;
13 readonly children: ReactNode;
14}) {
15 const workspaceMutationId = useAtomValue(
16 props.threadRef === null
17 ? NO_WORKSPACE_MUTATION_ID_ATOM
18 : environmentThreadDetails.workspaceMutationIdAtom(props.threadRef),
19 );
20 return (
21 <WorkspaceMutationIdContext value={workspaceMutationId}>
22 {props.children}
23 </WorkspaceMutationIdContext>
24 );