@logicflow/core
Version:
LogicFlow, help you quickly create flowcharts
88 lines (80 loc) • 2.6 kB
text/typescript
import type { NodeConfig, TextConfig } from '../../src/index'
import { LogicFlow } from '../../src/index'
type NodeConfigTextObj = NodeConfig & { text: TextConfig }
describe('graphmodel', () => {
const dom = document.createElement('div')
dom.id = 'main-graph'
document.body.appendChild(dom)
const lf = new LogicFlow({
container: dom,
width: 1000,
height: 1000,
keyboard: {
enabled: true,
},
allowRotation: true,
metaKeyMultipleSelected: true,
grid: true,
snapline: true,
})
// 将node节点位置进行grid修正,同时处理node内文字的偏移量,返回一个位置修正过的复制节点NodeModel
test('getModelAfterSnapToGrid', () => {
const rawData = {
nodes: [
{
id: 'node1',
type: 'rect',
x: 111,
y: 123,
text: {
x: 32,
y: 19,
value: '文本1',
},
},
],
}
lf.render(rawData)
const originNode = lf.getDataById('node1') as NodeConfigTextObj
// grid=true 默认 gridSize=20
const newNode = lf.graphModel.getModelAfterSnapToGrid(
originNode,
) as NodeConfigTextObj
expect(originNode.x - originNode.text.x).toEqual(newNode.x - newNode.text.x)
expect(originNode.y - originNode.text.y).toEqual(newNode.y - newNode.text.y)
expect(originNode.text.value).toEqual(newNode.text.value)
lf.graphModel.gridSize = 40
const newNode1 = lf.graphModel.getModelAfterSnapToGrid(
originNode,
) as NodeConfigTextObj
expect(originNode.x - originNode.text.x).toEqual(
newNode1.x - newNode1.text.x,
)
expect(originNode.y - originNode.text.y).toEqual(
newNode1.y - newNode1.text.y,
)
expect(originNode.text.value).toEqual(newNode1.text.value)
lf.graphModel.gridSize = 1
const newNode2 = lf.graphModel.getModelAfterSnapToGrid(
originNode,
) as NodeConfigTextObj
expect(originNode.x - originNode.text.x).toEqual(
newNode2.x - newNode2.text.x,
)
expect(originNode.y - originNode.text.y).toEqual(
newNode2.y - newNode2.text.y,
)
expect(originNode.text.value).toEqual(newNode2.text.value)
lf.graphModel.gridSize = 17
const newNode3 = lf.graphModel.getModelAfterSnapToGrid(
originNode,
) as NodeConfigTextObj
expect(originNode.x - originNode.text.x).toEqual(
newNode3.x - newNode3.text.x,
)
expect(originNode.y - originNode.text.y).toEqual(
newNode3.y - newNode3.text.y,
)
expect(originNode.text.value).toEqual(newNode3.text.value)
})
})