UNPKG

@paperbits/core

Version:
93 lines (83 loc) 3.91 kB
import { IWidgetHandler, WidgetContext } from "@paperbits/common/editing"; import { EventManager, Events } from "@paperbits/common/events"; import { DragSession } from "@paperbits/common/ui/draggables"; import { IContextCommandSet, ViewManager } from "@paperbits/common/ui"; import { WidgetModel } from "@paperbits/common/widgets"; import { ContainerModel } from "./containerModel"; import { openWidgetEditorCommand, splitter, switchToParentCommand } from "@paperbits/common/ui/commands"; export class ContainerHandlers implements IWidgetHandler<ContainerModel> { constructor( private readonly viewManager: ViewManager, private readonly eventManager: EventManager ) { } public canAccept(dragSession: DragSession): boolean { return !["section", "row", "column", "container"].includes(dragSession.sourceBinding.name); } public getContextCommands(context: WidgetContext): IContextCommandSet { const containerContextualEditor: IContextCommandSet = { color: "#4c5866", hoverCommands: [{ controlType: "toolbox-button", color: "#607d8b", iconClass: "paperbits-icon paperbits-simple-add", position: context.half, tooltip: "Add widget", component: { name: "widget-selector", params: { onRequest: () => context.providers, onSelect: (newWidgetModel: any) => { let index = context.parentModel.widgets.indexOf(context.model); if (context.half === "bottom") { index++; } context.parentBinding.model.widgets.splice(index, 0, newWidgetModel); context.parentBinding.applyChanges(); this.viewManager.clearContextualCommands(); } } } }], deleteCommand: { controlType: "toolbox-button", tooltip: "Delete container", color: "#4c5866", callback: () => { context.parentModel.widgets.remove(context.model); context.parentBinding.applyChanges(); this.viewManager.clearContextualCommands(); this.eventManager.dispatchEvent(Events.ContentUpdate); } }, selectCommands: [ openWidgetEditorCommand(context, "Edit container"), splitter(), switchToParentCommand(context)] }; if (context.model.widgets.length === 0) { containerContextualEditor.hoverCommands.push({ controlType: "toolbox-button", color: "#607d8b", iconClass: "paperbits-icon paperbits-simple-add", position: "center", tooltip: "Add widget", component: { name: "widget-selector", params: { onRequest: () => context.providers, onSelect: (widget: WidgetModel) => { context.model.widgets.push(widget); context.binding.applyChanges(); this.eventManager.dispatchEvent(Events.ContentUpdate); this.viewManager.clearContextualCommands(); } } } }); } return containerContextualEditor; } public async getWidgetModel(): Promise<ContainerModel> { return new ContainerModel(); } }