@greatapps/common 1.1.85 → 1.1.86
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.
|
@@ -2,40 +2,112 @@
|
|
|
2
2
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
3
|
import {
|
|
4
4
|
QueryCache,
|
|
5
|
-
QueryClient
|
|
6
|
-
QueryClientProvider
|
|
5
|
+
QueryClient
|
|
7
6
|
} from "@tanstack/react-query";
|
|
8
|
-
import { useState } from "react";
|
|
7
|
+
import { useEffect, useState } from "react";
|
|
9
8
|
import dynamic from "next/dynamic";
|
|
10
9
|
import { toast } from "sonner";
|
|
10
|
+
import {
|
|
11
|
+
PersistQueryClientProvider
|
|
12
|
+
} from "@tanstack/react-query-persist-client";
|
|
13
|
+
import { broadcastQueryClient } from "@tanstack/query-broadcast-client-experimental";
|
|
14
|
+
import { set, get, del } from "idb-keyval";
|
|
11
15
|
const ReactQueryDevtools = process.env.NODE_ENV === "development" ? dynamic(
|
|
12
16
|
() => import("@tanstack/react-query-devtools").then((mod) => ({
|
|
13
17
|
default: mod.ReactQueryDevtools
|
|
14
18
|
})),
|
|
15
19
|
{ ssr: false }
|
|
16
20
|
) : () => null;
|
|
17
|
-
|
|
21
|
+
const persister = {
|
|
22
|
+
persistClient: async (client) => {
|
|
23
|
+
try {
|
|
24
|
+
await set("rq-cache", client);
|
|
25
|
+
} catch {
|
|
26
|
+
console.warn("Falha ao persistir cache");
|
|
27
|
+
}
|
|
28
|
+
},
|
|
29
|
+
restoreClient: async () => {
|
|
30
|
+
try {
|
|
31
|
+
return await get("rq-cache");
|
|
32
|
+
} catch {
|
|
33
|
+
await del("rq-cache").catch(() => {
|
|
34
|
+
});
|
|
35
|
+
return void 0;
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
removeClient: async () => {
|
|
39
|
+
try {
|
|
40
|
+
await del("rq-cache");
|
|
41
|
+
} catch {
|
|
42
|
+
console.warn("Falha ao remover cache");
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
function QueryProvider({
|
|
47
|
+
children,
|
|
48
|
+
persisterVersion = "v1"
|
|
49
|
+
}) {
|
|
18
50
|
const [queryClient] = useState(
|
|
19
51
|
() => new QueryClient({
|
|
20
52
|
defaultOptions: {
|
|
21
53
|
queries: {
|
|
22
|
-
staleTime: 60 * 1e3,
|
|
23
|
-
|
|
54
|
+
staleTime: 5 * 60 * 1e3,
|
|
55
|
+
gcTime: 4 * 60 * 60 * 1e3,
|
|
56
|
+
refetchOnWindowFocus: false,
|
|
57
|
+
refetchOnReconnect: true,
|
|
58
|
+
retry: 2,
|
|
59
|
+
retryDelay: (attempt) => Math.min(1e3 * 2 ** attempt, 3e4)
|
|
60
|
+
},
|
|
61
|
+
mutations: {
|
|
62
|
+
retry: 1,
|
|
63
|
+
onError: (error) => {
|
|
64
|
+
toast.error(
|
|
65
|
+
error instanceof Error ? error.message : "Erro inesperado na opera\xE7\xE3o."
|
|
66
|
+
);
|
|
67
|
+
}
|
|
24
68
|
}
|
|
25
69
|
},
|
|
26
70
|
queryCache: new QueryCache({
|
|
27
71
|
onError: (error) => {
|
|
28
|
-
toast.error(
|
|
72
|
+
toast.error(
|
|
73
|
+
error instanceof Error ? error.message : "Ocorreu um erro inesperado. Por favor, tente novamente."
|
|
74
|
+
);
|
|
29
75
|
}
|
|
30
76
|
})
|
|
31
77
|
})
|
|
32
78
|
);
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
79
|
+
useEffect(() => {
|
|
80
|
+
broadcastQueryClient({
|
|
81
|
+
queryClient,
|
|
82
|
+
broadcastChannel: "react-query"
|
|
83
|
+
});
|
|
84
|
+
}, [queryClient]);
|
|
85
|
+
return /* @__PURE__ */ jsxs(
|
|
86
|
+
PersistQueryClientProvider,
|
|
87
|
+
{
|
|
88
|
+
client: queryClient,
|
|
89
|
+
persistOptions: {
|
|
90
|
+
persister,
|
|
91
|
+
maxAge: 2 * 60 * 60 * 1e3,
|
|
92
|
+
buster: persisterVersion,
|
|
93
|
+
dehydrateOptions: {
|
|
94
|
+
shouldDehydrateQuery: (query) => {
|
|
95
|
+
if (query.state.status === "error") return false;
|
|
96
|
+
if (query.meta?.persist === false) return false;
|
|
97
|
+
if ((query.state.dataUpdateCount ?? 0) > 10) return false;
|
|
98
|
+
return true;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
},
|
|
102
|
+
children: [
|
|
103
|
+
children,
|
|
104
|
+
/* @__PURE__ */ jsx(ReactQueryDevtools, { initialIsOpen: false })
|
|
105
|
+
]
|
|
106
|
+
}
|
|
107
|
+
);
|
|
37
108
|
}
|
|
38
109
|
export {
|
|
39
|
-
QueryProvider
|
|
110
|
+
QueryProvider,
|
|
111
|
+
persister
|
|
40
112
|
};
|
|
41
113
|
//# sourceMappingURL=query.provider.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/providers/query.provider.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport {\r\n QueryCache,\r\n QueryClient,\r\n QueryClientProvider,\r\n} from \"@tanstack/react-query\";\r\nimport { ReactNode, useState } from \"react\";\r\nimport dynamic from \"next/dynamic\";\r\nimport { toast } from \"sonner\";\r\n\r\n// React Query Devtools só em desenvolvimento - remove do bundle de produção\r\nconst ReactQueryDevtools =\r\n process.env.NODE_ENV === \"development\"\r\n ? dynamic(\r\n () =>\r\n import(\"@tanstack/react-query-devtools\").then((mod) => ({\r\n default: mod.ReactQueryDevtools,\r\n })),\r\n { ssr: false },\r\n )\r\n : () => null;\r\n\r\ninterface QueryProviderProps {\r\n children: ReactNode;\r\n}\r\n\r\nexport function QueryProvider({
|
|
1
|
+
{"version":3,"sources":["../../src/providers/query.provider.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport {\r\n QueryCache,\r\n QueryClient,\r\n QueryClientProvider,\r\n} from \"@tanstack/react-query\";\r\nimport { ReactNode, useEffect, useState } from \"react\";\r\nimport dynamic from \"next/dynamic\";\r\nimport { toast } from \"sonner\";\r\nimport {\r\n PersistedClient,\r\n PersistQueryClientProvider,\r\n} from \"@tanstack/react-query-persist-client\";\r\nimport { broadcastQueryClient } from \"@tanstack/query-broadcast-client-experimental\";\r\nimport { set, get, del } from \"idb-keyval\";\r\n\r\n// React Query Devtools só em desenvolvimento - remove do bundle de produção\r\nconst ReactQueryDevtools =\r\n process.env.NODE_ENV === \"development\"\r\n ? dynamic(\r\n () =>\r\n import(\"@tanstack/react-query-devtools\").then((mod) => ({\r\n default: mod.ReactQueryDevtools,\r\n })),\r\n { ssr: false },\r\n )\r\n : () => null;\r\n\r\nexport const persister = {\r\n persistClient: async (client: PersistedClient) => {\r\n try {\r\n await set(\"rq-cache\", client);\r\n } catch {\r\n console.warn(\"Falha ao persistir cache\");\r\n }\r\n },\r\n restoreClient: async (): Promise<PersistedClient | undefined> => {\r\n try {\r\n return await get(\"rq-cache\");\r\n } catch {\r\n await del(\"rq-cache\").catch(() => {});\r\n return undefined;\r\n }\r\n },\r\n removeClient: async () => {\r\n try {\r\n await del(\"rq-cache\");\r\n } catch {\r\n console.warn(\"Falha ao remover cache\");\r\n }\r\n },\r\n};\r\n\r\ninterface QueryProviderProps {\r\n children: ReactNode;\r\n persisterVersion?: string;\r\n}\r\n\r\nexport function QueryProvider({\r\n children,\r\n persisterVersion = \"v1\",\r\n}: QueryProviderProps) {\r\n const [queryClient] = useState(\r\n () =>\r\n new QueryClient({\r\n defaultOptions: {\r\n queries: {\r\n staleTime: 5 * 60 * 1000,\r\n gcTime: 4 * 60 * 60 * 1000,\r\n refetchOnWindowFocus: false,\r\n refetchOnReconnect: true,\r\n retry: 2,\r\n retryDelay: (attempt) => Math.min(1000 * 2 ** attempt, 30000),\r\n },\r\n mutations: {\r\n retry: 1,\r\n onError: (error) => {\r\n toast.error(\r\n error instanceof Error\r\n ? error.message\r\n : \"Erro inesperado na operação.\",\r\n );\r\n },\r\n },\r\n },\r\n queryCache: new QueryCache({\r\n onError: (error) => {\r\n toast.error(\r\n error instanceof Error\r\n ? error.message\r\n : \"Ocorreu um erro inesperado. Por favor, tente novamente.\",\r\n );\r\n },\r\n }),\r\n }),\r\n );\r\n\r\n useEffect(() => {\r\n broadcastQueryClient({\r\n queryClient,\r\n broadcastChannel: \"react-query\",\r\n });\r\n }, [queryClient]);\r\n\r\n return (\r\n <PersistQueryClientProvider\r\n client={queryClient}\r\n persistOptions={{\r\n persister,\r\n maxAge: 2 * 60 * 60 * 1000,\r\n buster: persisterVersion,\r\n dehydrateOptions: {\r\n shouldDehydrateQuery: (query) => {\r\n if (query.state.status === \"error\") return false;\r\n if (query.meta?.persist === false) return false;\r\n if ((query.state.dataUpdateCount ?? 0) > 10) return false;\r\n return true;\r\n },\r\n },\r\n }}\r\n >\r\n {children}\r\n <ReactQueryDevtools initialIsOpen={false} />\r\n </PersistQueryClientProvider>\r\n );\r\n}\r\n"],"mappings":";AA0GI,SAiBE,KAjBF;AAxGJ;AAAA,EACE;AAAA,EACA;AAAA,OAEK;AACP,SAAoB,WAAW,gBAAgB;AAC/C,OAAO,aAAa;AACpB,SAAS,aAAa;AACtB;AAAA,EAEE;AAAA,OACK;AACP,SAAS,4BAA4B;AACrC,SAAS,KAAK,KAAK,WAAW;AAG9B,MAAM,qBACJ,QAAQ,IAAI,aAAa,gBACrB;AAAA,EACE,MACE,OAAO,gCAAgC,EAAE,KAAK,CAAC,SAAS;AAAA,IACtD,SAAS,IAAI;AAAA,EACf,EAAE;AAAA,EACJ,EAAE,KAAK,MAAM;AACf,IACA,MAAM;AAEL,MAAM,YAAY;AAAA,EACvB,eAAe,OAAO,WAA4B;AAChD,QAAI;AACF,YAAM,IAAI,YAAY,MAAM;AAAA,IAC9B,QAAQ;AACN,cAAQ,KAAK,0BAA0B;AAAA,IACzC;AAAA,EACF;AAAA,EACA,eAAe,YAAkD;AAC/D,QAAI;AACF,aAAO,MAAM,IAAI,UAAU;AAAA,IAC7B,QAAQ;AACN,YAAM,IAAI,UAAU,EAAE,MAAM,MAAM;AAAA,MAAC,CAAC;AACpC,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EACA,cAAc,YAAY;AACxB,QAAI;AACF,YAAM,IAAI,UAAU;AAAA,IACtB,QAAQ;AACN,cAAQ,KAAK,wBAAwB;AAAA,IACvC;AAAA,EACF;AACF;AAOO,SAAS,cAAc;AAAA,EAC5B;AAAA,EACA,mBAAmB;AACrB,GAAuB;AACrB,QAAM,CAAC,WAAW,IAAI;AAAA,IACpB,MACE,IAAI,YAAY;AAAA,MACd,gBAAgB;AAAA,QACd,SAAS;AAAA,UACP,WAAW,IAAI,KAAK;AAAA,UACpB,QAAQ,IAAI,KAAK,KAAK;AAAA,UACtB,sBAAsB;AAAA,UACtB,oBAAoB;AAAA,UACpB,OAAO;AAAA,UACP,YAAY,CAAC,YAAY,KAAK,IAAI,MAAO,KAAK,SAAS,GAAK;AAAA,QAC9D;AAAA,QACA,WAAW;AAAA,UACT,OAAO;AAAA,UACP,SAAS,CAAC,UAAU;AAClB,kBAAM;AAAA,cACJ,iBAAiB,QACb,MAAM,UACN;AAAA,YACN;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,MACA,YAAY,IAAI,WAAW;AAAA,QACzB,SAAS,CAAC,UAAU;AAClB,gBAAM;AAAA,YACJ,iBAAiB,QACb,MAAM,UACN;AAAA,UACN;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH,CAAC;AAAA,EACL;AAEA,YAAU,MAAM;AACd,yBAAqB;AAAA,MACnB;AAAA,MACA,kBAAkB;AAAA,IACpB,CAAC;AAAA,EACH,GAAG,CAAC,WAAW,CAAC;AAEhB,SACE;AAAA,IAAC;AAAA;AAAA,MACC,QAAQ;AAAA,MACR,gBAAgB;AAAA,QACd;AAAA,QACA,QAAQ,IAAI,KAAK,KAAK;AAAA,QACtB,QAAQ;AAAA,QACR,kBAAkB;AAAA,UAChB,sBAAsB,CAAC,UAAU;AAC/B,gBAAI,MAAM,MAAM,WAAW,QAAS,QAAO;AAC3C,gBAAI,MAAM,MAAM,YAAY,MAAO,QAAO;AAC1C,iBAAK,MAAM,MAAM,mBAAmB,KAAK,GAAI,QAAO;AACpD,mBAAO;AAAA,UACT;AAAA,QACF;AAAA,MACF;AAAA,MAEC;AAAA;AAAA,QACD,oBAAC,sBAAmB,eAAe,OAAO;AAAA;AAAA;AAAA,EAC5C;AAEJ;","names":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@greatapps/common",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.86",
|
|
4
4
|
"description": "Shared library for GreatApps frontend applications",
|
|
5
5
|
"main": "./dist/index.mjs",
|
|
6
6
|
"types": "./src/index.ts",
|
|
@@ -39,11 +39,14 @@
|
|
|
39
39
|
"@radix-ui/react-switch": "^1.2.6",
|
|
40
40
|
"@radix-ui/react-tabs": "^1.1.13",
|
|
41
41
|
"@radix-ui/react-tooltip": "^1.2.8",
|
|
42
|
+
"@tanstack/query-broadcast-client-experimental": "^5.90.20",
|
|
43
|
+
"@tanstack/react-query-persist-client": "^5.90.24",
|
|
42
44
|
"axios": "^1.13.5",
|
|
43
45
|
"class-variance-authority": "^0.7.1",
|
|
44
46
|
"clsx": "^2.1.1",
|
|
45
47
|
"cmdk": "^1.1.1",
|
|
46
48
|
"date-fns": "^4.1.0",
|
|
49
|
+
"idb-keyval": "^6.2.2",
|
|
47
50
|
"input-otp": "^1.4.2",
|
|
48
51
|
"lucide-react": "^0.575.0",
|
|
49
52
|
"react-day-picker": "^9.14.0",
|
|
@@ -60,7 +63,7 @@
|
|
|
60
63
|
"@types/react": "^19.2.14",
|
|
61
64
|
"@types/react-dom": "^19.2.3",
|
|
62
65
|
"glob": "^13.0.6",
|
|
63
|
-
"next": "15.5.
|
|
66
|
+
"next": "^15.5.12",
|
|
64
67
|
"react": "19.1.4",
|
|
65
68
|
"react-dom": "19.1.4",
|
|
66
69
|
"react-hook-form": "^7.71.2",
|
|
@@ -5,9 +5,15 @@ import {
|
|
|
5
5
|
QueryClient,
|
|
6
6
|
QueryClientProvider,
|
|
7
7
|
} from "@tanstack/react-query";
|
|
8
|
-
import { ReactNode, useState } from "react";
|
|
8
|
+
import { ReactNode, useEffect, useState } from "react";
|
|
9
9
|
import dynamic from "next/dynamic";
|
|
10
10
|
import { toast } from "sonner";
|
|
11
|
+
import {
|
|
12
|
+
PersistedClient,
|
|
13
|
+
PersistQueryClientProvider,
|
|
14
|
+
} from "@tanstack/react-query-persist-client";
|
|
15
|
+
import { broadcastQueryClient } from "@tanstack/query-broadcast-client-experimental";
|
|
16
|
+
import { set, get, del } from "idb-keyval";
|
|
11
17
|
|
|
12
18
|
// React Query Devtools só em desenvolvimento - remove do bundle de produção
|
|
13
19
|
const ReactQueryDevtools =
|
|
@@ -21,32 +27,101 @@ const ReactQueryDevtools =
|
|
|
21
27
|
)
|
|
22
28
|
: () => null;
|
|
23
29
|
|
|
30
|
+
export const persister = {
|
|
31
|
+
persistClient: async (client: PersistedClient) => {
|
|
32
|
+
try {
|
|
33
|
+
await set("rq-cache", client);
|
|
34
|
+
} catch {
|
|
35
|
+
console.warn("Falha ao persistir cache");
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
restoreClient: async (): Promise<PersistedClient | undefined> => {
|
|
39
|
+
try {
|
|
40
|
+
return await get("rq-cache");
|
|
41
|
+
} catch {
|
|
42
|
+
await del("rq-cache").catch(() => {});
|
|
43
|
+
return undefined;
|
|
44
|
+
}
|
|
45
|
+
},
|
|
46
|
+
removeClient: async () => {
|
|
47
|
+
try {
|
|
48
|
+
await del("rq-cache");
|
|
49
|
+
} catch {
|
|
50
|
+
console.warn("Falha ao remover cache");
|
|
51
|
+
}
|
|
52
|
+
},
|
|
53
|
+
};
|
|
54
|
+
|
|
24
55
|
interface QueryProviderProps {
|
|
25
56
|
children: ReactNode;
|
|
57
|
+
persisterVersion?: string;
|
|
26
58
|
}
|
|
27
59
|
|
|
28
|
-
export function QueryProvider({
|
|
60
|
+
export function QueryProvider({
|
|
61
|
+
children,
|
|
62
|
+
persisterVersion = "v1",
|
|
63
|
+
}: QueryProviderProps) {
|
|
29
64
|
const [queryClient] = useState(
|
|
30
65
|
() =>
|
|
31
66
|
new QueryClient({
|
|
32
67
|
defaultOptions: {
|
|
33
68
|
queries: {
|
|
34
|
-
staleTime: 60 * 1000,
|
|
69
|
+
staleTime: 5 * 60 * 1000,
|
|
70
|
+
gcTime: 4 * 60 * 60 * 1000,
|
|
35
71
|
refetchOnWindowFocus: false,
|
|
72
|
+
refetchOnReconnect: true,
|
|
73
|
+
retry: 2,
|
|
74
|
+
retryDelay: (attempt) => Math.min(1000 * 2 ** attempt, 30000),
|
|
75
|
+
},
|
|
76
|
+
mutations: {
|
|
77
|
+
retry: 1,
|
|
78
|
+
onError: (error) => {
|
|
79
|
+
toast.error(
|
|
80
|
+
error instanceof Error
|
|
81
|
+
? error.message
|
|
82
|
+
: "Erro inesperado na operação.",
|
|
83
|
+
);
|
|
84
|
+
},
|
|
36
85
|
},
|
|
37
86
|
},
|
|
38
87
|
queryCache: new QueryCache({
|
|
39
88
|
onError: (error) => {
|
|
40
|
-
toast.error(
|
|
89
|
+
toast.error(
|
|
90
|
+
error instanceof Error
|
|
91
|
+
? error.message
|
|
92
|
+
: "Ocorreu um erro inesperado. Por favor, tente novamente.",
|
|
93
|
+
);
|
|
41
94
|
},
|
|
42
95
|
}),
|
|
43
96
|
}),
|
|
44
97
|
);
|
|
45
98
|
|
|
99
|
+
useEffect(() => {
|
|
100
|
+
broadcastQueryClient({
|
|
101
|
+
queryClient,
|
|
102
|
+
broadcastChannel: "react-query",
|
|
103
|
+
});
|
|
104
|
+
}, [queryClient]);
|
|
105
|
+
|
|
46
106
|
return (
|
|
47
|
-
<
|
|
107
|
+
<PersistQueryClientProvider
|
|
108
|
+
client={queryClient}
|
|
109
|
+
persistOptions={{
|
|
110
|
+
persister,
|
|
111
|
+
maxAge: 2 * 60 * 60 * 1000,
|
|
112
|
+
buster: persisterVersion,
|
|
113
|
+
dehydrateOptions: {
|
|
114
|
+
shouldDehydrateQuery: (query) => {
|
|
115
|
+
if (query.state.status === "error") return false;
|
|
116
|
+
if (query.meta?.persist === false) return false;
|
|
117
|
+
if ((query.state.dataUpdateCount ?? 0) > 10) return false;
|
|
118
|
+
return true;
|
|
119
|
+
},
|
|
120
|
+
},
|
|
121
|
+
}}
|
|
122
|
+
>
|
|
48
123
|
{children}
|
|
49
124
|
<ReactQueryDevtools initialIsOpen={false} />
|
|
50
|
-
</
|
|
125
|
+
</PersistQueryClientProvider>
|
|
51
126
|
);
|
|
52
127
|
}
|