query-harbor 0.0.4 → 0.0.6
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/README.md +349 -349
- package/dist/hooks/apiHandler.d.ts +24 -0
- package/dist/hooks/useCookie.d.ts +24 -0
- package/dist/hooks/useGlobalInfiniteQuery.d.ts +28 -0
- package/dist/hooks/useGlobalMutation.d.ts +32 -0
- package/dist/hooks/useGlobalQuery.d.ts +58 -0
- package/dist/index.d.ts +4 -0
- package/dist/query-harbor.es.js +165 -211
- package/dist/query-harbor.umd.js +1 -1
- package/package.json +61 -47
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { AxiosRequestHeaders, AxiosResponse } from 'axios';
|
|
2
|
+
interface ActionHandlerParams {
|
|
3
|
+
action: "GET" | "POST" | "PUT" | "DELETE";
|
|
4
|
+
url: string;
|
|
5
|
+
data?: any;
|
|
6
|
+
headers?: AxiosRequestHeaders;
|
|
7
|
+
}
|
|
8
|
+
export interface ApiSuccessResponse {
|
|
9
|
+
status: true;
|
|
10
|
+
data: any;
|
|
11
|
+
message?: string;
|
|
12
|
+
statusCode: number;
|
|
13
|
+
}
|
|
14
|
+
interface ApiErrorResponse {
|
|
15
|
+
status: false;
|
|
16
|
+
error: string;
|
|
17
|
+
message: string;
|
|
18
|
+
statusCode?: number;
|
|
19
|
+
type?: string;
|
|
20
|
+
}
|
|
21
|
+
type ApiResponse = ApiSuccessResponse | ApiErrorResponse;
|
|
22
|
+
export declare const ActionHandler: ({ action, url, data, headers }: ActionHandlerParams) => Promise<AxiosResponse>;
|
|
23
|
+
export declare const APIHandler: ({ action, url, data, headers }: ActionHandlerParams) => Promise<ApiResponse>;
|
|
24
|
+
export {};
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
*
|
|
3
|
+
* @example
|
|
4
|
+
* // Usage example:
|
|
5
|
+
* const { cookie, setCookie, removeCookie } = useCookie({ cookieName: "accessToken" });
|
|
6
|
+
*
|
|
7
|
+
* // Get cookie value
|
|
8
|
+
* const token = cookie.accessToken;
|
|
9
|
+
*
|
|
10
|
+
* // Set new cookie
|
|
11
|
+
* setCookie("accessToken", "new-token-value", { path: "/", maxAge: 3600 });
|
|
12
|
+
*
|
|
13
|
+
* // Remove cookie
|
|
14
|
+
* removeCookie("accessToken", { path: "/" });
|
|
15
|
+
*/
|
|
16
|
+
export declare const useCookie: ({ cookieName }: {
|
|
17
|
+
cookieName: string;
|
|
18
|
+
}) => {
|
|
19
|
+
cookie: {
|
|
20
|
+
[x: string]: any;
|
|
21
|
+
};
|
|
22
|
+
setCookie: (name: string, value: import('universal-cookie').Cookie, options?: import('universal-cookie').CookieSetOptions) => void;
|
|
23
|
+
removeCookie: (name: string, options?: import('universal-cookie').CookieSetOptions) => void;
|
|
24
|
+
};
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
interface UseGlobalInfiniteQueryParams<T> {
|
|
2
|
+
url: string;
|
|
3
|
+
queryKey: string[];
|
|
4
|
+
methodType: "GET" | "POST" | "PUT" | "DELETE";
|
|
5
|
+
data?: T;
|
|
6
|
+
enabled?: boolean;
|
|
7
|
+
staleTime?: number;
|
|
8
|
+
}
|
|
9
|
+
interface QueryResult<T> {
|
|
10
|
+
data: T[];
|
|
11
|
+
nextPage?: number;
|
|
12
|
+
hasMore: boolean;
|
|
13
|
+
totalCount: number;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Custom hook for handling infinite scrolling queries with React Query.
|
|
17
|
+
*/
|
|
18
|
+
export declare const useGlobalInfiniteQuery: <T>({ url, queryKey, methodType, data, enabled, staleTime, }: UseGlobalInfiniteQueryParams<T>) => {
|
|
19
|
+
refetchQuery: () => void;
|
|
20
|
+
queryData: any[];
|
|
21
|
+
isLoading: boolean;
|
|
22
|
+
isError: boolean;
|
|
23
|
+
error: Error;
|
|
24
|
+
fetchNextPage: (options?: import('@tanstack/react-query').FetchNextPageOptions) => Promise<import('@tanstack/react-query').InfiniteQueryObserverResult<import('@tanstack/react-query').InfiniteData<QueryResult<T>, unknown>, Error>>;
|
|
25
|
+
hasNextPage: boolean;
|
|
26
|
+
totalCount: number;
|
|
27
|
+
};
|
|
28
|
+
export {};
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
interface UseGlobalMutationParams<T> {
|
|
2
|
+
url: string;
|
|
3
|
+
queriesToInvalidate?: string[];
|
|
4
|
+
methodType: "POST" | "PUT" | "DELETE";
|
|
5
|
+
data?: T;
|
|
6
|
+
isFormData?: boolean;
|
|
7
|
+
closePopup?: (state: boolean) => void;
|
|
8
|
+
excludedIndexKeys?: string[];
|
|
9
|
+
}
|
|
10
|
+
interface MutationFunctionParams<T> {
|
|
11
|
+
isPriorityDataAvailable?: boolean;
|
|
12
|
+
priorityData?: T;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Custom hook for handling global mutations with React Query.
|
|
16
|
+
* @param {string} url - The endpoint URL for the mutation.
|
|
17
|
+
* @param {Array<string>} queriesToInvalidate - Array of query keys to invalidate after successful mutation.
|
|
18
|
+
* @param {string} methodType - The HTTP method type (POST, PUT, DELETE).
|
|
19
|
+
* @param {Object} [data] - The default data to be sent with the mutation.
|
|
20
|
+
* @param {boolean} [isFormData] - Whether the data should be processed as FormData.
|
|
21
|
+
* @param {Function} [closePopup] - Optional callback to close a popup after successful mutation.
|
|
22
|
+
* @param {Array<string>} [excludedIndexKeys] - Keys for which array indices should not be included in FormData.
|
|
23
|
+
* @returns {Object} An object containing mutation-related functions and state.
|
|
24
|
+
*/
|
|
25
|
+
export declare const useGlobalMutation: <T extends Record<string, any>>({ url, queriesToInvalidate, methodType, data, isFormData, closePopup, excludedIndexKeys, }: UseGlobalMutationParams<T>) => {
|
|
26
|
+
runMutation: (params?: MutationFunctionParams<T>) => void;
|
|
27
|
+
mutationLoading: boolean;
|
|
28
|
+
mutationData: any;
|
|
29
|
+
mutationError: string;
|
|
30
|
+
isMutationSucceeded: boolean;
|
|
31
|
+
};
|
|
32
|
+
export {};
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { QueryKey } from '@tanstack/react-query';
|
|
2
|
+
interface UseGlobalQueryParams {
|
|
3
|
+
url: string;
|
|
4
|
+
queryKey: QueryKey;
|
|
5
|
+
methodType: "GET" | "POST" | "PUT" | "DELETE";
|
|
6
|
+
data?: any;
|
|
7
|
+
enabled?: boolean;
|
|
8
|
+
staleTime?: number;
|
|
9
|
+
refetchOnWindowFocus?: boolean;
|
|
10
|
+
}
|
|
11
|
+
interface UseGlobalQueryReturn {
|
|
12
|
+
refetchQuery: () => void;
|
|
13
|
+
queryData: any;
|
|
14
|
+
isLoading: boolean;
|
|
15
|
+
isError: boolean;
|
|
16
|
+
error: unknown;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Custom hook for handling global queries with React Query.
|
|
20
|
+
* @param {string} url - The endpoint URL for the query.
|
|
21
|
+
* @param {QueryKey} queryKey - The unique key for identifying and caching the query.
|
|
22
|
+
* @param {"GET" | "POST" | "PUT" | "DELETE"} methodType - The HTTP method type.
|
|
23
|
+
* @param {any} [data] - The data to be sent with the request (for POST, PUT methods).
|
|
24
|
+
* @param {boolean} [enabled=true] - Whether the query is enabled or disabled.
|
|
25
|
+
* @param {boolean} [refetchOnWindowFocus] - Refetch on window focus if the data is stale (default: false).
|
|
26
|
+
* @param {number} [staleTime] - Duration in milliseconds until the data is considered stale (default: 5 minutes).
|
|
27
|
+
*
|
|
28
|
+
*
|
|
29
|
+
* Return type for the `useGlobalQuery` hook.
|
|
30
|
+
* @return {Function} refetchQuery - Function to invalidate and refetch the query.
|
|
31
|
+
* @return {any} queryData - The data returned from the query.
|
|
32
|
+
* @return {boolean} isLoading - Whether the query is currently loading.
|
|
33
|
+
* @return {boolean} isError - Whether the query encountered an error.
|
|
34
|
+
* @return {unknown} error - The error object if the query failed.
|
|
35
|
+
|
|
36
|
+
*
|
|
37
|
+
* @example
|
|
38
|
+
* // Example usage:
|
|
39
|
+
* const { queryData, isLoading, isError, error, refetchQuery } = useGlobalQuery({
|
|
40
|
+
* url: "/api/data",
|
|
41
|
+
* queryKey: ["data"],
|
|
42
|
+
* methodType: "GET",
|
|
43
|
+
* });
|
|
44
|
+
*
|
|
45
|
+
* if (isLoading) return <div>Loading...</div>;
|
|
46
|
+
* if (isError) return <div>Error: {error.message}</div>;
|
|
47
|
+
*
|
|
48
|
+
* return (
|
|
49
|
+
* <div>
|
|
50
|
+
* <h1>Data:</h1>
|
|
51
|
+
* <pre>{queryData.map((data) => <p>{data}</p>)}</pre>
|
|
52
|
+
* <button onClick={refetchQuery}>Refresh Data</button>
|
|
53
|
+
* </div>
|
|
54
|
+
* );
|
|
55
|
+
*
|
|
56
|
+
*/
|
|
57
|
+
export declare const useGlobalQuery: ({ url, queryKey, methodType, data, enabled, staleTime, refetchOnWindowFocus }: UseGlobalQueryParams) => UseGlobalQueryReturn;
|
|
58
|
+
export {};
|
package/dist/index.d.ts
ADDED
package/dist/query-harbor.es.js
CHANGED
|
@@ -1,274 +1,228 @@
|
|
|
1
|
-
import { useQueryClient as
|
|
1
|
+
import { useQueryClient as N, useQuery as b, useMutation as v, useInfiniteQuery as L } from "@tanstack/react-query";
|
|
2
2
|
import { useCookies as j } from "react-cookie";
|
|
3
3
|
import F from "axios";
|
|
4
|
-
const
|
|
5
|
-
const [
|
|
6
|
-
return { cookie:
|
|
7
|
-
},
|
|
8
|
-
|
|
9
|
-
queryKey: n,
|
|
10
|
-
methodType: o,
|
|
11
|
-
data: c,
|
|
12
|
-
enabled: y = !0,
|
|
13
|
-
cacheTime: h = 5 * 60 * 1e3,
|
|
14
|
-
staleTime: E = 5 * 60 * 1e3
|
|
15
|
-
}) => {
|
|
16
|
-
const m = M(), { cookie: e } = b({ cookieName: "accessToken" });
|
|
17
|
-
let t = {};
|
|
18
|
-
e != null && e.accessToken && (t = { Authorization: `Bearer ${e == null ? void 0 : e.accessToken}` });
|
|
19
|
-
const s = L({
|
|
20
|
-
queryKey: n,
|
|
21
|
-
queryFn: async () => {
|
|
22
|
-
try {
|
|
23
|
-
const i = await APIHandler({
|
|
24
|
-
action: o,
|
|
25
|
-
url: u,
|
|
26
|
-
data: c,
|
|
27
|
-
headers: t
|
|
28
|
-
});
|
|
29
|
-
return i != null && i.data ? i.data : { totalCount: 0, data: [] };
|
|
30
|
-
} catch (i) {
|
|
31
|
-
throw console.error("Query Error:", i), i;
|
|
32
|
-
}
|
|
33
|
-
},
|
|
34
|
-
enabled: y,
|
|
35
|
-
cacheTime: h,
|
|
36
|
-
staleTime: E,
|
|
37
|
-
refetchOnWindowFocus: !1
|
|
38
|
-
});
|
|
39
|
-
return {
|
|
40
|
-
refetchQuery: () => {
|
|
41
|
-
m.invalidateQueries({ queryKey: n });
|
|
42
|
-
},
|
|
43
|
-
queryData: s.data,
|
|
44
|
-
isLoading: s.isLoading,
|
|
45
|
-
isError: s.isError,
|
|
46
|
-
error: s.error
|
|
47
|
-
};
|
|
48
|
-
}, G = async ({ action: u, url: n, data: o, headers: c }) => {
|
|
49
|
-
switch (u) {
|
|
4
|
+
const M = ({ cookieName: i }) => {
|
|
5
|
+
const [s, o, n] = j([i]);
|
|
6
|
+
return { cookie: s, setCookie: o, removeCookie: n };
|
|
7
|
+
}, q = async ({ action: i, url: s, data: o, headers: n }) => {
|
|
8
|
+
switch (i) {
|
|
50
9
|
case "GET":
|
|
51
|
-
return await F.get(
|
|
52
|
-
headers: c
|
|
53
|
-
});
|
|
10
|
+
return await F.get(s, { headers: n });
|
|
54
11
|
case "POST":
|
|
55
|
-
return await F.post(
|
|
56
|
-
headers: c
|
|
57
|
-
});
|
|
12
|
+
return await F.post(s, o, { headers: n });
|
|
58
13
|
case "PUT":
|
|
59
|
-
return await F.put(
|
|
60
|
-
headers: c
|
|
61
|
-
});
|
|
14
|
+
return await F.put(s, o, { headers: n });
|
|
62
15
|
case "DELETE":
|
|
63
|
-
return await F.delete(
|
|
16
|
+
return await F.delete(s, { data: o, headers: n });
|
|
64
17
|
default:
|
|
65
|
-
throw new Error(`Invalid action: ${
|
|
18
|
+
throw new Error(`Invalid action: ${i}`);
|
|
66
19
|
}
|
|
67
|
-
},
|
|
68
|
-
var y,
|
|
20
|
+
}, I = async ({ action: i, url: s, data: o, headers: n }) => {
|
|
21
|
+
var y, m, P, d, r, e, a;
|
|
69
22
|
try {
|
|
70
|
-
const
|
|
71
|
-
return
|
|
23
|
+
const c = await q({ action: i, url: s, data: o, headers: n });
|
|
24
|
+
return c.status >= 200 && c.status <= 299 ? {
|
|
72
25
|
status: !0,
|
|
73
|
-
data:
|
|
74
|
-
message:
|
|
75
|
-
statusCode:
|
|
26
|
+
data: c.data,
|
|
27
|
+
message: c.data.message,
|
|
28
|
+
statusCode: c.status
|
|
76
29
|
} : {
|
|
77
30
|
status: !1,
|
|
78
31
|
error: "API Failed",
|
|
79
32
|
message: "API Failed",
|
|
80
|
-
statusCode:
|
|
33
|
+
statusCode: c.status
|
|
81
34
|
};
|
|
82
|
-
} catch (
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
35
|
+
} catch (c) {
|
|
36
|
+
if (F.isAxiosError(c)) {
|
|
37
|
+
const t = c;
|
|
38
|
+
return t.message === "Network Error" ? {
|
|
39
|
+
status: !1,
|
|
40
|
+
error: "Network Error",
|
|
41
|
+
message: "Network Error"
|
|
42
|
+
} : {
|
|
43
|
+
status: !1,
|
|
44
|
+
type: (m = (y = t.response) == null ? void 0 : y.data) == null ? void 0 : m.type,
|
|
45
|
+
message: ((d = (P = t.response) == null ? void 0 : P.data) == null ? void 0 : d.message) || "API Failed",
|
|
46
|
+
error: ((e = (r = t.response) == null ? void 0 : r.data) == null ? void 0 : e.error) || "API Failed",
|
|
47
|
+
statusCode: (a = t.response) == null ? void 0 : a.status
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
return {
|
|
94
51
|
status: !1,
|
|
95
52
|
error: "API Failed",
|
|
96
53
|
message: "API Failed"
|
|
97
54
|
};
|
|
98
55
|
}
|
|
99
|
-
},
|
|
100
|
-
url:
|
|
101
|
-
|
|
56
|
+
}, B = ({
|
|
57
|
+
url: i,
|
|
58
|
+
queryKey: s,
|
|
102
59
|
methodType: o,
|
|
103
|
-
data:
|
|
60
|
+
data: n,
|
|
61
|
+
enabled: y = !0,
|
|
62
|
+
staleTime: m = 5 * 60 * 1e3,
|
|
63
|
+
refetchOnWindowFocus: P = !1
|
|
64
|
+
}) => {
|
|
65
|
+
const d = N(), { cookie: r } = M({ cookieName: "accessToken" });
|
|
66
|
+
let e = {};
|
|
67
|
+
r != null && r.accessToken && (e = { Authorization: `Bearer ${r.accessToken}` });
|
|
68
|
+
const a = b({
|
|
69
|
+
queryKey: s,
|
|
70
|
+
queryFn: async () => {
|
|
71
|
+
try {
|
|
72
|
+
const t = await I({
|
|
73
|
+
action: o,
|
|
74
|
+
url: i,
|
|
75
|
+
data: n,
|
|
76
|
+
headers: e
|
|
77
|
+
});
|
|
78
|
+
return t != null && t.data ? t.data : { totalCount: 0, data: [] };
|
|
79
|
+
} catch (t) {
|
|
80
|
+
throw console.error("Query Error:", t), t;
|
|
81
|
+
}
|
|
82
|
+
},
|
|
83
|
+
enabled: y,
|
|
84
|
+
staleTime: m,
|
|
85
|
+
refetchOnWindowFocus: P
|
|
86
|
+
});
|
|
87
|
+
return {
|
|
88
|
+
refetchQuery: () => {
|
|
89
|
+
d.invalidateQueries({ queryKey: s });
|
|
90
|
+
},
|
|
91
|
+
queryData: a.data,
|
|
92
|
+
isLoading: a.isLoading,
|
|
93
|
+
isError: a.isError,
|
|
94
|
+
error: a.error
|
|
95
|
+
};
|
|
96
|
+
}, H = ({
|
|
97
|
+
url: i,
|
|
98
|
+
queriesToInvalidate: s,
|
|
99
|
+
methodType: o,
|
|
100
|
+
data: n,
|
|
104
101
|
isFormData: y,
|
|
105
|
-
closePopup:
|
|
106
|
-
excludedIndexKeys:
|
|
102
|
+
closePopup: m,
|
|
103
|
+
excludedIndexKeys: P
|
|
107
104
|
}) => {
|
|
108
|
-
var
|
|
109
|
-
const
|
|
110
|
-
let
|
|
111
|
-
|
|
112
|
-
const
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
* @async
|
|
116
|
-
* @param {Object} params - Mutation parameters.
|
|
117
|
-
* @param {boolean} [params.isPriorityDataAvailable] - Whether to use priority data.
|
|
118
|
-
* @param {*} [params.priorityData] - Priority data to override default data.
|
|
119
|
-
* @returns {Promise<*>} The response data from the API.
|
|
120
|
-
* @throws {Error} If the API request fails.
|
|
121
|
-
*/
|
|
122
|
-
mutationFn: async ({ isPriorityDataAvailable: l, priorityData: P }) => {
|
|
123
|
-
const p = l ? P : c;
|
|
105
|
+
var t;
|
|
106
|
+
const d = N(), { cookie: r } = M({ cookieName: "accessToken" });
|
|
107
|
+
let e = {};
|
|
108
|
+
r != null && r.accessToken && (e = { Authorization: `Bearer ${r == null ? void 0 : r.accessToken}` });
|
|
109
|
+
const a = v({
|
|
110
|
+
mutationFn: async ({ isPriorityDataAvailable: w, priorityData: k }) => {
|
|
111
|
+
const C = w ? k : n;
|
|
124
112
|
if (y) {
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
T(
|
|
135
|
-
r,
|
|
136
|
-
Q,
|
|
137
|
-
q,
|
|
138
|
-
A
|
|
139
|
-
);
|
|
140
|
-
}) : a !== "" && a !== void 0 && a !== null && (r == null || r.append(g, a));
|
|
141
|
-
}, x = {
|
|
142
|
-
excludedIndexKeys: E
|
|
113
|
+
const x = new FormData(), p = (u, l, g = "", A = {}) => {
|
|
114
|
+
if (l == null) return;
|
|
115
|
+
const { excludedIndexKeys: S = [] } = A;
|
|
116
|
+
Array.isArray(l) ? l.forEach((h, $) => {
|
|
117
|
+
const T = S.includes(g) ? g : g ? `${g}[${$}]` : `${$}`;
|
|
118
|
+
h instanceof File ? u.append(T, h) : typeof h == "object" && h !== null ? p(u, h, T, A) : u.append(T, String(h));
|
|
119
|
+
}) : typeof l == "object" && l !== null ? l instanceof File ? u.append(g, l) : Object.keys(l).forEach((h) => {
|
|
120
|
+
p(u, l[h], g ? `${g}[${h}]` : h, A);
|
|
121
|
+
}) : u.append(g, String(l));
|
|
143
122
|
};
|
|
144
|
-
Object.keys(
|
|
145
|
-
|
|
123
|
+
Object.keys(C || {}).forEach((u) => {
|
|
124
|
+
p(x, C == null ? void 0 : C[u], u, { excludedIndexKeys: P });
|
|
146
125
|
});
|
|
147
|
-
const {
|
|
148
|
-
status: w,
|
|
149
|
-
message: d,
|
|
150
|
-
data: k
|
|
151
|
-
} = await $({
|
|
126
|
+
const { status: f, message: E, data: Q } = await I({
|
|
152
127
|
action: o,
|
|
153
|
-
url:
|
|
154
|
-
data:
|
|
155
|
-
headers:
|
|
128
|
+
url: i,
|
|
129
|
+
data: x,
|
|
130
|
+
headers: e
|
|
156
131
|
});
|
|
157
|
-
if (
|
|
158
|
-
return
|
|
159
|
-
throw new Error(
|
|
132
|
+
if (f)
|
|
133
|
+
return Q;
|
|
134
|
+
throw new Error(E || "Something went wrong!");
|
|
160
135
|
} else {
|
|
161
|
-
const {
|
|
162
|
-
status: C,
|
|
163
|
-
message: T,
|
|
164
|
-
data: x
|
|
165
|
-
} = await $({
|
|
136
|
+
const { status: x, message: p, data: f } = await I({
|
|
166
137
|
action: o,
|
|
167
|
-
url:
|
|
168
|
-
data:
|
|
169
|
-
headers:
|
|
138
|
+
url: i,
|
|
139
|
+
data: C,
|
|
140
|
+
headers: e
|
|
170
141
|
});
|
|
171
|
-
if (
|
|
172
|
-
return
|
|
173
|
-
throw new Error(
|
|
142
|
+
if (x)
|
|
143
|
+
return f;
|
|
144
|
+
throw new Error(p || "Something went wrong!");
|
|
174
145
|
}
|
|
175
146
|
},
|
|
176
|
-
/**
|
|
177
|
-
* Callback executed on successful mutation.
|
|
178
|
-
* Invalidates specified queries and closes popup if provided.
|
|
179
|
-
*/
|
|
180
147
|
onSuccess: () => {
|
|
181
|
-
|
|
148
|
+
d.invalidateQueries({ queryKey: s }), m && m(!1);
|
|
182
149
|
},
|
|
183
|
-
|
|
184
|
-
* Callback executed on mutation error.
|
|
185
|
-
* @param {Error} error - The error object from the failed mutation.
|
|
186
|
-
* @returns {string} The error message.
|
|
187
|
-
*/
|
|
188
|
-
onError: (l) => (console.log("mutationError", l == null ? void 0 : l.message), l == null ? void 0 : l.message)
|
|
150
|
+
onError: (w) => (console.error("mutationError", w.message), w.message)
|
|
189
151
|
});
|
|
190
152
|
return {
|
|
191
|
-
runMutation: (
|
|
153
|
+
runMutation: (w) => {
|
|
192
154
|
try {
|
|
193
|
-
|
|
194
|
-
} catch (
|
|
195
|
-
console.
|
|
155
|
+
a.mutate(w || {});
|
|
156
|
+
} catch (k) {
|
|
157
|
+
console.error("Mutation Error: ", k);
|
|
196
158
|
}
|
|
197
159
|
},
|
|
198
|
-
mutationLoading:
|
|
199
|
-
mutationData:
|
|
200
|
-
mutationError: (
|
|
201
|
-
isMutationSucceeded:
|
|
160
|
+
mutationLoading: a.isPending,
|
|
161
|
+
mutationData: a.data,
|
|
162
|
+
mutationError: (t = a.error) == null ? void 0 : t.message,
|
|
163
|
+
isMutationSucceeded: a.isSuccess
|
|
202
164
|
};
|
|
203
|
-
},
|
|
204
|
-
url:
|
|
205
|
-
queryKey:
|
|
165
|
+
}, W = ({
|
|
166
|
+
url: i,
|
|
167
|
+
queryKey: s,
|
|
206
168
|
methodType: o,
|
|
207
|
-
data:
|
|
169
|
+
data: n,
|
|
208
170
|
enabled: y = !0,
|
|
209
|
-
|
|
210
|
-
staleTime: E = 5 * 60 * 1e3
|
|
171
|
+
staleTime: m = 5 * 60 * 1e3
|
|
211
172
|
}) => {
|
|
212
|
-
var
|
|
213
|
-
const
|
|
214
|
-
let
|
|
215
|
-
|
|
216
|
-
const
|
|
217
|
-
queryKey:
|
|
218
|
-
queryFn: async ({ pageParam:
|
|
173
|
+
var w, k, C, x, p;
|
|
174
|
+
const P = N(), { cookie: d } = M({ cookieName: "accessToken" });
|
|
175
|
+
let r = {};
|
|
176
|
+
d != null && d.accessToken && (r = { Authorization: `Bearer ${d.accessToken}` });
|
|
177
|
+
const e = L({
|
|
178
|
+
queryKey: s,
|
|
179
|
+
queryFn: async ({ pageParam: f = 1 }) => {
|
|
219
180
|
try {
|
|
220
|
-
const
|
|
181
|
+
const E = await I({
|
|
221
182
|
action: o,
|
|
222
|
-
url:
|
|
183
|
+
url: i,
|
|
223
184
|
data: {
|
|
224
|
-
...
|
|
225
|
-
page:
|
|
185
|
+
...n,
|
|
186
|
+
page: f
|
|
226
187
|
},
|
|
227
|
-
headers:
|
|
188
|
+
headers: r
|
|
228
189
|
});
|
|
229
|
-
if (
|
|
230
|
-
const { data:
|
|
190
|
+
if (E != null && E.data) {
|
|
191
|
+
const { data: Q, page: u, totalPages: l, totalCount: g } = E.data, A = u < l;
|
|
231
192
|
return {
|
|
232
|
-
data:
|
|
233
|
-
nextPage: A ?
|
|
193
|
+
data: Q,
|
|
194
|
+
nextPage: A ? u + 1 : void 0,
|
|
234
195
|
hasMore: A,
|
|
235
196
|
totalCount: g
|
|
236
197
|
};
|
|
237
198
|
} else
|
|
238
|
-
return { totalCount: 0, data: [] };
|
|
239
|
-
} catch (
|
|
240
|
-
throw console.error("Query Error:",
|
|
199
|
+
return { totalCount: 0, data: [], hasMore: !1 };
|
|
200
|
+
} catch (E) {
|
|
201
|
+
throw console.error("Query Error:", E), E;
|
|
241
202
|
}
|
|
242
203
|
},
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
* @param {Object} lastPage - The data from the last fetched page.
|
|
246
|
-
* @param {boolean} lastPage.hasMore - Whether more pages exist.
|
|
247
|
-
* @param {number} [lastPage.nextPage] - The next page number.
|
|
248
|
-
* @returns {number|undefined} The next page parameter or undefined if no more pages.
|
|
249
|
-
*/
|
|
250
|
-
getNextPageParam: (w) => w.hasMore ? w.nextPage : void 0,
|
|
204
|
+
initialPageParam: 1,
|
|
205
|
+
getNextPageParam: (f) => f.hasMore ? f.nextPage : void 0,
|
|
251
206
|
enabled: y,
|
|
252
|
-
|
|
253
|
-
staleTime: E,
|
|
207
|
+
staleTime: m,
|
|
254
208
|
refetchOnWindowFocus: !1
|
|
255
|
-
}),
|
|
256
|
-
|
|
257
|
-
},
|
|
209
|
+
}), a = () => {
|
|
210
|
+
P.invalidateQueries({ queryKey: s });
|
|
211
|
+
}, c = ((k = (w = e == null ? void 0 : e.data) == null ? void 0 : w.pages) == null ? void 0 : k.flatMap((f) => f.data)) || [], t = ((p = (x = (C = e == null ? void 0 : e.data) == null ? void 0 : C.pages) == null ? void 0 : x[0]) == null ? void 0 : p.totalCount) ?? 0;
|
|
258
212
|
return {
|
|
259
|
-
refetchQuery:
|
|
260
|
-
queryData:
|
|
261
|
-
isLoading:
|
|
262
|
-
isError:
|
|
263
|
-
error:
|
|
264
|
-
fetchNextPage:
|
|
265
|
-
hasNextPage:
|
|
266
|
-
totalCount:
|
|
213
|
+
refetchQuery: a,
|
|
214
|
+
queryData: c,
|
|
215
|
+
isLoading: e.isLoading,
|
|
216
|
+
isError: e.isError,
|
|
217
|
+
error: e.error,
|
|
218
|
+
fetchNextPage: e.fetchNextPage,
|
|
219
|
+
hasNextPage: e.hasNextPage,
|
|
220
|
+
totalCount: t
|
|
267
221
|
};
|
|
268
222
|
};
|
|
269
223
|
export {
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
224
|
+
M as useCookie,
|
|
225
|
+
W as useGlobalInfiniteQuery,
|
|
226
|
+
H as useGlobalMutation,
|
|
227
|
+
B as useGlobalQuery
|
|
274
228
|
};
|
package/dist/query-harbor.umd.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
(function(c,g){typeof exports=="object"&&typeof module<"u"?g(exports,require("@tanstack/react-query"),require("react-cookie"),require("axios")):typeof define=="function"&&define.amd?define(["exports","@tanstack/react-query","react-cookie","axios"],g):(c=typeof globalThis<"u"?globalThis:c||self,g(c.QueryHarbor={},c.ReactQuery,c.ReactCookie,c.axios))})(this,function(c,g,
|
|
1
|
+
(function(c,g){typeof exports=="object"&&typeof module<"u"?g(exports,require("@tanstack/react-query"),require("react-cookie"),require("axios")):typeof define=="function"&&define.amd?define(["exports","@tanstack/react-query","react-cookie","axios"],g):(c=typeof globalThis<"u"?globalThis:c||self,g(c.QueryHarbor={},c.ReactQuery,c.ReactCookie,c.axios))})(this,function(c,g,q,Q){"use strict";const x=({cookieName:i})=>{const[s,o,n]=q.useCookies([i]);return{cookie:s,setCookie:o,removeCookie:n}},$=async({action:i,url:s,data:o,headers:n})=>{switch(i){case"GET":return await Q.get(s,{headers:n});case"POST":return await Q.post(s,o,{headers:n});case"PUT":return await Q.put(s,o,{headers:n});case"DELETE":return await Q.delete(s,{data:o,headers:n});default:throw new Error(`Invalid action: ${i}`)}},M=async({action:i,url:s,data:o,headers:n})=>{var k,E,P,f,r,e,a;try{const u=await $({action:i,url:s,data:o,headers:n});return u.status>=200&&u.status<=299?{status:!0,data:u.data,message:u.data.message,statusCode:u.status}:{status:!1,error:"API Failed",message:"API Failed",statusCode:u.status}}catch(u){if(Q.isAxiosError(u)){const t=u;return t.message==="Network Error"?{status:!1,error:"Network Error",message:"Network Error"}:{status:!1,type:(E=(k=t.response)==null?void 0:k.data)==null?void 0:E.type,message:((f=(P=t.response)==null?void 0:P.data)==null?void 0:f.message)||"API Failed",error:((e=(r=t.response)==null?void 0:r.data)==null?void 0:e.error)||"API Failed",statusCode:(a=t.response)==null?void 0:a.status}}return{status:!1,error:"API Failed",message:"API Failed"}}},v=({url:i,queryKey:s,methodType:o,data:n,enabled:k=!0,staleTime:E=3e5,refetchOnWindowFocus:P=!1})=>{const f=g.useQueryClient(),{cookie:r}=x({cookieName:"accessToken"});let e={};r!=null&&r.accessToken&&(e={Authorization:`Bearer ${r.accessToken}`});const a=g.useQuery({queryKey:s,queryFn:async()=>{try{const t=await M({action:o,url:i,data:n,headers:e});return t!=null&&t.data?t.data:{totalCount:0,data:[]}}catch(t){throw console.error("Query Error:",t),t}},enabled:k,staleTime:E,refetchOnWindowFocus:P});return{refetchQuery:()=>{f.invalidateQueries({queryKey:s})},queryData:a.data,isLoading:a.isLoading,isError:a.isError,error:a.error}},G=({url:i,queriesToInvalidate:s,methodType:o,data:n,isFormData:k,closePopup:E,excludedIndexKeys:P})=>{var t;const f=g.useQueryClient(),{cookie:r}=x({cookieName:"accessToken"});let e={};r!=null&&r.accessToken&&(e={Authorization:`Bearer ${r==null?void 0:r.accessToken}`});const a=g.useMutation({mutationFn:async({isPriorityDataAvailable:m,priorityData:A})=>{const p=m?A:n;if(k){const T=new FormData,I=(l,d,y="",F={})=>{if(d==null)return;const{excludedIndexKeys:L=[]}=F;Array.isArray(d)?d.forEach((w,S)=>{const N=L.includes(y)?y:y?`${y}[${S}]`:`${S}`;w instanceof File?l.append(N,w):typeof w=="object"&&w!==null?I(l,w,N,F):l.append(N,String(w))}):typeof d=="object"&&d!==null?d instanceof File?l.append(y,d):Object.keys(d).forEach(w=>{I(l,d[w],y?`${y}[${w}]`:w,F)}):l.append(y,String(d))};Object.keys(p||{}).forEach(l=>{I(T,p==null?void 0:p[l],l,{excludedIndexKeys:P})});const{status:h,message:C,data:b}=await M({action:o,url:i,data:T,headers:e});if(h)return b;throw new Error(C||"Something went wrong!")}else{const{status:T,message:I,data:h}=await M({action:o,url:i,data:p,headers:e});if(T)return h;throw new Error(I||"Something went wrong!")}},onSuccess:()=>{f.invalidateQueries({queryKey:s}),E&&E(!1)},onError:m=>(console.error("mutationError",m.message),m.message)});return{runMutation:m=>{try{a.mutate(m||{})}catch(A){console.error("Mutation Error: ",A)}},mutationLoading:a.isPending,mutationData:a.data,mutationError:(t=a.error)==null?void 0:t.message,isMutationSucceeded:a.isSuccess}},j=({url:i,queryKey:s,methodType:o,data:n,enabled:k=!0,staleTime:E=3e5})=>{var m,A,p,T,I;const P=g.useQueryClient(),{cookie:f}=x({cookieName:"accessToken"});let r={};f!=null&&f.accessToken&&(r={Authorization:`Bearer ${f.accessToken}`});const e=g.useInfiniteQuery({queryKey:s,queryFn:async({pageParam:h=1})=>{try{const C=await M({action:o,url:i,data:{...n,page:h},headers:r});if(C!=null&&C.data){const{data:b,page:l,totalPages:d,totalCount:y}=C.data,F=l<d;return{data:b,nextPage:F?l+1:void 0,hasMore:F,totalCount:y}}else return{totalCount:0,data:[],hasMore:!1}}catch(C){throw console.error("Query Error:",C),C}},initialPageParam:1,getNextPageParam:h=>h.hasMore?h.nextPage:void 0,enabled:k,staleTime:E,refetchOnWindowFocus:!1}),a=()=>{P.invalidateQueries({queryKey:s})},u=((A=(m=e==null?void 0:e.data)==null?void 0:m.pages)==null?void 0:A.flatMap(h=>h.data))||[],t=((I=(T=(p=e==null?void 0:e.data)==null?void 0:p.pages)==null?void 0:T[0])==null?void 0:I.totalCount)??0;return{refetchQuery:a,queryData:u,isLoading:e.isLoading,isError:e.isError,error:e.error,fetchNextPage:e.fetchNextPage,hasNextPage:e.hasNextPage,totalCount:t}};c.useCookie=x,c.useGlobalInfiniteQuery=j,c.useGlobalMutation=G,c.useGlobalQuery=v,Object.defineProperty(c,Symbol.toStringTag,{value:"Module"})});
|