jsketcher/web/app/cad/attributes/attributesBundle.ts
2022-08-13 02:57:38 -07:00

60 lines
2 KiB
TypeScript

import {Plugin} from "plugable/pluginSystem";
import {AttributesService} from "cad/attributes/attributesService";
import {contributeComponent} from "cad/dom/components/ContributedComponents";
import {DisplayOptionsDialogManager} from "cad/attributes/ui/DisplayOptionsDialog";
import {ActionSystemBundle} from "cad/actions/actionSystemBundle";
import {RequiresAnyModelSelection} from "cad/actions/actionHelpers";
import {IoColorPalette} from "react-icons/io5";
import {FaTable} from "react-icons/fa";
import {ApplicationContext} from "cad/context";
type AttributesPluginInputContext = ActionSystemBundle;
export interface AttributesPluginContext {
attributesService: AttributesService;
}
type AttributesPluginWorkingContext = AttributesPluginInputContext&AttributesPluginContext;
export const AttributesBundle: Plugin<AttributesPluginInputContext, AttributesPluginContext, AttributesPluginWorkingContext> = {
inputContextSpec: {
actionService: 'required',
},
outputContextSpec: {
attributesService: 'required',
},
activate(ctx: AttributesPluginWorkingContext) {
ctx.attributesService = new AttributesService();
contributeComponent(DisplayOptionsDialogManager);
ctx.actionService.registerActions([
{
id: 'ModelDisplayOptions',
appearance: {
icon: IoColorPalette,
label: 'display options...',
info: 'open a dialog with display options for model(s)',
},
invoke: (ctx: ApplicationContext, e) => ctx.attributesService
.openDisplayOptionsEditor(ctx.entityContextService.selectedIds, e),
...RequiresAnyModelSelection,
},
{
id: 'ModelAttributesEditor',
appearance: {
icon: FaTable,
label: 'edit attributes...',
info: 'open a dialog with attributes editor for the model',
},
invoke: ({services}) => services.sketcher.sketchFace(services.selection.face.single),
...RequiresAnyModelSelection,
},
])
},
}