Skip to content
This repository was archived by the owner on Nov 22, 2022. It is now read-only.

Commit f47979d

Browse files
Memoize parent node extraction in study tree
This avoids re-rendering the study overview on every (!) state change
1 parent af18bd6 commit f47979d

File tree

3 files changed

+30
-7
lines changed

3 files changed

+30
-7
lines changed

packages/builder/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@
4747
"react-transition-group": "^4.3.0",
4848
"reactstrap": "^8.4.1",
4949
"redux": "^4.0.5",
50+
"reselect": "^4.0.0",
5051
"serialize-javascript": "^3.0.0",
5152
"slugify": "^1.3.6",
5253
"uuid4": "^1.1.4"

packages/builder/src/components/Tree/components/DropTarget/index.js

Lines changed: 24 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
import React from 'react'
22
import { connect } from 'react-redux'
3+
import { createSelectorCreator, defaultMemoize } from 'reselect'
4+
35
import { DropTarget } from 'react-dnd'
46
import classnames from 'classnames'
5-
import { flow } from 'lodash'
7+
import { isEqual, flow } from 'lodash'
68

79
import { parents } from '../../../../logic/tree'
810

@@ -62,13 +64,28 @@ const collect = (connect, monitor) => ({
6264
validTarget: monitor.canDrop() && monitor.isOver({ shallow: true }),
6365
})
6466

67+
// Redux integration -----------------------------------------------------------
68+
69+
const getParents = (state, props) =>
70+
parents(props.id, state.components)
71+
72+
const createDeepEqualSelector = createSelectorCreator(
73+
defaultMemoize,
74+
isEqual
75+
)
76+
77+
const makeMapStateToProps = () => {
78+
const parentSelector = createDeepEqualSelector(
79+
[getParents], parents => parents,
80+
)
81+
const mapStateToProps = (state, props) => ({
82+
parentIds: parentSelector(state, props)
83+
})
84+
return mapStateToProps
85+
}
86+
6587
// Make the component a DropTarget
6688
export default flow(
6789
DropTarget('node', targetSpec, collect),
68-
connect((state, props) => ({
69-
parentIds: parents(
70-
props.id,
71-
state.components
72-
)
73-
})),
90+
connect(makeMapStateToProps),
7491
)(TreeDropTarget)

yarn.lock

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14884,6 +14884,11 @@ requires-port@^1.0.0:
1488414884
version "1.0.0"
1488514885
resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff"
1488614886

14887+
reselect@^4.0.0:
14888+
version "4.0.0"
14889+
resolved "https://registry.yarnpkg.com/reselect/-/reselect-4.0.0.tgz#f2529830e5d3d0e021408b246a206ef4ea4437f7"
14890+
integrity sha512-qUgANli03jjAyGlnbYVAV5vvnOmJnODyABz51RdBN7M4WaVu8mecZWgyQNkG8Yqe3KRGRt0l4K4B3XVEULC4CA==
14891+
1488714892
resolve-cwd@^2.0.0:
1488814893
version "2.0.0"
1488914894
resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a"

0 commit comments

Comments
 (0)