in frontend/apps/quantgrid/src/app/components/MainMenu/MainMenuItems.tsx [240:527]
export function getMenuItems({
selectedCell,
functions,
parsedSheets,
inputFiles,
isYourProject,
isAIPendingChanges,
onCreateTable,
}: {
selectedCell: GridCell | null | undefined;
functions: FunctionInfo[];
parsedSheets: ParsedSheets;
inputFiles: FilesMetadata[] | null;
isYourProject: boolean;
isAIPendingChanges: boolean;
onCreateTable: (cols: number, rows: number) => void;
}) {
return [
{
label: 'File',
key: 'FileMenu',
icon: (
<Icon className="stroke-textSecondary" component={() => <FileIcon />} />
),
children: [
getDropdownItem({
label: 'Create project',
key: fileMenuKeys.createProject,
shortcut: shortcutApi.getLabel(Shortcut.NewProject),
}),
getDropdownItem({
label: 'Create worksheet',
key: fileMenuKeys.createWorksheet,
}),
getDropdownDivider(),
getDropdownItem({
label: 'Clear project history',
key: fileMenuKeys.clearProjectHistory,
}),
getDropdownDivider(),
getDropdownItem({
label: 'Delete project',
key: fileMenuKeys.deleteProject,
disabled: !isYourProject,
tooltip: !isYourProject
? 'You are not allowed to delete projects which are not yours'
: undefined,
}),
getDropdownDivider(),
getDropdownItem({
label: 'Share project',
key: fileMenuKeys.shareProject,
disabled: !isYourProject,
tooltip: !isYourProject
? 'You are not allowed to share projects which are not yours'
: undefined,
}),
getDropdownDivider(),
getDropdownItem({
label: 'Back to projects',
key: fileMenuKeys.closeProject,
}),
],
},
{
label: 'Edit',
key: 'EditMenu',
icon: (
<Icon
className="w-[18px] text-textSecondary stroke-textSecondary"
component={() => <EditIcon />}
/>
),
children: [
getDropdownItem({
label: 'Undo',
key: editMenuKeys.undo,
shortcut: shortcutApi.getLabel(Shortcut.UndoAction),
disabled: isAIPendingChanges,
tooltip: isAIPendingChanges
? 'Please accept or discard pending AI change before continue working with project'
: undefined,
}),
getDropdownItem({
label: 'Redo',
key: editMenuKeys.redo,
shortcut: shortcutApi.getLabel(Shortcut.RedoAction),
disabled: isAIPendingChanges,
tooltip: isAIPendingChanges
? 'Please accept or discard pending AI change before continue working with project'
: undefined,
}),
getDropdownDivider(),
getDropdownItem({
label: 'Search',
key: editMenuKeys.search,
shortcut: shortcutApi.getLabel(Shortcut.SearchWindow),
}),
getDropdownDivider(),
getDropdownItem({
label: 'Rename Project',
key: editMenuKeys.renameProject,
disabled: !isYourProject,
tooltip: !isYourProject
? 'You are not allowed to rename projects which are not yours'
: undefined,
}),
getDropdownItem({
label: 'Rename Worksheet',
key: editMenuKeys.renameWorksheet,
}),
getDropdownItem({
label: 'Delete Worksheet',
key: editMenuKeys.deleteWorksheet,
}),
],
},
{
label: 'View',
key: 'ViewMenu',
icon: (
<Icon className="stroke-textSecondary" component={() => <ViewIcon />} />
),
children: [
getDropdownItem({
label: 'Panels',
key: 'PanelMenu',
children: [
getDropdownItem({
label: 'Toggle Project Tree',
key: 'ToggleProjectTree',
shortcut: shortcutApi.getLabel(Shortcut.ToggleProjects),
}),
getDropdownItem({
label: 'Toggle Code Editor',
key: 'ToggleCodeEditor',
shortcut: shortcutApi.getLabel(Shortcut.ToggleCodeEditor),
}),
getDropdownItem({
label: 'Toggle Inputs',
key: 'ToggleInputs',
shortcut: shortcutApi.getLabel(Shortcut.ToggleInputs),
}),
getDropdownItem({
label: 'Toggle Error Panel',
key: 'ToggleErrorPanel',
shortcut: shortcutApi.getLabel(Shortcut.ToggleErrors),
}),
getDropdownItem({
label: 'Toggle History Panel',
key: 'ToggleHistoryPanel',
shortcut: shortcutApi.getLabel(Shortcut.ToggleHistory),
}),
getDropdownItem({
label: 'Toggle Chat',
key: 'ToggleChat',
shortcut: shortcutApi.getLabel(Shortcut.ToggleChat),
}),
],
}),
getDropdownItem({
label: 'Reset spreadsheet columns',
key: viewMenuKeys.resetSheetColumns,
}),
getDropdownItem({
label: 'Toggle Chat Placement',
key: 'ToggleChatPlacement',
}),
],
},
{
label: 'Insert',
key: 'InsertMenu',
icon: (
<Icon
className="w-4 stroke-textSecondary"
component={() => <InsertIcon />}
/>
),
children: [
getDropdownItem({
label: 'Table',
key: insertMenuKeys.table,
children: getCreateTableChildren(
functions,
parsedSheets,
inputFiles,
onCreateTable
) as MenuItem[],
}),
getDropdownDivider(),
getDropdownItem({
label: 'New field',
key: insertMenuKeys.newField,
disabled: !selectedCell?.table?.tableName,
tooltip: !selectedCell?.table?.tableName
? 'No table selected'
: undefined,
}),
getDropdownItem({
label: selectedCell?.table?.isTableHorizontal
? 'Field above'
: 'Field to the left',
key: insertMenuKeys.insertLeft,
disabled: !selectedCell?.field?.fieldName,
tooltip: !selectedCell?.field ? 'No field cell selected' : undefined,
}),
getDropdownItem({
label: selectedCell?.table?.isTableHorizontal
? 'Field below'
: 'Field to the right',
key: insertMenuKeys.insertRight,
disabled: !selectedCell?.field?.fieldName,
tooltip: !selectedCell?.field ? 'No field cell selected' : undefined,
}),
getDropdownDivider(),
getDropdownItem({
label: 'New row',
key: insertMenuKeys.newRow,
disabled:
!selectedCell?.table ||
(!!selectedCell && !selectedCell?.table?.isManual),
tooltip: !selectedCell?.table
? 'No table selected'
: selectedCell && !selectedCell?.table?.isManual
? 'Only available for manual table'
: undefined,
}),
getDropdownItem({
label: selectedCell?.table?.isTableHorizontal
? 'Row to the left'
: 'Row above',
key: insertMenuKeys.newRowAbove,
disabled:
selectedCell?.isFieldHeader ||
selectedCell?.isTableHeader ||
(!!selectedCell && !selectedCell?.table?.isManual),
tooltip:
selectedCell?.isFieldHeader || selectedCell?.isTableHeader
? 'No table cell selected'
: selectedCell && !selectedCell?.table?.isManual
? 'Only available for manual table'
: undefined,
}),
getDropdownItem({
label: selectedCell?.table?.isTableHorizontal
? 'Row to the right'
: 'Row below',
key: insertMenuKeys.newRowBelow,
disabled:
selectedCell?.isFieldHeader ||
selectedCell?.isTableHeader ||
(!!selectedCell && !selectedCell?.table?.isManual),
tooltip:
selectedCell?.isFieldHeader || selectedCell?.isTableHeader
? 'No table cell selected'
: selectedCell && !selectedCell?.table?.isManual
? 'Only available for manual table'
: undefined,
}),
],
},
{
label: 'Help',
key: 'HelpMenu',
icon: (
<Icon
className="stroke-textSecondary"
component={() => <QuestionIcon />}
/>
),
children: [
getDropdownItem({
label: 'Keyboard Shortcuts',
key: helpMenuKeys.shortcuts,
}),
getDropdownItem({
label: 'Toggle grid',
key: helpMenuKeys.toggleGrid,
}),
],
},
];
}