@go-avro/avro-js 0.0.2-beta.10 → 0.0.2-beta.101

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.
Files changed (51) hide show
  1. package/README.md +1 -0
  2. package/dist/auth/AuthManager.d.ts +11 -3
  3. package/dist/auth/AuthManager.js +45 -12
  4. package/dist/auth/storage.d.ts +8 -8
  5. package/dist/auth/storage.js +12 -10
  6. package/dist/client/QueryClient.d.ts +372 -15
  7. package/dist/client/QueryClient.js +335 -197
  8. package/dist/client/core/fetch.d.ts +1 -0
  9. package/dist/client/core/fetch.js +62 -0
  10. package/dist/client/core/utils.d.ts +1 -0
  11. package/dist/client/core/utils.js +14 -0
  12. package/dist/client/core/xhr.d.ts +1 -0
  13. package/dist/client/core/xhr.js +84 -0
  14. package/dist/client/hooks/analytics.d.ts +1 -0
  15. package/dist/client/hooks/analytics.js +10 -0
  16. package/dist/client/hooks/avro.d.ts +1 -0
  17. package/dist/client/hooks/avro.js +9 -0
  18. package/dist/client/hooks/bills.d.ts +1 -0
  19. package/dist/client/hooks/bills.js +141 -0
  20. package/dist/client/hooks/chats.d.ts +1 -0
  21. package/dist/client/hooks/chats.js +37 -0
  22. package/dist/client/hooks/companies.d.ts +1 -0
  23. package/dist/client/hooks/companies.js +90 -0
  24. package/dist/client/hooks/events.d.ts +1 -0
  25. package/dist/client/hooks/events.js +307 -0
  26. package/dist/client/hooks/jobs.d.ts +1 -0
  27. package/dist/client/hooks/jobs.js +178 -0
  28. package/dist/client/hooks/messages.d.ts +1 -0
  29. package/dist/client/hooks/messages.js +30 -0
  30. package/dist/client/hooks/months.d.ts +1 -0
  31. package/dist/client/hooks/months.js +92 -0
  32. package/dist/client/hooks/plans.d.ts +1 -0
  33. package/dist/client/hooks/plans.js +9 -0
  34. package/dist/client/hooks/root.d.ts +1 -0
  35. package/dist/client/hooks/root.js +8 -0
  36. package/dist/client/hooks/routes.d.ts +1 -0
  37. package/dist/client/hooks/routes.js +167 -0
  38. package/dist/client/hooks/sessions.d.ts +1 -0
  39. package/dist/client/hooks/sessions.js +175 -0
  40. package/dist/client/hooks/teams.d.ts +1 -0
  41. package/dist/client/hooks/teams.js +127 -0
  42. package/dist/client/hooks/users.d.ts +1 -0
  43. package/dist/client/hooks/users.js +104 -0
  44. package/dist/index.d.ts +19 -0
  45. package/dist/index.js +19 -0
  46. package/dist/types/api.d.ts +121 -30
  47. package/dist/types/api.js +10 -1
  48. package/dist/types/auth.d.ts +0 -5
  49. package/dist/types/cache.d.ts +9 -0
  50. package/dist/types/cache.js +1 -0
  51. package/package.json +6 -4
