MCPcopy Index your code
hub / github.com/Dimillian/CodexMonitor / useMenuController

Function useMenuController

src/features/app/hooks/useMenuController.ts:29–86  ·  view source on GitHub ↗
({
  open: controlledOpen,
  defaultOpen = false,
  onOpenChange,
  onDismiss,
  closeOnEscape = true,
}: UseMenuControllerOptions = {})

Source from the content-addressed store, hash-verified

27}
28
29export function useMenuController({
30 open: controlledOpen,
31 defaultOpen = false,
32 onOpenChange,
33 onDismiss,
34 closeOnEscape = true,
35}: UseMenuControllerOptions = {}): MenuController {
36 const [uncontrolledOpen, setUncontrolledOpen] = useState(defaultOpen);
37 const isControlled = controlledOpen !== undefined;
38 const isOpen = isControlled ? controlledOpen : uncontrolledOpen;
39 const containerRef = useRef<HTMLDivElement | null>(null);
40
41 const setOpen = useCallback(
42 (next: OpenStateUpdater) => {
43 if (isControlled) {
44 const current = controlledOpen ?? false;
45 const resolvedNext = resolveNextOpen(current, next);
46 if (resolvedNext !== current) {
47 onOpenChange?.(resolvedNext);
48 }
49 return;
50 }
51
52 setUncontrolledOpen((current) => {
53 const resolvedNext = resolveNextOpen(current, next);
54 if (resolvedNext !== current) {
55 onOpenChange?.(resolvedNext);
56 }
57 return resolvedNext;
58 });
59 },
60 [controlledOpen, isControlled, onOpenChange],
61 );
62
63 const open = useCallback(() => setOpen(true), [setOpen]);
64 const close = useCallback(() => setOpen(false), [setOpen]);
65 const toggle = useCallback(() => setOpen((current) => !current), [setOpen]);
66 const dismiss = useCallback(() => {
67 close();
68 onDismiss?.();
69 }, [close, onDismiss]);
70
71 useDismissibleMenu({
72 isOpen,
73 containerRef,
74 onClose: dismiss,
75 closeOnEscape,
76 });
77
78 return {
79 isOpen,
80 containerRef,
81 setOpen,
82 open,
83 close,
84 toggle,
85 };
86}

Callers 9

QueueMenuButtonFunction · 0.90
WorkspaceHomeRunControlsFunction · 0.90
SidebarBottomRailFunction · 0.90
SidebarHeaderFunction · 0.90
MainHeaderFunction · 0.90
LaunchScriptEntryButtonFunction · 0.90
Sidebar.tsxFile · 0.90
LaunchScriptButtonFunction · 0.90
OpenAppMenuFunction · 0.90

Calls 3

useDismissibleMenuFunction · 0.90
resolveNextOpenFunction · 0.85
closeFunction · 0.85

Tested by

no test coverage detected