@kirill.konshin/react 0.0.3 → 0.0.4
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/.turbo/turbo-build.log +14 -9
- package/CHANGELOG.md +6 -0
- package/dist/index.js +2 -2
- package/dist/useFetchAction.d.ts +12 -0
- package/dist/useFetchAction.d.ts.map +1 -0
- package/dist/useFetchAction.js +27 -0
- package/dist/useFetchAction.js.map +1 -0
- package/package.json +1 -1
- package/src/index.ts +1 -1
- package/src/useFetchAction.ts +42 -0
- package/dist/useFetcher.d.ts +0 -10
- package/dist/useFetcher.d.ts.map +0 -1
- package/dist/useFetcher.js +0 -43
- package/dist/useFetcher.js.map +0 -1
- package/src/useFetcher.ts +0 -54
package/.turbo/turbo-build.log
CHANGED
|
@@ -12,14 +12,19 @@ transforming...
|
|
|
12
12
|
rendering chunks...
|
|
13
13
|
|
|
14
14
|
[vite:dts] Start generate declaration files...
|
|
15
|
-
[
|
|
16
|
-
[2mdist/[22m[36mapiCall.js [39m[1m[2m0.69 kB[22m[1m[22m[2m │ map: 1.45 kB[22m
|
|
17
|
-
[2mdist/[22m[36museFetcher.js [39m[1m[2m1.18 kB[22m[1m[22m[2m │ map: 2.62 kB[22m
|
|
18
|
-
[2mdist/[22m[36mkeyboard.js [39m[1m[2m1.27 kB[22m[1m[22m[2m │ map: 2.81 kB[22m
|
|
19
|
-
[2mdist/[22m[36mform/client.js [39m[1m[2m1.58 kB[22m[1m[22m[2m │ map: 3.88 kB[22m
|
|
20
|
-
[2mdist/[22m[36museFetch.js [39m[1m[2m2.04 kB[22m[1m[22m[2m │ map: 5.62 kB[22m
|
|
21
|
-
[2mdist/[22m[36mform/form.js [39m[1m[2m2.89 kB[22m[1m[22m[2m │ map: 7.94 kB[22m
|
|
22
|
-
[vite:dts] Declaration files built in 2092ms.
|
|
15
|
+
[96msrc/index.ts[0m:[93m4[0m:[93m15[0m - [91merror[0m[90m TS2307: [0mCannot find module './useFetcher' or its corresponding type declarations.
|
|
23
16
|
|
|
24
|
-
[
|
|
17
|
+
[7m4[0m export * from './useFetcher';
|
|
18
|
+
[7m [0m [91m ~~~~~~~~~~~~~~[0m
|
|
19
|
+
|
|
20
|
+
[2mdist/[22m[36mindex.js [39m[1m[2m0.68 kB[22m[1m[22m[2m │ map: 0.10 kB[22m
|
|
21
|
+
[2mdist/[22m[36mapiCall.js [39m[1m[2m0.69 kB[22m[1m[22m[2m │ map: 1.45 kB[22m
|
|
22
|
+
[2mdist/[22m[36museFetchAction.js [39m[1m[2m0.79 kB[22m[1m[22m[2m │ map: 1.90 kB[22m
|
|
23
|
+
[2mdist/[22m[36mkeyboard.js [39m[1m[2m1.27 kB[22m[1m[22m[2m │ map: 2.81 kB[22m
|
|
24
|
+
[2mdist/[22m[36mform/client.js [39m[1m[2m1.58 kB[22m[1m[22m[2m │ map: 3.88 kB[22m
|
|
25
|
+
[2mdist/[22m[36museFetch.js [39m[1m[2m2.04 kB[22m[1m[22m[2m │ map: 5.62 kB[22m
|
|
26
|
+
[2mdist/[22m[36mform/form.js [39m[1m[2m2.89 kB[22m[1m[22m[2m │ map: 7.94 kB[22m
|
|
27
|
+
[vite:dts] Declaration files built in 2074ms.
|
|
28
|
+
|
|
29
|
+
[32m✓ built in 6.65s[39m
|
|
25
30
|
Updated package.json with exports
|
package/CHANGELOG.md
CHANGED
package/dist/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { apiCall, jsonContentType } from "./apiCall.js";
|
|
2
2
|
import { HotkeysContext, HotkeysProvider, useHotkeys } from "./keyboard.js";
|
|
3
3
|
import { useFetch } from "./useFetch.js";
|
|
4
|
-
import {
|
|
4
|
+
import { useFetchAction } from "./useFetchAction.js";
|
|
5
5
|
import { createClient } from "./form/client.js";
|
|
6
6
|
import { Field, Form, FormContext, Hint, create, isRequired, maxLength, minLength, stringRequired } from "./form/form.js";
|
|
7
7
|
export {
|
|
@@ -20,7 +20,7 @@ export {
|
|
|
20
20
|
minLength,
|
|
21
21
|
stringRequired,
|
|
22
22
|
useFetch,
|
|
23
|
-
|
|
23
|
+
useFetchAction,
|
|
24
24
|
useHotkeys
|
|
25
25
|
};
|
|
26
26
|
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @param {(state: Awaited<R>, payload?: any) => Promise<R> | R} action
|
|
3
|
+
* @param {R} defaultValue
|
|
4
|
+
* @param {boolean} fetchOnMount
|
|
5
|
+
* @param {string} permalink
|
|
6
|
+
* @returns {[R, (payload?: P) => Promise<R> | R, boolean]}>
|
|
7
|
+
*/
|
|
8
|
+
export declare function useFetchAction<S, P = undefined>(action: (state: Awaited<S>, payload?: P) => S | Promise<S>, defaultValue: Awaited<S>, { fetchOnMount, permalink, }?: {
|
|
9
|
+
fetchOnMount?: boolean;
|
|
10
|
+
permalink?: string;
|
|
11
|
+
}): [S, (payload: P) => void, boolean];
|
|
12
|
+
//# sourceMappingURL=useFetchAction.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useFetchAction.d.ts","sourceRoot":"","sources":["../src/useFetchAction.ts"],"names":[],"mappings":"AAIA;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,CAAC,GAAG,SAAS,EAC3C,MAAM,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,EAC1D,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC,EACxB,EACI,YAAoB,EACpB,SAAqB,GACxB,GAAE;IACC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;CACjB,GACP,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,IAAI,EAAE,OAAO,CAAC,CAoBpC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useActionState, useState, useCallback, startTransition, useEffect } from "react";
|
|
3
|
+
function useFetchAction(action, defaultValue, {
|
|
4
|
+
fetchOnMount = false,
|
|
5
|
+
permalink = void 0
|
|
6
|
+
} = {}) {
|
|
7
|
+
const [data, dispatchAction, isPending] = useActionState(action, defaultValue, permalink);
|
|
8
|
+
const [loading, setLoading] = useState(fetchOnMount);
|
|
9
|
+
const dispatch = useCallback(
|
|
10
|
+
(payload) => {
|
|
11
|
+
startTransition(() => {
|
|
12
|
+
dispatchAction(payload);
|
|
13
|
+
setLoading(false);
|
|
14
|
+
});
|
|
15
|
+
},
|
|
16
|
+
[dispatchAction]
|
|
17
|
+
);
|
|
18
|
+
useEffect(() => {
|
|
19
|
+
if (!fetchOnMount || !loading) return;
|
|
20
|
+
dispatch(void 0);
|
|
21
|
+
}, [fetchOnMount, dispatch, loading]);
|
|
22
|
+
return [data, dispatch, isPending || loading];
|
|
23
|
+
}
|
|
24
|
+
export {
|
|
25
|
+
useFetchAction
|
|
26
|
+
};
|
|
27
|
+
//# sourceMappingURL=useFetchAction.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useFetchAction.js","sources":["../src/useFetchAction.ts"],"sourcesContent":["'use client';\n\nimport { useActionState, useCallback, useEffect, useState, startTransition } from 'react';\n\n/**\n * @param {(state: Awaited<R>, payload?: any) => Promise<R> | R} action\n * @param {R} defaultValue\n * @param {boolean} fetchOnMount\n * @param {string} permalink\n * @returns {[R, (payload?: P) => Promise<R> | R, boolean]}>\n */\nexport function useFetchAction<S, P = undefined>(\n action: (state: Awaited<S>, payload?: P) => S | Promise<S>,\n defaultValue: Awaited<S>,\n {\n fetchOnMount = false,\n permalink = undefined,\n }: {\n fetchOnMount?: boolean;\n permalink?: string;\n } = {},\n): [S, (payload: P) => void, boolean] {\n const [data, dispatchAction, isPending] = useActionState<S, P | undefined>(action, defaultValue, permalink);\n const [loading, setLoading] = useState(fetchOnMount);\n\n const dispatch = useCallback(\n (payload?: P) => {\n startTransition(() => {\n dispatchAction(payload);\n setLoading(false);\n });\n },\n [dispatchAction],\n );\n\n useEffect(() => {\n if (!fetchOnMount || !loading) return;\n dispatch(undefined);\n }, [fetchOnMount, dispatch, loading]);\n\n return [data, dispatch, isPending || loading];\n}\n"],"names":[],"mappings":";;AAWO,SAAS,eACZ,QACA,cACA;AAAA,EACI,eAAe;AAAA,EACf,YAAY;AAChB,IAGI,IAC8B;AAClC,QAAM,CAAC,MAAM,gBAAgB,SAAS,IAAI,eAAiC,QAAQ,cAAc,SAAS;AAC1G,QAAM,CAAC,SAAS,UAAU,IAAI,SAAS,YAAY;AAEnD,QAAM,WAAW;AAAA,IACb,CAAC,YAAgB;AACb,sBAAgB,MAAM;AAClB,uBAAe,OAAO;AACtB,mBAAW,KAAK;AAAA,MACpB,CAAC;AAAA,IACL;AAAA,IACA,CAAC,cAAc;AAAA,EAAA;AAGnB,YAAU,MAAM;AACZ,QAAI,CAAC,gBAAgB,CAAC,QAAS;AAC/B,aAAS,MAAS;AAAA,EACtB,GAAG,CAAC,cAAc,UAAU,OAAO,CAAC;AAEpC,SAAO,CAAC,MAAM,UAAU,aAAa,OAAO;AAChD;"}
|
package/package.json
CHANGED
package/src/index.ts
CHANGED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { useActionState, useCallback, useEffect, useState, startTransition } from 'react';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* @param {(state: Awaited<R>, payload?: any) => Promise<R> | R} action
|
|
7
|
+
* @param {R} defaultValue
|
|
8
|
+
* @param {boolean} fetchOnMount
|
|
9
|
+
* @param {string} permalink
|
|
10
|
+
* @returns {[R, (payload?: P) => Promise<R> | R, boolean]}>
|
|
11
|
+
*/
|
|
12
|
+
export function useFetchAction<S, P = undefined>(
|
|
13
|
+
action: (state: Awaited<S>, payload?: P) => S | Promise<S>,
|
|
14
|
+
defaultValue: Awaited<S>,
|
|
15
|
+
{
|
|
16
|
+
fetchOnMount = false,
|
|
17
|
+
permalink = undefined,
|
|
18
|
+
}: {
|
|
19
|
+
fetchOnMount?: boolean;
|
|
20
|
+
permalink?: string;
|
|
21
|
+
} = {},
|
|
22
|
+
): [S, (payload: P) => void, boolean] {
|
|
23
|
+
const [data, dispatchAction, isPending] = useActionState<S, P | undefined>(action, defaultValue, permalink);
|
|
24
|
+
const [loading, setLoading] = useState(fetchOnMount);
|
|
25
|
+
|
|
26
|
+
const dispatch = useCallback(
|
|
27
|
+
(payload?: P) => {
|
|
28
|
+
startTransition(() => {
|
|
29
|
+
dispatchAction(payload);
|
|
30
|
+
setLoading(false);
|
|
31
|
+
});
|
|
32
|
+
},
|
|
33
|
+
[dispatchAction],
|
|
34
|
+
);
|
|
35
|
+
|
|
36
|
+
useEffect(() => {
|
|
37
|
+
if (!fetchOnMount || !loading) return;
|
|
38
|
+
dispatch(undefined);
|
|
39
|
+
}, [fetchOnMount, dispatch, loading]);
|
|
40
|
+
|
|
41
|
+
return [data, dispatch, isPending || loading];
|
|
42
|
+
}
|
package/dist/useFetcher.d.ts
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
export declare function useFetcher<T = any>(cb: any, { fetchOnMount, onError }?: {
|
|
2
|
-
fetchOnMount?: boolean;
|
|
3
|
-
onError?: (e: Error) => void;
|
|
4
|
-
}): {
|
|
5
|
-
loading: boolean;
|
|
6
|
-
error: Error | null;
|
|
7
|
-
data: T | null;
|
|
8
|
-
trigger: (...args: any[]) => Promise<any>;
|
|
9
|
-
};
|
|
10
|
-
//# sourceMappingURL=useFetcher.d.ts.map
|
package/dist/useFetcher.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useFetcher.d.ts","sourceRoot":"","sources":["../src/useFetcher.ts"],"names":[],"mappings":"AAEA,wBAAgB,UAAU,CAAC,CAAC,GAAG,GAAG,EAC9B,EAAE,EAAE,GAAG,EAEP,EAAE,YAAoB,EAAE,OAAO,EAAE,GAAE;IAAE,YAAY,CAAC,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,KAAK,IAAI,CAAA;CAAO,GACjG;IACC,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;IACf,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;CAC7C,CA0CA"}
|
package/dist/useFetcher.js
DELETED
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
import { useState, useRef, useCallback, useEffect } from "react";
|
|
2
|
-
function useFetcher(cb, { fetchOnMount = false, onError } = {}) {
|
|
3
|
-
const [loading, setLoading] = useState(fetchOnMount);
|
|
4
|
-
const [error, setError] = useState(null);
|
|
5
|
-
const [data, setData] = useState(null);
|
|
6
|
-
const isMounted = useRef(false);
|
|
7
|
-
const trigger = useCallback(
|
|
8
|
-
async (...args) => {
|
|
9
|
-
try {
|
|
10
|
-
setLoading(true);
|
|
11
|
-
setError(null);
|
|
12
|
-
const res = await cb(args);
|
|
13
|
-
if (!isMounted.current) return;
|
|
14
|
-
setData(res);
|
|
15
|
-
return res;
|
|
16
|
-
} catch (e) {
|
|
17
|
-
console.error("Fetch failed", e);
|
|
18
|
-
if (!isMounted.current) return;
|
|
19
|
-
setError(e);
|
|
20
|
-
onError?.(e);
|
|
21
|
-
} finally {
|
|
22
|
-
if (isMounted.current) setLoading(false);
|
|
23
|
-
}
|
|
24
|
-
},
|
|
25
|
-
[cb, onError]
|
|
26
|
-
);
|
|
27
|
-
useEffect(() => {
|
|
28
|
-
if (fetchOnMount) {
|
|
29
|
-
trigger().catch((e) => console.error("Fetch on mount failed", e));
|
|
30
|
-
}
|
|
31
|
-
}, [fetchOnMount, cb, trigger]);
|
|
32
|
-
useEffect(() => {
|
|
33
|
-
isMounted.current = true;
|
|
34
|
-
return () => {
|
|
35
|
-
isMounted.current = false;
|
|
36
|
-
};
|
|
37
|
-
});
|
|
38
|
-
return { loading, error, data, trigger };
|
|
39
|
-
}
|
|
40
|
-
export {
|
|
41
|
-
useFetcher
|
|
42
|
-
};
|
|
43
|
-
//# sourceMappingURL=useFetcher.js.map
|
package/dist/useFetcher.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useFetcher.js","sources":["../src/useFetcher.ts"],"sourcesContent":["import { useCallback, useEffect, useRef, useState } from 'react';\n\nexport function useFetcher<T = any>(\n cb: any,\n\n { fetchOnMount = false, onError }: { fetchOnMount?: boolean; onError?: (e: Error) => void } = {},\n): {\n loading: boolean;\n error: Error | null;\n data: T | null;\n trigger: (...args: any[]) => Promise<any>;\n} {\n const [loading, setLoading] = useState(fetchOnMount);\n const [error, setError] = useState<Error | null>(null);\n const [data, setData] = useState<T | null>(null);\n\n const isMounted = useRef(false);\n\n const trigger = useCallback(\n async (...args: any[]): Promise<any> => {\n try {\n setLoading(true);\n setError(null);\n const res = await cb(args);\n if (!isMounted.current) return;\n setData(res);\n return res;\n } catch (e) {\n console.error('Fetch failed', e);\n if (!isMounted.current) return;\n setError(e);\n (onError as any)?.(e);\n } finally {\n if (isMounted.current) setLoading(false);\n }\n },\n [cb, onError],\n );\n\n useEffect(() => {\n if (fetchOnMount) {\n trigger().catch((e) => console.error('Fetch on mount failed', e)); // catch actually will never happen\n }\n }, [fetchOnMount, cb, trigger]);\n\n useEffect(() => {\n isMounted.current = true;\n return () => {\n isMounted.current = false;\n };\n });\n\n return { loading, error, data, trigger };\n}\n"],"names":[],"mappings":";AAEO,SAAS,WACZ,IAEA,EAAE,eAAe,OAAO,QAAA,IAAsE,IAMhG;AACE,QAAM,CAAC,SAAS,UAAU,IAAI,SAAS,YAAY;AACnD,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAuB,IAAI;AACrD,QAAM,CAAC,MAAM,OAAO,IAAI,SAAmB,IAAI;AAE/C,QAAM,YAAY,OAAO,KAAK;AAE9B,QAAM,UAAU;AAAA,IACZ,UAAU,SAA8B;AACpC,UAAI;AACA,mBAAW,IAAI;AACf,iBAAS,IAAI;AACb,cAAM,MAAM,MAAM,GAAG,IAAI;AACzB,YAAI,CAAC,UAAU,QAAS;AACxB,gBAAQ,GAAG;AACX,eAAO;AAAA,MACX,SAAS,GAAG;AACR,gBAAQ,MAAM,gBAAgB,CAAC;AAC/B,YAAI,CAAC,UAAU,QAAS;AACxB,iBAAS,CAAC;AACT,kBAAkB,CAAC;AAAA,MACxB,UAAA;AACI,YAAI,UAAU,QAAS,YAAW,KAAK;AAAA,MAC3C;AAAA,IACJ;AAAA,IACA,CAAC,IAAI,OAAO;AAAA,EAAA;AAGhB,YAAU,MAAM;AACZ,QAAI,cAAc;AACd,cAAA,EAAU,MAAM,CAAC,MAAM,QAAQ,MAAM,yBAAyB,CAAC,CAAC;AAAA,IACpE;AAAA,EACJ,GAAG,CAAC,cAAc,IAAI,OAAO,CAAC;AAE9B,YAAU,MAAM;AACZ,cAAU,UAAU;AACpB,WAAO,MAAM;AACT,gBAAU,UAAU;AAAA,IACxB;AAAA,EACJ,CAAC;AAED,SAAO,EAAE,SAAS,OAAO,MAAM,QAAA;AACnC;"}
|
package/src/useFetcher.ts
DELETED
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
import { useCallback, useEffect, useRef, useState } from 'react';
|
|
2
|
-
|
|
3
|
-
export function useFetcher<T = any>(
|
|
4
|
-
cb: any,
|
|
5
|
-
|
|
6
|
-
{ fetchOnMount = false, onError }: { fetchOnMount?: boolean; onError?: (e: Error) => void } = {},
|
|
7
|
-
): {
|
|
8
|
-
loading: boolean;
|
|
9
|
-
error: Error | null;
|
|
10
|
-
data: T | null;
|
|
11
|
-
trigger: (...args: any[]) => Promise<any>;
|
|
12
|
-
} {
|
|
13
|
-
const [loading, setLoading] = useState(fetchOnMount);
|
|
14
|
-
const [error, setError] = useState<Error | null>(null);
|
|
15
|
-
const [data, setData] = useState<T | null>(null);
|
|
16
|
-
|
|
17
|
-
const isMounted = useRef(false);
|
|
18
|
-
|
|
19
|
-
const trigger = useCallback(
|
|
20
|
-
async (...args: any[]): Promise<any> => {
|
|
21
|
-
try {
|
|
22
|
-
setLoading(true);
|
|
23
|
-
setError(null);
|
|
24
|
-
const res = await cb(args);
|
|
25
|
-
if (!isMounted.current) return;
|
|
26
|
-
setData(res);
|
|
27
|
-
return res;
|
|
28
|
-
} catch (e) {
|
|
29
|
-
console.error('Fetch failed', e);
|
|
30
|
-
if (!isMounted.current) return;
|
|
31
|
-
setError(e);
|
|
32
|
-
(onError as any)?.(e);
|
|
33
|
-
} finally {
|
|
34
|
-
if (isMounted.current) setLoading(false);
|
|
35
|
-
}
|
|
36
|
-
},
|
|
37
|
-
[cb, onError],
|
|
38
|
-
);
|
|
39
|
-
|
|
40
|
-
useEffect(() => {
|
|
41
|
-
if (fetchOnMount) {
|
|
42
|
-
trigger().catch((e) => console.error('Fetch on mount failed', e)); // catch actually will never happen
|
|
43
|
-
}
|
|
44
|
-
}, [fetchOnMount, cb, trigger]);
|
|
45
|
-
|
|
46
|
-
useEffect(() => {
|
|
47
|
-
isMounted.current = true;
|
|
48
|
-
return () => {
|
|
49
|
-
isMounted.current = false;
|
|
50
|
-
};
|
|
51
|
-
});
|
|
52
|
-
|
|
53
|
-
return { loading, error, data, trigger };
|
|
54
|
-
}
|