import { MenuItem, SelectableMenuItem } from "@noya-app/noya-designsystem"; import { defineTree } from "tree-visit"; export const MenuItemTree = defineTree>((node) => { return node.type === "submenu" ? node.items : []; }); export type ShortcutMenuItem = SelectableMenuItem & { shortcut: string; }; export const getSelectableMenuItems = ( menuItems: MenuItem[] ): SelectableMenuItem[] => { return menuItems .flatMap((items) => MenuItemTree.flat(items)) .flatMap((item) => { if (item.type) return []; return [item as SelectableMenuItem]; }); }; export const getShortcutMenuItems = ( menuItems: MenuItem[] ): ShortcutMenuItem[] => { return getSelectableMenuItems(menuItems).filter( (item): item is ShortcutMenuItem => !!item.shortcut ); };