1 | 'use strict';
|
2 |
|
3 | Object.defineProperty(exports, '__esModule', { value: true });
|
4 |
|
5 | var reactQuery = require('react-query');
|
6 | var jotai = require('jotai');
|
7 |
|
8 | var queryClientAtom = jotai.atom(new reactQuery.QueryClient());
|
9 |
|
10 | function atomWithQuery(createQuery, getQueryClient) {
|
11 | if (getQueryClient === void 0) {
|
12 | getQueryClient = function getQueryClient(get) {
|
13 | return get(queryClientAtom);
|
14 | };
|
15 | }
|
16 |
|
17 | var queryDataAtom = jotai.atom(function (get) {
|
18 | var queryClient = getQueryClient(get);
|
19 | var options = typeof createQuery === 'function' ? createQuery(get) : createQuery;
|
20 | var settlePromise = null;
|
21 |
|
22 | var getInitialData = function getInitialData() {
|
23 | var data = queryClient.getQueryData(options.queryKey);
|
24 |
|
25 | if (data === undefined && options.initialData) {
|
26 | data = typeof options.initialData === 'function' ? options.initialData() : options.initialData;
|
27 | }
|
28 |
|
29 | return data;
|
30 | };
|
31 |
|
32 | var initialData = getInitialData();
|
33 | var dataAtom = jotai.atom(initialData === undefined && options.enabled !== false ? new Promise(function (resolve, reject) {
|
34 | settlePromise = function settlePromise(data, err) {
|
35 | if (err) {
|
36 | reject(err);
|
37 | } else {
|
38 | resolve(data);
|
39 | }
|
40 | };
|
41 | }) : initialData);
|
42 |
|
43 | var setData = function setData() {
|
44 | throw new Error('atomWithQuery: setting data without mount');
|
45 | };
|
46 |
|
47 | var listener = function listener(result) {
|
48 | if (result.error) {
|
49 | if (settlePromise) {
|
50 | settlePromise(undefined, result.error);
|
51 | settlePromise = null;
|
52 | } else {
|
53 | setData(Promise.reject(result.error));
|
54 | }
|
55 |
|
56 | return;
|
57 | }
|
58 |
|
59 | if (result.data === undefined) {
|
60 | return;
|
61 | }
|
62 |
|
63 | if (settlePromise) {
|
64 | settlePromise(result.data);
|
65 | settlePromise = null;
|
66 | } else {
|
67 | setData(result.data);
|
68 | }
|
69 | };
|
70 |
|
71 | var defaultedOptions = queryClient.defaultQueryObserverOptions(options);
|
72 |
|
73 | if (initialData === undefined && options.enabled !== false) {
|
74 | if (typeof defaultedOptions.staleTime !== 'number') {
|
75 | defaultedOptions.staleTime = 1000;
|
76 | }
|
77 | }
|
78 |
|
79 | var observer = new reactQuery.QueryObserver(queryClient, defaultedOptions);
|
80 |
|
81 | if (initialData === undefined && options.enabled !== false) {
|
82 | observer.fetchOptimistic(defaultedOptions).then(listener).catch(function (error) {
|
83 | return listener({
|
84 | error: error
|
85 | });
|
86 | });
|
87 | }
|
88 |
|
89 | dataAtom.onMount = function (update) {
|
90 | setData = update;
|
91 |
|
92 | if (options.enabled !== false) {
|
93 | return observer.subscribe(listener);
|
94 | }
|
95 | };
|
96 |
|
97 | return {
|
98 | dataAtom: dataAtom,
|
99 | observer: observer
|
100 | };
|
101 | }, function (get, set, action) {
|
102 | switch (action.type) {
|
103 | case 'refetch':
|
104 | {
|
105 | var _get2 = get(queryDataAtom),
|
106 | dataAtom = _get2.dataAtom,
|
107 | observer = _get2.observer;
|
108 |
|
109 | set(dataAtom, new Promise(function () {}));
|
110 | var p = Promise.resolve().then(function () {
|
111 | return observer.refetch({
|
112 | cancelRefetch: true
|
113 | });
|
114 | }).then(function () {});
|
115 | return p;
|
116 | }
|
117 |
|
118 | default:
|
119 | throw new Error('no action');
|
120 | }
|
121 | });
|
122 | var queryAtom = jotai.atom(function (get) {
|
123 | var _get3 = get(queryDataAtom),
|
124 | dataAtom = _get3.dataAtom;
|
125 |
|
126 | return get(dataAtom);
|
127 | }, function (_get, set, action) {
|
128 | return set(queryDataAtom, action);
|
129 | });
|
130 | return queryAtom;
|
131 | }
|
132 |
|
133 | function _objectWithoutPropertiesLoose(source, excluded) {
|
134 | if (source == null) return {};
|
135 | var target = {};
|
136 | var sourceKeys = Object.keys(source);
|
137 | var key, i;
|
138 |
|
139 | for (i = 0; i < sourceKeys.length; i++) {
|
140 | key = sourceKeys[i];
|
141 | if (excluded.indexOf(key) >= 0) continue;
|
142 | target[key] = source[key];
|
143 | }
|
144 |
|
145 | return target;
|
146 | }
|
147 |
|
148 | var _excluded = ["type"];
|
149 | function atomWithInfiniteQuery(createQuery, getQueryClient) {
|
150 | if (getQueryClient === void 0) {
|
151 | getQueryClient = function getQueryClient(get) {
|
152 | return get(queryClientAtom);
|
153 | };
|
154 | }
|
155 |
|
156 | var queryDataAtom = jotai.atom(function (get) {
|
157 | var queryClient = getQueryClient(get);
|
158 | var options = typeof createQuery === 'function' ? createQuery(get) : createQuery;
|
159 | var settlePromise = null;
|
160 |
|
161 | var getInitialData = function getInitialData() {
|
162 | var data = queryClient.getQueryData(options.queryKey);
|
163 |
|
164 | if (data === undefined && options.initialData) {
|
165 | data = typeof options.initialData === 'function' ? options.initialData() : options.initialData;
|
166 | }
|
167 |
|
168 | return data;
|
169 | };
|
170 |
|
171 | var initialData = getInitialData();
|
172 | var dataAtom = jotai.atom(initialData === undefined && options.enabled !== false ? new Promise(function (resolve, reject) {
|
173 | settlePromise = function settlePromise(data, err) {
|
174 | if (err) {
|
175 | reject(err);
|
176 | } else {
|
177 | resolve(data);
|
178 | }
|
179 | };
|
180 | }) : initialData);
|
181 |
|
182 | var setData = function setData() {
|
183 | throw new Error('atomWithInfiniteQuery: setting data without mount');
|
184 | };
|
185 |
|
186 | var listener = function listener(result) {
|
187 | if (result.error && !reactQuery.isCancelledError(result.error)) {
|
188 | if (settlePromise) {
|
189 | settlePromise(undefined, result.error);
|
190 | settlePromise = null;
|
191 | } else {
|
192 | setData(Promise.reject(result.error));
|
193 | }
|
194 |
|
195 | return;
|
196 | }
|
197 |
|
198 | if (result.data === undefined) {
|
199 | return;
|
200 | }
|
201 |
|
202 | if (settlePromise) {
|
203 | settlePromise(result.data);
|
204 | settlePromise = null;
|
205 | } else {
|
206 | setData(result.data);
|
207 | }
|
208 | };
|
209 |
|
210 | var defaultedOptions = queryClient.defaultQueryObserverOptions(options);
|
211 |
|
212 | if (initialData === undefined && options.enabled !== false) {
|
213 | if (typeof defaultedOptions.staleTime !== 'number') {
|
214 | defaultedOptions.staleTime = 1000;
|
215 | }
|
216 | }
|
217 |
|
218 | var observer = new reactQuery.InfiniteQueryObserver(queryClient, defaultedOptions);
|
219 |
|
220 | if (initialData === undefined && options.enabled !== false) {
|
221 | observer.fetchOptimistic(defaultedOptions).then(listener).catch(function (error) {
|
222 | return listener({
|
223 | error: error
|
224 | });
|
225 | });
|
226 | }
|
227 |
|
228 | dataAtom.onMount = function (update) {
|
229 | setData = update;
|
230 |
|
231 | if (options.enabled !== false) {
|
232 | return observer.subscribe(listener);
|
233 | }
|
234 | };
|
235 |
|
236 | return {
|
237 | dataAtom: dataAtom,
|
238 | observer: observer,
|
239 | options: options
|
240 | };
|
241 | }, function (get, _set, action) {
|
242 | var _get2 = get(queryDataAtom),
|
243 | observer = _get2.observer;
|
244 |
|
245 | switch (action.type) {
|
246 | case 'refetch':
|
247 | {
|
248 | action.type;
|
249 | var options = _objectWithoutPropertiesLoose(action, _excluded);
|
250 |
|
251 | void observer.refetch(options);
|
252 | break;
|
253 | }
|
254 |
|
255 | case 'fetchPreviousPage':
|
256 | {
|
257 | void observer.fetchPreviousPage();
|
258 | break;
|
259 | }
|
260 |
|
261 | case 'fetchNextPage':
|
262 | {
|
263 | void observer.fetchNextPage();
|
264 | break;
|
265 | }
|
266 | }
|
267 | });
|
268 | var queryAtom = jotai.atom(function (get) {
|
269 | var _get3 = get(queryDataAtom),
|
270 | dataAtom = _get3.dataAtom;
|
271 |
|
272 | return get(dataAtom);
|
273 | }, function (_get, set, action) {
|
274 | return set(queryDataAtom, action);
|
275 | });
|
276 | return queryAtom;
|
277 | }
|
278 |
|
279 | exports.atomWithInfiniteQuery = atomWithInfiniteQuery;
|
280 | exports.atomWithQuery = atomWithQuery;
|
281 | exports.queryClientAtom = queryClientAtom;
|