blob: f1d3987a3bbaacbe9a60fa0542771392625b33ed [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { Shape, Dom } from '@antv/x6';
import type { Addon, Graph, Cell } from '@antv/x6';
import { formatMessage } from 'umi';
export const DEFAULT_STENCIL_WIDTH = 280;
export const DEFAULT_TOOLBAR_HEIGHT = 38;
export const DEFAULT_SHAPE_TEXT_EDIT_CLASS_NAME = '.flow-graph-shape-text-editor';
export const DEFAULT_OPINIONS: Partial<Graph.Options> = {
scroller: true,
width: 800,
height: 600,
grid: {
size: 10,
visible: true,
},
selecting: {
enabled: true,
multiple: true,
rubberband: true,
movable: true,
showNodeSelectionBox: true,
filter: ['groupNode'],
},
connecting: {
allowBlank: false,
highlight: true,
snap: true,
createEdge() {
return new Shape.Edge({
attrs: {
line: {
stroke: '#5F95FF',
strokeWidth: 1,
targetMarker: {
name: 'classic',
size: 8,
},
},
},
router: {
name: 'manhattan',
},
zIndex: 0,
});
},
validateConnection({ sourceView, targetView, sourceMagnet, targetMagnet }) {
if (sourceView === targetView) {
return false;
}
if (!sourceMagnet) {
return false;
}
if (!targetMagnet) {
return false;
}
return true;
},
},
highlighting: {
magnetAvailable: {
name: 'stroke',
args: {
padding: 4,
attrs: {
strokeWidth: 4,
stroke: 'rgba(223,234,255)',
},
},
},
},
snapline: true,
history: true,
clipboard: {
enabled: true,
},
keyboard: {
enabled: true,
},
embedding: {
enabled: true,
findParent({ node }) {
const bbox = node.getBBox();
return this.getNodes().filter((item) => {
const data = item.getData<any>();
if (data && data.parent) {
const targetBBox = item.getBBox();
return bbox.isIntersectWithRect(targetBBox);
}
return false;
});
},
},
};
export const DEFAULT_STENCIL_OPINIONS: Partial<Addon.Stencil.Options> = {
title: formatMessage({ id: 'component.plugin-flow.text.nodes-area' }),
stencilGraphWidth: DEFAULT_STENCIL_WIDTH,
search: (cell, keyword) => {
if (keyword) {
return (cell as any).label?.indexOf(keyword) !== -1;
}
return true;
},
notFoundText: formatMessage({ id: 'component.plugin-flow.text.nodes.not-found' }),
placeholder: formatMessage({ id: 'component.plugin-flow.text.search-nodes.placeholder' }),
collapsable: true,
};
export const DEFAULT_SHAPE_RECT_OPINIONS = {
inherit: 'rect',
width: 80,
height: 42,
attrs: {
body: {
stroke: '#5F95FF',
strokeWidth: 1,
fill: 'rgba(95,149,255,0.05)',
},
fo: {
refWidth: '100%',
refHeight: '100%',
},
foBody: {
xmlns: Dom.ns.xhtml,
style: {
width: '100%',
height: '100%',
display: 'flex',
justifyContent: 'center',
alignItems: 'center',
},
},
text: {
fontSize: 12,
fill: 'rgba(0,0,0,0.85)',
textWrap: {
text: '',
width: -10,
},
},
},
markup: [
{
tagName: 'rect',
selector: 'body',
},
{
tagName: 'text',
selector: 'text',
},
],
ports: {
groups: {
top: {
position: 'top',
attrs: {
circle: {
r: 3,
magnet: true,
stroke: '#5F95FF',
strokeWidth: 1,
fill: '#fff',
style: {
visibility: 'hidden',
},
},
},
},
right: {
position: 'right',
attrs: {
circle: {
r: 3,
magnet: true,
stroke: '#5F95FF',
strokeWidth: 1,
fill: '#fff',
style: {
visibility: 'hidden',
},
},
},
},
bottom: {
position: 'bottom',
attrs: {
circle: {
r: 3,
magnet: true,
stroke: '#5F95FF',
strokeWidth: 1,
fill: '#fff',
style: {
visibility: 'hidden',
},
},
},
},
left: {
position: 'left',
attrs: {
circle: {
r: 3,
magnet: true,
stroke: '#5F95FF',
strokeWidth: 1,
fill: '#fff',
style: {
visibility: 'hidden',
},
},
},
},
},
items: [
{
group: 'top',
},
{
group: 'right',
},
{
group: 'bottom',
},
{
group: 'left',
},
],
},
};
export enum FlowGraphShape {
base = 'flow-chart-rect',
condition = 'flow-chart-condition-rect',
start = 'flow-chart-start-rect',
end = 'flow-chart-end-rect',
plugin = 'flow-chart-plugin-rect',
}
export enum FlowGraphEvent {
PLUGIN_CHANGE = 'flowgraph:change:plugin',
CONDITION_CHANGE = 'flowgraph:change:condition',
}
export const DEFAULT_PLUGIN_PROPS = {
id: '',
name: '',
visible: false,
data: {},
};
export const DEFAULT_CONDITION_PROPS = {
visible: false,
id: '',
data: '',
};
export const DEFAULT_PLUGIN_FLOW_DATA: {
chart: {
cells: Cell.Properties[];
};
conf: Record<string, any>;
rule: Record<string, any>;
} = {
chart: {
cells: [],
},
conf: {},
rule: {
root: '',
},
};