@legendapp/state 3.0.0-alpha.3 → 3.0.0-alpha.5
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.d.mts +1 -1
- package/index.d.ts +1 -1
- package/package.json +1 -1
- package/react.d.mts +8 -8
- package/react.d.ts +8 -8
- package/react.js +37 -29
- package/react.mjs +38 -30
package/index.d.mts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
type Primitive$1 = string | number | boolean | symbol | bigint | undefined | null | Date;
|
|
2
|
-
type ArrayOverrideFnNames = 'find' | 'every' | 'some' | 'filter' | 'reduce' | 'reduceRight' | 'forEach' | 'map' | 'sort';
|
|
2
|
+
type ArrayOverrideFnNames = 'find' | 'findIndex' | 'every' | 'some' | 'filter' | 'reduce' | 'reduceRight' | 'forEach' | 'map' | 'sort';
|
|
3
3
|
type RemoveIndex<T> = {
|
|
4
4
|
[K in keyof T as string extends K ? never : number extends K ? never : K]: T[K];
|
|
5
5
|
};
|
package/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
type Primitive$1 = string | number | boolean | symbol | bigint | undefined | null | Date;
|
|
2
|
-
type ArrayOverrideFnNames = 'find' | 'every' | 'some' | 'filter' | 'reduce' | 'reduceRight' | 'forEach' | 'map' | 'sort';
|
|
2
|
+
type ArrayOverrideFnNames = 'find' | 'findIndex' | 'every' | 'some' | 'filter' | 'reduce' | 'reduceRight' | 'forEach' | 'map' | 'sort';
|
|
3
3
|
type RemoveIndex<T> = {
|
|
4
4
|
[K in keyof T as string extends K ? never : number extends K ? never : K]: T[K];
|
|
5
5
|
};
|
package/package.json
CHANGED
package/react.d.mts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as react from 'react';
|
|
2
|
-
import { ReactNode, ReactElement, FC, LegacyRef, ComponentClass, ReducerWithoutAction, ReducerStateWithoutAction, DispatchWithoutAction, Reducer, ReducerState, Dispatch, ReducerAction } from 'react';
|
|
2
|
+
import { ReactNode, ReactElement, FC, LegacyRef, ComponentClass, DependencyList, ReducerWithoutAction, ReducerStateWithoutAction, DispatchWithoutAction, Reducer, ReducerState, Dispatch, ReducerAction } from 'react';
|
|
3
3
|
import { ObservableParam, Observable, ObservableBoolean, Selector, RecursiveValueOrFunction, ObserveEvent, ObserveOptions, ObserveEventCallback } from '@legendapp/state';
|
|
4
4
|
|
|
5
5
|
declare function Computed({ children }: {
|
|
@@ -110,10 +110,10 @@ declare function reactiveObserver<T extends FC<any>>(component: T, bindKeys?: Bi
|
|
|
110
110
|
declare function reactiveObserver<T extends FC<any>, T2 extends keyof ExtractFCPropsType<T>>(component: T, bindKeys?: BindKeys<ExtractFCPropsType<T>>): T | FC<ShapeWithPick$<ExtractFCPropsType<T>, T2>>;
|
|
111
111
|
declare function reactiveComponents<P extends Record<string, FC>>(components: P): ObjectShapeWith$<P>;
|
|
112
112
|
|
|
113
|
-
declare function useComputed<T>(
|
|
114
|
-
declare function useComputed<T>(
|
|
115
|
-
declare function useComputed<T, T2 = T>(
|
|
116
|
-
declare function useComputed<T, T2 = T>(
|
|
113
|
+
declare function useComputed<T>(get: () => T | Promise<T>): Observable<T>;
|
|
114
|
+
declare function useComputed<T>(get: () => T | Promise<T>, deps: any[]): Observable<T>;
|
|
115
|
+
declare function useComputed<T, T2 = T>(get: (() => T | Promise<T>) | ObservableParam<T>, set: (value: T2) => void): Observable<T>;
|
|
116
|
+
declare function useComputed<T, T2 = T>(get: (() => T | Promise<T>) | ObservableParam<T>, set: (value: T2) => void, deps: any[]): Observable<T>;
|
|
117
117
|
|
|
118
118
|
declare const useEffectOnce: (effect: () => void | (() => void), deps: any[]) => void;
|
|
119
119
|
|
|
@@ -130,9 +130,9 @@ declare const useMountOnce: typeof useMount;
|
|
|
130
130
|
* @see https://www.legendapp.com/dev/state/react/#useObservable
|
|
131
131
|
*/
|
|
132
132
|
declare function useObservable<T>(): Observable<T | undefined>;
|
|
133
|
-
declare function useObservable<T>(value: Promise<RecursiveValueOrFunction<T>> | (() => RecursiveValueOrFunction<T>) | RecursiveValueOrFunction<T
|
|
134
|
-
declare function useObservable<T>(value: T): Observable<T>;
|
|
135
|
-
declare function useObservable<T>(value?: T): Observable<any>;
|
|
133
|
+
declare function useObservable<T>(value: Promise<RecursiveValueOrFunction<T>> | (() => RecursiveValueOrFunction<T>) | RecursiveValueOrFunction<T>, deps?: DependencyList): Observable<T>;
|
|
134
|
+
declare function useObservable<T>(value: T, deps?: DependencyList): Observable<T>;
|
|
135
|
+
declare function useObservable<T>(value?: T, deps?: DependencyList): Observable<any>;
|
|
136
136
|
|
|
137
137
|
declare function useObservableReducer<R extends ReducerWithoutAction<any>, I>(reducer: R, initializerArg: I, initializer: (arg: I) => ReducerStateWithoutAction<R>): [Observable<ReducerStateWithoutAction<R>>, DispatchWithoutAction];
|
|
138
138
|
declare function useObservableReducer<R extends ReducerWithoutAction<any>>(reducer: R, initializerArg: ReducerStateWithoutAction<R>, initializer?: undefined): [Observable<ReducerStateWithoutAction<R>>, DispatchWithoutAction];
|
package/react.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as react from 'react';
|
|
2
|
-
import { ReactNode, ReactElement, FC, LegacyRef, ComponentClass, ReducerWithoutAction, ReducerStateWithoutAction, DispatchWithoutAction, Reducer, ReducerState, Dispatch, ReducerAction } from 'react';
|
|
2
|
+
import { ReactNode, ReactElement, FC, LegacyRef, ComponentClass, DependencyList, ReducerWithoutAction, ReducerStateWithoutAction, DispatchWithoutAction, Reducer, ReducerState, Dispatch, ReducerAction } from 'react';
|
|
3
3
|
import { ObservableParam, Observable, ObservableBoolean, Selector, RecursiveValueOrFunction, ObserveEvent, ObserveOptions, ObserveEventCallback } from '@legendapp/state';
|
|
4
4
|
|
|
5
5
|
declare function Computed({ children }: {
|
|
@@ -110,10 +110,10 @@ declare function reactiveObserver<T extends FC<any>>(component: T, bindKeys?: Bi
|
|
|
110
110
|
declare function reactiveObserver<T extends FC<any>, T2 extends keyof ExtractFCPropsType<T>>(component: T, bindKeys?: BindKeys<ExtractFCPropsType<T>>): T | FC<ShapeWithPick$<ExtractFCPropsType<T>, T2>>;
|
|
111
111
|
declare function reactiveComponents<P extends Record<string, FC>>(components: P): ObjectShapeWith$<P>;
|
|
112
112
|
|
|
113
|
-
declare function useComputed<T>(
|
|
114
|
-
declare function useComputed<T>(
|
|
115
|
-
declare function useComputed<T, T2 = T>(
|
|
116
|
-
declare function useComputed<T, T2 = T>(
|
|
113
|
+
declare function useComputed<T>(get: () => T | Promise<T>): Observable<T>;
|
|
114
|
+
declare function useComputed<T>(get: () => T | Promise<T>, deps: any[]): Observable<T>;
|
|
115
|
+
declare function useComputed<T, T2 = T>(get: (() => T | Promise<T>) | ObservableParam<T>, set: (value: T2) => void): Observable<T>;
|
|
116
|
+
declare function useComputed<T, T2 = T>(get: (() => T | Promise<T>) | ObservableParam<T>, set: (value: T2) => void, deps: any[]): Observable<T>;
|
|
117
117
|
|
|
118
118
|
declare const useEffectOnce: (effect: () => void | (() => void), deps: any[]) => void;
|
|
119
119
|
|
|
@@ -130,9 +130,9 @@ declare const useMountOnce: typeof useMount;
|
|
|
130
130
|
* @see https://www.legendapp.com/dev/state/react/#useObservable
|
|
131
131
|
*/
|
|
132
132
|
declare function useObservable<T>(): Observable<T | undefined>;
|
|
133
|
-
declare function useObservable<T>(value: Promise<RecursiveValueOrFunction<T>> | (() => RecursiveValueOrFunction<T>) | RecursiveValueOrFunction<T
|
|
134
|
-
declare function useObservable<T>(value: T): Observable<T>;
|
|
135
|
-
declare function useObservable<T>(value?: T): Observable<any>;
|
|
133
|
+
declare function useObservable<T>(value: Promise<RecursiveValueOrFunction<T>> | (() => RecursiveValueOrFunction<T>) | RecursiveValueOrFunction<T>, deps?: DependencyList): Observable<T>;
|
|
134
|
+
declare function useObservable<T>(value: T, deps?: DependencyList): Observable<T>;
|
|
135
|
+
declare function useObservable<T>(value?: T, deps?: DependencyList): Observable<any>;
|
|
136
136
|
|
|
137
137
|
declare function useObservableReducer<R extends ReducerWithoutAction<any>, I>(reducer: R, initializerArg: I, initializer: (arg: I) => ReducerStateWithoutAction<R>): [Observable<ReducerStateWithoutAction<R>>, DispatchWithoutAction];
|
|
138
138
|
declare function useObservableReducer<R extends ReducerWithoutAction<any>>(reducer: R, initializerArg: ReducerStateWithoutAction<R>, initializer?: undefined): [Observable<ReducerStateWithoutAction<R>>, DispatchWithoutAction];
|
package/react.js
CHANGED
|
@@ -111,15 +111,6 @@ function useSelector(selector, options) {
|
|
|
111
111
|
const { subscribe, getVersion, run } = selectorFn;
|
|
112
112
|
value = run(selector);
|
|
113
113
|
index_js.useSyncExternalStore(subscribe, getVersion, getVersion);
|
|
114
|
-
if (options == null ? void 0 : options.suspense) {
|
|
115
|
-
if (state.isPromise(value) || !value && state.isObservable(selector) && state.syncState(selector).isLoaded.get() === false) {
|
|
116
|
-
if (React__default.default.use) {
|
|
117
|
-
React__default.default.use(value);
|
|
118
|
-
} else {
|
|
119
|
-
throw value;
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
114
|
} catch (err) {
|
|
124
115
|
if ((process.env.NODE_ENV === "development" || process.env.NODE_ENV === "test") && ((_a = err == null ? void 0 : err.message) == null ? void 0 : _a.includes("Rendered more"))) {
|
|
125
116
|
console.warn(
|
|
@@ -128,6 +119,17 @@ function useSelector(selector, options) {
|
|
|
128
119
|
}
|
|
129
120
|
throw err;
|
|
130
121
|
}
|
|
122
|
+
if (options == null ? void 0 : options.suspense) {
|
|
123
|
+
const isProm = state.isPromise(value);
|
|
124
|
+
if (state.isPromise(value) || !value && state.isObservable(selector)) {
|
|
125
|
+
const vProm = isProm ? value : state.when(selector);
|
|
126
|
+
if (React__default.default.use) {
|
|
127
|
+
React__default.default.use(vProm);
|
|
128
|
+
} else {
|
|
129
|
+
throw vProm;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}
|
|
131
133
|
return value;
|
|
132
134
|
}
|
|
133
135
|
|
|
@@ -149,10 +151,10 @@ function createReactiveComponent(component, observe3, reactive2, bindKeys) {
|
|
|
149
151
|
if (component["__legend_proxied"])
|
|
150
152
|
return component;
|
|
151
153
|
let useForwardRef = false;
|
|
152
|
-
let
|
|
154
|
+
let useMemo4 = false;
|
|
153
155
|
let render = component;
|
|
154
156
|
if (ReactMemoSymbol && render["$$typeof"] === ReactMemoSymbol && render["type"]) {
|
|
155
|
-
|
|
157
|
+
useMemo4 = true;
|
|
156
158
|
render = render["type"];
|
|
157
159
|
}
|
|
158
160
|
if (ReactForwardRefSymbol && render["$$typeof"] === ReactForwardRefSymbol) {
|
|
@@ -233,7 +235,7 @@ function createReactiveComponent(component, observe3, reactive2, bindKeys) {
|
|
|
233
235
|
} else {
|
|
234
236
|
ret = proxy;
|
|
235
237
|
}
|
|
236
|
-
return observe3 ||
|
|
238
|
+
return observe3 || useMemo4 ? React.memo(ret) : ret;
|
|
237
239
|
}
|
|
238
240
|
function observer(component) {
|
|
239
241
|
return createReactiveComponent(component, true);
|
|
@@ -389,20 +391,33 @@ function Switch({
|
|
|
389
391
|
const child = children[useSelector(value)];
|
|
390
392
|
return (_b = child ? child() : (_a = children["default"]) == null ? void 0 : _a.call(children)) != null ? _b : null;
|
|
391
393
|
}
|
|
392
|
-
function
|
|
394
|
+
function useObservable(initialValue, deps) {
|
|
395
|
+
var _a;
|
|
396
|
+
const ref = React.useRef({});
|
|
397
|
+
ref.current.value = initialValue;
|
|
398
|
+
const depsObs$ = deps ? useObservable(deps) : void 0;
|
|
399
|
+
if (!((_a = ref.current) == null ? void 0 : _a.obs$)) {
|
|
400
|
+
const value = depsObs$ ? () => {
|
|
401
|
+
depsObs$.get();
|
|
402
|
+
return state.computeSelector(ref.current.value);
|
|
403
|
+
} : initialValue;
|
|
404
|
+
ref.current.obs$ = state.observable(value);
|
|
405
|
+
}
|
|
406
|
+
if (depsObs$) {
|
|
407
|
+
depsObs$.set(deps);
|
|
408
|
+
}
|
|
409
|
+
return ref.current.obs$;
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
// src/react/useComputed.ts
|
|
413
|
+
function useComputed(get, set, deps) {
|
|
393
414
|
if (!deps && state.isArray(set)) {
|
|
394
415
|
deps = set;
|
|
395
416
|
set = void 0;
|
|
396
417
|
}
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
return React.useMemo(
|
|
401
|
-
() => state.computed(
|
|
402
|
-
() => state.isFunction(ref.current.compute) ? ref.current.compute() : ref.current.compute,
|
|
403
|
-
set ? (value) => ref.current.set(value) : void 0
|
|
404
|
-
),
|
|
405
|
-
deps || []
|
|
418
|
+
return useObservable(
|
|
419
|
+
set ? state.linked({ get, set: ({ value }) => set(value) }) : get,
|
|
420
|
+
deps
|
|
406
421
|
);
|
|
407
422
|
}
|
|
408
423
|
var useEffectOnce = (effect, deps) => {
|
|
@@ -442,13 +457,6 @@ function useMount(fn) {
|
|
|
442
457
|
}, []);
|
|
443
458
|
}
|
|
444
459
|
var useMountOnce = useMount;
|
|
445
|
-
function useObservable(initialValue) {
|
|
446
|
-
const ref = React.useRef();
|
|
447
|
-
if (!ref.current) {
|
|
448
|
-
ref.current = state.observable(initialValue);
|
|
449
|
-
}
|
|
450
|
-
return ref.current;
|
|
451
|
-
}
|
|
452
460
|
|
|
453
461
|
// src/react/useIsMounted.ts
|
|
454
462
|
function useIsMounted() {
|
package/react.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { isFunction, isEmpty, observable, isPromise, isObservable,
|
|
1
|
+
import { isFunction, isEmpty, observable, isPromise, isObservable, when, computeSelector, isArray, isMap, isObservableValueReady, linked, observe, whenReady, internal, trackSelector, isPrimitive } from '@legendapp/state';
|
|
2
2
|
import React, { memo, forwardRef, createElement, useState, useContext, useMemo, useRef, useEffect, createContext, useCallback } from 'react';
|
|
3
3
|
import { useSyncExternalStore } from 'use-sync-external-store/shim/index.js';
|
|
4
4
|
|
|
@@ -105,15 +105,6 @@ function useSelector(selector, options) {
|
|
|
105
105
|
const { subscribe, getVersion, run } = selectorFn;
|
|
106
106
|
value = run(selector);
|
|
107
107
|
useSyncExternalStore(subscribe, getVersion, getVersion);
|
|
108
|
-
if (options == null ? void 0 : options.suspense) {
|
|
109
|
-
if (isPromise(value) || !value && isObservable(selector) && syncState(selector).isLoaded.get() === false) {
|
|
110
|
-
if (React.use) {
|
|
111
|
-
React.use(value);
|
|
112
|
-
} else {
|
|
113
|
-
throw value;
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
108
|
} catch (err) {
|
|
118
109
|
if ((process.env.NODE_ENV === "development" || process.env.NODE_ENV === "test") && ((_a = err == null ? void 0 : err.message) == null ? void 0 : _a.includes("Rendered more"))) {
|
|
119
110
|
console.warn(
|
|
@@ -122,6 +113,17 @@ function useSelector(selector, options) {
|
|
|
122
113
|
}
|
|
123
114
|
throw err;
|
|
124
115
|
}
|
|
116
|
+
if (options == null ? void 0 : options.suspense) {
|
|
117
|
+
const isProm = isPromise(value);
|
|
118
|
+
if (isPromise(value) || !value && isObservable(selector)) {
|
|
119
|
+
const vProm = isProm ? value : when(selector);
|
|
120
|
+
if (React.use) {
|
|
121
|
+
React.use(vProm);
|
|
122
|
+
} else {
|
|
123
|
+
throw vProm;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
125
127
|
return value;
|
|
126
128
|
}
|
|
127
129
|
|
|
@@ -143,10 +145,10 @@ function createReactiveComponent(component, observe3, reactive2, bindKeys) {
|
|
|
143
145
|
if (component["__legend_proxied"])
|
|
144
146
|
return component;
|
|
145
147
|
let useForwardRef = false;
|
|
146
|
-
let
|
|
148
|
+
let useMemo4 = false;
|
|
147
149
|
let render = component;
|
|
148
150
|
if (ReactMemoSymbol && render["$$typeof"] === ReactMemoSymbol && render["type"]) {
|
|
149
|
-
|
|
151
|
+
useMemo4 = true;
|
|
150
152
|
render = render["type"];
|
|
151
153
|
}
|
|
152
154
|
if (ReactForwardRefSymbol && render["$$typeof"] === ReactForwardRefSymbol) {
|
|
@@ -227,7 +229,7 @@ function createReactiveComponent(component, observe3, reactive2, bindKeys) {
|
|
|
227
229
|
} else {
|
|
228
230
|
ret = proxy;
|
|
229
231
|
}
|
|
230
|
-
return observe3 ||
|
|
232
|
+
return observe3 || useMemo4 ? memo(ret) : ret;
|
|
231
233
|
}
|
|
232
234
|
function observer(component) {
|
|
233
235
|
return createReactiveComponent(component, true);
|
|
@@ -383,20 +385,33 @@ function Switch({
|
|
|
383
385
|
const child = children[useSelector(value)];
|
|
384
386
|
return (_b = child ? child() : (_a = children["default"]) == null ? void 0 : _a.call(children)) != null ? _b : null;
|
|
385
387
|
}
|
|
386
|
-
function
|
|
388
|
+
function useObservable(initialValue, deps) {
|
|
389
|
+
var _a;
|
|
390
|
+
const ref = useRef({});
|
|
391
|
+
ref.current.value = initialValue;
|
|
392
|
+
const depsObs$ = deps ? useObservable(deps) : void 0;
|
|
393
|
+
if (!((_a = ref.current) == null ? void 0 : _a.obs$)) {
|
|
394
|
+
const value = depsObs$ ? () => {
|
|
395
|
+
depsObs$.get();
|
|
396
|
+
return computeSelector(ref.current.value);
|
|
397
|
+
} : initialValue;
|
|
398
|
+
ref.current.obs$ = observable(value);
|
|
399
|
+
}
|
|
400
|
+
if (depsObs$) {
|
|
401
|
+
depsObs$.set(deps);
|
|
402
|
+
}
|
|
403
|
+
return ref.current.obs$;
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
// src/react/useComputed.ts
|
|
407
|
+
function useComputed(get, set, deps) {
|
|
387
408
|
if (!deps && isArray(set)) {
|
|
388
409
|
deps = set;
|
|
389
410
|
set = void 0;
|
|
390
411
|
}
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
return useMemo(
|
|
395
|
-
() => computed(
|
|
396
|
-
() => isFunction(ref.current.compute) ? ref.current.compute() : ref.current.compute,
|
|
397
|
-
set ? (value) => ref.current.set(value) : void 0
|
|
398
|
-
),
|
|
399
|
-
deps || []
|
|
412
|
+
return useObservable(
|
|
413
|
+
set ? linked({ get, set: ({ value }) => set(value) }) : get,
|
|
414
|
+
deps
|
|
400
415
|
);
|
|
401
416
|
}
|
|
402
417
|
var useEffectOnce = (effect, deps) => {
|
|
@@ -436,13 +451,6 @@ function useMount(fn) {
|
|
|
436
451
|
}, []);
|
|
437
452
|
}
|
|
438
453
|
var useMountOnce = useMount;
|
|
439
|
-
function useObservable(initialValue) {
|
|
440
|
-
const ref = useRef();
|
|
441
|
-
if (!ref.current) {
|
|
442
|
-
ref.current = observable(initialValue);
|
|
443
|
-
}
|
|
444
|
-
return ref.current;
|
|
445
|
-
}
|
|
446
454
|
|
|
447
455
|
// src/react/useIsMounted.ts
|
|
448
456
|
function useIsMounted() {
|