UNPKG

scrivito

Version:

Scrivito is a professional, yet easy to use SaaS Enterprise Content Management Service, built for digital agencies and medium to large businesses. It is completely maintenance-free, cost-effective, and has unprecedented performance and security.

55 lines (46 loc) 1.33 kB
import mapValues from 'lodash-es/mapValues'; import pick from 'lodash-es/pick'; import { absoluteUrl } from 'scrivito_sdk/app_support/absolute_url'; import { CustomMenuItem, MenuBuilder, MenuItem, MenuPatch, } from 'scrivito_sdk/ui_interface'; export class MenuPatchBuilder implements MenuBuilder { private readonly patch: Required<MenuPatch>; constructor() { this.patch = { insertIds: [], removeIds: [], items: {}, modifyItems: {}, }; } insert(customMenuItem: CustomMenuItem): void { this.patch.insertIds = Array.from( new Set(this.patch.insertIds).add(customMenuItem.id) ); this.patch.items[customMenuItem.id] = { ...pick(customMenuItem, 'description', 'group', 'position', 'title'), ...mapValues(pick(customMenuItem, 'enabled'), (v?: boolean) => !!v), ...iconPatch(customMenuItem.icon), }; } modify(menuItem: MenuItem): void { this.patch.modifyItems[menuItem.id] = { ...this.patch.modifyItems[menuItem.id], ...pick(menuItem, 'group', 'position', 'title'), ...iconPatch(menuItem.icon), }; } remove(id: string): void { this.patch.removeIds.push(id); } getPatch(): MenuPatch { return this.patch; } } function iconPatch(icon?: string) { return icon ? { icon: absoluteUrl(icon) } : {}; }