@@ -0,0 +1,307 @@
1
+ import { useQueryClient, useInfiniteQuery, useQuery, useMutation } from '@tanstack/react-query';
2
+ import { AvroQueryClient } from '../../client/QueryClient';
3
+ AvroQueryClient.prototype.useGetEvents = function (body) {
4
+ const queryClient = useQueryClient();
5
+ const result = useInfiniteQuery({
6
+ queryKey: [
7
+ 'events',
8
+ this.companyId,
9
+ body.amt ?? 50,
10
+ body.known_ids ?? [],
11
+ body.unknown_ids ?? [],
12
+ body.query ?? '',
13
+ body.unbilled ?? true,
14
+ body.billed ?? true,
15
+ body.paid ?? true,
16
+ body.jobId ?? '',
17
+ ],
18
+ initialPageParam: 0,
19
+ getNextPageParam: (lastPage, allPages) => {
20
+ if (lastPage.length < (body.amt ?? 50))
21
+ return undefined;
22
+ return allPages.flat().length; // next offset
23
+ },
24
+ queryFn: ({ pageParam = 0 }) => this.fetchEvents({ ...body, offset: pageParam }),
25
+ });
26
+ if (result.data) {
27
+ result.data.pages.forEach((data_page) => {
28
+ data_page.forEach((event) => {
29
+ queryClient.setQueryData(['event', event.id], event);
30
+ });
31
+ });
32
+ }
33
+ return result;
34
+ };
35
+ AvroQueryClient.prototype.useGetEvent = function (eventId) {
36
+ return useQuery({
37
+ queryKey: ['event', eventId],
38
+ queryFn: () => this.get(`/event/${eventId}`),
39
+ enabled: Boolean(eventId),
40
+ });
41
+ };
42
+ AvroQueryClient.prototype.useCreateEvent = function () {
43
+ const queryClient = useQueryClient();
44
+ return useMutation({
45
+ mutationFn: ({ eventData }) => {
46
+ return this.post(`/company/${this.companyId}/event`, JSON.stringify(eventData), undefined, {
47
+ "Content-Type": "application/json",
48
+ });
49
+ },
50
+ onMutate: async ({ eventData }) => {
51
+ await queryClient.cancelQueries({ queryKey: ['events'] });
52
+ const previousEvents = queryClient.getQueryData(['events']);
53
+ const previousJob = queryClient.getQueryData(['job', eventData.job_id]);
54
+ const previousJobs = queryClient.getQueryData(['jobs']);
55
+ if (previousJob) {
56
+ const updatedJob = {
57
+ ...previousJob,
58
+ last_event: eventData,
59
+ last_completed_event: (eventData.time_ended ?? -1) > -1 ? eventData : previousJob.last_completed_event,
60
+ };
61
+ updatedJob.tasks = previousJob.tasks.map((task) => {
62
+ if (eventData.tasks?.includes(task.id)) {
63
+ return {
64
+ ...task,
65
+ last_event: eventData,
66
+ last_completed_event: (eventData.time_ended ?? -1) > -1 ? eventData : task.last_completed_event,
67
+ };
68
+ }
69
+ return task;
70
+ });
71
+ const updatedJobs = previousJobs?.map((job) => job.id === updatedJob.id ? updatedJob : job);
72
+ queryClient.setQueryData(['job', previousJob.id], updatedJob);
73
+ queryClient.setQueryData(['jobs'], updatedJobs);
74
+ }
75
+ queryClient.setQueryData(['events'], (oldData) => {
76
+ if (!oldData)
77
+ return [];
78
+ if (oldData.pages) {
79
+ const firstPage = oldData.pages[0] || [];
80
+ return {
81
+ ...oldData,
82
+ pages: [
83
+ [
84
+ {
85
+ ...eventData,
86
+ id: Math.random().toString(36).substring(2, 11),
87
+ company_id: this.companyId,
88
+ },
89
+ ...firstPage,
90
+ ],
91
+ ...oldData.pages.slice(1),
92
+ ],
93
+ };
94
+ }
95
+ if (Array.isArray(oldData)) {
96
+ return [
97
+ {
98
+ ...eventData,
99
+ id: Math.random().toString(36).substring(2, 11),
100
+ company_id: this.companyId,
101
+ },
102
+ ...oldData,
103
+ ];
104
+ }
105
+ return oldData;
106
+ });
107
+ return { previousEvents, previousJob, previousJobs };
108
+ },
109
+ onError: (err, variables, context) => {
110
+ if (context?.previousEvents) {
111
+ queryClient.setQueryData(['events'], context.previousEvents);
112
+ }
113
+ if (context?.previousJob) {
114
+ queryClient.setQueryData(['job', context.previousJob.id], context.previousJob);
115
+ }
116
+ if (context?.previousJobs) {
117
+ queryClient.setQueryData(['jobs'], context.previousJobs);
118
+ }
119
+ },
120
+ onSettled: () => {
121
+ queryClient.invalidateQueries({ queryKey: ['events'] });
122
+ queryClient.invalidateQueries({ queryKey: ['job'] });
123
+ queryClient.invalidateQueries({ queryKey: ['jobs'] });
124
+ },
125
+ });
126
+ };
127
+ AvroQueryClient.prototype.useUpdateEvent = function () {
128
+ const queryClient = useQueryClient();
129
+ return useMutation({
130
+ mutationFn: ({ eventId, updates }) => {
131
+ return this.put(`/event/${eventId}`, JSON.stringify(updates), undefined, {
132
+ "Content-Type": "application/json",
133
+ });
134
+ },
135
+ onMutate: async ({ eventId, updates }) => {
136
+ await queryClient.cancelQueries({ queryKey: ['event', eventId] });
137
+ await queryClient.cancelQueries({ queryKey: ['events'] });
138
+ const previousEvent = queryClient.getQueryData(['event', eventId]);
139
+ const previousEvents = queryClient.getQueryData(['events']);
140
+ const previousJob = queryClient.getQueryData(['job', previousEvent?.job_id]);
141
+ const previousJobs = queryClient.getQueryData(['jobs']);
142
+ if (previousJob) {
143
+ const updatedJob = {
144
+ ...previousJob,
145
+ last_event: previousEvent ? { ...previousEvent, ...updates } : previousJob.last_event,
146
+ last_completed_event: (updates.time_ended ?? -1) > -1 && previousEvent ? { ...previousEvent, ...updates } : previousJob.last_completed_event,
147
+ };
148
+ updatedJob.tasks = previousJob.tasks.map((task) => {
149
+ if (updates.tasks?.includes(task.id)) {
150
+ return {
151
+ ...task,
152
+ last_event: previousEvent ? { ...previousEvent, ...updates } : task.last_event,
153
+ last_completed_event: (updates.time_ended ?? -1) > -1 ? (previousEvent ? { ...previousEvent, ...updates } : task.last_completed_event) : task.last_completed_event,
154
+ overdue_time: -task.frequency - task.delay,
155
+ };
156
+ }
157
+ return task;
158
+ });
159
+ const updatedJobs = previousJobs?.map((job) => job.id === updatedJob.id ? updatedJob : job);
160
+ queryClient.setQueryData(['job', previousJob.id], updatedJob);
161
+ queryClient.setQueryData(['jobs'], updatedJobs);
162
+ }
163
+ queryClient.setQueryData(['event', eventId], (oldData) => oldData ? { ...oldData, ...updates } : undefined);
164
+ queryClient.setQueriesData({ queryKey: ['events'] }, (oldData) => {
165
+ if (!oldData)
166
+ return oldData;
167
+ if (oldData.pages) {
168
+ const updatedPages = oldData.pages.map((page) => page.map((event) => event.id === eventId ? { ...event, ...updates } : event));
169
+ return { ...oldData, pages: updatedPages };
170
+ }
171
+ if (Array.isArray(oldData)) {
172
+ return oldData.map((event) => event.id === eventId ? { ...event, ...updates } : event);
173
+ }
174
+ return oldData;
175
+ });
176
+ return { previousEvent, previousEvents, previousJob, previousJobs };
177
+ },
178
+ onError: (_err, variables, context) => {
179
+ const { eventId } = variables;
180
+ if (context?.previousEvent) {
181
+ queryClient.setQueryData(['event', eventId], context.previousEvent);
182
+ }
183
+ if (context?.previousEvents) {
184
+ queryClient.setQueryData(['events'], context.previousEvents);
185
+ }
186
+ if (context?.previousJob) {
187
+ queryClient.setQueryData(['job', context.previousJob.id], context.previousJob);
188
+ }
189
+ if (context?.previousJobs) {
190
+ queryClient.setQueryData(['jobs'], context.previousJobs);
191
+ }
192
+ },
193
+ onSettled: (_data, _error, variables) => {
194
+ const { eventId } = variables;
195
+ queryClient.invalidateQueries({ queryKey: ['event', eventId] });
196
+ queryClient.invalidateQueries({ queryKey: ['events'] });
197
+ queryClient.invalidateQueries({ queryKey: ['job'] });
198
+ queryClient.invalidateQueries({ queryKey: ['jobs'] });
199
+ },
200
+ });
201
+ };
202
+ AvroQueryClient.prototype.useUpdateEvents = function () {
203
+ const queryClient = useQueryClient();
204
+ return useMutation({
205
+ mutationFn: async ({ events, action, }) => {
206
+ const eventIds = events.map(event => event.id);
207
+ return this.put(`/company/${this.companyId}/events`, JSON.stringify({
208
+ events: eventIds,
209
+ billed: true,
210
+ paid: action === "paid",
211
+ }), undefined, {
212
+ "Content-Type": "application/json",
213
+ });
214
+ },
215
+ onMutate: async ({ events, action }) => {
216
+ await queryClient.cancelQueries({ queryKey: ['events'] });
217
+ await queryClient.cancelQueries({ queryKey: ['event'] });
218
+ const previousEvents = queryClient.getQueryData(['events']);
219
+ const previousEventObjs = events.map(event => queryClient.getQueryData(['event', event.id]));
220
+ const eventIds = events.map(event => event.id);
221
+ // Optimistically update individual event cache
222
+ eventIds.forEach((eventId, idx) => {
223
+ queryClient.setQueryData(['event', eventId], (oldData) => {
224
+ return oldData
225
+ ? { ...oldData, billed: true, paid: action === "paid" }
226
+ : oldData;
227
+ });
228
+ });
229
+ // Optimistically update events list cache
230
+ queryClient.setQueriesData({ queryKey: ['events'] }, (oldData) => {
231
+ if (!oldData)
232
+ return oldData;
233
+ if (oldData.pages) {
234
+ const updatedPages = oldData.pages.map((page) => page.map((event) => eventIds.includes(event.id)
235
+ ? { ...event, billed: true, paid: action === "paid" }
236
+ : event));
237
+ return { ...oldData, pages: updatedPages };
238
+ }
239
+ if (Array.isArray(oldData)) {
240
+ return oldData.map((event) => eventIds.includes(event.id)
241
+ ? { ...event, billed: true, paid: action === "paid" }
242
+ : event);
243
+ }
244
+ return oldData;
245
+ });
246
+ return { previousEvents, previousEventObjs };
247
+ },
248
+ onError: (err, variables, context) => {
249
+ if (context?.previousEvents) {
250
+ queryClient.setQueryData(['events'], context.previousEvents);
251
+ }
252
+ if (context?.previousEventObjs) {
253
+ context.previousEventObjs.forEach((eventObj) => {
254
+ queryClient.setQueryData(['event', eventObj.id], eventObj);
255
+ });
256
+ }
257
+ },
258
+ onSettled: () => {
259
+ queryClient.invalidateQueries({ queryKey: ['events'] });
260
+ queryClient.invalidateQueries({ queryKey: ['event'] });
261
+ },
262
+ });
263
+ };
264
+ AvroQueryClient.prototype.useDeleteEvent = function () {
265
+ const queryClient = useQueryClient();
266
+ return useMutation({
267
+ mutationFn: async ({ eventId, }) => {
268
+ return this.delete(`/event/${eventId}`, undefined, {
269
+ "Content-Type": "application/json",
270
+ });
271
+ },
272
+ onMutate: async ({ eventId }) => {
273
+ await queryClient.cancelQueries({ queryKey: ['events'] });
274
+ await queryClient.cancelQueries({ queryKey: ['event', eventId] });
275
+ const previousEvents = queryClient.getQueryData(['events']);
276
+ const previousEvent = queryClient.getQueryData(['event', eventId]);
277
+ queryClient.setQueryData(['event', eventId], undefined);
278
+ queryClient.setQueriesData({ queryKey: ['events'] }, (oldData) => {
279
+ if (!oldData)
280
+ return oldData;
281
+ if (oldData.pages) {
282
+ const updatedPages = oldData.pages.map((page) => page.filter((event) => event.id !== eventId));
283
+ return { ...oldData, pages: updatedPages };
284
+ }
285
+ if (Array.isArray(oldData)) {
286
+ return oldData.filter((event) => event.id !== eventId);
287
+ }
288
+ return oldData;
289
+ });
290
+ return { previousEvents, previousEvent };
291
+ },
292
+ onError: (_err, variables, context) => {
293
+ const { eventId } = variables;
294
+ if (context?.previousEvents) {
295
+ queryClient.setQueryData(['events'], context.previousEvents);
296
+ }
297
+ if (context?.previousEvent) {
298
+ queryClient.setQueryData(['event', eventId], context.previousEvent);
299
+ }
300
+ },
301
+ onSettled: (_data, _error, variables) => {
302
+ const { eventId } = variables;
303
+ queryClient.invalidateQueries({ queryKey: ['events'] });
304
+ queryClient.invalidateQueries({ queryKey: ['event', eventId] });
305
+ },
306
+ });
307
+ };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,178 @@
1
+ import { useMutation, useQuery, useQueryClient, useInfiniteQuery } from '@tanstack/react-query';
2
+ import { AvroQueryClient } from '../../client/QueryClient';
3
+ AvroQueryClient.prototype.useGetJobs = function (body, total = 0, onProgress) {
4
+ const queryClient = useQueryClient();
5
+ const result = useInfiniteQuery({
6
+ queryKey: ['jobs', this.companyId, body.amt ?? 50, body.query ?? "", body.routeId ?? ""],
7
+ initialPageParam: 0,
8
+ getNextPageParam: (lastPage, allPages) => {
9
+ if (lastPage.length < (body.amt ?? 50))
10
+ return undefined;
11
+ return allPages.flat().length;
12
+ },
13
+ queryFn: ({ pageParam = 0 }) => {
14
+ onProgress?.(0);
15
+ return this.fetchJobs({
16
+ ...body,
17
+ route_id: body.routeId,
18
+ offset: pageParam,
19
+ });
20
+ },
21
+ });
22
+ if (result.data) {
23
+ result.data.pages.forEach((data_page) => {
24
+ data_page.forEach((job) => {
25
+ job.last_event = (job.tasks || []).reduce((latest, task) => {
26
+ return task.last_event && (!latest || task.last_event.time_started > (latest.time_started ?? 0)) ? task.last_event : latest;
27
+ }, null);
28
+ job.last_completed_event = (job.tasks || []).reduce((latest, task) => {
29
+ return task.last_completed_event && (!latest || task.last_completed_event.time_started > (latest.time_created ?? 0)) ? task.last_completed_event : latest;
30
+ }, null);
31
+ job.overdue_time = (job.tasks || []).reduce((maxOverdue, task) => {
32
+ return (task.overdue_time && task.overdue_time > maxOverdue) ? task.overdue_time : maxOverdue;
33
+ }, 0);
34
+ queryClient.setQueryData(['job', job.id], job);
35
+ });
36
+ });
37
+ }
38
+ return result;
39
+ };
40
+ AvroQueryClient.prototype.useGetJob = function (jobId) {
41
+ return useQuery({
42
+ queryKey: ['job', jobId],
43
+ queryFn: () => this.get(`/job/${jobId}`),
44
+ enabled: Boolean(jobId),
45
+ });
46
+ };
47
+ AvroQueryClient.prototype.useCreateJob = function () {
48
+ const queryClient = useQueryClient();
49
+ return useMutation({
50
+ mutationFn: ({ jobData }) => {
51
+ return this.post(`/company/${this.companyId}/job`, JSON.stringify(jobData), undefined, {
52
+ "Content-Type": "application/json",
53
+ });
54
+ },
55
+ onMutate: async ({ jobData }) => {
56
+ await queryClient.cancelQueries({ queryKey: ['jobs'] });
57
+ const previousJobs = queryClient.getQueryData(['jobs']);
58
+ queryClient.setQueryData(['jobs'], (oldData) => {
59
+ if (!oldData)
60
+ return [jobData];
61
+ if (oldData.pages) {
62
+ const firstPage = oldData.pages[0] || [];
63
+ return {
64
+ ...oldData,
65
+ pages: [[jobData, ...firstPage], ...oldData.pages.slice(1)],
66
+ };
67
+ }
68
+ if (Array.isArray(oldData)) {
69
+ return [jobData, ...oldData];
70
+ }
71
+ return oldData;
72
+ });
73
+ return { previousJobs };
74
+ },
75
+ onError: (err, variables, context) => {
76
+ if (context?.previousJobs) {
77
+ queryClient.setQueryData(['jobs'], context.previousJobs);
78
+ }
79
+ },
80
+ onSettled: (data, error, variables) => {
81
+ const { id: jobId } = data ?? {};
82
+ queryClient.invalidateQueries({ queryKey: ['jobs'] });
83
+ queryClient.invalidateQueries({ queryKey: ['job', jobId] });
84
+ },
85
+ });
86
+ };
87
+ AvroQueryClient.prototype.useUpdateJob = function () {
88
+ const queryClient = useQueryClient();
89
+ return useMutation({
90
+ mutationFn: ({ jobId, updates }) => {
91
+ return this.put(`/job/${jobId}`, JSON.stringify(updates), undefined, {
92
+ "Content-Type": "application/json",
93
+ });
94
+ },
95
+ onMutate: async ({ jobId, updates }) => {
96
+ await queryClient.cancelQueries({ queryKey: ['jobs'] });
97
+ await queryClient.cancelQueries({ queryKey: ['job', jobId] });
98
+ const previousJobs = queryClient.getQueryData(['jobs']);
99
+ const previousJob = queryClient.getQueryData(['job', jobId]);
100
+ queryClient.setQueryData(['job', jobId], (oldData) => oldData ? { ...oldData, ...updates } : undefined);
101
+ queryClient.setQueriesData({ queryKey: ['jobs'] }, (oldData) => {
102
+ if (!oldData)
103
+ return oldData;
104
+ if (oldData.pages) {
105
+ return {
106
+ ...oldData,
107
+ pages: oldData.pages.map((page) => page.map((job) => job.id === jobId ? { ...job, ...updates } : job)),
108
+ };
109
+ }
110
+ if (Array.isArray(oldData)) {
111
+ return oldData.map((job) => job.id === jobId ? { ...job, ...updates } : job);
112
+ }
113
+ return oldData;
114
+ });
115
+ return { previousJobs, previousJob };
116
+ },
117
+ onError: (err, variables, context) => {
118
+ const { jobId } = variables;
119
+ if (context?.previousJobs) {
120
+ queryClient.setQueryData(['jobs'], context.previousJobs);
121
+ }
122
+ if (context?.previousJob) {
123
+ queryClient.setQueryData(['job', jobId], context.previousJob);
124
+ }
125
+ },
126
+ onSettled: (data, error, variables) => {
127
+ const { jobId } = variables;
128
+ queryClient.invalidateQueries({ queryKey: ['jobs'] });
129
+ queryClient.invalidateQueries({ queryKey: ['job', jobId] });
130
+ },
131
+ });
132
+ };
133
+ AvroQueryClient.prototype.useDeleteJob = function () {
134
+ const queryClient = useQueryClient();
135
+ return useMutation({
136
+ mutationFn: async ({ jobId }) => {
137
+ return this.delete(`/job/${jobId}`, undefined, {
138
+ "Content-Type": "application/json",
139
+ });
140
+ },
141
+ onMutate: async ({ jobId }) => {
142
+ await queryClient.cancelQueries({ queryKey: ['jobs'] });
143
+ await queryClient.cancelQueries({ queryKey: ['job', jobId] });
144
+ const previousJobs = queryClient.getQueryData(['jobs']);
145
+ const previousJob = queryClient.getQueryData(['job', jobId]);
146
+ queryClient.setQueryData(['job', jobId], undefined);
147
+ queryClient.setQueriesData({ queryKey: ['jobs'] }, (oldData) => {
148
+ if (!oldData)
149
+ return oldData;
150
+ if (oldData.pages) {
151
+ const updatedPages = oldData.pages.map((page) => page.filter((job) => job.id !== jobId));
152
+ return { ...oldData, pages: updatedPages };
153
+ }
154
+ if (Array.isArray(oldData)) {
155
+ return oldData.filter((job) => job.id !== jobId);
156
+ }
157
+ return oldData;
158
+ });
159
+ return { previousJobs, previousJob };
160
+ },
161
+ onError: (_err, variables, context) => {
162
+ const { jobId } = variables;
163
+ if (context?.previousJobs) {
164
+ queryClient.setQueryData(['jobs'], context.previousJobs);
165
+ }
166
+ if (context?.previousJob) {
167
+ queryClient.setQueryData(['job', jobId], context.previousJob);
168
+ }
169
+ },
170
+ onSettled: (_data, _error, variables) => {
171
+ const { jobId } = variables;
172
+ queryClient.invalidateQueries({ queryKey: ['jobs'] });
173
+ queryClient.invalidateQueries({ queryKey: ['routes'] });
174
+ queryClient.invalidateQueries({ queryKey: ['job', jobId] });
175
+ queryClient.invalidateQueries({ queryKey: ['route'] });
176
+ },
177
+ });
178
+ };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,30 @@
1
+ import { useInfiniteQuery, useQueryClient } from "@tanstack/react-query";
2
+ import { AvroQueryClient } from "../../client/QueryClient";
3
+ AvroQueryClient.prototype.useGetMessages = function (chatId, body) {
4
+ const queryClient = useQueryClient();
5
+ const result = useInfiniteQuery({
6
+ queryKey: [
7
+ 'messages',
8
+ chatId,
9
+ body.amt ?? 50,
10
+ body.known_ids ?? [],
11
+ body.unknown_ids ?? [],
12
+ body.query ?? '',
13
+ ],
14
+ initialPageParam: 0,
15
+ getNextPageParam: (lastPage, allPages) => {
16
+ if (lastPage.length < (body.amt ?? 50))
17
+ return undefined;
18
+ return allPages.flat().length; // next offset
19
+ },
20
+ queryFn: ({ pageParam = 0 }) => this.fetchMessages(chatId, { ...body, offset: pageParam }),
21
+ });
22
+ if (result.data) {
23
+ result.data.pages.forEach((data_page) => {
24
+ data_page.forEach((chat) => {
25
+ queryClient.setQueryData(['chat', chat.id], chat);
26
+ });
27
+ });
28
+ }
29
+ return result;
30
+ };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,92 @@
1
+ import { useQueryClient, useInfiniteQuery, useMutation } from '@tanstack/react-query';
2
+ import { AvroQueryClient } from '../../client/QueryClient';
3
+ AvroQueryClient.prototype.useGetMonths = function (body) {
4
+ const queryClient = useQueryClient();
5
+ const result = useInfiniteQuery({
6
+ queryKey: [
7
+ 'months',
8
+ this.companyId,
9
+ body.amt ?? 50,
10
+ body.known_ids ?? [],
11
+ body.unknown_ids ?? [],
12
+ body.query ?? '',
13
+ body.unbilled ?? true,
14
+ body.billed ?? true,
15
+ body.paid ?? true,
16
+ body.jobId ?? '',
17
+ ],
18
+ initialPageParam: 0,
19
+ getNextPageParam: (lastPage, allPages) => {
20
+ if (lastPage.length < (body.amt ?? 50))
21
+ return undefined;
22
+ return allPages.flat().length; // next offset
23
+ },
24
+ queryFn: ({ pageParam = 0 }) => this.fetchMonths({ ...body, offset: pageParam }),
25
+ });
26
+ if (result.data) {
27
+ result.data.pages.forEach((data_page) => {
28
+ data_page.forEach((month) => {
29
+ queryClient.setQueryData(['month', month.id], month);
30
+ });
31
+ });
32
+ }
33
+ return result;
34
+ };
35
+ AvroQueryClient.prototype.useUpdateMonths = function () {
36
+ const queryClient = useQueryClient();
37
+ return useMutation({
38
+ mutationFn: async ({ months, action, }) => {
39
+ const monthIds = months.map(month => month.id);
40
+ return this.put(`/company/${this.companyId}/months`, JSON.stringify({
41
+ months: monthIds,
42
+ billed: true,
43
+ paid: action === "paid",
44
+ }), undefined, {
45
+ "Content-Type": "application/json",
46
+ });
47
+ },
48
+ onMutate: async ({ months, action }) => {
49
+ await queryClient.cancelQueries({ queryKey: ['months'] });
50
+ await queryClient.cancelQueries({ queryKey: ['month'] });
51
+ const previousMonths = queryClient.getQueryData(['months']);
52
+ const previousMonthObjs = months.map(month => queryClient.getQueryData(['month', month.id]));
53
+ const monthIds = months.map(month => month.id);
54
+ monthIds.forEach((monthId, idx) => {
55
+ queryClient.setQueryData(['month', monthId], (oldData) => {
56
+ return oldData
57
+ ? { ...oldData, billed: true, paid: action === "paid" }
58
+ : oldData;
59
+ });
60
+ });
61
+ queryClient.setQueriesData({ queryKey: ['months'] }, (oldData) => {
62
+ if (!oldData)
63
+ return oldData;
64
+ if (oldData.pages) {
65
+ const updatedPages = oldData.pages.map((page) => page.map((month) => monthIds.includes(month.id)
66
+ ? { ...month, billed: true, paid: action === "paid" }
67
+ : month));
68
+ return { ...oldData, pages: updatedPages };
69
+ }
70
+ if (Array.isArray(oldData)) {
71
+ return oldData.map((month) => monthIds.includes(month.id)
72
+ ? { ...month, billed: true, paid: action === "paid" }
73
+ : month);
74
+ }
75
+ return oldData;
76
+ });
77
+ return { previousMonths, previousMonthObjs };
78
+ },
79
+ onError: (err, variables, context) => {
80
+ if (context) {
81
+ queryClient.setQueryData(['months'], context.previousMonths);
82
+ context.previousMonthObjs.forEach((monthObj) => {
83
+ queryClient.setQueryData(['month', monthObj.id], monthObj);
84
+ });
85
+ }
86
+ },
87
+ onSettled: () => {
88
+ queryClient.invalidateQueries({ queryKey: ['months'] });
89
+ queryClient.invalidateQueries({ queryKey: ['month'] });
90
+ },
91
+ });
92
+ };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,9 @@
1
+ import { useQuery, useQueryClient } from "@tanstack/react-query";
2
+ import { AvroQueryClient } from "../../client/QueryClient";
3
+ AvroQueryClient.prototype.useGetPlans = function (code) {
4
+ const queryClient = useQueryClient();
5
+ return useQuery({
6
+ queryKey: ['plans', code],
7
+ queryFn: async () => this.get(`/plans${code ? `?code=${code}` : ''}`),
8
+ });
9
+ };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,8 @@
1
+ import { useQuery } from '@tanstack/react-query';
2
+ import { AvroQueryClient } from '../../client/QueryClient';
3
+ AvroQueryClient.prototype.useGetRoot = function () {
4
+ return useQuery({
5
+ queryKey: ['health'],
6
+ queryFn: () => this.get('/'),
7
+ });
8
+ };
@@ -0,0 +1 @@
1
+ export {};