@legendapp/state 3.0.0-beta.3 → 3.0.0-beta.30
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/.DS_Store +0 -0
- package/config/enableReactComponents.js +3 -1
- package/config/enableReactComponents.mjs +3 -1
- package/config/enableReactTracking.d.mts +2 -1
- package/config/enableReactTracking.d.ts +2 -1
- package/config/enableReactTracking.js +32 -13
- package/config/enableReactTracking.mjs +32 -13
- package/index.d.mts +33 -4
- package/index.d.ts +33 -4
- package/index.js +191 -29
- package/index.mjs +191 -29
- package/package.json +35 -1
- package/persist-plugins/async-storage.js +17 -9
- package/persist-plugins/async-storage.mjs +17 -9
- package/persist-plugins/expo-sqlite.d.mts +19 -0
- package/persist-plugins/expo-sqlite.d.ts +19 -0
- package/persist-plugins/expo-sqlite.js +72 -0
- package/persist-plugins/expo-sqlite.mjs +69 -0
- package/react-native.d.mts +4 -0
- package/react-native.d.ts +4 -0
- package/react-native.js +53 -0
- package/react-native.mjs +40 -0
- package/react-reactive/Components.d.mts +19 -0
- package/react-reactive/Components.d.ts +19 -0
- package/react-reactive/Components.js +53 -0
- package/react-reactive/Components.mjs +40 -0
- package/react-reactive/enableReactComponents.d.mts +3 -2
- package/react-reactive/enableReactComponents.d.ts +3 -2
- package/react-reactive/enableReactComponents.js +10 -3
- package/react-reactive/enableReactComponents.mjs +10 -3
- package/react-reactive/enableReactNativeComponents.d.mts +3 -20
- package/react-reactive/enableReactNativeComponents.d.ts +3 -20
- package/react-reactive/enableReactNativeComponents.js +8 -3
- package/react-reactive/enableReactNativeComponents.mjs +8 -3
- package/react-reactive/enableReactive.js +10 -3
- package/react-reactive/enableReactive.mjs +10 -3
- package/react-reactive/enableReactive.native.js +8 -3
- package/react-reactive/enableReactive.native.mjs +8 -3
- package/react-reactive/enableReactive.web.js +8 -3
- package/react-reactive/enableReactive.web.mjs +8 -3
- package/react-web.d.mts +6 -0
- package/react-web.d.ts +6 -0
- package/react-web.js +39 -0
- package/react-web.mjs +37 -0
- package/react.d.mts +41 -21
- package/react.d.ts +41 -21
- package/react.js +36 -23
- package/react.mjs +37 -25
- package/sync-plugins/crud.d.mts +24 -9
- package/sync-plugins/crud.d.ts +24 -9
- package/sync-plugins/crud.js +250 -116
- package/sync-plugins/crud.mjs +251 -117
- package/sync-plugins/firebase.d.mts +7 -3
- package/sync-plugins/firebase.d.ts +7 -3
- package/sync-plugins/firebase.js +4 -2
- package/sync-plugins/firebase.mjs +4 -2
- package/sync-plugins/keel.d.mts +12 -13
- package/sync-plugins/keel.d.ts +12 -13
- package/sync-plugins/keel.js +60 -52
- package/sync-plugins/keel.mjs +61 -48
- package/sync-plugins/supabase.d.mts +7 -3
- package/sync-plugins/supabase.d.ts +7 -3
- package/sync-plugins/supabase.js +90 -33
- package/sync-plugins/supabase.mjs +91 -34
- package/sync-plugins/tanstack-query.d.mts +3 -3
- package/sync-plugins/tanstack-query.d.ts +3 -3
- package/sync.d.mts +16 -8
- package/sync.d.ts +16 -8
- package/sync.js +324 -215
- package/sync.mjs +323 -215
- package/trace.js +5 -6
- package/trace.mjs +5 -6
- package/types/reactive-native.d.ts +19 -0
- package/types/reactive-web.d.ts +7 -0
package/react-web.d.ts
ADDED
package/react-web.js
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var state = require('@legendapp/state');
|
|
4
|
+
var react$1 = require('@legendapp/state/react');
|
|
5
|
+
var react = require('react');
|
|
6
|
+
|
|
7
|
+
// src/react-web/$React.tsx
|
|
8
|
+
var bindInfoOneWay = {
|
|
9
|
+
value: { handler: "onChange", getValue: (e) => e.target.value, defaultValue: "" }
|
|
10
|
+
};
|
|
11
|
+
var bindInfoInput = Object.assign(
|
|
12
|
+
{ checked: { handler: "onChange", getValue: (e) => e.target.checked } },
|
|
13
|
+
bindInfoOneWay
|
|
14
|
+
);
|
|
15
|
+
var binders = /* @__PURE__ */ new Map([
|
|
16
|
+
["input", bindInfoInput],
|
|
17
|
+
["textarea", bindInfoOneWay],
|
|
18
|
+
["select", bindInfoOneWay]
|
|
19
|
+
]);
|
|
20
|
+
var $React = new Proxy(
|
|
21
|
+
{},
|
|
22
|
+
{
|
|
23
|
+
get(target, p) {
|
|
24
|
+
if (!target[p]) {
|
|
25
|
+
const render = react.forwardRef((props, ref) => {
|
|
26
|
+
const propsOut = { ...props };
|
|
27
|
+
if (ref && (state.isFunction(ref) || !state.isEmpty(ref))) {
|
|
28
|
+
propsOut.ref = ref;
|
|
29
|
+
}
|
|
30
|
+
return react.createElement(p, propsOut);
|
|
31
|
+
});
|
|
32
|
+
target[p] = react$1.reactive(render, [], binders.get(p));
|
|
33
|
+
}
|
|
34
|
+
return target[p];
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
);
|
|
38
|
+
|
|
39
|
+
exports.$React = $React;
|
package/react-web.mjs
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { isFunction, isEmpty } from '@legendapp/state';
|
|
2
|
+
import { reactive } from '@legendapp/state/react';
|
|
3
|
+
import { forwardRef, createElement } from 'react';
|
|
4
|
+
|
|
5
|
+
// src/react-web/$React.tsx
|
|
6
|
+
var bindInfoOneWay = {
|
|
7
|
+
value: { handler: "onChange", getValue: (e) => e.target.value, defaultValue: "" }
|
|
8
|
+
};
|
|
9
|
+
var bindInfoInput = Object.assign(
|
|
10
|
+
{ checked: { handler: "onChange", getValue: (e) => e.target.checked } },
|
|
11
|
+
bindInfoOneWay
|
|
12
|
+
);
|
|
13
|
+
var binders = /* @__PURE__ */ new Map([
|
|
14
|
+
["input", bindInfoInput],
|
|
15
|
+
["textarea", bindInfoOneWay],
|
|
16
|
+
["select", bindInfoOneWay]
|
|
17
|
+
]);
|
|
18
|
+
var $React = new Proxy(
|
|
19
|
+
{},
|
|
20
|
+
{
|
|
21
|
+
get(target, p) {
|
|
22
|
+
if (!target[p]) {
|
|
23
|
+
const render = forwardRef((props, ref) => {
|
|
24
|
+
const propsOut = { ...props };
|
|
25
|
+
if (ref && (isFunction(ref) || !isEmpty(ref))) {
|
|
26
|
+
propsOut.ref = ref;
|
|
27
|
+
}
|
|
28
|
+
return createElement(p, propsOut);
|
|
29
|
+
});
|
|
30
|
+
target[p] = reactive(render, [], binders.get(p));
|
|
31
|
+
}
|
|
32
|
+
return target[p];
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
);
|
|
36
|
+
|
|
37
|
+
export { $React };
|
package/react.d.mts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import * as
|
|
2
|
-
import { ReactNode, ReactElement, FC, LegacyRef, DependencyList, ReducerWithoutAction, ReducerStateWithoutAction, DispatchWithoutAction, Reducer, ReducerState, Dispatch, ReducerAction, ComponentClass } from 'react';
|
|
3
|
-
import { ObservableParam, Observable, ObservableBoolean, Selector, RecursiveValueOrFunction, ObserveOptions, ObserveEvent, ObserveEventCallback } from '@legendapp/state';
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { ReactNode, ReactElement, FC, NamedExoticComponent, LegacyRef, DependencyList, ReducerWithoutAction, ReducerStateWithoutAction, DispatchWithoutAction, Reducer, ReducerState, Dispatch, ReducerAction, ComponentClass } from 'react';
|
|
3
|
+
import { ObservableParam, Observable, ObservableBoolean, Selector, GetOptions, RecursiveValueOrFunction, ObserveOptions, ObserveEvent, ObserveEventCallback } from '@legendapp/state';
|
|
4
4
|
|
|
5
5
|
declare function Computed({ children }: {
|
|
6
6
|
children: ObservableParam | (() => ReactNode);
|
|
@@ -22,11 +22,14 @@ declare function For<T, TProps>({ each, optimized: isOptimized, item, itemProps,
|
|
|
22
22
|
declare function usePauseProvider(): {
|
|
23
23
|
PauseProvider: ({ children }: {
|
|
24
24
|
children: ReactNode;
|
|
25
|
-
}) =>
|
|
25
|
+
}) => React.FunctionComponentElement<React.ProviderProps<ObservableBoolean>>;
|
|
26
26
|
isPaused$: ObservableBoolean;
|
|
27
27
|
};
|
|
28
28
|
|
|
29
|
-
declare const Memo:
|
|
29
|
+
declare const Memo: NamedExoticComponent<{
|
|
30
|
+
children: any;
|
|
31
|
+
scoped?: boolean;
|
|
32
|
+
}>;
|
|
30
33
|
|
|
31
34
|
interface IReactive {
|
|
32
35
|
}
|
|
@@ -43,7 +46,9 @@ interface PropsIfReady<T> {
|
|
|
43
46
|
interface PropsBase<T> {
|
|
44
47
|
else?: ReactNode | (() => ReactNode);
|
|
45
48
|
$value?: Observable<T>;
|
|
46
|
-
wrap?: FC
|
|
49
|
+
wrap?: FC<{
|
|
50
|
+
children: ReactNode;
|
|
51
|
+
}>;
|
|
47
52
|
children: ReactNode | ((value?: T) => ReactNode);
|
|
48
53
|
}
|
|
49
54
|
type Props<T> = PropsBase<T> & (PropsIf<T> | PropsIfReady<T>);
|
|
@@ -54,11 +59,11 @@ declare function Switch<T extends object>({ value, children, }: {
|
|
|
54
59
|
children: Partial<Record<keyof T | 'null' | 'undefined' | 'default', () => ReactNode>>;
|
|
55
60
|
}): ReactElement | null;
|
|
56
61
|
declare function Switch<T extends string | number | symbol>({ value, children, }: {
|
|
57
|
-
value?: Selector<T>;
|
|
62
|
+
value?: Selector<T | undefined | null>;
|
|
58
63
|
children: Partial<Record<T | 'null' | 'undefined' | 'default', () => ReactNode>>;
|
|
59
64
|
}): ReactElement | null;
|
|
60
65
|
declare function Switch<T extends boolean>({ value, children, }: {
|
|
61
|
-
value?: Selector<T>;
|
|
66
|
+
value?: Selector<T | undefined | null>;
|
|
62
67
|
children: Partial<Record<'false' | 'true' | 'null' | 'undefined' | 'default', () => ReactNode>>;
|
|
63
68
|
}): ReactElement | null;
|
|
64
69
|
declare function Switch<T>({ value, children, }: {
|
|
@@ -71,20 +76,20 @@ type ShapeWithNew$<T> = Partial<Omit<T, 'children'>> & {
|
|
|
71
76
|
} & {
|
|
72
77
|
children?: Selector<ReactNode>;
|
|
73
78
|
};
|
|
74
|
-
interface BindKey<P> {
|
|
75
|
-
handler?:
|
|
76
|
-
getValue?: (e: any) => any;
|
|
79
|
+
interface BindKey<P, K extends keyof P = keyof P> {
|
|
80
|
+
handler?: K;
|
|
81
|
+
getValue?: P[K] extends infer T ? T extends (...args: any) => any ? (params: Parameters<T>[0]) => any : (e: any) => any : (e: any) => any;
|
|
77
82
|
defaultValue?: any;
|
|
78
83
|
selector?: (propsOut: Record<string, any>, p: Observable<any>) => any;
|
|
79
84
|
}
|
|
80
|
-
type BindKeys<P = any> = Record<
|
|
85
|
+
type BindKeys<P = any, K extends keyof P = keyof P> = Partial<Record<K, BindKey<P>>>;
|
|
81
86
|
type FCReactiveObject<T> = {
|
|
82
87
|
[K in keyof T]: FC<ShapeWithNew$<T[K]>>;
|
|
83
88
|
};
|
|
84
89
|
type FCReactive<P, P2> = P & FC<ShapeWithNew$<P2> & {
|
|
85
90
|
ref?: LegacyRef<P> | undefined;
|
|
86
91
|
}>;
|
|
87
|
-
interface UseSelectorOptions {
|
|
92
|
+
interface UseSelectorOptions extends GetOptions {
|
|
88
93
|
suspense?: boolean;
|
|
89
94
|
skipCheck?: boolean;
|
|
90
95
|
}
|
|
@@ -99,13 +104,26 @@ type ObjectShapeWith$<T> = {
|
|
|
99
104
|
[K in keyof T]: T[K] extends FC<infer P> ? FC<ShapeWith$<P>> : T[K];
|
|
100
105
|
};
|
|
101
106
|
type ExtractFCPropsType<T> = T extends FC<infer P> ? P : never;
|
|
107
|
+
type ReactifyProps<T, K extends keyof T> = Omit<T, K> & {
|
|
108
|
+
[P in K]: Selector<T[P]>;
|
|
109
|
+
};
|
|
102
110
|
declare const hasSymbol: false | ((key: string) => symbol);
|
|
103
111
|
declare function observer<P extends FC<any>>(component: P): P;
|
|
104
|
-
declare function reactive<T extends
|
|
105
|
-
declare function reactive<T extends FC<
|
|
106
|
-
declare function
|
|
107
|
-
declare function
|
|
108
|
-
declare function
|
|
112
|
+
declare function reactive<T extends object>(component: React.ComponentClass<T>, keys: undefined | null, bindKeys?: BindKeys<T>): React.FC<ShapeWith$<T>>;
|
|
113
|
+
declare function reactive<T extends object>(component: React.FC<T>, keys: undefined | null, bindKeys?: BindKeys<T>): React.FC<ShapeWith$<T>>;
|
|
114
|
+
declare function reactive<T extends object>(component: React.ForwardRefExoticComponent<T>, keys: undefined | null, bindKeys?: BindKeys<T>): React.ForwardRefExoticComponent<ShapeWith$<T>>;
|
|
115
|
+
declare function reactive<T extends object, K extends keyof T>(component: React.FC<T>, keys: K[] | (keyof T)[], bindKeys?: BindKeys<T, K>): React.FC<ReactifyProps<T, K>>;
|
|
116
|
+
declare function reactive<T extends object, K extends keyof T>(component: React.ForwardRefExoticComponent<T>, keys: K[] | (keyof T)[], bindKeys?: BindKeys<T, K>): React.ForwardRefExoticComponent<ReactifyProps<T, K>>;
|
|
117
|
+
declare function reactive<T extends object>(component: React.ComponentClass<T>): React.ComponentClass<ShapeWith$<T>>;
|
|
118
|
+
declare function reactive<T extends object>(component: React.FC<T>): React.FC<ShapeWith$<T>>;
|
|
119
|
+
declare function reactive<T extends object>(component: React.ForwardRefExoticComponent<T>): React.ForwardRefExoticComponent<ShapeWith$<T>>;
|
|
120
|
+
declare function reactiveObserver<T extends object>(component: React.FC<T>, keys: undefined | null, bindKeys?: BindKeys<T>): React.FC<ShapeWith$<T>>;
|
|
121
|
+
declare function reactiveObserver<T extends object>(component: React.ForwardRefExoticComponent<T>, keys: undefined | null, bindKeys?: BindKeys<T>): React.ForwardRefExoticComponent<ShapeWith$<T>>;
|
|
122
|
+
declare function reactiveObserver<T extends object, K extends keyof T>(component: React.FC<T>, keys: K[] | (keyof T)[], bindKeys?: BindKeys<T, K>): React.FC<ReactifyProps<T, K>>;
|
|
123
|
+
declare function reactiveObserver<T extends object, K extends keyof T>(component: React.ForwardRefExoticComponent<T>, keys: K[] | (keyof T)[], bindKeys?: BindKeys<T, K>): React.ForwardRefExoticComponent<ReactifyProps<T, K>>;
|
|
124
|
+
declare function reactiveObserver<T extends object>(component: React.FC<T>): React.FC<ShapeWith$<T>>;
|
|
125
|
+
declare function reactiveObserver<T extends object>(component: React.ForwardRefExoticComponent<T>): React.ForwardRefExoticComponent<ShapeWith$<T>>;
|
|
126
|
+
declare function reactiveComponents<P extends Record<string, any>>(components: P): ObjectShapeWith$<P>;
|
|
109
127
|
|
|
110
128
|
declare function useComputed<T>(get: () => T | Promise<T>): Observable<T>;
|
|
111
129
|
declare function useComputed<T>(get: () => T | Promise<T>, deps: any[]): Observable<T>;
|
|
@@ -151,12 +169,14 @@ declare function useSelector<T>(selector: Selector<T>, options?: UseSelectorOpti
|
|
|
151
169
|
declare function useUnmount(fn: () => void): void;
|
|
152
170
|
declare const useUnmountOnce: typeof useUnmount;
|
|
153
171
|
|
|
154
|
-
declare function useWhen<T>(predicate: Selector<T
|
|
155
|
-
declare function
|
|
172
|
+
declare function useWhen<T>(predicate: Selector<T>): Promise<T>;
|
|
173
|
+
declare function useWhen<T, T2>(predicate: Selector<T>, effect: (value: T) => T2): Promise<T2>;
|
|
174
|
+
declare function useWhenReady<T>(predicate: Selector<T>): Promise<T>;
|
|
175
|
+
declare function useWhenReady<T, T2>(predicate: Selector<T>, effect: (value: T) => T2 | (() => T2)): Promise<T2>;
|
|
156
176
|
|
|
157
177
|
declare function configureReactive({ components, binders, }: {
|
|
158
178
|
components?: Record<string, FC | ComponentClass<any>>;
|
|
159
179
|
binders?: Record<string, BindKeys>;
|
|
160
180
|
}): void;
|
|
161
181
|
|
|
162
|
-
export { type BindKey, type BindKeys, Computed, type ExtractFCPropsType, type FCReactive, type FCReactiveObject, For, type IReactive, Memo, type ObjectShapeWith$, Reactive, type ShapeWith$, type ShapeWithNew$, type ShapeWithPick$, Show, Switch, type UseObserveOptions, type UseSelectorOptions, configureReactive, hasSymbol, observer, reactive, reactiveComponents, reactiveObserver, useComputed, useEffectOnce, useIsMounted, useMount, useMountOnce, useObservable, useObservableReducer, useObserve, useObserveEffect, usePauseProvider, useSelector, useUnmount, useUnmountOnce, useWhen, useWhenReady };
|
|
182
|
+
export { type BindKey, type BindKeys, Computed, type ExtractFCPropsType, type FCReactive, type FCReactiveObject, For, type IReactive, Memo, type ObjectShapeWith$, type ReactifyProps, Reactive, type ShapeWith$, type ShapeWithNew$, type ShapeWithPick$, Show, Switch, type UseObserveOptions, type UseSelectorOptions, configureReactive, hasSymbol, observer, reactive, reactiveComponents, reactiveObserver, useSelector as use$, useComputed, useEffectOnce, useIsMounted, useMount, useMountOnce, useObservable, useObservableReducer, useObserve, useObserveEffect, usePauseProvider, useSelector, useUnmount, useUnmountOnce, useWhen, useWhenReady };
|
package/react.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import * as
|
|
2
|
-
import { ReactNode, ReactElement, FC, LegacyRef, DependencyList, ReducerWithoutAction, ReducerStateWithoutAction, DispatchWithoutAction, Reducer, ReducerState, Dispatch, ReducerAction, ComponentClass } from 'react';
|
|
3
|
-
import { ObservableParam, Observable, ObservableBoolean, Selector, RecursiveValueOrFunction, ObserveOptions, ObserveEvent, ObserveEventCallback } from '@legendapp/state';
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { ReactNode, ReactElement, FC, NamedExoticComponent, LegacyRef, DependencyList, ReducerWithoutAction, ReducerStateWithoutAction, DispatchWithoutAction, Reducer, ReducerState, Dispatch, ReducerAction, ComponentClass } from 'react';
|
|
3
|
+
import { ObservableParam, Observable, ObservableBoolean, Selector, GetOptions, RecursiveValueOrFunction, ObserveOptions, ObserveEvent, ObserveEventCallback } from '@legendapp/state';
|
|
4
4
|
|
|
5
5
|
declare function Computed({ children }: {
|
|
6
6
|
children: ObservableParam | (() => ReactNode);
|
|
@@ -22,11 +22,14 @@ declare function For<T, TProps>({ each, optimized: isOptimized, item, itemProps,
|
|
|
22
22
|
declare function usePauseProvider(): {
|
|
23
23
|
PauseProvider: ({ children }: {
|
|
24
24
|
children: ReactNode;
|
|
25
|
-
}) =>
|
|
25
|
+
}) => React.FunctionComponentElement<React.ProviderProps<ObservableBoolean>>;
|
|
26
26
|
isPaused$: ObservableBoolean;
|
|
27
27
|
};
|
|
28
28
|
|
|
29
|
-
declare const Memo:
|
|
29
|
+
declare const Memo: NamedExoticComponent<{
|
|
30
|
+
children: any;
|
|
31
|
+
scoped?: boolean;
|
|
32
|
+
}>;
|
|
30
33
|
|
|
31
34
|
interface IReactive {
|
|
32
35
|
}
|
|
@@ -43,7 +46,9 @@ interface PropsIfReady<T> {
|
|
|
43
46
|
interface PropsBase<T> {
|
|
44
47
|
else?: ReactNode | (() => ReactNode);
|
|
45
48
|
$value?: Observable<T>;
|
|
46
|
-
wrap?: FC
|
|
49
|
+
wrap?: FC<{
|
|
50
|
+
children: ReactNode;
|
|
51
|
+
}>;
|
|
47
52
|
children: ReactNode | ((value?: T) => ReactNode);
|
|
48
53
|
}
|
|
49
54
|
type Props<T> = PropsBase<T> & (PropsIf<T> | PropsIfReady<T>);
|
|
@@ -54,11 +59,11 @@ declare function Switch<T extends object>({ value, children, }: {
|
|
|
54
59
|
children: Partial<Record<keyof T | 'null' | 'undefined' | 'default', () => ReactNode>>;
|
|
55
60
|
}): ReactElement | null;
|
|
56
61
|
declare function Switch<T extends string | number | symbol>({ value, children, }: {
|
|
57
|
-
value?: Selector<T>;
|
|
62
|
+
value?: Selector<T | undefined | null>;
|
|
58
63
|
children: Partial<Record<T | 'null' | 'undefined' | 'default', () => ReactNode>>;
|
|
59
64
|
}): ReactElement | null;
|
|
60
65
|
declare function Switch<T extends boolean>({ value, children, }: {
|
|
61
|
-
value?: Selector<T>;
|
|
66
|
+
value?: Selector<T | undefined | null>;
|
|
62
67
|
children: Partial<Record<'false' | 'true' | 'null' | 'undefined' | 'default', () => ReactNode>>;
|
|
63
68
|
}): ReactElement | null;
|
|
64
69
|
declare function Switch<T>({ value, children, }: {
|
|
@@ -71,20 +76,20 @@ type ShapeWithNew$<T> = Partial<Omit<T, 'children'>> & {
|
|
|
71
76
|
} & {
|
|
72
77
|
children?: Selector<ReactNode>;
|
|
73
78
|
};
|
|
74
|
-
interface BindKey<P> {
|
|
75
|
-
handler?:
|
|
76
|
-
getValue?: (e: any) => any;
|
|
79
|
+
interface BindKey<P, K extends keyof P = keyof P> {
|
|
80
|
+
handler?: K;
|
|
81
|
+
getValue?: P[K] extends infer T ? T extends (...args: any) => any ? (params: Parameters<T>[0]) => any : (e: any) => any : (e: any) => any;
|
|
77
82
|
defaultValue?: any;
|
|
78
83
|
selector?: (propsOut: Record<string, any>, p: Observable<any>) => any;
|
|
79
84
|
}
|
|
80
|
-
type BindKeys<P = any> = Record<
|
|
85
|
+
type BindKeys<P = any, K extends keyof P = keyof P> = Partial<Record<K, BindKey<P>>>;
|
|
81
86
|
type FCReactiveObject<T> = {
|
|
82
87
|
[K in keyof T]: FC<ShapeWithNew$<T[K]>>;
|
|
83
88
|
};
|
|
84
89
|
type FCReactive<P, P2> = P & FC<ShapeWithNew$<P2> & {
|
|
85
90
|
ref?: LegacyRef<P> | undefined;
|
|
86
91
|
}>;
|
|
87
|
-
interface UseSelectorOptions {
|
|
92
|
+
interface UseSelectorOptions extends GetOptions {
|
|
88
93
|
suspense?: boolean;
|
|
89
94
|
skipCheck?: boolean;
|
|
90
95
|
}
|
|
@@ -99,13 +104,26 @@ type ObjectShapeWith$<T> = {
|
|
|
99
104
|
[K in keyof T]: T[K] extends FC<infer P> ? FC<ShapeWith$<P>> : T[K];
|
|
100
105
|
};
|
|
101
106
|
type ExtractFCPropsType<T> = T extends FC<infer P> ? P : never;
|
|
107
|
+
type ReactifyProps<T, K extends keyof T> = Omit<T, K> & {
|
|
108
|
+
[P in K]: Selector<T[P]>;
|
|
109
|
+
};
|
|
102
110
|
declare const hasSymbol: false | ((key: string) => symbol);
|
|
103
111
|
declare function observer<P extends FC<any>>(component: P): P;
|
|
104
|
-
declare function reactive<T extends
|
|
105
|
-
declare function reactive<T extends FC<
|
|
106
|
-
declare function
|
|
107
|
-
declare function
|
|
108
|
-
declare function
|
|
112
|
+
declare function reactive<T extends object>(component: React.ComponentClass<T>, keys: undefined | null, bindKeys?: BindKeys<T>): React.FC<ShapeWith$<T>>;
|
|
113
|
+
declare function reactive<T extends object>(component: React.FC<T>, keys: undefined | null, bindKeys?: BindKeys<T>): React.FC<ShapeWith$<T>>;
|
|
114
|
+
declare function reactive<T extends object>(component: React.ForwardRefExoticComponent<T>, keys: undefined | null, bindKeys?: BindKeys<T>): React.ForwardRefExoticComponent<ShapeWith$<T>>;
|
|
115
|
+
declare function reactive<T extends object, K extends keyof T>(component: React.FC<T>, keys: K[] | (keyof T)[], bindKeys?: BindKeys<T, K>): React.FC<ReactifyProps<T, K>>;
|
|
116
|
+
declare function reactive<T extends object, K extends keyof T>(component: React.ForwardRefExoticComponent<T>, keys: K[] | (keyof T)[], bindKeys?: BindKeys<T, K>): React.ForwardRefExoticComponent<ReactifyProps<T, K>>;
|
|
117
|
+
declare function reactive<T extends object>(component: React.ComponentClass<T>): React.ComponentClass<ShapeWith$<T>>;
|
|
118
|
+
declare function reactive<T extends object>(component: React.FC<T>): React.FC<ShapeWith$<T>>;
|
|
119
|
+
declare function reactive<T extends object>(component: React.ForwardRefExoticComponent<T>): React.ForwardRefExoticComponent<ShapeWith$<T>>;
|
|
120
|
+
declare function reactiveObserver<T extends object>(component: React.FC<T>, keys: undefined | null, bindKeys?: BindKeys<T>): React.FC<ShapeWith$<T>>;
|
|
121
|
+
declare function reactiveObserver<T extends object>(component: React.ForwardRefExoticComponent<T>, keys: undefined | null, bindKeys?: BindKeys<T>): React.ForwardRefExoticComponent<ShapeWith$<T>>;
|
|
122
|
+
declare function reactiveObserver<T extends object, K extends keyof T>(component: React.FC<T>, keys: K[] | (keyof T)[], bindKeys?: BindKeys<T, K>): React.FC<ReactifyProps<T, K>>;
|
|
123
|
+
declare function reactiveObserver<T extends object, K extends keyof T>(component: React.ForwardRefExoticComponent<T>, keys: K[] | (keyof T)[], bindKeys?: BindKeys<T, K>): React.ForwardRefExoticComponent<ReactifyProps<T, K>>;
|
|
124
|
+
declare function reactiveObserver<T extends object>(component: React.FC<T>): React.FC<ShapeWith$<T>>;
|
|
125
|
+
declare function reactiveObserver<T extends object>(component: React.ForwardRefExoticComponent<T>): React.ForwardRefExoticComponent<ShapeWith$<T>>;
|
|
126
|
+
declare function reactiveComponents<P extends Record<string, any>>(components: P): ObjectShapeWith$<P>;
|
|
109
127
|
|
|
110
128
|
declare function useComputed<T>(get: () => T | Promise<T>): Observable<T>;
|
|
111
129
|
declare function useComputed<T>(get: () => T | Promise<T>, deps: any[]): Observable<T>;
|
|
@@ -151,12 +169,14 @@ declare function useSelector<T>(selector: Selector<T>, options?: UseSelectorOpti
|
|
|
151
169
|
declare function useUnmount(fn: () => void): void;
|
|
152
170
|
declare const useUnmountOnce: typeof useUnmount;
|
|
153
171
|
|
|
154
|
-
declare function useWhen<T>(predicate: Selector<T
|
|
155
|
-
declare function
|
|
172
|
+
declare function useWhen<T>(predicate: Selector<T>): Promise<T>;
|
|
173
|
+
declare function useWhen<T, T2>(predicate: Selector<T>, effect: (value: T) => T2): Promise<T2>;
|
|
174
|
+
declare function useWhenReady<T>(predicate: Selector<T>): Promise<T>;
|
|
175
|
+
declare function useWhenReady<T, T2>(predicate: Selector<T>, effect: (value: T) => T2 | (() => T2)): Promise<T2>;
|
|
156
176
|
|
|
157
177
|
declare function configureReactive({ components, binders, }: {
|
|
158
178
|
components?: Record<string, FC | ComponentClass<any>>;
|
|
159
179
|
binders?: Record<string, BindKeys>;
|
|
160
180
|
}): void;
|
|
161
181
|
|
|
162
|
-
export { type BindKey, type BindKeys, Computed, type ExtractFCPropsType, type FCReactive, type FCReactiveObject, For, type IReactive, Memo, type ObjectShapeWith$, Reactive, type ShapeWith$, type ShapeWithNew$, type ShapeWithPick$, Show, Switch, type UseObserveOptions, type UseSelectorOptions, configureReactive, hasSymbol, observer, reactive, reactiveComponents, reactiveObserver, useComputed, useEffectOnce, useIsMounted, useMount, useMountOnce, useObservable, useObservableReducer, useObserve, useObserveEffect, usePauseProvider, useSelector, useUnmount, useUnmountOnce, useWhen, useWhenReady };
|
|
182
|
+
export { type BindKey, type BindKeys, Computed, type ExtractFCPropsType, type FCReactive, type FCReactiveObject, For, type IReactive, Memo, type ObjectShapeWith$, type ReactifyProps, Reactive, type ShapeWith$, type ShapeWithNew$, type ShapeWithPick$, Show, Switch, type UseObserveOptions, type UseSelectorOptions, configureReactive, hasSymbol, observer, reactive, reactiveComponents, reactiveObserver, useSelector as use$, useComputed, useEffectOnce, useIsMounted, useMount, useMountOnce, useObservable, useObservableReducer, useObserve, useObserveEffect, usePauseProvider, useSelector, useUnmount, useUnmountOnce, useWhen, useWhenReady };
|
package/react.js
CHANGED
|
@@ -45,6 +45,7 @@ function createSelectorFunctions(options, isPaused$) {
|
|
|
45
45
|
} = state.trackSelector(
|
|
46
46
|
_selector,
|
|
47
47
|
_update,
|
|
48
|
+
options,
|
|
48
49
|
void 0,
|
|
49
50
|
void 0,
|
|
50
51
|
/*createResubscribe*/
|
|
@@ -100,12 +101,24 @@ function createSelectorFunctions(options, isPaused$) {
|
|
|
100
101
|
}
|
|
101
102
|
};
|
|
102
103
|
}
|
|
104
|
+
function doSuspense(selector) {
|
|
105
|
+
const vProm = state.when(selector);
|
|
106
|
+
if (React__default.default.use) {
|
|
107
|
+
React__default.default.use(vProm);
|
|
108
|
+
} else {
|
|
109
|
+
throw vProm;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
103
112
|
function useSelector(selector, options) {
|
|
104
113
|
var _a;
|
|
114
|
+
let value;
|
|
105
115
|
if (reactGlobals.inObserver && state.isObservable(selector) && !(options == null ? void 0 : options.suspense)) {
|
|
106
|
-
|
|
116
|
+
value = state.computeSelector(selector, options);
|
|
117
|
+
if ((options == null ? void 0 : options.suspense) && value === void 0) {
|
|
118
|
+
doSuspense(selector);
|
|
119
|
+
}
|
|
120
|
+
return value;
|
|
107
121
|
}
|
|
108
|
-
let value;
|
|
109
122
|
try {
|
|
110
123
|
const isPaused$ = React.useContext(getPauseContext());
|
|
111
124
|
const selectorFn = React.useMemo(() => createSelectorFunctions(options, isPaused$), []);
|
|
@@ -120,16 +133,8 @@ function useSelector(selector, options) {
|
|
|
120
133
|
}
|
|
121
134
|
throw err;
|
|
122
135
|
}
|
|
123
|
-
if (options == null ? void 0 : options.suspense) {
|
|
124
|
-
|
|
125
|
-
if (state.isPromise(value) || !value && state.isObservable(selector)) {
|
|
126
|
-
const vProm = isProm ? value : state.when(selector);
|
|
127
|
-
if (React__default.default.use) {
|
|
128
|
-
React__default.default.use(vProm);
|
|
129
|
-
} else {
|
|
130
|
-
throw vProm;
|
|
131
|
-
}
|
|
132
|
-
}
|
|
136
|
+
if ((options == null ? void 0 : options.suspense) && value === void 0) {
|
|
137
|
+
doSuspense(selector);
|
|
133
138
|
}
|
|
134
139
|
return value;
|
|
135
140
|
}
|
|
@@ -140,7 +145,7 @@ function Computed({ children }) {
|
|
|
140
145
|
}
|
|
141
146
|
var hasSymbol = typeof Symbol === "function" && Symbol.for;
|
|
142
147
|
var didWarnProps = false;
|
|
143
|
-
function createReactiveComponent(component, observe3, reactive2, bindKeys) {
|
|
148
|
+
function createReactiveComponent(component, observe3, reactive2, keysReactive, bindKeys) {
|
|
144
149
|
const ReactForwardRefSymbol = hasSymbol ? Symbol.for("react.forward_ref") : (
|
|
145
150
|
// eslint-disable-next-line react/display-name, @typescript-eslint/no-unused-vars
|
|
146
151
|
typeof React.forwardRef === "function" && React.forwardRef((props) => null)["$$typeof"]
|
|
@@ -165,6 +170,7 @@ function createReactiveComponent(component, observe3, reactive2, bindKeys) {
|
|
|
165
170
|
throw new Error(`[legend-state] \`render\` property of ForwardRef was not a function`);
|
|
166
171
|
}
|
|
167
172
|
}
|
|
173
|
+
const keysReactiveSet = keysReactive ? new Set(keysReactive) : void 0;
|
|
168
174
|
const proxyHandler = {
|
|
169
175
|
apply(target, thisArg, argArray) {
|
|
170
176
|
if (reactive2) {
|
|
@@ -174,9 +180,10 @@ function createReactiveComponent(component, observe3, reactive2, bindKeys) {
|
|
|
174
180
|
for (let i = 0; i < keys.length; i++) {
|
|
175
181
|
const key = keys[i];
|
|
176
182
|
const p = props[key];
|
|
183
|
+
const isReactiveKey = keysReactiveSet && keysReactiveSet.has(key);
|
|
177
184
|
if (key === "children" && (state.isFunction(p) || state.isObservable(p))) {
|
|
178
185
|
props[key] = useSelector(p, { skipCheck: true });
|
|
179
|
-
} else if (key.startsWith("$") || key.endsWith("$")) {
|
|
186
|
+
} else if (isReactiveKey || key.startsWith("$") || key.endsWith("$")) {
|
|
180
187
|
if (process.env.NODE_ENV === "development" && !didWarnProps && key.endsWith("$")) {
|
|
181
188
|
didWarnProps = true;
|
|
182
189
|
console.warn(
|
|
@@ -186,7 +193,7 @@ function createReactiveComponent(component, observe3, reactive2, bindKeys) {
|
|
|
186
193
|
)}. See https://legendapp.com/open-source/state/migrating for more details.`
|
|
187
194
|
);
|
|
188
195
|
}
|
|
189
|
-
const k = key.endsWith("$") ? key.slice(0, -1) : key.slice(1);
|
|
196
|
+
const k = isReactiveKey ? key : key.endsWith("$") ? key.slice(0, -1) : key.slice(1);
|
|
190
197
|
const bind = bindKeys == null ? void 0 : bindKeys[k];
|
|
191
198
|
const shouldBind = bind && state.isObservable(p);
|
|
192
199
|
propsOut[k] = shouldBind && (bind == null ? void 0 : bind.selector) ? bind.selector(propsOut, p) : useSelector(p);
|
|
@@ -204,7 +211,9 @@ function createReactiveComponent(component, observe3, reactive2, bindKeys) {
|
|
|
204
211
|
process.env.NODE_ENV === "development" ? handlerFn : React.useCallback(handlerFn, [props[bind.handler], bindKeys]);
|
|
205
212
|
}
|
|
206
213
|
}
|
|
207
|
-
|
|
214
|
+
if (!isReactiveKey) {
|
|
215
|
+
delete propsOut[key];
|
|
216
|
+
}
|
|
208
217
|
} else if (propsOut[key] === void 0) {
|
|
209
218
|
propsOut[key] = p;
|
|
210
219
|
}
|
|
@@ -241,11 +250,11 @@ function createReactiveComponent(component, observe3, reactive2, bindKeys) {
|
|
|
241
250
|
function observer(component) {
|
|
242
251
|
return createReactiveComponent(component, true);
|
|
243
252
|
}
|
|
244
|
-
function reactive(component, bindKeys) {
|
|
245
|
-
return createReactiveComponent(component, false, true, bindKeys);
|
|
253
|
+
function reactive(component, keys, bindKeys) {
|
|
254
|
+
return createReactiveComponent(component, false, true, keys, bindKeys);
|
|
246
255
|
}
|
|
247
|
-
function reactiveObserver(component, bindKeys) {
|
|
248
|
-
return createReactiveComponent(component, true, true, bindKeys);
|
|
256
|
+
function reactiveObserver(component, keys, bindKeys) {
|
|
257
|
+
return createReactiveComponent(component, true, true, keys, bindKeys);
|
|
249
258
|
}
|
|
250
259
|
function reactiveComponents(components) {
|
|
251
260
|
return new Proxy(
|
|
@@ -336,7 +345,10 @@ function For({
|
|
|
336
345
|
}
|
|
337
346
|
return out;
|
|
338
347
|
}
|
|
339
|
-
var Memo = React.memo(
|
|
348
|
+
var Memo = React.memo(
|
|
349
|
+
Computed,
|
|
350
|
+
(prev, next) => next.scoped ? prev.children === next.children : true
|
|
351
|
+
);
|
|
340
352
|
|
|
341
353
|
// src/react/configureReactive.ts
|
|
342
354
|
var ReactiveFns = /* @__PURE__ */ new Map();
|
|
@@ -371,7 +383,7 @@ var Reactive = new Proxy(
|
|
|
371
383
|
}
|
|
372
384
|
return React.createElement(Component, propsOut);
|
|
373
385
|
});
|
|
374
|
-
target[p] = reactive(render, ReactiveFnBinders.get(p));
|
|
386
|
+
target[p] = reactive(render, [], ReactiveFnBinders.get(p));
|
|
375
387
|
}
|
|
376
388
|
return target[p];
|
|
377
389
|
}
|
|
@@ -516,7 +528,7 @@ function useObserve(selector, reactionOrOptions, options) {
|
|
|
516
528
|
ref.current.reaction = reaction;
|
|
517
529
|
if (!ref.current.dispose) {
|
|
518
530
|
ref.current.dispose = state.observe(
|
|
519
|
-
(e) => state.computeSelector(ref.current.selector, e),
|
|
531
|
+
(e) => state.computeSelector(ref.current.selector, void 0, e),
|
|
520
532
|
(e) => {
|
|
521
533
|
var _a, _b;
|
|
522
534
|
return (_b = (_a = ref.current).reaction) == null ? void 0 : _b.call(_a, e);
|
|
@@ -578,6 +590,7 @@ exports.observer = observer;
|
|
|
578
590
|
exports.reactive = reactive;
|
|
579
591
|
exports.reactiveComponents = reactiveComponents;
|
|
580
592
|
exports.reactiveObserver = reactiveObserver;
|
|
593
|
+
exports.use$ = useSelector;
|
|
581
594
|
exports.useComputed = useComputed;
|
|
582
595
|
exports.useEffectOnce = useEffectOnce;
|
|
583
596
|
exports.useIsMounted = useIsMounted;
|