import { createContext, useCallback, useContext, useState } from "react"; import type { Subtask } from "./types"; export interface SubtaskContextValue { tasks: Record; setTasks: (tasks: Record) => void; } export const SubtaskContext = createContext({ tasks: {}, setTasks: () => { /* noop */ }, }); export function SubtasksProvider({ children }: { children: React.ReactNode }) { const [tasks, setTasks] = useState>({}); return ( {children} ); } export function useSubtaskContext() { const context = useContext(SubtaskContext); if (context === undefined) { throw new Error( "useSubtaskContext must be used within a SubtaskContext.Provider", ); } return context; } export function useSubtask(id: string) { const { tasks } = useSubtaskContext(); return tasks[id]; } export function useUpdateSubtask() { const { tasks, setTasks } = useSubtaskContext(); const updateSubtask = useCallback( (task: Partial & { id: string }) => { tasks[task.id] = { ...tasks[task.id], ...task } as Subtask; if (task.latestMessage) { setTasks({ ...tasks }); } }, [tasks, setTasks], ); return updateSubtask; }