@spotsdev/sdk 1.3.3 → 1.5.0
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/index.cjs +2139 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +1718 -0
- package/dist/index.d.ts +1717 -36
- package/dist/index.js +1996 -64
- package/dist/index.js.map +1 -0
- package/package.json +22 -6
- package/src/api/entities.ts +28 -84
- package/dist/api/client.d.ts +0 -12
- package/dist/api/client.js +0 -72
- package/dist/api/entities.d.ts +0 -326
- package/dist/api/entities.js +0 -9
- package/dist/api/mutations/clubs.d.ts +0 -47
- package/dist/api/mutations/clubs.js +0 -97
- package/dist/api/mutations/conversations.d.ts +0 -45
- package/dist/api/mutations/conversations.js +0 -114
- package/dist/api/mutations/index.d.ts +0 -14
- package/dist/api/mutations/index.js +0 -40
- package/dist/api/mutations/notifications.d.ts +0 -38
- package/dist/api/mutations/notifications.js +0 -64
- package/dist/api/mutations/orders.d.ts +0 -73
- package/dist/api/mutations/orders.js +0 -114
- package/dist/api/mutations/posts.d.ts +0 -123
- package/dist/api/mutations/posts.js +0 -242
- package/dist/api/mutations/products.d.ts +0 -81
- package/dist/api/mutations/products.js +0 -98
- package/dist/api/mutations/redemptions.d.ts +0 -33
- package/dist/api/mutations/redemptions.js +0 -63
- package/dist/api/mutations/spots.d.ts +0 -93
- package/dist/api/mutations/spots.js +0 -167
- package/dist/api/mutations/users.d.ts +0 -73
- package/dist/api/mutations/users.js +0 -175
- package/dist/api/queries/auth.d.ts +0 -37
- package/dist/api/queries/auth.js +0 -61
- package/dist/api/queries/clubs.d.ts +0 -52
- package/dist/api/queries/clubs.js +0 -116
- package/dist/api/queries/conversations.d.ts +0 -52
- package/dist/api/queries/conversations.js +0 -83
- package/dist/api/queries/index.d.ts +0 -28
- package/dist/api/queries/index.js +0 -69
- package/dist/api/queries/misc.d.ts +0 -30
- package/dist/api/queries/misc.js +0 -91
- package/dist/api/queries/notifications.d.ts +0 -34
- package/dist/api/queries/notifications.js +0 -62
- package/dist/api/queries/orders.d.ts +0 -45
- package/dist/api/queries/orders.js +0 -93
- package/dist/api/queries/posts.d.ts +0 -92
- package/dist/api/queries/posts.js +0 -233
- package/dist/api/queries/products.d.ts +0 -48
- package/dist/api/queries/products.js +0 -87
- package/dist/api/queries/spots.d.ts +0 -93
- package/dist/api/queries/spots.js +0 -250
- package/dist/api/queries/templates.d.ts +0 -39
- package/dist/api/queries/templates.js +0 -81
- package/dist/api/queries/users.d.ts +0 -104
- package/dist/api/queries/users.js +0 -235
- package/dist/api/queries/wallet.d.ts +0 -109
- package/dist/api/queries/wallet.js +0 -136
- package/dist/api/services/index.d.ts +0 -2
- package/dist/api/services/index.js +0 -8
- package/dist/api/services/marketplace.d.ts +0 -129
- package/dist/api/services/marketplace.js +0 -168
- package/dist/api/types.d.ts +0 -57
- package/dist/api/types.js +0 -33
|
@@ -1,233 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Posts Query Hooks
|
|
4
|
-
*
|
|
5
|
-
* TanStack Query hooks for post/board operations.
|
|
6
|
-
*/
|
|
7
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
-
exports.postKeys = void 0;
|
|
9
|
-
exports.useSpotPosts = useSpotPosts;
|
|
10
|
-
exports.usePost = usePost;
|
|
11
|
-
exports.usePostResponses = usePostResponses;
|
|
12
|
-
exports.usePosts = usePosts;
|
|
13
|
-
exports.usePostStatus = usePostStatus;
|
|
14
|
-
exports.usePostUpvotes = usePostUpvotes;
|
|
15
|
-
exports.usePostsFeed = usePostsFeed;
|
|
16
|
-
const react_query_1 = require("@tanstack/react-query");
|
|
17
|
-
const client_1 = require("../client");
|
|
18
|
-
// ============================================================================
|
|
19
|
-
// HELPER FUNCTIONS
|
|
20
|
-
// ============================================================================
|
|
21
|
-
/**
|
|
22
|
-
* Extract array data from API response
|
|
23
|
-
* API returns { success, data: { data: [...], meta: {...} } } or { success, data: [...] }
|
|
24
|
-
*/
|
|
25
|
-
function extractArrayData(data) {
|
|
26
|
-
// If already an array, return it
|
|
27
|
-
if (Array.isArray(data)) {
|
|
28
|
-
return data;
|
|
29
|
-
}
|
|
30
|
-
// If it's an object with nested data property, extract it
|
|
31
|
-
if (data && typeof data === 'object' && 'data' in data) {
|
|
32
|
-
const nested = data.data;
|
|
33
|
-
if (Array.isArray(nested)) {
|
|
34
|
-
return nested;
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
return [];
|
|
38
|
-
}
|
|
39
|
-
/**
|
|
40
|
-
* Extract single object data from API response
|
|
41
|
-
* API returns { success, data: { data: {...} } } or { success, data: {...} }
|
|
42
|
-
*/
|
|
43
|
-
function extractObjectData(data) {
|
|
44
|
-
// If it's an object with nested data property (not an array), extract it
|
|
45
|
-
if (data &&
|
|
46
|
-
typeof data === 'object' &&
|
|
47
|
-
'data' in data &&
|
|
48
|
-
!Array.isArray(data)) {
|
|
49
|
-
const nested = data.data;
|
|
50
|
-
// Check if nested also has a data property (double-wrapped)
|
|
51
|
-
if (nested &&
|
|
52
|
-
typeof nested === 'object' &&
|
|
53
|
-
'data' in nested &&
|
|
54
|
-
!Array.isArray(nested)) {
|
|
55
|
-
return nested.data;
|
|
56
|
-
}
|
|
57
|
-
return nested;
|
|
58
|
-
}
|
|
59
|
-
return data;
|
|
60
|
-
}
|
|
61
|
-
// ============================================================================
|
|
62
|
-
// QUERY KEYS
|
|
63
|
-
// ============================================================================
|
|
64
|
-
exports.postKeys = {
|
|
65
|
-
all: ['posts'],
|
|
66
|
-
lists: () => [...exports.postKeys.all, 'list'],
|
|
67
|
-
list: (filters) => [...exports.postKeys.lists(), filters],
|
|
68
|
-
bySpot: (spotId, filters) => [...exports.postKeys.all, 'spot', spotId, filters],
|
|
69
|
-
details: () => [...exports.postKeys.all, 'detail'],
|
|
70
|
-
detail: (id) => [...exports.postKeys.details(), id],
|
|
71
|
-
responses: (postId) => [...exports.postKeys.detail(postId), 'responses'],
|
|
72
|
-
status: (postId) => [...exports.postKeys.detail(postId), 'status'],
|
|
73
|
-
upvotes: (postId, filters) => [...exports.postKeys.detail(postId), 'upvotes', filters],
|
|
74
|
-
};
|
|
75
|
-
// ============================================================================
|
|
76
|
-
// QUERY HOOKS
|
|
77
|
-
// ============================================================================
|
|
78
|
-
/**
|
|
79
|
-
* Get posts for a spot
|
|
80
|
-
*
|
|
81
|
-
* @endpoint GET /spots/{spotId}/posts
|
|
82
|
-
*/
|
|
83
|
-
function useSpotPosts(spotId, params, options) {
|
|
84
|
-
return (0, react_query_1.useQuery)({
|
|
85
|
-
queryKey: exports.postKeys.bySpot(spotId, params),
|
|
86
|
-
queryFn: async () => {
|
|
87
|
-
const client = (0, client_1.getApiClient)();
|
|
88
|
-
const queryParams = new URLSearchParams();
|
|
89
|
-
if (params?.postType)
|
|
90
|
-
queryParams.set('postType', params.postType);
|
|
91
|
-
if (params?.status)
|
|
92
|
-
queryParams.set('status', params.status);
|
|
93
|
-
if (params?.page)
|
|
94
|
-
queryParams.set('page', String(params.page));
|
|
95
|
-
if (params?.limit)
|
|
96
|
-
queryParams.set('limit', String(params.limit));
|
|
97
|
-
const response = await client.get(`/spots/${spotId}/posts?${queryParams}`);
|
|
98
|
-
return extractArrayData(response.data.data);
|
|
99
|
-
},
|
|
100
|
-
enabled: !!spotId,
|
|
101
|
-
...options,
|
|
102
|
-
});
|
|
103
|
-
}
|
|
104
|
-
/**
|
|
105
|
-
* Get a single post by ID
|
|
106
|
-
*
|
|
107
|
-
* @endpoint GET /posts/{postId}
|
|
108
|
-
*/
|
|
109
|
-
function usePost(postId, options) {
|
|
110
|
-
return (0, react_query_1.useQuery)({
|
|
111
|
-
queryKey: exports.postKeys.detail(postId),
|
|
112
|
-
queryFn: async () => {
|
|
113
|
-
const client = (0, client_1.getApiClient)();
|
|
114
|
-
const response = await client.get(`/posts/${postId}`);
|
|
115
|
-
return extractObjectData(response.data.data);
|
|
116
|
-
},
|
|
117
|
-
enabled: !!postId,
|
|
118
|
-
...options,
|
|
119
|
-
});
|
|
120
|
-
}
|
|
121
|
-
/**
|
|
122
|
-
* Get responses for a post
|
|
123
|
-
*
|
|
124
|
-
* @endpoint GET /posts/{postId}/responses
|
|
125
|
-
*/
|
|
126
|
-
function usePostResponses(postId, options) {
|
|
127
|
-
return (0, react_query_1.useQuery)({
|
|
128
|
-
queryKey: exports.postKeys.responses(postId),
|
|
129
|
-
queryFn: async () => {
|
|
130
|
-
const client = (0, client_1.getApiClient)();
|
|
131
|
-
const response = await client.get(`/posts/${postId}/responses`);
|
|
132
|
-
return extractArrayData(response.data.data);
|
|
133
|
-
},
|
|
134
|
-
enabled: !!postId,
|
|
135
|
-
...options,
|
|
136
|
-
});
|
|
137
|
-
}
|
|
138
|
-
/**
|
|
139
|
-
* Get all posts (with filters)
|
|
140
|
-
*
|
|
141
|
-
* @endpoint GET /posts
|
|
142
|
-
*/
|
|
143
|
-
function usePosts(params, options) {
|
|
144
|
-
return (0, react_query_1.useQuery)({
|
|
145
|
-
queryKey: exports.postKeys.list(params),
|
|
146
|
-
queryFn: async () => {
|
|
147
|
-
const client = (0, client_1.getApiClient)();
|
|
148
|
-
const queryParams = new URLSearchParams();
|
|
149
|
-
if (params?.postType)
|
|
150
|
-
queryParams.set('postType', params.postType);
|
|
151
|
-
if (params?.limit)
|
|
152
|
-
queryParams.set('limit', String(params.limit));
|
|
153
|
-
const response = await client.get(`/posts?${queryParams}`);
|
|
154
|
-
return extractArrayData(response.data.data);
|
|
155
|
-
},
|
|
156
|
-
...options,
|
|
157
|
-
});
|
|
158
|
-
}
|
|
159
|
-
/**
|
|
160
|
-
* Get user's status for a post (read/hidden/pinned)
|
|
161
|
-
*
|
|
162
|
-
* @endpoint GET /posts/{postId}/status
|
|
163
|
-
*/
|
|
164
|
-
function usePostStatus(postId, options) {
|
|
165
|
-
return (0, react_query_1.useQuery)({
|
|
166
|
-
queryKey: exports.postKeys.status(postId),
|
|
167
|
-
queryFn: async () => {
|
|
168
|
-
const client = (0, client_1.getApiClient)();
|
|
169
|
-
const response = await client.get(`/posts/${postId}/status`);
|
|
170
|
-
return extractObjectData(response.data.data);
|
|
171
|
-
},
|
|
172
|
-
enabled: !!postId,
|
|
173
|
-
...options,
|
|
174
|
-
});
|
|
175
|
-
}
|
|
176
|
-
/**
|
|
177
|
-
* Get upvotes for a post (list of users who upvoted)
|
|
178
|
-
*
|
|
179
|
-
* @endpoint GET /posts/{postId}/upvotes
|
|
180
|
-
*/
|
|
181
|
-
function usePostUpvotes(postId, params, options) {
|
|
182
|
-
return (0, react_query_1.useQuery)({
|
|
183
|
-
queryKey: exports.postKeys.upvotes(postId, params),
|
|
184
|
-
queryFn: async () => {
|
|
185
|
-
const client = (0, client_1.getApiClient)();
|
|
186
|
-
const queryParams = new URLSearchParams();
|
|
187
|
-
if (params?.limit)
|
|
188
|
-
queryParams.set('limit', String(params.limit));
|
|
189
|
-
if (params?.offset)
|
|
190
|
-
queryParams.set('offset', String(params.offset));
|
|
191
|
-
const queryString = queryParams.toString();
|
|
192
|
-
const response = await client.get(`/posts/${postId}/upvotes${queryString ? `?${queryString}` : ''}`);
|
|
193
|
-
// Response structure: { success, data: { data: [...], meta: {...} } }
|
|
194
|
-
return response.data.data;
|
|
195
|
-
},
|
|
196
|
-
enabled: !!postId,
|
|
197
|
-
...options,
|
|
198
|
-
});
|
|
199
|
-
}
|
|
200
|
-
/**
|
|
201
|
-
* Get nearby posts feed
|
|
202
|
-
*
|
|
203
|
-
* @endpoint GET /posts/feed
|
|
204
|
-
*/
|
|
205
|
-
function usePostsFeed(params, options) {
|
|
206
|
-
return (0, react_query_1.useQuery)({
|
|
207
|
-
queryKey: [...exports.postKeys.lists(), 'feed', params],
|
|
208
|
-
queryFn: async () => {
|
|
209
|
-
const client = (0, client_1.getApiClient)();
|
|
210
|
-
const queryParams = new URLSearchParams();
|
|
211
|
-
queryParams.set('lat', String(params.lat));
|
|
212
|
-
queryParams.set('lng', String(params.lng));
|
|
213
|
-
if (params.radius)
|
|
214
|
-
queryParams.set('radius', String(params.radius));
|
|
215
|
-
if (params.postType)
|
|
216
|
-
queryParams.set('postType', params.postType);
|
|
217
|
-
if (params.cursor)
|
|
218
|
-
queryParams.set('cursor', params.cursor);
|
|
219
|
-
if (params.limit)
|
|
220
|
-
queryParams.set('limit', String(params.limit));
|
|
221
|
-
const response = await client.get(`/posts/feed?${queryParams}`);
|
|
222
|
-
const data = response.data.data;
|
|
223
|
-
return {
|
|
224
|
-
posts: data.posts ?? extractArrayData(data),
|
|
225
|
-
hasMore: data.hasMore ?? false,
|
|
226
|
-
nextCursor: data.nextCursor,
|
|
227
|
-
};
|
|
228
|
-
},
|
|
229
|
-
enabled: params.lat !== 0 && params.lng !== 0,
|
|
230
|
-
...options,
|
|
231
|
-
});
|
|
232
|
-
}
|
|
233
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9zdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBpL3F1ZXJpZXMvcG9zdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7O0dBSUc7OztBQWdHSCxvQ0FzQkM7QUFPRCwwQkFnQkM7QUFPRCw0Q0FnQkM7QUFPRCw0QkFrQkM7QUFPRCxzQ0FnQkM7QUFPRCx3Q0FzQkM7QUFPRCxvQ0E0Q0M7QUFsU0QsdURBSThCO0FBRTlCLHNDQUFzQztBQVN0QywrRUFBK0U7QUFDL0UsbUJBQW1CO0FBQ25CLCtFQUErRTtBQUUvRTs7O0dBR0c7QUFDSCxTQUFTLGdCQUFnQixDQUFJLElBQWE7SUFDeEMsaUNBQWlDO0lBQ2pDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ3hCLE9BQU8sSUFBSSxDQUFBO0lBQ2IsQ0FBQztJQUNELDBEQUEwRDtJQUMxRCxJQUFJLElBQUksSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLElBQUksTUFBTSxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ3ZELE1BQU0sTUFBTSxHQUFJLElBQXdCLENBQUMsSUFBSSxDQUFBO1FBQzdDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQzFCLE9BQU8sTUFBTSxDQUFBO1FBQ2YsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLEVBQUUsQ0FBQTtBQUNYLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFTLGlCQUFpQixDQUFJLElBQWE7SUFDekMseUVBQXlFO0lBQ3pFLElBQ0UsSUFBSTtRQUNKLE9BQU8sSUFBSSxLQUFLLFFBQVE7UUFDeEIsTUFBTSxJQUFJLElBQUk7UUFDZCxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQ3BCLENBQUM7UUFDRCxNQUFNLE1BQU0sR0FBSSxJQUF3QixDQUFDLElBQUksQ0FBQTtRQUM3Qyw0REFBNEQ7UUFDNUQsSUFDRSxNQUFN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Q0FFL0IsZUFBZSxXQUFXLEVBQUUsQ0FBQyxDQUFBO1lBRS9CLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFBO1lBQy9CLE9BQU87Z0JBQ0wsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLElBQUksZ0JBQWdCLENBQU8sSUFBSSxDQUFDO2dCQUNqRCxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sSUFBSSxLQUFLO2dCQUM5QixVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVU7YUFDNUIsQ0FBQTtRQUNILENBQUM7UUFDRCxPQUFPLEVBQUUsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDO1FBQzdDLEdBQUcsT0FBTztLQUNYLENBQUMsQ0FBQTtBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFBvc3RzIFF1ZXJ5IEhvb2tzXG4gKlxuICogVGFuU3RhY2sgUXVlcnkgaG9va3MgZm9yIHBvc3QvYm9hcmQgb3BlcmF0aW9ucy5cbiAqL1xuXG5pbXBvcnQge1xuICB1c2VRdWVyeSxcbiAgdHlwZSBVc2VRdWVyeU9wdGlvbnMsXG4gIHR5cGUgVXNlUXVlcnlSZXN1bHQsXG59IGZyb20gJ0B0YW5zdGFjay9yZWFjdC1xdWVyeSdcblxuaW1wb3J0IHtnZXRBcGlDbGllbnR9IGZyb20gJy4uL2NsaWVudCdcbmltcG9ydCB7XG4gIHR5cGUgQXBpUmVzcG9uc2UsXG4gIHR5cGUgUG9zdCxcbiAgdHlwZSBQb3N0UmVzcG9uc2UsXG4gIHR5cGUgUG9zdFN0YXR1c0R0byxcbiAgdHlwZSBQb3N0VXB2b3Rlc1Jlc3BvbnNlLFxufSBmcm9tICcuLi90eXBlcydcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gSEVMUEVSIEZVTkNUSU9OU1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIEV4dHJhY3QgYXJyYXkgZGF0YSBmcm9tIEFQSSByZXNwb25zZVxuICogQVBJIHJldHVybnMgeyBzdWNjZXNzLCBkYXRhOiB7IGRhdGE6IFsuLi5dLCBtZXRhOiB7Li4ufSB9IH0gb3IgeyBzdWNjZXNzLCBkYXRhOiBbLi4uXSB9XG4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RBcnJheURhdGE8VD4oZGF0YTogdW5rbm93bik6IFRbXSB7XG4gIC8vIElmIGFscmVhZHkgYW4gYXJyYXksIHJldHVybiBpdFxuICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSkge1xuICAgIHJldHVybiBkYXRhXG4gIH1cbiAgLy8gSWYgaXQncyBhbiBvYmplY3Qgd2l0aCBuZXN0ZWQgZGF0YSBwcm9wZXJ0eSwgZXh0cmFjdCBpdFxuICBpZiAoZGF0YSAmJiB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgJiYgJ2RhdGEnIGluIGRhdGEpIHtcbiAgICBjb25zdCBuZXN0ZWQgPSAoZGF0YSBhcyB7ZGF0YTogdW5rbm93bn0pLmRhdGFcbiAgICBpZiAoQXJyYXkuaXNBcnJheShuZXN0ZWQpKSB7XG4gICAgICByZXR1cm4gbmVzdGVkXG4gICAgfVxuICB9XG4gIHJldHVybiBbXVxufVxuXG4vKipcbiAqIEV4dHJhY3Qgc2luZ2xlIG9iamVjdCBkYXRhIGZyb20gQVBJIHJlc3BvbnNlXG4gKiBBUEkgcmV0dXJucyB7IHN1Y2Nlc3MsIGRhdGE6IHsgZGF0YTogey4uLn0gfSB9IG9yIHsgc3VjY2VzcywgZGF0YTogey4uLn0gfVxuICovXG5mdW5jdGlvbiBleHRyYWN0T2JqZWN0RGF0YTxUPihkYXRhOiB1bmtub3duKTogVCB7XG4gIC8vIElmIGl0J3MgYW4gb2JqZWN0IHdpdGggbmVzdGVkIGRhdGEgcHJvcGVydHkgKG5vdCBhbiBhcnJheSksIGV4dHJhY3QgaXRcbiAgaWYgKFxuICAgIGRhdGEgJiZcbiAgICB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgJiZcbiAgICAnZGF0YScgaW4gZGF0YSAmJlxuICAgICFBcnJheS5pc0FycmF5KGRhdGEpXG4gICkge1xuICAgIGNvbnN0IG5lc3RlZCA9IChkYXRhIGFzIHtkYXRhOiB1bmtub3dufSkuZGF0YVxuICAgIC8vIENoZWNrIGlmIG5lc3RlZCBhbHNvIGhhcyBhIGRhdGEgcHJvcGVydHkgKGRvdWJsZS13cmFwcGVkKVxuICAgIGlmIChcbiAgICAgIG5lc3RlZCAmJlxuICAgICAgdHlwZW9mIG5lc3RlZCA9PT0gJ29iamVjdCcgJiZcbiAgICAgICdkYXRhJyBpbiBuZXN0ZWQgJiZcbiAgICAgICFBcnJheS5pc0FycmF5KG5lc3RlZClcbiAgICApIHtcbiAgICAgIHJldHVybiAobmVzdGVkIGFzIHtkYXRhOiBUfSkuZGF0YVxuICAgIH1cbiAgICByZXR1cm4gbmVzdGVkIGFzIFRcbiAgfVxuICByZXR1cm4gZGF0YSBhcyBUXG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFFVRVJZIEtFWVNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IGNvbnN0IHBvc3RLZXlzID0ge1xuICBhbGw6IFsncG9zdHMnXSBhcyBjb25zdCxcbiAgbGlzdHM6ICgpID0+IFsuLi5wb3N0S2V5cy5hbGwsICdsaXN0J10gYXMgY29uc3QsXG4gIGxpc3Q6IChmaWx0ZXJzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pID0+XG4gICAgWy4uLnBvc3RLZXlzLmxpc3RzKCksIGZpbHRlcnNdIGFzIGNvbnN0LFxuICBieVNwb3Q6IChzcG90SWQ6IHN0cmluZywgZmlsdGVycz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PlxuICAgIFsuLi5wb3N0S2V5cy5hbGwsICdzcG90Jywgc3BvdElkLCBmaWx0ZXJzXSBhcyBjb25zdCxcbiAgZGV0YWlsczogKCkgPT4gWy4uLnBvc3RLZXlzLmFsbCwgJ2RldGFpbCddIGFzIGNvbnN0LFxuICBkZXRhaWw6IChpZDogc3RyaW5nKSA9PiBbLi4ucG9zdEtleXMuZGV0YWlscygpLCBpZF0gYXMgY29uc3QsXG4gIHJlc3BvbnNlczogKHBvc3RJZDogc3RyaW5nKSA9PlxuICAgIFsuLi5wb3N0S2V5cy5kZXRhaWwocG9zdElkKSwgJ3Jlc3BvbnNlcyddIGFzIGNvbnN0LFxuICBzdGF0dXM6IChwb3N0SWQ6IHN0cmluZykgPT4gWy4uLnBvc3RLZXlzLmRldGFpbChwb3N0SWQpLCAnc3RhdHVzJ10gYXMgY29uc3QsXG4gIHVwdm90ZXM6IChwb3N0SWQ6IHN0cmluZywgZmlsdGVycz86IHtsaW1pdD86IG51bWJlcjsgb2Zmc2V0PzogbnVtYmVyfSkgPT5cbiAgICBbLi4ucG9zdEtleXMuZGV0YWlsKHBvc3RJZCksICd1cHZvdGVzJywgZmlsdGVyc10gYXMgY29uc3QsXG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFFVRVJZIEhPT0tTXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogR2V0IHBvc3RzIGZvciBhIHNwb3RcbiAqXG4gKiBAZW5kcG9pbnQgR0VUIC9zcG90cy97c3BvdElkfS9wb3N0c1xuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlU3BvdFBvc3RzKFxuICBzcG90SWQ6IHN0cmluZyxcbiAgcGFyYW1zPzoge3Bvc3RUeXBlPzogc3RyaW5nOyBzdGF0dXM/OiBzdHJpbmc7IHBhZ2U/OiBudW1iZXI7IGxpbWl0PzogbnVtYmVyfSxcbiAgb3B0aW9ucz86IE9taXQ8VXNlUXVlcnlPcHRpb25zPFBvc3RbXT4sICdxdWVyeUtleScgfCAncXVlcnlGbic+LFxuKTogVXNlUXVlcnlSZXN1bHQ8UG9zdFtdPiB7XG4gIHJldHVybiB1c2VRdWVyeSh7XG4gICAgcXVlcnlLZXk6IHBvc3RLZXlzLmJ5U3BvdChzcG90SWQsIHBhcmFtcyksXG4gICAgcXVlcnlGbjogYXN5bmMgKCk6IFByb21pc2U8UG9zdFtdPiA9PiB7XG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRBcGlDbGllbnQoKVxuICAgICAgY29uc3QgcXVlcnlQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKClcbiAgICAgIGlmIChwYXJhbXM/LnBvc3RUeXBlKSBxdWVyeVBhcmFtcy5zZXQoJ3Bvc3RUeXBlJywgcGFyYW1zLnBvc3RUeXBlKVxuICAgICAgaWYgKHBhcmFtcz8uc3RhdHVzKSBxdWVyeVBhcmFtcy5zZXQoJ3N0YXR1cycsIHBhcmFtcy5zdGF0dXMpXG4gICAgICBpZiAocGFyYW1zPy5wYWdlKSBxdWVyeVBhcmFtcy5zZXQoJ3BhZ2UnLCBTdHJpbmcocGFyYW1zLnBhZ2UpKVxuICAgICAgaWYgKHBhcmFtcz8ubGltaXQpIHF1ZXJ5UGFyYW1zLnNldCgnbGltaXQnLCBTdHJpbmcocGFyYW1zLmxpbWl0KSlcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LmdldDxBcGlSZXNwb25zZTx1bmtub3duPj4oXG4gICAgICAgIGAvc3BvdHMvJHtzcG90SWR9L3Bvc3RzPyR7cXVlcnlQYXJhbXN9YCxcbiAgICAgIClcbiAgICAgIHJldHVybiBleHRyYWN0QXJyYXlEYXRhPFBvc3Q+KHJlc3BvbnNlLmRhdGEuZGF0YSlcbiAgICB9LFxuICAgIGVuYWJsZWQ6ICEhc3BvdElkLFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pXG59XG5cbi8qKlxuICogR2V0IGEgc2luZ2xlIHBvc3QgYnkgSURcbiAqXG4gKiBAZW5kcG9pbnQgR0VUIC9wb3N0cy97cG9zdElkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlUG9zdChcbiAgcG9zdElkOiBzdHJpbmcsXG4gIG9wdGlvbnM/OiBPbWl0PFVzZVF1ZXJ5T3B0aW9uczxQb3N0PiwgJ3F1ZXJ5S2V5JyB8ICdxdWVyeUZuJz4sXG4pOiBVc2VRdWVyeVJlc3VsdDxQb3N0PiB7XG4gIHJldHVybiB1c2VRdWVyeSh7XG4gICAgcXVlcnlLZXk6IHBvc3RLZXlzLmRldGFpbChwb3N0SWQpLFxuICAgIHF1ZXJ5Rm46IGFzeW5jICgpOiBQcm9taXNlPFBvc3Q+ID0+IHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IGdldEFwaUNsaWVudCgpXG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5nZXQ8QXBpUmVzcG9uc2U8dW5rbm93bj4+KFxuICAgICAgICBgL3Bvc3RzLyR7cG9zdElkfWAsXG4gICAgICApXG4gICAgICByZXR1cm4gZXh0cmFjdE9iamVjdERhdGE8UG9zdD4ocmVzcG9uc2UuZGF0YS5kYXRhKVxuICAgIH0sXG4gICAgZW5hYmxlZDogISFwb3N0SWQsXG4gICAgLi4ub3B0aW9ucyxcbiAgfSlcbn1cblxuLyoqXG4gKiBHZXQgcmVzcG9uc2VzIGZvciBhIHBvc3RcbiAqXG4gKiBAZW5kcG9pbnQgR0VUIC9wb3N0cy97cG9zdElkfS9yZXNwb25zZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVBvc3RSZXNwb25zZXMoXG4gIHBvc3RJZDogc3RyaW5nLFxuICBvcHRpb25zPzogT21pdDxVc2VRdWVyeU9wdGlvbnM8UG9zdFJlc3BvbnNlW10+LCAncXVlcnlLZXknIHwgJ3F1ZXJ5Rm4nPixcbik6IFVzZVF1ZXJ5UmVzdWx0PFBvc3RSZXNwb25zZVtdPiB7XG4gIHJldHVybiB1c2VRdWVyeSh7XG4gICAgcXVlcnlLZXk6IHBvc3RLZXlzLnJlc3BvbnNlcyhwb3N0SWQpLFxuICAgIHF1ZXJ5Rm46IGFzeW5jICgpOiBQcm9taXNlPFBvc3RSZXNwb25zZVtdPiA9PiB7XG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRBcGlDbGllbnQoKVxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuZ2V0PEFwaVJlc3BvbnNlPHVua25vd24+PihcbiAgICAgICAgYC9wb3N0cy8ke3Bvc3RJZH0vcmVzcG9uc2VzYCxcbiAgICAgIClcbiAgICAgIHJldHVybiBleHRyYWN0QXJyYXlEYXRhPFBvc3RSZXNwb25zZT4ocmVzcG9uc2UuZGF0YS5kYXRhKVxuICAgIH0sXG4gICAgZW5hYmxlZDogISFwb3N0SWQsXG4gICAgLi4ub3B0aW9ucyxcbiAgfSlcbn1cblxuLyoqXG4gKiBHZXQgYWxsIHBvc3RzICh3aXRoIGZpbHRlcnMpXG4gKlxuICogQGVuZHBvaW50IEdFVCAvcG9zdHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVBvc3RzKFxuICBwYXJhbXM/OiB7cG9zdFR5cGU/OiBzdHJpbmc7IGxpbWl0PzogbnVtYmVyfSxcbiAgb3B0aW9ucz86IE9taXQ8VXNlUXVlcnlPcHRpb25zPFBvc3RbXT4sICdxdWVyeUtleScgfCAncXVlcnlGbic+LFxuKTogVXNlUXVlcnlSZXN1bHQ8UG9zdFtdPiB7XG4gIHJldHVybiB1c2VRdWVyeSh7XG4gICAgcXVlcnlLZXk6IHBvc3RLZXlzLmxpc3QocGFyYW1zKSxcbiAgICBxdWVyeUZuOiBhc3luYyAoKTogUHJvbWlzZTxQb3N0W10+ID0+IHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IGdldEFwaUNsaWVudCgpXG4gICAgICBjb25zdCBxdWVyeVBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKVxuICAgICAgaWYgKHBhcmFtcz8ucG9zdFR5cGUpIHF1ZXJ5UGFyYW1zLnNldCgncG9zdFR5cGUnLCBwYXJhbXMucG9zdFR5cGUpXG4gICAgICBpZiAocGFyYW1zPy5saW1pdCkgcXVlcnlQYXJhbXMuc2V0KCdsaW1pdCcsIFN0cmluZyhwYXJhbXMubGltaXQpKVxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuZ2V0PEFwaVJlc3BvbnNlPHVua25vd24+PihcbiAgICAgICAgYC9wb3N0cz8ke3F1ZXJ5UGFyYW1zfWAsXG4gICAgICApXG4gICAgICByZXR1cm4gZXh0cmFjdEFycmF5RGF0YTxQb3N0PihyZXNwb25zZS5kYXRhLmRhdGEpXG4gICAgfSxcbiAgICAuLi5vcHRpb25zLFxuICB9KVxufVxuXG4vKipcbiAqIEdldCB1c2VyJ3Mgc3RhdHVzIGZvciBhIHBvc3QgKHJlYWQvaGlkZGVuL3Bpbm5lZClcbiAqXG4gKiBAZW5kcG9pbnQgR0VUIC9wb3N0cy97cG9zdElkfS9zdGF0dXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVBvc3RTdGF0dXMoXG4gIHBvc3RJZDogc3RyaW5nLFxuICBvcHRpb25zPzogT21pdDxVc2VRdWVyeU9wdGlvbnM8UG9zdFN0YXR1c0R0bz4sICdxdWVyeUtleScgfCAncXVlcnlGbic+LFxuKTogVXNlUXVlcnlSZXN1bHQ8UG9zdFN0YXR1c0R0bz4ge1xuICByZXR1cm4gdXNlUXVlcnkoe1xuICAgIHF1ZXJ5S2V5OiBwb3N0S2V5cy5zdGF0dXMocG9zdElkKSxcbiAgICBxdWVyeUZuOiBhc3luYyAoKTogUHJvbWlzZTxQb3N0U3RhdHVzRHRvPiA9PiB7XG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRBcGlDbGllbnQoKVxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuZ2V0PEFwaVJlc3BvbnNlPHVua25vd24+PihcbiAgICAgICAgYC9wb3N0cy8ke3Bvc3RJZH0vc3RhdHVzYCxcbiAgICAgIClcbiAgICAgIHJldHVybiBleHRyYWN0T2JqZWN0RGF0YTxQb3N0U3RhdHVzRHRvPihyZXNwb25zZS5kYXRhLmRhdGEpXG4gICAgfSxcbiAgICBlbmFibGVkOiAhIXBvc3RJZCxcbiAgICAuLi5vcHRpb25zLFxuICB9KVxufVxuXG4vKipcbiAqIEdldCB1cHZvdGVzIGZvciBhIHBvc3QgKGxpc3Qgb2YgdXNlcnMgd2hvIHVwdm90ZWQpXG4gKlxuICogQGVuZHBvaW50IEdFVCAvcG9zdHMve3Bvc3RJZH0vdXB2b3Rlc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlUG9zdFVwdm90ZXMoXG4gIHBvc3RJZDogc3RyaW5nLFxuICBwYXJhbXM/OiB7bGltaXQ/OiBudW1iZXI7IG9mZnNldD86IG51bWJlcn0sXG4gIG9wdGlvbnM/OiBPbWl0PFVzZVF1ZXJ5T3B0aW9uczxQb3N0VXB2b3Rlc1Jlc3BvbnNlPiwgJ3F1ZXJ5S2V5JyB8ICdxdWVyeUZuJz4sXG4pOiBVc2VRdWVyeVJlc3VsdDxQb3N0VXB2b3Rlc1Jlc3BvbnNlPiB7XG4gIHJldHVybiB1c2VRdWVyeSh7XG4gICAgcXVlcnlLZXk6IHBvc3RLZXlzLnVwdm90ZXMocG9zdElkLCBwYXJhbXMpLFxuICAgIHF1ZXJ5Rm46IGFzeW5jICgpOiBQcm9taXNlPFBvc3RVcHZvdGVzUmVzcG9uc2U+ID0+IHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IGdldEFwaUNsaWVudCgpXG4gICAgICBjb25zdCBxdWVyeVBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKVxuICAgICAgaWYgKHBhcmFtcz8ubGltaXQpIHF1ZXJ5UGFyYW1zLnNldCgnbGltaXQnLCBTdHJpbmcocGFyYW1zLmxpbWl0KSlcbiAgICAgIGlmIChwYXJhbXM/Lm9mZnNldCkgcXVlcnlQYXJhbXMuc2V0KCdvZmZzZXQnLCBTdHJpbmcocGFyYW1zLm9mZnNldCkpXG4gICAgICBjb25zdCBxdWVyeVN0cmluZyA9IHF1ZXJ5UGFyYW1zLnRvU3RyaW5nKClcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LmdldDxBcGlSZXNwb25zZTxQb3N0VXB2b3Rlc1Jlc3BvbnNlPj4oXG4gICAgICAgIGAvcG9zdHMvJHtwb3N0SWR9L3Vwdm90ZXMke3F1ZXJ5U3RyaW5nID8gYD8ke3F1ZXJ5U3RyaW5nfWAgOiAnJ31gLFxuICAgICAgKVxuICAgICAgLy8gUmVzcG9uc2Ugc3RydWN0dXJlOiB7IHN1Y2Nlc3MsIGRhdGE6IHsgZGF0YTogWy4uLl0sIG1ldGE6IHsuLi59IH0gfVxuICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGEuZGF0YVxuICAgIH0sXG4gICAgZW5hYmxlZDogISFwb3N0SWQsXG4gICAgLi4ub3B0aW9ucyxcbiAgfSlcbn1cblxuLyoqXG4gKiBHZXQgbmVhcmJ5IHBvc3RzIGZlZWRcbiAqXG4gKiBAZW5kcG9pbnQgR0VUIC9wb3N0cy9mZWVkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VQb3N0c0ZlZWQoXG4gIHBhcmFtczoge1xuICAgIGxhdDogbnVtYmVyXG4gICAgbG5nOiBudW1iZXJcbiAgICByYWRpdXM/OiBudW1iZXJcbiAgICBwb3N0VHlwZT86IHN0cmluZ1xuICAgIGN1cnNvcj86IHN0cmluZ1xuICAgIGxpbWl0PzogbnVtYmVyXG4gIH0sXG4gIG9wdGlvbnM/OiBPbWl0PFxuICAgIFVzZVF1ZXJ5T3B0aW9uczx7cG9zdHM6IFBvc3RbXTsgaGFzTW9yZTogYm9vbGVhbjsgbmV4dEN1cnNvcj86IHN0cmluZ30+LFxuICAgICdxdWVyeUtleScgfCAncXVlcnlGbidcbiAgPixcbik6IFVzZVF1ZXJ5UmVzdWx0PHtwb3N0czogUG9zdFtdOyBoYXNNb3JlOiBib29sZWFuOyBuZXh0Q3Vyc29yPzogc3RyaW5nfT4ge1xuICByZXR1cm4gdXNlUXVlcnkoe1xuICAgIHF1ZXJ5S2V5OiBbLi4ucG9zdEtleXMubGlzdHMoKSwgJ2ZlZWQnLCBwYXJhbXNdIGFzIGNvbnN0LFxuICAgIHF1ZXJ5Rm46IGFzeW5jICgpOiBQcm9taXNlPHtcbiAgICAgIHBvc3RzOiBQb3N0W11cbiAgICAgIGhhc01vcmU6IGJvb2xlYW5cbiAgICAgIG5leHRDdXJzb3I/OiBzdHJpbmdcbiAgICB9PiA9PiB7XG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRBcGlDbGllbnQoKVxuICAgICAgY29uc3QgcXVlcnlQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKClcbiAgICAgIHF1ZXJ5UGFyYW1zLnNldCgnbGF0JywgU3RyaW5nKHBhcmFtcy5sYXQpKVxuICAgICAgcXVlcnlQYXJhbXMuc2V0KCdsbmcnLCBTdHJpbmcocGFyYW1zLmxuZykpXG4gICAgICBpZiAocGFyYW1zLnJhZGl1cykgcXVlcnlQYXJhbXMuc2V0KCdyYWRpdXMnLCBTdHJpbmcocGFyYW1zLnJhZGl1cykpXG4gICAgICBpZiAocGFyYW1zLnBvc3RUeXBlKSBxdWVyeVBhcmFtcy5zZXQoJ3Bvc3RUeXBlJywgcGFyYW1zLnBvc3RUeXBlKVxuICAgICAgaWYgKHBhcmFtcy5jdXJzb3IpIHF1ZXJ5UGFyYW1zLnNldCgnY3Vyc29yJywgcGFyYW1zLmN1cnNvcilcbiAgICAgIGlmIChwYXJhbXMubGltaXQpIHF1ZXJ5UGFyYW1zLnNldCgnbGltaXQnLCBTdHJpbmcocGFyYW1zLmxpbWl0KSlcblxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuZ2V0PFxuICAgICAgICBBcGlSZXNwb25zZTx7cG9zdHM6IFBvc3RbXTsgaGFzTW9yZTogYm9vbGVhbjsgbmV4dEN1cnNvcj86IHN0cmluZ30+XG4gICAgICA+KGAvcG9zdHMvZmVlZD8ke3F1ZXJ5UGFyYW1zfWApXG5cbiAgICAgIGNvbnN0IGRhdGEgPSByZXNwb25zZS5kYXRhLmRhdGFcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHBvc3RzOiBkYXRhLnBvc3RzID8/IGV4dHJhY3RBcnJheURhdGE8UG9zdD4oZGF0YSksXG4gICAgICAgIGhhc01vcmU6IGRhdGEuaGFzTW9yZSA/PyBmYWxzZSxcbiAgICAgICAgbmV4dEN1cnNvcjogZGF0YS5uZXh0Q3Vyc29yLFxuICAgICAgfVxuICAgIH0sXG4gICAgZW5hYmxlZDogcGFyYW1zLmxhdCAhPT0gMCAmJiBwYXJhbXMubG5nICE9PSAwLFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pXG59XG4iXX0=
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Products Query Hooks
|
|
3
|
-
*
|
|
4
|
-
* TanStack Query hooks for product-related operations.
|
|
5
|
-
*/
|
|
6
|
-
import { type UseQueryOptions, type UseQueryResult } from '@tanstack/react-query';
|
|
7
|
-
import type { Product, PaginatedResponse, ProductType, ProductStatus, Spot } from '../types';
|
|
8
|
-
export declare const productKeys: {
|
|
9
|
-
all: readonly ["products"];
|
|
10
|
-
lists: () => readonly ["products", "list"];
|
|
11
|
-
list: (filters?: Record<string, unknown>) => readonly ["products", "list", Record<string, unknown> | undefined];
|
|
12
|
-
details: () => readonly ["products", "detail"];
|
|
13
|
-
detail: (id: string) => readonly ["products", "detail", string];
|
|
14
|
-
bySlug: (spotId: string, slug: string) => readonly ["products", "slug", string, string];
|
|
15
|
-
bySpot: (spotId: string) => readonly ["products", "spot", string];
|
|
16
|
-
};
|
|
17
|
-
export interface ProductFilters {
|
|
18
|
-
spotId?: string;
|
|
19
|
-
type?: ProductType;
|
|
20
|
-
status?: ProductStatus;
|
|
21
|
-
limit?: number;
|
|
22
|
-
page?: number;
|
|
23
|
-
}
|
|
24
|
-
export interface ProductWithSpot extends Product {
|
|
25
|
-
spot: Pick<Spot, 'id' | 'name' | 'slug'>;
|
|
26
|
-
}
|
|
27
|
-
/**
|
|
28
|
-
* Get products for a spot (public browse)
|
|
29
|
-
*
|
|
30
|
-
* @endpoint GET /spots/{spotId}/products
|
|
31
|
-
*/
|
|
32
|
-
export declare function useSpotProducts(spotId: string, params?: {
|
|
33
|
-
type?: ProductType;
|
|
34
|
-
limit?: number;
|
|
35
|
-
page?: number;
|
|
36
|
-
}, options?: Omit<UseQueryOptions<PaginatedResponse<Product>>, 'queryKey' | 'queryFn'>): UseQueryResult<PaginatedResponse<Product>>;
|
|
37
|
-
/**
|
|
38
|
-
* Get a product by ID
|
|
39
|
-
*
|
|
40
|
-
* @endpoint GET /products/{productId}
|
|
41
|
-
*/
|
|
42
|
-
export declare function useProduct(productId: string, options?: Omit<UseQueryOptions<ProductWithSpot>, 'queryKey' | 'queryFn'>): UseQueryResult<ProductWithSpot>;
|
|
43
|
-
/**
|
|
44
|
-
* Get a product by slug (within a spot)
|
|
45
|
-
*
|
|
46
|
-
* @endpoint GET /spots/{spotId}/products/slug/{slug}
|
|
47
|
-
*/
|
|
48
|
-
export declare function useProductBySlug(spotId: string, slug: string, options?: Omit<UseQueryOptions<ProductWithSpot>, 'queryKey' | 'queryFn'>): UseQueryResult<ProductWithSpot>;
|
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Products Query Hooks
|
|
4
|
-
*
|
|
5
|
-
* TanStack Query hooks for product-related operations.
|
|
6
|
-
*/
|
|
7
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
-
exports.productKeys = void 0;
|
|
9
|
-
exports.useSpotProducts = useSpotProducts;
|
|
10
|
-
exports.useProduct = useProduct;
|
|
11
|
-
exports.useProductBySlug = useProductBySlug;
|
|
12
|
-
const react_query_1 = require("@tanstack/react-query");
|
|
13
|
-
const client_1 = require("../client");
|
|
14
|
-
// ============================================================================
|
|
15
|
-
// QUERY KEYS
|
|
16
|
-
// ============================================================================
|
|
17
|
-
exports.productKeys = {
|
|
18
|
-
all: ['products'],
|
|
19
|
-
lists: () => [...exports.productKeys.all, 'list'],
|
|
20
|
-
list: (filters) => [...exports.productKeys.lists(), filters],
|
|
21
|
-
details: () => [...exports.productKeys.all, 'detail'],
|
|
22
|
-
detail: (id) => [...exports.productKeys.details(), id],
|
|
23
|
-
bySlug: (spotId, slug) => [...exports.productKeys.all, 'slug', spotId, slug],
|
|
24
|
-
bySpot: (spotId) => [...exports.productKeys.all, 'spot', spotId],
|
|
25
|
-
};
|
|
26
|
-
// ============================================================================
|
|
27
|
-
// QUERY HOOKS
|
|
28
|
-
// ============================================================================
|
|
29
|
-
/**
|
|
30
|
-
* Get products for a spot (public browse)
|
|
31
|
-
*
|
|
32
|
-
* @endpoint GET /spots/{spotId}/products
|
|
33
|
-
*/
|
|
34
|
-
function useSpotProducts(spotId, params, options) {
|
|
35
|
-
return (0, react_query_1.useQuery)({
|
|
36
|
-
queryKey: exports.productKeys.bySpot(spotId),
|
|
37
|
-
queryFn: async () => {
|
|
38
|
-
const client = (0, client_1.getApiClient)();
|
|
39
|
-
const queryParams = new URLSearchParams();
|
|
40
|
-
if (params?.limit)
|
|
41
|
-
queryParams.set('limit', String(params.limit));
|
|
42
|
-
if (params?.page)
|
|
43
|
-
queryParams.set('page', String(params.page));
|
|
44
|
-
if (params?.type)
|
|
45
|
-
queryParams.set('type', params.type);
|
|
46
|
-
const response = await client.get(`/spots/${spotId}/products?${queryParams}`);
|
|
47
|
-
return response.data.data;
|
|
48
|
-
},
|
|
49
|
-
enabled: !!spotId,
|
|
50
|
-
...options,
|
|
51
|
-
});
|
|
52
|
-
}
|
|
53
|
-
/**
|
|
54
|
-
* Get a product by ID
|
|
55
|
-
*
|
|
56
|
-
* @endpoint GET /products/{productId}
|
|
57
|
-
*/
|
|
58
|
-
function useProduct(productId, options) {
|
|
59
|
-
return (0, react_query_1.useQuery)({
|
|
60
|
-
queryKey: exports.productKeys.detail(productId),
|
|
61
|
-
queryFn: async () => {
|
|
62
|
-
const client = (0, client_1.getApiClient)();
|
|
63
|
-
const response = await client.get(`/products/${productId}`);
|
|
64
|
-
return response.data.data;
|
|
65
|
-
},
|
|
66
|
-
enabled: !!productId,
|
|
67
|
-
...options,
|
|
68
|
-
});
|
|
69
|
-
}
|
|
70
|
-
/**
|
|
71
|
-
* Get a product by slug (within a spot)
|
|
72
|
-
*
|
|
73
|
-
* @endpoint GET /spots/{spotId}/products/slug/{slug}
|
|
74
|
-
*/
|
|
75
|
-
function useProductBySlug(spotId, slug, options) {
|
|
76
|
-
return (0, react_query_1.useQuery)({
|
|
77
|
-
queryKey: exports.productKeys.bySlug(spotId, slug),
|
|
78
|
-
queryFn: async () => {
|
|
79
|
-
const client = (0, client_1.getApiClient)();
|
|
80
|
-
const response = await client.get(`/spots/${spotId}/products/slug/${slug}`);
|
|
81
|
-
return response.data.data;
|
|
82
|
-
},
|
|
83
|
-
enabled: !!spotId && !!slug,
|
|
84
|
-
...options,
|
|
85
|
-
});
|
|
86
|
-
}
|
|
87
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBpL3F1ZXJpZXMvcHJvZHVjdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7O0dBSUc7OztBQXNESCwwQ0F3QkM7QUFPRCxnQ0FnQkM7QUFPRCw0Q0FpQkM7QUEzSEQsdURBQXlGO0FBQ3pGLHNDQUFzQztBQVV0QywrRUFBK0U7QUFDL0UsYUFBYTtBQUNiLCtFQUErRTtBQUVsRSxRQUFBLFdBQVcsR0FBRztJQUN6QixHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQVU7SUFDMUIsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRyxtQkFBVyxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQVU7SUFDbEQsSUFBSSxFQUFFLENBQUMsT0FBaUMsRUFBRSxFQUFFLENBQzFDLENBQUMsR0FBRyxtQkFBVyxDQUFDLEtBQUssRUFBRSxFQUFFLE9BQU8sQ0FBVTtJQUM1QyxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLG1CQUFXLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBVTtJQUN0RCxNQUFNLEVBQUUsQ0FBQyxFQUFVLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxtQkFBVyxDQUFDLE9BQU8sRUFBRSxFQUFFLEVBQUUsQ0FBVTtJQUMvRCxNQUFNLEVBQUUsQ0FBQyxNQUFjLEVBQUUsSUFBWSxFQUFFLEVBQUUsQ0FDdkMsQ0FBQyxHQUFHLG1CQUFXLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFVO0lBQ3JELE1BQU0sRUFBRSxDQUFDLE1BQWMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLG1CQUFXLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQVU7Q0FDMUUsQ0FBQTtBQWtCRCwrRUFBK0U7QUFDL0UsY0FBYztBQUNkLCtFQUErRTtBQUUvRTs7OztHQUlHO0FBQ0gsU0FBZ0IsZUFBZSxDQUM3QixNQUFjLEVBQ2QsTUFBNEQsRUFDNUQsT0FHQztJQUVELE9BQU8sSUFBQSxzQkFBUSxFQUFDO1FBQ2QsUUFBUSxFQUFFLG1CQUFXLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUNwQyxPQUFPLEVBQUUsS0FBSyxJQUF5QyxFQUFFO1lBQ3ZELE1BQU0sTUFBTSxHQUFHLElBQUEscUJBQVksR0FBRSxDQUFBO1lBQzdCLE1BQU0sV0FBVyxHQUFHLElBQUksZUFBZSxFQUFFLENBQUE7WUFDekMsSUFBSSxNQUFNLEVBQUUsS0FBSztnQkFBRSxXQUFXLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUE7WUFDakUsSUFBSSxNQUFNLEVBQUUsSUFBSTtnQkFBRSxXQUFXLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7WUFDOUQsSUFBSSxNQUFNLEVBQUUsSUFBSTtnQkFBRSxXQUFXLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUE7WUFDdEQsTUFBTSxRQUFRLEdBQUcsTUFBTSxNQUFNLENBQUMsR0FBRyxDQUMvQixVQUFVLE1BQU0sYUFBYSxXQUFXLEVBQUUsQ0FDM0MsQ0FBQTtZQUNELE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUE7UUFDM0IsQ0FBQztRQUNELE9BQU8sRUFBRSxDQUFDLENBQUMsTUFBTTtRQUNqQixHQUFHLE9BQU87S0FDWCxDQUFDLENBQUE7QUFDSixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQWdCLFVBQVUsQ0FDeEIsU0FBaUIsRUFDakIsT0FBd0U7SUFFeEUsT0FBTyxJQUFBLHNCQUFRLEVBQUM7UUFDZCxRQUFRLEVBQUUsbUJBQVcsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDO1FBQ3ZDLE9BQU8sRUFBRSxLQUFLLElBQThCLEVBQUU7WUFDNUMsTUFBTSxNQUFNLEdBQUcsSUFBQSxxQkFBWSxHQUFFLENBQUE7WUFDN0IsTUFBTSxRQUFRLEdBQUcsTUFBTSxNQUFNLENBQUMsR0FBRyxDQUMvQixhQUFhLFNBQVMsRUFBRSxDQUN6QixDQUFBO1lBQ0QsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQTtRQUMzQixDQUFDO1FBQ0QsT0FBTyxFQUFFLENBQUMsQ0FBQyxTQUFTO1FBQ3BCLEdBQUcsT0FBTztLQUNYLENBQUMsQ0FBQTtBQUNKLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBZ0IsZ0JBQWdCLENBQzlCLE1BQWMsRUFDZCxJQUFZLEVBQ1osT0FBd0U7SUFFeEUsT0FBTyxJQUFBLHNCQUFRLEVBQUM7UUFDZCxRQUFRLEVBQUUsbUJBQVcsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQztRQUMxQyxPQUFPLEVBQUUsS0FBSyxJQUE4QixFQUFFO1lBQzVDLE1BQU0sTUFBTSxHQUFHLElBQUEscUJBQVksR0FBRSxDQUFBO1lBQzdCLE1BQU0sUUFBUSxHQUFHLE1BQU0sTUFBTSxDQUFDLEdBQUcsQ0FDL0IsVUFBVSxNQUFNLGtCQUFrQixJQUFJLEVBQUUsQ0FDekMsQ0FBQTtZQUNELE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUE7UUFDM0IsQ0FBQztRQUNELE9BQU8sRUFBRSxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxJQUFJO1FBQzNCLEdBQUcsT0FBTztLQUNYLENBQUMsQ0FBQTtBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFByb2R1Y3RzIFF1ZXJ5IEhvb2tzXG4gKlxuICogVGFuU3RhY2sgUXVlcnkgaG9va3MgZm9yIHByb2R1Y3QtcmVsYXRlZCBvcGVyYXRpb25zLlxuICovXG5cbmltcG9ydCB7dXNlUXVlcnksIHR5cGUgVXNlUXVlcnlPcHRpb25zLCB0eXBlIFVzZVF1ZXJ5UmVzdWx0fSBmcm9tICdAdGFuc3RhY2svcmVhY3QtcXVlcnknXG5pbXBvcnQge2dldEFwaUNsaWVudH0gZnJvbSAnLi4vY2xpZW50J1xuaW1wb3J0IHR5cGUge1xuICBQcm9kdWN0LFxuICBBcGlSZXNwb25zZSxcbiAgUGFnaW5hdGVkUmVzcG9uc2UsXG4gIFByb2R1Y3RUeXBlLFxuICBQcm9kdWN0U3RhdHVzLFxuICBTcG90LFxufSBmcm9tICcuLi90eXBlcydcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gUVVFUlkgS0VZU1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnQgY29uc3QgcHJvZHVjdEtleXMgPSB7XG4gIGFsbDogWydwcm9kdWN0cyddIGFzIGNvbnN0LFxuICBsaXN0czogKCkgPT4gWy4uLnByb2R1Y3RLZXlzLmFsbCwgJ2xpc3QnXSBhcyBjb25zdCxcbiAgbGlzdDogKGZpbHRlcnM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgPT5cbiAgICBbLi4ucHJvZHVjdEtleXMubGlzdHMoKSwgZmlsdGVyc10gYXMgY29uc3QsXG4gIGRldGFpbHM6ICgpID0+IFsuLi5wcm9kdWN0S2V5cy5hbGwsICdkZXRhaWwnXSBhcyBjb25zdCxcbiAgZGV0YWlsOiAoaWQ6IHN0cmluZykgPT4gWy4uLnByb2R1Y3RLZXlzLmRldGFpbHMoKSwgaWRdIGFzIGNvbnN0LFxuICBieVNsdWc6IChzcG90SWQ6IHN0cmluZywgc2x1Zzogc3RyaW5nKSA9PlxuICAgIFsuLi5wcm9kdWN0S2V5cy5hbGwsICdzbHVnJywgc3BvdElkLCBzbHVnXSBhcyBjb25zdCxcbiAgYnlTcG90OiAoc3BvdElkOiBzdHJpbmcpID0+IFsuLi5wcm9kdWN0S2V5cy5hbGwsICdzcG90Jywgc3BvdElkXSBhcyBjb25zdCxcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gVFlQRVNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IGludGVyZmFjZSBQcm9kdWN0RmlsdGVycyB7XG4gIHNwb3RJZD86IHN0cmluZ1xuICB0eXBlPzogUHJvZHVjdFR5cGVcbiAgc3RhdHVzPzogUHJvZHVjdFN0YXR1c1xuICBsaW1pdD86IG51bWJlclxuICBwYWdlPzogbnVtYmVyXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJvZHVjdFdpdGhTcG90IGV4dGVuZHMgUHJvZHVjdCB7XG4gIHNwb3Q6IFBpY2s8U3BvdCwgJ2lkJyB8ICduYW1lJyB8ICdzbHVnJz5cbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gUVVFUlkgSE9PS1Ncbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBHZXQgcHJvZHVjdHMgZm9yIGEgc3BvdCAocHVibGljIGJyb3dzZSlcbiAqXG4gKiBAZW5kcG9pbnQgR0VUIC9zcG90cy97c3BvdElkfS9wcm9kdWN0c1xuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlU3BvdFByb2R1Y3RzKFxuICBzcG90SWQ6IHN0cmluZyxcbiAgcGFyYW1zPzoge3R5cGU/OiBQcm9kdWN0VHlwZTsgbGltaXQ/OiBudW1iZXI7IHBhZ2U/OiBudW1iZXJ9LFxuICBvcHRpb25zPzogT21pdDxcbiAgICBVc2VRdWVyeU9wdGlvbnM8UGFnaW5hdGVkUmVzcG9uc2U8UHJvZHVjdD4+LFxuICAgICdxdWVyeUtleScgfCAncXVlcnlGbidcbiAgPixcbik6IFVzZVF1ZXJ5UmVzdWx0PFBhZ2luYXRlZFJlc3BvbnNlPFByb2R1Y3Q+PiB7XG4gIHJldHVybiB1c2VRdWVyeSh7XG4gICAgcXVlcnlLZXk6IHByb2R1Y3RLZXlzLmJ5U3BvdChzcG90SWQpLFxuICAgIHF1ZXJ5Rm46IGFzeW5jICgpOiBQcm9taXNlPFBhZ2luYXRlZFJlc3BvbnNlPFByb2R1Y3Q+PiA9PiB7XG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRBcGlDbGllbnQoKVxuICAgICAgY29uc3QgcXVlcnlQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKClcbiAgICAgIGlmIChwYXJhbXM/LmxpbWl0KSBxdWVyeVBhcmFtcy5zZXQoJ2xpbWl0JywgU3RyaW5nKHBhcmFtcy5saW1pdCkpXG4gICAgICBpZiAocGFyYW1zPy5wYWdlKSBxdWVyeVBhcmFtcy5zZXQoJ3BhZ2UnLCBTdHJpbmcocGFyYW1zLnBhZ2UpKVxuICAgICAgaWYgKHBhcmFtcz8udHlwZSkgcXVlcnlQYXJhbXMuc2V0KCd0eXBlJywgcGFyYW1zLnR5cGUpXG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5nZXQ8QXBpUmVzcG9uc2U8UGFnaW5hdGVkUmVzcG9uc2U8UHJvZHVjdD4+PihcbiAgICAgICAgYC9zcG90cy8ke3Nwb3RJZH0vcHJvZHVjdHM/JHtxdWVyeVBhcmFtc31gLFxuICAgICAgKVxuICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGEuZGF0YVxuICAgIH0sXG4gICAgZW5hYmxlZDogISFzcG90SWQsXG4gICAgLi4ub3B0aW9ucyxcbiAgfSlcbn1cblxuLyoqXG4gKiBHZXQgYSBwcm9kdWN0IGJ5IElEXG4gKlxuICogQGVuZHBvaW50IEdFVCAvcHJvZHVjdHMve3Byb2R1Y3RJZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVByb2R1Y3QoXG4gIHByb2R1Y3RJZDogc3RyaW5nLFxuICBvcHRpb25zPzogT21pdDxVc2VRdWVyeU9wdGlvbnM8UHJvZHVjdFdpdGhTcG90PiwgJ3F1ZXJ5S2V5JyB8ICdxdWVyeUZuJz4sXG4pOiBVc2VRdWVyeVJlc3VsdDxQcm9kdWN0V2l0aFNwb3Q+IHtcbiAgcmV0dXJuIHVzZVF1ZXJ5KHtcbiAgICBxdWVyeUtleTogcHJvZHVjdEtleXMuZGV0YWlsKHByb2R1Y3RJZCksXG4gICAgcXVlcnlGbjogYXN5bmMgKCk6IFByb21pc2U8UHJvZHVjdFdpdGhTcG90PiA9PiB7XG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRBcGlDbGllbnQoKVxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuZ2V0PEFwaVJlc3BvbnNlPFByb2R1Y3RXaXRoU3BvdD4+KFxuICAgICAgICBgL3Byb2R1Y3RzLyR7cHJvZHVjdElkfWAsXG4gICAgICApXG4gICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YS5kYXRhXG4gICAgfSxcbiAgICBlbmFibGVkOiAhIXByb2R1Y3RJZCxcbiAgICAuLi5vcHRpb25zLFxuICB9KVxufVxuXG4vKipcbiAqIEdldCBhIHByb2R1Y3QgYnkgc2x1ZyAod2l0aGluIGEgc3BvdClcbiAqXG4gKiBAZW5kcG9pbnQgR0VUIC9zcG90cy97c3BvdElkfS9wcm9kdWN0cy9zbHVnL3tzbHVnfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlUHJvZHVjdEJ5U2x1ZyhcbiAgc3BvdElkOiBzdHJpbmcsXG4gIHNsdWc6IHN0cmluZyxcbiAgb3B0aW9ucz86IE9taXQ8VXNlUXVlcnlPcHRpb25zPFByb2R1Y3RXaXRoU3BvdD4sICdxdWVyeUtleScgfCAncXVlcnlGbic+LFxuKTogVXNlUXVlcnlSZXN1bHQ8UHJvZHVjdFdpdGhTcG90PiB7XG4gIHJldHVybiB1c2VRdWVyeSh7XG4gICAgcXVlcnlLZXk6IHByb2R1Y3RLZXlzLmJ5U2x1ZyhzcG90SWQsIHNsdWcpLFxuICAgIHF1ZXJ5Rm46IGFzeW5jICgpOiBQcm9taXNlPFByb2R1Y3RXaXRoU3BvdD4gPT4ge1xuICAgICAgY29uc3QgY2xpZW50ID0gZ2V0QXBpQ2xpZW50KClcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LmdldDxBcGlSZXNwb25zZTxQcm9kdWN0V2l0aFNwb3Q+PihcbiAgICAgICAgYC9zcG90cy8ke3Nwb3RJZH0vcHJvZHVjdHMvc2x1Zy8ke3NsdWd9YCxcbiAgICAgIClcbiAgICAgIHJldHVybiByZXNwb25zZS5kYXRhLmRhdGFcbiAgICB9LFxuICAgIGVuYWJsZWQ6ICEhc3BvdElkICYmICEhc2x1ZyxcbiAgICAuLi5vcHRpb25zLFxuICB9KVxufVxuIl19
|
|
@@ -1,93 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Spots Query Hooks
|
|
3
|
-
*
|
|
4
|
-
* TanStack Query hooks for spot-related operations.
|
|
5
|
-
*/
|
|
6
|
-
import { type UseQueryOptions, type UseQueryResult, type UseInfiniteQueryOptions, type UseInfiniteQueryResult } from '@tanstack/react-query';
|
|
7
|
-
import { type PaginatedResponse, type Spot, type SpotImage } from '../types';
|
|
8
|
-
export declare const spotKeys: {
|
|
9
|
-
all: readonly ["spots"];
|
|
10
|
-
lists: () => readonly ["spots", "list"];
|
|
11
|
-
list: (filters?: Record<string, unknown>) => readonly ["spots", "list", Record<string, unknown> | undefined];
|
|
12
|
-
details: () => readonly ["spots", "detail"];
|
|
13
|
-
detail: (id: string) => readonly ["spots", "detail", string];
|
|
14
|
-
bySlug: (slug: string) => readonly ["spots", "slug", string];
|
|
15
|
-
byQR: (qrCode: string) => readonly ["spots", "qr", string];
|
|
16
|
-
images: (spotId: string) => readonly ["spots", "detail", string, "images"];
|
|
17
|
-
};
|
|
18
|
-
/**
|
|
19
|
-
* Get all spots
|
|
20
|
-
*
|
|
21
|
-
* @endpoint GET /spots
|
|
22
|
-
*/
|
|
23
|
-
export declare function useSpots(params?: {
|
|
24
|
-
limit?: number;
|
|
25
|
-
city?: string;
|
|
26
|
-
type?: string;
|
|
27
|
-
lat?: number;
|
|
28
|
-
lng?: number;
|
|
29
|
-
radius?: number;
|
|
30
|
-
search?: string;
|
|
31
|
-
vibes?: string;
|
|
32
|
-
cityId?: string;
|
|
33
|
-
page?: number;
|
|
34
|
-
}, options?: Omit<UseQueryOptions<Spot[]>, 'queryKey' | 'queryFn'>): UseQueryResult<Spot[]>;
|
|
35
|
-
/**
|
|
36
|
-
* Get a spot by ID
|
|
37
|
-
*
|
|
38
|
-
* @endpoint GET /spots/{spotId}
|
|
39
|
-
*/
|
|
40
|
-
export declare function useSpot(spotId: string, options?: Omit<UseQueryOptions<Spot>, 'queryKey' | 'queryFn'>): UseQueryResult<Spot>;
|
|
41
|
-
/**
|
|
42
|
-
* Get a spot by slug
|
|
43
|
-
*
|
|
44
|
-
* @endpoint GET /spots/slug/{slug}
|
|
45
|
-
*/
|
|
46
|
-
export declare function useSpotBySlug(slug: string, options?: Omit<UseQueryOptions<Spot>, 'queryKey' | 'queryFn'>): UseQueryResult<Spot>;
|
|
47
|
-
/**
|
|
48
|
-
* Get a spot by QR code
|
|
49
|
-
*
|
|
50
|
-
* @endpoint GET /spots/qr/{qrCode}
|
|
51
|
-
*/
|
|
52
|
-
export declare function useSpotByQR(qrCode: string, options?: Omit<UseQueryOptions<Spot>, 'queryKey' | 'queryFn'>): UseQueryResult<Spot>;
|
|
53
|
-
/**
|
|
54
|
-
* Get images for a spot
|
|
55
|
-
*
|
|
56
|
-
* @endpoint GET /spots/{spotId}/images
|
|
57
|
-
*/
|
|
58
|
-
export declare function useSpotImages(spotId: string, options?: Omit<UseQueryOptions<SpotImage[]>, 'queryKey' | 'queryFn'>): UseQueryResult<SpotImage[]>;
|
|
59
|
-
/**
|
|
60
|
-
* Check if a spot is favorited by the current user
|
|
61
|
-
*
|
|
62
|
-
* @endpoint GET /spots/{spotId}/favorite
|
|
63
|
-
*/
|
|
64
|
-
export declare function useSpotFavoriteStatus(spotId: string, options?: Omit<UseQueryOptions<{
|
|
65
|
-
isFavorite: boolean;
|
|
66
|
-
}>, 'queryKey' | 'queryFn'>): UseQueryResult<{
|
|
67
|
-
isFavorite: boolean;
|
|
68
|
-
}>;
|
|
69
|
-
/**
|
|
70
|
-
* Params for infinite spots query
|
|
71
|
-
*/
|
|
72
|
-
export interface InfiniteSpotsParams {
|
|
73
|
-
limit?: number;
|
|
74
|
-
city?: string;
|
|
75
|
-
cityId?: string;
|
|
76
|
-
type?: string;
|
|
77
|
-
templateSlugs?: string[];
|
|
78
|
-
vibeIds?: string[];
|
|
79
|
-
search?: string;
|
|
80
|
-
}
|
|
81
|
-
/**
|
|
82
|
-
* Infinite scroll query for spots
|
|
83
|
-
*
|
|
84
|
-
* @endpoint GET /spots (paginated)
|
|
85
|
-
* @returns Infinite query with pages of spots
|
|
86
|
-
*/
|
|
87
|
-
export declare function useInfiniteSpots(params?: InfiniteSpotsParams, options?: Omit<UseInfiniteQueryOptions<PaginatedResponse<Spot>, Error, {
|
|
88
|
-
pages: PaginatedResponse<Spot>[];
|
|
89
|
-
pageParams: number[];
|
|
90
|
-
}>, 'queryKey' | 'queryFn' | 'getNextPageParam' | 'initialPageParam'>): UseInfiniteQueryResult<{
|
|
91
|
-
pages: PaginatedResponse<Spot>[];
|
|
92
|
-
pageParams: number[];
|
|
93
|
-
}, Error>;
|