Spaces:
Paused
Paused
| import { createContext, useCallback, useContext, useState, type ReactNode } from "react"; | |
| interface NewIssueDefaults { | |
| status?: string; | |
| priority?: string; | |
| projectId?: string; | |
| assigneeAgentId?: string; | |
| assigneeUserId?: string; | |
| title?: string; | |
| description?: string; | |
| } | |
| interface NewGoalDefaults { | |
| parentId?: string; | |
| } | |
| interface OnboardingOptions { | |
| initialStep?: 1 | 2 | 3 | 4; | |
| companyId?: string; | |
| } | |
| interface DialogContextValue { | |
| newIssueOpen: boolean; | |
| newIssueDefaults: NewIssueDefaults; | |
| openNewIssue: (defaults?: NewIssueDefaults) => void; | |
| closeNewIssue: () => void; | |
| newProjectOpen: boolean; | |
| openNewProject: () => void; | |
| closeNewProject: () => void; | |
| newGoalOpen: boolean; | |
| newGoalDefaults: NewGoalDefaults; | |
| openNewGoal: (defaults?: NewGoalDefaults) => void; | |
| closeNewGoal: () => void; | |
| newAgentOpen: boolean; | |
| openNewAgent: () => void; | |
| closeNewAgent: () => void; | |
| onboardingOpen: boolean; | |
| onboardingOptions: OnboardingOptions; | |
| openOnboarding: (options?: OnboardingOptions) => void; | |
| closeOnboarding: () => void; | |
| } | |
| const DialogContext = createContext<DialogContextValue | null>(null); | |
| export function DialogProvider({ children }: { children: ReactNode }) { | |
| const [newIssueOpen, setNewIssueOpen] = useState(false); | |
| const [newIssueDefaults, setNewIssueDefaults] = useState<NewIssueDefaults>({}); | |
| const [newProjectOpen, setNewProjectOpen] = useState(false); | |
| const [newGoalOpen, setNewGoalOpen] = useState(false); | |
| const [newGoalDefaults, setNewGoalDefaults] = useState<NewGoalDefaults>({}); | |
| const [newAgentOpen, setNewAgentOpen] = useState(false); | |
| const [onboardingOpen, setOnboardingOpen] = useState(false); | |
| const [onboardingOptions, setOnboardingOptions] = useState<OnboardingOptions>({}); | |
| const openNewIssue = useCallback((defaults: NewIssueDefaults = {}) => { | |
| setNewIssueDefaults(defaults); | |
| setNewIssueOpen(true); | |
| }, []); | |
| const closeNewIssue = useCallback(() => { | |
| setNewIssueOpen(false); | |
| setNewIssueDefaults({}); | |
| }, []); | |
| const openNewProject = useCallback(() => { | |
| setNewProjectOpen(true); | |
| }, []); | |
| const closeNewProject = useCallback(() => { | |
| setNewProjectOpen(false); | |
| }, []); | |
| const openNewGoal = useCallback((defaults: NewGoalDefaults = {}) => { | |
| setNewGoalDefaults(defaults); | |
| setNewGoalOpen(true); | |
| }, []); | |
| const closeNewGoal = useCallback(() => { | |
| setNewGoalOpen(false); | |
| setNewGoalDefaults({}); | |
| }, []); | |
| const openNewAgent = useCallback(() => { | |
| setNewAgentOpen(true); | |
| }, []); | |
| const closeNewAgent = useCallback(() => { | |
| setNewAgentOpen(false); | |
| }, []); | |
| const openOnboarding = useCallback((options: OnboardingOptions = {}) => { | |
| setOnboardingOptions(options); | |
| setOnboardingOpen(true); | |
| }, []); | |
| const closeOnboarding = useCallback(() => { | |
| setOnboardingOpen(false); | |
| setOnboardingOptions({}); | |
| }, []); | |
| return ( | |
| <DialogContext.Provider | |
| value={{ | |
| newIssueOpen, | |
| newIssueDefaults, | |
| openNewIssue, | |
| closeNewIssue, | |
| newProjectOpen, | |
| openNewProject, | |
| closeNewProject, | |
| newGoalOpen, | |
| newGoalDefaults, | |
| openNewGoal, | |
| closeNewGoal, | |
| newAgentOpen, | |
| openNewAgent, | |
| closeNewAgent, | |
| onboardingOpen, | |
| onboardingOptions, | |
| openOnboarding, | |
| closeOnboarding, | |
| }} | |
| > | |
| {children} | |
| </DialogContext.Provider> | |
| ); | |
| } | |
| export function useDialog() { | |
| const ctx = useContext(DialogContext); | |
| if (!ctx) { | |
| throw new Error("useDialog must be used within DialogProvider"); | |
| } | |
| return ctx; | |
| } | |