@aiszlab/relax 1.2.11-beta.5 → 1.2.11-beta.6
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/dist/hooks/use-toggleable.d.ts +6 -2
- package/dist/hooks/use-toggleable.js +79 -101
- package/dist/index.d.ts +7 -0
- package/dist/index.js +1 -0
- package/dist/node_modules/tslib/tslib.es6.js +9 -1
- package/dist/utils/unique.d.ts +10 -0
- package/dist/utils/unique.js +16 -0
- package/package.json +2 -3
- package/dist/types/index.d.ts +0 -2
- package/dist/types/index.js +0 -1
- /package/dist/{types → utils}/null-able.d.ts +0 -0
- /package/dist/{types → utils}/partial-able.d.ts +0 -0
|
@@ -30,13 +30,17 @@ type Options = {
|
|
|
30
30
|
* toggled keys
|
|
31
31
|
*/
|
|
32
32
|
toggledKeys?: Key[];
|
|
33
|
+
/**
|
|
34
|
+
* @description
|
|
35
|
+
* on toggle callback
|
|
36
|
+
*/
|
|
37
|
+
onToggle?: (keys: Key[]) => void;
|
|
33
38
|
};
|
|
34
39
|
/**
|
|
35
40
|
* @description
|
|
36
41
|
* toggle able
|
|
37
42
|
*/
|
|
38
|
-
export declare const useToggleable: (toggleableKeys: ToggleableKey[], options?: Options) => {
|
|
39
|
-
isAllToggled: boolean;
|
|
43
|
+
export declare const useToggleable: (toggleableKeys: ToggleableKey[], { onToggle, ...options }?: Options) => {
|
|
40
44
|
toggledKeys: Set<Key>;
|
|
41
45
|
isToggled: (key: Key) => boolean;
|
|
42
46
|
toggle: (key: Key) => void;
|
|
@@ -1,97 +1,63 @@
|
|
|
1
|
-
import { __classPrivateFieldSet, __classPrivateFieldGet } from '../node_modules/tslib/tslib.es6.js';
|
|
2
|
-
import {
|
|
1
|
+
import { __rest, __classPrivateFieldSet, __classPrivateFieldGet } from '../node_modules/tslib/tslib.es6.js';
|
|
2
|
+
import { useMemo, useCallback } from 'react';
|
|
3
|
+
import { useControlledState } from './use-controlled-state.js';
|
|
3
4
|
|
|
4
|
-
var
|
|
5
|
+
var _Tree_groupedLeaves, _Leaf_key, _Leaf_belongTo, _Leaf_parent, _Leaf_children;
|
|
5
6
|
class Tree {
|
|
6
|
-
constructor(
|
|
7
|
-
_Tree_leaves.set(this, void 0);
|
|
8
|
-
_Tree_toggledLeaves.set(this, void 0);
|
|
7
|
+
constructor() {
|
|
9
8
|
_Tree_groupedLeaves.set(this, void 0);
|
|
10
|
-
_Tree_isDefaultToggled.set(this, void 0);
|
|
11
|
-
__classPrivateFieldSet(this, _Tree_leaves, new Set(), "f");
|
|
12
|
-
__classPrivateFieldSet(this, _Tree_toggledLeaves, new Set(), "f");
|
|
13
9
|
__classPrivateFieldSet(this, _Tree_groupedLeaves, new Map(), "f");
|
|
14
|
-
__classPrivateFieldSet(this, _Tree_isDefaultToggled, !!isDefaultToggled, "f");
|
|
15
|
-
}
|
|
16
|
-
get isAllToggled() {
|
|
17
|
-
return __classPrivateFieldGet(this, _Tree_leaves, "f").size === __classPrivateFieldGet(this, _Tree_toggledLeaves, "f").size;
|
|
18
|
-
}
|
|
19
|
-
get toggledLeaves() {
|
|
20
|
-
return __classPrivateFieldGet(this, _Tree_toggledLeaves, "f");
|
|
21
10
|
}
|
|
22
11
|
get groupedLeaves() {
|
|
23
12
|
return __classPrivateFieldGet(this, _Tree_groupedLeaves, "f");
|
|
24
13
|
}
|
|
25
14
|
grow(toggleableKey) {
|
|
26
|
-
|
|
15
|
+
// create leaf, leaf will auto trigger tree collect callback
|
|
16
|
+
new Leaf({
|
|
27
17
|
key: toggleableKey.key,
|
|
28
18
|
parent: null,
|
|
29
19
|
belongTo: this
|
|
30
|
-
}).grow(toggleableKey.children)
|
|
20
|
+
}).grow(toggleableKey.children);
|
|
31
21
|
return this;
|
|
32
22
|
}
|
|
33
23
|
collect(leaf) {
|
|
34
24
|
__classPrivateFieldGet(this, _Tree_groupedLeaves, "f").has(leaf.key)
|
|
35
25
|
? __classPrivateFieldGet(this, _Tree_groupedLeaves, "f").set(leaf.key, new Set([leaf]))
|
|
36
26
|
: __classPrivateFieldGet(this, _Tree_groupedLeaves, "f").get(leaf.key).add(leaf);
|
|
37
|
-
// if default toggled, add leaf to toggled leaves
|
|
38
|
-
__classPrivateFieldGet(this, _Tree_isDefaultToggled, "f") && this.toggledLeaves.add(leaf);
|
|
39
27
|
}
|
|
40
|
-
toggle(key) {
|
|
41
|
-
const
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
leaves.forEach((leaf) => {
|
|
45
|
-
const _isToggled = this.toggledLeaves.has(leaf);
|
|
46
|
-
leaf.toggleBy(!_isToggled);
|
|
47
|
-
});
|
|
28
|
+
toggle(key, toggledKeys) {
|
|
29
|
+
const hasToggled = toggledKeys.has(key);
|
|
30
|
+
const _isToggled = !hasToggled;
|
|
31
|
+
return this.toggleBy(key, _isToggled, toggledKeys);
|
|
48
32
|
}
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
33
|
+
toggleBy(key, isToggled, toggledKeys) {
|
|
34
|
+
var _a;
|
|
35
|
+
return Array.from((_a = __classPrivateFieldGet(this, _Tree_groupedLeaves, "f").get(key)) !== null && _a !== void 0 ? _a : []).reduce((prev, leaf) => {
|
|
36
|
+
// deep fall, add or remove child key
|
|
37
|
+
const fell = leaf.fall(isToggled, prev);
|
|
38
|
+
// deep rise, add or remove parent key
|
|
39
|
+
const rised = leaf.rise(fell);
|
|
40
|
+
return rised;
|
|
41
|
+
}, new Set(toggledKeys));
|
|
57
42
|
}
|
|
58
43
|
}
|
|
59
|
-
|
|
44
|
+
_Tree_groupedLeaves = new WeakMap();
|
|
60
45
|
class Leaf {
|
|
61
46
|
constructor(props) {
|
|
62
47
|
_Leaf_key.set(this, void 0);
|
|
63
48
|
_Leaf_belongTo.set(this, void 0);
|
|
64
49
|
_Leaf_parent.set(this, void 0);
|
|
65
50
|
_Leaf_children.set(this, void 0);
|
|
66
|
-
_Leaf_toggledChildren.set(this, void 0);
|
|
67
51
|
__classPrivateFieldSet(this, _Leaf_key, props.key, "f");
|
|
68
52
|
__classPrivateFieldSet(this, _Leaf_parent, props.parent, "f");
|
|
69
53
|
__classPrivateFieldSet(this, _Leaf_belongTo, props.belongTo, "f");
|
|
70
|
-
__classPrivateFieldSet(this, _Leaf_children,
|
|
71
|
-
__classPrivateFieldSet(this, _Leaf_toggledChildren, new Set(), "f");
|
|
54
|
+
__classPrivateFieldSet(this, _Leaf_children, [], "f");
|
|
72
55
|
// when leaf has grew, let tree collect leaf
|
|
73
56
|
__classPrivateFieldGet(this, _Leaf_belongTo, "f").collect(this);
|
|
74
57
|
}
|
|
75
58
|
get key() {
|
|
76
59
|
return __classPrivateFieldGet(this, _Leaf_key, "f");
|
|
77
60
|
}
|
|
78
|
-
toggleBy(isToggled, isPrevent = false) {
|
|
79
|
-
var _a;
|
|
80
|
-
if (isToggled) {
|
|
81
|
-
__classPrivateFieldGet(this, _Leaf_belongTo, "f").toggledLeaves.add(this);
|
|
82
|
-
}
|
|
83
|
-
else {
|
|
84
|
-
__classPrivateFieldGet(this, _Leaf_belongTo, "f").toggledLeaves.delete(this);
|
|
85
|
-
}
|
|
86
|
-
if (isPrevent)
|
|
87
|
-
return;
|
|
88
|
-
// fall to every child
|
|
89
|
-
Array.from(__classPrivateFieldGet(this, _Leaf_children, "f").values()).forEach((child) => {
|
|
90
|
-
child.fall(isToggled);
|
|
91
|
-
});
|
|
92
|
-
// rise to parent
|
|
93
|
-
(_a = __classPrivateFieldGet(this, _Leaf_parent, "f")) === null || _a === void 0 ? void 0 : _a.rise(this, isToggled);
|
|
94
|
-
}
|
|
95
61
|
grow(toggleableKeys = []) {
|
|
96
62
|
if (toggleableKeys.length > 0) {
|
|
97
63
|
toggleableKeys.forEach((_toggleableKey) => {
|
|
@@ -100,71 +66,83 @@ class Leaf {
|
|
|
100
66
|
parent: this,
|
|
101
67
|
belongTo: __classPrivateFieldGet(this, _Leaf_belongTo, "f")
|
|
102
68
|
}).grow(_toggleableKey.children);
|
|
103
|
-
__classPrivateFieldGet(this, _Leaf_children, "f").
|
|
69
|
+
__classPrivateFieldGet(this, _Leaf_children, "f").push(child);
|
|
104
70
|
});
|
|
105
71
|
}
|
|
106
72
|
return this;
|
|
107
73
|
}
|
|
108
|
-
rise(
|
|
109
|
-
|
|
74
|
+
rise(toggledKeys) {
|
|
75
|
+
// if current key is toggled or children is all toggled
|
|
76
|
+
// just add current key into toggled keys
|
|
77
|
+
// else remove current key
|
|
78
|
+
const isToggled = toggledKeys.has(__classPrivateFieldGet(this, _Leaf_key, "f")) || __classPrivateFieldGet(this, _Leaf_children, "f").every((child) => toggledKeys.has(child.key));
|
|
79
|
+
const rised = new Set(toggledKeys);
|
|
110
80
|
if (isToggled) {
|
|
111
|
-
__classPrivateFieldGet(this,
|
|
81
|
+
rised.add(__classPrivateFieldGet(this, _Leaf_key, "f"));
|
|
112
82
|
}
|
|
113
83
|
else {
|
|
114
|
-
__classPrivateFieldGet(this,
|
|
84
|
+
rised.delete(__classPrivateFieldGet(this, _Leaf_key, "f"));
|
|
85
|
+
}
|
|
86
|
+
if (__classPrivateFieldGet(this, _Leaf_parent, "f")) {
|
|
87
|
+
return __classPrivateFieldGet(this, _Leaf_parent, "f").rise(rised);
|
|
115
88
|
}
|
|
116
|
-
|
|
117
|
-
const _isToggled = __classPrivateFieldGet(this, _Leaf_children, "f").size === __classPrivateFieldGet(this, _Leaf_toggledChildren, "f").size;
|
|
118
|
-
const _hasToggled = !!__classPrivateFieldGet(this, _Leaf_belongTo, "f").toggledLeaves.has(this);
|
|
119
|
-
if (_hasToggled === _isToggled)
|
|
120
|
-
return;
|
|
121
|
-
this.toggleBy(_isToggled, true);
|
|
122
|
-
// rise to parent
|
|
123
|
-
(_a = __classPrivateFieldGet(this, _Leaf_parent, "f")) === null || _a === void 0 ? void 0 : _a.rise(this, _isToggled);
|
|
89
|
+
return rised;
|
|
124
90
|
}
|
|
125
|
-
fall(isToggled) {
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
91
|
+
fall(isToggled, toggledKeys) {
|
|
92
|
+
return __classPrivateFieldGet(this, _Leaf_children, "f").reduce((prev, leaf) => {
|
|
93
|
+
// deep loop, remove or add key
|
|
94
|
+
const fell = leaf.fall(isToggled, prev);
|
|
95
|
+
// toggle true, add key
|
|
96
|
+
// toggle false, remove key
|
|
97
|
+
if (isToggled) {
|
|
98
|
+
fell.add(__classPrivateFieldGet(this, _Leaf_key, "f"));
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
fell.delete(__classPrivateFieldGet(this, _Leaf_key, "f"));
|
|
102
|
+
}
|
|
103
|
+
return fell;
|
|
104
|
+
}, new Set(toggledKeys));
|
|
135
105
|
}
|
|
136
106
|
}
|
|
137
|
-
_Leaf_key = new WeakMap(), _Leaf_belongTo = new WeakMap(), _Leaf_parent = new WeakMap(), _Leaf_children = new WeakMap()
|
|
107
|
+
_Leaf_key = new WeakMap(), _Leaf_belongTo = new WeakMap(), _Leaf_parent = new WeakMap(), _Leaf_children = new WeakMap();
|
|
138
108
|
/**
|
|
139
109
|
* @description
|
|
140
110
|
* toggle able
|
|
141
111
|
*/
|
|
142
|
-
const useToggleable = (toggleableKeys,
|
|
143
|
-
|
|
144
|
-
const _isDefaultToggled = useRef(!!options.isDefaultToggled);
|
|
112
|
+
const useToggleable = (toggleableKeys, _a = {}) => {
|
|
113
|
+
var { onToggle } = _a, options = __rest(_a, ["onToggle"]);
|
|
145
114
|
/// re-create tree when toggleable keys changed
|
|
146
115
|
const tree = useMemo(() => {
|
|
147
|
-
return toggleableKeys.reduce((_tree, toggleable) =>
|
|
148
|
-
|
|
149
|
-
}));
|
|
116
|
+
return toggleableKeys.reduce((_tree, toggleable) => {
|
|
117
|
+
return _tree.grow(toggleable);
|
|
118
|
+
}, new Tree());
|
|
150
119
|
}, [toggleableKeys]);
|
|
151
|
-
/// toggled keys
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
return
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
120
|
+
/// use controlled state to record toggled keys
|
|
121
|
+
const [_toggledKeys, _setToggledKeys] = useControlledState(options.toggledKeys, {
|
|
122
|
+
defaultState: () => {
|
|
123
|
+
return options.isDefaultToggled
|
|
124
|
+
? Array.from(Array.from(tree.groupedLeaves.values()).reduce((prev, leaves) => {
|
|
125
|
+
leaves.forEach((leaf) => prev.add(leaf.key));
|
|
126
|
+
return prev;
|
|
127
|
+
}, new Set()))
|
|
128
|
+
: [];
|
|
129
|
+
}
|
|
130
|
+
});
|
|
131
|
+
/// use set for toggled keys to make it read-only
|
|
132
|
+
const readableToggledKeys = useMemo(() => new Set(_toggledKeys), [_toggledKeys]);
|
|
161
133
|
/// check current key is toggled
|
|
162
|
-
const isToggled = useCallback((key) =>
|
|
134
|
+
const isToggled = useCallback((key) => !readableToggledKeys || readableToggledKeys.has(key), [readableToggledKeys]);
|
|
163
135
|
/// toggle one key
|
|
164
|
-
const toggle = useCallback((key) =>
|
|
136
|
+
const toggle = useCallback((key) => {
|
|
137
|
+
// get new toggled keys by toggle current key
|
|
138
|
+
const _toggledKeys = Array.from(tree.toggle(key, readableToggledKeys));
|
|
139
|
+
// set state
|
|
140
|
+
_setToggledKeys(_toggledKeys);
|
|
141
|
+
// trigger on toggle callback
|
|
142
|
+
onToggle === null || onToggle === void 0 ? void 0 : onToggle(_toggledKeys);
|
|
143
|
+
}, [tree, readableToggledKeys, _setToggledKeys, onToggle]);
|
|
165
144
|
return {
|
|
166
|
-
|
|
167
|
-
toggledKeys: _toggledKeys,
|
|
145
|
+
toggledKeys: readableToggledKeys,
|
|
168
146
|
isToggled,
|
|
169
147
|
toggle
|
|
170
148
|
};
|
package/dist/index.d.ts
CHANGED
|
@@ -32,3 +32,10 @@ export { isMobile } from './is/is-mobile';
|
|
|
32
32
|
export { isOverflow } from './is/is-overflow';
|
|
33
33
|
export { isStyleElement } from './is/is-style-element';
|
|
34
34
|
export { isFunction } from './is/is-function';
|
|
35
|
+
/**
|
|
36
|
+
* @description
|
|
37
|
+
* utils
|
|
38
|
+
*/
|
|
39
|
+
export { type Nullable } from './utils/null-able';
|
|
40
|
+
export { type Partialable } from './utils/partial-able';
|
|
41
|
+
export { unique, uniqueBy } from './utils/unique';
|
package/dist/index.js
CHANGED
|
@@ -1,3 +1,11 @@
|
|
|
1
|
+
function __rest(s, e) {
|
|
2
|
+
var t = {};
|
|
3
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];
|
|
4
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
5
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];
|
|
6
|
+
}
|
|
7
|
+
return t;
|
|
8
|
+
}
|
|
1
9
|
function __classPrivateFieldGet(receiver, state, kind, f) {
|
|
2
10
|
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
3
11
|
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
@@ -14,4 +22,4 @@ typeof SuppressedError === "function" ? SuppressedError : function (error, suppr
|
|
|
14
22
|
return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
|
|
15
23
|
};
|
|
16
24
|
|
|
17
|
-
export { __classPrivateFieldGet, __classPrivateFieldSet };
|
|
25
|
+
export { __classPrivateFieldGet, __classPrivateFieldSet, __rest };
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description
|
|
3
|
+
* unique
|
|
4
|
+
*/
|
|
5
|
+
const unique = (value) => {
|
|
6
|
+
return Array.from(new Set(value));
|
|
7
|
+
};
|
|
8
|
+
/**
|
|
9
|
+
* @description
|
|
10
|
+
* unique by
|
|
11
|
+
*/
|
|
12
|
+
const uniqueBy = (value, callback) => {
|
|
13
|
+
return Array.from(new Set(Array.from(value).map(callback)));
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
export { unique, uniqueBy };
|
package/package.json
CHANGED
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aiszlab/relax",
|
|
3
|
-
"version": "1.2.11-beta.
|
|
3
|
+
"version": "1.2.11-beta.6",
|
|
4
4
|
"description": "react utils collection",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": {
|
|
7
7
|
".": "./dist/index.js",
|
|
8
|
-
"./dom": "./dist/dom/index.js"
|
|
9
|
-
"./types": "./dist/types/index.d.ts"
|
|
8
|
+
"./dom": "./dist/dom/index.js"
|
|
10
9
|
},
|
|
11
10
|
"scripts": {
|
|
12
11
|
"dev": "rollup -c -w",
|
package/dist/types/index.d.ts
DELETED
package/dist/types/index.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
|
|
File without changes
|
|
File without changes
|