fix: try prevent empty menuitem passedin

I got

```json
[
  {
    "id": "TiddlyGit",
    "submenu": [
      {},
      { "type": "separator" },
      {},
      { "accelerator": "CmdOrCtrl+," },
      { "type": "separator" },
      { "accelerator": "CmdOrCtrl+Shift+N" },
      { "type": "separator" },
      { "role": "services", "submenu": [] },
      { "type": "separator" },
      { "role": "hide" },
      { "role": "hideOthers" },
      { "role": "unhide" },
      { "label": null, "role": "quit" }
    ]
  },
  { "id": "Edit", "role": "editMenu" },
  {
    "id": "View",
    "submenu": [
      { "accelerator": "CmdOrCtrl+F", "enabled": true },
      { "accelerator": "CmdOrCtrl+G", "enabled": true },
      { "accelerator": "Shift+CmdOrCtrl+G", "enabled": true },
      { "label": "undefined (undefined)", "checked": false },
      { "type": "separator" },
      { "role": "reload" },
      { "role": "forceReload" },
      { "role": "zoom" },
      { "role": "resetZoom" },
      { "role": "togglefullscreen" },
      { "role": "close" }
    ]
  },
  { "id": "Language" },
  {
    "id": "History",
    "submenu": [
      { "accelerator": "Shift+CmdOrCtrl+H", "enabled": true },
      { "accelerator": "CmdOrCtrl+[", "enabled": true },
      { "accelerator": "CmdOrCtrl+]", "enabled": true },
      { "type": "separator" },
      { "accelerator": "CmdOrCtrl+L", "enabled": true }
    ]
  },
  {
    "id": "Workspaces",
    "submenu": [
      { "accelerator": "CmdOrCtrl+Shift+]", "enabled": false },
      { "accelerator": "CmdOrCtrl+Shift+[", "enabled": false },
      { "type": "separator" },
      { "enabled": true },
      { "enabled": true },
      { "enabled": true },
      { "type": "separator" },
      {},
      { "accelerator": "CmdOrCtrl+Option+I", "enabled": true }
    ]
  },
  { "id": "Workspaces", "submenu": [] },
  { "role": "windowMenu", "id": "Window" },
  { "role": "help", "id": "help", "submenu": [{}, {}, {}, {}] },
  { "label": "Wiki", "submenu": [{ "enabled": true }, { "accelerator": "CmdOrCtrl+Alt+Shift+P" }] }
]
```
This commit is contained in:
tiddlygit-test 2021-10-16 12:37:40 +08:00
parent c97466a1c7
commit 992b2d9918

View file

@ -93,14 +93,16 @@ export class MenuService implements IMenuService {
): Promise<MenuItemConstructorOptions[] | undefined> {
if (submenu === undefined) return;
return await Promise.all(
submenu.map(async (item) => ({
...item,
/** label sometimes is null, causing */
label: typeof item.label === 'function' ? item.label() ?? undefined : item.label,
checked: typeof item.checked === 'function' ? await item.checked() : item.checked,
enabled: typeof item.enabled === 'function' ? await item.enabled() : item.enabled,
submenu: !Array.isArray(item.submenu) ? item.submenu : await this.getCurrentMenuItemConstructorOptions(compact(item.submenu)),
})),
submenu
.filter((item) => Object.keys(item).length > 0)
.map(async (item) => ({
...item,
/** label sometimes is null, causing */
label: typeof item.label === 'function' ? item.label() ?? undefined : item.label,
checked: typeof item.checked === 'function' ? await item.checked() : item.checked,
enabled: typeof item.enabled === 'function' ? await item.enabled() : item.enabled,
submenu: !Array.isArray(item.submenu) ? item.submenu : await this.getCurrentMenuItemConstructorOptions(compact(item.submenu)),
})),
);
}