react-native-tree-multi-select 1.6.0 → 1.7.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -3
- package/lib/commonjs/TreeView.js +4 -3
- package/lib/commonjs/TreeView.js.map +1 -1
- package/lib/commonjs/utils/useDeepCompareEffect.js +33 -0
- package/lib/commonjs/utils/useDeepCompareEffect.js.map +1 -0
- package/lib/module/TreeView.js +4 -3
- package/lib/module/TreeView.js.map +1 -1
- package/lib/module/utils/useDeepCompareEffect.js +27 -0
- package/lib/module/utils/useDeepCompareEffect.js.map +1 -0
- package/lib/typescript/TreeView.d.ts.map +1 -1
- package/lib/typescript/utils/useDeepCompareEffect.d.ts +10 -0
- package/lib/typescript/utils/useDeepCompareEffect.d.ts.map +1 -0
- package/package.json +3 -1
- package/src/TreeView.tsx +5 -3
- package/src/utils/useDeepCompareEffect.ts +29 -0
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
⚡️Super-fast Tree view with multi-selection capabilities, using checkboxes and search filtering.
|
|
4
4
|
|
|
5
|
-
[](https://badge.fury.io/js/react-native-tree-multi-select) [](https://github.com/JairajJangle/react-native-tree-multi-select/blob/main/LICENSE) [](https://github.com/JairajJangle/react-native-tree-multi-select/actions/workflows/ci.yml) [](https://github.com/JairajJangle/react-native-tree-multi-select/actions/workflows/ci.yml)    [](https://github.com/JairajJangle/react-native-tree-multi-select/issues?q=is%3Aopen+is%3Aissue)  [](https://snyk.io/test/github/jairajjangle/react-native-tree-multi-select) [](https://snack.expo.dev/@futurejj/react-native-tree-multi-select-example)
|
|
5
|
+
[](https://badge.fury.io/js/react-native-tree-multi-select) [](https://github.com/JairajJangle/react-native-tree-multi-select/blob/main/LICENSE) [](https://github.com/JairajJangle/react-native-tree-multi-select/actions/workflows/ci.yml) [](https://github.com/JairajJangle/react-native-tree-multi-select/actions/workflows/ci.yml)    [](https://github.com/JairajJangle/react-native-tree-multi-select/issues?q=is%3Aopen+is%3Aissue)  [](https://snyk.io/test/github/jairajjangle/react-native-tree-multi-select) [](https://snack.expo.dev/@futurejj/react-native-tree-multi-select-example) 
|
|
6
6
|
|
|
7
7
|
|
|
8
8
|
|
|
@@ -131,8 +131,6 @@ export function TreeViewUsageExample(){
|
|
|
131
131
|
| `ExpandCollapseTouchableComponent` | `ComponentType<`[TouchableOpacityProps](https://reactnative.dev/docs/touchableopacity#props)`>` | No | A custom expand/collapse touchable component |
|
|
132
132
|
| `CustomNodeRowComponent` | `React.ComponentType<`[NodeRowProps](#noderowprops)`>` | No | Custom row item component |
|
|
133
133
|
|
|
134
|
-
ℹ️ `data` prop is not stateful! You will need to update the `key` prop to force `TreeView` to re-render.
|
|
135
|
-
|
|
136
134
|
ℹ️ If `CustomNodeRowComponent` is provided then below props are not applied:
|
|
137
135
|
|
|
138
136
|
1. `indentationMultiplier`
|
package/lib/commonjs/TreeView.js
CHANGED
|
@@ -12,6 +12,7 @@ var _treeView = require("./store/treeView.store");
|
|
|
12
12
|
var _usePreviousState = _interopRequireDefault(require("./utils/usePreviousState"));
|
|
13
13
|
var _shallow = require("zustand/react/shallow");
|
|
14
14
|
var _reactNativeUuid = _interopRequireDefault(require("react-native-uuid"));
|
|
15
|
+
var _useDeepCompareEffect = _interopRequireDefault(require("./utils/useDeepCompareEffect"));
|
|
15
16
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
16
17
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
17
18
|
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
@@ -72,7 +73,8 @@ const _TreeView = /*#__PURE__*/_react.default.forwardRef((props, ref) => {
|
|
|
72
73
|
setSearchText
|
|
73
74
|
}));
|
|
74
75
|
const prevSearchText = (0, _usePreviousState.default)(searchText);
|
|
75
|
-
|
|
76
|
+
(0, _useDeepCompareEffect.default)(() => {
|
|
77
|
+
cleanUpTreeViewStore();
|
|
76
78
|
updateInitialTreeViewData(data);
|
|
77
79
|
if (selectionPropagation) setSelectionPropagation(selectionPropagation);
|
|
78
80
|
(0, _helpers.initializeNodeMaps)(storeId, data);
|
|
@@ -82,8 +84,7 @@ const _TreeView = /*#__PURE__*/_react.default.forwardRef((props, ref) => {
|
|
|
82
84
|
|
|
83
85
|
// Expand pre-expanded nodes
|
|
84
86
|
(0, _helpers.expandNodes)(storeId, preExpandedIds);
|
|
85
|
-
|
|
86
|
-
}, []);
|
|
87
|
+
}, [data]);
|
|
87
88
|
function selectNodes(ids) {
|
|
88
89
|
(0, _helpers.toggleCheckboxes)(storeId, ids, true);
|
|
89
90
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_NodeList","_interopRequireDefault","_helpers","_treeView","_usePreviousState","_shallow","_reactNativeUuid","_jsxRuntime","e","__esModule","default","_getRequireWildcardCache","WeakMap","r","t","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","_TreeView","React","forwardRef","props","ref","data","onCheck","onExpand","selectionPropagation","preselectedIds","preExpandedIds","treeFlashListProps","checkBoxViewStyleProps","indentationMultiplier","CheckboxComponent","ExpandCollapseIconComponent","ExpandCollapseTouchableComponent","CustomNodeRowComponent","storeId","useMemo","uuid","v4","expanded","updateExpanded","initialTreeViewData","updateInitialTreeViewData","searchText","updateSearchText","updateSearchKeys","checked","indeterminate","setSelectionPropagation","cleanUpTreeViewStore","useTreeViewStore","useShallow","state","useImperativeHandle","selectAll","unselectAll","selectAllFiltered","unselectAllFiltered","expandAll","collapseAll","expandNodes","ids","collapseNodes","selectNodes","unselectNodes","setSearchText","prevSearchText","usePreviousState","
|
|
1
|
+
{"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_NodeList","_interopRequireDefault","_helpers","_treeView","_usePreviousState","_shallow","_reactNativeUuid","_useDeepCompareEffect","_jsxRuntime","e","__esModule","default","_getRequireWildcardCache","WeakMap","r","t","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","_TreeView","React","forwardRef","props","ref","data","onCheck","onExpand","selectionPropagation","preselectedIds","preExpandedIds","treeFlashListProps","checkBoxViewStyleProps","indentationMultiplier","CheckboxComponent","ExpandCollapseIconComponent","ExpandCollapseTouchableComponent","CustomNodeRowComponent","storeId","useMemo","uuid","v4","expanded","updateExpanded","initialTreeViewData","updateInitialTreeViewData","searchText","updateSearchText","updateSearchKeys","checked","indeterminate","setSelectionPropagation","cleanUpTreeViewStore","useTreeViewStore","useShallow","state","useImperativeHandle","selectAll","unselectAll","selectAllFiltered","unselectAllFiltered","expandAll","collapseAll","expandNodes","ids","collapseNodes","selectNodes","unselectNodes","setSearchText","prevSearchText","usePreviousState","useDeepCompareEffect","initializeNodeMaps","toggleCheckboxes","text","keys","getIds","useCallback","node","children","length","id","flatMap","item","useEffect","Array","from","InteractionManager","runAfterInteractions","Set","jsx","TreeView","exports","memo"],"sourceRoot":"../../src","sources":["TreeView.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = useDeepCompareEffect;
|
|
7
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
8
|
+
var _isEqual = _interopRequireDefault(require("lodash/isEqual"));
|
|
9
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
10
|
+
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
11
|
+
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
12
|
+
/**
|
|
13
|
+
* Deep compare effect hook.
|
|
14
|
+
* Ensures the effect runs on the first render and whenever dependencies deeply change.
|
|
15
|
+
*
|
|
16
|
+
* @param effect The effect callback function.
|
|
17
|
+
* @param dependencies The dependencies array to compare deeply.
|
|
18
|
+
*/
|
|
19
|
+
function useDeepCompareEffect(effect, dependencies) {
|
|
20
|
+
const previousDependenciesRef = (0, _react.useRef)();
|
|
21
|
+
const isFirstRender = (0, _react.useRef)(true);
|
|
22
|
+
const hasChanged = isFirstRender.current || !(0, _isEqual.default)(previousDependenciesRef.current, dependencies);
|
|
23
|
+
_react.default.useEffect(() => {
|
|
24
|
+
if (hasChanged) {
|
|
25
|
+
isFirstRender.current = false; // Mark that the first render has passed
|
|
26
|
+
previousDependenciesRef.current = dependencies; // Update dependencies reference
|
|
27
|
+
return effect();
|
|
28
|
+
}
|
|
29
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
30
|
+
}, [hasChanged]); // Depend only on the change detection flag
|
|
31
|
+
}
|
|
32
|
+
;
|
|
33
|
+
//# sourceMappingURL=useDeepCompareEffect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_react","_interopRequireWildcard","require","_isEqual","_interopRequireDefault","e","__esModule","default","_getRequireWildcardCache","WeakMap","r","t","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","useDeepCompareEffect","effect","dependencies","previousDependenciesRef","useRef","isFirstRender","hasChanged","current","isEqual","React","useEffect"],"sourceRoot":"../../../src","sources":["utils/useDeepCompareEffect.ts"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,uBAAA,CAAAC,OAAA;AACA,IAAAC,QAAA,GAAAC,sBAAA,CAAAF,OAAA;AAAqC,SAAAE,uBAAAC,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAAA,SAAAG,yBAAAH,CAAA,6BAAAI,OAAA,mBAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAD,wBAAA,YAAAA,CAAAH,CAAA,WAAAA,CAAA,GAAAM,CAAA,GAAAD,CAAA,KAAAL,CAAA;AAAA,SAAAJ,wBAAAI,CAAA,EAAAK,CAAA,SAAAA,CAAA,IAAAL,CAAA,IAAAA,CAAA,CAAAC,UAAA,SAAAD,CAAA,eAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,WAAAE,OAAA,EAAAF,CAAA,QAAAM,CAAA,GAAAH,wBAAA,CAAAE,CAAA,OAAAC,CAAA,IAAAA,CAAA,CAAAC,GAAA,CAAAP,CAAA,UAAAM,CAAA,CAAAE,GAAA,CAAAR,CAAA,OAAAS,CAAA,KAAAC,SAAA,UAAAC,CAAA,GAAAC,MAAA,CAAAC,cAAA,IAAAD,MAAA,CAAAE,wBAAA,WAAAC,CAAA,IAAAf,CAAA,oBAAAe,CAAA,OAAAC,cAAA,CAAAC,IAAA,CAAAjB,CAAA,EAAAe,CAAA,SAAAG,CAAA,GAAAP,CAAA,GAAAC,MAAA,CAAAE,wBAAA,CAAAd,CAAA,EAAAe,CAAA,UAAAG,CAAA,KAAAA,CAAA,CAAAV,GAAA,IAAAU,CAAA,CAAAC,GAAA,IAAAP,MAAA,CAAAC,cAAA,CAAAJ,CAAA,EAAAM,CAAA,EAAAG,CAAA,IAAAT,CAAA,CAAAM,CAAA,IAAAf,CAAA,CAAAe,CAAA,YAAAN,CAAA,CAAAP,OAAA,GAAAF,CAAA,EAAAM,CAAA,IAAAA,CAAA,CAAAa,GAAA,CAAAnB,CAAA,EAAAS,CAAA,GAAAA,CAAA;AAErC;AACA;AACA;AACA;AACA;AACA;AACA;AACe,SAASW,oBAAoBA,CAC1CC,MAA4B,EAC5BC,YAAmB,EACnB;EACA,MAAMC,uBAAuB,GAAG,IAAAC,aAAM,EAAQ,CAAC;EAC/C,MAAMC,aAAa,GAAG,IAAAD,aAAM,EAAC,IAAI,CAAC;EAElC,MAAME,UAAU,GACdD,aAAa,CAACE,OAAO,IAAI,CAAC,IAAAC,gBAAO,EAACL,uBAAuB,CAACI,OAAO,EAAEL,YAAY,CAAC;EAElFO,cAAK,CAACC,SAAS,CAAC,MAAM;IACpB,IAAIJ,UAAU,EAAE;MACdD,aAAa,CAACE,OAAO,GAAG,KAAK,CAAC,CAAC;MAC/BJ,uBAAuB,CAACI,OAAO,GAAGL,YAAY,CAAC,CAAC;MAChD,OAAOD,MAAM,CAAC,CAAC;IACjB;IACA;EACF,CAAC,EAAE,CAACK,UAAU,CAAC,CAAC,CAAC,CAAC;AACpB;AAAC","ignoreList":[]}
|
package/lib/module/TreeView.js
CHANGED
|
@@ -8,6 +8,7 @@ import { useTreeViewStore } from './store/treeView.store';
|
|
|
8
8
|
import usePreviousState from './utils/usePreviousState';
|
|
9
9
|
import { useShallow } from "zustand/react/shallow";
|
|
10
10
|
import uuid from "react-native-uuid";
|
|
11
|
+
import useDeepCompareEffect from "./utils/useDeepCompareEffect";
|
|
11
12
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
12
13
|
const _TreeView = /*#__PURE__*/React.forwardRef((props, ref) => {
|
|
13
14
|
const {
|
|
@@ -65,7 +66,8 @@ const _TreeView = /*#__PURE__*/React.forwardRef((props, ref) => {
|
|
|
65
66
|
setSearchText
|
|
66
67
|
}));
|
|
67
68
|
const prevSearchText = usePreviousState(searchText);
|
|
68
|
-
|
|
69
|
+
useDeepCompareEffect(() => {
|
|
70
|
+
cleanUpTreeViewStore();
|
|
69
71
|
updateInitialTreeViewData(data);
|
|
70
72
|
if (selectionPropagation) setSelectionPropagation(selectionPropagation);
|
|
71
73
|
initializeNodeMaps(storeId, data);
|
|
@@ -75,8 +77,7 @@ const _TreeView = /*#__PURE__*/React.forwardRef((props, ref) => {
|
|
|
75
77
|
|
|
76
78
|
// Expand pre-expanded nodes
|
|
77
79
|
expandNodes(storeId, preExpandedIds);
|
|
78
|
-
|
|
79
|
-
}, []);
|
|
80
|
+
}, [data]);
|
|
80
81
|
function selectNodes(ids) {
|
|
81
82
|
toggleCheckboxes(storeId, ids, true);
|
|
82
83
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","useMemo","InteractionManager","NodeList","selectAll","selectAllFiltered","unselectAll","unselectAllFiltered","initializeNodeMaps","expandAll","collapseAll","toggleCheckboxes","expandNodes","collapseNodes","useTreeViewStore","usePreviousState","useShallow","uuid","jsx","_jsx","_TreeView","forwardRef","props","ref","data","onCheck","onExpand","selectionPropagation","preselectedIds","preExpandedIds","treeFlashListProps","checkBoxViewStyleProps","indentationMultiplier","CheckboxComponent","ExpandCollapseIconComponent","ExpandCollapseTouchableComponent","CustomNodeRowComponent","storeId","v4","expanded","updateExpanded","initialTreeViewData","updateInitialTreeViewData","searchText","updateSearchText","updateSearchKeys","checked","indeterminate","setSelectionPropagation","cleanUpTreeViewStore","state","useImperativeHandle","ids","selectNodes","unselectNodes","setSearchText","prevSearchText","
|
|
1
|
+
{"version":3,"names":["React","useMemo","InteractionManager","NodeList","selectAll","selectAllFiltered","unselectAll","unselectAllFiltered","initializeNodeMaps","expandAll","collapseAll","toggleCheckboxes","expandNodes","collapseNodes","useTreeViewStore","usePreviousState","useShallow","uuid","useDeepCompareEffect","jsx","_jsx","_TreeView","forwardRef","props","ref","data","onCheck","onExpand","selectionPropagation","preselectedIds","preExpandedIds","treeFlashListProps","checkBoxViewStyleProps","indentationMultiplier","CheckboxComponent","ExpandCollapseIconComponent","ExpandCollapseTouchableComponent","CustomNodeRowComponent","storeId","v4","expanded","updateExpanded","initialTreeViewData","updateInitialTreeViewData","searchText","updateSearchText","updateSearchKeys","checked","indeterminate","setSelectionPropagation","cleanUpTreeViewStore","state","useImperativeHandle","ids","selectNodes","unselectNodes","setSearchText","prevSearchText","text","keys","getIds","useCallback","node","children","length","id","flatMap","item","useEffect","Array","from","runAfterInteractions","Set","TreeView","memo"],"sourceRoot":"../../src","sources":["TreeView.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import React, { useRef } from "react";
|
|
4
|
+
import isEqual from "lodash/isEqual";
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Deep compare effect hook.
|
|
8
|
+
* Ensures the effect runs on the first render and whenever dependencies deeply change.
|
|
9
|
+
*
|
|
10
|
+
* @param effect The effect callback function.
|
|
11
|
+
* @param dependencies The dependencies array to compare deeply.
|
|
12
|
+
*/
|
|
13
|
+
export default function useDeepCompareEffect(effect, dependencies) {
|
|
14
|
+
const previousDependenciesRef = useRef();
|
|
15
|
+
const isFirstRender = useRef(true);
|
|
16
|
+
const hasChanged = isFirstRender.current || !isEqual(previousDependenciesRef.current, dependencies);
|
|
17
|
+
React.useEffect(() => {
|
|
18
|
+
if (hasChanged) {
|
|
19
|
+
isFirstRender.current = false; // Mark that the first render has passed
|
|
20
|
+
previousDependenciesRef.current = dependencies; // Update dependencies reference
|
|
21
|
+
return effect();
|
|
22
|
+
}
|
|
23
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
24
|
+
}, [hasChanged]); // Depend only on the change detection flag
|
|
25
|
+
}
|
|
26
|
+
;
|
|
27
|
+
//# sourceMappingURL=useDeepCompareEffect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","useRef","isEqual","useDeepCompareEffect","effect","dependencies","previousDependenciesRef","isFirstRender","hasChanged","current","useEffect"],"sourceRoot":"../../../src","sources":["utils/useDeepCompareEffect.ts"],"mappings":";;AAAA,OAAOA,KAAK,IAAIC,MAAM,QAAQ,OAAO;AACrC,OAAOC,OAAO,MAAM,gBAAgB;;AAEpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAASC,oBAAoBA,CAC1CC,MAA4B,EAC5BC,YAAmB,EACnB;EACA,MAAMC,uBAAuB,GAAGL,MAAM,CAAQ,CAAC;EAC/C,MAAMM,aAAa,GAAGN,MAAM,CAAC,IAAI,CAAC;EAElC,MAAMO,UAAU,GACdD,aAAa,CAACE,OAAO,IAAI,CAACP,OAAO,CAACI,uBAAuB,CAACG,OAAO,EAAEJ,YAAY,CAAC;EAElFL,KAAK,CAACU,SAAS,CAAC,MAAM;IACpB,IAAIF,UAAU,EAAE;MACdD,aAAa,CAACE,OAAO,GAAG,KAAK,CAAC,CAAC;MAC/BH,uBAAuB,CAACG,OAAO,GAAGJ,YAAY,CAAC,CAAC;MAChD,OAAOD,MAAM,CAAC,CAAC;IACjB;IACA;EACF,CAAC,EAAE,CAACI,UAAU,CAAC,CAAC,CAAC,CAAC;AACpB;AAAC","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TreeView.d.ts","sourceRoot":"","sources":["../../src/TreeView.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAkB,MAAM,OAAO,CAAC;AAEvC,OAAO,KAAK,EAEV,aAAa,EACb,WAAW,EACZ,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"TreeView.d.ts","sourceRoot":"","sources":["../../src/TreeView.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAkB,MAAM,OAAO,CAAC;AAEvC,OAAO,KAAK,EAEV,aAAa,EACb,WAAW,EACZ,MAAM,wBAAwB,CAAC;AAyMhC,eAAO,MAAM,QAAQ,8GAAwB,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
/**
|
|
3
|
+
* Deep compare effect hook.
|
|
4
|
+
* Ensures the effect runs on the first render and whenever dependencies deeply change.
|
|
5
|
+
*
|
|
6
|
+
* @param effect The effect callback function.
|
|
7
|
+
* @param dependencies The dependencies array to compare deeply.
|
|
8
|
+
*/
|
|
9
|
+
export default function useDeepCompareEffect(effect: React.EffectCallback, dependencies: any[]): void;
|
|
10
|
+
//# sourceMappingURL=useDeepCompareEffect.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useDeepCompareEffect.d.ts","sourceRoot":"","sources":["../../../src/utils/useDeepCompareEffect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAiB,MAAM,OAAO,CAAC;AAGtC;;;;;;GAMG;AACH,MAAM,CAAC,OAAO,UAAU,oBAAoB,CAC1C,MAAM,EAAE,KAAK,CAAC,cAAc,EAC5B,YAAY,EAAE,GAAG,EAAE,QAgBpB"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-native-tree-multi-select",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.7.0-beta.1",
|
|
4
4
|
"description": "A super-fast, customizable tree view component for React Native with multi-selection, checkboxes, and search filtering capabilities.",
|
|
5
5
|
"main": "lib/commonjs/index.js",
|
|
6
6
|
"module": "lib/module/index.js",
|
|
@@ -95,6 +95,7 @@
|
|
|
95
95
|
"@testing-library/react-native": "^12.6.1",
|
|
96
96
|
"@types/color": "^3.0.6",
|
|
97
97
|
"@types/jest": "^29.5.3",
|
|
98
|
+
"@types/lodash": "^4.17.13",
|
|
98
99
|
"@types/react": "~17.0.21",
|
|
99
100
|
"@types/react-native": "0.70.0",
|
|
100
101
|
"@types/react-native-vector-icons": "^6.4.18",
|
|
@@ -208,6 +209,7 @@
|
|
|
208
209
|
]
|
|
209
210
|
},
|
|
210
211
|
"dependencies": {
|
|
212
|
+
"lodash": "^4.17.21",
|
|
211
213
|
"react-native-uuid": "^2.0.3",
|
|
212
214
|
"zustand": "^4.5.5"
|
|
213
215
|
},
|
package/src/TreeView.tsx
CHANGED
|
@@ -22,6 +22,7 @@ import { useTreeViewStore } from './store/treeView.store';
|
|
|
22
22
|
import usePreviousState from './utils/usePreviousState';
|
|
23
23
|
import { useShallow } from "zustand/react/shallow";
|
|
24
24
|
import uuid from "react-native-uuid";
|
|
25
|
+
import useDeepCompareEffect from "./utils/useDeepCompareEffect";
|
|
25
26
|
|
|
26
27
|
const _TreeView = React.forwardRef<TreeViewRef, TreeViewProps>(
|
|
27
28
|
(props, ref) => {
|
|
@@ -111,7 +112,9 @@ const _TreeView = React.forwardRef<TreeViewRef, TreeViewProps>(
|
|
|
111
112
|
|
|
112
113
|
const prevSearchText = usePreviousState(searchText);
|
|
113
114
|
|
|
114
|
-
|
|
115
|
+
useDeepCompareEffect(() => {
|
|
116
|
+
cleanUpTreeViewStore();
|
|
117
|
+
|
|
115
118
|
updateInitialTreeViewData(data);
|
|
116
119
|
|
|
117
120
|
if (selectionPropagation)
|
|
@@ -124,8 +127,7 @@ const _TreeView = React.forwardRef<TreeViewRef, TreeViewProps>(
|
|
|
124
127
|
|
|
125
128
|
// Expand pre-expanded nodes
|
|
126
129
|
expandNodes(storeId, preExpandedIds);
|
|
127
|
-
|
|
128
|
-
}, []);
|
|
130
|
+
}, [data]);
|
|
129
131
|
|
|
130
132
|
function selectNodes(ids: string[]) {
|
|
131
133
|
toggleCheckboxes(storeId, ids, true);
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import React, { useRef } from "react";
|
|
2
|
+
import isEqual from "lodash/isEqual";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Deep compare effect hook.
|
|
6
|
+
* Ensures the effect runs on the first render and whenever dependencies deeply change.
|
|
7
|
+
*
|
|
8
|
+
* @param effect The effect callback function.
|
|
9
|
+
* @param dependencies The dependencies array to compare deeply.
|
|
10
|
+
*/
|
|
11
|
+
export default function useDeepCompareEffect(
|
|
12
|
+
effect: React.EffectCallback,
|
|
13
|
+
dependencies: any[]
|
|
14
|
+
) {
|
|
15
|
+
const previousDependenciesRef = useRef<any[]>();
|
|
16
|
+
const isFirstRender = useRef(true);
|
|
17
|
+
|
|
18
|
+
const hasChanged =
|
|
19
|
+
isFirstRender.current || !isEqual(previousDependenciesRef.current, dependencies);
|
|
20
|
+
|
|
21
|
+
React.useEffect(() => {
|
|
22
|
+
if (hasChanged) {
|
|
23
|
+
isFirstRender.current = false; // Mark that the first render has passed
|
|
24
|
+
previousDependenciesRef.current = dependencies; // Update dependencies reference
|
|
25
|
+
return effect();
|
|
26
|
+
}
|
|
27
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
28
|
+
}, [hasChanged]); // Depend only on the change detection flag
|
|
29
|
+
};
|