@legendapp/state 0.15.0-next.7 → 0.15.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/CHANGELOG.md +85 -0
- package/babel.js +304 -874
- package/babel.js.map +1 -1
- package/index.d.ts +7 -2
- package/index.js +155 -142
- package/index.js.map +1 -1
- package/index.mjs +149 -142
- package/index.mjs.map +1 -1
- package/internal.d.ts +1 -1
- package/internal.js +4 -0
- package/internal.js.map +1 -1
- package/internal.mjs +1 -1
- package/package.json +15 -17
- package/react-components.d.ts +1 -0
- package/react-components.js +42 -0
- package/react-components.js.map +1 -0
- package/react-components.mjs +40 -0
- package/react-components.mjs.map +1 -0
- package/react-native-components.d.ts +1 -0
- package/react-native-components.js +38 -0
- package/react-native-components.js.map +1 -0
- package/react-native-components.mjs +36 -0
- package/react-native-components.mjs.map +1 -0
- package/react.d.ts +1 -0
- package/react.js +139 -87
- package/react.js.map +1 -1
- package/react.mjs +136 -89
- package/react.mjs.map +1 -1
- package/src/globals.d.ts +3 -1
- package/src/helpers.d.ts +3 -1
- package/src/observableInterfaces.d.ts +18 -16
- package/src/observe.d.ts +3 -0
- package/src/onChange.d.ts +1 -5
- package/src/react/flow.d.ts +31 -0
- package/src/react/useComputed.d.ts +6 -1
- package/src/react/useObserve.d.ts +1 -0
- package/src/{react/components.d.ts → react-components/react-components.d.ts} +4 -10
- package/src/{react-native/components.d.ts → react-native-components/rn-components.d.ts} +4 -8
- package/src/tracking.d.ts +1 -1
- package/src/when.d.ts +1 -5
- package/trace.js +4 -2
- package/trace.js.map +1 -1
- package/trace.mjs +5 -3
- package/trace.mjs.map +1 -1
- package/types.d.ts +15 -0
- package/react-native-types.d.ts +0 -39
- package/react-native.d.ts +0 -1
- package/react-native.js +0 -146
- package/react-native.js.map +0 -1
- package/react-native.mjs +0 -142
- package/react-native.mjs.map +0 -1
- package/react-types.d.ts +0 -8
- package/reactivity.d.ts +0 -2
- package/reactivity.js +0 -200
- package/reactivity.js.map +0 -1
- package/reactivity.mjs +0 -192
- package/reactivity.mjs.map +0 -1
- package/src/effect.d.ts +0 -1
- package/src/react/controlFlow.d.ts +0 -28
- package/src/react/useObserver.d.ts +0 -1
- package/state-types.d.ts +0 -24
package/react.js
CHANGED
|
@@ -2,84 +2,126 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
|
-
var react = require('react');
|
|
6
5
|
var state = require('@legendapp/state');
|
|
6
|
+
var react = require('react');
|
|
7
7
|
|
|
8
8
|
function useForceRender() {
|
|
9
9
|
const [, forceRender] = react.useReducer((s) => s + 1, 0);
|
|
10
10
|
return react.useCallback(() => forceRender(), []);
|
|
11
11
|
}
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
const
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
shallow: track === state.Tracking.shallow,
|
|
35
|
-
optimized: track === state.Tracking.optimized,
|
|
36
|
-
};
|
|
13
|
+
/**
|
|
14
|
+
* Runs the specified selector, automatically tracking observable access and optionally re-rendering
|
|
15
|
+
* @param selector A computation function
|
|
16
|
+
* @param whenToRender When to re-render. false = never re-render, undefined = render if different, true = always render
|
|
17
|
+
*/
|
|
18
|
+
function useComputed(selector, whenToRender) {
|
|
19
|
+
let inRun = true;
|
|
20
|
+
let ret = state.symbolUndef;
|
|
21
|
+
let cachedNodes;
|
|
22
|
+
const fr = whenToRender !== false && useForceRender();
|
|
23
|
+
const update = function () {
|
|
24
|
+
// If running, run and return the value
|
|
25
|
+
// Don't need to run the selector again if not running and alwaysUpdate
|
|
26
|
+
if (inRun || !whenToRender) {
|
|
27
|
+
const cur = selector();
|
|
28
|
+
// Re-render if not currently rendering and value has changed
|
|
29
|
+
if (!inRun && cur !== ret && whenToRender !== false) {
|
|
30
|
+
// Re-render if value changed
|
|
31
|
+
fr();
|
|
32
|
+
}
|
|
33
|
+
ret = cur;
|
|
37
34
|
}
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
// Do tracing if it was requested
|
|
41
|
-
if (process.env.NODE_ENV === 'development') {
|
|
42
|
-
(_a = state.tracking.listeners) === null || _a === void 0 ? void 0 : _a.call(state.tracking, nodes);
|
|
43
|
-
if (state.tracking.updates) {
|
|
44
|
-
updateFn = state.tracking.updates(updateFn);
|
|
35
|
+
else if (whenToRender) {
|
|
36
|
+
fr();
|
|
45
37
|
}
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
react.useEffect(() => {
|
|
51
|
-
let listeners = refListeners.current;
|
|
52
|
-
// Workaround for React 18's double calling useEffect. If this is the
|
|
53
|
-
// second useEffect, set up listeners again.
|
|
54
|
-
if (process.env.NODE_ENV === 'development' && refListeners.current === undefined) {
|
|
55
|
-
listeners = refListeners.current = [];
|
|
56
|
-
// Re-listen to tracked nodes. This should be copied from above.
|
|
57
|
-
for (let tracked of nodes.values()) {
|
|
58
|
-
const { node, track } = tracked;
|
|
59
|
-
let options;
|
|
60
|
-
if (track) {
|
|
61
|
-
options = {
|
|
62
|
-
shallow: track === state.Tracking.shallow,
|
|
63
|
-
optimized: track === state.Tracking.optimized,
|
|
64
|
-
};
|
|
65
|
-
}
|
|
66
|
-
listeners.push(state.onChange(node, updateFn, options));
|
|
67
|
-
}
|
|
38
|
+
inRun = false;
|
|
39
|
+
// Workaround for React 18's double calling useEffect - cached the tracking nodes
|
|
40
|
+
if (process.env.NODE_ENV === 'development') {
|
|
41
|
+
cachedNodes = state.tracking.nodes;
|
|
68
42
|
}
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
43
|
+
};
|
|
44
|
+
let dispose = state.observe(update);
|
|
45
|
+
if (process.env.NODE_ENV === 'development') {
|
|
46
|
+
react.useEffect(() => {
|
|
47
|
+
// Workaround for React 18's double calling useEffect. If this is the
|
|
48
|
+
// second useEffect, set up tracking again.
|
|
49
|
+
if (dispose === undefined) {
|
|
50
|
+
dispose = state.setupTracking(cachedNodes, update);
|
|
51
|
+
}
|
|
52
|
+
return () => {
|
|
53
|
+
dispose();
|
|
54
|
+
dispose = undefined;
|
|
55
|
+
};
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
// Return dispose to cleanup before each render or on unmount
|
|
60
|
+
react.useEffect(() => dispose);
|
|
61
|
+
}
|
|
75
62
|
return ret;
|
|
76
63
|
}
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
64
|
+
|
|
65
|
+
function computeProp(prop) {
|
|
66
|
+
return useComputed(() => {
|
|
67
|
+
let p = prop;
|
|
68
|
+
if (state.isFunction(p)) {
|
|
69
|
+
p = p();
|
|
70
|
+
}
|
|
71
|
+
if (state.isObservable(p)) {
|
|
72
|
+
p = p.get();
|
|
73
|
+
}
|
|
74
|
+
return p;
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
function Computed({ children }) {
|
|
78
|
+
return useComputed(children, true);
|
|
79
|
+
}
|
|
80
|
+
const Memo = react.memo(function Memo({ children }) {
|
|
81
|
+
return useComputed(children, true);
|
|
82
|
+
}, () => true);
|
|
83
|
+
function Show({ if: if_, else: else_, children, }) {
|
|
84
|
+
const value = computeProp(if_);
|
|
85
|
+
return (value
|
|
86
|
+
? state.isFunction(children)
|
|
87
|
+
? children(value)
|
|
88
|
+
: children
|
|
89
|
+
: else_
|
|
90
|
+
? state.isFunction(else_)
|
|
91
|
+
? else_()
|
|
92
|
+
: else_
|
|
93
|
+
: null);
|
|
94
|
+
}
|
|
95
|
+
function Switch({ value, children, }) {
|
|
96
|
+
var _a, _b, _c, _d;
|
|
97
|
+
return ((_d = (_b = (_a = children[computeProp(value)]) === null || _a === void 0 ? void 0 : _a.call(children)) !== null && _b !== void 0 ? _b : (_c = children['default']) === null || _c === void 0 ? void 0 : _c.call(children)) !== null && _d !== void 0 ? _d : null);
|
|
98
|
+
}
|
|
99
|
+
function For({ each, optimized, item, children, }) {
|
|
100
|
+
if (!each)
|
|
101
|
+
return null;
|
|
102
|
+
// Get the raw value with a shallow listener so this list only re-renders
|
|
103
|
+
// when the array length changes
|
|
104
|
+
const v = useComputed(() => each.get(optimized ? state.Tracking.optimized : state.Tracking.shallow), true);
|
|
105
|
+
if (!v)
|
|
106
|
+
return null;
|
|
107
|
+
// The child function gets wrapped in a memoized observer component
|
|
108
|
+
if (!item && children) {
|
|
109
|
+
// Update the ref so the generated component uses the latest function
|
|
110
|
+
const refChildren = react.useRef();
|
|
111
|
+
refChildren.current = children;
|
|
112
|
+
item = react.useMemo(() => react.memo(({ item }) => useComputed(() => refChildren.current(item), true)), []);
|
|
81
113
|
}
|
|
82
|
-
|
|
114
|
+
// Get the appropriate id field
|
|
115
|
+
const id = v.length > 0 ? (v[0].id ? 'id' : v[0]._id ? '_id' : v[0].__id ? '__id' : undefined) : undefined;
|
|
116
|
+
// Create the child elements
|
|
117
|
+
let out = [];
|
|
118
|
+
for (let i = 0; i < v.length; i++) {
|
|
119
|
+
if (v[i]) {
|
|
120
|
+
const key = v[i][id];
|
|
121
|
+
out.push(react.createElement(item, { key: key, item: each[i] }));
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
return out;
|
|
83
125
|
}
|
|
84
126
|
|
|
85
127
|
const hasSymbol = typeof Symbol === 'function' && Symbol.for;
|
|
@@ -100,9 +142,7 @@ function observer(component, propsAreEqual) {
|
|
|
100
142
|
const componentName = component.displayName || component.name;
|
|
101
143
|
// Create a wrapper observer component
|
|
102
144
|
let observer = function (props, ref) {
|
|
103
|
-
|
|
104
|
-
// Set up all the listeners while rendering the component
|
|
105
|
-
return useObserver(() => component(props, ref), forceRender);
|
|
145
|
+
return useComputed(() => component(props, ref), true);
|
|
106
146
|
};
|
|
107
147
|
if (componentName !== '') {
|
|
108
148
|
observer.displayName = componentName;
|
|
@@ -113,26 +153,33 @@ function observer(component, propsAreEqual) {
|
|
|
113
153
|
}
|
|
114
154
|
return react.memo(observer, propsAreEqual);
|
|
115
155
|
}
|
|
116
|
-
|
|
117
|
-
function
|
|
118
|
-
//
|
|
119
|
-
const
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
const [value, setValue] = react.useState(initial);
|
|
156
|
+
// Memoized component to wrap the observable value
|
|
157
|
+
const Text = react.memo(function Text({ data }) {
|
|
158
|
+
// Exit the tracking context first
|
|
159
|
+
const trackingPrev = state.tracking.nodes;
|
|
160
|
+
state.tracking.nodes = undefined;
|
|
161
|
+
let [value, setValue] = react.useState(state.getNodeValue(data));
|
|
162
|
+
react.useEffect(() => {
|
|
163
|
+
const cur = state.getNodeValue(data);
|
|
164
|
+
// Set to current if it changed since mount
|
|
165
|
+
if (value !== cur) {
|
|
166
|
+
setValue(cur);
|
|
167
|
+
}
|
|
168
|
+
// Set up change listener, leanup on unmount
|
|
169
|
+
return state.onChange(data, (v) => setValue(v));
|
|
170
|
+
}, []);
|
|
171
|
+
// Restore the tracking context
|
|
172
|
+
state.tracking.nodes = trackingPrev;
|
|
134
173
|
return value;
|
|
135
|
-
}
|
|
174
|
+
}, () => true);
|
|
175
|
+
const ReactTypeofSymbol = hasSymbol ? Symbol.for('react.element') : react.createElement('a').$$typeof;
|
|
176
|
+
// Set extra props for the proxyHandler to return on primitives
|
|
177
|
+
state.extraPrimitiveProps.set('$$typeof', ReactTypeofSymbol);
|
|
178
|
+
state.extraPrimitiveProps.set('type', Text);
|
|
179
|
+
state.extraPrimitiveProps.set('props', {
|
|
180
|
+
__fn: (obs) => ({ data: obs }),
|
|
181
|
+
});
|
|
182
|
+
state.extraPrimitiveProps.set('ref', null);
|
|
136
183
|
|
|
137
184
|
/**
|
|
138
185
|
* A React hook that creates a new observable and can optionally listen or persist its state.
|
|
@@ -146,6 +193,11 @@ function useObservable(initialValue) {
|
|
|
146
193
|
return react.useMemo(() => state.observable(state.isFunction(initialValue) ? initialValue() : initialValue), []); // eslint-disable-line react-hooks/exhaustive-deps
|
|
147
194
|
}
|
|
148
195
|
|
|
196
|
+
exports.Computed = Computed;
|
|
197
|
+
exports.For = For;
|
|
198
|
+
exports.Memo = Memo;
|
|
199
|
+
exports.Show = Show;
|
|
200
|
+
exports.Switch = Switch;
|
|
149
201
|
exports.observer = observer;
|
|
150
202
|
exports.useComputed = useComputed;
|
|
151
203
|
exports.useObservable = useObservable;
|
package/react.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"react.js","sources":["../../src/react/useForceRender.ts","../../src/react/
|
|
1
|
+
{"version":3,"file":"react.js","sources":["../../src/react/useForceRender.ts","../../src/react/useComputed.ts","../../src/react/flow.tsx","../../src/react/observer.ts","../../src/react/useObservable.ts"],"sourcesContent":[null,null,null,null,null],"names":["useReducer","useCallback","symbolUndef","tracking","observe","useEffect","setupTracking","isFunction","isObservable","memo","Tracking","useRef","useMemo","createElement","forwardRef","useState","getNodeValue","onChange","extraPrimitiveProps","observable"],"mappings":"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"}
|
package/react.mjs
CHANGED
|
@@ -1,81 +1,123 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { observe, setupTracking, symbolUndef, tracking, isFunction, Tracking, isObservable, getNodeValue, onChange, extraPrimitiveProps, observable } from '@legendapp/state';
|
|
2
|
+
import { useReducer, useCallback, useEffect, memo, useRef, useMemo, createElement, forwardRef, useState } from 'react';
|
|
3
3
|
|
|
4
4
|
function useForceRender() {
|
|
5
5
|
const [, forceRender] = useReducer((s) => s + 1, 0);
|
|
6
6
|
return useCallback(() => forceRender(), []);
|
|
7
7
|
}
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
const
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
shallow: track === Tracking.shallow,
|
|
31
|
-
optimized: track === Tracking.optimized,
|
|
32
|
-
};
|
|
9
|
+
/**
|
|
10
|
+
* Runs the specified selector, automatically tracking observable access and optionally re-rendering
|
|
11
|
+
* @param selector A computation function
|
|
12
|
+
* @param whenToRender When to re-render. false = never re-render, undefined = render if different, true = always render
|
|
13
|
+
*/
|
|
14
|
+
function useComputed(selector, whenToRender) {
|
|
15
|
+
let inRun = true;
|
|
16
|
+
let ret = symbolUndef;
|
|
17
|
+
let cachedNodes;
|
|
18
|
+
const fr = whenToRender !== false && useForceRender();
|
|
19
|
+
const update = function () {
|
|
20
|
+
// If running, run and return the value
|
|
21
|
+
// Don't need to run the selector again if not running and alwaysUpdate
|
|
22
|
+
if (inRun || !whenToRender) {
|
|
23
|
+
const cur = selector();
|
|
24
|
+
// Re-render if not currently rendering and value has changed
|
|
25
|
+
if (!inRun && cur !== ret && whenToRender !== false) {
|
|
26
|
+
// Re-render if value changed
|
|
27
|
+
fr();
|
|
28
|
+
}
|
|
29
|
+
ret = cur;
|
|
33
30
|
}
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
// Do tracing if it was requested
|
|
37
|
-
if (process.env.NODE_ENV === 'development') {
|
|
38
|
-
(_a = tracking.listeners) === null || _a === void 0 ? void 0 : _a.call(tracking, nodes);
|
|
39
|
-
if (tracking.updates) {
|
|
40
|
-
updateFn = tracking.updates(updateFn);
|
|
31
|
+
else if (whenToRender) {
|
|
32
|
+
fr();
|
|
41
33
|
}
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
useEffect(() => {
|
|
47
|
-
let listeners = refListeners.current;
|
|
48
|
-
// Workaround for React 18's double calling useEffect. If this is the
|
|
49
|
-
// second useEffect, set up listeners again.
|
|
50
|
-
if (process.env.NODE_ENV === 'development' && refListeners.current === undefined) {
|
|
51
|
-
listeners = refListeners.current = [];
|
|
52
|
-
// Re-listen to tracked nodes. This should be copied from above.
|
|
53
|
-
for (let tracked of nodes.values()) {
|
|
54
|
-
const { node, track } = tracked;
|
|
55
|
-
let options;
|
|
56
|
-
if (track) {
|
|
57
|
-
options = {
|
|
58
|
-
shallow: track === Tracking.shallow,
|
|
59
|
-
optimized: track === Tracking.optimized,
|
|
60
|
-
};
|
|
61
|
-
}
|
|
62
|
-
listeners.push(onChange(node, updateFn, options));
|
|
63
|
-
}
|
|
34
|
+
inRun = false;
|
|
35
|
+
// Workaround for React 18's double calling useEffect - cached the tracking nodes
|
|
36
|
+
if (process.env.NODE_ENV === 'development') {
|
|
37
|
+
cachedNodes = tracking.nodes;
|
|
64
38
|
}
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
39
|
+
};
|
|
40
|
+
let dispose = observe(update);
|
|
41
|
+
if (process.env.NODE_ENV === 'development') {
|
|
42
|
+
useEffect(() => {
|
|
43
|
+
// Workaround for React 18's double calling useEffect. If this is the
|
|
44
|
+
// second useEffect, set up tracking again.
|
|
45
|
+
if (dispose === undefined) {
|
|
46
|
+
dispose = setupTracking(cachedNodes, update);
|
|
47
|
+
}
|
|
48
|
+
return () => {
|
|
49
|
+
dispose();
|
|
50
|
+
dispose = undefined;
|
|
51
|
+
};
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
// Return dispose to cleanup before each render or on unmount
|
|
56
|
+
useEffect(() => dispose);
|
|
57
|
+
}
|
|
71
58
|
return ret;
|
|
72
59
|
}
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
60
|
+
|
|
61
|
+
function computeProp(prop) {
|
|
62
|
+
return useComputed(() => {
|
|
63
|
+
let p = prop;
|
|
64
|
+
if (isFunction(p)) {
|
|
65
|
+
p = p();
|
|
66
|
+
}
|
|
67
|
+
if (isObservable(p)) {
|
|
68
|
+
p = p.get();
|
|
69
|
+
}
|
|
70
|
+
return p;
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
function Computed({ children }) {
|
|
74
|
+
return useComputed(children, true);
|
|
75
|
+
}
|
|
76
|
+
const Memo = memo(function Memo({ children }) {
|
|
77
|
+
return useComputed(children, true);
|
|
78
|
+
}, () => true);
|
|
79
|
+
function Show({ if: if_, else: else_, children, }) {
|
|
80
|
+
const value = computeProp(if_);
|
|
81
|
+
return (value
|
|
82
|
+
? isFunction(children)
|
|
83
|
+
? children(value)
|
|
84
|
+
: children
|
|
85
|
+
: else_
|
|
86
|
+
? isFunction(else_)
|
|
87
|
+
? else_()
|
|
88
|
+
: else_
|
|
89
|
+
: null);
|
|
90
|
+
}
|
|
91
|
+
function Switch({ value, children, }) {
|
|
92
|
+
var _a, _b, _c, _d;
|
|
93
|
+
return ((_d = (_b = (_a = children[computeProp(value)]) === null || _a === void 0 ? void 0 : _a.call(children)) !== null && _b !== void 0 ? _b : (_c = children['default']) === null || _c === void 0 ? void 0 : _c.call(children)) !== null && _d !== void 0 ? _d : null);
|
|
94
|
+
}
|
|
95
|
+
function For({ each, optimized, item, children, }) {
|
|
96
|
+
if (!each)
|
|
97
|
+
return null;
|
|
98
|
+
// Get the raw value with a shallow listener so this list only re-renders
|
|
99
|
+
// when the array length changes
|
|
100
|
+
const v = useComputed(() => each.get(optimized ? Tracking.optimized : Tracking.shallow), true);
|
|
101
|
+
if (!v)
|
|
102
|
+
return null;
|
|
103
|
+
// The child function gets wrapped in a memoized observer component
|
|
104
|
+
if (!item && children) {
|
|
105
|
+
// Update the ref so the generated component uses the latest function
|
|
106
|
+
const refChildren = useRef();
|
|
107
|
+
refChildren.current = children;
|
|
108
|
+
item = useMemo(() => memo(({ item }) => useComputed(() => refChildren.current(item), true)), []);
|
|
109
|
+
}
|
|
110
|
+
// Get the appropriate id field
|
|
111
|
+
const id = v.length > 0 ? (v[0].id ? 'id' : v[0]._id ? '_id' : v[0].__id ? '__id' : undefined) : undefined;
|
|
112
|
+
// Create the child elements
|
|
113
|
+
let out = [];
|
|
114
|
+
for (let i = 0; i < v.length; i++) {
|
|
115
|
+
if (v[i]) {
|
|
116
|
+
const key = v[i][id];
|
|
117
|
+
out.push(createElement(item, { key: key, item: each[i] }));
|
|
118
|
+
}
|
|
77
119
|
}
|
|
78
|
-
|
|
120
|
+
return out;
|
|
79
121
|
}
|
|
80
122
|
|
|
81
123
|
const hasSymbol = typeof Symbol === 'function' && Symbol.for;
|
|
@@ -96,9 +138,7 @@ function observer(component, propsAreEqual) {
|
|
|
96
138
|
const componentName = component.displayName || component.name;
|
|
97
139
|
// Create a wrapper observer component
|
|
98
140
|
let observer = function (props, ref) {
|
|
99
|
-
|
|
100
|
-
// Set up all the listeners while rendering the component
|
|
101
|
-
return useObserver(() => component(props, ref), forceRender);
|
|
141
|
+
return useComputed(() => component(props, ref), true);
|
|
102
142
|
};
|
|
103
143
|
if (componentName !== '') {
|
|
104
144
|
observer.displayName = componentName;
|
|
@@ -109,26 +149,33 @@ function observer(component, propsAreEqual) {
|
|
|
109
149
|
}
|
|
110
150
|
return memo(observer, propsAreEqual);
|
|
111
151
|
}
|
|
112
|
-
|
|
113
|
-
function
|
|
114
|
-
//
|
|
115
|
-
const
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
const [value, setValue] = useState(initial);
|
|
152
|
+
// Memoized component to wrap the observable value
|
|
153
|
+
const Text = memo(function Text({ data }) {
|
|
154
|
+
// Exit the tracking context first
|
|
155
|
+
const trackingPrev = tracking.nodes;
|
|
156
|
+
tracking.nodes = undefined;
|
|
157
|
+
let [value, setValue] = useState(getNodeValue(data));
|
|
158
|
+
useEffect(() => {
|
|
159
|
+
const cur = getNodeValue(data);
|
|
160
|
+
// Set to current if it changed since mount
|
|
161
|
+
if (value !== cur) {
|
|
162
|
+
setValue(cur);
|
|
163
|
+
}
|
|
164
|
+
// Set up change listener, leanup on unmount
|
|
165
|
+
return onChange(data, (v) => setValue(v));
|
|
166
|
+
}, []);
|
|
167
|
+
// Restore the tracking context
|
|
168
|
+
tracking.nodes = trackingPrev;
|
|
130
169
|
return value;
|
|
131
|
-
}
|
|
170
|
+
}, () => true);
|
|
171
|
+
const ReactTypeofSymbol = hasSymbol ? Symbol.for('react.element') : createElement('a').$$typeof;
|
|
172
|
+
// Set extra props for the proxyHandler to return on primitives
|
|
173
|
+
extraPrimitiveProps.set('$$typeof', ReactTypeofSymbol);
|
|
174
|
+
extraPrimitiveProps.set('type', Text);
|
|
175
|
+
extraPrimitiveProps.set('props', {
|
|
176
|
+
__fn: (obs) => ({ data: obs }),
|
|
177
|
+
});
|
|
178
|
+
extraPrimitiveProps.set('ref', null);
|
|
132
179
|
|
|
133
180
|
/**
|
|
134
181
|
* A React hook that creates a new observable and can optionally listen or persist its state.
|
|
@@ -142,5 +189,5 @@ function useObservable(initialValue) {
|
|
|
142
189
|
return useMemo(() => observable(isFunction(initialValue) ? initialValue() : initialValue), []); // eslint-disable-line react-hooks/exhaustive-deps
|
|
143
190
|
}
|
|
144
191
|
|
|
145
|
-
export { observer, useComputed, useObservable };
|
|
192
|
+
export { Computed, For, Memo, Show, Switch, observer, useComputed, useObservable };
|
|
146
193
|
//# sourceMappingURL=react.mjs.map
|
package/react.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"react.mjs","sources":["../../src/react/useForceRender.ts","../../src/react/
|
|
1
|
+
{"version":3,"file":"react.mjs","sources":["../../src/react/useForceRender.ts","../../src/react/useComputed.ts","../../src/react/flow.tsx","../../src/react/observer.ts","../../src/react/useObservable.ts"],"sourcesContent":[null,null,null,null,null],"names":[],"mappings":"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"}
|
package/src/globals.d.ts
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import { NodeValue } from './observableInterfaces';
|
|
2
2
|
export declare const symbolDateModified: unique symbol;
|
|
3
3
|
export declare const symbolIsObservable: unique symbol;
|
|
4
|
+
export declare const symbolGetNode: unique symbol;
|
|
5
|
+
export declare const symbolUndef: unique symbol;
|
|
6
|
+
export declare const extraPrimitiveProps: Map<string, any>;
|
|
4
7
|
export declare namespace Tracking {
|
|
5
8
|
const normal = true;
|
|
6
9
|
const shallow: unique symbol;
|
|
@@ -12,5 +15,4 @@ export declare const nextNodeID: {
|
|
|
12
15
|
export declare function checkTracking(node: NodeValue, track: boolean | Symbol): void;
|
|
13
16
|
export declare function get(node: NodeValue, keyOrTrack?: string | number | boolean | Symbol, track?: boolean | Symbol): any;
|
|
14
17
|
export declare function getNodeValue(node: NodeValue): any;
|
|
15
|
-
export declare function getOutputValue(node: NodeValue): any;
|
|
16
18
|
export declare function getChildNode(node: NodeValue, key: string | number): NodeValue;
|
package/src/helpers.d.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
-
import type { ObservableObject } from './observableInterfaces';
|
|
1
|
+
import type { NodeValue, ObservableObject, ObservableRef } from './observableInterfaces';
|
|
2
2
|
export declare function isObservable(obs: any): obs is ObservableObject;
|
|
3
|
+
export declare function getNode(obs: ObservableRef): NodeValue;
|
|
4
|
+
export declare function lockObservable(obs: ObservableRef, value: boolean): void;
|
|
3
5
|
export declare function mergeIntoObservable(target: ObservableObject | object, ...sources: any[]): any;
|