UNPKG

7.4 kBJavaScriptView Raw
1System.register(['react-query', 'jotai'], (function (exports) {
2 'use strict';
3 var QueryClient, QueryObserver, InfiniteQueryObserver, isCancelledError, atom;
4 return {
5 setters: [function (module) {
6 QueryClient = module.QueryClient;
7 QueryObserver = module.QueryObserver;
8 InfiniteQueryObserver = module.InfiniteQueryObserver;
9 isCancelledError = module.isCancelledError;
10 }, function (module) {
11 atom = module.atom;
12 }],
13 execute: (function () {
14
15 exports({
16 atomWithInfiniteQuery: atomWithInfiniteQuery,
17 atomWithQuery: atomWithQuery
18 });
19
20 const queryClientAtom = exports('queryClientAtom', atom(new QueryClient()));
21
22 function atomWithQuery(createQuery, getQueryClient = (get) => get(queryClientAtom)) {
23 const queryDataAtom = atom((get) => {
24 const queryClient = getQueryClient(get);
25 const options = typeof createQuery === "function" ? createQuery(get) : createQuery;
26 const defaultedOptions = queryClient.defaultQueryOptions(options);
27 const observer = new QueryObserver(queryClient, defaultedOptions);
28 const initialResult = observer.getCurrentResult();
29 let resolve = null;
30 const resultAtom = atom(initialResult.data === void 0 && options.enabled !== false ? new Promise((r) => {
31 resolve = r;
32 }) : initialResult);
33 let setResult = () => {
34 throw new Error("setting result without mount");
35 };
36 const state = {
37 isMounted: false,
38 unsubscribe: null
39 };
40 const listener = (result) => {
41 if (result.isFetching || !result.isError && result.data === void 0) {
42 return;
43 }
44 if (resolve) {
45 setTimeout(() => {
46 var _a;
47 if (!state.isMounted) {
48 (_a = state.unsubscribe) == null ? void 0 : _a.call(state);
49 state.unsubscribe = null;
50 }
51 }, 1e3);
52 resolve(result);
53 resolve = null;
54 } else {
55 setResult(result);
56 }
57 };
58 if (options.enabled !== false) {
59 state.unsubscribe = observer.subscribe(listener);
60 }
61 resultAtom.onMount = (update) => {
62 setResult = update;
63 state.isMounted = true;
64 if (options.enabled !== false && !state.unsubscribe) {
65 state.unsubscribe = observer.subscribe(listener);
66 listener(observer.getCurrentResult());
67 }
68 return () => {
69 var _a;
70 return (_a = state.unsubscribe) == null ? void 0 : _a.call(state);
71 };
72 };
73 return { options, resultAtom, observer, state };
74 }, (get, set, action) => {
75 var _a;
76 const { options, resultAtom, observer, state } = get(queryDataAtom);
77 if (options.enabled === false) {
78 return;
79 }
80 switch (action.type) {
81 case "refetch": {
82 set(resultAtom, new Promise(() => {
83 }));
84 if (!state.isMounted) {
85 (_a = state.unsubscribe) == null ? void 0 : _a.call(state);
86 state.unsubscribe = null;
87 }
88 return observer.refetch({ cancelRefetch: true }).then((result) => {
89 set(resultAtom, result);
90 });
91 }
92 }
93 });
94 const queryAtom = atom((get) => {
95 const { resultAtom } = get(queryDataAtom);
96 const result = get(resultAtom);
97 if (result.isError) {
98 throw result.error;
99 }
100 return result.data;
101 }, (_get, set, action) => set(queryDataAtom, action));
102 return queryAtom;
103 }
104
105 function atomWithInfiniteQuery(createQuery, getQueryClient = (get) => get(queryClientAtom)) {
106 const queryDataAtom = atom((get) => {
107 const queryClient = getQueryClient(get);
108 const options = typeof createQuery === "function" ? createQuery(get) : createQuery;
109 const defaultedOptions = queryClient.defaultQueryOptions(options);
110 const observer = new InfiniteQueryObserver(queryClient, defaultedOptions);
111 const initialResult = observer.getCurrentResult();
112 let resolve = null;
113 const resultAtom = atom(initialResult.data === void 0 && options.enabled !== false ? new Promise((r) => {
114 resolve = r;
115 }) : initialResult);
116 let setResult = () => {
117 throw new Error("setting result without mount");
118 };
119 const state = {
120 isMounted: false,
121 unsubscribe: null
122 };
123 const listener = (result) => {
124 if (result.isFetching || !result.isError && result.data === void 0 || result.isError && isCancelledError(result.error)) {
125 return;
126 }
127 if (resolve) {
128 setTimeout(() => {
129 var _a;
130 if (!state.isMounted) {
131 (_a = state.unsubscribe) == null ? void 0 : _a.call(state);
132 state.unsubscribe = null;
133 }
134 }, 1e3);
135 resolve(result);
136 resolve = null;
137 } else {
138 setResult(result);
139 }
140 };
141 if (options.enabled !== false) {
142 state.unsubscribe = observer.subscribe(listener);
143 }
144 resultAtom.onMount = (update) => {
145 setResult = update;
146 state.isMounted = true;
147 if (options.enabled !== false && !state.unsubscribe) {
148 state.unsubscribe = observer.subscribe(listener);
149 listener(observer.getCurrentResult());
150 }
151 return () => {
152 var _a;
153 return (_a = state.unsubscribe) == null ? void 0 : _a.call(state);
154 };
155 };
156 return { options, resultAtom, observer, state };
157 }, (get, set, action) => {
158 var _a;
159 const { options, resultAtom, observer, state } = get(queryDataAtom);
160 if (options.enabled === false) {
161 return;
162 }
163 switch (action.type) {
164 case "refetch": {
165 set(resultAtom, new Promise(() => {
166 }));
167 if (!state.isMounted) {
168 (_a = state.unsubscribe) == null ? void 0 : _a.call(state);
169 state.unsubscribe = null;
170 }
171 const { type: _type, ...rest } = action;
172 observer.refetch(rest).then((result) => {
173 set(resultAtom, result);
174 });
175 return;
176 }
177 case "fetchPreviousPage": {
178 observer.fetchPreviousPage();
179 return;
180 }
181 case "fetchNextPage": {
182 observer.fetchNextPage();
183 return;
184 }
185 }
186 });
187 const queryAtom = atom((get) => {
188 const { resultAtom } = get(queryDataAtom);
189 const result = get(resultAtom);
190 if (result.isError) {
191 throw result.error;
192 }
193 return result.data;
194 }, (_get, set, action) => set(queryDataAtom, action));
195 return queryAtom;
196 }
197
198 })
199 };
200}));