@ispb/react-lazy 0.0.4 → 0.0.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/dist/async.d.ts +44 -0
- package/dist/async.js +71 -0
- package/dist/async.js.map +1 -0
- package/dist/components.d.ts +9 -0
- package/dist/components.js +36 -0
- package/dist/components.js.map +1 -0
- package/dist/hoc.d.ts +18 -0
- package/dist/hoc.js +13 -0
- package/dist/hoc.js.map +1 -0
- package/dist/hooks.d.ts +18 -0
- package/dist/hooks.js +146 -0
- package/dist/hooks.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -0
- package/dist/internal.d.ts +4 -0
- package/dist/internal.js +20 -0
- package/dist/internal.js.map +1 -0
- package/dist/observable.d.ts +22 -0
- package/dist/observable.js +56 -0
- package/dist/observable.js.map +1 -0
- package/dist/state.d.ts +39 -0
- package/{src/state.ts → dist/state.js} +9 -48
- package/dist/state.js.map +1 -0
- package/dist/types.d.ts +64 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +4 -1
- package/.yarnrc.yml +0 -8
- package/src/async.tsx +0 -124
- package/src/components.tsx +0 -46
- package/src/hoc.tsx +0 -37
- package/src/hooks.ts +0 -155
- package/src/index.tsx +0 -9
- package/src/internal.ts +0 -21
- package/src/observable.tsx +0 -83
- package/src/types.tsx +0 -75
- package/tsconfig.json +0 -27
package/dist/async.d.ts
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { ReactNode } from "react";
|
|
2
|
+
import { ValueOrFactory } from "value-or-factory";
|
|
3
|
+
import { LazyHOCOptions } from "./hoc.js";
|
|
4
|
+
import { LazyState } from "./state.js";
|
|
5
|
+
import { LazyEvent, LazyOverrides } from "./types.js";
|
|
6
|
+
/**
|
|
7
|
+
* Options for the async hook.
|
|
8
|
+
* @typeParam D The data type.
|
|
9
|
+
*/
|
|
10
|
+
export interface AsyncLazyOptions<D> {
|
|
11
|
+
/**
|
|
12
|
+
* A promise or a function that returns a promise. This MUST be memoized - the function will re-run every time a new value is received.
|
|
13
|
+
*/
|
|
14
|
+
readonly promise: ValueOrFactory<PromiseLike<D>>;
|
|
15
|
+
/**
|
|
16
|
+
* Don't execute immediately.
|
|
17
|
+
*/
|
|
18
|
+
readonly defer?: AsyncLazyDefer<D> | undefined;
|
|
19
|
+
}
|
|
20
|
+
export interface AsyncLazyDefer<D> {
|
|
21
|
+
/**
|
|
22
|
+
* The initial value to provide.
|
|
23
|
+
*/
|
|
24
|
+
readonly initial: D;
|
|
25
|
+
}
|
|
26
|
+
export type AsyncLazyEvent<D> = LazyEvent<D> & {
|
|
27
|
+
readonly retry: Retry;
|
|
28
|
+
};
|
|
29
|
+
export declare function useAsyncLazy<D>(input: AsyncLazyOptions<D> | (() => PromiseLike<D>)): AsyncLazyEvent<D>;
|
|
30
|
+
export type AsyncLazyState<D> = LazyState<D> & {
|
|
31
|
+
readonly retry: Retry;
|
|
32
|
+
};
|
|
33
|
+
export interface AsyncifiedOptions<D, P> extends AsyncLazyOptions<D>, LazyHOCOptions<AsyncLazyState<D>, P> {
|
|
34
|
+
}
|
|
35
|
+
export declare function asyncified<I extends {}, D extends {}, P extends {}>(factory: (props: I) => AsyncifiedOptions<D, P>): (component: import("react").ComponentType<D & P>) => (props: I) => import("react").JSX.Element;
|
|
36
|
+
export type Retry = (suppressReload?: boolean | undefined) => void;
|
|
37
|
+
export interface AsyncifiedProps<D> extends AsyncLazyOptions<D> {
|
|
38
|
+
readonly children: ValueOrFactory<ReactNode, [D, AsyncLazyState<D>]>;
|
|
39
|
+
/**
|
|
40
|
+
* The lazy overrides.
|
|
41
|
+
*/
|
|
42
|
+
readonly overrides?: LazyOverrides | undefined;
|
|
43
|
+
}
|
|
44
|
+
export declare const Asyncified: <D>(props: AsyncifiedProps<D>) => import("react").JSX.Element;
|
package/dist/async.js
ADDED
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useCallback, useEffect, useState } from "react";
|
|
3
|
+
import { callOrGet } from "value-or-factory";
|
|
4
|
+
import { Lazy } from "./components.js";
|
|
5
|
+
import { lazified } from "./hoc.js";
|
|
6
|
+
import { useIsFirstMount } from "./internal.js";
|
|
7
|
+
export function useAsyncLazy(input) {
|
|
8
|
+
const options = typeof input === "function" ? { promise: input } : input;
|
|
9
|
+
const [event, setEvent] = useState(options.defer === undefined ? { status: "loading" } : { status: "fulfilled", value: options.defer.initial });
|
|
10
|
+
const run = useCallback(() => {
|
|
11
|
+
callOrGet(options.promise).then(value => {
|
|
12
|
+
setEvent({
|
|
13
|
+
status: "fulfilled",
|
|
14
|
+
value,
|
|
15
|
+
});
|
|
16
|
+
}, reason => {
|
|
17
|
+
setEvent({
|
|
18
|
+
status: "rejected",
|
|
19
|
+
reason,
|
|
20
|
+
});
|
|
21
|
+
});
|
|
22
|
+
}, [
|
|
23
|
+
options.promise
|
|
24
|
+
]);
|
|
25
|
+
const retry = useCallback((suppressReload = false) => {
|
|
26
|
+
if (!suppressReload) {
|
|
27
|
+
setEvent({
|
|
28
|
+
status: "loading"
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
run();
|
|
32
|
+
}, [
|
|
33
|
+
run
|
|
34
|
+
]);
|
|
35
|
+
const isFirstMount = useIsFirstMount();
|
|
36
|
+
useEffect(() => {
|
|
37
|
+
if (isFirstMount) {
|
|
38
|
+
if (options.defer !== undefined) {
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
setEvent({
|
|
44
|
+
status: "loading"
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
run();
|
|
48
|
+
}, [
|
|
49
|
+
run,
|
|
50
|
+
]);
|
|
51
|
+
return {
|
|
52
|
+
...event,
|
|
53
|
+
retry
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
export function asyncified(factory) {
|
|
57
|
+
return lazified((props) => {
|
|
58
|
+
const options = factory(props);
|
|
59
|
+
const event = useAsyncLazy(options);
|
|
60
|
+
return {
|
|
61
|
+
event,
|
|
62
|
+
passthrough: state => callOrGet(options.passthrough, { ...state, retry: event.retry }),
|
|
63
|
+
overrides: options.overrides,
|
|
64
|
+
};
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
export const Asyncified = (props) => {
|
|
68
|
+
const event = useAsyncLazy(props);
|
|
69
|
+
return _jsx(Lazy, { event: event, overrides: props.overrides, children: (value, state) => callOrGet(props.children, value, { ...state, retry: event.retry }) });
|
|
70
|
+
};
|
|
71
|
+
//# sourceMappingURL=async.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"async.js","sourceRoot":"","sources":["../src/async.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { ReactNode } from "react";
|
|
2
|
+
import { LazyState } from "./state.js";
|
|
3
|
+
import { LazyEvent, LazyOverrides } from "./types.js";
|
|
4
|
+
export interface LazyProps<D> {
|
|
5
|
+
readonly event: LazyEvent<D>;
|
|
6
|
+
readonly overrides?: LazyOverrides | undefined;
|
|
7
|
+
readonly children: ReactNode | ((value: D, state: LazyState<D>) => ReactNode);
|
|
8
|
+
}
|
|
9
|
+
export declare function Lazy<D>(props: LazyProps<D>): ReactNode;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { useContext } from "react";
|
|
2
|
+
import { LazyContext } from "./hooks.js";
|
|
3
|
+
import { useLazyState } from "./state.js";
|
|
4
|
+
export function Lazy(props) {
|
|
5
|
+
const context = useContext(LazyContext);
|
|
6
|
+
const options = { ...context, ...props.overrides };
|
|
7
|
+
const state = useLazyState(props.event);
|
|
8
|
+
if (state.isLoading && !state.isSettled) {
|
|
9
|
+
if (options.onLoading === undefined) {
|
|
10
|
+
return null;
|
|
11
|
+
}
|
|
12
|
+
return options.onLoading({
|
|
13
|
+
message: options.loadingMessage ?? options.defaultMessage
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
const onReloading = options.onReloading ?? ((props) => props.children);
|
|
17
|
+
return onReloading({
|
|
18
|
+
reloading: state.isLoading,
|
|
19
|
+
message: options.reloadingMessage ?? options.defaultMessage,
|
|
20
|
+
children: (() => {
|
|
21
|
+
if (state.isRejected) {
|
|
22
|
+
if (options.onError === undefined) {
|
|
23
|
+
throw state.reason;
|
|
24
|
+
}
|
|
25
|
+
return options.onError({
|
|
26
|
+
reason: state.reason,
|
|
27
|
+
message: options.errorMessage ?? options.defaultMessage,
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
return typeof props.children === "function" ? props.children(state.value, state) : props.children;
|
|
32
|
+
}
|
|
33
|
+
})()
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=components.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"components.js","sourceRoot":"","sources":["../src/components.tsx"],"names":[],"mappings":"AACA,OAAO,EAAgC,UAAU,EAAE,MAAM,OAAO,CAAA;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AACxC,OAAO,EAAa,YAAY,EAAE,MAAM,YAAY,CAAA;AAWpD,MAAM,UAAU,IAAI,CAAI,KAAmB;IACvC,MAAM,OAAO,GAAG,UAAU,CAAC,WAAW,CAAC,CAAA;IACvC,MAAM,OAAO,GAAG,EAAE,GAAG,OAAO,EAAE,GAAG,KAAK,CAAC,SAAS,EAAE,CAAA;IAClD,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;IACvC,IAAI,KAAK,CAAC,SAAS,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;QACtC,IAAI,OAAO,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YAClC,OAAO,IAAI,CAAA;QACf,CAAC;QACD,OAAO,OAAO,CAAC,SAAS,CAAC;YACrB,OAAO,EAAE,OAAO,CAAC,cAAc,IAAI,OAAO,CAAC,cAAc;SAC5D,CAAC,CAAA;IACN,CAAC;IACD,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,CAAC,CAAC,KAAwB,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;IACzF,OAAO,WAAW,CAAC;QACf,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,OAAO,EAAE,OAAO,CAAC,gBAAgB,IAAI,OAAO,CAAC,cAAc;QAC3D,QAAQ,EAAE,CAAC,GAAG,EAAE;YACZ,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;gBACnB,IAAI,OAAO,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;oBAChC,MAAM,KAAK,CAAC,MAAM,CAAA;gBACtB,CAAC;gBACD,OAAO,OAAO,CAAC,OAAO,CAAC;oBACnB,MAAM,EAAE,KAAK,CAAC,MAAM;oBACpB,OAAO,EAAE,OAAO,CAAC,YAAY,IAAI,OAAO,CAAC,cAAc;iBAC1D,CAAC,CAAA;YACN,CAAC;iBACI,CAAC;gBACF,OAAO,OAAO,KAAK,CAAC,QAAQ,KAAK,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAA;YACrG,CAAC;QACL,CAAC,CAAC,EAAE;KACP,CAAC,CAAA;AACN,CAAC"}
|
package/dist/hoc.d.ts
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { ComponentType } from "react";
|
|
2
|
+
import { ValueOrFactory } from "value-or-factory";
|
|
3
|
+
import { LazyState } from "./state.js";
|
|
4
|
+
import { LazyEvent, LazyOverrides } from "./types.js";
|
|
5
|
+
export interface LazyBuilder<D, P> extends LazyHOCOptions<LazyState<D>, P> {
|
|
6
|
+
readonly event: LazyEvent<D>;
|
|
7
|
+
}
|
|
8
|
+
export declare function lazified<I extends {}, D extends {}, P extends {}>(build: (props: I) => LazyBuilder<D, P>): (component: ComponentType<D & P>) => (props: I) => import("react").JSX.Element;
|
|
9
|
+
export interface LazyHOCOptions<S, P> {
|
|
10
|
+
/**
|
|
11
|
+
* Properties to pass through to the component.
|
|
12
|
+
*/
|
|
13
|
+
readonly passthrough: ValueOrFactory<P, [S]>;
|
|
14
|
+
/**
|
|
15
|
+
* Overrides for lazy settings.
|
|
16
|
+
*/
|
|
17
|
+
readonly overrides?: LazyOverrides | undefined;
|
|
18
|
+
}
|
package/dist/hoc.js
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { createElement } from "react";
|
|
3
|
+
import { callOrGet } from "value-or-factory";
|
|
4
|
+
import { Lazy } from "./components.js";
|
|
5
|
+
export function lazified(build) {
|
|
6
|
+
return (component) => {
|
|
7
|
+
return (props) => {
|
|
8
|
+
const built = build(props);
|
|
9
|
+
return _jsx(Lazy, { event: built.event, overrides: built.overrides, children: (value, state) => createElement(component, { ...callOrGet(built.passthrough, state), ...value }) });
|
|
10
|
+
};
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=hoc.js.map
|
package/dist/hoc.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hoc.js","sourceRoot":"","sources":["../src/hoc.tsx"],"names":[],"mappings":";AACA,OAAO,EAAiB,aAAa,EAAE,MAAM,OAAO,CAAA;AACpD,OAAO,EAAE,SAAS,EAAkB,MAAM,kBAAkB,CAAA;AAC5D,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAUtC,MAAM,UAAU,QAAQ,CAA2C,KAAsC;IACrG,OAAO,CAAC,SAA+B,EAAE,EAAE;QACvC,OAAO,CAAC,KAAQ,EAAE,EAAE;YAChB,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAA;YAC1B,OAAO,KAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,KAAK,EAC3B,SAAS,EAAE,KAAK,CAAC,SAAS,EAC1B,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,aAAa,CAAC,SAAS,EAAE,EAAE,GAAG,SAAS,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,EAAE,GAAG,KAAK,EAAE,CAAC,GAAI,CAAA;QACtH,CAAC,CAAA;IACL,CAAC,CAAA;AACL,CAAC"}
|
package/dist/hooks.d.ts
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Observable, Subject } from "rxjs";
|
|
2
|
+
import { ExtractLazy, LazyEvent, LazyFulfilled, LazyLoading, LazyRejected } from "./types.js";
|
|
3
|
+
export declare const LazyContext: import("react").Context<Partial<import("./types.js").LazyOptions>>;
|
|
4
|
+
export declare function isLoading<T>(event: LazyEvent<T>): event is LazyLoading;
|
|
5
|
+
export declare function isFulfilled<T>(event: LazyEvent<T>): event is LazyFulfilled<T>;
|
|
6
|
+
export declare function isRejected<T>(event: LazyEvent<T>): event is LazyRejected;
|
|
7
|
+
export declare function useLazyFlatten<O>(event: LazyEvent<LazyEvent<O>>): LazyEvent<O>;
|
|
8
|
+
export declare function useLazyChain<I, O>(event: LazyEvent<I>, map: (value: I) => LazyEvent<O>): LazyEvent<O>;
|
|
9
|
+
export declare function useLazyMap<I, O>(event: LazyEvent<I>, map: (value: I) => O): LazyLoading | LazyRejected | {
|
|
10
|
+
status: "fulfilled";
|
|
11
|
+
value: O;
|
|
12
|
+
};
|
|
13
|
+
export declare function useObservableAsPromise<T>(observable: Observable<T>): Promise<T>;
|
|
14
|
+
export declare function useLazyAsPromise<T>(event: LazyEvent<T>): Promise<T>;
|
|
15
|
+
export declare function useLazyAsObservable<T>(event: LazyEvent<T>): Subject<T>;
|
|
16
|
+
export declare function useLazyCombine<T extends Record<string, LazyEvent<unknown>>>(lazies: T): LazyEvent<{
|
|
17
|
+
[K in keyof T]: ExtractLazy<T[K]>;
|
|
18
|
+
}>;
|
package/dist/hooks.js
ADDED
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import pDefer from "p-defer";
|
|
2
|
+
import { createContext, useEffect, useMemo, useState } from "react";
|
|
3
|
+
import { Subject } from "rxjs";
|
|
4
|
+
import { useIsFirstMount } from "./internal.js";
|
|
5
|
+
export const LazyContext = createContext({});
|
|
6
|
+
export function isLoading(event) {
|
|
7
|
+
if (event.status === "loading") {
|
|
8
|
+
return true;
|
|
9
|
+
}
|
|
10
|
+
else {
|
|
11
|
+
return false;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
export function isFulfilled(event) {
|
|
15
|
+
if (event.status === "fulfilled") {
|
|
16
|
+
return true;
|
|
17
|
+
}
|
|
18
|
+
else {
|
|
19
|
+
return false;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
export function isRejected(event) {
|
|
23
|
+
if (event.status === "rejected") {
|
|
24
|
+
return true;
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
return false;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
export function useLazyFlatten(event) {
|
|
31
|
+
return useLazyChain(event, event => event);
|
|
32
|
+
}
|
|
33
|
+
export function useLazyChain(event, map) {
|
|
34
|
+
return useMemo(() => {
|
|
35
|
+
if (event.status === "fulfilled") {
|
|
36
|
+
return map(event.value);
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
return event;
|
|
40
|
+
}
|
|
41
|
+
}, [
|
|
42
|
+
event
|
|
43
|
+
]);
|
|
44
|
+
}
|
|
45
|
+
export function useLazyMap(event, map) {
|
|
46
|
+
return useMemo(() => {
|
|
47
|
+
if (event.status === "fulfilled") {
|
|
48
|
+
return {
|
|
49
|
+
status: "fulfilled",
|
|
50
|
+
value: map(event.value)
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
return event;
|
|
55
|
+
}
|
|
56
|
+
}, [
|
|
57
|
+
event
|
|
58
|
+
]);
|
|
59
|
+
}
|
|
60
|
+
export function useObservableAsPromise(observable) {
|
|
61
|
+
const [promise, setPromise] = useState(() => pDefer());
|
|
62
|
+
const isFirstMount = useIsFirstMount();
|
|
63
|
+
useEffect(() => {
|
|
64
|
+
if (!isFirstMount) {
|
|
65
|
+
setPromise(pDefer());
|
|
66
|
+
}
|
|
67
|
+
}, [
|
|
68
|
+
observable
|
|
69
|
+
]);
|
|
70
|
+
useEffect(() => {
|
|
71
|
+
const sub = observable.subscribe({
|
|
72
|
+
next: value => {
|
|
73
|
+
promise.resolve(value);
|
|
74
|
+
},
|
|
75
|
+
error: reason => {
|
|
76
|
+
promise.reject(reason);
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
return () => {
|
|
80
|
+
sub.unsubscribe();
|
|
81
|
+
};
|
|
82
|
+
}, [
|
|
83
|
+
promise
|
|
84
|
+
]);
|
|
85
|
+
return promise.promise;
|
|
86
|
+
}
|
|
87
|
+
export function useLazyAsPromise(event) {
|
|
88
|
+
const [promise, setPromise] = useState(() => pDefer());
|
|
89
|
+
useEffect(() => {
|
|
90
|
+
if (event.status === "fulfilled") {
|
|
91
|
+
promise.resolve(event.value);
|
|
92
|
+
}
|
|
93
|
+
else if (event.status === "rejected") {
|
|
94
|
+
promise.reject(event.reason);
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
setPromise(pDefer());
|
|
98
|
+
}
|
|
99
|
+
}, [
|
|
100
|
+
event
|
|
101
|
+
]);
|
|
102
|
+
return promise.promise;
|
|
103
|
+
}
|
|
104
|
+
export function useLazyAsObservable(event) {
|
|
105
|
+
const subject = useMemo(() => new Subject(), []);
|
|
106
|
+
useEffect(() => {
|
|
107
|
+
if (event.status === "fulfilled") {
|
|
108
|
+
subject.next(event.value);
|
|
109
|
+
}
|
|
110
|
+
else if (event.status === "rejected") {
|
|
111
|
+
subject.error(event.reason);
|
|
112
|
+
}
|
|
113
|
+
}, [
|
|
114
|
+
event
|
|
115
|
+
]);
|
|
116
|
+
return subject;
|
|
117
|
+
}
|
|
118
|
+
export function useLazyCombine(lazies) {
|
|
119
|
+
const entries = Object.entries(lazies);
|
|
120
|
+
if (entries.map(entry => entry[1]).some(isLoading)) {
|
|
121
|
+
return {
|
|
122
|
+
status: "loading",
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
const failed = entries.map(entry => entry[1]).filter(isRejected).at(0);
|
|
127
|
+
if (failed !== undefined) {
|
|
128
|
+
return {
|
|
129
|
+
status: "rejected",
|
|
130
|
+
reason: failed
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
else {
|
|
134
|
+
return {
|
|
135
|
+
status: "fulfilled",
|
|
136
|
+
value: Object.fromEntries(entries.map(([key, value]) => {
|
|
137
|
+
return [
|
|
138
|
+
key,
|
|
139
|
+
value.status === "fulfilled" ? value.value : undefined,
|
|
140
|
+
];
|
|
141
|
+
}))
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
//# sourceMappingURL=hooks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"AACA,cAAc,YAAY,CAAA;AAC1B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,UAAU,CAAA;AACxB,cAAc,YAAY,CAAA;AAC1B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA"}
|
package/dist/internal.js
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { useRef } from "react";
|
|
2
|
+
export function useIsFirstMount() {
|
|
3
|
+
const isFirst = useRef(true);
|
|
4
|
+
if (isFirst.current) {
|
|
5
|
+
isFirst.current = false;
|
|
6
|
+
return true;
|
|
7
|
+
}
|
|
8
|
+
return isFirst.current;
|
|
9
|
+
}
|
|
10
|
+
export function usePrevious(value) {
|
|
11
|
+
const previous = useRef(value?.current);
|
|
12
|
+
const first = useIsFirstMount();
|
|
13
|
+
if (!first) {
|
|
14
|
+
if (value !== undefined) {
|
|
15
|
+
previous.current = value.current;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
return previous.current;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=internal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"internal.js","sourceRoot":"","sources":["../src/internal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAA;AAE9B,MAAM,UAAU,eAAe;IAC3B,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,CAAA;IAC5B,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QAClB,OAAO,CAAC,OAAO,GAAG,KAAK,CAAA;QACvB,OAAO,IAAI,CAAA;IACf,CAAC;IACD,OAAO,OAAO,CAAC,OAAO,CAAA;AAC1B,CAAC;AAED,MAAM,UAAU,WAAW,CAAI,KAA0C;IACrE,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;IACvC,MAAM,KAAK,GAAG,eAAe,EAAE,CAAA;IAC/B,IAAI,CAAC,KAAK,EAAE,CAAC;QACT,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACtB,QAAQ,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAA;QACpC,CAAC;IACL,CAAC;IACD,OAAO,QAAQ,CAAC,OAAO,CAAA;AAC3B,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { ReactNode } from "react";
|
|
2
|
+
import { Observable, ObservedValueOf } from "rxjs";
|
|
3
|
+
import { LazyHOCOptions } from "./hoc.js";
|
|
4
|
+
import { LazyState } from "./state.js";
|
|
5
|
+
import { LazyEvent, LazyOverrides } from "./types.js";
|
|
6
|
+
export type ObservableLazyInput = Observable<any>;
|
|
7
|
+
export type ObservableLazyOutput<X extends ObservableLazyInput> = X extends Observable<any> ? ObservedValueOf<X> : {
|
|
8
|
+
[K in keyof X]: ObservedValueOf<X[K]>;
|
|
9
|
+
};
|
|
10
|
+
export interface ObservableLazyOptions<D> {
|
|
11
|
+
readonly of: Observable<D>;
|
|
12
|
+
}
|
|
13
|
+
export declare function useObservableLazyWrapped<D>(options: ObservableLazyOptions<LazyEvent<D>>): LazyEvent<D>;
|
|
14
|
+
export declare function useObservableLazy<D>(options: ObservableLazyOptions<D>): LazyEvent<D>;
|
|
15
|
+
export interface ObservingOptions<D, P> extends ObservableLazyOptions<D>, LazyHOCOptions<LazyState<D>, P> {
|
|
16
|
+
}
|
|
17
|
+
export declare function observing<I extends {}, D extends {}, P extends {}>(factory: (props: I) => ObservingOptions<D, P>): (component: import("react").ComponentType<D & P>) => (props: I) => import("react").JSX.Element;
|
|
18
|
+
export interface ObservingProps<D> extends ObservableLazyOptions<D> {
|
|
19
|
+
readonly children: (value: D, state: LazyState<D>) => ReactNode;
|
|
20
|
+
readonly overrides?: LazyOverrides | undefined;
|
|
21
|
+
}
|
|
22
|
+
export declare const Observing: <D>(props: ObservingProps<D>) => import("react").JSX.Element;
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect, useState } from "react";
|
|
3
|
+
import { Lazy } from "./components.js";
|
|
4
|
+
import { lazified } from "./hoc.js";
|
|
5
|
+
import { useLazyFlatten } from "./hooks.js";
|
|
6
|
+
import { useIsFirstMount } from "./internal.js";
|
|
7
|
+
export function useObservableLazyWrapped(options) {
|
|
8
|
+
return useLazyFlatten(useObservableLazy(options));
|
|
9
|
+
}
|
|
10
|
+
export function useObservableLazy(options) {
|
|
11
|
+
const [event, setEvent] = useState({ status: "loading" });
|
|
12
|
+
const isFirstMount = useIsFirstMount();
|
|
13
|
+
useEffect(() => {
|
|
14
|
+
if (!isFirstMount) {
|
|
15
|
+
setEvent({
|
|
16
|
+
status: "loading"
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
const sub = options.of.subscribe({
|
|
20
|
+
next: value => {
|
|
21
|
+
setEvent({
|
|
22
|
+
status: "fulfilled",
|
|
23
|
+
value
|
|
24
|
+
});
|
|
25
|
+
},
|
|
26
|
+
error: reason => {
|
|
27
|
+
setEvent({
|
|
28
|
+
status: "rejected",
|
|
29
|
+
reason
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
return () => {
|
|
34
|
+
sub.unsubscribe();
|
|
35
|
+
};
|
|
36
|
+
}, [
|
|
37
|
+
options.of
|
|
38
|
+
]);
|
|
39
|
+
return event;
|
|
40
|
+
}
|
|
41
|
+
export function observing(factory) {
|
|
42
|
+
return lazified((props) => {
|
|
43
|
+
const options = factory(props);
|
|
44
|
+
const event = useObservableLazy(options);
|
|
45
|
+
return {
|
|
46
|
+
event,
|
|
47
|
+
passthrough: options.passthrough,
|
|
48
|
+
overrides: options.overrides,
|
|
49
|
+
};
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
export const Observing = (props) => {
|
|
53
|
+
const event = useObservableLazy(props);
|
|
54
|
+
return _jsx(Lazy, { event: event, overrides: props.overrides, children: props.children });
|
|
55
|
+
};
|
|
56
|
+
//# sourceMappingURL=observable.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"observable.js","sourceRoot":"","sources":["../src/observable.tsx"],"names":[],"mappings":";AACA,OAAO,EAAa,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAEtD,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AACtC,OAAO,EAAkB,QAAQ,EAAE,MAAM,UAAU,CAAA;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAa/C,MAAM,UAAU,wBAAwB,CAAI,OAA4C;IACpF,OAAO,cAAc,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAA;AACrD,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAI,OAAiC;IAClE,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAe,EAAE,MAAM,EAAE,SAAkB,EAAE,CAAC,CAAA;IAChF,MAAM,YAAY,GAAG,eAAe,EAAE,CAAA;IACtC,SAAS,CAAC,GAAG,EAAE;QACX,IAAI,CAAC,YAAY,EAAE,CAAC;YAChB,QAAQ,CAAC;gBACL,MAAM,EAAE,SAAS;aACpB,CAAC,CAAA;QACN,CAAC;QACD,MAAM,GAAG,GAAG,OAAO,CAAC,EAAE,CAAC,SAAS,CAAC;YAC7B,IAAI,EAAE,KAAK,CAAC,EAAE;gBACV,QAAQ,CAAC;oBACL,MAAM,EAAE,WAAW;oBACnB,KAAK;iBACR,CAAC,CAAA;YACN,CAAC;YACD,KAAK,EAAE,MAAM,CAAC,EAAE;gBACZ,QAAQ,CAAC;oBACL,MAAM,EAAE,UAAU;oBAClB,MAAM;iBACT,CAAC,CAAA;YACN,CAAC;SACJ,CAAC,CAAA;QACF,OAAO,GAAG,EAAE;YACR,GAAG,CAAC,WAAW,EAAE,CAAA;QACrB,CAAC,CAAA;IACL,CAAC,EAAE;QACC,OAAO,CAAC,EAAE;KACb,CAAC,CAAA;IACF,OAAO,KAAK,CAAA;AAChB,CAAC;AAKD,MAAM,UAAU,SAAS,CAA2C,OAA6C;IAC7G,OAAO,QAAQ,CAAC,CAAC,KAAQ,EAAE,EAAE;QACzB,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAA;QAC9B,MAAM,KAAK,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAA;QACxC,OAAO;YACH,KAAK;YACL,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,SAAS,EAAE,OAAO,CAAC,SAAS;SAC/B,CAAA;IACL,CAAC,CAAC,CAAA;AACN,CAAC;AASD,MAAM,CAAC,MAAM,SAAS,GAAG,CAAK,KAAwB,EAAE,EAAE;IACtD,MAAM,KAAK,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAA;IACtC,OAAO,KAAC,IAAI,IAAC,KAAK,EAAE,KAAK,EACrB,SAAS,EAAE,KAAK,CAAC,SAAS,EAC1B,QAAQ,EAAE,KAAK,CAAC,QAAQ,GAAI,CAAA;AACpC,CAAC,CAAA"}
|
package/dist/state.d.ts
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { LazyEvent } from "./types.js";
|
|
2
|
+
export type LazyState<D> = {
|
|
3
|
+
readonly isLoading: true;
|
|
4
|
+
readonly isReloading: false;
|
|
5
|
+
readonly isSettled: false;
|
|
6
|
+
readonly isFulfilled: false;
|
|
7
|
+
readonly isRejected: false;
|
|
8
|
+
} | {
|
|
9
|
+
readonly isLoading: true;
|
|
10
|
+
readonly isReloading: true;
|
|
11
|
+
readonly isSettled: true;
|
|
12
|
+
readonly isFulfilled: true;
|
|
13
|
+
readonly isRejected: false;
|
|
14
|
+
readonly value: D;
|
|
15
|
+
} | {
|
|
16
|
+
readonly isLoading: true;
|
|
17
|
+
readonly isReloading: true;
|
|
18
|
+
readonly isSettled: true;
|
|
19
|
+
readonly isFulfilled: false;
|
|
20
|
+
readonly isRejected: true;
|
|
21
|
+
readonly reason: unknown;
|
|
22
|
+
readonly retry?: (() => void) | undefined;
|
|
23
|
+
} | {
|
|
24
|
+
readonly isLoading: false;
|
|
25
|
+
readonly isReloading: false;
|
|
26
|
+
readonly isSettled: true;
|
|
27
|
+
readonly isFulfilled: true;
|
|
28
|
+
readonly isRejected: false;
|
|
29
|
+
readonly value: D;
|
|
30
|
+
} | {
|
|
31
|
+
readonly isLoading: false;
|
|
32
|
+
readonly isReloading: false;
|
|
33
|
+
readonly isSettled: true;
|
|
34
|
+
readonly isFulfilled: false;
|
|
35
|
+
readonly isRejected: true;
|
|
36
|
+
readonly reason: unknown;
|
|
37
|
+
readonly retry?: (() => void) | undefined;
|
|
38
|
+
};
|
|
39
|
+
export declare function useLazyState<D>(current: LazyEvent<D>): LazyState<D>;
|
|
@@ -1,46 +1,6 @@
|
|
|
1
|
-
import { usePrevious } from "./internal.js"
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
export type LazyState<D> = {
|
|
5
|
-
readonly isLoading: true
|
|
6
|
-
readonly isReloading: false
|
|
7
|
-
readonly isSettled: false
|
|
8
|
-
readonly isFulfilled: false
|
|
9
|
-
readonly isRejected: false
|
|
10
|
-
} | {
|
|
11
|
-
readonly isLoading: true
|
|
12
|
-
readonly isReloading: true
|
|
13
|
-
readonly isSettled: true
|
|
14
|
-
readonly isFulfilled: true
|
|
15
|
-
readonly isRejected: false
|
|
16
|
-
readonly value: D
|
|
17
|
-
} | {
|
|
18
|
-
readonly isLoading: true
|
|
19
|
-
readonly isReloading: true
|
|
20
|
-
readonly isSettled: true
|
|
21
|
-
readonly isFulfilled: false
|
|
22
|
-
readonly isRejected: true
|
|
23
|
-
readonly reason: unknown
|
|
24
|
-
readonly retry?: (() => void) | undefined
|
|
25
|
-
} | {
|
|
26
|
-
readonly isLoading: false
|
|
27
|
-
readonly isReloading: false
|
|
28
|
-
readonly isSettled: true
|
|
29
|
-
readonly isFulfilled: true
|
|
30
|
-
readonly isRejected: false
|
|
31
|
-
readonly value: D
|
|
32
|
-
} | {
|
|
33
|
-
readonly isLoading: false
|
|
34
|
-
readonly isReloading: false
|
|
35
|
-
readonly isSettled: true
|
|
36
|
-
readonly isFulfilled: false
|
|
37
|
-
readonly isRejected: true
|
|
38
|
-
readonly reason: unknown
|
|
39
|
-
readonly retry?: (() => void) | undefined
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
export function useLazyState<D>(current: LazyEvent<D>): LazyState<D> {
|
|
43
|
-
const settled = usePrevious<LazySettled<D>>(current.status === "fulfilled" || current.status === "rejected" ? { current } : undefined)
|
|
1
|
+
import { usePrevious } from "./internal.js";
|
|
2
|
+
export function useLazyState(current) {
|
|
3
|
+
const settled = usePrevious(current.status === "fulfilled" || current.status === "rejected" ? { current } : undefined);
|
|
44
4
|
if (current.status === "loading") {
|
|
45
5
|
if (settled === undefined) {
|
|
46
6
|
return {
|
|
@@ -49,7 +9,7 @@ export function useLazyState<D>(current: LazyEvent<D>): LazyState<D> {
|
|
|
49
9
|
isSettled: false,
|
|
50
10
|
isFulfilled: false,
|
|
51
11
|
isRejected: false,
|
|
52
|
-
}
|
|
12
|
+
};
|
|
53
13
|
}
|
|
54
14
|
else {
|
|
55
15
|
if (settled.status === "fulfilled") {
|
|
@@ -60,7 +20,7 @@ export function useLazyState<D>(current: LazyEvent<D>): LazyState<D> {
|
|
|
60
20
|
isFulfilled: true,
|
|
61
21
|
isRejected: false,
|
|
62
22
|
value: settled.value,
|
|
63
|
-
}
|
|
23
|
+
};
|
|
64
24
|
}
|
|
65
25
|
else {
|
|
66
26
|
return {
|
|
@@ -71,7 +31,7 @@ export function useLazyState<D>(current: LazyEvent<D>): LazyState<D> {
|
|
|
71
31
|
isRejected: true,
|
|
72
32
|
reason: settled.reason,
|
|
73
33
|
retry: settled.retry,
|
|
74
|
-
}
|
|
34
|
+
};
|
|
75
35
|
}
|
|
76
36
|
}
|
|
77
37
|
}
|
|
@@ -83,7 +43,7 @@ export function useLazyState<D>(current: LazyEvent<D>): LazyState<D> {
|
|
|
83
43
|
isFulfilled: true,
|
|
84
44
|
isRejected: false,
|
|
85
45
|
value: current.value,
|
|
86
|
-
}
|
|
46
|
+
};
|
|
87
47
|
}
|
|
88
48
|
else {
|
|
89
49
|
return {
|
|
@@ -94,6 +54,7 @@ export function useLazyState<D>(current: LazyEvent<D>): LazyState<D> {
|
|
|
94
54
|
isRejected: true,
|
|
95
55
|
reason: current.reason,
|
|
96
56
|
retry: current.retry,
|
|
97
|
-
}
|
|
57
|
+
};
|
|
98
58
|
}
|
|
99
59
|
}
|
|
60
|
+
//# sourceMappingURL=state.js.map
|