@flowgram.ai/free-group-plugin 0.1.0-alpha.8 → 0.1.0-alpha.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/esm/index.js +5 -9
- package/dist/esm/index.js.map +1 -1
- package/dist/index.js +5 -9
- package/dist/index.js.map +1 -1
- package/package.json +12 -12
package/dist/esm/index.js
CHANGED
|
@@ -37,8 +37,7 @@ import { FlowNodeBaseType } from "@flowgram.ai/document";
|
|
|
37
37
|
var WorkflowGroupUtils;
|
|
38
38
|
((WorkflowGroupUtils2) => {
|
|
39
39
|
const isNodeInGroup = (node) => {
|
|
40
|
-
|
|
41
|
-
if (((_a = node == null ? void 0 : node.parent) == null ? void 0 : _a.flowNodeType) === FlowNodeBaseType.GROUP) {
|
|
40
|
+
if (node?.parent?.flowNodeType === FlowNodeBaseType.GROUP) {
|
|
42
41
|
return true;
|
|
43
42
|
}
|
|
44
43
|
return false;
|
|
@@ -73,11 +72,10 @@ var WorkflowGroupService = class extends FlowGroupService {
|
|
|
73
72
|
}
|
|
74
73
|
/** 创建分组节点 */
|
|
75
74
|
createGroup(nodes) {
|
|
76
|
-
var _a;
|
|
77
75
|
if (!WorkflowGroupUtils.validate(nodes)) {
|
|
78
76
|
return;
|
|
79
77
|
}
|
|
80
|
-
const parent =
|
|
78
|
+
const parent = nodes[0].parent ?? this.document.root;
|
|
81
79
|
const groupId = `group_${nanoid(5)}`;
|
|
82
80
|
const groupJSON = {
|
|
83
81
|
type: FlowNodeBaseType2.GROUP,
|
|
@@ -116,9 +114,8 @@ var WorkflowGroupService = class extends FlowGroupService {
|
|
|
116
114
|
const groupPosition = groupNode.transform.position;
|
|
117
115
|
this.historyService.startTransaction();
|
|
118
116
|
groupBlocks.forEach((node) => {
|
|
119
|
-
var _a;
|
|
120
117
|
this.freeOperationService.moveNode(node, {
|
|
121
|
-
parent:
|
|
118
|
+
parent: groupNode.parent?.id
|
|
122
119
|
});
|
|
123
120
|
});
|
|
124
121
|
groupNode.dispose();
|
|
@@ -134,11 +131,10 @@ var WorkflowGroupService = class extends FlowGroupService {
|
|
|
134
131
|
}
|
|
135
132
|
listenContainer() {
|
|
136
133
|
return this.nodeIntoContainerService.on((e) => {
|
|
137
|
-
|
|
138
|
-
if (e.type !== NodeIntoContainerType.Out || ((_a = e.sourceContainer) == null ? void 0 : _a.flowNodeType) !== FlowNodeBaseType2.GROUP) {
|
|
134
|
+
if (e.type !== NodeIntoContainerType.Out || e.sourceContainer?.flowNodeType !== FlowNodeBaseType2.GROUP) {
|
|
139
135
|
return;
|
|
140
136
|
}
|
|
141
|
-
if (
|
|
137
|
+
if (e.sourceContainer?.blocks.length === 0) {
|
|
142
138
|
e.sourceContainer.dispose();
|
|
143
139
|
}
|
|
144
140
|
});
|
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/create-free-group-plugin.tsx","../../src/workflow-group-service.ts","../../src/utils.ts","../../src/shortcuts/group.ts","../../src/constant.ts","../../src/shortcuts/ungroup.ts","../../src/group-node.tsx"],"sourcesContent":["import { ShortcutsRegistry } from '@flowgram.ai/shortcuts-plugin';\nimport { FlowRendererRegistry } from '@flowgram.ai/renderer';\nimport { WorkflowDocument } from '@flowgram.ai/free-layout-core';\nimport { FlowGroupService, FlowNodeBaseType } from '@flowgram.ai/document';\nimport { definePluginCreator, PluginContext } from '@flowgram.ai/core';\n\nimport { WorkflowGroupService } from './workflow-group-service';\nimport { WorkflowGroupPluginOptions } from './type';\nimport { GroupShortcut, UngroupShortcut } from './shortcuts';\nimport { GroupNodeRegistry } from './group-node';\n\nexport const createFreeGroupPlugin = definePluginCreator<WorkflowGroupPluginOptions, PluginContext>(\n {\n onBind({ bind, rebind }) {\n bind(WorkflowGroupService).toSelf().inSingletonScope();\n rebind(FlowGroupService).toService(WorkflowGroupService);\n },\n onInit(\n ctx,\n { groupNodeRender, disableGroupShortcuts = false, disableGroupNodeRegister = false }\n ) {\n // register node render\n if (groupNodeRender) {\n const renderRegistry = ctx.get<FlowRendererRegistry>(FlowRendererRegistry);\n renderRegistry.registerReactComponent(FlowNodeBaseType.GROUP, groupNodeRender);\n }\n // register shortcuts\n if (!disableGroupShortcuts) {\n const shortcutsRegistry = ctx.get(ShortcutsRegistry);\n shortcutsRegistry.addHandlers(new GroupShortcut(ctx), new UngroupShortcut(ctx));\n }\n if (!disableGroupNodeRegister) {\n const document = ctx.get(WorkflowDocument);\n document.registerFlowNodes(GroupNodeRegistry);\n }\n },\n onReady(ctx) {\n const groupService = ctx.get(WorkflowGroupService);\n groupService.ready();\n },\n onDispose(ctx) {\n const groupService = ctx.get(WorkflowGroupService);\n groupService.dispose();\n },\n }\n);\n","import { injectable, inject } from 'inversify';\nimport { DisposableCollection, Disposable } from '@flowgram.ai/utils';\nimport {\n WorkflowDocument,\n WorkflowOperationBaseService,\n WorkflowNodeEntity,\n nanoid,\n WorkflowNodeJSON,\n} from '@flowgram.ai/free-layout-core';\nimport { HistoryService } from '@flowgram.ai/free-history-plugin';\nimport {\n NodeIntoContainerService,\n NodeIntoContainerType,\n} from '@flowgram.ai/free-container-plugin';\nimport { FlowGroupService, FlowNodeBaseType } from '@flowgram.ai/document';\nimport { TransformData } from '@flowgram.ai/core';\n\nimport { WorkflowGroupUtils } from './utils';\n\n@injectable()\n/** 分组服务 */\nexport class WorkflowGroupService extends FlowGroupService {\n @inject(WorkflowDocument) private document: WorkflowDocument;\n\n @inject(WorkflowOperationBaseService) freeOperationService: WorkflowOperationBaseService;\n\n @inject(HistoryService) private historyService: HistoryService;\n\n @inject(NodeIntoContainerService) private nodeIntoContainerService: NodeIntoContainerService;\n\n private toDispose = new DisposableCollection();\n\n public ready(): void {\n this.toDispose.push(this.listenContainer());\n }\n\n public dispose(): void {\n this.toDispose.dispose();\n }\n\n /** 创建分组节点 */\n public createGroup(nodes: WorkflowNodeEntity[]): WorkflowNodeEntity | undefined {\n if (!WorkflowGroupUtils.validate(nodes)) {\n return;\n }\n const parent = nodes[0].parent ?? this.document.root;\n const groupId = `group_${nanoid(5)}`;\n const groupJSON: WorkflowNodeJSON = {\n type: FlowNodeBaseType.GROUP,\n id: groupId,\n meta: {\n position: {\n x: 0,\n y: 0,\n },\n },\n data: {},\n };\n this.historyService.startTransaction();\n this.document.createWorkflowNodeByType(\n FlowNodeBaseType.GROUP,\n {\n x: 0,\n y: 0,\n },\n groupJSON,\n parent.id\n );\n nodes.forEach((node) => {\n this.freeOperationService.moveNode(node, {\n parent: groupId,\n });\n });\n this.historyService.endTransaction();\n }\n\n /** 取消分组 */\n public ungroup(groupNode: WorkflowNodeEntity): void {\n const groupBlocks = groupNode.blocks.slice();\n if (!groupNode.parent) {\n return;\n }\n const groupPosition = groupNode.transform.position;\n\n this.historyService.startTransaction();\n groupBlocks.forEach((node) => {\n this.freeOperationService.moveNode(node, {\n parent: groupNode.parent?.id,\n });\n });\n groupNode.dispose();\n groupBlocks.forEach((node) => {\n const transform = node.getData(TransformData);\n const position = {\n x: transform.position.x + groupPosition.x,\n y: transform.position.y + groupPosition.y,\n };\n this.freeOperationService.updateNodePosition(node, position);\n });\n this.historyService.endTransaction();\n }\n\n private listenContainer(): Disposable {\n return this.nodeIntoContainerService.on((e) => {\n if (\n e.type !== NodeIntoContainerType.Out ||\n e.sourceContainer?.flowNodeType !== FlowNodeBaseType.GROUP\n ) {\n return;\n }\n if (e.sourceContainer?.blocks.length === 0) {\n e.sourceContainer.dispose();\n }\n });\n }\n}\n","import { WorkflowNodeEntity } from '@flowgram.ai/free-layout-core';\nimport { FlowNodeBaseType } from '@flowgram.ai/document';\n\nexport namespace WorkflowGroupUtils {\n /** 找到节点所有上级 */\n // const findNodeParents = (node: WorkflowNodeEntity): WorkflowNodeEntity[] => {\n // const parents = [];\n // let parent = node.parent;\n // while (parent) {\n // parents.push(parent);\n // parent = parent.parent;\n // }\n // return parents;\n // };\n\n /** 节点是否处于分组中 */\n const isNodeInGroup = (node: WorkflowNodeEntity): boolean => {\n // 处于分组中\n if (node?.parent?.flowNodeType === FlowNodeBaseType.GROUP) {\n return true;\n }\n return false;\n };\n\n /** 是否分组节点 */\n const isGroupNode = (group: WorkflowNodeEntity): boolean =>\n group.flowNodeType === FlowNodeBaseType.GROUP;\n\n /** 判断节点能否组成分组 */\n export const validate = (nodes: WorkflowNodeEntity[]): boolean => {\n if (!nodes || !Array.isArray(nodes) || nodes.length === 0) {\n // 参数不合法\n return false;\n }\n\n // 判断是否有分组节点\n const isGroupRelatedNode = nodes.some((node) => isGroupNode(node));\n if (isGroupRelatedNode) return false;\n\n // 判断是否有节点已经处于分组中\n const hasGroup = nodes.some((node) => node && isNodeInGroup(node));\n if (hasGroup) return false;\n\n // 判断是否来自同一个父亲\n const parent = nodes[0].parent;\n const isSameParent = nodes.every((node) => node.parent === parent);\n if (!isSameParent) return false;\n\n // 判断节点父亲是否已经在分组中\n // const parents = findNodeParents(nodes[0]);\n // const parentsInGroup = parents.some((parent) => isNodeInGroup(parent));\n // if (parentsInGroup) return false;\n\n // 参数正确\n return true;\n };\n}\n","import { ShortcutsHandler } from '@flowgram.ai/shortcuts-plugin';\nimport { WorkflowSelectService } from '@flowgram.ai/free-layout-core';\nimport { PluginContext } from '@flowgram.ai/core';\n\nimport { WorkflowGroupService } from '../workflow-group-service';\nimport { WorkflowGroupCommand } from '../constant';\n\nexport class GroupShortcut implements ShortcutsHandler {\n public commandId = WorkflowGroupCommand.Group;\n\n public commandDetail: ShortcutsHandler['commandDetail'] = {\n label: 'Group',\n };\n\n public shortcuts = ['meta g', 'ctrl g'];\n\n private selectService: WorkflowSelectService;\n\n private groupService: WorkflowGroupService;\n\n constructor(context: PluginContext) {\n this.selectService = context.get(WorkflowSelectService);\n this.groupService = context.get(WorkflowGroupService);\n this.execute = this.execute.bind(this);\n }\n\n public async execute(): Promise<void> {\n this.groupService.createGroup(this.selectService.selectedNodes);\n this.selectService.clear();\n }\n}\n","export enum WorkflowGroupCommand {\n Group = 'group',\n Ungroup = 'ungroup',\n}\n","import { ShortcutsHandler } from '@flowgram.ai/shortcuts-plugin';\nimport { WorkflowSelectService, WorkflowNodeEntity } from '@flowgram.ai/free-layout-core';\nimport { FlowNodeBaseType } from '@flowgram.ai/document';\nimport { PluginContext } from '@flowgram.ai/core';\n\nimport { WorkflowGroupService } from '../workflow-group-service';\nimport { WorkflowGroupCommand } from '../constant';\n\nexport class UngroupShortcut implements ShortcutsHandler {\n public commandId = WorkflowGroupCommand.Ungroup;\n\n public commandDetail: ShortcutsHandler['commandDetail'] = {\n label: 'Ungroup',\n };\n\n public shortcuts = ['meta shift g', 'ctrl shift g'];\n\n private selectService: WorkflowSelectService;\n\n private groupService: WorkflowGroupService;\n\n constructor(context: PluginContext) {\n this.selectService = context.get(WorkflowSelectService);\n this.groupService = context.get(WorkflowGroupService);\n this.execute = this.execute.bind(this);\n }\n\n public async execute(_groupNode?: WorkflowNodeEntity): Promise<void> {\n const groupNode = _groupNode || this.selectService.activatedNode;\n if (!groupNode || groupNode.flowNodeType !== FlowNodeBaseType.GROUP) {\n return;\n }\n this.groupService.ungroup(groupNode);\n this.selectService.clear();\n }\n}\n","import { PositionSchema } from '@flowgram.ai/utils';\nimport { WorkflowNodeEntity } from '@flowgram.ai/free-layout-core';\nimport { FlowNodeRegistry, FlowNodeBaseType, FlowNodeTransformData } from '@flowgram.ai/document';\n\nexport const GroupNodeRegistry: FlowNodeRegistry = {\n type: FlowNodeBaseType.GROUP,\n meta: {\n renderKey: FlowNodeBaseType.GROUP,\n defaultPorts: [],\n isContainer: true,\n disableSideBar: true,\n size: {\n width: 560,\n height: 400,\n },\n padding: () => ({\n top: 80,\n bottom: 40,\n left: 65,\n right: 65,\n }),\n selectable(node: WorkflowNodeEntity, mousePos?: PositionSchema): boolean {\n if (!mousePos) {\n return true;\n }\n const transform = node.getData<FlowNodeTransformData>(FlowNodeTransformData);\n return !transform.bounds.contains(mousePos.x, mousePos.y);\n },\n expandable: false,\n },\n formMeta: {\n render: () => <></>,\n },\n};\n"],"mappings":"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","names":["WorkflowDocument","FlowGroupService","FlowNodeBaseType","FlowNodeBaseType","WorkflowGroupUtils","FlowNodeBaseType","WorkflowGroupCommand","WorkflowSelectService","FlowNodeBaseType","WorkflowSelectService","FlowNodeBaseType","FlowNodeBaseType","FlowGroupService","FlowNodeBaseType","WorkflowDocument"]}
|
|
1
|
+
{"version":3,"sources":["../../src/create-free-group-plugin.tsx","../../src/workflow-group-service.ts","../../src/utils.ts","../../src/shortcuts/group.ts","../../src/constant.ts","../../src/shortcuts/ungroup.ts","../../src/group-node.tsx"],"sourcesContent":["import { ShortcutsRegistry } from '@flowgram.ai/shortcuts-plugin';\nimport { FlowRendererRegistry } from '@flowgram.ai/renderer';\nimport { WorkflowDocument } from '@flowgram.ai/free-layout-core';\nimport { FlowGroupService, FlowNodeBaseType } from '@flowgram.ai/document';\nimport { definePluginCreator, PluginContext } from '@flowgram.ai/core';\n\nimport { WorkflowGroupService } from './workflow-group-service';\nimport { WorkflowGroupPluginOptions } from './type';\nimport { GroupShortcut, UngroupShortcut } from './shortcuts';\nimport { GroupNodeRegistry } from './group-node';\n\nexport const createFreeGroupPlugin = definePluginCreator<WorkflowGroupPluginOptions, PluginContext>(\n {\n onBind({ bind, rebind }) {\n bind(WorkflowGroupService).toSelf().inSingletonScope();\n rebind(FlowGroupService).toService(WorkflowGroupService);\n },\n onInit(\n ctx,\n { groupNodeRender, disableGroupShortcuts = false, disableGroupNodeRegister = false }\n ) {\n // register node render\n if (groupNodeRender) {\n const renderRegistry = ctx.get<FlowRendererRegistry>(FlowRendererRegistry);\n renderRegistry.registerReactComponent(FlowNodeBaseType.GROUP, groupNodeRender);\n }\n // register shortcuts\n if (!disableGroupShortcuts) {\n const shortcutsRegistry = ctx.get(ShortcutsRegistry);\n shortcutsRegistry.addHandlers(new GroupShortcut(ctx), new UngroupShortcut(ctx));\n }\n if (!disableGroupNodeRegister) {\n const document = ctx.get(WorkflowDocument);\n document.registerFlowNodes(GroupNodeRegistry);\n }\n },\n onReady(ctx) {\n const groupService = ctx.get(WorkflowGroupService);\n groupService.ready();\n },\n onDispose(ctx) {\n const groupService = ctx.get(WorkflowGroupService);\n groupService.dispose();\n },\n }\n);\n","import { injectable, inject } from 'inversify';\nimport { DisposableCollection, Disposable } from '@flowgram.ai/utils';\nimport {\n WorkflowDocument,\n WorkflowOperationBaseService,\n WorkflowNodeEntity,\n nanoid,\n WorkflowNodeJSON,\n} from '@flowgram.ai/free-layout-core';\nimport { HistoryService } from '@flowgram.ai/free-history-plugin';\nimport {\n NodeIntoContainerService,\n NodeIntoContainerType,\n} from '@flowgram.ai/free-container-plugin';\nimport { FlowGroupService, FlowNodeBaseType } from '@flowgram.ai/document';\nimport { TransformData } from '@flowgram.ai/core';\n\nimport { WorkflowGroupUtils } from './utils';\n\n@injectable()\n/** 分组服务 */\nexport class WorkflowGroupService extends FlowGroupService {\n @inject(WorkflowDocument) private document: WorkflowDocument;\n\n @inject(WorkflowOperationBaseService) freeOperationService: WorkflowOperationBaseService;\n\n @inject(HistoryService) private historyService: HistoryService;\n\n @inject(NodeIntoContainerService) private nodeIntoContainerService: NodeIntoContainerService;\n\n private toDispose = new DisposableCollection();\n\n public ready(): void {\n this.toDispose.push(this.listenContainer());\n }\n\n public dispose(): void {\n this.toDispose.dispose();\n }\n\n /** 创建分组节点 */\n public createGroup(nodes: WorkflowNodeEntity[]): WorkflowNodeEntity | undefined {\n if (!WorkflowGroupUtils.validate(nodes)) {\n return;\n }\n const parent = nodes[0].parent ?? this.document.root;\n const groupId = `group_${nanoid(5)}`;\n const groupJSON: WorkflowNodeJSON = {\n type: FlowNodeBaseType.GROUP,\n id: groupId,\n meta: {\n position: {\n x: 0,\n y: 0,\n },\n },\n data: {},\n };\n this.historyService.startTransaction();\n this.document.createWorkflowNodeByType(\n FlowNodeBaseType.GROUP,\n {\n x: 0,\n y: 0,\n },\n groupJSON,\n parent.id\n );\n nodes.forEach((node) => {\n this.freeOperationService.moveNode(node, {\n parent: groupId,\n });\n });\n this.historyService.endTransaction();\n }\n\n /** 取消分组 */\n public ungroup(groupNode: WorkflowNodeEntity): void {\n const groupBlocks = groupNode.blocks.slice();\n if (!groupNode.parent) {\n return;\n }\n const groupPosition = groupNode.transform.position;\n\n this.historyService.startTransaction();\n groupBlocks.forEach((node) => {\n this.freeOperationService.moveNode(node, {\n parent: groupNode.parent?.id,\n });\n });\n groupNode.dispose();\n groupBlocks.forEach((node) => {\n const transform = node.getData(TransformData);\n const position = {\n x: transform.position.x + groupPosition.x,\n y: transform.position.y + groupPosition.y,\n };\n this.freeOperationService.updateNodePosition(node, position);\n });\n this.historyService.endTransaction();\n }\n\n private listenContainer(): Disposable {\n return this.nodeIntoContainerService.on((e) => {\n if (\n e.type !== NodeIntoContainerType.Out ||\n e.sourceContainer?.flowNodeType !== FlowNodeBaseType.GROUP\n ) {\n return;\n }\n if (e.sourceContainer?.blocks.length === 0) {\n e.sourceContainer.dispose();\n }\n });\n }\n}\n","import { WorkflowNodeEntity } from '@flowgram.ai/free-layout-core';\nimport { FlowNodeBaseType } from '@flowgram.ai/document';\n\nexport namespace WorkflowGroupUtils {\n /** 找到节点所有上级 */\n // const findNodeParents = (node: WorkflowNodeEntity): WorkflowNodeEntity[] => {\n // const parents = [];\n // let parent = node.parent;\n // while (parent) {\n // parents.push(parent);\n // parent = parent.parent;\n // }\n // return parents;\n // };\n\n /** 节点是否处于分组中 */\n const isNodeInGroup = (node: WorkflowNodeEntity): boolean => {\n // 处于分组中\n if (node?.parent?.flowNodeType === FlowNodeBaseType.GROUP) {\n return true;\n }\n return false;\n };\n\n /** 是否分组节点 */\n const isGroupNode = (group: WorkflowNodeEntity): boolean =>\n group.flowNodeType === FlowNodeBaseType.GROUP;\n\n /** 判断节点能否组成分组 */\n export const validate = (nodes: WorkflowNodeEntity[]): boolean => {\n if (!nodes || !Array.isArray(nodes) || nodes.length === 0) {\n // 参数不合法\n return false;\n }\n\n // 判断是否有分组节点\n const isGroupRelatedNode = nodes.some((node) => isGroupNode(node));\n if (isGroupRelatedNode) return false;\n\n // 判断是否有节点已经处于分组中\n const hasGroup = nodes.some((node) => node && isNodeInGroup(node));\n if (hasGroup) return false;\n\n // 判断是否来自同一个父亲\n const parent = nodes[0].parent;\n const isSameParent = nodes.every((node) => node.parent === parent);\n if (!isSameParent) return false;\n\n // 判断节点父亲是否已经在分组中\n // const parents = findNodeParents(nodes[0]);\n // const parentsInGroup = parents.some((parent) => isNodeInGroup(parent));\n // if (parentsInGroup) return false;\n\n // 参数正确\n return true;\n };\n}\n","import { ShortcutsHandler } from '@flowgram.ai/shortcuts-plugin';\nimport { WorkflowSelectService } from '@flowgram.ai/free-layout-core';\nimport { PluginContext } from '@flowgram.ai/core';\n\nimport { WorkflowGroupService } from '../workflow-group-service';\nimport { WorkflowGroupCommand } from '../constant';\n\nexport class GroupShortcut implements ShortcutsHandler {\n public commandId = WorkflowGroupCommand.Group;\n\n public commandDetail: ShortcutsHandler['commandDetail'] = {\n label: 'Group',\n };\n\n public shortcuts = ['meta g', 'ctrl g'];\n\n private selectService: WorkflowSelectService;\n\n private groupService: WorkflowGroupService;\n\n constructor(context: PluginContext) {\n this.selectService = context.get(WorkflowSelectService);\n this.groupService = context.get(WorkflowGroupService);\n this.execute = this.execute.bind(this);\n }\n\n public async execute(): Promise<void> {\n this.groupService.createGroup(this.selectService.selectedNodes);\n this.selectService.clear();\n }\n}\n","export enum WorkflowGroupCommand {\n Group = 'group',\n Ungroup = 'ungroup',\n}\n","import { ShortcutsHandler } from '@flowgram.ai/shortcuts-plugin';\nimport { WorkflowSelectService, WorkflowNodeEntity } from '@flowgram.ai/free-layout-core';\nimport { FlowNodeBaseType } from '@flowgram.ai/document';\nimport { PluginContext } from '@flowgram.ai/core';\n\nimport { WorkflowGroupService } from '../workflow-group-service';\nimport { WorkflowGroupCommand } from '../constant';\n\nexport class UngroupShortcut implements ShortcutsHandler {\n public commandId = WorkflowGroupCommand.Ungroup;\n\n public commandDetail: ShortcutsHandler['commandDetail'] = {\n label: 'Ungroup',\n };\n\n public shortcuts = ['meta shift g', 'ctrl shift g'];\n\n private selectService: WorkflowSelectService;\n\n private groupService: WorkflowGroupService;\n\n constructor(context: PluginContext) {\n this.selectService = context.get(WorkflowSelectService);\n this.groupService = context.get(WorkflowGroupService);\n this.execute = this.execute.bind(this);\n }\n\n public async execute(_groupNode?: WorkflowNodeEntity): Promise<void> {\n const groupNode = _groupNode || this.selectService.activatedNode;\n if (!groupNode || groupNode.flowNodeType !== FlowNodeBaseType.GROUP) {\n return;\n }\n this.groupService.ungroup(groupNode);\n this.selectService.clear();\n }\n}\n","import { PositionSchema } from '@flowgram.ai/utils';\nimport { WorkflowNodeEntity } from '@flowgram.ai/free-layout-core';\nimport { FlowNodeRegistry, FlowNodeBaseType, FlowNodeTransformData } from '@flowgram.ai/document';\n\nexport const GroupNodeRegistry: FlowNodeRegistry = {\n type: FlowNodeBaseType.GROUP,\n meta: {\n renderKey: FlowNodeBaseType.GROUP,\n defaultPorts: [],\n isContainer: true,\n disableSideBar: true,\n size: {\n width: 560,\n height: 400,\n },\n padding: () => ({\n top: 80,\n bottom: 40,\n left: 65,\n right: 65,\n }),\n selectable(node: WorkflowNodeEntity, mousePos?: PositionSchema): boolean {\n if (!mousePos) {\n return true;\n }\n const transform = node.getData<FlowNodeTransformData>(FlowNodeTransformData);\n return !transform.bounds.contains(mousePos.x, mousePos.y);\n },\n expandable: false,\n },\n formMeta: {\n render: () => <></>,\n },\n};\n"],"mappings":"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","names":["WorkflowDocument","FlowGroupService","FlowNodeBaseType","FlowNodeBaseType","WorkflowGroupUtils","FlowNodeBaseType","WorkflowGroupCommand","WorkflowSelectService","FlowNodeBaseType","WorkflowSelectService","FlowNodeBaseType","FlowNodeBaseType","FlowGroupService","FlowNodeBaseType","WorkflowDocument"]}
|
package/dist/index.js
CHANGED
|
@@ -55,8 +55,7 @@ var import_document = require("@flowgram.ai/document");
|
|
|
55
55
|
var WorkflowGroupUtils;
|
|
56
56
|
((WorkflowGroupUtils2) => {
|
|
57
57
|
const isNodeInGroup = (node) => {
|
|
58
|
-
|
|
59
|
-
if (((_a = node == null ? void 0 : node.parent) == null ? void 0 : _a.flowNodeType) === import_document.FlowNodeBaseType.GROUP) {
|
|
58
|
+
if (node?.parent?.flowNodeType === import_document.FlowNodeBaseType.GROUP) {
|
|
60
59
|
return true;
|
|
61
60
|
}
|
|
62
61
|
return false;
|
|
@@ -91,11 +90,10 @@ var WorkflowGroupService = class extends import_document2.FlowGroupService {
|
|
|
91
90
|
}
|
|
92
91
|
/** 创建分组节点 */
|
|
93
92
|
createGroup(nodes) {
|
|
94
|
-
var _a;
|
|
95
93
|
if (!WorkflowGroupUtils.validate(nodes)) {
|
|
96
94
|
return;
|
|
97
95
|
}
|
|
98
|
-
const parent =
|
|
96
|
+
const parent = nodes[0].parent ?? this.document.root;
|
|
99
97
|
const groupId = `group_${(0, import_free_layout_core.nanoid)(5)}`;
|
|
100
98
|
const groupJSON = {
|
|
101
99
|
type: import_document2.FlowNodeBaseType.GROUP,
|
|
@@ -134,9 +132,8 @@ var WorkflowGroupService = class extends import_document2.FlowGroupService {
|
|
|
134
132
|
const groupPosition = groupNode.transform.position;
|
|
135
133
|
this.historyService.startTransaction();
|
|
136
134
|
groupBlocks.forEach((node) => {
|
|
137
|
-
var _a;
|
|
138
135
|
this.freeOperationService.moveNode(node, {
|
|
139
|
-
parent:
|
|
136
|
+
parent: groupNode.parent?.id
|
|
140
137
|
});
|
|
141
138
|
});
|
|
142
139
|
groupNode.dispose();
|
|
@@ -152,11 +149,10 @@ var WorkflowGroupService = class extends import_document2.FlowGroupService {
|
|
|
152
149
|
}
|
|
153
150
|
listenContainer() {
|
|
154
151
|
return this.nodeIntoContainerService.on((e) => {
|
|
155
|
-
|
|
156
|
-
if (e.type !== import_free_container_plugin.NodeIntoContainerType.Out || ((_a = e.sourceContainer) == null ? void 0 : _a.flowNodeType) !== import_document2.FlowNodeBaseType.GROUP) {
|
|
152
|
+
if (e.type !== import_free_container_plugin.NodeIntoContainerType.Out || e.sourceContainer?.flowNodeType !== import_document2.FlowNodeBaseType.GROUP) {
|
|
157
153
|
return;
|
|
158
154
|
}
|
|
159
|
-
if (
|
|
155
|
+
if (e.sourceContainer?.blocks.length === 0) {
|
|
160
156
|
e.sourceContainer.dispose();
|
|
161
157
|
}
|
|
162
158
|
});
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/create-free-group-plugin.tsx","../src/workflow-group-service.ts","../src/utils.ts","../src/shortcuts/group.ts","../src/constant.ts","../src/shortcuts/ungroup.ts","../src/group-node.tsx"],"sourcesContent":["export { createFreeGroupPlugin } from './create-free-group-plugin';\nexport { WorkflowGroupService } from './workflow-group-service';\nexport { WorkflowGroupCommand } from './constant';\n","import { ShortcutsRegistry } from '@flowgram.ai/shortcuts-plugin';\nimport { FlowRendererRegistry } from '@flowgram.ai/renderer';\nimport { WorkflowDocument } from '@flowgram.ai/free-layout-core';\nimport { FlowGroupService, FlowNodeBaseType } from '@flowgram.ai/document';\nimport { definePluginCreator, PluginContext } from '@flowgram.ai/core';\n\nimport { WorkflowGroupService } from './workflow-group-service';\nimport { WorkflowGroupPluginOptions } from './type';\nimport { GroupShortcut, UngroupShortcut } from './shortcuts';\nimport { GroupNodeRegistry } from './group-node';\n\nexport const createFreeGroupPlugin = definePluginCreator<WorkflowGroupPluginOptions, PluginContext>(\n {\n onBind({ bind, rebind }) {\n bind(WorkflowGroupService).toSelf().inSingletonScope();\n rebind(FlowGroupService).toService(WorkflowGroupService);\n },\n onInit(\n ctx,\n { groupNodeRender, disableGroupShortcuts = false, disableGroupNodeRegister = false }\n ) {\n // register node render\n if (groupNodeRender) {\n const renderRegistry = ctx.get<FlowRendererRegistry>(FlowRendererRegistry);\n renderRegistry.registerReactComponent(FlowNodeBaseType.GROUP, groupNodeRender);\n }\n // register shortcuts\n if (!disableGroupShortcuts) {\n const shortcutsRegistry = ctx.get(ShortcutsRegistry);\n shortcutsRegistry.addHandlers(new GroupShortcut(ctx), new UngroupShortcut(ctx));\n }\n if (!disableGroupNodeRegister) {\n const document = ctx.get(WorkflowDocument);\n document.registerFlowNodes(GroupNodeRegistry);\n }\n },\n onReady(ctx) {\n const groupService = ctx.get(WorkflowGroupService);\n groupService.ready();\n },\n onDispose(ctx) {\n const groupService = ctx.get(WorkflowGroupService);\n groupService.dispose();\n },\n }\n);\n","import { injectable, inject } from 'inversify';\nimport { DisposableCollection, Disposable } from '@flowgram.ai/utils';\nimport {\n WorkflowDocument,\n WorkflowOperationBaseService,\n WorkflowNodeEntity,\n nanoid,\n WorkflowNodeJSON,\n} from '@flowgram.ai/free-layout-core';\nimport { HistoryService } from '@flowgram.ai/free-history-plugin';\nimport {\n NodeIntoContainerService,\n NodeIntoContainerType,\n} from '@flowgram.ai/free-container-plugin';\nimport { FlowGroupService, FlowNodeBaseType } from '@flowgram.ai/document';\nimport { TransformData } from '@flowgram.ai/core';\n\nimport { WorkflowGroupUtils } from './utils';\n\n@injectable()\n/** 分组服务 */\nexport class WorkflowGroupService extends FlowGroupService {\n @inject(WorkflowDocument) private document: WorkflowDocument;\n\n @inject(WorkflowOperationBaseService) freeOperationService: WorkflowOperationBaseService;\n\n @inject(HistoryService) private historyService: HistoryService;\n\n @inject(NodeIntoContainerService) private nodeIntoContainerService: NodeIntoContainerService;\n\n private toDispose = new DisposableCollection();\n\n public ready(): void {\n this.toDispose.push(this.listenContainer());\n }\n\n public dispose(): void {\n this.toDispose.dispose();\n }\n\n /** 创建分组节点 */\n public createGroup(nodes: WorkflowNodeEntity[]): WorkflowNodeEntity | undefined {\n if (!WorkflowGroupUtils.validate(nodes)) {\n return;\n }\n const parent = nodes[0].parent ?? this.document.root;\n const groupId = `group_${nanoid(5)}`;\n const groupJSON: WorkflowNodeJSON = {\n type: FlowNodeBaseType.GROUP,\n id: groupId,\n meta: {\n position: {\n x: 0,\n y: 0,\n },\n },\n data: {},\n };\n this.historyService.startTransaction();\n this.document.createWorkflowNodeByType(\n FlowNodeBaseType.GROUP,\n {\n x: 0,\n y: 0,\n },\n groupJSON,\n parent.id\n );\n nodes.forEach((node) => {\n this.freeOperationService.moveNode(node, {\n parent: groupId,\n });\n });\n this.historyService.endTransaction();\n }\n\n /** 取消分组 */\n public ungroup(groupNode: WorkflowNodeEntity): void {\n const groupBlocks = groupNode.blocks.slice();\n if (!groupNode.parent) {\n return;\n }\n const groupPosition = groupNode.transform.position;\n\n this.historyService.startTransaction();\n groupBlocks.forEach((node) => {\n this.freeOperationService.moveNode(node, {\n parent: groupNode.parent?.id,\n });\n });\n groupNode.dispose();\n groupBlocks.forEach((node) => {\n const transform = node.getData(TransformData);\n const position = {\n x: transform.position.x + groupPosition.x,\n y: transform.position.y + groupPosition.y,\n };\n this.freeOperationService.updateNodePosition(node, position);\n });\n this.historyService.endTransaction();\n }\n\n private listenContainer(): Disposable {\n return this.nodeIntoContainerService.on((e) => {\n if (\n e.type !== NodeIntoContainerType.Out ||\n e.sourceContainer?.flowNodeType !== FlowNodeBaseType.GROUP\n ) {\n return;\n }\n if (e.sourceContainer?.blocks.length === 0) {\n e.sourceContainer.dispose();\n }\n });\n }\n}\n","import { WorkflowNodeEntity } from '@flowgram.ai/free-layout-core';\nimport { FlowNodeBaseType } from '@flowgram.ai/document';\n\nexport namespace WorkflowGroupUtils {\n /** 找到节点所有上级 */\n // const findNodeParents = (node: WorkflowNodeEntity): WorkflowNodeEntity[] => {\n // const parents = [];\n // let parent = node.parent;\n // while (parent) {\n // parents.push(parent);\n // parent = parent.parent;\n // }\n // return parents;\n // };\n\n /** 节点是否处于分组中 */\n const isNodeInGroup = (node: WorkflowNodeEntity): boolean => {\n // 处于分组中\n if (node?.parent?.flowNodeType === FlowNodeBaseType.GROUP) {\n return true;\n }\n return false;\n };\n\n /** 是否分组节点 */\n const isGroupNode = (group: WorkflowNodeEntity): boolean =>\n group.flowNodeType === FlowNodeBaseType.GROUP;\n\n /** 判断节点能否组成分组 */\n export const validate = (nodes: WorkflowNodeEntity[]): boolean => {\n if (!nodes || !Array.isArray(nodes) || nodes.length === 0) {\n // 参数不合法\n return false;\n }\n\n // 判断是否有分组节点\n const isGroupRelatedNode = nodes.some((node) => isGroupNode(node));\n if (isGroupRelatedNode) return false;\n\n // 判断是否有节点已经处于分组中\n const hasGroup = nodes.some((node) => node && isNodeInGroup(node));\n if (hasGroup) return false;\n\n // 判断是否来自同一个父亲\n const parent = nodes[0].parent;\n const isSameParent = nodes.every((node) => node.parent === parent);\n if (!isSameParent) return false;\n\n // 判断节点父亲是否已经在分组中\n // const parents = findNodeParents(nodes[0]);\n // const parentsInGroup = parents.some((parent) => isNodeInGroup(parent));\n // if (parentsInGroup) return false;\n\n // 参数正确\n return true;\n };\n}\n","import { ShortcutsHandler } from '@flowgram.ai/shortcuts-plugin';\nimport { WorkflowSelectService } from '@flowgram.ai/free-layout-core';\nimport { PluginContext } from '@flowgram.ai/core';\n\nimport { WorkflowGroupService } from '../workflow-group-service';\nimport { WorkflowGroupCommand } from '../constant';\n\nexport class GroupShortcut implements ShortcutsHandler {\n public commandId = WorkflowGroupCommand.Group;\n\n public commandDetail: ShortcutsHandler['commandDetail'] = {\n label: 'Group',\n };\n\n public shortcuts = ['meta g', 'ctrl g'];\n\n private selectService: WorkflowSelectService;\n\n private groupService: WorkflowGroupService;\n\n constructor(context: PluginContext) {\n this.selectService = context.get(WorkflowSelectService);\n this.groupService = context.get(WorkflowGroupService);\n this.execute = this.execute.bind(this);\n }\n\n public async execute(): Promise<void> {\n this.groupService.createGroup(this.selectService.selectedNodes);\n this.selectService.clear();\n }\n}\n","export enum WorkflowGroupCommand {\n Group = 'group',\n Ungroup = 'ungroup',\n}\n","import { ShortcutsHandler } from '@flowgram.ai/shortcuts-plugin';\nimport { WorkflowSelectService, WorkflowNodeEntity } from '@flowgram.ai/free-layout-core';\nimport { FlowNodeBaseType } from '@flowgram.ai/document';\nimport { PluginContext } from '@flowgram.ai/core';\n\nimport { WorkflowGroupService } from '../workflow-group-service';\nimport { WorkflowGroupCommand } from '../constant';\n\nexport class UngroupShortcut implements ShortcutsHandler {\n public commandId = WorkflowGroupCommand.Ungroup;\n\n public commandDetail: ShortcutsHandler['commandDetail'] = {\n label: 'Ungroup',\n };\n\n public shortcuts = ['meta shift g', 'ctrl shift g'];\n\n private selectService: WorkflowSelectService;\n\n private groupService: WorkflowGroupService;\n\n constructor(context: PluginContext) {\n this.selectService = context.get(WorkflowSelectService);\n this.groupService = context.get(WorkflowGroupService);\n this.execute = this.execute.bind(this);\n }\n\n public async execute(_groupNode?: WorkflowNodeEntity): Promise<void> {\n const groupNode = _groupNode || this.selectService.activatedNode;\n if (!groupNode || groupNode.flowNodeType !== FlowNodeBaseType.GROUP) {\n return;\n }\n this.groupService.ungroup(groupNode);\n this.selectService.clear();\n }\n}\n","import { PositionSchema } from '@flowgram.ai/utils';\nimport { WorkflowNodeEntity } from '@flowgram.ai/free-layout-core';\nimport { FlowNodeRegistry, FlowNodeBaseType, FlowNodeTransformData } from '@flowgram.ai/document';\n\nexport const GroupNodeRegistry: FlowNodeRegistry = {\n type: FlowNodeBaseType.GROUP,\n meta: {\n renderKey: FlowNodeBaseType.GROUP,\n defaultPorts: [],\n isContainer: true,\n disableSideBar: true,\n size: {\n width: 560,\n height: 400,\n },\n padding: () => ({\n top: 80,\n bottom: 40,\n left: 65,\n right: 65,\n }),\n selectable(node: WorkflowNodeEntity, mousePos?: PositionSchema): boolean {\n if (!mousePos) {\n return true;\n }\n const transform = node.getData<FlowNodeTransformData>(FlowNodeTransformData);\n return !transform.bounds.contains(mousePos.x, mousePos.y);\n },\n expandable: false,\n },\n formMeta: {\n render: () => <></>,\n },\n};\n"],"mappings":"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","names":["import_free_layout_core","import_document","import_core","import_document","WorkflowGroupUtils","import_free_layout_core","WorkflowGroupCommand","import_free_layout_core","import_document","import_document"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/create-free-group-plugin.tsx","../src/workflow-group-service.ts","../src/utils.ts","../src/shortcuts/group.ts","../src/constant.ts","../src/shortcuts/ungroup.ts","../src/group-node.tsx"],"sourcesContent":["export { createFreeGroupPlugin } from './create-free-group-plugin';\nexport { WorkflowGroupService } from './workflow-group-service';\nexport { WorkflowGroupCommand } from './constant';\n","import { ShortcutsRegistry } from '@flowgram.ai/shortcuts-plugin';\nimport { FlowRendererRegistry } from '@flowgram.ai/renderer';\nimport { WorkflowDocument } from '@flowgram.ai/free-layout-core';\nimport { FlowGroupService, FlowNodeBaseType } from '@flowgram.ai/document';\nimport { definePluginCreator, PluginContext } from '@flowgram.ai/core';\n\nimport { WorkflowGroupService } from './workflow-group-service';\nimport { WorkflowGroupPluginOptions } from './type';\nimport { GroupShortcut, UngroupShortcut } from './shortcuts';\nimport { GroupNodeRegistry } from './group-node';\n\nexport const createFreeGroupPlugin = definePluginCreator<WorkflowGroupPluginOptions, PluginContext>(\n {\n onBind({ bind, rebind }) {\n bind(WorkflowGroupService).toSelf().inSingletonScope();\n rebind(FlowGroupService).toService(WorkflowGroupService);\n },\n onInit(\n ctx,\n { groupNodeRender, disableGroupShortcuts = false, disableGroupNodeRegister = false }\n ) {\n // register node render\n if (groupNodeRender) {\n const renderRegistry = ctx.get<FlowRendererRegistry>(FlowRendererRegistry);\n renderRegistry.registerReactComponent(FlowNodeBaseType.GROUP, groupNodeRender);\n }\n // register shortcuts\n if (!disableGroupShortcuts) {\n const shortcutsRegistry = ctx.get(ShortcutsRegistry);\n shortcutsRegistry.addHandlers(new GroupShortcut(ctx), new UngroupShortcut(ctx));\n }\n if (!disableGroupNodeRegister) {\n const document = ctx.get(WorkflowDocument);\n document.registerFlowNodes(GroupNodeRegistry);\n }\n },\n onReady(ctx) {\n const groupService = ctx.get(WorkflowGroupService);\n groupService.ready();\n },\n onDispose(ctx) {\n const groupService = ctx.get(WorkflowGroupService);\n groupService.dispose();\n },\n }\n);\n","import { injectable, inject } from 'inversify';\nimport { DisposableCollection, Disposable } from '@flowgram.ai/utils';\nimport {\n WorkflowDocument,\n WorkflowOperationBaseService,\n WorkflowNodeEntity,\n nanoid,\n WorkflowNodeJSON,\n} from '@flowgram.ai/free-layout-core';\nimport { HistoryService } from '@flowgram.ai/free-history-plugin';\nimport {\n NodeIntoContainerService,\n NodeIntoContainerType,\n} from '@flowgram.ai/free-container-plugin';\nimport { FlowGroupService, FlowNodeBaseType } from '@flowgram.ai/document';\nimport { TransformData } from '@flowgram.ai/core';\n\nimport { WorkflowGroupUtils } from './utils';\n\n@injectable()\n/** 分组服务 */\nexport class WorkflowGroupService extends FlowGroupService {\n @inject(WorkflowDocument) private document: WorkflowDocument;\n\n @inject(WorkflowOperationBaseService) freeOperationService: WorkflowOperationBaseService;\n\n @inject(HistoryService) private historyService: HistoryService;\n\n @inject(NodeIntoContainerService) private nodeIntoContainerService: NodeIntoContainerService;\n\n private toDispose = new DisposableCollection();\n\n public ready(): void {\n this.toDispose.push(this.listenContainer());\n }\n\n public dispose(): void {\n this.toDispose.dispose();\n }\n\n /** 创建分组节点 */\n public createGroup(nodes: WorkflowNodeEntity[]): WorkflowNodeEntity | undefined {\n if (!WorkflowGroupUtils.validate(nodes)) {\n return;\n }\n const parent = nodes[0].parent ?? this.document.root;\n const groupId = `group_${nanoid(5)}`;\n const groupJSON: WorkflowNodeJSON = {\n type: FlowNodeBaseType.GROUP,\n id: groupId,\n meta: {\n position: {\n x: 0,\n y: 0,\n },\n },\n data: {},\n };\n this.historyService.startTransaction();\n this.document.createWorkflowNodeByType(\n FlowNodeBaseType.GROUP,\n {\n x: 0,\n y: 0,\n },\n groupJSON,\n parent.id\n );\n nodes.forEach((node) => {\n this.freeOperationService.moveNode(node, {\n parent: groupId,\n });\n });\n this.historyService.endTransaction();\n }\n\n /** 取消分组 */\n public ungroup(groupNode: WorkflowNodeEntity): void {\n const groupBlocks = groupNode.blocks.slice();\n if (!groupNode.parent) {\n return;\n }\n const groupPosition = groupNode.transform.position;\n\n this.historyService.startTransaction();\n groupBlocks.forEach((node) => {\n this.freeOperationService.moveNode(node, {\n parent: groupNode.parent?.id,\n });\n });\n groupNode.dispose();\n groupBlocks.forEach((node) => {\n const transform = node.getData(TransformData);\n const position = {\n x: transform.position.x + groupPosition.x,\n y: transform.position.y + groupPosition.y,\n };\n this.freeOperationService.updateNodePosition(node, position);\n });\n this.historyService.endTransaction();\n }\n\n private listenContainer(): Disposable {\n return this.nodeIntoContainerService.on((e) => {\n if (\n e.type !== NodeIntoContainerType.Out ||\n e.sourceContainer?.flowNodeType !== FlowNodeBaseType.GROUP\n ) {\n return;\n }\n if (e.sourceContainer?.blocks.length === 0) {\n e.sourceContainer.dispose();\n }\n });\n }\n}\n","import { WorkflowNodeEntity } from '@flowgram.ai/free-layout-core';\nimport { FlowNodeBaseType } from '@flowgram.ai/document';\n\nexport namespace WorkflowGroupUtils {\n /** 找到节点所有上级 */\n // const findNodeParents = (node: WorkflowNodeEntity): WorkflowNodeEntity[] => {\n // const parents = [];\n // let parent = node.parent;\n // while (parent) {\n // parents.push(parent);\n // parent = parent.parent;\n // }\n // return parents;\n // };\n\n /** 节点是否处于分组中 */\n const isNodeInGroup = (node: WorkflowNodeEntity): boolean => {\n // 处于分组中\n if (node?.parent?.flowNodeType === FlowNodeBaseType.GROUP) {\n return true;\n }\n return false;\n };\n\n /** 是否分组节点 */\n const isGroupNode = (group: WorkflowNodeEntity): boolean =>\n group.flowNodeType === FlowNodeBaseType.GROUP;\n\n /** 判断节点能否组成分组 */\n export const validate = (nodes: WorkflowNodeEntity[]): boolean => {\n if (!nodes || !Array.isArray(nodes) || nodes.length === 0) {\n // 参数不合法\n return false;\n }\n\n // 判断是否有分组节点\n const isGroupRelatedNode = nodes.some((node) => isGroupNode(node));\n if (isGroupRelatedNode) return false;\n\n // 判断是否有节点已经处于分组中\n const hasGroup = nodes.some((node) => node && isNodeInGroup(node));\n if (hasGroup) return false;\n\n // 判断是否来自同一个父亲\n const parent = nodes[0].parent;\n const isSameParent = nodes.every((node) => node.parent === parent);\n if (!isSameParent) return false;\n\n // 判断节点父亲是否已经在分组中\n // const parents = findNodeParents(nodes[0]);\n // const parentsInGroup = parents.some((parent) => isNodeInGroup(parent));\n // if (parentsInGroup) return false;\n\n // 参数正确\n return true;\n };\n}\n","import { ShortcutsHandler } from '@flowgram.ai/shortcuts-plugin';\nimport { WorkflowSelectService } from '@flowgram.ai/free-layout-core';\nimport { PluginContext } from '@flowgram.ai/core';\n\nimport { WorkflowGroupService } from '../workflow-group-service';\nimport { WorkflowGroupCommand } from '../constant';\n\nexport class GroupShortcut implements ShortcutsHandler {\n public commandId = WorkflowGroupCommand.Group;\n\n public commandDetail: ShortcutsHandler['commandDetail'] = {\n label: 'Group',\n };\n\n public shortcuts = ['meta g', 'ctrl g'];\n\n private selectService: WorkflowSelectService;\n\n private groupService: WorkflowGroupService;\n\n constructor(context: PluginContext) {\n this.selectService = context.get(WorkflowSelectService);\n this.groupService = context.get(WorkflowGroupService);\n this.execute = this.execute.bind(this);\n }\n\n public async execute(): Promise<void> {\n this.groupService.createGroup(this.selectService.selectedNodes);\n this.selectService.clear();\n }\n}\n","export enum WorkflowGroupCommand {\n Group = 'group',\n Ungroup = 'ungroup',\n}\n","import { ShortcutsHandler } from '@flowgram.ai/shortcuts-plugin';\nimport { WorkflowSelectService, WorkflowNodeEntity } from '@flowgram.ai/free-layout-core';\nimport { FlowNodeBaseType } from '@flowgram.ai/document';\nimport { PluginContext } from '@flowgram.ai/core';\n\nimport { WorkflowGroupService } from '../workflow-group-service';\nimport { WorkflowGroupCommand } from '../constant';\n\nexport class UngroupShortcut implements ShortcutsHandler {\n public commandId = WorkflowGroupCommand.Ungroup;\n\n public commandDetail: ShortcutsHandler['commandDetail'] = {\n label: 'Ungroup',\n };\n\n public shortcuts = ['meta shift g', 'ctrl shift g'];\n\n private selectService: WorkflowSelectService;\n\n private groupService: WorkflowGroupService;\n\n constructor(context: PluginContext) {\n this.selectService = context.get(WorkflowSelectService);\n this.groupService = context.get(WorkflowGroupService);\n this.execute = this.execute.bind(this);\n }\n\n public async execute(_groupNode?: WorkflowNodeEntity): Promise<void> {\n const groupNode = _groupNode || this.selectService.activatedNode;\n if (!groupNode || groupNode.flowNodeType !== FlowNodeBaseType.GROUP) {\n return;\n }\n this.groupService.ungroup(groupNode);\n this.selectService.clear();\n }\n}\n","import { PositionSchema } from '@flowgram.ai/utils';\nimport { WorkflowNodeEntity } from '@flowgram.ai/free-layout-core';\nimport { FlowNodeRegistry, FlowNodeBaseType, FlowNodeTransformData } from '@flowgram.ai/document';\n\nexport const GroupNodeRegistry: FlowNodeRegistry = {\n type: FlowNodeBaseType.GROUP,\n meta: {\n renderKey: FlowNodeBaseType.GROUP,\n defaultPorts: [],\n isContainer: true,\n disableSideBar: true,\n size: {\n width: 560,\n height: 400,\n },\n padding: () => ({\n top: 80,\n bottom: 40,\n left: 65,\n right: 65,\n }),\n selectable(node: WorkflowNodeEntity, mousePos?: PositionSchema): boolean {\n if (!mousePos) {\n return true;\n }\n const transform = node.getData<FlowNodeTransformData>(FlowNodeTransformData);\n return !transform.bounds.contains(mousePos.x, mousePos.y);\n },\n expandable: false,\n },\n formMeta: {\n render: () => <></>,\n },\n};\n"],"mappings":"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","names":["import_free_layout_core","import_document","import_core","import_document","WorkflowGroupUtils","import_free_layout_core","WorkflowGroupCommand","import_free_layout_core","import_document","import_document"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@flowgram.ai/free-group-plugin",
|
|
3
|
-
"version": "0.1.0-alpha.
|
|
3
|
+
"version": "0.1.0-alpha.9",
|
|
4
4
|
"homepage": "https://flowgram.ai/",
|
|
5
5
|
"repository": "https://github.com/bytedance/flowgram.ai",
|
|
6
6
|
"license": "MIT",
|
|
@@ -19,15 +19,15 @@
|
|
|
19
19
|
"inversify": "^6.0.1",
|
|
20
20
|
"reflect-metadata": "~0.2.2",
|
|
21
21
|
"lodash": "^4.17.21",
|
|
22
|
-
"@flowgram.ai/free-
|
|
23
|
-
"@flowgram.ai/
|
|
24
|
-
"@flowgram.ai/
|
|
25
|
-
"@flowgram.ai/
|
|
26
|
-
"@flowgram.ai/
|
|
27
|
-
"@flowgram.ai/
|
|
28
|
-
"@flowgram.ai/free-
|
|
29
|
-
"@flowgram.ai/renderer": "0.1.0-alpha.
|
|
30
|
-
"@flowgram.ai/utils": "0.1.0-alpha.
|
|
22
|
+
"@flowgram.ai/free-lines-plugin": "0.1.0-alpha.9",
|
|
23
|
+
"@flowgram.ai/core": "0.1.0-alpha.9",
|
|
24
|
+
"@flowgram.ai/free-history-plugin": "0.1.0-alpha.9",
|
|
25
|
+
"@flowgram.ai/free-container-plugin": "0.1.0-alpha.9",
|
|
26
|
+
"@flowgram.ai/document": "0.1.0-alpha.9",
|
|
27
|
+
"@flowgram.ai/shortcuts-plugin": "0.1.0-alpha.9",
|
|
28
|
+
"@flowgram.ai/free-layout-core": "0.1.0-alpha.9",
|
|
29
|
+
"@flowgram.ai/renderer": "0.1.0-alpha.9",
|
|
30
|
+
"@flowgram.ai/utils": "0.1.0-alpha.9"
|
|
31
31
|
},
|
|
32
32
|
"devDependencies": {
|
|
33
33
|
"@types/bezier-js": "4.1.3",
|
|
@@ -43,8 +43,8 @@
|
|
|
43
43
|
"tsup": "^8.0.1",
|
|
44
44
|
"typescript": "^5.0.4",
|
|
45
45
|
"vitest": "^0.34.6",
|
|
46
|
-
"@flowgram.ai/eslint-config": "0.1.0-alpha.
|
|
47
|
-
"@flowgram.ai/ts-config": "0.1.0-alpha.
|
|
46
|
+
"@flowgram.ai/eslint-config": "0.1.0-alpha.9",
|
|
47
|
+
"@flowgram.ai/ts-config": "0.1.0-alpha.9"
|
|
48
48
|
},
|
|
49
49
|
"peerDependencies": {
|
|
50
50
|
"react": ">=16.8",
|