Louis Young 19ff04abc7
feat(free-demo): support create nodes group (#185)
* feat(demo): create group tool

* feat(demo): create group shortcut

* refactor(core): split group service, controller, utils files

* feat(history): free history add group operations

* feat(demo): group node render

* feat(demo): group node registry

* refactor(stack): remove layer computing config

* feat(stack): line stackIndex cannot be recalculated by default

* feat(demo): group title & color palette acess form

* feat(demo): ungroup button & shortcut

* feat(demo): create group & ungroup operation register to free history service

* refactor(group): group shortcuts move to group-plugin

* refactor(group): group node render move to group-plugin

* fix(group): undo/redo of create node or ungroup not work

* perf(history): free history remove async operation

* feat(group): trigger select box inside group

* fix(group): container inside group

* fix(group): auto layout should not be affected by group node

* feat(container): support multi-layer nested containers

* fix(group): group css variables overwrite each other

* fix(container): node move in or out group shouldn't clear lines

* feat(demo): node should follow mouse after move out container button clicked

* feat(container): disable group move to non-group container node

* fix(container): cross-level node moving causing coord offset

* feat(demo): comment node support more button

* fix(demo): comment in container fromJSON

* feat(container): node into container show move out tips

* feat(group): node into group show move out tips

* feat(group): delete group when blocks is empty

* refactor(group): createFreeGroupPlugin move to container-plugin

* refactor(demo): replace disablePorts with defaultPorts

* fix(demo): react warning

* refactor(group): group plugin built-in GroupNodeRegistry

* refactor(group): create free-group-plugin

* fix(ci): lock & ts-check & test errors
2025-05-07 13:21:34 +00:00

32 lines
1001 B
TypeScript

import { ShortcutsHandler } from '@flowgram.ai/shortcuts-plugin';
import { WorkflowSelectService } from '@flowgram.ai/free-layout-core';
import { PluginContext } from '@flowgram.ai/core';
import { WorkflowGroupService } from '../workflow-group-service';
import { WorkflowGroupCommand } from '../constant';
export class GroupShortcut implements ShortcutsHandler {
public commandId = WorkflowGroupCommand.Group;
public commandDetail: ShortcutsHandler['commandDetail'] = {
label: 'Group',
};
public shortcuts = ['meta g', 'ctrl g'];
private selectService: WorkflowSelectService;
private groupService: WorkflowGroupService;
constructor(context: PluginContext) {
this.selectService = context.get(WorkflowSelectService);
this.groupService = context.get(WorkflowGroupService);
this.execute = this.execute.bind(this);
}
public async execute(): Promise<void> {
this.groupService.createGroup(this.selectService.selectedNodes);
this.selectService.clear();
}
}