import { useCallback } from 'react'; import bridge from '../../../services/bridge'; import { ColumnName, NoteListColumn, NoteListColumns, columnNames, defaultWidth } from '@joplin/lib/services/plugins/api/noteListType'; import Setting from '@joplin/lib/models/Setting'; import { MenuItemConstructorOptions } from 'electron'; import getColumnTitle from './getColumnTitle'; const Menu = bridge().Menu; export default (columns: NoteListColumns) => { return useCallback(() => { const menuItems: MenuItemConstructorOptions[] = []; for (const columnName of columnNames) { menuItems.push({ id: columnName, label: getColumnTitle(columnName), type: 'checkbox', checked: !!columns.find(c => c.name === columnName), click: (menuItem) => { const newColumns = columns.slice(); const { checked } = menuItem; const id = menuItem.id as ColumnName; if (!checked) { if (columns.length === 1) return; const index = newColumns.findIndex(c => c.name === id); newColumns.splice(index, 1); } else { const newColumn: NoteListColumn = { name: id, width: defaultWidth, }; newColumns.push(newColumn); } Setting.setValue('notes.columns', newColumns); }, }); } menuItems.sort((a, b) => { return a.label < b.label ? -1 : +1; }); const menu = Menu.buildFromTemplate(menuItems); menu.popup({ window: bridge().window() }); }, [columns]); };