@legendapp/state 0.13.2 → 0.14.0-next.0
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/index.js +45 -37
- package/index.js.map +1 -1
- package/index.mjs +45 -37
- package/index.mjs.map +1 -1
- package/package.json +1 -1
- package/react-native.js +37 -28
- package/react-native.js.map +1 -1
- package/react-native.mjs +38 -29
- package/react-native.mjs.map +1 -1
- package/react.d.ts +1 -1
- package/react.js +63 -35
- package/react.js.map +1 -1
- package/react.mjs +63 -36
- package/react.mjs.map +1 -1
- package/src/observableInterfaces.d.ts +1 -4
- package/src/react/{Isolate.d.ts → controlFlow.d.ts} +14 -0
package/package.json
CHANGED
package/react-native.js
CHANGED
|
@@ -13,40 +13,23 @@ function useForceRender() {
|
|
|
13
13
|
|
|
14
14
|
function useObserver(fn, updateFn) {
|
|
15
15
|
var _a;
|
|
16
|
-
const
|
|
16
|
+
const refListeners = react.useRef([]);
|
|
17
|
+
const listeners = refListeners.current;
|
|
18
|
+
// Cleanup old listeners before tracking
|
|
19
|
+
if (listeners.length > 0) {
|
|
20
|
+
cleanup(listeners);
|
|
21
|
+
}
|
|
17
22
|
// Cache previous tracking nodes since this might be nested from another observing component
|
|
18
23
|
const trackingPrev = state.tracking.nodes;
|
|
19
24
|
// Reset tracking nodes
|
|
20
25
|
state.tracking.nodes = new Map();
|
|
21
|
-
let nodes;
|
|
22
|
-
// Create the listener effect before calling fn so that it gets called before
|
|
23
|
-
// effects in the component
|
|
24
|
-
const effect = () => {
|
|
25
|
-
// If we have pre-mount listeners, clear them off
|
|
26
|
-
if (refFirstListeners.current) {
|
|
27
|
-
refFirstListeners.current();
|
|
28
|
-
refFirstListeners.current = undefined;
|
|
29
|
-
}
|
|
30
|
-
const listeners = [];
|
|
31
|
-
// Listen to tracked nodes
|
|
32
|
-
for (let tracked of nodes) {
|
|
33
|
-
const { node, shallow } = tracked[1];
|
|
34
|
-
listeners.push(shallow ? state.onChangeShallow(node, updateFn) : state.onChange(node, updateFn));
|
|
35
|
-
}
|
|
36
|
-
// Cleanup listeners
|
|
37
|
-
return () => {
|
|
38
|
-
for (let i = 0; i < listeners.length; i++) {
|
|
39
|
-
listeners[i]();
|
|
40
|
-
}
|
|
41
|
-
};
|
|
42
|
-
};
|
|
43
|
-
react.useEffect(effect);
|
|
44
26
|
// Calling the function fills up the tracking nodes
|
|
45
27
|
const ret = fn();
|
|
46
|
-
nodes = state.tracking.nodes;
|
|
47
|
-
//
|
|
48
|
-
|
|
49
|
-
|
|
28
|
+
const nodes = state.tracking.nodes;
|
|
29
|
+
// Listen to tracked nodes
|
|
30
|
+
for (let tracked of nodes) {
|
|
31
|
+
const { node, shallow } = tracked[1];
|
|
32
|
+
listeners.push(state.onChange(node, updateFn, false, shallow));
|
|
50
33
|
}
|
|
51
34
|
// Do tracing if it was requested
|
|
52
35
|
if (process.env.NODE_ENV === 'development') {
|
|
@@ -57,8 +40,34 @@ function useObserver(fn, updateFn) {
|
|
|
57
40
|
}
|
|
58
41
|
// Restore previous tracking nodes
|
|
59
42
|
state.tracking.nodes = trackingPrev;
|
|
43
|
+
// Cleanup listeners on unmounts
|
|
44
|
+
react.useEffect(() => {
|
|
45
|
+
let listeners = refListeners.current;
|
|
46
|
+
// Workaround for React 18's double calling useEffect. If this is the
|
|
47
|
+
// second useEffect, set up listeners again.
|
|
48
|
+
if (process.env.NODE_ENV === 'development' && refListeners.current === undefined) {
|
|
49
|
+
listeners = refListeners.current = [];
|
|
50
|
+
// Re-listen to tracked nodes
|
|
51
|
+
for (let tracked of nodes) {
|
|
52
|
+
const { node, shallow } = tracked[1];
|
|
53
|
+
listeners.push(state.onChange(node, updateFn, false, shallow));
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return () => {
|
|
57
|
+
cleanup(listeners);
|
|
58
|
+
// Set it to undefined so it would trigger the above React 18 workaround
|
|
59
|
+
refListeners.current = undefined;
|
|
60
|
+
};
|
|
61
|
+
}, []);
|
|
60
62
|
return ret;
|
|
61
63
|
}
|
|
64
|
+
function cleanup(listeners) {
|
|
65
|
+
// Cleanup listeners
|
|
66
|
+
for (let i = 0; i < listeners.length; i++) {
|
|
67
|
+
listeners[i]();
|
|
68
|
+
}
|
|
69
|
+
listeners.length = 0;
|
|
70
|
+
}
|
|
62
71
|
|
|
63
72
|
const hasSymbol = typeof Symbol === 'function' && Symbol.for;
|
|
64
73
|
// Extracting the forwardRef inspired by https://github.com/mobxjs/mobx/blob/main/packages/mobx-react-lite/src/observer.ts
|
package/react-native.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"react-native.js","sources":["../../src/react/useForceRender.ts","../../src/react/useObserver.ts","../../src/react/observer.ts","../../src/react-native/components.tsx"],"sourcesContent":[null,null,null,null],"names":["useReducer","useCallback","useRef","tracking","
|
|
1
|
+
{"version":3,"file":"react-native.js","sources":["../../src/react/useForceRender.ts","../../src/react/useObserver.ts","../../src/react/observer.ts","../../src/react-native/components.tsx"],"sourcesContent":[null,null,null,null],"names":["useReducer","useCallback","useRef","tracking","onChange","useEffect","forwardRef","memo","isFunction","createElement","LS","RNTextInput","RNSwitch"],"mappings":"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"}
|
package/react-native.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { tracking,
|
|
1
|
+
import { tracking, onChange, isFunction } from '@legendapp/state';
|
|
2
2
|
import { useReducer, useCallback, useRef, useEffect, forwardRef, memo, createElement } from 'react';
|
|
3
3
|
import { TextInput, Switch } from 'react-native';
|
|
4
4
|
|
|
@@ -9,40 +9,23 @@ function useForceRender() {
|
|
|
9
9
|
|
|
10
10
|
function useObserver(fn, updateFn) {
|
|
11
11
|
var _a;
|
|
12
|
-
const
|
|
12
|
+
const refListeners = useRef([]);
|
|
13
|
+
const listeners = refListeners.current;
|
|
14
|
+
// Cleanup old listeners before tracking
|
|
15
|
+
if (listeners.length > 0) {
|
|
16
|
+
cleanup(listeners);
|
|
17
|
+
}
|
|
13
18
|
// Cache previous tracking nodes since this might be nested from another observing component
|
|
14
19
|
const trackingPrev = tracking.nodes;
|
|
15
20
|
// Reset tracking nodes
|
|
16
21
|
tracking.nodes = new Map();
|
|
17
|
-
let nodes;
|
|
18
|
-
// Create the listener effect before calling fn so that it gets called before
|
|
19
|
-
// effects in the component
|
|
20
|
-
const effect = () => {
|
|
21
|
-
// If we have pre-mount listeners, clear them off
|
|
22
|
-
if (refFirstListeners.current) {
|
|
23
|
-
refFirstListeners.current();
|
|
24
|
-
refFirstListeners.current = undefined;
|
|
25
|
-
}
|
|
26
|
-
const listeners = [];
|
|
27
|
-
// Listen to tracked nodes
|
|
28
|
-
for (let tracked of nodes) {
|
|
29
|
-
const { node, shallow } = tracked[1];
|
|
30
|
-
listeners.push(shallow ? onChangeShallow(node, updateFn) : onChange(node, updateFn));
|
|
31
|
-
}
|
|
32
|
-
// Cleanup listeners
|
|
33
|
-
return () => {
|
|
34
|
-
for (let i = 0; i < listeners.length; i++) {
|
|
35
|
-
listeners[i]();
|
|
36
|
-
}
|
|
37
|
-
};
|
|
38
|
-
};
|
|
39
|
-
useEffect(effect);
|
|
40
22
|
// Calling the function fills up the tracking nodes
|
|
41
23
|
const ret = fn();
|
|
42
|
-
nodes = tracking.nodes;
|
|
43
|
-
//
|
|
44
|
-
|
|
45
|
-
|
|
24
|
+
const nodes = tracking.nodes;
|
|
25
|
+
// Listen to tracked nodes
|
|
26
|
+
for (let tracked of nodes) {
|
|
27
|
+
const { node, shallow } = tracked[1];
|
|
28
|
+
listeners.push(onChange(node, updateFn, false, shallow));
|
|
46
29
|
}
|
|
47
30
|
// Do tracing if it was requested
|
|
48
31
|
if (process.env.NODE_ENV === 'development') {
|
|
@@ -53,8 +36,34 @@ function useObserver(fn, updateFn) {
|
|
|
53
36
|
}
|
|
54
37
|
// Restore previous tracking nodes
|
|
55
38
|
tracking.nodes = trackingPrev;
|
|
39
|
+
// Cleanup listeners on unmounts
|
|
40
|
+
useEffect(() => {
|
|
41
|
+
let listeners = refListeners.current;
|
|
42
|
+
// Workaround for React 18's double calling useEffect. If this is the
|
|
43
|
+
// second useEffect, set up listeners again.
|
|
44
|
+
if (process.env.NODE_ENV === 'development' && refListeners.current === undefined) {
|
|
45
|
+
listeners = refListeners.current = [];
|
|
46
|
+
// Re-listen to tracked nodes
|
|
47
|
+
for (let tracked of nodes) {
|
|
48
|
+
const { node, shallow } = tracked[1];
|
|
49
|
+
listeners.push(onChange(node, updateFn, false, shallow));
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
return () => {
|
|
53
|
+
cleanup(listeners);
|
|
54
|
+
// Set it to undefined so it would trigger the above React 18 workaround
|
|
55
|
+
refListeners.current = undefined;
|
|
56
|
+
};
|
|
57
|
+
}, []);
|
|
56
58
|
return ret;
|
|
57
59
|
}
|
|
60
|
+
function cleanup(listeners) {
|
|
61
|
+
// Cleanup listeners
|
|
62
|
+
for (let i = 0; i < listeners.length; i++) {
|
|
63
|
+
listeners[i]();
|
|
64
|
+
}
|
|
65
|
+
listeners.length = 0;
|
|
66
|
+
}
|
|
58
67
|
|
|
59
68
|
const hasSymbol = typeof Symbol === 'function' && Symbol.for;
|
|
60
69
|
// Extracting the forwardRef inspired by https://github.com/mobxjs/mobx/blob/main/packages/mobx-react-lite/src/observer.ts
|
package/react-native.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"react-native.mjs","sources":["../../src/react/useForceRender.ts","../../src/react/useObserver.ts","../../src/react/observer.ts","../../src/react-native/components.tsx"],"sourcesContent":[null,null,null,null],"names":["RNTextInput","RNSwitch"],"mappings":";;;;SAEgB,cAAc,GAAA;AAC1B,IAAA,MAAM,GAAG,WAAW,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IACpD,OAAO,WAAW,CAAC,MAAM,WAAW,EAAE,EAAE,EAAE,CAAC,CAAC;AAChD;;ACFgB,SAAA,WAAW,CAAI,EAAW,EAAE,QAAoB,EAAA;;AAC5D,IAAA,MAAM,
|
|
1
|
+
{"version":3,"file":"react-native.mjs","sources":["../../src/react/useForceRender.ts","../../src/react/useObserver.ts","../../src/react/observer.ts","../../src/react-native/components.tsx"],"sourcesContent":[null,null,null,null],"names":["RNTextInput","RNSwitch"],"mappings":";;;;SAEgB,cAAc,GAAA;AAC1B,IAAA,MAAM,GAAG,WAAW,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IACpD,OAAO,WAAW,CAAC,MAAM,WAAW,EAAE,EAAE,EAAE,CAAC,CAAC;AAChD;;ACFgB,SAAA,WAAW,CAAI,EAAW,EAAE,QAAoB,EAAA;;AAC5D,IAAA,MAAM,YAAY,GAAG,MAAM,CAA8B,EAAE,CAAC,CAAC;AAC7D,IAAA,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC;;AAGvC,IAAA,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;QACtB,OAAO,CAAC,SAAS,CAAC,CAAC;AACtB,KAAA;;AAGD,IAAA,MAAM,YAAY,GAAG,QAAQ,CAAC,KAAK,CAAC;;AAGpC,IAAA,QAAQ,CAAC,KAAK,GAAG,IAAI,GAAG,EAAE,CAAC;;AAG3B,IAAA,MAAM,GAAG,GAAG,EAAE,EAAE,CAAC;AAEjB,IAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;;AAG7B,IAAA,KAAK,IAAI,OAAO,IAAI,KAAK,EAAE;QACvB,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;AAErC,QAAA,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;AAC5D,KAAA;;AAGD,IAAA,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,aAAa,EAAE;AACxC,QAAA,CAAA,EAAA,GAAA,QAAQ,CAAC,SAAS,MAAG,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,QAAA,EAAA,KAAK,CAAC,CAAC;QAC5B,IAAI,QAAQ,CAAC,OAAO,EAAE;AAClB,YAAA,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;AACzC,SAAA;AACJ,KAAA;;AAGD,IAAA,QAAQ,CAAC,KAAK,GAAG,YAAY,CAAC;;IAG9B,SAAS,CAAC,MAAK;AACX,QAAA,IAAI,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC;;;AAGrC,QAAA,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,aAAa,IAAI,YAAY,CAAC,OAAO,KAAK,SAAS,EAAE;AAC9E,YAAA,SAAS,GAAG,YAAY,CAAC,OAAO,GAAG,EAAE,CAAC;;AAEtC,YAAA,KAAK,IAAI,OAAO,IAAI,KAAK,EAAE;gBACvB,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;AAErC,gBAAA,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;AAC5D,aAAA;AACJ,SAAA;AACD,QAAA,OAAO,MAAK;YACR,OAAO,CAAC,SAAS,CAAC,CAAC;;AAEnB,YAAA,YAAY,CAAC,OAAO,GAAG,SAAS,CAAC;AACrC,SAAC,CAAC;KACL,EAAE,EAAE,CAAC,CAAC;AAEP,IAAA,OAAO,GAAG,CAAC;AACf,CAAC;AAED,SAAS,OAAO,CAAC,SAAsC,EAAA;;AAEnD,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACvC,QAAA,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;AAClB,KAAA;AACD,IAAA,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;AACzB;;ACnEA,MAAM,SAAS,GAAG,OAAO,MAAM,KAAK,UAAU,IAAI,MAAM,CAAC,GAAG,CAAC;AAE7D;AACA,MAAM,qBAAqB,GAAG,SAAS;AACnC,MAAE,MAAM,CAAC,GAAG,CAAC,mBAAmB,CAAC;AACjC,MAAE,OAAO,UAAU,KAAK,UAAU,IAAI,UAAU,CAAC,CAAC,KAAU,KAAK,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC;AAEvE,SAAA,QAAQ,CACpB,SAAY,EACZ,aAA2G,EAAA;;AAG3G,IAAA,IAAI,aAAsB,CAAC;IAC3B,IAAI,qBAAqB,IAAI,SAAS,CAAC,UAAU,CAAC,KAAK,qBAAqB,EAAE;QAC1E,aAAa,GAAG,IAAI,CAAC;AACrB,QAAA,SAAS,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AAChC,QAAA,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,aAAa,IAAI,OAAO,SAAS,KAAK,UAAU,EAAE;AAC3E,YAAA,MAAM,IAAI,KAAK,CAAC,CAAA,mEAAA,CAAqE,CAAC,CAAC;AAC1F,SAAA;AACJ,KAAA;IAED,MAAM,aAAa,GAAG,SAAS,CAAC,WAAW,IAAI,SAAS,CAAC,IAAI,CAAC;;AAG9D,IAAA,IAAI,QAAQ,GAAG,UAAU,KAAK,EAAE,GAAG,EAAA;AAC/B,QAAA,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;;AAGrC,QAAA,OAAO,WAAW,CAAC,MAAM,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,WAAW,CAAC,CAAC;AACjE,KAAC,CAAC;IAEF,IAAI,aAAa,KAAK,EAAE,EAAE;AACrB,QAAA,QAAe,CAAC,WAAW,GAAG,aAAa,CAAC;AAChD,KAAA;;AAGD,IAAA,IAAI,aAAa,EAAE;AACf,QAAA,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;AACnC,KAAA;AAED,IAAA,OAAO,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAiB,CAAC;AACzD;;ACvBa,MAAA,MAAM,GAAG,UAKpB,SAAmB,EAAE,QAA4B,EAAA;AAC/C,IAAA,OAAO,QAAQ,CACX,UAAU,CAAC,SAAS,KAAK,CACrB,EAAE,IAAI,EAAE,GAAG,KAAK,EAAwC,EACxD,GAAwB,EAAA;AAExB,QAAA,IAAI,IAAI,EAAE;AACN,YAAA,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC;;YAGlC,KAAK,CAAC,QAAQ,GAAG,WAAW,CACxB,CAAC,CAAC,KAAI;gBACF,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AACtB,gBAAA,QAAQ,aAAR,QAAQ,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAR,QAAQ,CAAG,CAAC,CAAC,CAAC;AAClB,aAAC,EACD,CAAC,QAAQ,CAAC,CACb,CAAC;;AAGF,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;;AAGzB,YAAA,IAAI,UAAU,CAAC,KAAK,CAAC,EAAE;AACnB,gBAAA,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;AAC9B,aAAA;AACJ,SAAA;AAED,QAAA,OAAO,aAAa,CAAC,SAAgB,EAAE,GAAG,GAAG,EAAE,GAAG,KAAK,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC,CAAC;AAC5E,KAAC,CAAC;;KAE4G,CAAC;AACvH,EAAE;AAEI,IAAW,GAShB;AATD,CAAA,UAAiB,EAAE,EAAA;AACF,IAAA,EAAA,CAAA,SAAS,GAAG,MAAM,CAC3BA,SAAW,EACX,CAAC,CAAiD,KAAK,CAAC,CAAC,WAAW,CAAC,IAAI,CAC5E,CAAC;AACW,IAAA,EAAA,CAAA,MAAM,GAAG,MAAM,CACxBC,MAAQ,EACR,CAAC,CAAoB,KAAK,CAAC,CAAC,KAAK,CACpC,CAAC;AACN,CAAC,EATgB,EAAE,KAAF,EAAE,GASlB,EAAA,CAAA,CAAA;;;;"}
|
package/react.d.ts
CHANGED
package/react.js
CHANGED
|
@@ -12,40 +12,23 @@ function useForceRender() {
|
|
|
12
12
|
|
|
13
13
|
function useObserver(fn, updateFn) {
|
|
14
14
|
var _a;
|
|
15
|
-
const
|
|
15
|
+
const refListeners = react.useRef([]);
|
|
16
|
+
const listeners = refListeners.current;
|
|
17
|
+
// Cleanup old listeners before tracking
|
|
18
|
+
if (listeners.length > 0) {
|
|
19
|
+
cleanup(listeners);
|
|
20
|
+
}
|
|
16
21
|
// Cache previous tracking nodes since this might be nested from another observing component
|
|
17
22
|
const trackingPrev = state.tracking.nodes;
|
|
18
23
|
// Reset tracking nodes
|
|
19
24
|
state.tracking.nodes = new Map();
|
|
20
|
-
let nodes;
|
|
21
|
-
// Create the listener effect before calling fn so that it gets called before
|
|
22
|
-
// effects in the component
|
|
23
|
-
const effect = () => {
|
|
24
|
-
// If we have pre-mount listeners, clear them off
|
|
25
|
-
if (refFirstListeners.current) {
|
|
26
|
-
refFirstListeners.current();
|
|
27
|
-
refFirstListeners.current = undefined;
|
|
28
|
-
}
|
|
29
|
-
const listeners = [];
|
|
30
|
-
// Listen to tracked nodes
|
|
31
|
-
for (let tracked of nodes) {
|
|
32
|
-
const { node, shallow } = tracked[1];
|
|
33
|
-
listeners.push(shallow ? state.onChangeShallow(node, updateFn) : state.onChange(node, updateFn));
|
|
34
|
-
}
|
|
35
|
-
// Cleanup listeners
|
|
36
|
-
return () => {
|
|
37
|
-
for (let i = 0; i < listeners.length; i++) {
|
|
38
|
-
listeners[i]();
|
|
39
|
-
}
|
|
40
|
-
};
|
|
41
|
-
};
|
|
42
|
-
react.useEffect(effect);
|
|
43
25
|
// Calling the function fills up the tracking nodes
|
|
44
26
|
const ret = fn();
|
|
45
|
-
nodes = state.tracking.nodes;
|
|
46
|
-
//
|
|
47
|
-
|
|
48
|
-
|
|
27
|
+
const nodes = state.tracking.nodes;
|
|
28
|
+
// Listen to tracked nodes
|
|
29
|
+
for (let tracked of nodes) {
|
|
30
|
+
const { node, shallow } = tracked[1];
|
|
31
|
+
listeners.push(state.onChange(node, updateFn, false, shallow));
|
|
49
32
|
}
|
|
50
33
|
// Do tracing if it was requested
|
|
51
34
|
if (process.env.NODE_ENV === 'development') {
|
|
@@ -56,8 +39,34 @@ function useObserver(fn, updateFn) {
|
|
|
56
39
|
}
|
|
57
40
|
// Restore previous tracking nodes
|
|
58
41
|
state.tracking.nodes = trackingPrev;
|
|
42
|
+
// Cleanup listeners on unmounts
|
|
43
|
+
react.useEffect(() => {
|
|
44
|
+
let listeners = refListeners.current;
|
|
45
|
+
// Workaround for React 18's double calling useEffect. If this is the
|
|
46
|
+
// second useEffect, set up listeners again.
|
|
47
|
+
if (process.env.NODE_ENV === 'development' && refListeners.current === undefined) {
|
|
48
|
+
listeners = refListeners.current = [];
|
|
49
|
+
// Re-listen to tracked nodes
|
|
50
|
+
for (let tracked of nodes) {
|
|
51
|
+
const { node, shallow } = tracked[1];
|
|
52
|
+
listeners.push(state.onChange(node, updateFn, false, shallow));
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return () => {
|
|
56
|
+
cleanup(listeners);
|
|
57
|
+
// Set it to undefined so it would trigger the above React 18 workaround
|
|
58
|
+
refListeners.current = undefined;
|
|
59
|
+
};
|
|
60
|
+
}, []);
|
|
59
61
|
return ret;
|
|
60
62
|
}
|
|
63
|
+
function cleanup(listeners) {
|
|
64
|
+
// Cleanup listeners
|
|
65
|
+
for (let i = 0; i < listeners.length; i++) {
|
|
66
|
+
listeners[i]();
|
|
67
|
+
}
|
|
68
|
+
listeners.length = 0;
|
|
69
|
+
}
|
|
61
70
|
|
|
62
71
|
const hasSymbol = typeof Symbol === 'function' && Symbol.for;
|
|
63
72
|
// Extracting the forwardRef inspired by https://github.com/mobxjs/mobx/blob/main/packages/mobx-react-lite/src/observer.ts
|
|
@@ -122,12 +131,6 @@ exports.LS = void 0;
|
|
|
122
131
|
LS.select = Binder('select');
|
|
123
132
|
})(exports.LS || (exports.LS = {}));
|
|
124
133
|
|
|
125
|
-
const symbolIsObservable = Symbol('isObservable');
|
|
126
|
-
|
|
127
|
-
function isObservable(obs) {
|
|
128
|
-
return obs && !!obs[symbolIsObservable];
|
|
129
|
-
}
|
|
130
|
-
|
|
131
134
|
const Isolate = observer(function Isolate({ children, }) {
|
|
132
135
|
return children();
|
|
133
136
|
});
|
|
@@ -136,7 +139,7 @@ const Memo = observer(function Memo({ children }) {
|
|
|
136
139
|
}, () => true);
|
|
137
140
|
const Show = observer(function Show({ if: if_, else: else_, children, memo, }) {
|
|
138
141
|
if_ = if_();
|
|
139
|
-
if (isObservable(if_)) {
|
|
142
|
+
if (state.isObservable(if_)) {
|
|
140
143
|
if_ = if_.observe(true);
|
|
141
144
|
}
|
|
142
145
|
return if_
|
|
@@ -145,6 +148,30 @@ const Show = observer(function Show({ if: if_, else: else_, children, memo, }) {
|
|
|
145
148
|
? else_()
|
|
146
149
|
: null;
|
|
147
150
|
});
|
|
151
|
+
const For = observer(function For({ each, item, children, }) {
|
|
152
|
+
if (!each)
|
|
153
|
+
return null;
|
|
154
|
+
// Get the raw value with a shallow listener so this list only re-renders
|
|
155
|
+
// when the array length changes
|
|
156
|
+
const v = each.get(state.shallow);
|
|
157
|
+
if (!v)
|
|
158
|
+
return null;
|
|
159
|
+
// Get the appropriate id field
|
|
160
|
+
const id = v.length > 0 ? (v[0].id ? 'id' : v[0]._id ? '_id' : v[0].__id ? '__id' : undefined) : undefined;
|
|
161
|
+
// The child function gets wrapped in a memoized observer component
|
|
162
|
+
if (!item && children) {
|
|
163
|
+
item = react.useMemo(() => observer(({ item }) => children(item)), []);
|
|
164
|
+
}
|
|
165
|
+
// Create the child elements
|
|
166
|
+
let out = [];
|
|
167
|
+
for (let i = 0; i < v.length; i++) {
|
|
168
|
+
if (v[i]) {
|
|
169
|
+
const key = v[i][id];
|
|
170
|
+
out.push(react.createElement(item, { key: key, item: each[i] }));
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
return out;
|
|
174
|
+
});
|
|
148
175
|
|
|
149
176
|
function useComputed(selector, deps) {
|
|
150
177
|
// Do all the computed magic inside a useMemo so we can get an initial value
|
|
@@ -179,6 +206,7 @@ function useObservable(initialValue) {
|
|
|
179
206
|
}
|
|
180
207
|
|
|
181
208
|
exports.Binder = Binder;
|
|
209
|
+
exports.For = For;
|
|
182
210
|
exports.Isolate = Isolate;
|
|
183
211
|
exports.Memo = Memo;
|
|
184
212
|
exports.Show = Show;
|
package/react.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"react.js","sources":["../../src/react/useForceRender.ts","../../src/react/useObserver.ts","../../src/react/observer.ts","../../src/react/components.tsx","../../src/
|
|
1
|
+
{"version":3,"file":"react.js","sources":["../../src/react/useForceRender.ts","../../src/react/useObserver.ts","../../src/react/observer.ts","../../src/react/components.tsx","../../src/react/controlFlow.tsx","../../src/react/useComputed.ts","../../src/react/useObservable.ts"],"sourcesContent":[null,null,null,null,null,null,null],"names":["useReducer","useCallback","useRef","tracking","onChange","useEffect","forwardRef","memo","isFunction","createElement","LS","isObservable","useMemo","shallow","useState","observable"],"mappings":"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"}
|
package/react.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { tracking,
|
|
1
|
+
import { tracking, onChange, isFunction, isObservable, shallow, observable } from '@legendapp/state';
|
|
2
2
|
import { useReducer, useCallback, useRef, useEffect, forwardRef, memo, createElement, useMemo, useState } from 'react';
|
|
3
3
|
|
|
4
4
|
function useForceRender() {
|
|
@@ -8,40 +8,23 @@ function useForceRender() {
|
|
|
8
8
|
|
|
9
9
|
function useObserver(fn, updateFn) {
|
|
10
10
|
var _a;
|
|
11
|
-
const
|
|
11
|
+
const refListeners = useRef([]);
|
|
12
|
+
const listeners = refListeners.current;
|
|
13
|
+
// Cleanup old listeners before tracking
|
|
14
|
+
if (listeners.length > 0) {
|
|
15
|
+
cleanup(listeners);
|
|
16
|
+
}
|
|
12
17
|
// Cache previous tracking nodes since this might be nested from another observing component
|
|
13
18
|
const trackingPrev = tracking.nodes;
|
|
14
19
|
// Reset tracking nodes
|
|
15
20
|
tracking.nodes = new Map();
|
|
16
|
-
let nodes;
|
|
17
|
-
// Create the listener effect before calling fn so that it gets called before
|
|
18
|
-
// effects in the component
|
|
19
|
-
const effect = () => {
|
|
20
|
-
// If we have pre-mount listeners, clear them off
|
|
21
|
-
if (refFirstListeners.current) {
|
|
22
|
-
refFirstListeners.current();
|
|
23
|
-
refFirstListeners.current = undefined;
|
|
24
|
-
}
|
|
25
|
-
const listeners = [];
|
|
26
|
-
// Listen to tracked nodes
|
|
27
|
-
for (let tracked of nodes) {
|
|
28
|
-
const { node, shallow } = tracked[1];
|
|
29
|
-
listeners.push(shallow ? onChangeShallow(node, updateFn) : onChange(node, updateFn));
|
|
30
|
-
}
|
|
31
|
-
// Cleanup listeners
|
|
32
|
-
return () => {
|
|
33
|
-
for (let i = 0; i < listeners.length; i++) {
|
|
34
|
-
listeners[i]();
|
|
35
|
-
}
|
|
36
|
-
};
|
|
37
|
-
};
|
|
38
|
-
useEffect(effect);
|
|
39
21
|
// Calling the function fills up the tracking nodes
|
|
40
22
|
const ret = fn();
|
|
41
|
-
nodes = tracking.nodes;
|
|
42
|
-
//
|
|
43
|
-
|
|
44
|
-
|
|
23
|
+
const nodes = tracking.nodes;
|
|
24
|
+
// Listen to tracked nodes
|
|
25
|
+
for (let tracked of nodes) {
|
|
26
|
+
const { node, shallow } = tracked[1];
|
|
27
|
+
listeners.push(onChange(node, updateFn, false, shallow));
|
|
45
28
|
}
|
|
46
29
|
// Do tracing if it was requested
|
|
47
30
|
if (process.env.NODE_ENV === 'development') {
|
|
@@ -52,8 +35,34 @@ function useObserver(fn, updateFn) {
|
|
|
52
35
|
}
|
|
53
36
|
// Restore previous tracking nodes
|
|
54
37
|
tracking.nodes = trackingPrev;
|
|
38
|
+
// Cleanup listeners on unmounts
|
|
39
|
+
useEffect(() => {
|
|
40
|
+
let listeners = refListeners.current;
|
|
41
|
+
// Workaround for React 18's double calling useEffect. If this is the
|
|
42
|
+
// second useEffect, set up listeners again.
|
|
43
|
+
if (process.env.NODE_ENV === 'development' && refListeners.current === undefined) {
|
|
44
|
+
listeners = refListeners.current = [];
|
|
45
|
+
// Re-listen to tracked nodes
|
|
46
|
+
for (let tracked of nodes) {
|
|
47
|
+
const { node, shallow } = tracked[1];
|
|
48
|
+
listeners.push(onChange(node, updateFn, false, shallow));
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return () => {
|
|
52
|
+
cleanup(listeners);
|
|
53
|
+
// Set it to undefined so it would trigger the above React 18 workaround
|
|
54
|
+
refListeners.current = undefined;
|
|
55
|
+
};
|
|
56
|
+
}, []);
|
|
55
57
|
return ret;
|
|
56
58
|
}
|
|
59
|
+
function cleanup(listeners) {
|
|
60
|
+
// Cleanup listeners
|
|
61
|
+
for (let i = 0; i < listeners.length; i++) {
|
|
62
|
+
listeners[i]();
|
|
63
|
+
}
|
|
64
|
+
listeners.length = 0;
|
|
65
|
+
}
|
|
57
66
|
|
|
58
67
|
const hasSymbol = typeof Symbol === 'function' && Symbol.for;
|
|
59
68
|
// Extracting the forwardRef inspired by https://github.com/mobxjs/mobx/blob/main/packages/mobx-react-lite/src/observer.ts
|
|
@@ -118,12 +127,6 @@ var LS;
|
|
|
118
127
|
LS.select = Binder('select');
|
|
119
128
|
})(LS || (LS = {}));
|
|
120
129
|
|
|
121
|
-
const symbolIsObservable = Symbol('isObservable');
|
|
122
|
-
|
|
123
|
-
function isObservable(obs) {
|
|
124
|
-
return obs && !!obs[symbolIsObservable];
|
|
125
|
-
}
|
|
126
|
-
|
|
127
130
|
const Isolate = observer(function Isolate({ children, }) {
|
|
128
131
|
return children();
|
|
129
132
|
});
|
|
@@ -141,6 +144,30 @@ const Show = observer(function Show({ if: if_, else: else_, children, memo, }) {
|
|
|
141
144
|
? else_()
|
|
142
145
|
: null;
|
|
143
146
|
});
|
|
147
|
+
const For = observer(function For({ each, item, children, }) {
|
|
148
|
+
if (!each)
|
|
149
|
+
return null;
|
|
150
|
+
// Get the raw value with a shallow listener so this list only re-renders
|
|
151
|
+
// when the array length changes
|
|
152
|
+
const v = each.get(shallow);
|
|
153
|
+
if (!v)
|
|
154
|
+
return null;
|
|
155
|
+
// Get the appropriate id field
|
|
156
|
+
const id = v.length > 0 ? (v[0].id ? 'id' : v[0]._id ? '_id' : v[0].__id ? '__id' : undefined) : undefined;
|
|
157
|
+
// The child function gets wrapped in a memoized observer component
|
|
158
|
+
if (!item && children) {
|
|
159
|
+
item = useMemo(() => observer(({ item }) => children(item)), []);
|
|
160
|
+
}
|
|
161
|
+
// Create the child elements
|
|
162
|
+
let out = [];
|
|
163
|
+
for (let i = 0; i < v.length; i++) {
|
|
164
|
+
if (v[i]) {
|
|
165
|
+
const key = v[i][id];
|
|
166
|
+
out.push(createElement(item, { key: key, item: each[i] }));
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
return out;
|
|
170
|
+
});
|
|
144
171
|
|
|
145
172
|
function useComputed(selector, deps) {
|
|
146
173
|
// Do all the computed magic inside a useMemo so we can get an initial value
|
|
@@ -174,5 +201,5 @@ function useObservable(initialValue) {
|
|
|
174
201
|
return useMemo(() => observable(isFunction(initialValue) ? initialValue() : initialValue), []); // eslint-disable-line react-hooks/exhaustive-deps
|
|
175
202
|
}
|
|
176
203
|
|
|
177
|
-
export { Binder, Isolate, LS, Memo, Show, observer, useComputed, useObservable };
|
|
204
|
+
export { Binder, For, Isolate, LS, Memo, Show, observer, useComputed, useObservable };
|
|
178
205
|
//# sourceMappingURL=react.mjs.map
|
package/react.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"react.mjs","sources":["../../src/react/useForceRender.ts","../../src/react/useObserver.ts","../../src/react/observer.ts","../../src/react/components.tsx","../../src/
|
|
1
|
+
{"version":3,"file":"react.mjs","sources":["../../src/react/useForceRender.ts","../../src/react/useObserver.ts","../../src/react/observer.ts","../../src/react/components.tsx","../../src/react/controlFlow.tsx","../../src/react/useComputed.ts","../../src/react/useObservable.ts"],"sourcesContent":[null,null,null,null,null,null,null],"names":[],"mappings":"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"}
|
|
@@ -47,9 +47,6 @@ export interface ObservableArrayOverride<T> extends Omit<Array<T>, ArrayOverride
|
|
|
47
47
|
map<U>(callbackfn: (value: T, index: number, array: T[]) => U, thisArg?: any): U[];
|
|
48
48
|
}
|
|
49
49
|
export declare type ListenerFn<T = any> = (value: T, getPrevious: () => T, path: (string | number)[], valueAtPath: any, prevAtPath: any, node: NodeValue) => void;
|
|
50
|
-
export declare type ListenerFnSaved<T = any> = {
|
|
51
|
-
shallow?: boolean;
|
|
52
|
-
} & ListenerFn<T>;
|
|
53
50
|
declare type Recurse<T, K extends keyof T, TRecurse> = T[K] extends Function | Map<any, any> | WeakMap<any, any> | Set<any> | WeakSet<any> | Promise<any> ? T[K] : T[K] extends Primitive ? T[K] & ObservablePrimitiveFns<T[K]> : T[K] extends Array<any> ? Omit<T[K], ArrayOverrideFnNames> & ObservableObjectFns<T[K]> & ObservableArrayOverride<ObservableObject<T[K][number]>> : T extends object ? TRecurse : T[K];
|
|
54
51
|
declare type ObservableFnsRecursive<T> = {
|
|
55
52
|
[K in keyof T]: Recurse<T, K, ObservableObject<T[K]>>;
|
|
@@ -179,7 +176,7 @@ export interface NodeValue {
|
|
|
179
176
|
proxy?: object;
|
|
180
177
|
key: string | number;
|
|
181
178
|
root: ObservableWrapper;
|
|
182
|
-
listeners?:
|
|
179
|
+
listeners?: Map<string, ListenerFn>;
|
|
183
180
|
}
|
|
184
181
|
/** @internal */
|
|
185
182
|
export interface TrackingNode {
|