2
0

create-free-group-plugin.tsx 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. /**
  2. * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
  3. * SPDX-License-Identifier: MIT
  4. */
  5. import { ShortcutsRegistry } from '@flowgram.ai/shortcuts-plugin';
  6. import { FlowRendererRegistry } from '@flowgram.ai/renderer';
  7. import { WorkflowDocument } from '@flowgram.ai/free-layout-core';
  8. import { FlowGroupService, FlowNodeBaseType } from '@flowgram.ai/document';
  9. import { definePluginCreator, PluginContext } from '@flowgram.ai/core';
  10. import { WorkflowGroupService } from './workflow-group-service';
  11. import { WorkflowGroupPluginOptions } from './type';
  12. import { GroupShortcut, UngroupShortcut } from './shortcuts';
  13. import { GroupNodeRegistry } from './group-node';
  14. export const createFreeGroupPlugin = definePluginCreator<WorkflowGroupPluginOptions, PluginContext>(
  15. {
  16. onBind({ bind, rebind }, opts) {
  17. bind(WorkflowGroupService).toSelf().inSingletonScope();
  18. bind(WorkflowGroupPluginOptions).toConstantValue(opts);
  19. rebind(FlowGroupService).toService(WorkflowGroupService);
  20. },
  21. onInit(ctx, { groupNodeRender, disableGroupShortcuts = false }) {
  22. // register node render
  23. if (groupNodeRender) {
  24. const renderRegistry = ctx.get<FlowRendererRegistry>(FlowRendererRegistry);
  25. renderRegistry.registerReactComponent(FlowNodeBaseType.GROUP, groupNodeRender);
  26. }
  27. // register shortcuts
  28. if (!disableGroupShortcuts) {
  29. const shortcutsRegistry = ctx.get(ShortcutsRegistry);
  30. shortcutsRegistry.addHandlers(new GroupShortcut(ctx), new UngroupShortcut(ctx));
  31. }
  32. const document = ctx.get(WorkflowDocument);
  33. if (!document.getNodeRegistry(FlowNodeBaseType.GROUP)) {
  34. document.registerFlowNodes(GroupNodeRegistry);
  35. }
  36. },
  37. onReady(ctx) {
  38. const groupService = ctx.get(WorkflowGroupService);
  39. groupService.ready();
  40. },
  41. onDispose(ctx) {
  42. const groupService = ctx.get(WorkflowGroupService);
  43. groupService.dispose();
  44. },
  45. }
  46. );