Skip to content

Commit e14cbac

Browse files
committed
fix: npm 包 dependencies 中新增 lodash-es 依赖,解决引入项目中报错的问题
- 开发节点文本换行等体验优化的功能 - 解决 examples 中报错的问题
1 parent 6a62355 commit e14cbac

File tree

17 files changed

+105
-54
lines changed

17 files changed

+105
-54
lines changed

examples/feature-examples/src/pages/graph/index.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ const customTheme: Partial<LogicFlow.Theme> = {
5959
lineHeight: 1.5,
6060
fontSize: 13,
6161
textWidth: 100,
62-
}, // 确认 textWidth 是否必传
62+
}, // 确认 textWidth 是否必传
6363
polyline: {
6464
stroke: 'red',
6565
},

examples/feature-examples/src/pages/nodes/native/index.tsx

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,12 @@ const data = {
5252
type: 'circle',
5353
x: 350,
5454
y: 100,
55-
text: '圆形',
55+
properties: {},
56+
text: {
57+
x: 350,
58+
y: 100,
59+
value: '圆形射门来问\n撒发啊乐趣\n撒旦法捡垃圾二楼飒飒饭店\n阿萨德刚撒',
60+
},
5661
},
5762
{
5863
id: '3',
@@ -108,6 +113,7 @@ export default function BasicNode() {
108113

109114
lf.render(data)
110115
lfRef.current = lf
116+
;(window as any).lf = lf
111117
}
112118
}, [])
113119

examples/feature-examples/src/pages/react/Portal.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import {
77
} from '@logicflow/react-node-registry'
88
import { Button, Card, Divider } from 'antd'
99

10+
import '@logicflow/core/es/index.css'
1011
import styles from './index.less'
1112

1213
const LFReactPortalProvider = Portal.getProvider() // 注意,一个 LogicFlow 实例只能生命一个 portal provider

examples/feature-examples/src/pages/react/index.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ import React, { FC } from 'react'
22
import LogicFlow from '@logicflow/core'
33
import { register, ReactNodeProps } from '@logicflow/react-node-registry'
44
import { Card } from 'antd'
5-
import '@logicflow/core/es/index.css'
65

6+
import '@logicflow/core/es/index.css'
77
import styles from './index.less'
88

