mirror of
https://github.com/laurent22/joplin.git
synced 2024-12-18 09:35:20 +02:00
52 lines
1.4 KiB
TypeScript
52 lines
1.4 KiB
TypeScript
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]);
|
|
};
|