Skip to content

Commit 305da1a

Browse files
committed
perf(core): improve performance
1 parent 75f0e7a commit 305da1a

File tree

3 files changed

+46
-45
lines changed

3 files changed

+46
-45
lines changed

packages/core/src/effects/useDragDropEffect.ts

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -130,27 +130,21 @@ export const useDragDropEffect = (engine: Engine) => {
130130
) {
131131
if (closestNode.allowSibling(dragNodes)) {
132132
const newNodes = closestNode.insertBefore(...dragNodes)
133-
requestIdle(() => {
134-
selection.batchSafeSelect(newNodes)
135-
})
133+
selection.batchSafeSelect(newNodes)
136134
}
137135
} else if (
138136
closestDirection === ClosestDirection.Inner ||
139137
closestDirection === ClosestDirection.InnerAfter
140138
) {
141139
if (closestNode.allowAppend(dragNodes)) {
142140
const newNodes = closestNode.appendNode(...dragNodes)
143-
requestIdle(() => {
144-
selection.batchSafeSelect(newNodes)
145-
})
141+
selection.batchSafeSelect(newNodes)
146142
operation.setDropNode(closestNode)
147143
}
148144
} else if (closestDirection === ClosestDirection.InnerBefore) {
149145
if (closestNode.allowAppend(dragNodes)) {
150146
const newNodes = closestNode.prependNode(...dragNodes)
151-
requestIdle(() => {
152-
selection.batchSafeSelect(newNodes)
153-
})
147+
selection.batchSafeSelect(newNodes)
154148
operation.setDropNode(closestNode)
155149
}
156150
}

packages/react-settings-form/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
"antd": "^4.15.5"
2222
},
2323
"dependencies": {
24+
"@designable/shared": "0.1.18",
2425
"@designable/core": "0.1.18",
2526
"@designable/react": "0.1.18",
2627
"@formily/antd": "^2.0.0-beta.50",

packages/react-settings-form/src/SettingsForm.tsx

Lines changed: 42 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,13 @@ import React, { useMemo } from 'react'
22
import { createForm } from '@formily/core'
33
import { Form } from '@formily/antd'
44
import { observer } from '@formily/react'
5-
import { Empty } from 'antd'
5+
import { requestIdle } from '@designable/shared'
66
import { useSelection, useTree, usePrefix, IconWidget } from '@designable/react'
77
import { SchemaField } from './SchemaField'
88
import { ISettingFormProps } from './types'
99
import { SettingsFormContext } from './context'
1010
import { useLocales } from './effects'
11+
import { Empty } from 'antd'
1112
import cls from 'classnames'
1213
import './styles.less'
1314

@@ -22,44 +23,49 @@ const useCurrentNode = () => {
2223
return tree?.findById?.(selected[0])
2324
}
2425

25-
export const SettingsForm: React.FC<ISettingFormProps> = observer((props) => {
26-
const node = useCurrentNode()
27-
const selected = useSelected()
28-
const prefix = usePrefix('settings-form')
29-
const form = useMemo(() => {
30-
return createForm({
31-
values: node?.props,
32-
effects() {
33-
useLocales()
34-
},
35-
})
36-
}, [node, node?.designerProps?.propsSchema])
26+
export const SettingsForm: React.FC<ISettingFormProps> = observer(
27+
(props) => {
28+
const node = useCurrentNode()
29+
const selected = useSelected()
30+
const prefix = usePrefix('settings-form')
31+
const form = useMemo(() => {
32+
return createForm({
33+
values: node?.props,
34+
effects() {
35+
useLocales()
36+
},
37+
})
38+
}, [node, node?.designerProps?.propsSchema])
3739

38-
const render = () => {
39-
if (node && node.designerProps?.propsSchema && selected.length === 1) {
40+
const render = () => {
41+
if (node && node.designerProps?.propsSchema && selected.length === 1) {
42+
return (
43+
<div className={cls(prefix, props.className)} style={props.style}>
44+
<SettingsFormContext.Provider value={props}>
45+
<Form
46+
form={form}
47+
colon={false}
48+
labelWidth={120}
49+
labelAlign="left"
50+
wrapperAlign="right"
51+
feedbackLayout="none"
52+
>
53+
<SchemaField schema={node.designerProps.propsSchema as any} />
54+
</Form>
55+
</SettingsFormContext.Provider>
56+
</div>
57+
)
58+
}
4059
return (
41-
<div className={cls(prefix, props.className)} style={props.style}>
42-
<SettingsFormContext.Provider value={props}>
43-
<Form
44-
form={form}
45-
colon={false}
46-
labelWidth={120}
47-
labelAlign="left"
48-
wrapperAlign="right"
49-
feedbackLayout="none"
50-
>
51-
<SchemaField schema={node.designerProps.propsSchema as any} />
52-
</Form>
53-
</SettingsFormContext.Provider>
60+
<div className={prefix + '-empty'}>
61+
<Empty />
5462
</div>
5563
)
5664
}
57-
return (
58-
<div className={prefix + '-empty'}>
59-
<Empty />
60-
</div>
61-
)
62-
}
6365

64-
return <IconWidget.Provider tooltip>{render()}</IconWidget.Provider>
65-
})
66+
return <IconWidget.Provider tooltip>{render()}</IconWidget.Provider>
67+
},
68+
{
69+
scheduler: requestIdle,
70+
}
71+
)

0 commit comments

Comments
 (0)