@growsober/sdk 1.0.9 → 1.0.11
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/api/mutations/badges.d.ts +89 -0
- package/dist/api/mutations/badges.js +130 -1
- package/dist/api/mutations/index.d.ts +1 -0
- package/dist/api/mutations/index.js +2 -1
- package/dist/api/mutations/venues.d.ts +126 -0
- package/dist/api/mutations/venues.js +110 -0
- package/package.json +1 -1
- package/src/api/mutations/badges.ts +168 -0
- package/src/api/mutations/index.ts +1 -0
- package/src/api/mutations/venues.ts +127 -0
|
@@ -113,4 +113,93 @@ export declare function useUpdatePartnerReward(businessId: string, options?: Omi
|
|
|
113
113
|
isActive: boolean;
|
|
114
114
|
}>;
|
|
115
115
|
}, unknown>;
|
|
116
|
+
interface UpdateRewardRequest {
|
|
117
|
+
isActive?: boolean;
|
|
118
|
+
title?: string;
|
|
119
|
+
description?: string;
|
|
120
|
+
code?: string;
|
|
121
|
+
redeemType?: 'IN_PERSON' | 'ONLINE' | 'BOTH';
|
|
122
|
+
maxRedemptions?: number;
|
|
123
|
+
perUserLimit?: number;
|
|
124
|
+
validFrom?: string;
|
|
125
|
+
validUntil?: string;
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Update a venue reward
|
|
129
|
+
*
|
|
130
|
+
* @param venueId - Venue ID
|
|
131
|
+
*
|
|
132
|
+
* @example
|
|
133
|
+
* ```tsx
|
|
134
|
+
* const updateReward = useUpdateVenueReward('venue-123');
|
|
135
|
+
*
|
|
136
|
+
* const handleUpdate = async (rewardId: string) => {
|
|
137
|
+
* await updateReward.mutateAsync({
|
|
138
|
+
* id: rewardId,
|
|
139
|
+
* data: { isActive: false },
|
|
140
|
+
* });
|
|
141
|
+
* };
|
|
142
|
+
* ```
|
|
143
|
+
*/
|
|
144
|
+
export declare function useUpdateVenueReward(venueId: string, options?: Omit<UseMutationOptions<unknown, Error, {
|
|
145
|
+
id: string;
|
|
146
|
+
data: UpdateRewardRequest;
|
|
147
|
+
}>, 'mutationFn'>): import("@tanstack/react-query").UseMutationResult<unknown, Error, {
|
|
148
|
+
id: string;
|
|
149
|
+
data: UpdateRewardRequest;
|
|
150
|
+
}, unknown>;
|
|
151
|
+
/**
|
|
152
|
+
* Delete a venue reward
|
|
153
|
+
*
|
|
154
|
+
* @param venueId - Venue ID
|
|
155
|
+
*
|
|
156
|
+
* @example
|
|
157
|
+
* ```tsx
|
|
158
|
+
* const deleteReward = useDeleteVenueReward('venue-123');
|
|
159
|
+
*
|
|
160
|
+
* const handleDelete = async (rewardId: string) => {
|
|
161
|
+
* await deleteReward.mutateAsync(rewardId);
|
|
162
|
+
* };
|
|
163
|
+
* ```
|
|
164
|
+
*/
|
|
165
|
+
export declare function useDeleteVenueReward(venueId: string, options?: Omit<UseMutationOptions<unknown, Error, string>, 'mutationFn'>): import("@tanstack/react-query").UseMutationResult<unknown, Error, string, unknown>;
|
|
166
|
+
/**
|
|
167
|
+
* Update a brand reward
|
|
168
|
+
*
|
|
169
|
+
* @param brandId - Brand ID
|
|
170
|
+
*
|
|
171
|
+
* @example
|
|
172
|
+
* ```tsx
|
|
173
|
+
* const updateReward = useUpdateBrandReward('brand-123');
|
|
174
|
+
*
|
|
175
|
+
* const handleUpdate = async (rewardId: string) => {
|
|
176
|
+
* await updateReward.mutateAsync({
|
|
177
|
+
* id: rewardId,
|
|
178
|
+
* data: { isActive: false },
|
|
179
|
+
* });
|
|
180
|
+
* };
|
|
181
|
+
* ```
|
|
182
|
+
*/
|
|
183
|
+
export declare function useUpdateBrandReward(brandId: string, options?: Omit<UseMutationOptions<unknown, Error, {
|
|
184
|
+
id: string;
|
|
185
|
+
data: UpdateRewardRequest;
|
|
186
|
+
}>, 'mutationFn'>): import("@tanstack/react-query").UseMutationResult<unknown, Error, {
|
|
187
|
+
id: string;
|
|
188
|
+
data: UpdateRewardRequest;
|
|
189
|
+
}, unknown>;
|
|
190
|
+
/**
|
|
191
|
+
* Delete a brand reward
|
|
192
|
+
*
|
|
193
|
+
* @param brandId - Brand ID
|
|
194
|
+
*
|
|
195
|
+
* @example
|
|
196
|
+
* ```tsx
|
|
197
|
+
* const deleteReward = useDeleteBrandReward('brand-123');
|
|
198
|
+
*
|
|
199
|
+
* const handleDelete = async (rewardId: string) => {
|
|
200
|
+
* await deleteReward.mutateAsync(rewardId);
|
|
201
|
+
* };
|
|
202
|
+
* ```
|
|
203
|
+
*/
|
|
204
|
+
export declare function useDeleteBrandReward(brandId: string, options?: Omit<UseMutationOptions<unknown, Error, string>, 'mutationFn'>): import("@tanstack/react-query").UseMutationResult<unknown, Error, string, unknown>;
|
|
116
205
|
export {};
|
|
@@ -5,6 +5,10 @@ exports.useCreatePartnerReward = useCreatePartnerReward;
|
|
|
5
5
|
exports.useCreateVenueReward = useCreateVenueReward;
|
|
6
6
|
exports.useCreateBrandReward = useCreateBrandReward;
|
|
7
7
|
exports.useUpdatePartnerReward = useUpdatePartnerReward;
|
|
8
|
+
exports.useUpdateVenueReward = useUpdateVenueReward;
|
|
9
|
+
exports.useDeleteVenueReward = useDeleteVenueReward;
|
|
10
|
+
exports.useUpdateBrandReward = useUpdateBrandReward;
|
|
11
|
+
exports.useDeleteBrandReward = useDeleteBrandReward;
|
|
8
12
|
const react_query_1 = require("@tanstack/react-query");
|
|
9
13
|
const client_1 = require("../client");
|
|
10
14
|
const badges_1 = require("../queries/badges");
|
|
@@ -174,4 +178,129 @@ function useUpdatePartnerReward(businessId, options) {
|
|
|
174
178
|
...options,
|
|
175
179
|
});
|
|
176
180
|
}
|
|
177
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFkZ2VzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwaS9tdXRhdGlvbnMvYmFkZ2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBMEJBLDBDQW1CQztBQW9CRCx3REFpQkM7QUFxQ0Qsb0RBa0JDO0FBc0JELG9EQWtCQztBQW1CRCx3REErQkM7QUFuT0QsdURBQXdGO0FBQ3hGLHNDQUF5QztBQUN6Qyw4Q0FBMEQ7QUFPMUQsK0VBQStFO0FBQy9FLHdCQUF3QjtBQUN4QiwrRUFBK0U7QUFFL0U7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsU0FBZ0IsZUFBZSxDQUM3QixPQUFnRztJQUVoRyxNQUFNLFdBQVcsR0FBRyxJQUFBLDRCQUFjLEdBQUUsQ0FBQztJQUVyQyxPQUFPLElBQUEseUJBQVcsRUFBQztRQUNqQixVQUFVLEVBQUUsS0FBSyxFQUFFLFFBQWdCLEVBQTRDLEVBQUU7WUFDL0UsTUFBTSxNQUFNLEdBQUcsSUFBQSxxQkFBWSxHQUFFLENBQUM7WUFDOUIsTUFBTSxRQUFRLEdBQUcsTUFBTSxNQUFNLENBQUMsSUFBSSxDQUFDLG1CQUFtQixRQUFRLFNBQVMsQ0FBQyxDQUFDO1lBQ3pFLE9BQU8sUUFBUSxDQUFDLElBQUksRUFBRSxJQUFJLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQztRQUM5QyxDQUFDO1FBQ0QsU0FBUyxFQUFFLEdBQUcsRUFBRTtZQUNkLG9EQUFvRDtZQUNwRCxXQUFXLENBQUMsaUJBQWlCLENBQUMsRUFBRSxRQUFRLEVBQUUsbUJBQVUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDakUsV0FBVyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsUUFBUSxFQUFFLG1CQUFVLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3BFLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLFFBQVEsRUFBRSxtQkFBVSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNyRSxDQUFD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Q1gsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBQ0gsU0FBZ0Isc0JBQXNCLENBQ3BDLFVBQWtCLEVBQ2xCLE9BT0M7SUFFRCxNQUFNLFdBQVcsR0FBRyxJQUFBLDRCQUFjLEdBQUUsQ0FBQztJQUVyQyxPQUFPLElBQUEseUJBQVcsRUFBQztRQUNqQixVQUFVLEVBQUUsS0FBSyxFQUFFLEVBQ2pCLEVBQUUsRUFDRixJQUFJLEdBSUwsRUFBa0MsRUFBRTtZQUNuQyxNQUFNLE1BQU0sR0FBRyxJQUFBLHFCQUFZLEdBQUUsQ0FBQztZQUM5QixNQUFNLFFBQVEsR0FBRyxNQUFNLE1BQU0sQ0FBQyxLQUFLLENBQUMsc0JBQXNCLFVBQVUsWUFBWSxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUM1RixPQUFPLFFBQVEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUM7UUFDOUMsQ0FBQztRQUNELFNBQVMsRUFBRSxHQUFHLEVBQUU7WUFDZCxXQUFXLENBQUMsaUJBQWlCLENBQUMsRUFBRSxRQUFRLEVBQUUsbUJBQVUsQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2hGLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLFFBQVEsRUFBRSxtQkFBVSxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN0RSxDQUFDO1FBQ0QsR0FBRyxPQUFPO0tBQ1gsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHVzZU11dGF0aW9uLCB1c2VRdWVyeUNsaWVudCwgVXNlTXV0YXRpb25PcHRpb25zIH0gZnJvbSAnQHRhbnN0YWNrL3JlYWN0LXF1ZXJ5JztcbmltcG9ydCB7IGdldEFwaUNsaWVudCB9IGZyb20gJy4uL2NsaWVudCc7XG5pbXBvcnQgeyBiYWRnZUtleXMsIHJld2FyZEtleXMgfSBmcm9tICcuLi9xdWVyaWVzL2JhZGdlcyc7XG5pbXBvcnQgdHlwZSB7XG4gIFBhcnRuZXJSZXdhcmRSZXNwb25zZSxcbiAgUGFydG5lclJld2FyZFJlZGVtcHRpb25SZXNwb25zZSxcbiAgQ3JlYXRlUGFydG5lclJld2FyZFJlcXVlc3QsXG59IGZyb20gJy4uL3R5cGVzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gUkVXQVJEIE1VVEFUSU9OIEhPT0tTXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogUmVkZWVtIGEgcGFydG5lciByZXdhcmRcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHN4XG4gKiBjb25zdCByZWRlZW1SZXdhcmQgPSB1c2VSZWRlZW1SZXdhcmQoKTtcbiAqXG4gKiBjb25zdCBoYW5kbGVSZWRlZW0gPSBhc3luYyAocmV3YXJkSWQ6IHN0cmluZykgPT4ge1xuICogICBhd2FpdCByZWRlZW1SZXdhcmQubXV0YXRlQXN5bmMocmV3YXJkSWQpO1xuICogICAvLyBTaG93IHN1Y2Nlc3MgbWVzc2FnZVxuICogfTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlUmVkZWVtUmV3YXJkKFxuICBvcHRpb25zPzogT21pdDxVc2VNdXRhdGlvbk9wdGlvbnM8UGFydG5lclJld2FyZFJlZGVtcHRpb25SZXNwb25zZSwgRXJyb3IsIHN0cmluZz4sICdtdXRhdGlvbkZuJz5cbikge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IHVzZVF1ZXJ5Q2xpZW50KCk7XG5cbiAgcmV0dXJuIHVzZU11dGF0aW9uKHtcbiAgICBtdXRhdGlvbkZuOiBhc3luYyAocmV3YXJkSWQ6IHN0cmluZyk6IFByb21pc2U8UGFydG5lclJld2FyZFJlZGVtcHRpb25SZXNwb25zZT4gPT4ge1xuICAgICAgY29uc3QgY2xpZW50ID0gZ2V0QXBpQ2xpZW50KCk7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5wb3N0KGAvYXBpL3YxL3Jld2FyZHMvJHtyZXdhcmRJZH0vcmVkZWVtYCk7XG4gICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YT8uZGF0YSB8fCByZXNwb25zZS5kYXRhO1xuICAgIH0sXG4gICAgb25TdWNjZXNzOiAoKSA9PiB7XG4gICAgICAvLyBJbnZhbGlkYXRlIHdhbGxldCwgYXZhaWxhYmxlIGFuZCByZWRlZW1lZCByZXdhcmRzXG4gICAgICBxdWVyeUNsaWVudC5pbnZhbGlkYXRlUXVlcmllcyh7IHF1ZXJ5S2V5OiByZXdhcmRLZXlzLndhbGxldCgpIH0pO1xuICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoeyBxdWVyeUtleTogcmV3YXJkS2V5cy5hdmFpbGFibGUoKSB9KTtcbiAgICAgIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHsgcXVlcnlLZXk6IHJld2FyZEtleXMucmVkZWVtZWQoKSB9KTtcbiAgICB9LFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pO1xufVxuXG4vKipcbiAqIENyZWF0ZSBhIHBhcnRuZXIgcmV3YXJkIChmb3IgYnVzaW5lc3MgZGFzaGJvYXJkKVxuICpcbiAqIEBwYXJhbSBidXNpbmVzc0lkIC0gQnVzaW5lc3MgSUQgY3JlYXRpbmcgdGhlIHJld2FyZFxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c3hcbiAqIGNvbnN0IGNyZWF0ZVJld2FyZCA9IHVzZUNyZWF0ZVBhcnRuZXJSZXdhcmQoJ2J1c2luZXNzLTEyMycpO1xuICpcbiAqIGNvbnN0IGhhbmRsZUNyZWF0ZSA9IGFzeW5jICgpID0+IHtcbiAqICAgYXdhaXQgY3JlYXRlUmV3YXJkLm11dGF0ZUFzeW5jKHtcbiAqICAgICBiYWRnZUlkOiAnYmFkZ2Utd2Vlay13YXJyaW9yJyxcbiAqICAgICB0aXRsZTogJ0ZyZWUgQ29mZmVlJyxcbiAqICAgICBkZXNjcmlwdGlvbjogJ1Nob3cgeW91ciBiYWRnZSBmb3IgYSBmcmVlIGNvZmZlZScsXG4gKiAgIH0pO1xuICogfTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlQ3JlYXRlUGFydG5lclJld2FyZChcbiAgYnVzaW5lc3NJZDogc3RyaW5nLFxuICBvcHRpb25zPzogT21pdDxVc2VNdXRhdGlvbk9wdGlvbnM8UGFydG5lclJld2FyZFJlc3BvbnNlLCBFcnJvciwgQ3JlYXRlUGFydG5lclJld2FyZFJlcXVlc3Q+LCAnbXV0YXRpb25Gbic+XG4pIHtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSB1c2VRdWVyeUNsaWVudCgpO1xuXG4gIHJldHVybiB1c2VNdXRhdGlvbih7XG4gICAgbXV0YXRpb25GbjogYXN5bmMgKGRhdGE6IENyZWF0ZVBhcnRuZXJSZXdhcmRSZXF1ZXN0KTogUHJvbWlzZTxQYXJ0bmVyUmV3YXJkUmVzcG9uc2U+ID0+IHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IGdldEFwaUNsaWVudCgpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQucG9zdChgL2FwaS92MS9idXNpbmVzc2VzLyR7YnVzaW5lc3NJZH0vcmV3YXJkc2AsIGRhdGEpO1xuICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE/LmRhdGEgfHwgcmVzcG9uc2UuZGF0YTtcbiAgICB9LFxuICAgIG9uU3VjY2VzczogKCkgPT4ge1xuICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoeyBxdWVyeUtleTogcmV3YXJkS2V5cy5mb3JCdXNpbmVzcyhidXNpbmVzc0lkKSB9KTtcbiAgICB9LFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBVTklGSUVEIFJFV0FSRCBNVVRBVElPTlMgKFZlbnVlICYgQnJhbmQpXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmludGVyZmFjZSBDcmVhdGVSZXdhcmRSZXF1ZXN0IHtcbiAgYmFkZ2VJZDogc3RyaW5nO1xuICB0aXRsZTogc3RyaW5nO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgY29kZT86IHN0cmluZztcbiAgcmVkZWVtVHlwZT86ICdJTl9QRVJTT04nIHwgJ09OTElORScgfCAnQk9USCc7XG4gIG1heFJlZGVtcHRpb25zPzogbnVtYmVyO1xuICBwZXJVc2VyTGltaXQ/OiBudW1iZXI7XG4gIHZhbGlkRnJvbT86IHN0cmluZztcbiAgdmFsaWRVbnRpbD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSByZXdhcmQgZm9yIGEgdmVudWVcbiAqXG4gKiBAcGFyYW0gdmVudWVJZCAtIFZlbnVlIElEXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzeFxuICogY29uc3QgY3JlYXRlUmV3YXJkID0gdXNlQ3JlYXRlVmVudWVSZXdhcmQoJ3ZlbnVlLTEyMycpO1xuICpcbiAqIGNvbnN0IGhhbmRsZUNyZWF0ZSA9IGFzeW5jICgpID0+IHtcbiAqICAgYXdhaXQgY3JlYXRlUmV3YXJkLm11dGF0ZUFzeW5jKHtcbiAqICAgICBiYWRnZUlkOiAnYmFkZ2Utd2Vlay13YXJyaW9yJyxcbiAqICAgICB0aXRsZTogJ0ZyZWUgQ29mZmVlJyxcbiAqICAgICBkZXNjcmlwdGlvbjogJ1Nob3cgeW91ciBiYWRnZSBmb3IgYSBmcmVlIGNvZmZlZScsXG4gKiAgICAgcmVkZWVtVHlwZTogJ0lOX1BFUlNPTicsXG4gKiAgIH0pO1xuICogfTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlQ3JlYXRlVmVudWVSZXdhcmQoXG4gIHZlbnVlSWQ6IHN0cmluZyxcbiAgb3B0aW9ucz86IE9taXQ8VXNlTXV0YXRpb25PcHRpb25zPHVua25vd24sIEVycm9yLCBDcmVhdGVSZXdhcmRSZXF1ZXN0PiwgJ211dGF0aW9uRm4nPlxuKSB7XG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gdXNlUXVlcnlDbGllbnQoKTtcblxuICByZXR1cm4gdXNlTXV0YXRpb24oe1xuICAgIG11dGF0aW9uRm46IGFzeW5jIChkYXRhOiBDcmVhdGVSZXdhcmRSZXF1ZXN0KSA9PiB7XG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRBcGlDbGllbnQoKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LnBvc3QoYC9hcGkvdjEvdmVudWVzLyR7dmVudWVJZH0vcmV3YXJkc2AsIGRhdGEpO1xuICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE/LmRhdGEgfHwgcmVzcG9uc2UuZGF0YTtcbiAgICB9LFxuICAgIG9uU3VjY2VzczogKCkgPT4ge1xuICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoeyBxdWVyeUtleTogcmV3YXJkS2V5cy5mb3JWZW51ZSh2ZW51ZUlkKSB9KTtcbiAgICAgIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHsgcXVlcnlLZXk6IHJld2FyZEtleXMuYXZhaWxhYmxlKCkgfSk7XG4gICAgfSxcbiAgICAuLi5vcHRpb25zLFxuICB9KTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSByZXdhcmQgZm9yIGEgYnJhbmRcbiAqXG4gKiBAcGFyYW0gYnJhbmRJZCAtIEJyYW5kIElEXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzeFxuICogY29uc3QgY3JlYXRlUmV3YXJkID0gdXNlQ3JlYXRlQnJhbmRSZXdhcmQoJ2JyYW5kLTEyMycpO1xuICpcbiAqIGNvbnN0IGhhbmRsZUNyZWF0ZSA9IGFzeW5jICgpID0+IHtcbiAqICAgYXdhaXQgY3JlYXRlUmV3YXJkLm11dGF0ZUFzeW5jKHtcbiAqICAgICBiYWRnZUlkOiAnYmFkZ2Utd2Vlay13YXJyaW9yJyxcbiAqICAgICB0aXRsZTogJzEwJSBPZmYnLFxuICogICAgIGRlc2NyaXB0aW9uOiAnVXNlIGNvZGUgYXQgY2hlY2tvdXQnLFxuICogICAgIGNvZGU6ICdTT0JFUjEwJyxcbiAqICAgICByZWRlZW1UeXBlOiAnT05MSU5FJyxcbiAqICAgfSk7XG4gKiB9O1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VDcmVhdGVCcmFuZFJld2FyZChcbiAgYnJhbmRJZDogc3RyaW5nLFxuICBvcHRpb25zPzogT21pdDxVc2VNdXRhdGlvbk9wdGlvbnM8dW5rbm93biwgRXJyb3IsIENyZWF0ZVJld2FyZFJlcXVlc3Q+LCAnbXV0YXRpb25Gbic+XG4pIHtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSB1c2VRdWVyeUNsaWVudCgpO1xuXG4gIHJldHVybiB1c2VNdXRhdGlvbih7XG4gICAgbXV0YXRpb25GbjogYXN5bmMgKGRhdGE6IENyZWF0ZVJld2FyZFJlcXVlc3QpID0+IHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IGdldEFwaUNsaWVudCgpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQucG9zdChgL2FwaS92MS9icmFuZHMvJHticmFuZElkfS9yZXdhcmRzYCwgZGF0YSk7XG4gICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YT8uZGF0YSB8fCByZXNwb25zZS5kYXRhO1xuICAgIH0sXG4gICAgb25TdWNjZXNzOiAoKSA9PiB7XG4gICAgICBxdWVyeUNsaWVudC5pbnZhbGlkYXRlUXVlcmllcyh7IHF1ZXJ5S2V5OiByZXdhcmRLZXlzLmZvckJyYW5kKGJyYW5kSWQpIH0pO1xuICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoeyBxdWVyeUtleTogcmV3YXJkS2V5cy5hdmFpbGFibGUoKSB9KTtcbiAgICB9LFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBhIHBhcnRuZXIgcmV3YXJkIChmb3IgYnVzaW5lc3MgZGFzaGJvYXJkKVxuICpcbiAqIEBwYXJhbSBidXNpbmVzc0lkIC0gQnVzaW5lc3MgSURcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHN4XG4gKiBjb25zdCB1cGRhdGVSZXdhcmQgPSB1c2VVcGRhdGVQYXJ0bmVyUmV3YXJkKCdidXNpbmVzcy0xMjMnKTtcbiAqXG4gKiBjb25zdCBoYW5kbGVVcGRhdGUgPSBhc3luYyAocmV3YXJkSWQ6IHN0cmluZykgPT4ge1xuICogICBhd2FpdCB1cGRhdGVSZXdhcmQubXV0YXRlQXN5bmMoe1xuICogICAgIGlkOiByZXdhcmRJZCxcbiAqICAgICBkYXRhOiB7IHRpdGxlOiAnVXBkYXRlZCBUaXRsZScsIGlzQWN0aXZlOiBmYWxzZSB9LFxuICogICB9KTtcbiAqIH07XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVVwZGF0ZVBhcnRuZXJSZXdhcmQoXG4gIGJ1c2luZXNzSWQ6IHN0cmluZyxcbiAgb3B0aW9ucz86IE9taXQ8XG4gICAgVXNlTXV0YXRpb25PcHRpb25zPFxuICAgICAgUGFydG5lclJld2FyZFJlc3BvbnNlLFxuICAgICAgRXJyb3IsXG4gICAgICB7IGlkOiBzdHJpbmc7IGRhdGE6IFBhcnRpYWw8Q3JlYXRlUGFydG5lclJld2FyZFJlcXVlc3QgJiB7IGlzQWN0aXZlOiBib29sZWFuIH0+IH1cbiAgICA+LFxuICAgICdtdXRhdGlvbkZuJ1xuICA+XG4pIHtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSB1c2VRdWVyeUNsaWVudCgpO1xuXG4gIHJldHVybiB1c2VNdXRhdGlvbih7XG4gICAgbXV0YXRpb25GbjogYXN5bmMgKHtcbiAgICAgIGlkLFxuICAgICAgZGF0YSxcbiAgICB9OiB7XG4gICAgICBpZDogc3RyaW5nO1xuICAgICAgZGF0YTogUGFydGlhbDxDcmVhdGVQYXJ0bmVyUmV3YXJkUmVxdWVzdCAmIHsgaXNBY3RpdmU6IGJvb2xlYW4gfT47XG4gICAgfSk6IFByb21pc2U8UGFydG5lclJld2FyZFJlc3BvbnNlPiA9PiB7XG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRBcGlDbGllbnQoKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LnBhdGNoKGAvYXBpL3YxL2J1c2luZXNzZXMvJHtidXNpbmVzc0lkfS9yZXdhcmRzLyR7aWR9YCwgZGF0YSk7XG4gICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YT8uZGF0YSB8fCByZXNwb25zZS5kYXRhO1xuICAgIH0sXG4gICAgb25TdWNjZXNzOiAoKSA9PiB7XG4gICAgICBxdWVyeUNsaWVudC5pbnZhbGlkYXRlUXVlcmllcyh7IHF1ZXJ5S2V5OiByZXdhcmRLZXlzLmZvckJ1c2luZXNzKGJ1c2luZXNzSWQpIH0pO1xuICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoeyBxdWVyeUtleTogcmV3YXJkS2V5cy5hdmFpbGFibGUoKSB9KTtcbiAgICB9LFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pO1xufVxuIl19
|
|
181
|
+
/**
|
|
182
|
+
* Update a venue reward
|
|
183
|
+
*
|
|
184
|
+
* @param venueId - Venue ID
|
|
185
|
+
*
|
|
186
|
+
* @example
|
|
187
|
+
* ```tsx
|
|
188
|
+
* const updateReward = useUpdateVenueReward('venue-123');
|
|
189
|
+
*
|
|
190
|
+
* const handleUpdate = async (rewardId: string) => {
|
|
191
|
+
* await updateReward.mutateAsync({
|
|
192
|
+
* id: rewardId,
|
|
193
|
+
* data: { isActive: false },
|
|
194
|
+
* });
|
|
195
|
+
* };
|
|
196
|
+
* ```
|
|
197
|
+
*/
|
|
198
|
+
function useUpdateVenueReward(venueId, options) {
|
|
199
|
+
const queryClient = (0, react_query_1.useQueryClient)();
|
|
200
|
+
return (0, react_query_1.useMutation)({
|
|
201
|
+
mutationFn: async ({ id, data }) => {
|
|
202
|
+
const client = (0, client_1.getApiClient)();
|
|
203
|
+
const response = await client.patch(`/api/v1/venues/${venueId}/rewards/${id}`, data);
|
|
204
|
+
return response.data?.data || response.data;
|
|
205
|
+
},
|
|
206
|
+
onSuccess: () => {
|
|
207
|
+
queryClient.invalidateQueries({ queryKey: badges_1.rewardKeys.forVenue(venueId) });
|
|
208
|
+
queryClient.invalidateQueries({ queryKey: badges_1.rewardKeys.available() });
|
|
209
|
+
},
|
|
210
|
+
...options,
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Delete a venue reward
|
|
215
|
+
*
|
|
216
|
+
* @param venueId - Venue ID
|
|
217
|
+
*
|
|
218
|
+
* @example
|
|
219
|
+
* ```tsx
|
|
220
|
+
* const deleteReward = useDeleteVenueReward('venue-123');
|
|
221
|
+
*
|
|
222
|
+
* const handleDelete = async (rewardId: string) => {
|
|
223
|
+
* await deleteReward.mutateAsync(rewardId);
|
|
224
|
+
* };
|
|
225
|
+
* ```
|
|
226
|
+
*/
|
|
227
|
+
function useDeleteVenueReward(venueId, options) {
|
|
228
|
+
const queryClient = (0, react_query_1.useQueryClient)();
|
|
229
|
+
return (0, react_query_1.useMutation)({
|
|
230
|
+
mutationFn: async (rewardId) => {
|
|
231
|
+
const client = (0, client_1.getApiClient)();
|
|
232
|
+
const response = await client.delete(`/api/v1/venues/${venueId}/rewards/${rewardId}`);
|
|
233
|
+
return response.data?.data || response.data;
|
|
234
|
+
},
|
|
235
|
+
onSuccess: () => {
|
|
236
|
+
queryClient.invalidateQueries({ queryKey: badges_1.rewardKeys.forVenue(venueId) });
|
|
237
|
+
queryClient.invalidateQueries({ queryKey: badges_1.rewardKeys.available() });
|
|
238
|
+
},
|
|
239
|
+
...options,
|
|
240
|
+
});
|
|
241
|
+
}
|
|
242
|
+
// ============================================================================
|
|
243
|
+
// BRAND REWARD MUTATIONS
|
|
244
|
+
// ============================================================================
|
|
245
|
+
/**
|
|
246
|
+
* Update a brand reward
|
|
247
|
+
*
|
|
248
|
+
* @param brandId - Brand ID
|
|
249
|
+
*
|
|
250
|
+
* @example
|
|
251
|
+
* ```tsx
|
|
252
|
+
* const updateReward = useUpdateBrandReward('brand-123');
|
|
253
|
+
*
|
|
254
|
+
* const handleUpdate = async (rewardId: string) => {
|
|
255
|
+
* await updateReward.mutateAsync({
|
|
256
|
+
* id: rewardId,
|
|
257
|
+
* data: { isActive: false },
|
|
258
|
+
* });
|
|
259
|
+
* };
|
|
260
|
+
* ```
|
|
261
|
+
*/
|
|
262
|
+
function useUpdateBrandReward(brandId, options) {
|
|
263
|
+
const queryClient = (0, react_query_1.useQueryClient)();
|
|
264
|
+
return (0, react_query_1.useMutation)({
|
|
265
|
+
mutationFn: async ({ id, data }) => {
|
|
266
|
+
const client = (0, client_1.getApiClient)();
|
|
267
|
+
const response = await client.patch(`/api/v1/brands/${brandId}/rewards/${id}`, data);
|
|
268
|
+
return response.data?.data || response.data;
|
|
269
|
+
},
|
|
270
|
+
onSuccess: () => {
|
|
271
|
+
queryClient.invalidateQueries({ queryKey: badges_1.rewardKeys.forBrand(brandId) });
|
|
272
|
+
queryClient.invalidateQueries({ queryKey: badges_1.rewardKeys.available() });
|
|
273
|
+
},
|
|
274
|
+
...options,
|
|
275
|
+
});
|
|
276
|
+
}
|
|
277
|
+
/**
|
|
278
|
+
* Delete a brand reward
|
|
279
|
+
*
|
|
280
|
+
* @param brandId - Brand ID
|
|
281
|
+
*
|
|
282
|
+
* @example
|
|
283
|
+
* ```tsx
|
|
284
|
+
* const deleteReward = useDeleteBrandReward('brand-123');
|
|
285
|
+
*
|
|
286
|
+
* const handleDelete = async (rewardId: string) => {
|
|
287
|
+
* await deleteReward.mutateAsync(rewardId);
|
|
288
|
+
* };
|
|
289
|
+
* ```
|
|
290
|
+
*/
|
|
291
|
+
function useDeleteBrandReward(brandId, options) {
|
|
292
|
+
const queryClient = (0, react_query_1.useQueryClient)();
|
|
293
|
+
return (0, react_query_1.useMutation)({
|
|
294
|
+
mutationFn: async (rewardId) => {
|
|
295
|
+
const client = (0, client_1.getApiClient)();
|
|
296
|
+
const response = await client.delete(`/api/v1/brands/${brandId}/rewards/${rewardId}`);
|
|
297
|
+
return response.data?.data || response.data;
|
|
298
|
+
},
|
|
299
|
+
onSuccess: () => {
|
|
300
|
+
queryClient.invalidateQueries({ queryKey: badges_1.rewardKeys.forBrand(brandId) });
|
|
301
|
+
queryClient.invalidateQueries({ queryKey: badges_1.rewardKeys.available() });
|
|
302
|
+
},
|
|
303
|
+
...options,
|
|
304
|
+
});
|
|
305
|
+
}
|
|
306
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFkZ2VzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwaS9tdXRhdGlvbnMvYmFkZ2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBMEJBLDBDQW1CQztBQW9CRCx3REFpQkM7QUFxQ0Qsb0RBa0JDO0FBc0JELG9EQWtCQztBQW1CRCx3REErQkM7QUFtQ0Qsb0RBcUJDO0FBZ0JELG9EQWtCQztBQXVCRCxvREFxQkM7QUFnQkQsb0RBa0JDO0FBM1lELHVEQUF3RjtBQUN4RixzQ0FBeUM7QUFDekMsOENBQTBEO0FBTzFELCtFQUErRTtBQUMvRSx3QkFBd0I7QUFDeEIsK0VBQStFO0FBRS9FOzs7Ozs7Ozs7Ozs7R0FZRztBQUNILFNBQWdCLGVBQWUsQ0FDN0IsT0FBZ0c7SUFFaEcsTUFBTSxXQUFXLEdBQUcsSUFBQSw0QkFBYyxHQUFFLENBQUM7SUFFckMsT0FBTyxJQUFBLHlCQUFXLEVBQUM7UUFDakIsVUFBVSxFQUFFLEtBQUssRUFBRSxRQUFnQixFQUE0QyxFQUFFO1lBQy9FLE1BQU0sTUFBTSxHQUFHLElBQUEscUJBQVksR0FBRSxDQUFDO1lBQzlCLE1BQU0sUUFBUSxHQUFHLE1BQU0sTUFBTSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsUUFBUSxTQUFTLENBQUMsQ0FBQztZQUN6RSxPQUFPLFFBQVEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUM7UUFDOUMsQ0FBQztRQUNELFNBQVMsRUFBRSxHQUFHLEVBQUU7WUFDZCxvREFBb0Q7WUFDcEQsV0FBVyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsUUFBUSxFQUFFLG1CQUFVLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ2pFLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLFFBQVEsRUFBRSxtQkFBVSxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNwRSxXQUFXLENBQUMsaUJBQWlCLENBQUMsRUFBRSxRQUFR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QkFBb0IsQ0FDbEMsT0FBZSxFQUNmLE9BQXdFO0lBRXhFLE1BQU0sV0FBVyxHQUFHLElBQUEsNEJBQWMsR0FBRSxDQUFDO0lBRXJDLE9BQU8sSUFBQSx5QkFBVyxFQUFDO1FBQ2pCLFVBQVUsRUFBRSxLQUFLLEVBQUUsUUFBZ0IsRUFBRSxFQUFFO1lBQ3JDLE1BQU0sTUFBTSxHQUFHLElBQUEscUJBQVksR0FBRSxDQUFDO1lBQzlCLE1BQU0sUUFBUSxHQUFHLE1BQU0sTUFBTSxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsT0FBTyxZQUFZLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFDdEYsT0FBTyxRQUFRLENBQUMsSUFBSSxFQUFFLElBQUksSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDO1FBQzlDLENBQUM7UUFDRCxTQUFTLEVBQUUsR0FBRyxFQUFFO1lBQ2QsV0FBVyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsUUFBUSxFQUFFLG1CQUFVLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUMxRSxXQUFXLENBQUMsaUJBQWlCLENBQUMsRUFBRSxRQUFRLEVBQUUsbUJBQVUsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDdEUsQ0FBQztRQUNELEdBQUcsT0FBTztLQUNYLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB1c2VNdXRhdGlvbiwgdXNlUXVlcnlDbGllbnQsIFVzZU11dGF0aW9uT3B0aW9ucyB9IGZyb20gJ0B0YW5zdGFjay9yZWFjdC1xdWVyeSc7XG5pbXBvcnQgeyBnZXRBcGlDbGllbnQgfSBmcm9tICcuLi9jbGllbnQnO1xuaW1wb3J0IHsgYmFkZ2VLZXlzLCByZXdhcmRLZXlzIH0gZnJvbSAnLi4vcXVlcmllcy9iYWRnZXMnO1xuaW1wb3J0IHR5cGUge1xuICBQYXJ0bmVyUmV3YXJkUmVzcG9uc2UsXG4gIFBhcnRuZXJSZXdhcmRSZWRlbXB0aW9uUmVzcG9uc2UsXG4gIENyZWF0ZVBhcnRuZXJSZXdhcmRSZXF1ZXN0LFxufSBmcm9tICcuLi90eXBlcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFJFV0FSRCBNVVRBVElPTiBIT09LU1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIFJlZGVlbSBhIHBhcnRuZXIgcmV3YXJkXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzeFxuICogY29uc3QgcmVkZWVtUmV3YXJkID0gdXNlUmVkZWVtUmV3YXJkKCk7XG4gKlxuICogY29uc3QgaGFuZGxlUmVkZWVtID0gYXN5bmMgKHJld2FyZElkOiBzdHJpbmcpID0+IHtcbiAqICAgYXdhaXQgcmVkZWVtUmV3YXJkLm11dGF0ZUFzeW5jKHJld2FyZElkKTtcbiAqICAgLy8gU2hvdyBzdWNjZXNzIG1lc3NhZ2VcbiAqIH07XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVJlZGVlbVJld2FyZChcbiAgb3B0aW9ucz86IE9taXQ8VXNlTXV0YXRpb25PcHRpb25zPFBhcnRuZXJSZXdhcmRSZWRlbXB0aW9uUmVzcG9uc2UsIEVycm9yLCBzdHJpbmc+LCAnbXV0YXRpb25Gbic+XG4pIHtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSB1c2VRdWVyeUNsaWVudCgpO1xuXG4gIHJldHVybiB1c2VNdXRhdGlvbih7XG4gICAgbXV0YXRpb25GbjogYXN5bmMgKHJld2FyZElkOiBzdHJpbmcpOiBQcm9taXNlPFBhcnRuZXJSZXdhcmRSZWRlbXB0aW9uUmVzcG9uc2U+ID0+IHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IGdldEFwaUNsaWVudCgpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQucG9zdChgL2FwaS92MS9yZXdhcmRzLyR7cmV3YXJkSWR9L3JlZGVlbWApO1xuICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE/LmRhdGEgfHwgcmVzcG9uc2UuZGF0YTtcbiAgICB9LFxuICAgIG9uU3VjY2VzczogKCkgPT4ge1xuICAgICAgLy8gSW52YWxpZGF0ZSB3YWxsZXQsIGF2YWlsYWJsZSBhbmQgcmVkZWVtZWQgcmV3YXJkc1xuICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoeyBxdWVyeUtleTogcmV3YXJkS2V5cy53YWxsZXQoKSB9KTtcbiAgICAgIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHsgcXVlcnlLZXk6IHJld2FyZEtleXMuYXZhaWxhYmxlKCkgfSk7XG4gICAgICBxdWVyeUNsaWVudC5pbnZhbGlkYXRlUXVlcmllcyh7IHF1ZXJ5S2V5OiByZXdhcmRLZXlzLnJlZGVlbWVkKCkgfSk7XG4gICAgfSxcbiAgICAuLi5vcHRpb25zLFxuICB9KTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBwYXJ0bmVyIHJld2FyZCAoZm9yIGJ1c2luZXNzIGRhc2hib2FyZClcbiAqXG4gKiBAcGFyYW0gYnVzaW5lc3NJZCAtIEJ1c2luZXNzIElEIGNyZWF0aW5nIHRoZSByZXdhcmRcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHN4XG4gKiBjb25zdCBjcmVhdGVSZXdhcmQgPSB1c2VDcmVhdGVQYXJ0bmVyUmV3YXJkKCdidXNpbmVzcy0xMjMnKTtcbiAqXG4gKiBjb25zdCBoYW5kbGVDcmVhdGUgPSBhc3luYyAoKSA9PiB7XG4gKiAgIGF3YWl0IGNyZWF0ZVJld2FyZC5tdXRhdGVBc3luYyh7XG4gKiAgICAgYmFkZ2VJZDogJ2JhZGdlLXdlZWstd2FycmlvcicsXG4gKiAgICAgdGl0bGU6ICdGcmVlIENvZmZlZScsXG4gKiAgICAgZGVzY3JpcHRpb246ICdTaG93IHlvdXIgYmFkZ2UgZm9yIGEgZnJlZSBjb2ZmZWUnLFxuICogICB9KTtcbiAqIH07XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUNyZWF0ZVBhcnRuZXJSZXdhcmQoXG4gIGJ1c2luZXNzSWQ6IHN0cmluZyxcbiAgb3B0aW9ucz86IE9taXQ8VXNlTXV0YXRpb25PcHRpb25zPFBhcnRuZXJSZXdhcmRSZXNwb25zZSwgRXJyb3IsIENyZWF0ZVBhcnRuZXJSZXdhcmRSZXF1ZXN0PiwgJ211dGF0aW9uRm4nPlxuKSB7XG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gdXNlUXVlcnlDbGllbnQoKTtcblxuICByZXR1cm4gdXNlTXV0YXRpb24oe1xuICAgIG11dGF0aW9uRm46IGFzeW5jIChkYXRhOiBDcmVhdGVQYXJ0bmVyUmV3YXJkUmVxdWVzdCk6IFByb21pc2U8UGFydG5lclJld2FyZFJlc3BvbnNlPiA9PiB7XG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRBcGlDbGllbnQoKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LnBvc3QoYC9hcGkvdjEvYnVzaW5lc3Nlcy8ke2J1c2luZXNzSWR9L3Jld2FyZHNgLCBkYXRhKTtcbiAgICAgIHJldHVybiByZXNwb25zZS5kYXRhPy5kYXRhIHx8IHJlc3BvbnNlLmRhdGE7XG4gICAgfSxcbiAgICBvblN1Y2Nlc3M6ICgpID0+IHtcbiAgICAgIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHsgcXVlcnlLZXk6IHJld2FyZEtleXMuZm9yQnVzaW5lc3MoYnVzaW5lc3NJZCkgfSk7XG4gICAgfSxcbiAgICAuLi5vcHRpb25zLFxuICB9KTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gVU5JRklFRCBSRVdBUkQgTVVUQVRJT05TIChWZW51ZSAmIEJyYW5kKVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5pbnRlcmZhY2UgQ3JlYXRlUmV3YXJkUmVxdWVzdCB7XG4gIGJhZGdlSWQ6IHN0cmluZztcbiAgdGl0bGU6IHN0cmluZztcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGNvZGU/OiBzdHJpbmc7XG4gIHJlZGVlbVR5cGU/OiAnSU5fUEVSU09OJyB8ICdPTkxJTkUnIHwgJ0JPVEgnO1xuICBtYXhSZWRlbXB0aW9ucz86IG51bWJlcjtcbiAgcGVyVXNlckxpbWl0PzogbnVtYmVyO1xuICB2YWxpZEZyb20/OiBzdHJpbmc7XG4gIHZhbGlkVW50aWw/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgcmV3YXJkIGZvciBhIHZlbnVlXG4gKlxuICogQHBhcmFtIHZlbnVlSWQgLSBWZW51ZSBJRFxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c3hcbiAqIGNvbnN0IGNyZWF0ZVJld2FyZCA9IHVzZUNyZWF0ZVZlbnVlUmV3YXJkKCd2ZW51ZS0xMjMnKTtcbiAqXG4gKiBjb25zdCBoYW5kbGVDcmVhdGUgPSBhc3luYyAoKSA9PiB7XG4gKiAgIGF3YWl0IGNyZWF0ZVJld2FyZC5tdXRhdGVBc3luYyh7XG4gKiAgICAgYmFkZ2VJZDogJ2JhZGdlLXdlZWstd2FycmlvcicsXG4gKiAgICAgdGl0bGU6ICdGcmVlIENvZmZlZScsXG4gKiAgICAgZGVzY3JpcHRpb246ICdTaG93IHlvdXIgYmFkZ2UgZm9yIGEgZnJlZSBjb2ZmZWUnLFxuICogICAgIHJlZGVlbVR5cGU6ICdJTl9QRVJTT04nLFxuICogICB9KTtcbiAqIH07XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUNyZWF0ZVZlbnVlUmV3YXJkKFxuICB2ZW51ZUlkOiBzdHJpbmcsXG4gIG9wdGlvbnM/OiBPbWl0PFVzZU11dGF0aW9uT3B0aW9uczx1bmtub3duLCBFcnJvciwgQ3JlYXRlUmV3YXJkUmVxdWVzdD4sICdtdXRhdGlvbkZuJz5cbikge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IHVzZVF1ZXJ5Q2xpZW50KCk7XG5cbiAgcmV0dXJuIHVzZU11dGF0aW9uKHtcbiAgICBtdXRhdGlvbkZuOiBhc3luYyAoZGF0YTogQ3JlYXRlUmV3YXJkUmVxdWVzdCkgPT4ge1xuICAgICAgY29uc3QgY2xpZW50ID0gZ2V0QXBpQ2xpZW50KCk7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5wb3N0KGAvYXBpL3YxL3ZlbnVlcy8ke3ZlbnVlSWR9L3Jld2FyZHNgLCBkYXRhKTtcbiAgICAgIHJldHVybiByZXNwb25zZS5kYXRhPy5kYXRhIHx8IHJlc3BvbnNlLmRhdGE7XG4gICAgfSxcbiAgICBvblN1Y2Nlc3M6ICgpID0+IHtcbiAgICAgIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHsgcXVlcnlLZXk6IHJld2FyZEtleXMuZm9yVmVudWUodmVudWVJZCkgfSk7XG4gICAgICBxdWVyeUNsaWVudC5pbnZhbGlkYXRlUXVlcmllcyh7IHF1ZXJ5S2V5OiByZXdhcmRLZXlzLmF2YWlsYWJsZSgpIH0pO1xuICAgIH0sXG4gICAgLi4ub3B0aW9ucyxcbiAgfSk7XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgcmV3YXJkIGZvciBhIGJyYW5kXG4gKlxuICogQHBhcmFtIGJyYW5kSWQgLSBCcmFuZCBJRFxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c3hcbiAqIGNvbnN0IGNyZWF0ZVJld2FyZCA9IHVzZUNyZWF0ZUJyYW5kUmV3YXJkKCdicmFuZC0xMjMnKTtcbiAqXG4gKiBjb25zdCBoYW5kbGVDcmVhdGUgPSBhc3luYyAoKSA9PiB7XG4gKiAgIGF3YWl0IGNyZWF0ZVJld2FyZC5tdXRhdGVBc3luYyh7XG4gKiAgICAgYmFkZ2VJZDogJ2JhZGdlLXdlZWstd2FycmlvcicsXG4gKiAgICAgdGl0bGU6ICcxMCUgT2ZmJyxcbiAqICAgICBkZXNjcmlwdGlvbjogJ1VzZSBjb2RlIGF0IGNoZWNrb3V0JyxcbiAqICAgICBjb2RlOiAnU09CRVIxMCcsXG4gKiAgICAgcmVkZWVtVHlwZTogJ09OTElORScsXG4gKiAgIH0pO1xuICogfTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlQ3JlYXRlQnJhbmRSZXdhcmQoXG4gIGJyYW5kSWQ6IHN0cmluZyxcbiAgb3B0aW9ucz86IE9taXQ8VXNlTXV0YXRpb25PcHRpb25zPHVua25vd24sIEVycm9yLCBDcmVhdGVSZXdhcmRSZXF1ZXN0PiwgJ211dGF0aW9uRm4nPlxuKSB7XG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gdXNlUXVlcnlDbGllbnQoKTtcblxuICByZXR1cm4gdXNlTXV0YXRpb24oe1xuICAgIG11dGF0aW9uRm46IGFzeW5jIChkYXRhOiBDcmVhdGVSZXdhcmRSZXF1ZXN0KSA9PiB7XG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRBcGlDbGllbnQoKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LnBvc3QoYC9hcGkvdjEvYnJhbmRzLyR7YnJhbmRJZH0vcmV3YXJkc2AsIGRhdGEpO1xuICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE/LmRhdGEgfHwgcmVzcG9uc2UuZGF0YTtcbiAgICB9LFxuICAgIG9uU3VjY2VzczogKCkgPT4ge1xuICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoeyBxdWVyeUtleTogcmV3YXJkS2V5cy5mb3JCcmFuZChicmFuZElkKSB9KTtcbiAgICAgIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHsgcXVlcnlLZXk6IHJld2FyZEtleXMuYXZhaWxhYmxlKCkgfSk7XG4gICAgfSxcbiAgICAuLi5vcHRpb25zLFxuICB9KTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgYSBwYXJ0bmVyIHJld2FyZCAoZm9yIGJ1c2luZXNzIGRhc2hib2FyZClcbiAqXG4gKiBAcGFyYW0gYnVzaW5lc3NJZCAtIEJ1c2luZXNzIElEXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzeFxuICogY29uc3QgdXBkYXRlUmV3YXJkID0gdXNlVXBkYXRlUGFydG5lclJld2FyZCgnYnVzaW5lc3MtMTIzJyk7XG4gKlxuICogY29uc3QgaGFuZGxlVXBkYXRlID0gYXN5bmMgKHJld2FyZElkOiBzdHJpbmcpID0+IHtcbiAqICAgYXdhaXQgdXBkYXRlUmV3YXJkLm11dGF0ZUFzeW5jKHtcbiAqICAgICBpZDogcmV3YXJkSWQsXG4gKiAgICAgZGF0YTogeyB0aXRsZTogJ1VwZGF0ZWQgVGl0bGUnLCBpc0FjdGl2ZTogZmFsc2UgfSxcbiAqICAgfSk7XG4gKiB9O1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VVcGRhdGVQYXJ0bmVyUmV3YXJkKFxuICBidXNpbmVzc0lkOiBzdHJpbmcsXG4gIG9wdGlvbnM/OiBPbWl0PFxuICAgIFVzZU11dGF0aW9uT3B0aW9uczxcbiAgICAgIFBhcnRuZXJSZXdhcmRSZXNwb25zZSxcbiAgICAgIEVycm9yLFxuICAgICAgeyBpZDogc3RyaW5nOyBkYXRhOiBQYXJ0aWFsPENyZWF0ZVBhcnRuZXJSZXdhcmRSZXF1ZXN0ICYgeyBpc0FjdGl2ZTogYm9vbGVhbiB9PiB9XG4gICAgPixcbiAgICAnbXV0YXRpb25GbidcbiAgPlxuKSB7XG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gdXNlUXVlcnlDbGllbnQoKTtcblxuICByZXR1cm4gdXNlTXV0YXRpb24oe1xuICAgIG11dGF0aW9uRm46IGFzeW5jICh7XG4gICAgICBpZCxcbiAgICAgIGRhdGEsXG4gICAgfToge1xuICAgICAgaWQ6IHN0cmluZztcbiAgICAgIGRhdGE6IFBhcnRpYWw8Q3JlYXRlUGFydG5lclJld2FyZFJlcXVlc3QgJiB7IGlzQWN0aXZlOiBib29sZWFuIH0+O1xuICAgIH0pOiBQcm9taXNlPFBhcnRuZXJSZXdhcmRSZXNwb25zZT4gPT4ge1xuICAgICAgY29uc3QgY2xpZW50ID0gZ2V0QXBpQ2xpZW50KCk7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5wYXRjaChgL2FwaS92MS9idXNpbmVzc2VzLyR7YnVzaW5lc3NJZH0vcmV3YXJkcy8ke2lkfWAsIGRhdGEpO1xuICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE/LmRhdGEgfHwgcmVzcG9uc2UuZGF0YTtcbiAgICB9LFxuICAgIG9uU3VjY2VzczogKCkgPT4ge1xuICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoeyBxdWVyeUtleTogcmV3YXJkS2V5cy5mb3JCdXNpbmVzcyhidXNpbmVzc0lkKSB9KTtcbiAgICAgIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHsgcXVlcnlLZXk6IHJld2FyZEtleXMuYXZhaWxhYmxlKCkgfSk7XG4gICAgfSxcbiAgICAuLi5vcHRpb25zLFxuICB9KTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gVkVOVUUgUkVXQVJEIE1VVEFUSU9OU1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5pbnRlcmZhY2UgVXBkYXRlUmV3YXJkUmVxdWVzdCB7XG4gIGlzQWN0aXZlPzogYm9vbGVhbjtcbiAgdGl0bGU/OiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBjb2RlPzogc3RyaW5nO1xuICByZWRlZW1UeXBlPzogJ0lOX1BFUlNPTicgfCAnT05MSU5FJyB8ICdCT1RIJztcbiAgbWF4UmVkZW1wdGlvbnM/OiBudW1iZXI7XG4gIHBlclVzZXJMaW1pdD86IG51bWJlcjtcbiAgdmFsaWRGcm9tPzogc3RyaW5nO1xuICB2YWxpZFVudGlsPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBhIHZlbnVlIHJld2FyZFxuICpcbiAqIEBwYXJhbSB2ZW51ZUlkIC0gVmVudWUgSURcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHN4XG4gKiBjb25zdCB1cGRhdGVSZXdhcmQgPSB1c2VVcGRhdGVWZW51ZVJld2FyZCgndmVudWUtMTIzJyk7XG4gKlxuICogY29uc3QgaGFuZGxlVXBkYXRlID0gYXN5bmMgKHJld2FyZElkOiBzdHJpbmcpID0+IHtcbiAqICAgYXdhaXQgdXBkYXRlUmV3YXJkLm11dGF0ZUFzeW5jKHtcbiAqICAgICBpZDogcmV3YXJkSWQsXG4gKiAgICAgZGF0YTogeyBpc0FjdGl2ZTogZmFsc2UgfSxcbiAqICAgfSk7XG4gKiB9O1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VVcGRhdGVWZW51ZVJld2FyZChcbiAgdmVudWVJZDogc3RyaW5nLFxuICBvcHRpb25zPzogT21pdDxcbiAgICBVc2VNdXRhdGlvbk9wdGlvbnM8dW5rbm93biwgRXJyb3IsIHsgaWQ6IHN0cmluZzsgZGF0YTogVXBkYXRlUmV3YXJkUmVxdWVzdCB9PixcbiAgICAnbXV0YXRpb25GbidcbiAgPlxuKSB7XG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gdXNlUXVlcnlDbGllbnQoKTtcblxuICByZXR1cm4gdXNlTXV0YXRpb24oe1xuICAgIG11dGF0aW9uRm46IGFzeW5jICh7IGlkLCBkYXRhIH06IHsgaWQ6IHN0cmluZzsgZGF0YTogVXBkYXRlUmV3YXJkUmVxdWVzdCB9KSA9PiB7XG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRBcGlDbGllbnQoKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LnBhdGNoKGAvYXBpL3YxL3ZlbnVlcy8ke3ZlbnVlSWR9L3Jld2FyZHMvJHtpZH1gLCBkYXRhKTtcbiAgICAgIHJldHVybiByZXNwb25zZS5kYXRhPy5kYXRhIHx8IHJlc3BvbnNlLmRhdGE7XG4gICAgfSxcbiAgICBvblN1Y2Nlc3M6ICgpID0+IHtcbiAgICAgIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHsgcXVlcnlLZXk6IHJld2FyZEtleXMuZm9yVmVudWUodmVudWVJZCkgfSk7XG4gICAgICBxdWVyeUNsaWVudC5pbnZhbGlkYXRlUXVlcmllcyh7IHF1ZXJ5S2V5OiByZXdhcmRLZXlzLmF2YWlsYWJsZSgpIH0pO1xuICAgIH0sXG4gICAgLi4ub3B0aW9ucyxcbiAgfSk7XG59XG5cbi8qKlxuICogRGVsZXRlIGEgdmVudWUgcmV3YXJkXG4gKlxuICogQHBhcmFtIHZlbnVlSWQgLSBWZW51ZSBJRFxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c3hcbiAqIGNvbnN0IGRlbGV0ZVJld2FyZCA9IHVzZURlbGV0ZVZlbnVlUmV3YXJkKCd2ZW51ZS0xMjMnKTtcbiAqXG4gKiBjb25zdCBoYW5kbGVEZWxldGUgPSBhc3luYyAocmV3YXJkSWQ6IHN0cmluZykgPT4ge1xuICogICBhd2FpdCBkZWxldGVSZXdhcmQubXV0YXRlQXN5bmMocmV3YXJkSWQpO1xuICogfTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlRGVsZXRlVmVudWVSZXdhcmQoXG4gIHZlbnVlSWQ6IHN0cmluZyxcbiAgb3B0aW9ucz86IE9taXQ8VXNlTXV0YXRpb25PcHRpb25zPHVua25vd24sIEVycm9yLCBzdHJpbmc+LCAnbXV0YXRpb25Gbic+XG4pIHtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSB1c2VRdWVyeUNsaWVudCgpO1xuXG4gIHJldHVybiB1c2VNdXRhdGlvbih7XG4gICAgbXV0YXRpb25GbjogYXN5bmMgKHJld2FyZElkOiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IGdldEFwaUNsaWVudCgpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuZGVsZXRlKGAvYXBpL3YxL3ZlbnVlcy8ke3ZlbnVlSWR9L3Jld2FyZHMvJHtyZXdhcmRJZH1gKTtcbiAgICAgIHJldHVybiByZXNwb25zZS5kYXRhPy5kYXRhIHx8IHJlc3BvbnNlLmRhdGE7XG4gICAgfSxcbiAgICBvblN1Y2Nlc3M6ICgpID0+IHtcbiAgICAgIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHsgcXVlcnlLZXk6IHJld2FyZEtleXMuZm9yVmVudWUodmVudWVJZCkgfSk7XG4gICAgICBxdWVyeUNsaWVudC5pbnZhbGlkYXRlUXVlcmllcyh7IHF1ZXJ5S2V5OiByZXdhcmRLZXlzLmF2YWlsYWJsZSgpIH0pO1xuICAgIH0sXG4gICAgLi4ub3B0aW9ucyxcbiAgfSk7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEJSQU5EIFJFV0FSRCBNVVRBVElPTlNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBVcGRhdGUgYSBicmFuZCByZXdhcmRcbiAqXG4gKiBAcGFyYW0gYnJhbmRJZCAtIEJyYW5kIElEXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzeFxuICogY29uc3QgdXBkYXRlUmV3YXJkID0gdXNlVXBkYXRlQnJhbmRSZXdhcmQoJ2JyYW5kLTEyMycpO1xuICpcbiAqIGNvbnN0IGhhbmRsZVVwZGF0ZSA9IGFzeW5jIChyZXdhcmRJZDogc3RyaW5nKSA9PiB7XG4gKiAgIGF3YWl0IHVwZGF0ZVJld2FyZC5tdXRhdGVBc3luYyh7XG4gKiAgICAgaWQ6IHJld2FyZElkLFxuICogICAgIGRhdGE6IHsgaXNBY3RpdmU6IGZhbHNlIH0sXG4gKiAgIH0pO1xuICogfTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlVXBkYXRlQnJhbmRSZXdhcmQoXG4gIGJyYW5kSWQ6IHN0cmluZyxcbiAgb3B0aW9ucz86IE9taXQ8XG4gICAgVXNlTXV0YXRpb25PcHRpb25zPHVua25vd24sIEVycm9yLCB7IGlkOiBzdHJpbmc7IGRhdGE6IFVwZGF0ZVJld2FyZFJlcXVlc3QgfT4sXG4gICAgJ211dGF0aW9uRm4nXG4gID5cbikge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IHVzZVF1ZXJ5Q2xpZW50KCk7XG5cbiAgcmV0dXJuIHVzZU11dGF0aW9uKHtcbiAgICBtdXRhdGlvbkZuOiBhc3luYyAoeyBpZCwgZGF0YSB9OiB7IGlkOiBzdHJpbmc7IGRhdGE6IFVwZGF0ZVJld2FyZFJlcXVlc3QgfSkgPT4ge1xuICAgICAgY29uc3QgY2xpZW50ID0gZ2V0QXBpQ2xpZW50KCk7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5wYXRjaChgL2FwaS92MS9icmFuZHMvJHticmFuZElkfS9yZXdhcmRzLyR7aWR9YCwgZGF0YSk7XG4gICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YT8uZGF0YSB8fCByZXNwb25zZS5kYXRhO1xuICAgIH0sXG4gICAgb25TdWNjZXNzOiAoKSA9PiB7XG4gICAgICBxdWVyeUNsaWVudC5pbnZhbGlkYXRlUXVlcmllcyh7IHF1ZXJ5S2V5OiByZXdhcmRLZXlzLmZvckJyYW5kKGJyYW5kSWQpIH0pO1xuICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoeyBxdWVyeUtleTogcmV3YXJkS2V5cy5hdmFpbGFibGUoKSB9KTtcbiAgICB9LFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pO1xufVxuXG4vKipcbiAqIERlbGV0ZSBhIGJyYW5kIHJld2FyZFxuICpcbiAqIEBwYXJhbSBicmFuZElkIC0gQnJhbmQgSURcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHN4XG4gKiBjb25zdCBkZWxldGVSZXdhcmQgPSB1c2VEZWxldGVCcmFuZFJld2FyZCgnYnJhbmQtMTIzJyk7XG4gKlxuICogY29uc3QgaGFuZGxlRGVsZXRlID0gYXN5bmMgKHJld2FyZElkOiBzdHJpbmcpID0+IHtcbiAqICAgYXdhaXQgZGVsZXRlUmV3YXJkLm11dGF0ZUFzeW5jKHJld2FyZElkKTtcbiAqIH07XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZURlbGV0ZUJyYW5kUmV3YXJkKFxuICBicmFuZElkOiBzdHJpbmcsXG4gIG9wdGlvbnM/OiBPbWl0PFVzZU11dGF0aW9uT3B0aW9uczx1bmtub3duLCBFcnJvciwgc3RyaW5nPiwgJ211dGF0aW9uRm4nPlxuKSB7XG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gdXNlUXVlcnlDbGllbnQoKTtcblxuICByZXR1cm4gdXNlTXV0YXRpb24oe1xuICAgIG11dGF0aW9uRm46IGFzeW5jIChyZXdhcmRJZDogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRBcGlDbGllbnQoKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LmRlbGV0ZShgL2FwaS92MS9icmFuZHMvJHticmFuZElkfS9yZXdhcmRzLyR7cmV3YXJkSWR9YCk7XG4gICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YT8uZGF0YSB8fCByZXNwb25zZS5kYXRhO1xuICAgIH0sXG4gICAgb25TdWNjZXNzOiAoKSA9PiB7XG4gICAgICBxdWVyeUNsaWVudC5pbnZhbGlkYXRlUXVlcmllcyh7IHF1ZXJ5S2V5OiByZXdhcmRLZXlzLmZvckJyYW5kKGJyYW5kSWQpIH0pO1xuICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoeyBxdWVyeUtleTogcmV3YXJkS2V5cy5hdmFpbGFibGUoKSB9KTtcbiAgICB9LFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pO1xufVxuIl19
|
|
@@ -41,4 +41,5 @@ __exportStar(require("./badges"), exports);
|
|
|
41
41
|
__exportStar(require("./creators"), exports);
|
|
42
42
|
__exportStar(require("./brands"), exports);
|
|
43
43
|
__exportStar(require("./products"), exports);
|
|
44
|
-
|
|
44
|
+
__exportStar(require("./venues"), exports);
|
|
45
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBpL211dGF0aW9ucy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7R0FJRzs7Ozs7Ozs7Ozs7Ozs7OztBQUVILDBDQUF3QjtBQUN4Qix5Q0FBdUI7QUFDdkIsNkNBQTJCO0FBQzNCLDJDQUF5QjtBQUN6Qix5Q0FBdUI7QUFDdkIsNENBQTBCO0FBQzFCLHdDQUFzQjtBQUN0QixrREFBZ0M7QUFDaEMsMkNBQXlCO0FBQ3pCLGtEQUFnQztBQUNoQyw0Q0FBMEI7QUFDMUIsMENBQXdCO0FBQ3hCLHlDQUF1QjtBQUN2QixnREFBOEI7QUFDOUIsMkNBQXlCO0FBQ3pCLDZDQUEyQjtBQUMzQiwrQ0FBNkI7QUFDN0IsOENBQTRCO0FBQzVCLDJDQUF5QjtBQUN6Qiw2Q0FBMkI7QUFDM0IsMkNBQXlCO0FBQ3pCLDZDQUEyQjtBQUMzQiwyQ0FBeUIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIE11dGF0aW9uIEhvb2tzXG4gKlxuICogUmUtZXhwb3J0cyBhbGwgbXV0YXRpb24gaG9va3MgZm9yIEFQSSBlbmRwb2ludHMuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9hZG1pbic7XG5leHBvcnQgKiBmcm9tICcuL2F1dGgnO1xuZXhwb3J0ICogZnJvbSAnLi9ib29raW5ncyc7XG5leHBvcnQgKiBmcm9tICcuL2V2ZW50cyc7XG5leHBvcnQgKiBmcm9tICcuL2h1YnMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWJyYXJ5JztcbmV4cG9ydCAqIGZyb20gJy4vbWFwJztcbmV4cG9ydCAqIGZyb20gJy4vbm90aWZpY2F0aW9ucyc7XG5leHBvcnQgKiBmcm9tICcuL29mZmVycyc7XG5leHBvcnQgKiBmcm9tICcuL3N1YnNjcmlwdGlvbnMnO1xuZXhwb3J0ICogZnJvbSAnLi9zdXBwb3J0JztcbmV4cG9ydCAqIGZyb20gJy4vdXNlcnMnO1xuZXhwb3J0ICogZnJvbSAnLi9qYWNrJztcbmV4cG9ydCAqIGZyb20gJy4vYW1iYXNzYWRvcnMnO1xuZXhwb3J0ICogZnJvbSAnLi9ncm93OTAnO1xuZXhwb3J0ICogZnJvbSAnLi9tYXRjaGluZyc7XG5leHBvcnQgKiBmcm9tICcuL2V2ZW50LWNoYXQnO1xuZXhwb3J0ICogZnJvbSAnLi91c2VyLXBpbnMnO1xuZXhwb3J0ICogZnJvbSAnLi9iYWRnZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9jcmVhdG9ycyc7XG5leHBvcnQgKiBmcm9tICcuL2JyYW5kcyc7XG5leHBvcnQgKiBmcm9tICcuL3Byb2R1Y3RzJztcbmV4cG9ydCAqIGZyb20gJy4vdmVudWVzJztcbiJdfQ==
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import { UseMutationOptions } from '@tanstack/react-query';
|
|
2
|
+
import type { VenueResponse, CreateVenueRequest, UpdateVenueRequest } from '../types';
|
|
3
|
+
/**
|
|
4
|
+
* Update a venue
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* ```tsx
|
|
8
|
+
* const updateVenue = useUpdateVenue({
|
|
9
|
+
* onSuccess: () => toast.success('Venue updated'),
|
|
10
|
+
* });
|
|
11
|
+
*
|
|
12
|
+
* const handleSave = () => {
|
|
13
|
+
* updateVenue.mutate({
|
|
14
|
+
* id: venueId,
|
|
15
|
+
* data: { name: 'Updated Name', hasAfDrinks: true },
|
|
16
|
+
* });
|
|
17
|
+
* };
|
|
18
|
+
* ```
|
|
19
|
+
*/
|
|
20
|
+
export declare function useUpdateVenue(options?: Omit<UseMutationOptions<VenueResponse, Error, {
|
|
21
|
+
id: string;
|
|
22
|
+
data: UpdateVenueRequest;
|
|
23
|
+
}>, 'mutationFn'>): import("@tanstack/react-query").UseMutationResult<{
|
|
24
|
+
id: string;
|
|
25
|
+
appId: string;
|
|
26
|
+
name: string;
|
|
27
|
+
slug: string;
|
|
28
|
+
description?: Record<string, never>;
|
|
29
|
+
type: "COFFEE_SHOP" | "RESTAURANT" | "BAR" | "WELLNESS" | "VENUE" | "ACTIVITY" | "RETAIL" | "OTHER";
|
|
30
|
+
hasAfDrinks: boolean;
|
|
31
|
+
isAfVenue: boolean;
|
|
32
|
+
afHighlights: string[];
|
|
33
|
+
address?: Record<string, never>;
|
|
34
|
+
cityId?: Record<string, never>;
|
|
35
|
+
locationLat?: Record<string, never>;
|
|
36
|
+
locationLong?: Record<string, never>;
|
|
37
|
+
phone?: Record<string, never>;
|
|
38
|
+
email?: Record<string, never>;
|
|
39
|
+
website?: Record<string, never>;
|
|
40
|
+
instagram?: Record<string, never>;
|
|
41
|
+
profileImage?: Record<string, never>;
|
|
42
|
+
bannerImage?: Record<string, never>;
|
|
43
|
+
photos: string[];
|
|
44
|
+
openingHours?: Record<string, never>;
|
|
45
|
+
rating?: Record<string, never>;
|
|
46
|
+
reviewCount: number;
|
|
47
|
+
isActive: boolean;
|
|
48
|
+
isVerified: boolean;
|
|
49
|
+
isFeatured: boolean;
|
|
50
|
+
isFoundingPartner: boolean;
|
|
51
|
+
createdAt: string;
|
|
52
|
+
updatedAt: string;
|
|
53
|
+
}, Error, {
|
|
54
|
+
id: string;
|
|
55
|
+
data: UpdateVenueRequest;
|
|
56
|
+
}, unknown>;
|
|
57
|
+
/**
|
|
58
|
+
* Create a venue
|
|
59
|
+
*
|
|
60
|
+
* @example
|
|
61
|
+
* ```tsx
|
|
62
|
+
* const createVenue = useCreateVenue({
|
|
63
|
+
* onSuccess: (venue) => {
|
|
64
|
+
* toast.success('Venue created');
|
|
65
|
+
* router.push(`/venues/${venue.id}`);
|
|
66
|
+
* },
|
|
67
|
+
* });
|
|
68
|
+
*
|
|
69
|
+
* const handleCreate = () => {
|
|
70
|
+
* createVenue.mutate({
|
|
71
|
+
* name: 'My Venue',
|
|
72
|
+
* address: '123 Main St',
|
|
73
|
+
* hasAfDrinks: true,
|
|
74
|
+
* });
|
|
75
|
+
* };
|
|
76
|
+
* ```
|
|
77
|
+
*/
|
|
78
|
+
export declare function useCreateVenue(options?: Omit<UseMutationOptions<VenueResponse, Error, CreateVenueRequest>, 'mutationFn'>): import("@tanstack/react-query").UseMutationResult<{
|
|
79
|
+
id: string;
|
|
80
|
+
appId: string;
|
|
81
|
+
name: string;
|
|
82
|
+
slug: string;
|
|
83
|
+
description?: Record<string, never>;
|
|
84
|
+
type: "COFFEE_SHOP" | "RESTAURANT" | "BAR" | "WELLNESS" | "VENUE" | "ACTIVITY" | "RETAIL" | "OTHER";
|
|
85
|
+
hasAfDrinks: boolean;
|
|
86
|
+
isAfVenue: boolean;
|
|
87
|
+
afHighlights: string[];
|
|
88
|
+
address?: Record<string, never>;
|
|
89
|
+
cityId?: Record<string, never>;
|
|
90
|
+
locationLat?: Record<string, never>;
|
|
91
|
+
locationLong?: Record<string, never>;
|
|
92
|
+
phone?: Record<string, never>;
|
|
93
|
+
email?: Record<string, never>;
|
|
94
|
+
website?: Record<string, never>;
|
|
95
|
+
instagram?: Record<string, never>;
|
|
96
|
+
profileImage?: Record<string, never>;
|
|
97
|
+
bannerImage?: Record<string, never>;
|
|
98
|
+
photos: string[];
|
|
99
|
+
openingHours?: Record<string, never>;
|
|
100
|
+
rating?: Record<string, never>;
|
|
101
|
+
reviewCount: number;
|
|
102
|
+
isActive: boolean;
|
|
103
|
+
isVerified: boolean;
|
|
104
|
+
isFeatured: boolean;
|
|
105
|
+
isFoundingPartner: boolean;
|
|
106
|
+
createdAt: string;
|
|
107
|
+
updatedAt: string;
|
|
108
|
+
}, Error, CreateVenueRequest, unknown>;
|
|
109
|
+
/**
|
|
110
|
+
* Delete a venue
|
|
111
|
+
*
|
|
112
|
+
* @example
|
|
113
|
+
* ```tsx
|
|
114
|
+
* const deleteVenue = useDeleteVenue({
|
|
115
|
+
* onSuccess: () => {
|
|
116
|
+
* toast.success('Venue deleted');
|
|
117
|
+
* router.push('/venues');
|
|
118
|
+
* },
|
|
119
|
+
* });
|
|
120
|
+
*
|
|
121
|
+
* const handleDelete = (venueId: string) => {
|
|
122
|
+
* deleteVenue.mutate(venueId);
|
|
123
|
+
* };
|
|
124
|
+
* ```
|
|
125
|
+
*/
|
|
126
|
+
export declare function useDeleteVenue(options?: Omit<UseMutationOptions<void, Error, string>, 'mutationFn'>): import("@tanstack/react-query").UseMutationResult<void, Error, string, unknown>;
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.useUpdateVenue = useUpdateVenue;
|
|
4
|
+
exports.useCreateVenue = useCreateVenue;
|
|
5
|
+
exports.useDeleteVenue = useDeleteVenue;
|
|
6
|
+
const react_query_1 = require("@tanstack/react-query");
|
|
7
|
+
const client_1 = require("../client");
|
|
8
|
+
const venues_1 = require("../queries/venues");
|
|
9
|
+
// ============================================================================
|
|
10
|
+
// VENUE MUTATION HOOKS
|
|
11
|
+
// ============================================================================
|
|
12
|
+
/**
|
|
13
|
+
* Update a venue
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```tsx
|
|
17
|
+
* const updateVenue = useUpdateVenue({
|
|
18
|
+
* onSuccess: () => toast.success('Venue updated'),
|
|
19
|
+
* });
|
|
20
|
+
*
|
|
21
|
+
* const handleSave = () => {
|
|
22
|
+
* updateVenue.mutate({
|
|
23
|
+
* id: venueId,
|
|
24
|
+
* data: { name: 'Updated Name', hasAfDrinks: true },
|
|
25
|
+
* });
|
|
26
|
+
* };
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
29
|
+
function useUpdateVenue(options) {
|
|
30
|
+
const queryClient = (0, react_query_1.useQueryClient)();
|
|
31
|
+
return (0, react_query_1.useMutation)({
|
|
32
|
+
mutationFn: async ({ id, data, }) => {
|
|
33
|
+
const client = (0, client_1.getApiClient)();
|
|
34
|
+
const response = await client.patch(`/api/v1/venues/${id}`, data);
|
|
35
|
+
return response.data?.data || response.data;
|
|
36
|
+
},
|
|
37
|
+
onSuccess: (_, variables) => {
|
|
38
|
+
queryClient.invalidateQueries({ queryKey: venues_1.venueKeys.detail(variables.id) });
|
|
39
|
+
queryClient.invalidateQueries({ queryKey: venues_1.venueKeys.lists() });
|
|
40
|
+
},
|
|
41
|
+
...options,
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Create a venue
|
|
46
|
+
*
|
|
47
|
+
* @example
|
|
48
|
+
* ```tsx
|
|
49
|
+
* const createVenue = useCreateVenue({
|
|
50
|
+
* onSuccess: (venue) => {
|
|
51
|
+
* toast.success('Venue created');
|
|
52
|
+
* router.push(`/venues/${venue.id}`);
|
|
53
|
+
* },
|
|
54
|
+
* });
|
|
55
|
+
*
|
|
56
|
+
* const handleCreate = () => {
|
|
57
|
+
* createVenue.mutate({
|
|
58
|
+
* name: 'My Venue',
|
|
59
|
+
* address: '123 Main St',
|
|
60
|
+
* hasAfDrinks: true,
|
|
61
|
+
* });
|
|
62
|
+
* };
|
|
63
|
+
* ```
|
|
64
|
+
*/
|
|
65
|
+
function useCreateVenue(options) {
|
|
66
|
+
const queryClient = (0, react_query_1.useQueryClient)();
|
|
67
|
+
return (0, react_query_1.useMutation)({
|
|
68
|
+
mutationFn: async (data) => {
|
|
69
|
+
const client = (0, client_1.getApiClient)();
|
|
70
|
+
const response = await client.post('/api/v1/venues', data);
|
|
71
|
+
return response.data?.data || response.data;
|
|
72
|
+
},
|
|
73
|
+
onSuccess: () => {
|
|
74
|
+
queryClient.invalidateQueries({ queryKey: venues_1.venueKeys.lists() });
|
|
75
|
+
},
|
|
76
|
+
...options,
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Delete a venue
|
|
81
|
+
*
|
|
82
|
+
* @example
|
|
83
|
+
* ```tsx
|
|
84
|
+
* const deleteVenue = useDeleteVenue({
|
|
85
|
+
* onSuccess: () => {
|
|
86
|
+
* toast.success('Venue deleted');
|
|
87
|
+
* router.push('/venues');
|
|
88
|
+
* },
|
|
89
|
+
* });
|
|
90
|
+
*
|
|
91
|
+
* const handleDelete = (venueId: string) => {
|
|
92
|
+
* deleteVenue.mutate(venueId);
|
|
93
|
+
* };
|
|
94
|
+
* ```
|
|
95
|
+
*/
|
|
96
|
+
function useDeleteVenue(options) {
|
|
97
|
+
const queryClient = (0, react_query_1.useQueryClient)();
|
|
98
|
+
return (0, react_query_1.useMutation)({
|
|
99
|
+
mutationFn: async (venueId) => {
|
|
100
|
+
const client = (0, client_1.getApiClient)();
|
|
101
|
+
await client.delete(`/api/v1/venues/${venueId}`);
|
|
102
|
+
},
|
|
103
|
+
onSuccess: (_, venueId) => {
|
|
104
|
+
queryClient.invalidateQueries({ queryKey: venues_1.venueKeys.detail(venueId) });
|
|
105
|
+
queryClient.invalidateQueries({ queryKey: venues_1.venueKeys.lists() });
|
|
106
|
+
},
|
|
107
|
+
...options,
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVudWVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwaS9tdXRhdGlvbnMvdmVudWVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBMEJBLHdDQTBCQztBQXVCRCx3Q0FnQkM7QUFtQkQsd0NBZ0JDO0FBOUhELHVEQUF3RjtBQUN4RixzQ0FBeUM7QUFDekMsOENBQThDO0FBRzlDLCtFQUErRTtBQUMvRSx1QkFBdUI7QUFDdkIsK0VBQStFO0FBRS9FOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBQ0gsU0FBZ0IsY0FBYyxDQUM1QixPQUdDO0lBRUQsTUFBTSxXQUFXLEdBQUcsSUFBQSw0QkFBYyxHQUFFLENBQUM7SUFFckMsT0FBTyxJQUFBLHlCQUFXLEVBQUM7UUFDakIsVUFBVSxFQUFFLEtBQUssRUFBRSxFQUNqQixFQUFFLEVBQ0YsSUFBSSxHQUlMLEVBQTBCLEVBQUU7WUFDM0IsTUFBTSxNQUFNLEdBQUcsSUFBQSxxQkFBWSxHQUFFLENBQUM7WUFDOUIsTUFBTSxRQUFRLEdBQUcsTUFBTSxNQUFNLENBQUMsS0FBSyxDQUFDLGtCQUFrQixFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNsRSxPQUFPLFFBQVEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUM7UUFDOUMsQ0FBQztRQUNELFNBQVMsRUFBRSxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsRUFBRTtZQUMxQixXQUFXLENBQUMsaUJBQWlCLENBQUMsRUFBRSxRQUFRLEVBQUUsa0JBQVMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUM1RSxXQUFXLENBQUMsaUJBQWlCLENBQUMsRUFBRSxRQUFRLEVBQUUsa0JBQVMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDakUsQ0FBQztRQUNELEdBQUcsT0FBTztLQUNYLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvQkc7QUFDSCxTQUFnQixjQUFjLENBQzVCLE9BQTBGO0lBRTFGLE1BQU0sV0FBVyxHQUFHLElBQUEsNEJBQWMsR0FBRSxDQUFDO0lBRXJDLE9BQU8sSUFBQSx5QkFBVyxFQUFDO1FBQ2pCLFVBQVUsRUFBRSxLQUFLLEVBQUUsSUFBd0IsRUFBMEIsRUFBRTtZQUNyRSxNQUFNLE1BQU0sR0FBRyxJQUFBLHFCQUFZLEdBQUUsQ0FBQztZQUM5QixNQUFNLFFBQVEsR0FBRyxNQUFNLE1BQU0sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDM0QsT0FBTyxRQUFRLENBQUMsSUFBSSxFQUFFLElBQUksSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDO1FBQzlDLENBQUM7UUFDRCxTQUFTLEVBQUUsR0FBRyxFQUFFO1lBQ2QsV0FBVyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsUUFBUSxFQUFFLGtCQUFTLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ2pFLENBQUM7UUFDRCxHQUFHLE9BQU87S0FDWCxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQkc7QUFDSCxTQUFnQixjQUFjLENBQzVCLE9BQXFFO0lBRXJFLE1BQU0sV0FBVyxHQUFHLElBQUEsNEJBQWMsR0FBRSxDQUFDO0lBRXJDLE9BQU8sSUFBQSx5QkFBVyxFQUFDO1FBQ2pCLFVBQVUsRUFBRSxLQUFLLEVBQUUsT0FBZSxFQUFpQixFQUFFO1lBQ25ELE1BQU0sTUFBTSxHQUFHLElBQUEscUJBQVksR0FBRSxDQUFDO1lBQzlCLE1BQU0sTUFBTSxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUNuRCxDQUFDO1FBQ0QsU0FBUyxFQUFFLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxFQUFFO1lBQ3hCLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLFFBQVEsRUFBRSxrQkFBUyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDdkUsV0FBVyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsUUFBUSxFQUFFLGtCQUFTLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ2pFLENBQUM7UUFDRCxHQUFHLE9BQU87S0FDWCxDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdXNlTXV0YXRpb24sIHVzZVF1ZXJ5Q2xpZW50LCBVc2VNdXRhdGlvbk9wdGlvbnMgfSBmcm9tICdAdGFuc3RhY2svcmVhY3QtcXVlcnknO1xuaW1wb3J0IHsgZ2V0QXBpQ2xpZW50IH0gZnJvbSAnLi4vY2xpZW50JztcbmltcG9ydCB7IHZlbnVlS2V5cyB9IGZyb20gJy4uL3F1ZXJpZXMvdmVudWVzJztcbmltcG9ydCB0eXBlIHsgVmVudWVSZXNwb25zZSwgQ3JlYXRlVmVudWVSZXF1ZXN0LCBVcGRhdGVWZW51ZVJlcXVlc3QgfSBmcm9tICcuLi90eXBlcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFZFTlVFIE1VVEFUSU9OIEhPT0tTXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogVXBkYXRlIGEgdmVudWVcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHN4XG4gKiBjb25zdCB1cGRhdGVWZW51ZSA9IHVzZVVwZGF0ZVZlbnVlKHtcbiAqICAgb25TdWNjZXNzOiAoKSA9PiB0b2FzdC5zdWNjZXNzKCdWZW51ZSB1cGRhdGVkJyksXG4gKiB9KTtcbiAqXG4gKiBjb25zdCBoYW5kbGVTYXZlID0gKCkgPT4ge1xuICogICB1cGRhdGVWZW51ZS5tdXRhdGUoe1xuICogICAgIGlkOiB2ZW51ZUlkLFxuICogICAgIGRhdGE6IHsgbmFtZTogJ1VwZGF0ZWQgTmFtZScsIGhhc0FmRHJpbmtzOiB0cnVlIH0sXG4gKiAgIH0pO1xuICogfTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlVXBkYXRlVmVudWUoXG4gIG9wdGlvbnM/OiBPbWl0PFxuICAgIFVzZU11dGF0aW9uT3B0aW9uczxWZW51ZVJlc3BvbnNlLCBFcnJvciwgeyBpZDogc3RyaW5nOyBkYXRhOiBVcGRhdGVWZW51ZVJlcXVlc3QgfT4sXG4gICAgJ211dGF0aW9uRm4nXG4gID5cbikge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IHVzZVF1ZXJ5Q2xpZW50KCk7XG5cbiAgcmV0dXJuIHVzZU11dGF0aW9uKHtcbiAgICBtdXRhdGlvbkZuOiBhc3luYyAoe1xuICAgICAgaWQsXG4gICAgICBkYXRhLFxuICAgIH06IHtcbiAgICAgIGlkOiBzdHJpbmc7XG4gICAgICBkYXRhOiBVcGRhdGVWZW51ZVJlcXVlc3Q7XG4gICAgfSk6IFByb21pc2U8VmVudWVSZXNwb25zZT4gPT4ge1xuICAgICAgY29uc3QgY2xpZW50ID0gZ2V0QXBpQ2xpZW50KCk7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5wYXRjaChgL2FwaS92MS92ZW51ZXMvJHtpZH1gLCBkYXRhKTtcbiAgICAgIHJldHVybiByZXNwb25zZS5kYXRhPy5kYXRhIHx8IHJlc3BvbnNlLmRhdGE7XG4gICAgfSxcbiAgICBvblN1Y2Nlc3M6IChfLCB2YXJpYWJsZXMpID0+IHtcbiAgICAgIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHsgcXVlcnlLZXk6IHZlbnVlS2V5cy5kZXRhaWwodmFyaWFibGVzLmlkKSB9KTtcbiAgICAgIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHsgcXVlcnlLZXk6IHZlbnVlS2V5cy5saXN0cygpIH0pO1xuICAgIH0sXG4gICAgLi4ub3B0aW9ucyxcbiAgfSk7XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgdmVudWVcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHN4XG4gKiBjb25zdCBjcmVhdGVWZW51ZSA9IHVzZUNyZWF0ZVZlbnVlKHtcbiAqICAgb25TdWNjZXNzOiAodmVudWUpID0+IHtcbiAqICAgICB0b2FzdC5zdWNjZXNzKCdWZW51ZSBjcmVhdGVkJyk7XG4gKiAgICAgcm91dGVyLnB1c2goYC92ZW51ZXMvJHt2ZW51ZS5pZH1gKTtcbiAqICAgfSxcbiAqIH0pO1xuICpcbiAqIGNvbnN0IGhhbmRsZUNyZWF0ZSA9ICgpID0+IHtcbiAqICAgY3JlYXRlVmVudWUubXV0YXRlKHtcbiAqICAgICBuYW1lOiAnTXkgVmVudWUnLFxuICogICAgIGFkZHJlc3M6ICcxMjMgTWFpbiBTdCcsXG4gKiAgICAgaGFzQWZEcmlua3M6IHRydWUsXG4gKiAgIH0pO1xuICogfTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlQ3JlYXRlVmVudWUoXG4gIG9wdGlvbnM/OiBPbWl0PFVzZU11dGF0aW9uT3B0aW9uczxWZW51ZVJlc3BvbnNlLCBFcnJvciwgQ3JlYXRlVmVudWVSZXF1ZXN0PiwgJ211dGF0aW9uRm4nPlxuKSB7XG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gdXNlUXVlcnlDbGllbnQoKTtcblxuICByZXR1cm4gdXNlTXV0YXRpb24oe1xuICAgIG11dGF0aW9uRm46IGFzeW5jIChkYXRhOiBDcmVhdGVWZW51ZVJlcXVlc3QpOiBQcm9taXNlPFZlbnVlUmVzcG9uc2U+ID0+IHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IGdldEFwaUNsaWVudCgpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQucG9zdCgnL2FwaS92MS92ZW51ZXMnLCBkYXRhKTtcbiAgICAgIHJldHVybiByZXNwb25zZS5kYXRhPy5kYXRhIHx8IHJlc3BvbnNlLmRhdGE7XG4gICAgfSxcbiAgICBvblN1Y2Nlc3M6ICgpID0+IHtcbiAgICAgIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHsgcXVlcnlLZXk6IHZlbnVlS2V5cy5saXN0cygpIH0pO1xuICAgIH0sXG4gICAgLi4ub3B0aW9ucyxcbiAgfSk7XG59XG5cbi8qKlxuICogRGVsZXRlIGEgdmVudWVcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHN4XG4gKiBjb25zdCBkZWxldGVWZW51ZSA9IHVzZURlbGV0ZVZlbnVlKHtcbiAqICAgb25TdWNjZXNzOiAoKSA9PiB7XG4gKiAgICAgdG9hc3Quc3VjY2VzcygnVmVudWUgZGVsZXRlZCcpO1xuICogICAgIHJvdXRlci5wdXNoKCcvdmVudWVzJyk7XG4gKiAgIH0sXG4gKiB9KTtcbiAqXG4gKiBjb25zdCBoYW5kbGVEZWxldGUgPSAodmVudWVJZDogc3RyaW5nKSA9PiB7XG4gKiAgIGRlbGV0ZVZlbnVlLm11dGF0ZSh2ZW51ZUlkKTtcbiAqIH07XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZURlbGV0ZVZlbnVlKFxuICBvcHRpb25zPzogT21pdDxVc2VNdXRhdGlvbk9wdGlvbnM8dm9pZCwgRXJyb3IsIHN0cmluZz4sICdtdXRhdGlvbkZuJz5cbikge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IHVzZVF1ZXJ5Q2xpZW50KCk7XG5cbiAgcmV0dXJuIHVzZU11dGF0aW9uKHtcbiAgICBtdXRhdGlvbkZuOiBhc3luYyAodmVudWVJZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRBcGlDbGllbnQoKTtcbiAgICAgIGF3YWl0IGNsaWVudC5kZWxldGUoYC9hcGkvdjEvdmVudWVzLyR7dmVudWVJZH1gKTtcbiAgICB9LFxuICAgIG9uU3VjY2VzczogKF8sIHZlbnVlSWQpID0+IHtcbiAgICAgIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHsgcXVlcnlLZXk6IHZlbnVlS2V5cy5kZXRhaWwodmVudWVJZCkgfSk7XG4gICAgICBxdWVyeUNsaWVudC5pbnZhbGlkYXRlUXVlcmllcyh7IHF1ZXJ5S2V5OiB2ZW51ZUtleXMubGlzdHMoKSB9KTtcbiAgICB9LFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pO1xufVxuIl19
|
package/package.json
CHANGED
|
@@ -226,3 +226,171 @@ export function useUpdatePartnerReward(
|
|
|
226
226
|
...options,
|
|
227
227
|
});
|
|
228
228
|
}
|
|
229
|
+
|
|
230
|
+
// ============================================================================
|
|
231
|
+
// VENUE REWARD MUTATIONS
|
|
232
|
+
// ============================================================================
|
|
233
|
+
|
|
234
|
+
interface UpdateRewardRequest {
|
|
235
|
+
isActive?: boolean;
|
|
236
|
+
title?: string;
|
|
237
|
+
description?: string;
|
|
238
|
+
code?: string;
|
|
239
|
+
redeemType?: 'IN_PERSON' | 'ONLINE' | 'BOTH';
|
|
240
|
+
maxRedemptions?: number;
|
|
241
|
+
perUserLimit?: number;
|
|
242
|
+
validFrom?: string;
|
|
243
|
+
validUntil?: string;
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
/**
|
|
247
|
+
* Update a venue reward
|
|
248
|
+
*
|
|
249
|
+
* @param venueId - Venue ID
|
|
250
|
+
*
|
|
251
|
+
* @example
|
|
252
|
+
* ```tsx
|
|
253
|
+
* const updateReward = useUpdateVenueReward('venue-123');
|
|
254
|
+
*
|
|
255
|
+
* const handleUpdate = async (rewardId: string) => {
|
|
256
|
+
* await updateReward.mutateAsync({
|
|
257
|
+
* id: rewardId,
|
|
258
|
+
* data: { isActive: false },
|
|
259
|
+
* });
|
|
260
|
+
* };
|
|
261
|
+
* ```
|
|
262
|
+
*/
|
|
263
|
+
export function useUpdateVenueReward(
|
|
264
|
+
venueId: string,
|
|
265
|
+
options?: Omit<
|
|
266
|
+
UseMutationOptions<unknown, Error, { id: string; data: UpdateRewardRequest }>,
|
|
267
|
+
'mutationFn'
|
|
268
|
+
>
|
|
269
|
+
) {
|
|
270
|
+
const queryClient = useQueryClient();
|
|
271
|
+
|
|
272
|
+
return useMutation({
|
|
273
|
+
mutationFn: async ({ id, data }: { id: string; data: UpdateRewardRequest }) => {
|
|
274
|
+
const client = getApiClient();
|
|
275
|
+
const response = await client.patch(`/api/v1/venues/${venueId}/rewards/${id}`, data);
|
|
276
|
+
return response.data?.data || response.data;
|
|
277
|
+
},
|
|
278
|
+
onSuccess: () => {
|
|
279
|
+
queryClient.invalidateQueries({ queryKey: rewardKeys.forVenue(venueId) });
|
|
280
|
+
queryClient.invalidateQueries({ queryKey: rewardKeys.available() });
|
|
281
|
+
},
|
|
282
|
+
...options,
|
|
283
|
+
});
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
/**
|
|
287
|
+
* Delete a venue reward
|
|
288
|
+
*
|
|
289
|
+
* @param venueId - Venue ID
|
|
290
|
+
*
|
|
291
|
+
* @example
|
|
292
|
+
* ```tsx
|
|
293
|
+
* const deleteReward = useDeleteVenueReward('venue-123');
|
|
294
|
+
*
|
|
295
|
+
* const handleDelete = async (rewardId: string) => {
|
|
296
|
+
* await deleteReward.mutateAsync(rewardId);
|
|
297
|
+
* };
|
|
298
|
+
* ```
|
|
299
|
+
*/
|
|
300
|
+
export function useDeleteVenueReward(
|
|
301
|
+
venueId: string,
|
|
302
|
+
options?: Omit<UseMutationOptions<unknown, Error, string>, 'mutationFn'>
|
|
303
|
+
) {
|
|
304
|
+
const queryClient = useQueryClient();
|
|
305
|
+
|
|
306
|
+
return useMutation({
|
|
307
|
+
mutationFn: async (rewardId: string) => {
|
|
308
|
+
const client = getApiClient();
|
|
309
|
+
const response = await client.delete(`/api/v1/venues/${venueId}/rewards/${rewardId}`);
|
|
310
|
+
return response.data?.data || response.data;
|
|
311
|
+
},
|
|
312
|
+
onSuccess: () => {
|
|
313
|
+
queryClient.invalidateQueries({ queryKey: rewardKeys.forVenue(venueId) });
|
|
314
|
+
queryClient.invalidateQueries({ queryKey: rewardKeys.available() });
|
|
315
|
+
},
|
|
316
|
+
...options,
|
|
317
|
+
});
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
// ============================================================================
|
|
321
|
+
// BRAND REWARD MUTATIONS
|
|
322
|
+
// ============================================================================
|
|
323
|
+
|
|
324
|
+
/**
|
|
325
|
+
* Update a brand reward
|
|
326
|
+
*
|
|
327
|
+
* @param brandId - Brand ID
|
|
328
|
+
*
|
|
329
|
+
* @example
|
|
330
|
+
* ```tsx
|
|
331
|
+
* const updateReward = useUpdateBrandReward('brand-123');
|
|
332
|
+
*
|
|
333
|
+
* const handleUpdate = async (rewardId: string) => {
|
|
334
|
+
* await updateReward.mutateAsync({
|
|
335
|
+
* id: rewardId,
|
|
336
|
+
* data: { isActive: false },
|
|
337
|
+
* });
|
|
338
|
+
* };
|
|
339
|
+
* ```
|
|
340
|
+
*/
|
|
341
|
+
export function useUpdateBrandReward(
|
|
342
|
+
brandId: string,
|
|
343
|
+
options?: Omit<
|
|
344
|
+
UseMutationOptions<unknown, Error, { id: string; data: UpdateRewardRequest }>,
|
|
345
|
+
'mutationFn'
|
|
346
|
+
>
|
|
347
|
+
) {
|
|
348
|
+
const queryClient = useQueryClient();
|
|
349
|
+
|
|
350
|
+
return useMutation({
|
|
351
|
+
mutationFn: async ({ id, data }: { id: string; data: UpdateRewardRequest }) => {
|
|
352
|
+
const client = getApiClient();
|
|
353
|
+
const response = await client.patch(`/api/v1/brands/${brandId}/rewards/${id}`, data);
|
|
354
|
+
return response.data?.data || response.data;
|
|
355
|
+
},
|
|
356
|
+
onSuccess: () => {
|
|
357
|
+
queryClient.invalidateQueries({ queryKey: rewardKeys.forBrand(brandId) });
|
|
358
|
+
queryClient.invalidateQueries({ queryKey: rewardKeys.available() });
|
|
359
|
+
},
|
|
360
|
+
...options,
|
|
361
|
+
});
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
/**
|
|
365
|
+
* Delete a brand reward
|
|
366
|
+
*
|
|
367
|
+
* @param brandId - Brand ID
|
|
368
|
+
*
|
|
369
|
+
* @example
|
|
370
|
+
* ```tsx
|
|
371
|
+
* const deleteReward = useDeleteBrandReward('brand-123');
|
|
372
|
+
*
|
|
373
|
+
* const handleDelete = async (rewardId: string) => {
|
|
374
|
+
* await deleteReward.mutateAsync(rewardId);
|
|
375
|
+
* };
|
|
376
|
+
* ```
|
|
377
|
+
*/
|
|
378
|
+
export function useDeleteBrandReward(
|
|
379
|
+
brandId: string,
|
|
380
|
+
options?: Omit<UseMutationOptions<unknown, Error, string>, 'mutationFn'>
|
|
381
|
+
) {
|
|
382
|
+
const queryClient = useQueryClient();
|
|
383
|
+
|
|
384
|
+
return useMutation({
|
|
385
|
+
mutationFn: async (rewardId: string) => {
|
|
386
|
+
const client = getApiClient();
|
|
387
|
+
const response = await client.delete(`/api/v1/brands/${brandId}/rewards/${rewardId}`);
|
|
388
|
+
return response.data?.data || response.data;
|
|
389
|
+
},
|
|
390
|
+
onSuccess: () => {
|
|
391
|
+
queryClient.invalidateQueries({ queryKey: rewardKeys.forBrand(brandId) });
|
|
392
|
+
queryClient.invalidateQueries({ queryKey: rewardKeys.available() });
|
|
393
|
+
},
|
|
394
|
+
...options,
|
|
395
|
+
});
|
|
396
|
+
}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import { useMutation, useQueryClient, UseMutationOptions } from '@tanstack/react-query';
|
|
2
|
+
import { getApiClient } from '../client';
|
|
3
|
+
import { venueKeys } from '../queries/venues';
|
|
4
|
+
import type { VenueResponse, CreateVenueRequest, UpdateVenueRequest } from '../types';
|
|
5
|
+
|
|
6
|
+
// ============================================================================
|
|
7
|
+
// VENUE MUTATION HOOKS
|
|
8
|
+
// ============================================================================
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Update a venue
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```tsx
|
|
15
|
+
* const updateVenue = useUpdateVenue({
|
|
16
|
+
* onSuccess: () => toast.success('Venue updated'),
|
|
17
|
+
* });
|
|
18
|
+
*
|
|
19
|
+
* const handleSave = () => {
|
|
20
|
+
* updateVenue.mutate({
|
|
21
|
+
* id: venueId,
|
|
22
|
+
* data: { name: 'Updated Name', hasAfDrinks: true },
|
|
23
|
+
* });
|
|
24
|
+
* };
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
export function useUpdateVenue(
|
|
28
|
+
options?: Omit<
|
|
29
|
+
UseMutationOptions<VenueResponse, Error, { id: string; data: UpdateVenueRequest }>,
|
|
30
|
+
'mutationFn'
|
|
31
|
+
>
|
|
32
|
+
) {
|
|
33
|
+
const queryClient = useQueryClient();
|
|
34
|
+
|
|
35
|
+
return useMutation({
|
|
36
|
+
mutationFn: async ({
|
|
37
|
+
id,
|
|
38
|
+
data,
|
|
39
|
+
}: {
|
|
40
|
+
id: string;
|
|
41
|
+
data: UpdateVenueRequest;
|
|
42
|
+
}): Promise<VenueResponse> => {
|
|
43
|
+
const client = getApiClient();
|
|
44
|
+
const response = await client.patch(`/api/v1/venues/${id}`, data);
|
|
45
|
+
return response.data?.data || response.data;
|
|
46
|
+
},
|
|
47
|
+
onSuccess: (_, variables) => {
|
|
48
|
+
queryClient.invalidateQueries({ queryKey: venueKeys.detail(variables.id) });
|
|
49
|
+
queryClient.invalidateQueries({ queryKey: venueKeys.lists() });
|
|
50
|
+
},
|
|
51
|
+
...options,
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Create a venue
|
|
57
|
+
*
|
|
58
|
+
* @example
|
|
59
|
+
* ```tsx
|
|
60
|
+
* const createVenue = useCreateVenue({
|
|
61
|
+
* onSuccess: (venue) => {
|
|
62
|
+
* toast.success('Venue created');
|
|
63
|
+
* router.push(`/venues/${venue.id}`);
|
|
64
|
+
* },
|
|
65
|
+
* });
|
|
66
|
+
*
|
|
67
|
+
* const handleCreate = () => {
|
|
68
|
+
* createVenue.mutate({
|
|
69
|
+
* name: 'My Venue',
|
|
70
|
+
* address: '123 Main St',
|
|
71
|
+
* hasAfDrinks: true,
|
|
72
|
+
* });
|
|
73
|
+
* };
|
|
74
|
+
* ```
|
|
75
|
+
*/
|
|
76
|
+
export function useCreateVenue(
|
|
77
|
+
options?: Omit<UseMutationOptions<VenueResponse, Error, CreateVenueRequest>, 'mutationFn'>
|
|
78
|
+
) {
|
|
79
|
+
const queryClient = useQueryClient();
|
|
80
|
+
|
|
81
|
+
return useMutation({
|
|
82
|
+
mutationFn: async (data: CreateVenueRequest): Promise<VenueResponse> => {
|
|
83
|
+
const client = getApiClient();
|
|
84
|
+
const response = await client.post('/api/v1/venues', data);
|
|
85
|
+
return response.data?.data || response.data;
|
|
86
|
+
},
|
|
87
|
+
onSuccess: () => {
|
|
88
|
+
queryClient.invalidateQueries({ queryKey: venueKeys.lists() });
|
|
89
|
+
},
|
|
90
|
+
...options,
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* Delete a venue
|
|
96
|
+
*
|
|
97
|
+
* @example
|
|
98
|
+
* ```tsx
|
|
99
|
+
* const deleteVenue = useDeleteVenue({
|
|
100
|
+
* onSuccess: () => {
|
|
101
|
+
* toast.success('Venue deleted');
|
|
102
|
+
* router.push('/venues');
|
|
103
|
+
* },
|
|
104
|
+
* });
|
|
105
|
+
*
|
|
106
|
+
* const handleDelete = (venueId: string) => {
|
|
107
|
+
* deleteVenue.mutate(venueId);
|
|
108
|
+
* };
|
|
109
|
+
* ```
|
|
110
|
+
*/
|
|
111
|
+
export function useDeleteVenue(
|
|
112
|
+
options?: Omit<UseMutationOptions<void, Error, string>, 'mutationFn'>
|
|
113
|
+
) {
|
|
114
|
+
const queryClient = useQueryClient();
|
|
115
|
+
|
|
116
|
+
return useMutation({
|
|
117
|
+
mutationFn: async (venueId: string): Promise<void> => {
|
|
118
|
+
const client = getApiClient();
|
|
119
|
+
await client.delete(`/api/v1/venues/${venueId}`);
|
|
120
|
+
},
|
|
121
|
+
onSuccess: (_, venueId) => {
|
|
122
|
+
queryClient.invalidateQueries({ queryKey: venueKeys.detail(venueId) });
|
|
123
|
+
queryClient.invalidateQueries({ queryKey: venueKeys.lists() });
|
|
124
|
+
},
|
|
125
|
+
...options,
|
|
126
|
+
});
|
|
127
|
+
}
|