Files
paperclip/ui/src/context/DialogContext.tsx
Forgotten d912670f72 Polish UI: enhance dialogs, command palette, and page layouts
Expand NewIssueDialog with richer form fields. Add NewProjectDialog.
Enhance CommandPalette with more actions and search. Improve
CompanySwitcher, EmptyState, and IssueProperties. Flesh out Activity,
Companies, Dashboard, and Inbox pages with real content and layouts.
Refine sidebar, routing, and dialog context. CSS tweaks for dark theme.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 10:53:20 -06:00

68 lines
1.7 KiB
TypeScript

import { createContext, useCallback, useContext, useState, type ReactNode } from "react";
interface NewIssueDefaults {
status?: string;
priority?: string;
projectId?: string;
}
interface DialogContextValue {
newIssueOpen: boolean;
newIssueDefaults: NewIssueDefaults;
openNewIssue: (defaults?: NewIssueDefaults) => void;
closeNewIssue: () => void;
newProjectOpen: boolean;
openNewProject: () => void;
closeNewProject: () => 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 openNewIssue = useCallback((defaults: NewIssueDefaults = {}) => {
setNewIssueDefaults(defaults);
setNewIssueOpen(true);
}, []);
const closeNewIssue = useCallback(() => {
setNewIssueOpen(false);
setNewIssueDefaults({});
}, []);
const openNewProject = useCallback(() => {
setNewProjectOpen(true);
}, []);
const closeNewProject = useCallback(() => {
setNewProjectOpen(false);
}, []);
return (
<DialogContext.Provider
value={{
newIssueOpen,
newIssueDefaults,
openNewIssue,
closeNewIssue,
newProjectOpen,
openNewProject,
closeNewProject,
}}
>
{children}
</DialogContext.Provider>
);
}
export function useDialog() {
const ctx = useContext(DialogContext);
if (!ctx) {
throw new Error("useDialog must be used within DialogProvider");
}
return ctx;
}