@growsober/sdk 1.0.5 → 1.0.8
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/dist/__tests__/e2e.test.d.ts +30 -0
- package/dist/__tests__/e2e.test.js +959 -63
- package/dist/api/mutations/badges.d.ts +116 -0
- package/dist/api/mutations/badges.js +177 -0
- package/dist/api/mutations/brands.d.ts +251 -0
- package/dist/api/mutations/brands.js +242 -0
- package/dist/api/mutations/creators.d.ts +131 -0
- package/dist/api/mutations/creators.js +129 -0
- package/dist/api/mutations/event-chat.d.ts +2 -2
- package/dist/api/mutations/event-chat.js +9 -9
- package/dist/api/mutations/index.d.ts +4 -0
- package/dist/api/mutations/index.js +5 -1
- package/dist/api/mutations/jack.d.ts +29 -0
- package/dist/api/mutations/jack.js +41 -1
- package/dist/api/mutations/products.d.ts +175 -0
- package/dist/api/mutations/products.js +226 -0
- package/dist/api/mutations/support.d.ts +20 -1
- package/dist/api/mutations/support.js +36 -1
- package/dist/api/queries/badges.d.ts +221 -0
- package/dist/api/queries/badges.js +290 -0
- package/dist/api/queries/bookings.d.ts +1 -1
- package/dist/api/queries/brands.d.ts +248 -0
- package/dist/api/queries/brands.js +226 -0
- package/dist/api/queries/businesses.d.ts +61 -1
- package/dist/api/queries/businesses.js +27 -1
- package/dist/api/queries/creators.d.ts +332 -0
- package/dist/api/queries/creators.js +249 -0
- package/dist/api/queries/event-chat.d.ts +1 -1
- package/dist/api/queries/event-chat.js +4 -4
- package/dist/api/queries/events.d.ts +45 -0
- package/dist/api/queries/index.d.ts +5 -0
- package/dist/api/queries/index.js +6 -1
- package/dist/api/queries/jack.d.ts +80 -0
- package/dist/api/queries/jack.js +98 -1
- package/dist/api/queries/library.d.ts +8 -0
- package/dist/api/queries/products.d.ts +185 -0
- package/dist/api/queries/products.js +203 -0
- package/dist/api/queries/support.d.ts +46 -1
- package/dist/api/queries/support.js +48 -1
- package/dist/api/queries/venues.d.ts +304 -0
- package/dist/api/queries/venues.js +211 -0
- package/dist/api/types.d.ts +245 -0
- package/dist/api/types.js +6 -1
- package/dist/api/utils/eventGrouping.d.ts +104 -0
- package/dist/api/utils/eventGrouping.js +155 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +5 -1
- package/package.json +5 -2
- package/src/__tests__/e2e.test.ts +996 -64
- package/src/api/mutations/badges.ts +228 -0
- package/src/api/mutations/brands.ts +376 -0
- package/src/api/mutations/creators.ts +171 -0
- package/src/api/mutations/event-chat.ts +8 -8
- package/src/api/mutations/index.ts +4 -0
- package/src/api/mutations/jack.ts +50 -1
- package/src/api/mutations/products.ts +336 -0
- package/src/api/mutations/support.ts +44 -0
- package/src/api/queries/badges.ts +385 -0
- package/src/api/queries/brands.ts +281 -0
- package/src/api/queries/businesses.ts +30 -1
- package/src/api/queries/creators.ts +308 -0
- package/src/api/queries/event-chat.ts +3 -3
- package/src/api/queries/index.ts +5 -0
- package/src/api/queries/jack.ts +139 -1
- package/src/api/queries/products.ts +312 -0
- package/src/api/queries/support.ts +54 -0
- package/src/api/queries/venues.ts +271 -0
- package/src/api/types.ts +317 -1
- package/src/api/utils/eventGrouping.ts +181 -0
- package/src/index.ts +6 -0
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.useCreateProduct = useCreateProduct;
|
|
4
|
+
exports.useUpdateProduct = useUpdateProduct;
|
|
5
|
+
exports.useDeleteProduct = useDeleteProduct;
|
|
6
|
+
exports.useBookProduct = useBookProduct;
|
|
7
|
+
exports.useUpdateProductBooking = useUpdateProductBooking;
|
|
8
|
+
exports.useCancelProductBooking = useCancelProductBooking;
|
|
9
|
+
exports.useCompleteProductBooking = useCompleteProductBooking;
|
|
10
|
+
const react_query_1 = require("@tanstack/react-query");
|
|
11
|
+
const client_1 = require("../client");
|
|
12
|
+
const products_1 = require("../queries/products");
|
|
13
|
+
// ============================================================================
|
|
14
|
+
// MUTATION HOOKS - PRODUCTS
|
|
15
|
+
// ============================================================================
|
|
16
|
+
/**
|
|
17
|
+
* Create a new product for a creator
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* ```tsx
|
|
21
|
+
* const { mutate: createProduct, isLoading } = useCreateProduct();
|
|
22
|
+
*
|
|
23
|
+
* createProduct({
|
|
24
|
+
* creatorId: 'creator-123',
|
|
25
|
+
* data: {
|
|
26
|
+
* title: '1-on-1 Coaching Session',
|
|
27
|
+
* description: 'Personal coaching session',
|
|
28
|
+
* type: 'SESSION_1ON1',
|
|
29
|
+
* price: 5000,
|
|
30
|
+
* durationMinutes: 60,
|
|
31
|
+
* },
|
|
32
|
+
* });
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
function useCreateProduct() {
|
|
36
|
+
const queryClient = (0, react_query_1.useQueryClient)();
|
|
37
|
+
return (0, react_query_1.useMutation)({
|
|
38
|
+
mutationFn: async ({ creatorId, data, }) => {
|
|
39
|
+
const client = (0, client_1.getApiClient)();
|
|
40
|
+
const response = await client.post(`/api/v1/creators/${creatorId}/products`, data);
|
|
41
|
+
return response.data;
|
|
42
|
+
},
|
|
43
|
+
onSuccess: (_, { creatorId }) => {
|
|
44
|
+
queryClient.invalidateQueries({ queryKey: products_1.productKeys.byCreator(creatorId) });
|
|
45
|
+
queryClient.invalidateQueries({ queryKey: products_1.productKeys.lists() });
|
|
46
|
+
},
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Update an existing product
|
|
51
|
+
*
|
|
52
|
+
* @example
|
|
53
|
+
* ```tsx
|
|
54
|
+
* const { mutate: updateProduct, isLoading } = useUpdateProduct();
|
|
55
|
+
*
|
|
56
|
+
* updateProduct({
|
|
57
|
+
* creatorId: 'creator-123',
|
|
58
|
+
* productId: 'product-456',
|
|
59
|
+
* data: {
|
|
60
|
+
* price: 6000,
|
|
61
|
+
* isActive: true,
|
|
62
|
+
* },
|
|
63
|
+
* });
|
|
64
|
+
* ```
|
|
65
|
+
*/
|
|
66
|
+
function useUpdateProduct() {
|
|
67
|
+
const queryClient = (0, react_query_1.useQueryClient)();
|
|
68
|
+
return (0, react_query_1.useMutation)({
|
|
69
|
+
mutationFn: async ({ creatorId, productId, data, }) => {
|
|
70
|
+
const client = (0, client_1.getApiClient)();
|
|
71
|
+
const response = await client.put(`/api/v1/creators/${creatorId}/products/${productId}`, data);
|
|
72
|
+
return response.data;
|
|
73
|
+
},
|
|
74
|
+
onSuccess: (_, { creatorId, productId }) => {
|
|
75
|
+
queryClient.invalidateQueries({ queryKey: products_1.productKeys.detail(productId) });
|
|
76
|
+
queryClient.invalidateQueries({ queryKey: products_1.productKeys.byCreator(creatorId) });
|
|
77
|
+
queryClient.invalidateQueries({ queryKey: products_1.productKeys.lists() });
|
|
78
|
+
},
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Delete a product
|
|
83
|
+
*
|
|
84
|
+
* @example
|
|
85
|
+
* ```tsx
|
|
86
|
+
* const { mutate: deleteProduct, isLoading } = useDeleteProduct();
|
|
87
|
+
*
|
|
88
|
+
* deleteProduct({
|
|
89
|
+
* creatorId: 'creator-123',
|
|
90
|
+
* productId: 'product-456',
|
|
91
|
+
* });
|
|
92
|
+
* ```
|
|
93
|
+
*/
|
|
94
|
+
function useDeleteProduct() {
|
|
95
|
+
const queryClient = (0, react_query_1.useQueryClient)();
|
|
96
|
+
return (0, react_query_1.useMutation)({
|
|
97
|
+
mutationFn: async ({ creatorId, productId, }) => {
|
|
98
|
+
const client = (0, client_1.getApiClient)();
|
|
99
|
+
await client.delete(`/api/v1/creators/${creatorId}/products/${productId}`);
|
|
100
|
+
},
|
|
101
|
+
onSuccess: (_, { creatorId, productId }) => {
|
|
102
|
+
queryClient.removeQueries({ queryKey: products_1.productKeys.detail(productId) });
|
|
103
|
+
queryClient.invalidateQueries({ queryKey: products_1.productKeys.byCreator(creatorId) });
|
|
104
|
+
queryClient.invalidateQueries({ queryKey: products_1.productKeys.lists() });
|
|
105
|
+
},
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
// ============================================================================
|
|
109
|
+
// MUTATION HOOKS - BOOKINGS
|
|
110
|
+
// ============================================================================
|
|
111
|
+
/**
|
|
112
|
+
* Book a product/session
|
|
113
|
+
*
|
|
114
|
+
* @example
|
|
115
|
+
* ```tsx
|
|
116
|
+
* const { mutate: bookProduct, isLoading } = useBookProduct();
|
|
117
|
+
*
|
|
118
|
+
* bookProduct({
|
|
119
|
+
* productId: 'product-123',
|
|
120
|
+
* data: {
|
|
121
|
+
* scheduledAt: '2024-03-15T10:00:00Z',
|
|
122
|
+
* timezone: 'Europe/London',
|
|
123
|
+
* clientNotes: 'Looking forward to the session!',
|
|
124
|
+
* },
|
|
125
|
+
* });
|
|
126
|
+
* ```
|
|
127
|
+
*/
|
|
128
|
+
function useBookProduct() {
|
|
129
|
+
const queryClient = (0, react_query_1.useQueryClient)();
|
|
130
|
+
return (0, react_query_1.useMutation)({
|
|
131
|
+
mutationFn: async ({ productId, data, }) => {
|
|
132
|
+
const client = (0, client_1.getApiClient)();
|
|
133
|
+
const response = await client.post(`/api/v1/products/${productId}/book`, data);
|
|
134
|
+
return response.data;
|
|
135
|
+
},
|
|
136
|
+
onSuccess: () => {
|
|
137
|
+
queryClient.invalidateQueries({ queryKey: products_1.productKeys.myBookings() });
|
|
138
|
+
},
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Update a product booking
|
|
143
|
+
*
|
|
144
|
+
* @example
|
|
145
|
+
* ```tsx
|
|
146
|
+
* const { mutate: updateBooking, isLoading } = useUpdateProductBooking();
|
|
147
|
+
*
|
|
148
|
+
* updateBooking({
|
|
149
|
+
* bookingId: 'booking-123',
|
|
150
|
+
* data: {
|
|
151
|
+
* scheduledAt: '2024-03-16T14:00:00Z',
|
|
152
|
+
* clientNotes: 'Rescheduled due to conflict',
|
|
153
|
+
* },
|
|
154
|
+
* });
|
|
155
|
+
* ```
|
|
156
|
+
*/
|
|
157
|
+
function useUpdateProductBooking() {
|
|
158
|
+
const queryClient = (0, react_query_1.useQueryClient)();
|
|
159
|
+
return (0, react_query_1.useMutation)({
|
|
160
|
+
mutationFn: async ({ bookingId, data, }) => {
|
|
161
|
+
const client = (0, client_1.getApiClient)();
|
|
162
|
+
const response = await client.put(`/api/v1/users/me/product-bookings/${bookingId}`, data);
|
|
163
|
+
return response.data;
|
|
164
|
+
},
|
|
165
|
+
onSuccess: (_, { bookingId }) => {
|
|
166
|
+
queryClient.invalidateQueries({ queryKey: products_1.productKeys.bookingDetail(bookingId) });
|
|
167
|
+
queryClient.invalidateQueries({ queryKey: products_1.productKeys.myBookings() });
|
|
168
|
+
// Also invalidate creator bookings as they see this
|
|
169
|
+
queryClient.invalidateQueries({ queryKey: products_1.productKeys.bookings() });
|
|
170
|
+
},
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Cancel a product booking
|
|
175
|
+
*
|
|
176
|
+
* @example
|
|
177
|
+
* ```tsx
|
|
178
|
+
* const { mutate: cancelBooking, isLoading } = useCancelProductBooking();
|
|
179
|
+
*
|
|
180
|
+
* cancelBooking({
|
|
181
|
+
* bookingId: 'booking-123',
|
|
182
|
+
* data: { reason: 'Schedule conflict' },
|
|
183
|
+
* });
|
|
184
|
+
* ```
|
|
185
|
+
*/
|
|
186
|
+
function useCancelProductBooking() {
|
|
187
|
+
const queryClient = (0, react_query_1.useQueryClient)();
|
|
188
|
+
return (0, react_query_1.useMutation)({
|
|
189
|
+
mutationFn: async ({ bookingId, data, }) => {
|
|
190
|
+
const client = (0, client_1.getApiClient)();
|
|
191
|
+
const response = await client.delete(`/api/v1/users/me/product-bookings/${bookingId}`, { data });
|
|
192
|
+
return response.data;
|
|
193
|
+
},
|
|
194
|
+
onSuccess: (_, { bookingId }) => {
|
|
195
|
+
queryClient.invalidateQueries({ queryKey: products_1.productKeys.bookingDetail(bookingId) });
|
|
196
|
+
queryClient.invalidateQueries({ queryKey: products_1.productKeys.myBookings() });
|
|
197
|
+
queryClient.invalidateQueries({ queryKey: products_1.productKeys.bookings() });
|
|
198
|
+
},
|
|
199
|
+
});
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Mark a booking as completed (creator only)
|
|
203
|
+
*
|
|
204
|
+
* @example
|
|
205
|
+
* ```tsx
|
|
206
|
+
* const { mutate: completeBooking, isLoading } = useCompleteProductBooking();
|
|
207
|
+
*
|
|
208
|
+
* completeBooking({ bookingId: 'booking-123' });
|
|
209
|
+
* ```
|
|
210
|
+
*/
|
|
211
|
+
function useCompleteProductBooking() {
|
|
212
|
+
const queryClient = (0, react_query_1.useQueryClient)();
|
|
213
|
+
return (0, react_query_1.useMutation)({
|
|
214
|
+
mutationFn: async ({ bookingId, }) => {
|
|
215
|
+
const client = (0, client_1.getApiClient)();
|
|
216
|
+
const response = await client.post(`/api/v1/users/me/product-bookings/${bookingId}/complete`);
|
|
217
|
+
return response.data;
|
|
218
|
+
},
|
|
219
|
+
onSuccess: (_, { bookingId }) => {
|
|
220
|
+
queryClient.invalidateQueries({ queryKey: products_1.productKeys.bookingDetail(bookingId) });
|
|
221
|
+
queryClient.invalidateQueries({ queryKey: products_1.productKeys.myBookings() });
|
|
222
|
+
queryClient.invalidateQueries({ queryKey: products_1.productKeys.bookings() });
|
|
223
|
+
},
|
|
224
|
+
});
|
|
225
|
+
}
|
|
226
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBpL211dGF0aW9ucy9wcm9kdWN0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQThFQSw0Q0FvQkM7QUFtQkQsNENBMEJDO0FBZUQsNENBb0JDO0FBdUJELHdDQW1CQztBQWtCRCwwREF5QkM7QUFlRCwwREF3QkM7QUFZRCw4REFxQkM7QUEvVUQsdURBQW9FO0FBQ3BFLHNDQUF5QztBQUN6QyxrREFBK0g7QUFxRC9ILCtFQUErRTtBQUMvRSw0QkFBNEI7QUFDNUIsK0VBQStFO0FBRS9FOzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrQkc7QUFDSCxTQUFnQixnQkFBZ0I7SUFDOUIsTUFBTSxXQUFXLEdBQUcsSUFBQSw0QkFBYyxHQUFFLENBQUM7SUFFckMsT0FBTyxJQUFBLHlCQUFXLEVBQUM7UUFDakIsVUFBVSxFQUFFLEtBQUssRUFBRSxFQUNqQixTQUFTLEVBQ1QsSUFBSSxHQUlMLEVBQW1DLEVBQUU7WUFDcEMsTUFBTSxNQUFNLEdBQUcsSUFBQSxxQkFBWSxHQUFFLENBQUM7WUFDOUIsTUFBTSxRQUFRLEdBQUcsTUFBTSxNQUFNLENBQUMsSUFBSSxDQUFDLG9CQUFvQixTQUFTLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNuRixPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUM7UUFDdkIsQ0FBQztRQUNELFNBQVMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUU7WUFDOUIsV0FBVyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsUUFBUSxFQUFFLHNCQUFXLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUM5RSxXQUFXLENBQUMsaUJBQWlCLENBQUMsRUFBRSxRQUFRLEVBQUUsc0JBQVcsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDbkUsQ0FBQztLQUNGLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7OztHQWdCRztBQUNILFNBQWdCLGdCQUFnQjtJQUM5QixNQUFNLFdBQVcsR0FBRyxJQUFBLDRCQUFjLEdBQUUsQ0FBQztJQUVyQyxPQUFPLElBQUEseUJBQVcsRUFBQztRQUNqQixVQUFVLEVBQUUsS0FBSyxFQUFFLEVBQ2pCLFNBQVMsRUFDVCxTQUFTLEVBQ1QsSUFBSSxHQUtMLEVBQW1DLEVBQUU7WUFDcEMsTUFBTSxNQUFNLEdBQUcsSUFBQSxxQkFBWSxHQUFFLENBQUM7WUFDOUIsTUFBTSxRQUFRLEdBQUcsTUFBTSxNQUFNLENBQUMsR0FBRyxDQUMvQixvQkFBb0IsU0FBUyxhQUFhLFNBQVMsRUFBRSxFQUNyRCxJQUFJLENBQ0wsQ0FBQztZQUNGLE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQztRQUN2QixDQUFDO1FBQ0QsU0FBUyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUU7WUFDekMsV0FBVyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsUUFBUSxFQUFFLHNCQUFXLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUMzRSxXQUFXLENBQUMsaUJBQWlCLENBQUMsRUFBRSxRQUFRLEVBQUUsc0JBQVcsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzlFLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLFFBQVEsRUFBRSxzQkFBVyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNuRSxDQUFDO0tBQ0YsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7R0FZRztBQUNILFNBQWdCLGdCQUFnQjtJQUM5QixNQUFNLFdBQVcsR0FBRyxJQUFBLDRCQUFjLEdBQUUsQ0FBQztJQUVyQyxPQUFPLElBQUEseUJBQVcsRUFBQztRQUNqQixVQUFVLEVBQUUsS0FBSyxFQUFFLEVBQ2pCLFNBQVMsRUFDVCxTQUFTLEdBSVYsRUFBaUIsRUFBRTtZQUNsQixNQUFNLE1BQU0sR0FBRyxJQUFBLHFCQUFZLEdBQUUsQ0FBQztZQUM5QixNQUFNLE1BQU0sQ0FBQyxNQUFNLENBQUMsb0JBQW9CLFNBQVMsYUFBYSxTQUFTLEVBQUUsQ0FBQyxDQUFDO1FBQzdFLENBQUM7UUFDRCxTQUFTLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRTtZQUN6QyxXQUFXLENBQUMsYUFBYSxDQUFDLEVBQUUsUUFBUSxFQUFFLHNCQUFXLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN2RSxXQUFXLENBQUMsaUJBQWlCLENBQUMsRUFBRSxRQUFRLEVBQUUsc0JBQVcsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzlFLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLFFBQVEsRUFBRSxzQkFBVyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNuRSxDQUFDO0tBQ0YsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELCtFQUErRTtBQUMvRSw0QkFBNEI7QUFDNUIsK0VBQStFO0FBRS9FOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBQ0gsU0FBZ0IsY0FBYztJQUM1QixNQUFNLFdBQVcsR0FBRyxJQUFBLDRCQUFjLEdBQUUsQ0FBQztJQUVyQyxPQUFPLElBQUEseUJBQVcsRUFBQztRQUNqQixVQUFVLEVBQUUsS0FBSyxFQUFFLEVBQ2pCLFNBQVMsRUFDVCxJQUFJLEdBSUwsRUFBbUMsRUFBRTtZQUNwQyxNQUFNLE1BQU0sR0FBRyxJQUFBLHFCQUFZLEdBQUUsQ0FBQztZQUM5QixNQUFNLFFBQVEsR0FBRyxNQUFNLE1BQU0sQ0FBQyxJQUFJLENBQUMsb0JBQW9CLFNBQVMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQy9FLE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQztRQUN2QixDQUFDO1FBQ0QsU0FBUyxFQUFFLEdBQUcsRUFBRTtZQUNkLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLFFBQVEsRUFBRSxzQkFBVyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN4RSxDQUFDO0tBQ0YsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILFNBQWdCLHVCQUF1QjtJQUNyQyxNQUFNLFdBQVcsR0FBRyxJQUFBLDRCQUFjLEdBQUUsQ0FBQztJQUVyQyxPQUFPLElBQUEseUJBQVcsRUFBQztRQUNqQixVQUFVLEVBQUUsS0FBSyxFQUFFLEVBQ2pCLFNBQVMsRUFDVCxJQUFJLEdBSUwsRUFBbUMsRUFBRTtZQUNwQyxNQUFNLE1BQU0sR0FBRyxJQUFBLHFCQUFZLEdBQUUsQ0FBQztZQUM5QixNQUFNLFFBQVEsR0FBRyxNQUFNLE1BQU0sQ0FBQyxHQUFHLENBQy9CLHFDQUFxQyxTQUFTLEVBQUUsRUFDaEQsSUFBSSxDQUNMLENBQUM7WUFDRixPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUM7UUFDdkIsQ0FBQztRQUNELFNBQVMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUU7WUFDOUIsV0FBVyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsUUFBUSxFQUFFLHNCQUFXLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNsRixXQUFXLENBQUMsaUJBQWlCLENBQUMsRUFBRSxRQUFRLEVBQUUsc0JBQVcsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDdEUsb0RBQW9EO1lBQ3BELFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLFFBQVEsRUFBRSxzQkFBVyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN0RSxDQUFDO0tBQ0YsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7R0FZRztBQUNILFNBQWdCLHVCQUF1QjtJQUNyQyxNQUFNLFdBQVcsR0FBRyxJQUFBLDRCQUFjLEdBQUUsQ0FBQztJQUVyQyxPQUFPLElBQUEseUJBQVcsRUFBQztRQUNqQixVQUFVLEVBQUUsS0FBSyxFQUFFLEVBQ2pCLFNBQVMsRUFDVCxJQUFJLEdBSUwsRUFBbUMsRUFBRTtZQUNwQyxNQUFNLE1BQU0sR0FBRyxJQUFBLHFCQUFZLEdBQUUsQ0FBQztZQUM5QixNQUFNLFFBQVEsR0FBRyxNQUFNLE1BQU0sQ0FBQyxNQUFNLENBQ2xDLHFDQUFxQyxTQUFTLEVBQUUsRUFDaEQsRUFBRSxJQUFJLEVBQUUsQ0FDVCxDQUFDO1lBQ0YsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDO1FBQ3ZCLENBQUM7UUFDRCxTQUFTLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFO1lBQzlCLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLFFBQVEsRUFBRSxzQkFBVyxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDbEYsV0FBVyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsUUFBUSxFQUFFLHNCQUFXLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3RFLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLFFBQVEsRUFBRSxzQkFBVyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN0RSxDQUFDO0tBQ0YsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVEOzs7Ozs7Ozs7R0FTRztBQUNILFNBQWdCLHlCQUF5QjtJQUN2QyxNQUFNLFdBQVcsR0FBRyxJQUFBLDRCQUFjLEdBQUUsQ0FBQztJQUVyQyxPQUFPLElBQUEseUJBQVcsRUFBQztRQUNqQixVQUFVLEVBQUUsS0FBSyxFQUFFLEVBQ2pCLFNBQVMsR0FHVixFQUFtQyxFQUFFO1lBQ3BDLE1BQU0sTUFBTSxHQUFHLElBQUEscUJBQVksR0FBRSxDQUFDO1lBQzlCLE1BQU0sUUFBUSxHQUFHLE1BQU0sTUFBTSxDQUFDLElBQUksQ0FDaEMscUNBQXFDLFNBQVMsV0FBVyxDQUMxRCxDQUFDO1lBQ0YsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDO1FBQ3ZCLENBQUM7UUFDRCxTQUFTLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFO1lBQzlCLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLFFBQVEsRUFBRSxzQkFBVyxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDbEYsV0FBVyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsUUFBUSxFQUFFLHNCQUFXLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3RFLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLFFBQVEsRUFBRSxzQkFBVyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN0RSxDQUFDO0tBQ0YsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHVzZU11dGF0aW9uLCB1c2VRdWVyeUNsaWVudCB9IGZyb20gJ0B0YW5zdGFjay9yZWFjdC1xdWVyeSc7XG5pbXBvcnQgeyBnZXRBcGlDbGllbnQgfSBmcm9tICcuLi9jbGllbnQnO1xuaW1wb3J0IHsgcHJvZHVjdEtleXMsIENyZWF0b3JQcm9kdWN0UmVzcG9uc2UsIFByb2R1Y3RCb29raW5nUmVzcG9uc2UsIFByb2R1Y3RUeXBlLCBEZWxpdmVyeU1ldGhvZCB9IGZyb20gJy4uL3F1ZXJpZXMvcHJvZHVjdHMnO1xuaW1wb3J0IHsgY3JlYXRvcktleXMgfSBmcm9tICcuLi9xdWVyaWVzL2NyZWF0b3JzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gVFlQRVNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IGludGVyZmFjZSBDcmVhdGVQcm9kdWN0UmVxdWVzdCB7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBpbWFnZVVybD86IHN0cmluZztcbiAgdHlwZT86IFByb2R1Y3RUeXBlO1xuICBwcmljZTogbnVtYmVyO1xuICBjdXJyZW5jeT86IHN0cmluZztcbiAgZHVyYXRpb25NaW51dGVzPzogbnVtYmVyO1xuICBtYXhQYXJ0aWNpcGFudHM/OiBudW1iZXI7XG4gIGRlbGl2ZXJ5TWV0aG9kPzogRGVsaXZlcnlNZXRob2Q7XG4gIGxvY2F0aW9uRGV0YWlscz86IHN0cmluZztcbiAgc2x1Zz86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVcGRhdGVQcm9kdWN0UmVxdWVzdCB7XG4gIHRpdGxlPzogc3RyaW5nO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgaW1hZ2VVcmw/OiBzdHJpbmc7XG4gIHR5cGU/OiBQcm9kdWN0VHlwZTtcbiAgcHJpY2U/OiBudW1iZXI7XG4gIGN1cnJlbmN5Pzogc3RyaW5nO1xuICBkdXJhdGlvbk1pbnV0ZXM/OiBudW1iZXI7XG4gIG1heFBhcnRpY2lwYW50cz86IG51bWJlcjtcbiAgZGVsaXZlcnlNZXRob2Q/OiBEZWxpdmVyeU1ldGhvZDtcbiAgbG9jYXRpb25EZXRhaWxzPzogc3RyaW5nO1xuICBpc0FjdGl2ZT86IGJvb2xlYW47XG4gIGlzRmVhdHVyZWQ/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJvb2tQcm9kdWN0UmVxdWVzdCB7XG4gIHNjaGVkdWxlZEF0OiBzdHJpbmc7XG4gIHRpbWV6b25lPzogc3RyaW5nO1xuICBjbGllbnROb3Rlcz86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVcGRhdGVCb29raW5nUmVxdWVzdCB7XG4gIHNjaGVkdWxlZEF0Pzogc3RyaW5nO1xuICBjbGllbnROb3Rlcz86IHN0cmluZztcbiAgY3JlYXRvck5vdGVzPzogc3RyaW5nO1xuICBtZWV0aW5nTGluaz86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDYW5jZWxCb29raW5nUmVxdWVzdCB7XG4gIHJlYXNvbj86IHN0cmluZztcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gTVVUQVRJT04gSE9PS1MgLSBQUk9EVUNUU1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIENyZWF0ZSBhIG5ldyBwcm9kdWN0IGZvciBhIGNyZWF0b3JcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHN4XG4gKiBjb25zdCB7IG11dGF0ZTogY3JlYXRlUHJvZHVjdCwgaXNMb2FkaW5nIH0gPSB1c2VDcmVhdGVQcm9kdWN0KCk7XG4gKlxuICogY3JlYXRlUHJvZHVjdCh7XG4gKiAgIGNyZWF0b3JJZDogJ2NyZWF0b3ItMTIzJyxcbiAqICAgZGF0YToge1xuICogICAgIHRpdGxlOiAnMS1vbi0xIENvYWNoaW5nIFNlc3Npb24nLFxuICogICAgIGRlc2NyaXB0aW9uOiAnUGVyc29uYWwgY29hY2hpbmcgc2Vzc2lvbicsXG4gKiAgICAgdHlwZTogJ1NFU1NJT05fMU9OMScsXG4gKiAgICAgcHJpY2U6IDUwMDAsXG4gKiAgICAgZHVyYXRpb25NaW51dGVzOiA2MCxcbiAqICAgfSxcbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VDcmVhdGVQcm9kdWN0KCkge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IHVzZVF1ZXJ5Q2xpZW50KCk7XG5cbiAgcmV0dXJuIHVzZU11dGF0aW9uKHtcbiAgICBtdXRhdGlvbkZuOiBhc3luYyAoe1xuICAgICAgY3JlYXRvcklkLFxuICAgICAgZGF0YSxcbiAgICB9OiB7XG4gICAgICBjcmVhdG9ySWQ6IHN0cmluZztcbiAgICAgIGRhdGE6IENyZWF0ZVByb2R1Y3RSZXF1ZXN0O1xuICAgIH0pOiBQcm9taXNlPENyZWF0b3JQcm9kdWN0UmVzcG9uc2U+ID0+IHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IGdldEFwaUNsaWVudCgpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQucG9zdChgL2FwaS92MS9jcmVhdG9ycy8ke2NyZWF0b3JJZH0vcHJvZHVjdHNgLCBkYXRhKTtcbiAgICAgIHJldHVybiByZXNwb25zZS5kYXRhO1xuICAgIH0sXG4gICAgb25TdWNjZXNzOiAoXywgeyBjcmVhdG9ySWQgfSkgPT4ge1xuICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoeyBxdWVyeUtleTogcHJvZHVjdEtleXMuYnlDcmVhdG9yKGNyZWF0b3JJZCkgfSk7XG4gICAgICBxdWVyeUNsaWVudC5pbnZhbGlkYXRlUXVlcmllcyh7IHF1ZXJ5S2V5OiBwcm9kdWN0S2V5cy5saXN0cygpIH0pO1xuICAgIH0sXG4gIH0pO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBhbiBleGlzdGluZyBwcm9kdWN0XG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzeFxuICogY29uc3QgeyBtdXRhdGU6IHVwZGF0ZVByb2R1Y3QsIGlzTG9hZGluZyB9ID0gdXNlVXBkYXRlUHJvZHVjdCgpO1xuICpcbiAqIHVwZGF0ZVByb2R1Y3Qoe1xuICogICBjcmVhdG9ySWQ6ICdjcmVhdG9yLTEyMycsXG4gKiAgIHByb2R1Y3RJZDogJ3Byb2R1Y3QtNDU2JyxcbiAqICAgZGF0YToge1xuICogICAgIHByaWNlOiA2MDAwLFxuICogICAgIGlzQWN0aXZlOiB0cnVlLFxuICogICB9LFxuICogfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVVwZGF0ZVByb2R1Y3QoKSB7XG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gdXNlUXVlcnlDbGllbnQoKTtcblxuICByZXR1cm4gdXNlTXV0YXRpb24oe1xuICAgIG11dGF0aW9uRm46IGFzeW5jICh7XG4gICAgICBjcmVhdG9ySWQsXG4gICAgICBwcm9kdWN0SWQsXG4gICAgICBkYXRhLFxuICAgIH06IHtcbiAgICAgIGNyZWF0b3JJZDogc3RyaW5nO1xuICAgICAgcHJvZHVjdElkOiBzdHJpbmc7XG4gICAgICBkYXRhOiBVcGRhdGVQcm9kdWN0UmVxdWVzdDtcbiAgICB9KTogUHJvbWlzZTxDcmVhdG9yUHJvZHVjdFJlc3BvbnNlPiA9PiB7XG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRBcGlDbGllbnQoKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LnB1dChcbiAgICAgICAgYC9hcGkvdjEvY3JlYXRvcnMvJHtjcmVhdG9ySWR9L3Byb2R1Y3RzLyR7cHJvZHVjdElkfWAsXG4gICAgICAgIGRhdGFcbiAgICAgICk7XG4gICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcbiAgICB9LFxuICAgIG9uU3VjY2VzczogKF8sIHsgY3JlYXRvcklkLCBwcm9kdWN0SWQgfSkgPT4ge1xuICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoeyBxdWVyeUtleTogcHJvZHVjdEtleXMuZGV0YWlsKHByb2R1Y3RJZCkgfSk7XG4gICAgICBxdWVyeUNsaWVudC5pbnZhbGlkYXRlUXVlcmllcyh7IHF1ZXJ5S2V5OiBwcm9kdWN0S2V5cy5ieUNyZWF0b3IoY3JlYXRvcklkKSB9KTtcbiAgICAgIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHsgcXVlcnlLZXk6IHByb2R1Y3RLZXlzLmxpc3RzKCkgfSk7XG4gICAgfSxcbiAgfSk7XG59XG5cbi8qKlxuICogRGVsZXRlIGEgcHJvZHVjdFxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c3hcbiAqIGNvbnN0IHsgbXV0YXRlOiBkZWxldGVQcm9kdWN0LCBpc0xvYWRpbmcgfSA9IHVzZURlbGV0ZVByb2R1Y3QoKTtcbiAqXG4gKiBkZWxldGVQcm9kdWN0KHtcbiAqICAgY3JlYXRvcklkOiAnY3JlYXRvci0xMjMnLFxuICogICBwcm9kdWN0SWQ6ICdwcm9kdWN0LTQ1NicsXG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlRGVsZXRlUHJvZHVjdCgpIHtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSB1c2VRdWVyeUNsaWVudCgpO1xuXG4gIHJldHVybiB1c2VNdXRhdGlvbih7XG4gICAgbXV0YXRpb25GbjogYXN5bmMgKHtcbiAgICAgIGNyZWF0b3JJZCxcbiAgICAgIHByb2R1Y3RJZCxcbiAgICB9OiB7XG4gICAgICBjcmVhdG9ySWQ6IHN0cmluZztcbiAgICAgIHByb2R1Y3RJZDogc3RyaW5nO1xuICAgIH0pOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IGdldEFwaUNsaWVudCgpO1xuICAgICAgYXdhaXQgY2xpZW50LmRlbGV0ZShgL2FwaS92MS9jcmVhdG9ycy8ke2NyZWF0b3JJZH0vcHJvZHVjdHMvJHtwcm9kdWN0SWR9YCk7XG4gICAgfSxcbiAgICBvblN1Y2Nlc3M6IChfLCB7IGNyZWF0b3JJZCwgcHJvZHVjdElkIH0pID0+IHtcbiAgICAgIHF1ZXJ5Q2xpZW50LnJlbW92ZVF1ZXJpZXMoeyBxdWVyeUtleTogcHJvZHVjdEtleXMuZGV0YWlsKHByb2R1Y3RJZCkgfSk7XG4gICAgICBxdWVyeUNsaWVudC5pbnZhbGlkYXRlUXVlcmllcyh7IHF1ZXJ5S2V5OiBwcm9kdWN0S2V5cy5ieUNyZWF0b3IoY3JlYXRvcklkKSB9KTtcbiAgICAgIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHsgcXVlcnlLZXk6IHByb2R1Y3RLZXlzLmxpc3RzKCkgfSk7XG4gICAgfSxcbiAgfSk7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIE1VVEFUSU9OIEhPT0tTIC0gQk9PS0lOR1Ncbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBCb29rIGEgcHJvZHVjdC9zZXNzaW9uXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzeFxuICogY29uc3QgeyBtdXRhdGU6IGJvb2tQcm9kdWN0LCBpc0xvYWRpbmcgfSA9IHVzZUJvb2tQcm9kdWN0KCk7XG4gKlxuICogYm9va1Byb2R1Y3Qoe1xuICogICBwcm9kdWN0SWQ6ICdwcm9kdWN0LTEyMycsXG4gKiAgIGRhdGE6IHtcbiAqICAgICBzY2hlZHVsZWRBdDogJzIwMjQtMDMtMTVUMTA6MDA6MDBaJyxcbiAqICAgICB0aW1lem9uZTogJ0V1cm9wZS9Mb25kb24nLFxuICogICAgIGNsaWVudE5vdGVzOiAnTG9va2luZyBmb3J3YXJkIHRvIHRoZSBzZXNzaW9uIScsXG4gKiAgIH0sXG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlQm9va1Byb2R1Y3QoKSB7XG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gdXNlUXVlcnlDbGllbnQoKTtcblxuICByZXR1cm4gdXNlTXV0YXRpb24oe1xuICAgIG11dGF0aW9uRm46IGFzeW5jICh7XG4gICAgICBwcm9kdWN0SWQsXG4gICAgICBkYXRhLFxuICAgIH06IHtcbiAgICAgIHByb2R1Y3RJZDogc3RyaW5nO1xuICAgICAgZGF0YTogQm9va1Byb2R1Y3RSZXF1ZXN0O1xuICAgIH0pOiBQcm9taXNlPFByb2R1Y3RCb29raW5nUmVzcG9uc2U+ID0+IHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IGdldEFwaUNsaWVudCgpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQucG9zdChgL2FwaS92MS9wcm9kdWN0cy8ke3Byb2R1Y3RJZH0vYm9va2AsIGRhdGEpO1xuICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG4gICAgfSxcbiAgICBvblN1Y2Nlc3M6ICgpID0+IHtcbiAgICAgIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHsgcXVlcnlLZXk6IHByb2R1Y3RLZXlzLm15Qm9va2luZ3MoKSB9KTtcbiAgICB9LFxuICB9KTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgYSBwcm9kdWN0IGJvb2tpbmdcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHN4XG4gKiBjb25zdCB7IG11dGF0ZTogdXBkYXRlQm9va2luZywgaXNMb2FkaW5nIH0gPSB1c2VVcGRhdGVQcm9kdWN0Qm9va2luZygpO1xuICpcbiAqIHVwZGF0ZUJvb2tpbmcoe1xuICogICBib29raW5nSWQ6ICdib29raW5nLTEyMycsXG4gKiAgIGRhdGE6IHtcbiAqICAgICBzY2hlZHVsZWRBdDogJzIwMjQtMDMtMTZUMTQ6MDA6MDBaJyxcbiAqICAgICBjbGllbnROb3RlczogJ1Jlc2NoZWR1bGVkIGR1ZSB0byBjb25mbGljdCcsXG4gKiAgIH0sXG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlVXBkYXRlUHJvZHVjdEJvb2tpbmcoKSB7XG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gdXNlUXVlcnlDbGllbnQoKTtcblxuICByZXR1cm4gdXNlTXV0YXRpb24oe1xuICAgIG11dGF0aW9uRm46IGFzeW5jICh7XG4gICAgICBib29raW5nSWQsXG4gICAgICBkYXRhLFxuICAgIH06IHtcbiAgICAgIGJvb2tpbmdJZDogc3RyaW5nO1xuICAgICAgZGF0YTogVXBkYXRlQm9va2luZ1JlcXVlc3Q7XG4gICAgfSk6IFByb21pc2U8UHJvZHVjdEJvb2tpbmdSZXNwb25zZT4gPT4ge1xuICAgICAgY29uc3QgY2xpZW50ID0gZ2V0QXBpQ2xpZW50KCk7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5wdXQoXG4gICAgICAgIGAvYXBpL3YxL3VzZXJzL21lL3Byb2R1Y3QtYm9va2luZ3MvJHtib29raW5nSWR9YCxcbiAgICAgICAgZGF0YVxuICAgICAgKTtcbiAgICAgIHJldHVybiByZXNwb25zZS5kYXRhO1xuICAgIH0sXG4gICAgb25TdWNjZXNzOiAoXywgeyBib29raW5nSWQgfSkgPT4ge1xuICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoeyBxdWVyeUtleTogcHJvZHVjdEtleXMuYm9va2luZ0RldGFpbChib29raW5nSWQpIH0pO1xuICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoeyBxdWVyeUtleTogcHJvZHVjdEtleXMubXlCb29raW5ncygpIH0pO1xuICAgICAgLy8gQWxzbyBpbnZhbGlkYXRlIGNyZWF0b3IgYm9va2luZ3MgYXMgdGhleSBzZWUgdGhpc1xuICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoeyBxdWVyeUtleTogcHJvZHVjdEtleXMuYm9va2luZ3MoKSB9KTtcbiAgICB9LFxuICB9KTtcbn1cblxuLyoqXG4gKiBDYW5jZWwgYSBwcm9kdWN0IGJvb2tpbmdcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHN4XG4gKiBjb25zdCB7IG11dGF0ZTogY2FuY2VsQm9va2luZywgaXNMb2FkaW5nIH0gPSB1c2VDYW5jZWxQcm9kdWN0Qm9va2luZygpO1xuICpcbiAqIGNhbmNlbEJvb2tpbmcoe1xuICogICBib29raW5nSWQ6ICdib29raW5nLTEyMycsXG4gKiAgIGRhdGE6IHsgcmVhc29uOiAnU2NoZWR1bGUgY29uZmxpY3QnIH0sXG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlQ2FuY2VsUHJvZHVjdEJvb2tpbmcoKSB7XG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gdXNlUXVlcnlDbGllbnQoKTtcblxuICByZXR1cm4gdXNlTXV0YXRpb24oe1xuICAgIG11dGF0aW9uRm46IGFzeW5jICh7XG4gICAgICBib29raW5nSWQsXG4gICAgICBkYXRhLFxuICAgIH06IHtcbiAgICAgIGJvb2tpbmdJZDogc3RyaW5nO1xuICAgICAgZGF0YT86IENhbmNlbEJvb2tpbmdSZXF1ZXN0O1xuICAgIH0pOiBQcm9taXNlPFByb2R1Y3RCb29raW5nUmVzcG9uc2U+ID0+IHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IGdldEFwaUNsaWVudCgpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuZGVsZXRlKFxuICAgICAgICBgL2FwaS92MS91c2Vycy9tZS9wcm9kdWN0LWJvb2tpbmdzLyR7Ym9va2luZ0lkfWAsXG4gICAgICAgIHsgZGF0YSB9XG4gICAgICApO1xuICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG4gICAgfSxcbiAgICBvblN1Y2Nlc3M6IChfLCB7IGJvb2tpbmdJZCB9KSA9PiB7XG4gICAgICBxdWVyeUNsaWVudC5pbnZhbGlkYXRlUXVlcmllcyh7IHF1ZXJ5S2V5OiBwcm9kdWN0S2V5cy5ib29raW5nRGV0YWlsKGJvb2tpbmdJZCkgfSk7XG4gICAgICBxdWVyeUNsaWVudC5pbnZhbGlkYXRlUXVlcmllcyh7IHF1ZXJ5S2V5OiBwcm9kdWN0S2V5cy5teUJvb2tpbmdzKCkgfSk7XG4gICAgICBxdWVyeUNsaWVudC5pbnZhbGlkYXRlUXVlcmllcyh7IHF1ZXJ5S2V5OiBwcm9kdWN0S2V5cy5ib29raW5ncygpIH0pO1xuICAgIH0sXG4gIH0pO1xufVxuXG4vKipcbiAqIE1hcmsgYSBib29raW5nIGFzIGNvbXBsZXRlZCAoY3JlYXRvciBvbmx5KVxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c3hcbiAqIGNvbnN0IHsgbXV0YXRlOiBjb21wbGV0ZUJvb2tpbmcsIGlzTG9hZGluZyB9ID0gdXNlQ29tcGxldGVQcm9kdWN0Qm9va2luZygpO1xuICpcbiAqIGNvbXBsZXRlQm9va2luZyh7IGJvb2tpbmdJZDogJ2Jvb2tpbmctMTIzJyB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlQ29tcGxldGVQcm9kdWN0Qm9va2luZygpIHtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSB1c2VRdWVyeUNsaWVudCgpO1xuXG4gIHJldHVybiB1c2VNdXRhdGlvbih7XG4gICAgbXV0YXRpb25GbjogYXN5bmMgKHtcbiAgICAgIGJvb2tpbmdJZCxcbiAgICB9OiB7XG4gICAgICBib29raW5nSWQ6IHN0cmluZztcbiAgICB9KTogUHJvbWlzZTxQcm9kdWN0Qm9va2luZ1Jlc3BvbnNlPiA9PiB7XG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRBcGlDbGllbnQoKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LnBvc3QoXG4gICAgICAgIGAvYXBpL3YxL3VzZXJzL21lL3Byb2R1Y3QtYm9va2luZ3MvJHtib29raW5nSWR9L2NvbXBsZXRlYFxuICAgICAgKTtcbiAgICAgIHJldHVybiByZXNwb25zZS5kYXRhO1xuICAgIH0sXG4gICAgb25TdWNjZXNzOiAoXywgeyBib29raW5nSWQgfSkgPT4ge1xuICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoeyBxdWVyeUtleTogcHJvZHVjdEtleXMuYm9va2luZ0RldGFpbChib29raW5nSWQpIH0pO1xuICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoeyBxdWVyeUtleTogcHJvZHVjdEtleXMubXlCb29raW5ncygpIH0pO1xuICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoeyBxdWVyeUtleTogcHJvZHVjdEtleXMuYm9va2luZ3MoKSB9KTtcbiAgICB9LFxuICB9KTtcbn1cbiJdfQ==
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { UseMutationOptions, UseMutationResult } from '@tanstack/react-query';
|
|
2
|
-
import type { CheckInResponse, CreateCheckInRequest, UpdateCheckInRequest, MoodLogResponse, LogMoodRequest, WinResponse, CreateWinRequest, HabitResponse, CreateHabitRequest, UpdateHabitRequest, ReflectionResponse, CreateReflectionRequest } from '../types';
|
|
2
|
+
import type { CheckInResponse, CreateCheckInRequest, UpdateCheckInRequest, MoodLogResponse, LogMoodRequest, WinResponse, CreateWinRequest, HabitResponse, CreateHabitRequest, UpdateHabitRequest, ReflectionResponse, CreateReflectionRequest, CravingLogResponse, LogCravingRequest } from '../types';
|
|
3
3
|
/**
|
|
4
4
|
* Create a daily check-in
|
|
5
5
|
*
|
|
@@ -163,3 +163,22 @@ export declare function useCompleteHabit(options?: Omit<UseMutationOptions<Habit
|
|
|
163
163
|
* ```
|
|
164
164
|
*/
|
|
165
165
|
export declare function useCreateReflection(options?: Omit<UseMutationOptions<ReflectionResponse, Error, CreateReflectionRequest>, 'mutationFn'>): UseMutationResult<ReflectionResponse, Error, CreateReflectionRequest>;
|
|
166
|
+
/**
|
|
167
|
+
* Log a craving
|
|
168
|
+
*
|
|
169
|
+
* @param options - TanStack Query mutation options
|
|
170
|
+
*
|
|
171
|
+
* @example
|
|
172
|
+
* ```tsx
|
|
173
|
+
* const { mutate, isPending } = useLogCraving();
|
|
174
|
+
*
|
|
175
|
+
* mutate({
|
|
176
|
+
* intensity: 4,
|
|
177
|
+
* trigger: 'Saw a beer ad',
|
|
178
|
+
* triggerType: 'ENVIRONMENT',
|
|
179
|
+
* copingUsed: ['deep_breathing', 'called_friend'],
|
|
180
|
+
* didResist: true
|
|
181
|
+
* });
|
|
182
|
+
* ```
|
|
183
|
+
*/
|
|
184
|
+
export declare function useLogCraving(options?: Omit<UseMutationOptions<CravingLogResponse, Error, LogCravingRequest>, 'mutationFn'>): UseMutationResult<CravingLogResponse, Error, LogCravingRequest>;
|
|
@@ -9,6 +9,7 @@ exports.useUpdateHabit = useUpdateHabit;
|
|
|
9
9
|
exports.useDeleteHabit = useDeleteHabit;
|
|
10
10
|
exports.useCompleteHabit = useCompleteHabit;
|
|
11
11
|
exports.useCreateReflection = useCreateReflection;
|
|
12
|
+
exports.useLogCraving = useLogCraving;
|
|
12
13
|
const react_query_1 = require("@tanstack/react-query");
|
|
13
14
|
const client_1 = require("../client");
|
|
14
15
|
const support_1 = require("../queries/support");
|
|
@@ -304,4 +305,38 @@ function useCreateReflection(options) {
|
|
|
304
305
|
...options,
|
|
305
306
|
});
|
|
306
307
|
}
|
|
307
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VwcG9ydC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcGkvbXV0YXRpb25zL3N1cHBvcnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUE0Q0EsNENBd0JDO0FBb0JELDRDQXNCQztBQWtCRCw0Q0FzQkM7QUFrQkQsb0NBdUJDO0FBbUJELHdDQXNCQztBQW9CRCx3Q0FnQ0M7QUFjRCx3Q0FrQkM7QUFjRCw0Q0FtQkM7QUFrQkQsa0RBc0JDO0FBcllELHVEQUsrQjtBQUMvQixzQ0FBeUM7QUFlekMsZ0RBQWlEO0FBRWpELCtFQUErRTtBQUMvRSxpQkFBaUI7QUFDakIsK0VBQStFO0FBRS9FOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBQ0gsU0FBZ0IsZ0JBQWdCLENBQzlCLE9BR0M7SUFFRCxNQUFNLFdBQVcsR0FBRyxJQUFBLDRCQUFjLEdBQUUsQ0FBQztJQUVyQyxPQUFPLElBQUEseUJBQVcsRUFBQztRQUNqQixVQUFVLEVBQUUsS0FBSyxFQUFFLElBQTBCLEVBQTRCLEVBQUU7WUFDekUsTUFBTSxNQUFNLEdBQUcsSUFBQSxxQkFBWSxHQUFFLENBQUM7WUFDOUIsTUFBTSxRQUFRLEdBQUcsTUFBTSxNQUFNLENBQUMsSUFBSSxDQUFDLDJCQUEyQixFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3RFLE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQztRQUN2QixDQUFDO1FBQ0QsU0FBUyxFQUFFLENBQUMsVUFBVSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsRUFBRTtZQUM1QyxpREFBaUQ7WUFDakQsV0FBVyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsUUFBUSxFQUFFLHFCQUFXLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3BFLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLFFBQVEsRUFBRSxxQkFBVyxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQztZQUN4RSxXQUFXLENBQUMsaUJBQWlCLENBQUMsRUFB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cUJBQVcsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFFdkUsb0NBQW9DO1FBQ3RDLENBQUM7UUFDRCxHQUFHLE9BQU87S0FDWCxDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgdXNlTXV0YXRpb24sXG4gIHVzZVF1ZXJ5Q2xpZW50LFxuICBVc2VNdXRhdGlvbk9wdGlvbnMsXG4gIFVzZU11dGF0aW9uUmVzdWx0LFxufSBmcm9tICdAdGFuc3RhY2svcmVhY3QtcXVlcnknO1xuaW1wb3J0IHsgZ2V0QXBpQ2xpZW50IH0gZnJvbSAnLi4vY2xpZW50JztcbmltcG9ydCB0eXBlIHtcbiAgQ2hlY2tJblJlc3BvbnNlLFxuICBDcmVhdGVDaGVja0luUmVxdWVzdCxcbiAgVXBkYXRlQ2hlY2tJblJlcXVlc3QsXG4gIE1vb2RMb2dSZXNwb25zZSxcbiAgTG9nTW9vZFJlcXVlc3QsXG4gIFdpblJlc3BvbnNlLFxuICBDcmVhdGVXaW5SZXF1ZXN0LFxuICBIYWJpdFJlc3BvbnNlLFxuICBDcmVhdGVIYWJpdFJlcXVlc3QsXG4gIFVwZGF0ZUhhYml0UmVxdWVzdCxcbiAgUmVmbGVjdGlvblJlc3BvbnNlLFxuICBDcmVhdGVSZWZsZWN0aW9uUmVxdWVzdCxcbn0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgc3VwcG9ydEtleXMgfSBmcm9tICcuLi9xdWVyaWVzL3N1cHBvcnQnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBNVVRBVElPTiBIT09LU1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIENyZWF0ZSBhIGRhaWx5IGNoZWNrLWluXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUYW5TdGFjayBRdWVyeSBtdXRhdGlvbiBvcHRpb25zXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzeFxuICogY29uc3QgeyBtdXRhdGUsIGlzUGVuZGluZyB9ID0gdXNlQ3JlYXRlQ2hlY2tJbigpO1xuICpcbiAqIG11dGF0ZSh7XG4gKiAgIG1vb2Q6IDgsXG4gKiAgIG5vdGVzOiAnRmVlbGluZyBncmVhdCB0b2RheSEnLFxuICogICB0cmlnZ2VyczogWydzdHJlc3MnXSxcbiAqICAgZ3JhdGl0dWRlOiBbJ015IHN1cHBvcnQgZ3JvdXAnXVxuICogfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUNyZWF0ZUNoZWNrSW4oXG4gIG9wdGlvbnM/OiBPbWl0PFxuICAgIFVzZU11dGF0aW9uT3B0aW9uczxDaGVja0luUmVzcG9uc2UsIEVycm9yLCBDcmVhdGVDaGVja0luUmVxdWVzdD4sXG4gICAgJ211dGF0aW9uRm4nXG4gID5cbik6IFVzZU11dGF0aW9uUmVzdWx0PENoZWNrSW5SZXNwb25zZSwgRXJyb3IsIENyZWF0ZUNoZWNrSW5SZXF1ZXN0PiB7XG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gdXNlUXVlcnlDbGllbnQoKTtcblxuICByZXR1cm4gdXNlTXV0YXRpb24oe1xuICAgIG11dGF0aW9uRm46IGFzeW5jIChkYXRhOiBDcmVhdGVDaGVja0luUmVxdWVzdCk6IFByb21pc2U8Q2hlY2tJblJlc3BvbnNlPiA9PiB7XG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRBcGlDbGllbnQoKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LnBvc3QoJy9hcGkvdjEvc3VwcG9ydC9jaGVjay1pbnMnLCBkYXRhKTtcbiAgICAgIHJldHVybiByZXNwb25zZS5kYXRhO1xuICAgIH0sXG4gICAgb25TdWNjZXNzOiAobmV3Q2hlY2tJbiwgdmFyaWFibGVzLCBjb250ZXh0KSA9PiB7XG4gICAgICAvLyBJbnZhbGlkYXRlIGNoZWNrLWlucyBsaXN0IGFuZCB0b2RheSdzIGNoZWNrLWluXG4gICAgICBxdWVyeUNsaWVudC5pbnZhbGlkYXRlUXVlcmllcyh7IHF1ZXJ5S2V5OiBzdXBwb3J0S2V5cy5jaGVja0lucygpIH0pO1xuICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoeyBxdWVyeUtleTogc3VwcG9ydEtleXMuY2hlY2tJblRvZGF5KCkgfSk7XG4gICAgICBxdWVyeUNsaWVudC5pbnZhbGlkYXRlUXVlcmllcyh7IHF1ZXJ5S2V5OiBzdXBwb3J0S2V5cy5jaGVja0luU3RyZWFrKCkgfSk7XG5cbiAgICAgIC8vIENhbGwgdXNlcidzIG9uU3VjY2VzcyBpZiBwcm92aWRlZFxuICAgIH0sXG4gICAgLi4ub3B0aW9ucyxcbiAgfSk7XG59XG5cbi8qKlxuICogVXBkYXRlIGEgZGFpbHkgY2hlY2staW5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRhblN0YWNrIFF1ZXJ5IG11dGF0aW9uIG9wdGlvbnNcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHN4XG4gKiBjb25zdCB7IG11dGF0ZSwgaXNQZW5kaW5nIH0gPSB1c2VVcGRhdGVDaGVja0luKCk7XG4gKlxuICogbXV0YXRlKHtcbiAqICAgaWQ6ICdjaGVja2luLTEyMycsXG4gKiAgIGRhdGE6IHtcbiAqICAgICBtb29kOiA0LFxuICogICAgIG5vdGVzOiAnVXBkYXRlZCBub3RlcycsXG4gKiAgIH1cbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VVcGRhdGVDaGVja0luKFxuICBvcHRpb25zPzogT21pdDxcbiAgICBVc2VNdXRhdGlvbk9wdGlvbnM8Q2hlY2tJblJlc3BvbnNlLCBFcnJvciwgeyBpZDogc3RyaW5nOyBkYXRhOiBVcGRhdGVDaGVja0luUmVxdWVzdCB9PixcbiAgICAnbXV0YXRpb25GbidcbiAgPlxuKTogVXNlTXV0YXRpb25SZXN1bHQ8Q2hlY2tJblJlc3BvbnNlLCBFcnJvciwgeyBpZDogc3RyaW5nOyBkYXRhOiBVcGRhdGVDaGVja0luUmVxdWVzdCB9PiB7XG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gdXNlUXVlcnlDbGllbnQoKTtcblxuICByZXR1cm4gdXNlTXV0YXRpb24oe1xuICAgIG11dGF0aW9uRm46IGFzeW5jICh7IGlkLCBkYXRhIH06IHsgaWQ6IHN0cmluZzsgZGF0YTogVXBkYXRlQ2hlY2tJblJlcXVlc3QgfSk6IFByb21pc2U8Q2hlY2tJblJlc3BvbnNlPiA9PiB7XG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRBcGlDbGllbnQoKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LnB1dChgL2FwaS92MS9zdXBwb3J0L2NoZWNrLWlucy8ke2lkfWAsIGRhdGEpO1xuICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG4gICAgfSxcbiAgICBvblN1Y2Nlc3M6ICh1cGRhdGVkQ2hlY2tJbiwgdmFyaWFibGVzLCBjb250ZXh0KSA9PiB7XG4gICAgICAvLyBJbnZhbGlkYXRlIGNoZWNrLWlucyBsaXN0IGFuZCB0b2RheSdzIGNoZWNrLWluXG4gICAgICBxdWVyeUNsaWVudC5pbnZhbGlkYXRlUXVlcmllcyh7IHF1ZXJ5S2V5OiBzdXBwb3J0S2V5cy5jaGVja0lucygpIH0pO1xuICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoeyBxdWVyeUtleTogc3VwcG9ydEtleXMuY2hlY2tJblRvZGF5KCkgfSk7XG4gICAgICBxdWVyeUNsaWVudC5pbnZhbGlkYXRlUXVlcmllcyh7IHF1ZXJ5S2V5OiBzdXBwb3J0S2V5cy5jaGVja0luU3RyZWFrKCkgfSk7XG4gICAgfSxcbiAgICAuLi5vcHRpb25zLFxuICB9KTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBtb29kIGxvZ1xuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGFuU3RhY2sgUXVlcnkgbXV0YXRpb24gb3B0aW9uc1xuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c3hcbiAqIGNvbnN0IHsgbXV0YXRlLCBpc1BlbmRpbmcgfSA9IHVzZUNyZWF0ZU1vb2RMb2coKTtcbiAqXG4gKiBtdXRhdGUoe1xuICogICBtb29kOiA3LFxuICogICBub3RlczogJ0ZlZWxpbmcgb3B0aW1pc3RpYycsXG4gKiAgIGFjdGl2aXRpZXM6IFsnZXhlcmNpc2UnLCAnbWVkaXRhdGlvbiddXG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlQ3JlYXRlTW9vZExvZyhcbiAgb3B0aW9ucz86IE9taXQ8XG4gICAgVXNlTXV0YXRpb25PcHRpb25zPE1vb2RMb2dSZXNwb25zZSwgRXJyb3IsIExvZ01vb2RSZXF1ZXN0PixcbiAgICAnbXV0YXRpb25GbidcbiAgPlxuKTogVXNlTXV0YXRpb25SZXN1bHQ8TW9vZExvZ1Jlc3BvbnNlLCBFcnJvciwgTG9nTW9vZFJlcXVlc3Q+IHtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSB1c2VRdWVyeUNsaWVudCgpO1xuXG4gIHJldHVybiB1c2VNdXRhdGlvbih7XG4gICAgbXV0YXRpb25GbjogYXN5bmMgKGRhdGE6IExvZ01vb2RSZXF1ZXN0KTogUHJvbWlzZTxNb29kTG9nUmVzcG9uc2U+ID0+IHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IGdldEFwaUNsaWVudCgpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQucG9zdCgnL2FwaS92MS9zdXBwb3J0L21vb2QnLCBkYXRhKTtcbiAgICAgIHJldHVybiByZXNwb25zZS5kYXRhO1xuICAgIH0sXG4gICAgb25TdWNjZXNzOiAobmV3TW9vZExvZywgdmFyaWFibGVzLCBjb250ZXh0KSA9PiB7XG4gICAgICAvLyBJbnZhbGlkYXRlIG1vb2QgbG9ncyBsaXN0XG4gICAgICBxdWVyeUNsaWVudC5pbnZhbGlkYXRlUXVlcmllcyh7IHF1ZXJ5S2V5OiBzdXBwb3J0S2V5cy5tb29kTG9ncygpIH0pO1xuXG4gICAgICAvLyBDYWxsIHVzZXIncyBvblN1Y2Nlc3MgaWYgcHJvdmlkZWRcbiAgICB9LFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pO1xufVxuXG4vKipcbiAqIENyZWF0ZSBhIHdpblxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGFuU3RhY2sgUXVlcnkgbXV0YXRpb24gb3B0aW9uc1xuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c3hcbiAqIGNvbnN0IHsgbXV0YXRlLCBpc1BlbmRpbmcgfSA9IHVzZUNyZWF0ZVdpbigpO1xuICpcbiAqIG11dGF0ZSh7XG4gKiAgIHRpdGxlOiAnMzAgZGF5cyBzb2JlciEnLFxuICogICBkZXNjcmlwdGlvbjogJ0hpdCBteSBmaXJzdCBtaWxlc3RvbmUnLFxuICogICBjYXRlZ29yeTogJ3NvYnJpZXR5J1xuICogfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUNyZWF0ZVdpbihcbiAgb3B0aW9ucz86IE9taXQ8XG4gICAgVXNlTXV0YXRpb25PcHRpb25zPFdpblJlc3BvbnNlLCBFcnJvciwgQ3JlYXRlV2luUmVxdWVzdD4sXG4gICAgJ211dGF0aW9uRm4nXG4gID5cbik6IFVzZU11dGF0aW9uUmVzdWx0PFdpblJlc3BvbnNlLCBFcnJvciwgQ3JlYXRlV2luUmVxdWVzdD4ge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IHVzZVF1ZXJ5Q2xpZW50KCk7XG5cbiAgcmV0dXJuIHVzZU11dGF0aW9uKHtcbiAgICBtdXRhdGlvbkZuOiBhc3luYyAoZGF0YTogQ3JlYXRlV2luUmVxdWVzdCk6IFByb21pc2U8V2luUmVzcG9uc2U+ID0+IHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IGdldEFwaUNsaWVudCgpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQucG9zdCgnL2FwaS92MS9zdXBwb3J0L3dpbnMnLCBkYXRhKTtcbiAgICAgIHJldHVybiByZXNwb25zZS5kYXRhO1xuICAgIH0sXG4gICAgb25TdWNjZXNzOiAobmV3V2luLCB2YXJpYWJsZXMsIGNvbnRleHQpID0+IHtcbiAgICAgIC8vIEludmFsaWRhdGUgd2lucyBsaXN0c1xuICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoeyBxdWVyeUtleTogc3VwcG9ydEtleXMud2lucygpIH0pO1xuICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoeyBxdWVyeUtleTogc3VwcG9ydEtleXMud2luc0J5Q2F0ZWdvcnkoKSB9KTtcblxuICAgICAgLy8gQ2FsbCB1c2VyJ3Mgb25TdWNjZXNzIGlmIHByb3ZpZGVkXG4gICAgfSxcbiAgICAuLi5vcHRpb25zLFxuICB9KTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBoYWJpdFxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGFuU3RhY2sgUXVlcnkgbXV0YXRpb24gb3B0aW9uc1xuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c3hcbiAqIGNvbnN0IHsgbXV0YXRlLCBpc1BlbmRpbmcgfSA9IHVzZUNyZWF0ZUhhYml0KCk7XG4gKlxuICogbXV0YXRlKHtcbiAqICAgbmFtZTogJ01vcm5pbmcgbWVkaXRhdGlvbicsXG4gKiAgIGRlc2NyaXB0aW9uOiAnMTAgbWludXRlcyBvZiBtaW5kZnVsbmVzcycsXG4gKiAgIGZyZXF1ZW5jeTogJ2RhaWx5JyxcbiAqICAgdGFyZ2V0RGF5czogN1xuICogfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUNyZWF0ZUhhYml0KFxuICBvcHRpb25zPzogT21pdDxcbiAgICBVc2VNdXRhdGlvbk9wdGlvbnM8SGFiaXRSZXNwb25zZSwgRXJyb3IsIENyZWF0ZUhhYml0UmVxdWVzdD4sXG4gICAgJ211dGF0aW9uRm4nXG4gID5cbik6IFVzZU11dGF0aW9uUmVzdWx0PEhhYml0UmVzcG9uc2UsIEVycm9yLCBDcmVhdGVIYWJpdFJlcXVlc3Q+IHtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSB1c2VRdWVyeUNsaWVudCgpO1xuXG4gIHJldHVybiB1c2VNdXRhdGlvbih7XG4gICAgbXV0YXRpb25GbjogYXN5bmMgKGRhdGE6IENyZWF0ZUhhYml0UmVxdWVzdCk6IFByb21pc2U8SGFiaXRSZXNwb25zZT4gPT4ge1xuICAgICAgY29uc3QgY2xpZW50ID0gZ2V0QXBpQ2xpZW50KCk7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5wb3N0KCcvYXBpL3YxL3N1cHBvcnQvaGFiaXRzJywgZGF0YSk7XG4gICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcbiAgICB9LFxuICAgIG9uU3VjY2VzczogKG5ld0hhYml0LCB2YXJpYWJsZXMsIGNvbnRleHQpID0+IHtcbiAgICAgIC8vIEludmFsaWRhdGUgaGFiaXRzIGxpc3RcbiAgICAgIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHsgcXVlcnlLZXk6IHN1cHBvcnRLZXlzLmhhYml0cygpIH0pO1xuXG4gICAgICAvLyBDYWxsIHVzZXIncyBvblN1Y2Nlc3MgaWYgcHJvdmlkZWRcbiAgICB9LFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBhIGhhYml0XG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUYW5TdGFjayBRdWVyeSBtdXRhdGlvbiBvcHRpb25zXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzeFxuICogY29uc3QgeyBtdXRhdGUsIGlzUGVuZGluZyB9ID0gdXNlVXBkYXRlSGFiaXQoKTtcbiAqXG4gKiBtdXRhdGUoe1xuICogICBpZDogJ2hhYml0LTEyMycsXG4gKiAgIGRhdGE6IHtcbiAqICAgICBuYW1lOiAnRXZlbmluZyBtZWRpdGF0aW9uJyxcbiAqICAgICB0YXJnZXREYXlzOiAxNFxuICogICB9XG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlVXBkYXRlSGFiaXQoXG4gIG9wdGlvbnM/OiBPbWl0PFxuICAgIFVzZU11dGF0aW9uT3B0aW9uczxcbiAgICAgIEhhYml0UmVzcG9uc2UsXG4gICAgICBFcnJvcixcbiAgICAgIHsgaWQ6IHN0cmluZzsgZGF0YTogVXBkYXRlSGFiaXRSZXF1ZXN0IH1cbiAgICA+LFxuICAgICdtdXRhdGlvbkZuJ1xuICA+XG4pOiBVc2VNdXRhdGlvblJlc3VsdDxIYWJpdFJlc3BvbnNlLCBFcnJvciwgeyBpZDogc3RyaW5nOyBkYXRhOiBVcGRhdGVIYWJpdFJlcXVlc3QgfT4ge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IHVzZVF1ZXJ5Q2xpZW50KCk7XG5cbiAgcmV0dXJuIHVzZU11dGF0aW9uKHtcbiAgICBtdXRhdGlvbkZuOiBhc3luYyAoe1xuICAgICAgaWQsXG4gICAgICBkYXRhLFxuICAgIH06IHtcbiAgICAgIGlkOiBzdHJpbmc7XG4gICAgICBkYXRhOiBVcGRhdGVIYWJpdFJlcXVlc3Q7XG4gICAgfSk6IFByb21pc2U8SGFiaXRSZXNwb25zZT4gPT4ge1xuICAgICAgY29uc3QgY2xpZW50ID0gZ2V0QXBpQ2xpZW50KCk7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5wdXQoYC9hcGkvdjEvc3VwcG9ydC9oYWJpdHMvJHtpZH1gLCBkYXRhKTtcbiAgICAgIHJldHVybiByZXNwb25zZS5kYXRhO1xuICAgIH0sXG4gICAgb25TdWNjZXNzOiAodXBkYXRlZEhhYml0LCB2YXJpYWJsZXMsIGNvbnRleHQpID0+IHtcbiAgICAgIC8vIEludmFsaWRhdGUgaGFiaXRzIGxpc3RcbiAgICAgIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHsgcXVlcnlLZXk6IHN1cHBvcnRLZXlzLmhhYml0cygpIH0pO1xuXG4gICAgICAvLyBDYWxsIHVzZXIncyBvblN1Y2Nlc3MgaWYgcHJvdmlkZWRcbiAgICB9LFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pO1xufVxuXG4vKipcbiAqIERlbGV0ZSBhIGhhYml0XG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUYW5TdGFjayBRdWVyeSBtdXRhdGlvbiBvcHRpb25zXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzeFxuICogY29uc3QgeyBtdXRhdGUsIGlzUGVuZGluZyB9ID0gdXNlRGVsZXRlSGFiaXQoKTtcbiAqXG4gKiBtdXRhdGUoJ2hhYml0LTEyMycpO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VEZWxldGVIYWJpdChcbiAgb3B0aW9ucz86IE9taXQ8VXNlTXV0YXRpb25PcHRpb25zPHZvaWQsIEVycm9yLCBzdHJpbmc+LCAnbXV0YXRpb25Gbic+XG4pOiBVc2VNdXRhdGlvblJlc3VsdDx2b2lkLCBFcnJvciwgc3RyaW5nPiB7XG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gdXNlUXVlcnlDbGllbnQoKTtcblxuICByZXR1cm4gdXNlTXV0YXRpb24oe1xuICAgIG11dGF0aW9uRm46IGFzeW5jIChpZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRBcGlDbGllbnQoKTtcbiAgICAgIGF3YWl0IGNsaWVudC5kZWxldGUoYC9hcGkvdjEvc3VwcG9ydC9oYWJpdHMvJHtpZH1gKTtcbiAgICB9LFxuICAgIG9uU3VjY2VzczogKGRhdGEsIGhhYml0SWQsIGNvbnRleHQpID0+IHtcbiAgICAgIC8vIEludmFsaWRhdGUgaGFiaXRzIGxpc3RcbiAgICAgIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHsgcXVlcnlLZXk6IHN1cHBvcnRLZXlzLmhhYml0cygpIH0pO1xuXG4gICAgICAvLyBDYWxsIHVzZXIncyBvblN1Y2Nlc3MgaWYgcHJvdmlkZWRcbiAgICB9LFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pO1xufVxuXG4vKipcbiAqIENvbXBsZXRlIGEgaGFiaXQgZm9yIHRvZGF5XG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUYW5TdGFjayBRdWVyeSBtdXRhdGlvbiBvcHRpb25zXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzeFxuICogY29uc3QgeyBtdXRhdGUsIGlzUGVuZGluZyB9ID0gdXNlQ29tcGxldGVIYWJpdCgpO1xuICpcbiAqIG11dGF0ZSgnaGFiaXQtMTIzJyk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUNvbXBsZXRlSGFiaXQoXG4gIG9wdGlvbnM/OiBPbWl0PFVzZU11dGF0aW9uT3B0aW9uczxIYWJpdFJlc3BvbnNlLCBFcnJvciwgc3RyaW5nPiwgJ211dGF0aW9uRm4nPlxuKTogVXNlTXV0YXRpb25SZXN1bHQ8SGFiaXRSZXNwb25zZSwgRXJyb3IsIHN0cmluZz4ge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IHVzZVF1ZXJ5Q2xpZW50KCk7XG5cbiAgcmV0dXJuIHVzZU11dGF0aW9uKHtcbiAgICBtdXRhdGlvbkZuOiBhc3luYyAoaWQ6IHN0cmluZyk6IFByb21pc2U8SGFiaXRSZXNwb25zZT4gPT4ge1xuICAgICAgY29uc3QgY2xpZW50ID0gZ2V0QXBpQ2xpZW50KCk7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5wb3N0KGAvYXBpL3YxL3N1cHBvcnQvaGFiaXRzLyR7aWR9L2NvbXBsZXRlYCk7XG4gICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcbiAgICB9LFxuICAgIG9uU3VjY2VzczogKGNvbXBsZXRlZEhhYml0LCBoYWJpdElkLCBjb250ZXh0KSA9PiB7XG4gICAgICAvLyBJbnZhbGlkYXRlIGhhYml0cyBsaXN0IHRvIHNob3cgdXBkYXRlZCBjb21wbGV0aW9uIHN0YXR1c1xuICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoeyBxdWVyeUtleTogc3VwcG9ydEtleXMuaGFiaXRzKCkgfSk7XG5cbiAgICAgIC8vIENhbGwgdXNlcidzIG9uU3VjY2VzcyBpZiBwcm92aWRlZFxuICAgIH0sXG4gICAgLi4ub3B0aW9ucyxcbiAgfSk7XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgcmVmbGVjdGlvblxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGFuU3RhY2sgUXVlcnkgbXV0YXRpb24gb3B0aW9uc1xuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c3hcbiAqIGNvbnN0IHsgbXV0YXRlLCBpc1BlbmRpbmcgfSA9IHVzZUNyZWF0ZVJlZmxlY3Rpb24oKTtcbiAqXG4gKiBtdXRhdGUoe1xuICogICBjb250ZW50OiAnVG9kYXkgSSBsZWFybmVkLi4uJyxcbiAqICAgY2F0ZWdvcnk6ICdncm93dGgnLFxuICogICBtb29kOiA4XG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlQ3JlYXRlUmVmbGVjdGlvbihcbiAgb3B0aW9ucz86IE9taXQ8XG4gICAgVXNlTXV0YXRpb25PcHRpb25zPFJlZmxlY3Rpb25SZXNwb25zZSwgRXJyb3IsIENyZWF0ZVJlZmxlY3Rpb25SZXF1ZXN0PixcbiAgICAnbXV0YXRpb25GbidcbiAgPlxuKTogVXNlTXV0YXRpb25SZXN1bHQ8UmVmbGVjdGlvblJlc3BvbnNlLCBFcnJvciwgQ3JlYXRlUmVmbGVjdGlvblJlcXVlc3Q+IHtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSB1c2VRdWVyeUNsaWVudCgpO1xuXG4gIHJldHVybiB1c2VNdXRhdGlvbih7XG4gICAgbXV0YXRpb25GbjogYXN5bmMgKGRhdGE6IENyZWF0ZVJlZmxlY3Rpb25SZXF1ZXN0KTogUHJvbWlzZTxSZWZsZWN0aW9uUmVzcG9uc2U+ID0+IHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IGdldEFwaUNsaWVudCgpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQucG9zdCgnL2FwaS92MS9zdXBwb3J0L3JlZmxlY3Rpb25zJywgZGF0YSk7XG4gICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcbiAgICB9LFxuICAgIG9uU3VjY2VzczogKG5ld1JlZmxlY3Rpb24sIHZhcmlhYmxlcywgY29udGV4dCkgPT4ge1xuICAgICAgLy8gSW52YWxpZGF0ZSByZWZsZWN0aW9ucyBsaXN0XG4gICAgICBxdWVyeUNsaWVudC5pbnZhbGlkYXRlUXVlcmllcyh7IHF1ZXJ5S2V5OiBzdXBwb3J0S2V5cy5yZWZsZWN0aW9ucygpIH0pO1xuXG4gICAgICAvLyBDYWxsIHVzZXIncyBvblN1Y2Nlc3MgaWYgcHJvdmlkZWRcbiAgICB9LFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pO1xufVxuIl19
|
|
308
|
+
/**
|
|
309
|
+
* Log a craving
|
|
310
|
+
*
|
|
311
|
+
* @param options - TanStack Query mutation options
|
|
312
|
+
*
|
|
313
|
+
* @example
|
|
314
|
+
* ```tsx
|
|
315
|
+
* const { mutate, isPending } = useLogCraving();
|
|
316
|
+
*
|
|
317
|
+
* mutate({
|
|
318
|
+
* intensity: 4,
|
|
319
|
+
* trigger: 'Saw a beer ad',
|
|
320
|
+
* triggerType: 'ENVIRONMENT',
|
|
321
|
+
* copingUsed: ['deep_breathing', 'called_friend'],
|
|
322
|
+
* didResist: true
|
|
323
|
+
* });
|
|
324
|
+
* ```
|
|
325
|
+
*/
|
|
326
|
+
function useLogCraving(options) {
|
|
327
|
+
const queryClient = (0, react_query_1.useQueryClient)();
|
|
328
|
+
return (0, react_query_1.useMutation)({
|
|
329
|
+
mutationFn: async (data) => {
|
|
330
|
+
const client = (0, client_1.getApiClient)();
|
|
331
|
+
const response = await client.post('/api/v1/support/cravings', data);
|
|
332
|
+
return response.data;
|
|
333
|
+
},
|
|
334
|
+
onSuccess: (newCraving, variables, context) => {
|
|
335
|
+
// Invalidate cravings list and stats
|
|
336
|
+
queryClient.invalidateQueries({ queryKey: support_1.supportKeys.cravings() });
|
|
337
|
+
// Call user's onSuccess if provided
|
|
338
|
+
},
|
|
339
|
+
...options,
|
|
340
|
+
});
|
|
341
|
+
}
|
|
342
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VwcG9ydC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcGkvbXV0YXRpb25zL3N1cHBvcnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUE4Q0EsNENBd0JDO0FBb0JELDRDQXNCQztBQWtCRCw0Q0FzQkM7QUFrQkQsb0NBdUJDO0FBbUJELHdDQXNCQztBQW9CRCx3Q0FnQ0M7QUFjRCx3Q0FrQkM7QUFjRCw0Q0FtQkM7QUFrQkQsa0RBc0JDO0FBb0JELHNDQXNCQztBQWpiRCx1REFLK0I7QUFDL0Isc0NBQXlDO0FBaUJ6QyxnREFBaUQ7QUFFakQsK0VBQStFO0FBQy9FLGlCQUFpQjtBQUNqQiwrRUFBK0U7QUFFL0U7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQkc7QUFDSCxTQUFnQixnQkFBZ0IsQ0FDOUIsT0FHQztJQUVELE1BQU0sV0FBVyxHQUFHLElBQUEsNEJBQWMsR0FBRSxDQUFDO0lBRXJDLE9BQU8sSUFBQSx5QkFBVyxFQUFDO1FBQ2pCLFVBQVUsRUFBRSxLQUFLLEVBQUUsSUFBMEIsRUFBNEIsRUFBRTtZQUN6RSxNQUFNLE1BQU0sR0FBRyxJQUFBLHFCQUFZLEdBQUUsQ0FBQztZQUM5QixNQUFNLFFBQVEsR0FBRyxNQUFNLE1BQU0sQ0FBQyxJQUFJLENBQUMsMkJBQTJCLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDdEUsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDO1FBQ3ZCLENBQUM7UUFDRCxTQUFTLEVBQUUsQ0FBQyxVQUFVLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxFQUFFO1lBQzVDLGlEQUFpRDtZQUNqRCxXQUFXLENBQUMsaUJBQWlCLENBQUMsRUFBRSxRQUFRLEVBQUUscUJBQVcsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDcEUsV0FBVyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsUUFBUSxFQUFFLHFCQUFXLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3hFLFdBQVcsQ0FBQyxp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QUFFLFFBQVEsRUFBRSxxQkFBVyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUV2RSxvQ0FBb0M7UUFDdEMsQ0FBQztRQUNELEdBQUcsT0FBTztLQUNYLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQkc7QUFDSCxTQUFnQixhQUFhLENBQzNCLE9BR0M7SUFFRCxNQUFNLFdBQVcsR0FBRyxJQUFBLDRCQUFjLEdBQUUsQ0FBQztJQUVyQyxPQUFPLElBQUEseUJBQVcsRUFBQztRQUNqQixVQUFVLEVBQUUsS0FBSyxFQUFFLElBQXVCLEVBQStCLEVBQUU7WUFDekUsTUFBTSxNQUFNLEdBQUcsSUFBQSxxQkFBWSxHQUFFLENBQUM7WUFDOUIsTUFBTSxRQUFRLEdBQUcsTUFBTSxNQUFNLENBQUMsSUFBSSxDQUFDLDBCQUEwQixFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3JFLE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQztRQUN2QixDQUFDO1FBQ0QsU0FBUyxFQUFFLENBQUMsVUFBVSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsRUFBRTtZQUM1QyxxQ0FBcUM7WUFDckMsV0FBVyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsUUFBUSxFQUFFLHFCQUFXLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBRXBFLG9DQUFvQztRQUN0QyxDQUFDO1FBQ0QsR0FBRyxPQUFPO0tBQ1gsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIHVzZU11dGF0aW9uLFxuICB1c2VRdWVyeUNsaWVudCxcbiAgVXNlTXV0YXRpb25PcHRpb25zLFxuICBVc2VNdXRhdGlvblJlc3VsdCxcbn0gZnJvbSAnQHRhbnN0YWNrL3JlYWN0LXF1ZXJ5JztcbmltcG9ydCB7IGdldEFwaUNsaWVudCB9IGZyb20gJy4uL2NsaWVudCc7XG5pbXBvcnQgdHlwZSB7XG4gIENoZWNrSW5SZXNwb25zZSxcbiAgQ3JlYXRlQ2hlY2tJblJlcXVlc3QsXG4gIFVwZGF0ZUNoZWNrSW5SZXF1ZXN0LFxuICBNb29kTG9nUmVzcG9uc2UsXG4gIExvZ01vb2RSZXF1ZXN0LFxuICBXaW5SZXNwb25zZSxcbiAgQ3JlYXRlV2luUmVxdWVzdCxcbiAgSGFiaXRSZXNwb25zZSxcbiAgQ3JlYXRlSGFiaXRSZXF1ZXN0LFxuICBVcGRhdGVIYWJpdFJlcXVlc3QsXG4gIFJlZmxlY3Rpb25SZXNwb25zZSxcbiAgQ3JlYXRlUmVmbGVjdGlvblJlcXVlc3QsXG4gIENyYXZpbmdMb2dSZXNwb25zZSxcbiAgTG9nQ3JhdmluZ1JlcXVlc3QsXG59IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IHN1cHBvcnRLZXlzIH0gZnJvbSAnLi4vcXVlcmllcy9zdXBwb3J0JztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gTVVUQVRJT04gSE9PS1Ncbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBDcmVhdGUgYSBkYWlseSBjaGVjay1pblxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGFuU3RhY2sgUXVlcnkgbXV0YXRpb24gb3B0aW9uc1xuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c3hcbiAqIGNvbnN0IHsgbXV0YXRlLCBpc1BlbmRpbmcgfSA9IHVzZUNyZWF0ZUNoZWNrSW4oKTtcbiAqXG4gKiBtdXRhdGUoe1xuICogICBtb29kOiA4LFxuICogICBub3RlczogJ0ZlZWxpbmcgZ3JlYXQgdG9kYXkhJyxcbiAqICAgdHJpZ2dlcnM6IFsnc3RyZXNzJ10sXG4gKiAgIGdyYXRpdHVkZTogWydNeSBzdXBwb3J0IGdyb3VwJ11cbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VDcmVhdGVDaGVja0luKFxuICBvcHRpb25zPzogT21pdDxcbiAgICBVc2VNdXRhdGlvbk9wdGlvbnM8Q2hlY2tJblJlc3BvbnNlLCBFcnJvciwgQ3JlYXRlQ2hlY2tJblJlcXVlc3Q+LFxuICAgICdtdXRhdGlvbkZuJ1xuICA+XG4pOiBVc2VNdXRhdGlvblJlc3VsdDxDaGVja0luUmVzcG9uc2UsIEVycm9yLCBDcmVhdGVDaGVja0luUmVxdWVzdD4ge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IHVzZVF1ZXJ5Q2xpZW50KCk7XG5cbiAgcmV0dXJuIHVzZU11dGF0aW9uKHtcbiAgICBtdXRhdGlvbkZuOiBhc3luYyAoZGF0YTogQ3JlYXRlQ2hlY2tJblJlcXVlc3QpOiBQcm9taXNlPENoZWNrSW5SZXNwb25zZT4gPT4ge1xuICAgICAgY29uc3QgY2xpZW50ID0gZ2V0QXBpQ2xpZW50KCk7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5wb3N0KCcvYXBpL3YxL3N1cHBvcnQvY2hlY2staW5zJywgZGF0YSk7XG4gICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcbiAgICB9LFxuICAgIG9uU3VjY2VzczogKG5ld0NoZWNrSW4sIHZhcmlhYmxlcywgY29udGV4dCkgPT4ge1xuICAgICAgLy8gSW52YWxpZGF0ZSBjaGVjay1pbnMgbGlzdCBhbmQgdG9kYXkncyBjaGVjay1pblxuICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoeyBxdWVyeUtleTogc3VwcG9ydEtleXMuY2hlY2tJbnMoKSB9KTtcbiAgICAgIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHsgcXVlcnlLZXk6IHN1cHBvcnRLZXlzLmNoZWNrSW5Ub2RheSgpIH0pO1xuICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoeyBxdWVyeUtleTogc3VwcG9ydEtleXMuY2hlY2tJblN0cmVhaygpIH0pO1xuXG4gICAgICAvLyBDYWxsIHVzZXIncyBvblN1Y2Nlc3MgaWYgcHJvdmlkZWRcbiAgICB9LFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBhIGRhaWx5IGNoZWNrLWluXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUYW5TdGFjayBRdWVyeSBtdXRhdGlvbiBvcHRpb25zXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzeFxuICogY29uc3QgeyBtdXRhdGUsIGlzUGVuZGluZyB9ID0gdXNlVXBkYXRlQ2hlY2tJbigpO1xuICpcbiAqIG11dGF0ZSh7XG4gKiAgIGlkOiAnY2hlY2tpbi0xMjMnLFxuICogICBkYXRhOiB7XG4gKiAgICAgbW9vZDogNCxcbiAqICAgICBub3RlczogJ1VwZGF0ZWQgbm90ZXMnLFxuICogICB9XG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlVXBkYXRlQ2hlY2tJbihcbiAgb3B0aW9ucz86IE9taXQ8XG4gICAgVXNlTXV0YXRpb25PcHRpb25zPENoZWNrSW5SZXNwb25zZSwgRXJyb3IsIHsgaWQ6IHN0cmluZzsgZGF0YTogVXBkYXRlQ2hlY2tJblJlcXVlc3QgfT4sXG4gICAgJ211dGF0aW9uRm4nXG4gID5cbik6IFVzZU11dGF0aW9uUmVzdWx0PENoZWNrSW5SZXNwb25zZSwgRXJyb3IsIHsgaWQ6IHN0cmluZzsgZGF0YTogVXBkYXRlQ2hlY2tJblJlcXVlc3QgfT4ge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IHVzZVF1ZXJ5Q2xpZW50KCk7XG5cbiAgcmV0dXJuIHVzZU11dGF0aW9uKHtcbiAgICBtdXRhdGlvbkZuOiBhc3luYyAoeyBpZCwgZGF0YSB9OiB7IGlkOiBzdHJpbmc7IGRhdGE6IFVwZGF0ZUNoZWNrSW5SZXF1ZXN0IH0pOiBQcm9taXNlPENoZWNrSW5SZXNwb25zZT4gPT4ge1xuICAgICAgY29uc3QgY2xpZW50ID0gZ2V0QXBpQ2xpZW50KCk7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5wdXQoYC9hcGkvdjEvc3VwcG9ydC9jaGVjay1pbnMvJHtpZH1gLCBkYXRhKTtcbiAgICAgIHJldHVybiByZXNwb25zZS5kYXRhO1xuICAgIH0sXG4gICAgb25TdWNjZXNzOiAodXBkYXRlZENoZWNrSW4sIHZhcmlhYmxlcywgY29udGV4dCkgPT4ge1xuICAgICAgLy8gSW52YWxpZGF0ZSBjaGVjay1pbnMgbGlzdCBhbmQgdG9kYXkncyBjaGVjay1pblxuICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoeyBxdWVyeUtleTogc3VwcG9ydEtleXMuY2hlY2tJbnMoKSB9KTtcbiAgICAgIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHsgcXVlcnlLZXk6IHN1cHBvcnRLZXlzLmNoZWNrSW5Ub2RheSgpIH0pO1xuICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoeyBxdWVyeUtleTogc3VwcG9ydEtleXMuY2hlY2tJblN0cmVhaygpIH0pO1xuICAgIH0sXG4gICAgLi4ub3B0aW9ucyxcbiAgfSk7XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgbW9vZCBsb2dcbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRhblN0YWNrIFF1ZXJ5IG11dGF0aW9uIG9wdGlvbnNcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHN4XG4gKiBjb25zdCB7IG11dGF0ZSwgaXNQZW5kaW5nIH0gPSB1c2VDcmVhdGVNb29kTG9nKCk7XG4gKlxuICogbXV0YXRlKHtcbiAqICAgbW9vZDogNyxcbiAqICAgbm90ZXM6ICdGZWVsaW5nIG9wdGltaXN0aWMnLFxuICogICBhY3Rpdml0aWVzOiBbJ2V4ZXJjaXNlJywgJ21lZGl0YXRpb24nXVxuICogfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUNyZWF0ZU1vb2RMb2coXG4gIG9wdGlvbnM/OiBPbWl0PFxuICAgIFVzZU11dGF0aW9uT3B0aW9uczxNb29kTG9nUmVzcG9uc2UsIEVycm9yLCBMb2dNb29kUmVxdWVzdD4sXG4gICAgJ211dGF0aW9uRm4nXG4gID5cbik6IFVzZU11dGF0aW9uUmVzdWx0PE1vb2RMb2dSZXNwb25zZSwgRXJyb3IsIExvZ01vb2RSZXF1ZXN0PiB7XG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gdXNlUXVlcnlDbGllbnQoKTtcblxuICByZXR1cm4gdXNlTXV0YXRpb24oe1xuICAgIG11dGF0aW9uRm46IGFzeW5jIChkYXRhOiBMb2dNb29kUmVxdWVzdCk6IFByb21pc2U8TW9vZExvZ1Jlc3BvbnNlPiA9PiB7XG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRBcGlDbGllbnQoKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LnBvc3QoJy9hcGkvdjEvc3VwcG9ydC9tb29kJywgZGF0YSk7XG4gICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcbiAgICB9LFxuICAgIG9uU3VjY2VzczogKG5ld01vb2RMb2csIHZhcmlhYmxlcywgY29udGV4dCkgPT4ge1xuICAgICAgLy8gSW52YWxpZGF0ZSBtb29kIGxvZ3MgbGlzdFxuICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoeyBxdWVyeUtleTogc3VwcG9ydEtleXMubW9vZExvZ3MoKSB9KTtcblxuICAgICAgLy8gQ2FsbCB1c2VyJ3Mgb25TdWNjZXNzIGlmIHByb3ZpZGVkXG4gICAgfSxcbiAgICAuLi5vcHRpb25zLFxuICB9KTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSB3aW5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRhblN0YWNrIFF1ZXJ5IG11dGF0aW9uIG9wdGlvbnNcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHN4XG4gKiBjb25zdCB7IG11dGF0ZSwgaXNQZW5kaW5nIH0gPSB1c2VDcmVhdGVXaW4oKTtcbiAqXG4gKiBtdXRhdGUoe1xuICogICB0aXRsZTogJzMwIGRheXMgc29iZXIhJyxcbiAqICAgZGVzY3JpcHRpb246ICdIaXQgbXkgZmlyc3QgbWlsZXN0b25lJyxcbiAqICAgY2F0ZWdvcnk6ICdzb2JyaWV0eSdcbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VDcmVhdGVXaW4oXG4gIG9wdGlvbnM/OiBPbWl0PFxuICAgIFVzZU11dGF0aW9uT3B0aW9uczxXaW5SZXNwb25zZSwgRXJyb3IsIENyZWF0ZVdpblJlcXVlc3Q+LFxuICAgICdtdXRhdGlvbkZuJ1xuICA+XG4pOiBVc2VNdXRhdGlvblJlc3VsdDxXaW5SZXNwb25zZSwgRXJyb3IsIENyZWF0ZVdpblJlcXVlc3Q+IHtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSB1c2VRdWVyeUNsaWVudCgpO1xuXG4gIHJldHVybiB1c2VNdXRhdGlvbih7XG4gICAgbXV0YXRpb25GbjogYXN5bmMgKGRhdGE6IENyZWF0ZVdpblJlcXVlc3QpOiBQcm9taXNlPFdpblJlc3BvbnNlPiA9PiB7XG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRBcGlDbGllbnQoKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LnBvc3QoJy9hcGkvdjEvc3VwcG9ydC93aW5zJywgZGF0YSk7XG4gICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcbiAgICB9LFxuICAgIG9uU3VjY2VzczogKG5ld1dpbiwgdmFyaWFibGVzLCBjb250ZXh0KSA9PiB7XG4gICAgICAvLyBJbnZhbGlkYXRlIHdpbnMgbGlzdHNcbiAgICAgIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHsgcXVlcnlLZXk6IHN1cHBvcnRLZXlzLndpbnMoKSB9KTtcbiAgICAgIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHsgcXVlcnlLZXk6IHN1cHBvcnRLZXlzLndpbnNCeUNhdGVnb3J5KCkgfSk7XG5cbiAgICAgIC8vIENhbGwgdXNlcidzIG9uU3VjY2VzcyBpZiBwcm92aWRlZFxuICAgIH0sXG4gICAgLi4ub3B0aW9ucyxcbiAgfSk7XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgaGFiaXRcbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRhblN0YWNrIFF1ZXJ5IG11dGF0aW9uIG9wdGlvbnNcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHN4XG4gKiBjb25zdCB7IG11dGF0ZSwgaXNQZW5kaW5nIH0gPSB1c2VDcmVhdGVIYWJpdCgpO1xuICpcbiAqIG11dGF0ZSh7XG4gKiAgIG5hbWU6ICdNb3JuaW5nIG1lZGl0YXRpb24nLFxuICogICBkZXNjcmlwdGlvbjogJzEwIG1pbnV0ZXMgb2YgbWluZGZ1bG5lc3MnLFxuICogICBmcmVxdWVuY3k6ICdkYWlseScsXG4gKiAgIHRhcmdldERheXM6IDdcbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VDcmVhdGVIYWJpdChcbiAgb3B0aW9ucz86IE9taXQ8XG4gICAgVXNlTXV0YXRpb25PcHRpb25zPEhhYml0UmVzcG9uc2UsIEVycm9yLCBDcmVhdGVIYWJpdFJlcXVlc3Q+LFxuICAgICdtdXRhdGlvbkZuJ1xuICA+XG4pOiBVc2VNdXRhdGlvblJlc3VsdDxIYWJpdFJlc3BvbnNlLCBFcnJvciwgQ3JlYXRlSGFiaXRSZXF1ZXN0PiB7XG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gdXNlUXVlcnlDbGllbnQoKTtcblxuICByZXR1cm4gdXNlTXV0YXRpb24oe1xuICAgIG11dGF0aW9uRm46IGFzeW5jIChkYXRhOiBDcmVhdGVIYWJpdFJlcXVlc3QpOiBQcm9taXNlPEhhYml0UmVzcG9uc2U+ID0+IHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IGdldEFwaUNsaWVudCgpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQucG9zdCgnL2FwaS92MS9zdXBwb3J0L2hhYml0cycsIGRhdGEpO1xuICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG4gICAgfSxcbiAgICBvblN1Y2Nlc3M6IChuZXdIYWJpdCwgdmFyaWFibGVzLCBjb250ZXh0KSA9PiB7XG4gICAgICAvLyBJbnZhbGlkYXRlIGhhYml0cyBsaXN0XG4gICAgICBxdWVyeUNsaWVudC5pbnZhbGlkYXRlUXVlcmllcyh7IHF1ZXJ5S2V5OiBzdXBwb3J0S2V5cy5oYWJpdHMoKSB9KTtcblxuICAgICAgLy8gQ2FsbCB1c2VyJ3Mgb25TdWNjZXNzIGlmIHByb3ZpZGVkXG4gICAgfSxcbiAgICAuLi5vcHRpb25zLFxuICB9KTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgYSBoYWJpdFxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGFuU3RhY2sgUXVlcnkgbXV0YXRpb24gb3B0aW9uc1xuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c3hcbiAqIGNvbnN0IHsgbXV0YXRlLCBpc1BlbmRpbmcgfSA9IHVzZVVwZGF0ZUhhYml0KCk7XG4gKlxuICogbXV0YXRlKHtcbiAqICAgaWQ6ICdoYWJpdC0xMjMnLFxuICogICBkYXRhOiB7XG4gKiAgICAgbmFtZTogJ0V2ZW5pbmcgbWVkaXRhdGlvbicsXG4gKiAgICAgdGFyZ2V0RGF5czogMTRcbiAqICAgfVxuICogfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVVwZGF0ZUhhYml0KFxuICBvcHRpb25zPzogT21pdDxcbiAgICBVc2VNdXRhdGlvbk9wdGlvbnM8XG4gICAgICBIYWJpdFJlc3BvbnNlLFxuICAgICAgRXJyb3IsXG4gICAgICB7IGlkOiBzdHJpbmc7IGRhdGE6IFVwZGF0ZUhhYml0UmVxdWVzdCB9XG4gICAgPixcbiAgICAnbXV0YXRpb25GbidcbiAgPlxuKTogVXNlTXV0YXRpb25SZXN1bHQ8SGFiaXRSZXNwb25zZSwgRXJyb3IsIHsgaWQ6IHN0cmluZzsgZGF0YTogVXBkYXRlSGFiaXRSZXF1ZXN0IH0+IHtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSB1c2VRdWVyeUNsaWVudCgpO1xuXG4gIHJldHVybiB1c2VNdXRhdGlvbih7XG4gICAgbXV0YXRpb25GbjogYXN5bmMgKHtcbiAgICAgIGlkLFxuICAgICAgZGF0YSxcbiAgICB9OiB7XG4gICAgICBpZDogc3RyaW5nO1xuICAgICAgZGF0YTogVXBkYXRlSGFiaXRSZXF1ZXN0O1xuICAgIH0pOiBQcm9taXNlPEhhYml0UmVzcG9uc2U+ID0+IHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IGdldEFwaUNsaWVudCgpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQucHV0KGAvYXBpL3YxL3N1cHBvcnQvaGFiaXRzLyR7aWR9YCwgZGF0YSk7XG4gICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcbiAgICB9LFxuICAgIG9uU3VjY2VzczogKHVwZGF0ZWRIYWJpdCwgdmFyaWFibGVzLCBjb250ZXh0KSA9PiB7XG4gICAgICAvLyBJbnZhbGlkYXRlIGhhYml0cyBsaXN0XG4gICAgICBxdWVyeUNsaWVudC5pbnZhbGlkYXRlUXVlcmllcyh7IHF1ZXJ5S2V5OiBzdXBwb3J0S2V5cy5oYWJpdHMoKSB9KTtcblxuICAgICAgLy8gQ2FsbCB1c2VyJ3Mgb25TdWNjZXNzIGlmIHByb3ZpZGVkXG4gICAgfSxcbiAgICAuLi5vcHRpb25zLFxuICB9KTtcbn1cblxuLyoqXG4gKiBEZWxldGUgYSBoYWJpdFxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGFuU3RhY2sgUXVlcnkgbXV0YXRpb24gb3B0aW9uc1xuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c3hcbiAqIGNvbnN0IHsgbXV0YXRlLCBpc1BlbmRpbmcgfSA9IHVzZURlbGV0ZUhhYml0KCk7XG4gKlxuICogbXV0YXRlKCdoYWJpdC0xMjMnKTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlRGVsZXRlSGFiaXQoXG4gIG9wdGlvbnM/OiBPbWl0PFVzZU11dGF0aW9uT3B0aW9uczx2b2lkLCBFcnJvciwgc3RyaW5nPiwgJ211dGF0aW9uRm4nPlxuKTogVXNlTXV0YXRpb25SZXN1bHQ8dm9pZCwgRXJyb3IsIHN0cmluZz4ge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IHVzZVF1ZXJ5Q2xpZW50KCk7XG5cbiAgcmV0dXJuIHVzZU11dGF0aW9uKHtcbiAgICBtdXRhdGlvbkZuOiBhc3luYyAoaWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgY29uc3QgY2xpZW50ID0gZ2V0QXBpQ2xpZW50KCk7XG4gICAgICBhd2FpdCBjbGllbnQuZGVsZXRlKGAvYXBpL3YxL3N1cHBvcnQvaGFiaXRzLyR7aWR9YCk7XG4gICAgfSxcbiAgICBvblN1Y2Nlc3M6IChkYXRhLCBoYWJpdElkLCBjb250ZXh0KSA9PiB7XG4gICAgICAvLyBJbnZhbGlkYXRlIGhhYml0cyBsaXN0XG4gICAgICBxdWVyeUNsaWVudC5pbnZhbGlkYXRlUXVlcmllcyh7IHF1ZXJ5S2V5OiBzdXBwb3J0S2V5cy5oYWJpdHMoKSB9KTtcblxuICAgICAgLy8gQ2FsbCB1c2VyJ3Mgb25TdWNjZXNzIGlmIHByb3ZpZGVkXG4gICAgfSxcbiAgICAuLi5vcHRpb25zLFxuICB9KTtcbn1cblxuLyoqXG4gKiBDb21wbGV0ZSBhIGhhYml0IGZvciB0b2RheVxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGFuU3RhY2sgUXVlcnkgbXV0YXRpb24gb3B0aW9uc1xuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c3hcbiAqIGNvbnN0IHsgbXV0YXRlLCBpc1BlbmRpbmcgfSA9IHVzZUNvbXBsZXRlSGFiaXQoKTtcbiAqXG4gKiBtdXRhdGUoJ2hhYml0LTEyMycpO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VDb21wbGV0ZUhhYml0KFxuICBvcHRpb25zPzogT21pdDxVc2VNdXRhdGlvbk9wdGlvbnM8SGFiaXRSZXNwb25zZSwgRXJyb3IsIHN0cmluZz4sICdtdXRhdGlvbkZuJz5cbik6IFVzZU11dGF0aW9uUmVzdWx0PEhhYml0UmVzcG9uc2UsIEVycm9yLCBzdHJpbmc+IHtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSB1c2VRdWVyeUNsaWVudCgpO1xuXG4gIHJldHVybiB1c2VNdXRhdGlvbih7XG4gICAgbXV0YXRpb25GbjogYXN5bmMgKGlkOiBzdHJpbmcpOiBQcm9taXNlPEhhYml0UmVzcG9uc2U+ID0+IHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IGdldEFwaUNsaWVudCgpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQucG9zdChgL2FwaS92MS9zdXBwb3J0L2hhYml0cy8ke2lkfS9jb21wbGV0ZWApO1xuICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG4gICAgfSxcbiAgICBvblN1Y2Nlc3M6IChjb21wbGV0ZWRIYWJpdCwgaGFiaXRJZCwgY29udGV4dCkgPT4ge1xuICAgICAgLy8gSW52YWxpZGF0ZSBoYWJpdHMgbGlzdCB0byBzaG93IHVwZGF0ZWQgY29tcGxldGlvbiBzdGF0dXNcbiAgICAgIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHsgcXVlcnlLZXk6IHN1cHBvcnRLZXlzLmhhYml0cygpIH0pO1xuXG4gICAgICAvLyBDYWxsIHVzZXIncyBvblN1Y2Nlc3MgaWYgcHJvdmlkZWRcbiAgICB9LFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pO1xufVxuXG4vKipcbiAqIENyZWF0ZSBhIHJlZmxlY3Rpb25cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRhblN0YWNrIFF1ZXJ5IG11dGF0aW9uIG9wdGlvbnNcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHN4XG4gKiBjb25zdCB7IG11dGF0ZSwgaXNQZW5kaW5nIH0gPSB1c2VDcmVhdGVSZWZsZWN0aW9uKCk7XG4gKlxuICogbXV0YXRlKHtcbiAqICAgY29udGVudDogJ1RvZGF5IEkgbGVhcm5lZC4uLicsXG4gKiAgIGNhdGVnb3J5OiAnZ3Jvd3RoJyxcbiAqICAgbW9vZDogOFxuICogfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUNyZWF0ZVJlZmxlY3Rpb24oXG4gIG9wdGlvbnM/OiBPbWl0PFxuICAgIFVzZU11dGF0aW9uT3B0aW9uczxSZWZsZWN0aW9uUmVzcG9uc2UsIEVycm9yLCBDcmVhdGVSZWZsZWN0aW9uUmVxdWVzdD4sXG4gICAgJ211dGF0aW9uRm4nXG4gID5cbik6IFVzZU11dGF0aW9uUmVzdWx0PFJlZmxlY3Rpb25SZXNwb25zZSwgRXJyb3IsIENyZWF0ZVJlZmxlY3Rpb25SZXF1ZXN0PiB7XG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gdXNlUXVlcnlDbGllbnQoKTtcblxuICByZXR1cm4gdXNlTXV0YXRpb24oe1xuICAgIG11dGF0aW9uRm46IGFzeW5jIChkYXRhOiBDcmVhdGVSZWZsZWN0aW9uUmVxdWVzdCk6IFByb21pc2U8UmVmbGVjdGlvblJlc3BvbnNlPiA9PiB7XG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRBcGlDbGllbnQoKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LnBvc3QoJy9hcGkvdjEvc3VwcG9ydC9yZWZsZWN0aW9ucycsIGRhdGEpO1xuICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG4gICAgfSxcbiAgICBvblN1Y2Nlc3M6IChuZXdSZWZsZWN0aW9uLCB2YXJpYWJsZXMsIGNvbnRleHQpID0+IHtcbiAgICAgIC8vIEludmFsaWRhdGUgcmVmbGVjdGlvbnMgbGlzdFxuICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoeyBxdWVyeUtleTogc3VwcG9ydEtleXMucmVmbGVjdGlvbnMoKSB9KTtcblxuICAgICAgLy8gQ2FsbCB1c2VyJ3Mgb25TdWNjZXNzIGlmIHByb3ZpZGVkXG4gICAgfSxcbiAgICAuLi5vcHRpb25zLFxuICB9KTtcbn1cblxuLyoqXG4gKiBMb2cgYSBjcmF2aW5nXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUYW5TdGFjayBRdWVyeSBtdXRhdGlvbiBvcHRpb25zXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzeFxuICogY29uc3QgeyBtdXRhdGUsIGlzUGVuZGluZyB9ID0gdXNlTG9nQ3JhdmluZygpO1xuICpcbiAqIG11dGF0ZSh7XG4gKiAgIGludGVuc2l0eTogNCxcbiAqICAgdHJpZ2dlcjogJ1NhdyBhIGJlZXIgYWQnLFxuICogICB0cmlnZ2VyVHlwZTogJ0VOVklST05NRU5UJyxcbiAqICAgY29waW5nVXNlZDogWydkZWVwX2JyZWF0aGluZycsICdjYWxsZWRfZnJpZW5kJ10sXG4gKiAgIGRpZFJlc2lzdDogdHJ1ZVxuICogfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUxvZ0NyYXZpbmcoXG4gIG9wdGlvbnM/OiBPbWl0PFxuICAgIFVzZU11dGF0aW9uT3B0aW9uczxDcmF2aW5nTG9nUmVzcG9uc2UsIEVycm9yLCBMb2dDcmF2aW5nUmVxdWVzdD4sXG4gICAgJ211dGF0aW9uRm4nXG4gID5cbik6IFVzZU11dGF0aW9uUmVzdWx0PENyYXZpbmdMb2dSZXNwb25zZSwgRXJyb3IsIExvZ0NyYXZpbmdSZXF1ZXN0PiB7XG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gdXNlUXVlcnlDbGllbnQoKTtcblxuICByZXR1cm4gdXNlTXV0YXRpb24oe1xuICAgIG11dGF0aW9uRm46IGFzeW5jIChkYXRhOiBMb2dDcmF2aW5nUmVxdWVzdCk6IFByb21pc2U8Q3JhdmluZ0xvZ1Jlc3BvbnNlPiA9PiB7XG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRBcGlDbGllbnQoKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LnBvc3QoJy9hcGkvdjEvc3VwcG9ydC9jcmF2aW5ncycsIGRhdGEpO1xuICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG4gICAgfSxcbiAgICBvblN1Y2Nlc3M6IChuZXdDcmF2aW5nLCB2YXJpYWJsZXMsIGNvbnRleHQpID0+IHtcbiAgICAgIC8vIEludmFsaWRhdGUgY3JhdmluZ3MgbGlzdCBhbmQgc3RhdHNcbiAgICAgIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHsgcXVlcnlLZXk6IHN1cHBvcnRLZXlzLmNyYXZpbmdzKCkgfSk7XG5cbiAgICAgIC8vIENhbGwgdXNlcidzIG9uU3VjY2VzcyBpZiBwcm92aWRlZFxuICAgIH0sXG4gICAgLi4ub3B0aW9ucyxcbiAgfSk7XG59XG4iXX0=
|
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
import { UseQueryOptions } from '@tanstack/react-query';
|
|
2
|
+
import type { BadgeResponse, UserBadgeResponse, BadgeWithProgress, PartnerRewardResponse, PartnerRewardRedemptionResponse, RewardResponse, UserWalletResponse } from '../types';
|
|
3
|
+
export declare const badgeKeys: {
|
|
4
|
+
all: readonly ["badges"];
|
|
5
|
+
lists: () => readonly ["badges", "list"];
|
|
6
|
+
list: (userId?: string) => readonly ["badges", "list", string | undefined];
|
|
7
|
+
detail: (id: string) => readonly ["badges", "detail", string];
|
|
8
|
+
user: (userId: string) => readonly ["badges", "user", string];
|
|
9
|
+
next: (userId: string) => readonly ["badges", "next", string];
|
|
10
|
+
};
|
|
11
|
+
export declare const rewardKeys: {
|
|
12
|
+
all: readonly ["rewards"];
|
|
13
|
+
available: () => readonly ["rewards", "available"];
|
|
14
|
+
forBadge: (badgeId: string) => readonly ["rewards", "badge", string];
|
|
15
|
+
forBusiness: (businessId: string) => readonly ["rewards", "business", string];
|
|
16
|
+
forVenue: (venueId: string) => readonly ["rewards", "venue", string];
|
|
17
|
+
forBrand: (brandId: string) => readonly ["rewards", "brand", string];
|
|
18
|
+
redeemed: () => readonly ["rewards", "redeemed"];
|
|
19
|
+
wallet: () => readonly ["rewards", "wallet"];
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* Get all available badges
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* ```tsx
|
|
26
|
+
* const { data: badges } = useBadges();
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
29
|
+
export declare function useBadges(options?: Omit<UseQueryOptions<BadgeResponse[]>, 'queryKey' | 'queryFn'>): import("@tanstack/react-query").UseQueryResult<{
|
|
30
|
+
id: string;
|
|
31
|
+
appId: string;
|
|
32
|
+
name: string;
|
|
33
|
+
slug: string;
|
|
34
|
+
description?: Record<string, never>;
|
|
35
|
+
icon?: Record<string, never>;
|
|
36
|
+
type: "SOBRIETY_DAYS" | "EVENTS_ATTENDED" | "EVENTS_HOSTED" | "UNIQUE_VENUES" | "CHECK_IN_STREAK" | "WINS_LOGGED" | "REFLECTIONS_COUNT" | "JOURNALS_COUNT" | "MOOD_LOGS_COUNT" | "UNIQUE_WIN_CATEGORIES" | "SHORTCUTS_USED" | "ANY_ACTIVITY_STREAK" | "JACK_MESSAGES" | "VOICE_CALLS" | "MEMBER_SINCE" | "COMMUNITY_BUILDER" | "GROW90_GRADUATE" | "CUSTOM";
|
|
37
|
+
threshold?: Record<string, never>;
|
|
38
|
+
color?: Record<string, never>;
|
|
39
|
+
sortOrder: number;
|
|
40
|
+
isActive: boolean;
|
|
41
|
+
isSecret: boolean;
|
|
42
|
+
createdAt: string;
|
|
43
|
+
updatedAt: string;
|
|
44
|
+
}[], Error>;
|
|
45
|
+
/**
|
|
46
|
+
* Get a single badge by ID
|
|
47
|
+
*
|
|
48
|
+
* @param id - Badge ID
|
|
49
|
+
* @example
|
|
50
|
+
* ```tsx
|
|
51
|
+
* const { data: badge } = useBadge('badge-123');
|
|
52
|
+
* ```
|
|
53
|
+
*/
|
|
54
|
+
export declare function useBadge(id: string, options?: Omit<UseQueryOptions<BadgeResponse>, 'queryKey' | 'queryFn'>): import("@tanstack/react-query").UseQueryResult<{
|
|
55
|
+
id: string;
|
|
56
|
+
appId: string;
|
|
57
|
+
name: string;
|
|
58
|
+
slug: string;
|
|
59
|
+
description?: Record<string, never>;
|
|
60
|
+
icon?: Record<string, never>;
|
|
61
|
+
type: "SOBRIETY_DAYS" | "EVENTS_ATTENDED" | "EVENTS_HOSTED" | "UNIQUE_VENUES" | "CHECK_IN_STREAK" | "WINS_LOGGED" | "REFLECTIONS_COUNT" | "JOURNALS_COUNT" | "MOOD_LOGS_COUNT" | "UNIQUE_WIN_CATEGORIES" | "SHORTCUTS_USED" | "ANY_ACTIVITY_STREAK" | "JACK_MESSAGES" | "VOICE_CALLS" | "MEMBER_SINCE" | "COMMUNITY_BUILDER" | "GROW90_GRADUATE" | "CUSTOM";
|
|
62
|
+
threshold?: Record<string, never>;
|
|
63
|
+
color?: Record<string, never>;
|
|
64
|
+
sortOrder: number;
|
|
65
|
+
isActive: boolean;
|
|
66
|
+
isSecret: boolean;
|
|
67
|
+
createdAt: string;
|
|
68
|
+
updatedAt: string;
|
|
69
|
+
}, Error>;
|
|
70
|
+
/**
|
|
71
|
+
* Get current user's earned badges
|
|
72
|
+
*
|
|
73
|
+
* @example
|
|
74
|
+
* ```tsx
|
|
75
|
+
* const { data: myBadges } = useMyBadges();
|
|
76
|
+
* ```
|
|
77
|
+
*/
|
|
78
|
+
export declare function useMyBadges(options?: Omit<UseQueryOptions<UserBadgeResponse[]>, 'queryKey' | 'queryFn'>): import("@tanstack/react-query").UseQueryResult<{
|
|
79
|
+
id: string;
|
|
80
|
+
userId: string;
|
|
81
|
+
badgeId: string;
|
|
82
|
+
awardedAt: string;
|
|
83
|
+
note?: Record<string, never>;
|
|
84
|
+
badge: import("@growsober/types/dist/generated").components["schemas"]["BadgeResponseDto"];
|
|
85
|
+
}[], Error>;
|
|
86
|
+
/**
|
|
87
|
+
* Get next badges user can earn (with progress)
|
|
88
|
+
*
|
|
89
|
+
* @example
|
|
90
|
+
* ```tsx
|
|
91
|
+
* const { data: nextBadges } = useNextBadges();
|
|
92
|
+
* // nextBadges = [{ badge: {...}, currentProgress: 5, requiredProgress: 10, percentComplete: 50 }, ...]
|
|
93
|
+
* ```
|
|
94
|
+
*/
|
|
95
|
+
export declare function useNextBadges(options?: Omit<UseQueryOptions<BadgeWithProgress[]>, 'queryKey' | 'queryFn'>): import("@tanstack/react-query").UseQueryResult<BadgeWithProgress[], Error>;
|
|
96
|
+
/**
|
|
97
|
+
* Get all rewards available to the current user (based on earned badges)
|
|
98
|
+
*
|
|
99
|
+
* @example
|
|
100
|
+
* ```tsx
|
|
101
|
+
* const { data: rewards } = useAvailableRewards();
|
|
102
|
+
* ```
|
|
103
|
+
*/
|
|
104
|
+
export declare function useAvailableRewards(options?: Omit<UseQueryOptions<PartnerRewardResponse[]>, 'queryKey' | 'queryFn'>): import("@tanstack/react-query").UseQueryResult<PartnerRewardResponse[], Error>;
|
|
105
|
+
/**
|
|
106
|
+
* Get rewards for a specific badge
|
|
107
|
+
*
|
|
108
|
+
* @param badgeId - Badge ID
|
|
109
|
+
* @example
|
|
110
|
+
* ```tsx
|
|
111
|
+
* const { data: rewards } = useRewardsForBadge('badge-123');
|
|
112
|
+
* ```
|
|
113
|
+
*/
|
|
114
|
+
export declare function useRewardsForBadge(badgeId: string, options?: Omit<UseQueryOptions<PartnerRewardResponse[]>, 'queryKey' | 'queryFn'>): import("@tanstack/react-query").UseQueryResult<PartnerRewardResponse[], Error>;
|
|
115
|
+
/**
|
|
116
|
+
* Get rewards offered by a specific business
|
|
117
|
+
*
|
|
118
|
+
* @param businessId - Business ID
|
|
119
|
+
* @example
|
|
120
|
+
* ```tsx
|
|
121
|
+
* const { data: rewards } = useBusinessRewards('business-123');
|
|
122
|
+
* ```
|
|
123
|
+
*/
|
|
124
|
+
export declare function useBusinessRewards(businessId: string, options?: Omit<UseQueryOptions<PartnerRewardResponse[]>, 'queryKey' | 'queryFn'>): import("@tanstack/react-query").UseQueryResult<PartnerRewardResponse[], Error>;
|
|
125
|
+
/**
|
|
126
|
+
* Get user's redeemed rewards
|
|
127
|
+
*
|
|
128
|
+
* @example
|
|
129
|
+
* ```tsx
|
|
130
|
+
* const { data: redeemed } = useRedeemedRewards();
|
|
131
|
+
* ```
|
|
132
|
+
*/
|
|
133
|
+
export declare function useRedeemedRewards(options?: Omit<UseQueryOptions<PartnerRewardRedemptionResponse[]>, 'queryKey' | 'queryFn'>): import("@tanstack/react-query").UseQueryResult<PartnerRewardRedemptionResponse[], Error>;
|
|
134
|
+
/**
|
|
135
|
+
* Wallet reward card with QR token for redemption
|
|
136
|
+
*/
|
|
137
|
+
export interface WalletReward {
|
|
138
|
+
id: string;
|
|
139
|
+
title: string;
|
|
140
|
+
description: string | null;
|
|
141
|
+
code: string | null;
|
|
142
|
+
validUntil: string | null;
|
|
143
|
+
badge: {
|
|
144
|
+
id: string;
|
|
145
|
+
name: string;
|
|
146
|
+
slug: string;
|
|
147
|
+
icon: string | null;
|
|
148
|
+
};
|
|
149
|
+
business: {
|
|
150
|
+
id: string;
|
|
151
|
+
name: string;
|
|
152
|
+
profileImage: string | null;
|
|
153
|
+
address: string | null;
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
export interface WalletRedemption {
|
|
157
|
+
id: string;
|
|
158
|
+
redeemedAt: string;
|
|
159
|
+
verifiedAt: string | null;
|
|
160
|
+
qrToken: string;
|
|
161
|
+
partnerReward: WalletReward;
|
|
162
|
+
}
|
|
163
|
+
export interface WalletBadge {
|
|
164
|
+
id: string;
|
|
165
|
+
badgeId: string;
|
|
166
|
+
userId: string;
|
|
167
|
+
awardedAt: string;
|
|
168
|
+
note: string | null;
|
|
169
|
+
badge: BadgeResponse;
|
|
170
|
+
availableRewards: WalletReward[];
|
|
171
|
+
redeemedRewards: WalletRedemption[];
|
|
172
|
+
}
|
|
173
|
+
export interface WalletResponse {
|
|
174
|
+
badges: WalletBadge[];
|
|
175
|
+
stats: {
|
|
176
|
+
totalBadges: number;
|
|
177
|
+
totalAvailableRewards: number;
|
|
178
|
+
totalRedeemedRewards: number;
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Get user's wallet - all earned badges with available and redeemed rewards
|
|
183
|
+
* This is the main data source for the Rewards tab
|
|
184
|
+
*
|
|
185
|
+
* @example
|
|
186
|
+
* ```tsx
|
|
187
|
+
* const { data: wallet } = useRewardsWallet();
|
|
188
|
+
* // wallet.badges = [{ badge: {...}, availableRewards: [...], redeemedRewards: [...] }, ...]
|
|
189
|
+
* // wallet.stats = { totalBadges: 5, totalAvailableRewards: 3, totalRedeemedRewards: 2 }
|
|
190
|
+
* ```
|
|
191
|
+
*/
|
|
192
|
+
export declare function useRewardsWallet(options?: Omit<UseQueryOptions<WalletResponse>, 'queryKey' | 'queryFn'>): import("@tanstack/react-query").UseQueryResult<WalletResponse, Error>;
|
|
193
|
+
/**
|
|
194
|
+
* Get rewards for a specific venue (unified reward model)
|
|
195
|
+
*
|
|
196
|
+
* @param venueId - Venue ID
|
|
197
|
+
* @example
|
|
198
|
+
* ```tsx
|
|
199
|
+
* const { data: rewards } = useVenueRewards('venue-123');
|
|
200
|
+
* ```
|
|
201
|
+
*/
|
|
202
|
+
export declare function useVenueRewards(venueId: string, options?: Omit<UseQueryOptions<RewardResponse[]>, 'queryKey' | 'queryFn'>): import("@tanstack/react-query").UseQueryResult<RewardResponse[], Error>;
|
|
203
|
+
/**
|
|
204
|
+
* Get rewards for a specific brand (unified reward model)
|
|
205
|
+
*
|
|
206
|
+
* @param brandId - Brand ID
|
|
207
|
+
* @example
|
|
208
|
+
* ```tsx
|
|
209
|
+
* const { data: rewards } = useBrandRewardsQuery('brand-123');
|
|
210
|
+
* ```
|
|
211
|
+
*/
|
|
212
|
+
export declare function useBrandRewardsQuery(brandId: string, options?: Omit<UseQueryOptions<RewardResponse[]>, 'queryKey' | 'queryFn'>): import("@tanstack/react-query").UseQueryResult<RewardResponse[], Error>;
|
|
213
|
+
/**
|
|
214
|
+
* Get unified wallet with venue and brand rewards
|
|
215
|
+
*
|
|
216
|
+
* @example
|
|
217
|
+
* ```tsx
|
|
218
|
+
* const { data: wallet } = useUnifiedWallet();
|
|
219
|
+
* ```
|
|
220
|
+
*/
|
|
221
|
+
export declare function useUnifiedWallet(options?: Omit<UseQueryOptions<UserWalletResponse>, 'queryKey' | 'queryFn'>): import("@tanstack/react-query").UseQueryResult<UserWalletResponse, Error>;
|