99
const NodeComponent: FC<ReactNodeProps> = ({ node }) => {

packages/core/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
"author": "Logicflow-Team",
4141
"license": "Apache-2.0",
4242
"dependencies": {
43+
"lodash-es": "^4.17.21",
4344
"classnames": "^2.3.2",
4445
"mobx": "^5.15.7",
4546
"mobx-preact": "^3.0.0",

packages/core/src/LogicFlow.tsx

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1433,9 +1433,12 @@ export namespace LogicFlow {
14331433
}
14341434
export type TextConfig = {
14351435
value: string
1436+
x: number
1437+
y: number
14361438
editable?: boolean
14371439
draggable?: boolean
1438-
} & Position
1440+
// overflowMode?: 'default' | 'autoWrap' | 'ellipsis'
1441+
}
14391442

14401443
export type AppendConfig = {
14411444
startIndex: number
@@ -1651,13 +1654,15 @@ export namespace LogicFlow {
16511654
* ellipsis: 超出省略
16521655
*/
16531656
overflowMode?: 'default' | 'autoWrap' | 'ellipsis'
1657+
textWidth?: number
16541658
background?: RectTheme
16551659
/**
16561660
* 背景区域 padding
16571661
* wrapPadding: '5px,10px'
16581662
*/
16591663
wrapPadding?: string
16601664
} & TextTheme
1665+
16611666
// 边上文本样式
16621667
export type EdgeTextTheme = {
16631668
textWidth: number

packages/core/src/model/edge/BaseEdgeModel.ts

Lines changed: 31 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { assign, cloneDeep, find } from 'lodash-es'
1+
import { assign, cloneDeep, find, isUndefined } from 'lodash-es'
22
import { action, computed, observable, toJS } from 'mobx'
33
import { BaseNodeModel, GraphModel, Model } from '..'
44
import LogicFlow from '../../LogicFlow'
@@ -20,6 +20,7 @@ import {
2020
import Point = LogicFlow.Point
2121
import EdgeData = LogicFlow.EdgeData
2222
import EdgeConfig = LogicFlow.EdgeConfig
23+
import TextConfig = LogicFlow.TextConfig
2324

2425
export interface IBaseEdgeModel extends Model.BaseModel {
2526
/**
@@ -56,7 +57,7 @@ export class BaseEdgeModel implements IBaseEdgeModel {
5657
@observable startPoint!: Point
5758
@observable endPoint!: Point
5859

59-
@observable text = {
60+
@observable text: Required<TextConfig> = {
6061
value: '',
6162
x: 0,
6263
y: 0,
@@ -431,8 +432,7 @@ export class BaseEdgeModel implements IBaseEdgeModel {
431432

432433
/**
433434
* 设置边的属性,会触发重新渲染
434-
* @param key 属性名
435-
* @param val 属性值
435+
* @param properties 要更新的 properties,会做合并
436436
*/
437437
@action
438438
setProperties(properties: Record<string, any>): void {
@@ -497,28 +497,38 @@ export class BaseEdgeModel implements IBaseEdgeModel {
497497
* 内部方法,处理初始化文本格式
498498
*/
499499
@action formatText(data: EdgeConfig) {
500-
// 暂时处理,只传入text的情况
501500
const { x, y } = this.textPosition
502-
if (!data.text || typeof data.text === 'string') {
503-
this.text = {
504-
value: data.text || '',
505-
x,
506-
y,
507-
draggable: this.text.draggable,
508-
editable: this.text.editable,
509-
}
510-
return
501+
const { text } = data
502+
let textConfig: Required<TextConfig> = {
503+
value: '',
504+
x,
505+
y,
506+
draggable: false,
507+
editable: true,
511508
}
512509

513-
if (Object.prototype.toString.call(data.text) === '[object Object]') {
514-
this.text = {
515-
x: data.text.x || x,
516-
y: data.text.y || y,
517-
value: data.text.value || '',
518-
draggable: this.text.draggable,
519-
editable: this.text.editable,
510+
if (text) {
511+
if (typeof text === 'string') {
512+
textConfig = {
513+
...textConfig,
514+
value: text,
515+
}
516+
} else {
517+
textConfig = {
518+
...textConfig,
519+
x: text.x ?? x,
520+
y: text.y ?? y,
521+
value: text.value ?? '',
522+
}
523+
if (!isUndefined(text.draggable)) {
524+
textConfig.draggable = text.draggable
525+
}
526+
if (!isUndefined(text.editable)) {
527+
textConfig.editable = text.editable
528+
}
520529
}
521530
}
531+
this.text = textConfig
522532
}
523533

524534
/**

packages/core/src/model/node/BaseNodeModel.ts

Lines changed: 27 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { action, computed, isObservable, observable, toJS } from 'mobx'
2-
import { assign, cloneDeep, has, isNil, mapKeys } from 'lodash-es'
2+
import { assign, cloneDeep, has, isNil, isUndefined, mapKeys } from 'lodash-es'
33
import { GraphModel, Model } from '..'
44
import LogicFlow from '../../LogicFlow'
55
import {
@@ -186,6 +186,7 @@ export class BaseNodeModel implements IBaseNodeModel {
186186
}
187187

188188
this.formatText(data)
189+
// 在下面又将 NodeConfig 中的数据赋值给了 this,应该会触发 setAttributes,确认是否符合预期
189190
assign(this, pickNodeConfig(data)) // TODO: 确认 constructor 中赋值 properties 是否必要
190191
const { overlapMode } = this.graphModel
191192
if (overlapMode === OverlapMode.INCREASE) {
@@ -219,27 +220,34 @@ export class BaseNodeModel implements IBaseNodeModel {
219220
* 始化文本属性
220221
*/
221222
private formatText(data: NodeConfig): void {
222-
if (!data.text) {
223-
data.text = {
224-
value: '',
225-
x: data.x,
226-
y: data.y,
227-
draggable: false,
228-
editable: true,
229-
}
230-
} else {
231-
if (typeof data.text === 'string') {
232-
data.text = {
233-
value: data.text,
234-
x: data.x,
235-
y: data.y,
236-
draggable: false,
237-
editable: true,
238-
}
223+
const { x, y, text } = data
224+
let textConfig: TextConfig = {
225+
value: '',
226+
x,
227+
y,
228+
draggable: false,
229+
editable: true,
230+
}
231+
if (text) {
232+
if (typeof text === 'string') {
233+
textConfig.value = text
239234
} else {
240-
data.text.editable = data.text.editable ?? true
235+
textConfig = {
236+
...textConfig,
237+
x: text.x ?? x,
238+
y: text.y ?? y,
239+
value: text.value ?? '',
240+
}
241+
if (!isUndefined(text.draggable)) {
242+
textConfig.draggable = text.draggable
243+
}
244+
if (!isUndefined(text.editable)) {
245+
textConfig.draggable = text.draggable
246+
}
241247
}
242248
}
249+
250+
data.text = textConfig
243251
}
244252

245253
/**

packages/core/src/model/node/DiamondNodeModel.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ export class DiamondNodeModel extends BaseNodeModel {
3131
super(data, graphModel)
3232
this.properties = data.properties || {}
3333

34-
this.setAttributes()
34+
// this.setAttributes()
3535
}
3636

3737
setAttributes() {

packages/core/src/model/node/HtmlNodeModel.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import { observable } from 'mobx'
77
import LogicFlow from '../../LogicFlow'
88
import GraphModel from '../GraphModel'
99

10-
export type IHtmlNodeModel = {
10+
export type IHtmlNodeProperties = {
1111
width?: number
1212
height?: number
1313
style?: LogicFlow.CommonTheme
@@ -18,7 +18,7 @@ export type IHtmlNodeModel = {
1818

1919
export class HtmlNodeModel extends BaseNodeModel {
2020
modelType = ModelType.HTML_NODE
21-
@observable properties: IHtmlNodeModel = {}
21+
@observable properties: IHtmlNodeProperties = {}
2222

2323
constructor(data: LogicFlow.NodeConfig, graphModel: GraphModel) {
2424
super(data, graphModel)

packages/core/src/model/node/RectNodeModel.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ export class RectNodeModel extends BaseNodeModel {
2323
super(data, graphModel)
2424
this.properties = data.properties || {}
2525

26+
// TODO: bug here, 上面更新 properties 会触发 setAttributes,下面再主动调用,会导致触发两次
2627
this.setAttributes()
2728
}
2829

packages/core/src/tool/tool.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ import { VNode } from 'preact'
33
import TextEdit from './TextEditTool'
44
import MultipleSelect from './MultipleSelectTool'
55
import LogicFlow from '../LogicFlow'
6-
import { GraphModel, BaseEdgeModel, BaseNodeModel } from '../model'
76
import { ElementState, EventType } from '../constant'
7+
import { GraphModel, BaseEdgeModel, BaseNodeModel } from '../model'
88

99
export type IToolProps = {
1010
textEditElement?: BaseNodeModel | BaseEdgeModel

packages/core/src/view/shape/Text.tsx

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ export type ITextProps = {
1010
value: string
1111
fontSize?: number
1212
fill?: string
13-
overflowMode?: string | 'default' | 'ellipsis'
13+
overflowMode?: 'default' | 'autoWrap' | 'ellipsis'
1414
textWidth?: number
1515
lineHeight?: number
1616
fontFamily?: string | null
@@ -68,10 +68,10 @@ export function Text(props: ITextProps): h.JSX.Element | null {
6868
}
6969

7070
if (rowsLength > 1) {
71-
const tSpans = rows.map((row, i) => {
71+
const tSpans = rows.map((row, idx) => {
7272
// 保证文字居中,文字 Y 轴偏移为当前行数对应中心行数的偏移行 * 行高
7373
const tSpanLineHeight = fontSize + 2
74-
const offsetY = (i - (rowsLength - 1) / 2) * tSpanLineHeight
74+
const offsetY = (idx - (rowsLength - 1) / 2) * tSpanLineHeight
7575
return (
7676
<tspan className="lf-text-tspan" x={x} y={y + offsetY}>
7777
{row}
@@ -137,6 +137,7 @@ export function renderHtmlText(props: ITextProps): h.JSX.Element {
137137
height={foreignObjectHeight}
138138
x={x - textRealWidth / 2}
139139
y={y - foreignObjectHeight / 2}
140+
style={{ overflow: 'visible', textAlign: 'left' }}
140141
>
141142
<div
142143
className="lf-node-text-auto-wrap"

packages/extension/package.json

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,11 @@
3939
"@logicflow/core": "workspace:*"
4040
},
4141
"dependencies": {
42+
"lodash-es": "^4.17.21",
4243
"@antv/hierarchy": "^0.6.11",
43-
"@logicflow/core": "workspace:*",
44+
"@logicflow/core": "workspace:*"
45+
},
46+
"devDependencies": {
4447
"preact": "^10.17.1"
4548
}
4649
}

packages/react-node-registry/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
"@types/react": "^18.0.25",
4242
"@types/react-dom": "^18.0.9",
4343
"react": "^18.0.0",
44-
"react-dom": "^18.0.0"
44+
"react-dom": "^18.0.0",
45+
"lodash-es": "^4.17.21"
4546
}
4647
}

packages/vue-node-registry/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,8 @@
3535
"peerDependencies": {
3636
"@logicflow/core": "workspace:*",
3737
"@vue/composition-api": "^1.0.0-rc.1",
38-
"vue": "^2.0.0 || >=3.0.0"
38+
"vue": "^2.0.0 || >=3.0.0",
39+
"lodash-es": "^4.17.21"
3940
},
4041
"peerDependenciesMeta": {
4142
"@vue/composition-api": {

pnpm-lock.yaml

Lines changed: 13 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)