@paperbits/core
Version:
Paperbits core components.
93 lines (83 loc) • 3.91 kB
text/typescript
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();
}
}