@growsober/sdk 1.0.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/README.md +276 -0
- package/dist/__tests__/e2e.test.d.ts +7 -0
- package/dist/__tests__/e2e.test.js +472 -0
- package/dist/api/client.d.ts +11 -0
- package/dist/api/client.js +61 -0
- package/dist/api/mutations/admin.d.ts +167 -0
- package/dist/api/mutations/admin.js +326 -0
- package/dist/api/mutations/ambassadors.d.ts +52 -0
- package/dist/api/mutations/ambassadors.js +148 -0
- package/dist/api/mutations/auth.d.ts +267 -0
- package/dist/api/mutations/auth.js +332 -0
- package/dist/api/mutations/bookings.d.ts +59 -0
- package/dist/api/mutations/bookings.js +143 -0
- package/dist/api/mutations/event-chat.d.ts +35 -0
- package/dist/api/mutations/event-chat.js +147 -0
- package/dist/api/mutations/events.d.ts +87 -0
- package/dist/api/mutations/events.js +205 -0
- package/dist/api/mutations/grow90.d.ts +36 -0
- package/dist/api/mutations/grow90.js +132 -0
- package/dist/api/mutations/hubs.d.ts +111 -0
- package/dist/api/mutations/hubs.js +240 -0
- package/dist/api/mutations/index.d.ts +22 -0
- package/dist/api/mutations/index.js +39 -0
- package/dist/api/mutations/jack.d.ts +61 -0
- package/dist/api/mutations/jack.js +104 -0
- package/dist/api/mutations/library.d.ts +67 -0
- package/dist/api/mutations/library.js +168 -0
- package/dist/api/mutations/map.d.ts +153 -0
- package/dist/api/mutations/map.js +181 -0
- package/dist/api/mutations/matching.d.ts +130 -0
- package/dist/api/mutations/matching.js +204 -0
- package/dist/api/mutations/notifications.d.ts +63 -0
- package/dist/api/mutations/notifications.js +106 -0
- package/dist/api/mutations/offers.d.ts +26 -0
- package/dist/api/mutations/offers.js +47 -0
- package/dist/api/mutations/subscriptions.d.ts +127 -0
- package/dist/api/mutations/subscriptions.js +140 -0
- package/dist/api/mutations/support.d.ts +165 -0
- package/dist/api/mutations/support.js +307 -0
- package/dist/api/mutations/users.d.ts +211 -0
- package/dist/api/mutations/users.js +261 -0
- package/dist/api/queries/admin.d.ts +257 -0
- package/dist/api/queries/admin.js +320 -0
- package/dist/api/queries/ambassadors.d.ts +53 -0
- package/dist/api/queries/ambassadors.js +98 -0
- package/dist/api/queries/auth.d.ts +16 -0
- package/dist/api/queries/auth.js +25 -0
- package/dist/api/queries/bookings.d.ts +91 -0
- package/dist/api/queries/bookings.js +102 -0
- package/dist/api/queries/businesses.d.ts +212 -0
- package/dist/api/queries/businesses.js +154 -0
- package/dist/api/queries/event-chat.d.ts +19 -0
- package/dist/api/queries/event-chat.js +75 -0
- package/dist/api/queries/events.d.ts +322 -0
- package/dist/api/queries/events.js +221 -0
- package/dist/api/queries/grow90.d.ts +26 -0
- package/dist/api/queries/grow90.js +85 -0
- package/dist/api/queries/hubs.d.ts +165 -0
- package/dist/api/queries/hubs.js +143 -0
- package/dist/api/queries/index.d.ts +23 -0
- package/dist/api/queries/index.js +40 -0
- package/dist/api/queries/jack.d.ts +63 -0
- package/dist/api/queries/jack.js +92 -0
- package/dist/api/queries/library.d.ts +132 -0
- package/dist/api/queries/library.js +120 -0
- package/dist/api/queries/map.d.ts +216 -0
- package/dist/api/queries/map.js +278 -0
- package/dist/api/queries/matching.d.ts +136 -0
- package/dist/api/queries/matching.js +161 -0
- package/dist/api/queries/notifications.d.ts +78 -0
- package/dist/api/queries/notifications.js +88 -0
- package/dist/api/queries/offers.d.ts +91 -0
- package/dist/api/queries/offers.js +103 -0
- package/dist/api/queries/subscriptions.d.ts +56 -0
- package/dist/api/queries/subscriptions.js +73 -0
- package/dist/api/queries/support.d.ts +106 -0
- package/dist/api/queries/support.js +202 -0
- package/dist/api/queries/users.d.ts +293 -0
- package/dist/api/queries/users.js +370 -0
- package/dist/api/types.d.ts +464 -0
- package/dist/api/types.js +9 -0
- package/dist/hooks/useAuth.d.ts +5 -0
- package/dist/hooks/useAuth.js +39 -0
- package/dist/hooks/useUser.d.ts +43 -0
- package/dist/hooks/useUser.js +44 -0
- package/dist/index.d.ts +36 -0
- package/dist/index.js +67 -0
- package/package.json +62 -0
- package/src/__tests__/e2e.test.ts +502 -0
- package/src/api/client.ts +71 -0
- package/src/api/mutations/admin.ts +531 -0
- package/src/api/mutations/ambassadors.ts +185 -0
- package/src/api/mutations/auth.ts +350 -0
- package/src/api/mutations/bookings.ts +190 -0
- package/src/api/mutations/event-chat.ts +177 -0
- package/src/api/mutations/events.ts +273 -0
- package/src/api/mutations/grow90.ts +169 -0
- package/src/api/mutations/hubs.ts +385 -0
- package/src/api/mutations/index.ts +23 -0
- package/src/api/mutations/jack.ts +130 -0
- package/src/api/mutations/library.ts +212 -0
- package/src/api/mutations/map.ts +230 -0
- package/src/api/mutations/matching.ts +271 -0
- package/src/api/mutations/notifications.ts +114 -0
- package/src/api/mutations/offers.ts +73 -0
- package/src/api/mutations/subscriptions.ts +162 -0
- package/src/api/mutations/support.ts +390 -0
- package/src/api/mutations/users.ts +271 -0
- package/src/api/queries/admin.ts +480 -0
- package/src/api/queries/ambassadors.ts +139 -0
- package/src/api/queries/auth.ts +24 -0
- package/src/api/queries/bookings.ts +135 -0
- package/src/api/queries/businesses.ts +203 -0
- package/src/api/queries/event-chat.ts +78 -0
- package/src/api/queries/events.ts +272 -0
- package/src/api/queries/grow90.ts +98 -0
- package/src/api/queries/hubs.ts +211 -0
- package/src/api/queries/index.ts +24 -0
- package/src/api/queries/jack.ts +127 -0
- package/src/api/queries/library.ts +166 -0
- package/src/api/queries/map.ts +331 -0
- package/src/api/queries/matching.ts +238 -0
- package/src/api/queries/notifications.ts +103 -0
- package/src/api/queries/offers.ts +136 -0
- package/src/api/queries/subscriptions.ts +91 -0
- package/src/api/queries/support.ts +235 -0
- package/src/api/queries/users.ts +393 -0
- package/src/api/types.ts +596 -0
- package/src/index.ts +57 -0
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { UseQueryOptions } from '@tanstack/react-query';
|
|
2
|
+
import type { BookingResponse } from '../types';
|
|
3
|
+
export declare const bookingKeys: {
|
|
4
|
+
all: readonly ["bookings"];
|
|
5
|
+
lists: () => readonly ["bookings", "list"];
|
|
6
|
+
list: (filters?: BookingFilters) => readonly ["bookings", "list", BookingFilters | undefined];
|
|
7
|
+
details: () => readonly ["bookings", "detail"];
|
|
8
|
+
detail: (id: string) => readonly ["bookings", "detail", string];
|
|
9
|
+
mine: (filters?: BookingFilters) => readonly ["bookings", "mine", BookingFilters | undefined];
|
|
10
|
+
qrCode: (id: string) => readonly ["bookings", "detail", string, "qr"];
|
|
11
|
+
};
|
|
12
|
+
export interface BookingFilters {
|
|
13
|
+
page?: number;
|
|
14
|
+
limit?: number;
|
|
15
|
+
status?: 'CONFIRMED' | 'WAITLISTED' | 'CANCELLED';
|
|
16
|
+
eventId?: string;
|
|
17
|
+
}
|
|
18
|
+
export interface PaginatedBookingsResponse {
|
|
19
|
+
bookings: BookingResponse[];
|
|
20
|
+
total: number;
|
|
21
|
+
page: number;
|
|
22
|
+
limit: number;
|
|
23
|
+
totalPages: number;
|
|
24
|
+
}
|
|
25
|
+
export interface QrCodeResponse {
|
|
26
|
+
qrCode: string;
|
|
27
|
+
bookingId: string;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Get a single booking by ID
|
|
31
|
+
*
|
|
32
|
+
* @param id - Booking ID
|
|
33
|
+
* @param options - TanStack Query options
|
|
34
|
+
*
|
|
35
|
+
* @example
|
|
36
|
+
* ```tsx
|
|
37
|
+
* const { data, isLoading } = useBooking('booking-123');
|
|
38
|
+
* ```
|
|
39
|
+
*/
|
|
40
|
+
export declare function useBooking(id: string, options?: Omit<UseQueryOptions<BookingResponse>, 'queryKey' | 'queryFn'>): import("@tanstack/react-query").UseQueryResult<{
|
|
41
|
+
id: string;
|
|
42
|
+
eventId: string;
|
|
43
|
+
userId?: Record<string, never>;
|
|
44
|
+
guestName?: Record<string, never>;
|
|
45
|
+
guestEmail?: Record<string, never>;
|
|
46
|
+
guestPhone?: Record<string, never>;
|
|
47
|
+
ticketCount: number;
|
|
48
|
+
totalPrice?: Record<string, never>;
|
|
49
|
+
status: "PENDING" | "CONFIRMED" | "WAITLISTED" | "CANCELLED" | "NO_SHOW";
|
|
50
|
+
waitlistPosition?: Record<string, never>;
|
|
51
|
+
isCheckedIn: boolean;
|
|
52
|
+
checkedInAt?: Record<string, never>;
|
|
53
|
+
checkedInBy?: Record<string, never>;
|
|
54
|
+
paymentId?: Record<string, never>;
|
|
55
|
+
paymentStatus?: "PENDING" | "COMPLETED" | "FAILED" | "REFUNDED";
|
|
56
|
+
qrCode?: Record<string, never>;
|
|
57
|
+
notes?: Record<string, never>;
|
|
58
|
+
createdAt: string;
|
|
59
|
+
updatedAt: string;
|
|
60
|
+
cancelledAt?: Record<string, never>;
|
|
61
|
+
}, Error>;
|
|
62
|
+
/**
|
|
63
|
+
* Get current user's bookings with optional filters
|
|
64
|
+
*
|
|
65
|
+
* @param filters - Query parameters for filtering and pagination
|
|
66
|
+
* @param options - TanStack Query options
|
|
67
|
+
*
|
|
68
|
+
* @example
|
|
69
|
+
* ```tsx
|
|
70
|
+
* const { data, isLoading } = useMyBookings({
|
|
71
|
+
* page: 1,
|
|
72
|
+
* limit: 20,
|
|
73
|
+
* status: 'CONFIRMED',
|
|
74
|
+
* eventId: 'event-123'
|
|
75
|
+
* });
|
|
76
|
+
* ```
|
|
77
|
+
*/
|
|
78
|
+
export declare function useMyBookings(filters?: BookingFilters, options?: Omit<UseQueryOptions<PaginatedBookingsResponse>, 'queryKey' | 'queryFn'>): import("@tanstack/react-query").UseQueryResult<PaginatedBookingsResponse, Error>;
|
|
79
|
+
/**
|
|
80
|
+
* Get QR code for a specific booking
|
|
81
|
+
*
|
|
82
|
+
* @param id - Booking ID
|
|
83
|
+
* @param options - TanStack Query options
|
|
84
|
+
*
|
|
85
|
+
* @example
|
|
86
|
+
* ```tsx
|
|
87
|
+
* const { data, isLoading } = useBookingQrCode('booking-123');
|
|
88
|
+
* // data.qrCode contains the QR code string for display
|
|
89
|
+
* ```
|
|
90
|
+
*/
|
|
91
|
+
export declare function useBookingQrCode(id: string, options?: Omit<UseQueryOptions<QrCodeResponse>, 'queryKey' | 'queryFn'>): import("@tanstack/react-query").UseQueryResult<QrCodeResponse, Error>;
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.bookingKeys = void 0;
|
|
4
|
+
exports.useBooking = useBooking;
|
|
5
|
+
exports.useMyBookings = useMyBookings;
|
|
6
|
+
exports.useBookingQrCode = useBookingQrCode;
|
|
7
|
+
const react_query_1 = require("@tanstack/react-query");
|
|
8
|
+
const client_1 = require("../client");
|
|
9
|
+
// ============================================================================
|
|
10
|
+
// QUERY KEY FACTORY
|
|
11
|
+
// ============================================================================
|
|
12
|
+
exports.bookingKeys = {
|
|
13
|
+
all: ['bookings'],
|
|
14
|
+
lists: () => [...exports.bookingKeys.all, 'list'],
|
|
15
|
+
list: (filters) => [...exports.bookingKeys.lists(), filters],
|
|
16
|
+
details: () => [...exports.bookingKeys.all, 'detail'],
|
|
17
|
+
detail: (id) => [...exports.bookingKeys.details(), id],
|
|
18
|
+
mine: (filters) => [...exports.bookingKeys.all, 'mine', filters],
|
|
19
|
+
qrCode: (id) => [...exports.bookingKeys.detail(id), 'qr'],
|
|
20
|
+
};
|
|
21
|
+
// ============================================================================
|
|
22
|
+
// QUERY HOOKS
|
|
23
|
+
// ============================================================================
|
|
24
|
+
/**
|
|
25
|
+
* Get a single booking by ID
|
|
26
|
+
*
|
|
27
|
+
* @param id - Booking ID
|
|
28
|
+
* @param options - TanStack Query options
|
|
29
|
+
*
|
|
30
|
+
* @example
|
|
31
|
+
* ```tsx
|
|
32
|
+
* const { data, isLoading } = useBooking('booking-123');
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
function useBooking(id, options) {
|
|
36
|
+
return (0, react_query_1.useQuery)({
|
|
37
|
+
queryKey: exports.bookingKeys.detail(id),
|
|
38
|
+
queryFn: async () => {
|
|
39
|
+
const client = (0, client_1.getApiClient)();
|
|
40
|
+
const response = await client.get(`/api/v1/bookings/${id}`);
|
|
41
|
+
return response.data;
|
|
42
|
+
},
|
|
43
|
+
enabled: !!id,
|
|
44
|
+
...options,
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Get current user's bookings with optional filters
|
|
49
|
+
*
|
|
50
|
+
* @param filters - Query parameters for filtering and pagination
|
|
51
|
+
* @param options - TanStack Query options
|
|
52
|
+
*
|
|
53
|
+
* @example
|
|
54
|
+
* ```tsx
|
|
55
|
+
* const { data, isLoading } = useMyBookings({
|
|
56
|
+
* page: 1,
|
|
57
|
+
* limit: 20,
|
|
58
|
+
* status: 'CONFIRMED',
|
|
59
|
+
* eventId: 'event-123'
|
|
60
|
+
* });
|
|
61
|
+
* ```
|
|
62
|
+
*/
|
|
63
|
+
function useMyBookings(filters, options) {
|
|
64
|
+
return (0, react_query_1.useQuery)({
|
|
65
|
+
queryKey: exports.bookingKeys.mine(filters),
|
|
66
|
+
queryFn: async () => {
|
|
67
|
+
const client = (0, client_1.getApiClient)();
|
|
68
|
+
// Use /users/me/bookings - the existing API endpoint
|
|
69
|
+
const response = await client.get('/api/v1/users/me/bookings', {
|
|
70
|
+
params: filters,
|
|
71
|
+
});
|
|
72
|
+
// API returns { data: { bookings: [...] }, meta: {...} }
|
|
73
|
+
return response.data.data || response.data;
|
|
74
|
+
},
|
|
75
|
+
...options,
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Get QR code for a specific booking
|
|
80
|
+
*
|
|
81
|
+
* @param id - Booking ID
|
|
82
|
+
* @param options - TanStack Query options
|
|
83
|
+
*
|
|
84
|
+
* @example
|
|
85
|
+
* ```tsx
|
|
86
|
+
* const { data, isLoading } = useBookingQrCode('booking-123');
|
|
87
|
+
* // data.qrCode contains the QR code string for display
|
|
88
|
+
* ```
|
|
89
|
+
*/
|
|
90
|
+
function useBookingQrCode(id, options) {
|
|
91
|
+
return (0, react_query_1.useQuery)({
|
|
92
|
+
queryKey: exports.bookingKeys.qrCode(id),
|
|
93
|
+
queryFn: async () => {
|
|
94
|
+
const client = (0, client_1.getApiClient)();
|
|
95
|
+
const response = await client.get(`/api/v1/bookings/${id}/qr`);
|
|
96
|
+
return response.data;
|
|
97
|
+
},
|
|
98
|
+
enabled: !!id,
|
|
99
|
+
...options,
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9va2luZ3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBpL3F1ZXJpZXMvYm9va2luZ3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBeURBLGdDQWNDO0FBa0JELHNDQWlCQztBQWNELDRDQWNDO0FBdElELHVEQUFrRTtBQUNsRSxzQ0FBeUM7QUFHekMsK0VBQStFO0FBQy9FLG9CQUFvQjtBQUNwQiwrRUFBK0U7QUFFbEUsUUFBQSxXQUFXLEdBQUc7SUFDekIsR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFVO0lBQzFCLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsbUJBQVcsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFVO0lBQ2xELElBQUksRUFBRSxDQUFDLE9BQXdCLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxtQkFBVyxDQUFDLEtBQUssRUFBRSxFQUFFLE9BQU8sQ0FBVTtJQUM5RSxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLG1CQUFXLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBVTtJQUN0RCxNQUFNLEVBQUUsQ0FBQyxFQUFVLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxtQkFBVyxDQUFDLE9BQU8sRUFBRSxFQUFFLEVBQUUsQ0FBVTtJQUMvRCxJQUFJLEVBQUUsQ0FBQyxPQUF3QixFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsbUJBQVcsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBVTtJQUNsRixNQUFNLEVBQUUsQ0FBQyxFQUFVLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxtQkFBVyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQVU7Q0FDbkUsQ0FBQztBQTBCRiwrRUFBK0U7QUFDL0UsY0FBYztBQUNkLCtFQUErRTtBQUUvRTs7Ozs7Ozs7OztHQVVHO0FBQ0gsU0FBZ0IsVUFBVSxDQUN4QixFQUFVLEVBQ1YsT0FBd0U7SUFFeEUsT0FBTyxJQUFBLHNCQUFRLEVBQUM7UUFDZCxRQUFRLEVBQUUsbUJBQVcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1FBQ2hDLE9BQU8sRUFBRSxLQUFLLElBQThCLEVBQUU7WUFDNUMsTUFBTSxNQUFNLEdBQUcsSUFBQSxxQkFBWSxHQUFFLENBQUM7WUFDOUIsTUFBTSxRQUFRLEdBQUcsTUFBTSxNQUFNLENBQUMsR0FBRyxDQUFDLG9CQUFvQixFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQzVELE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQztRQUN2QixDQUFDO1FBQ0QsT0FBTyxFQUFFLENBQUMsQ0FBQyxFQUFFO1FBQ2IsR0FBRyxPQUFPO0tBQ1gsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILFNBQWdCLGFBQWEsQ0FDM0IsT0FBd0IsRUFDeEIsT0FBa0Y7SUFFbEYsT0FBTyxJQUFBLHNCQUFRLEVBQUM7UUFDZCxRQUFRLEVBQUUsbUJBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO1FBQ25DLE9BQU8sRUFBRSxLQUFLLElBQXdDLEVBQUU7WUFDdEQsTUFBTSxNQUFNLEdBQUcsSUFBQSxxQkFBWSxHQUFFLENBQUM7WUFDOUIscURBQXFEO1lBQ3JELE1BQU0sUUFBUSxHQUFHLE1BQU0sTUFBTSxDQUFDLEdBQUcsQ0FBQywyQkFBMkIsRUFBRTtnQkFDN0QsTUFBTSxFQUFFLE9BQU87YUFDaEIsQ0FBQyxDQUFDO1lBQ0gseURBQXlEO1lBQ3pELE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQztRQUM3QyxDQUFDO1FBQ0QsR0FBRyxPQUFPO0tBQ1gsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVEOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsU0FBZ0IsZ0JBQWdCLENBQzlCLEVBQVUsRUFDVixPQUF1RTtJQUV2RSxPQUFPLElBQUEsc0JBQVEsRUFBQztRQUNkLFFBQVEsRUFBRSxtQkFBVyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFDaEMsT0FBTyxFQUFFLEtBQUssSUFBNkIsRUFBRTtZQUMzQyxNQUFNLE1BQU0sR0FBRyxJQUFBLHFCQUFZLEdBQUUsQ0FBQztZQUM5QixNQUFNLFFBQVEsR0FBRyxNQUFNLE1BQU0sQ0FBQyxHQUFHLENBQUMsb0JBQW9CLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDL0QsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDO1FBQ3ZCLENBQUM7UUFDRCxPQUFPLEVBQUUsQ0FBQyxDQUFDLEVBQUU7UUFDYixHQUFHLE9BQU87S0FDWCxDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdXNlUXVlcnksIFVzZVF1ZXJ5T3B0aW9ucyB9IGZyb20gJ0B0YW5zdGFjay9yZWFjdC1xdWVyeSc7XG5pbXBvcnQgeyBnZXRBcGlDbGllbnQgfSBmcm9tICcuLi9jbGllbnQnO1xuaW1wb3J0IHR5cGUgeyBCb29raW5nUmVzcG9uc2UgfSBmcm9tICcuLi90eXBlcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFFVRVJZIEtFWSBGQUNUT1JZXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmV4cG9ydCBjb25zdCBib29raW5nS2V5cyA9IHtcbiAgYWxsOiBbJ2Jvb2tpbmdzJ10gYXMgY29uc3QsXG4gIGxpc3RzOiAoKSA9PiBbLi4uYm9va2luZ0tleXMuYWxsLCAnbGlzdCddIGFzIGNvbnN0LFxuICBsaXN0OiAoZmlsdGVycz86IEJvb2tpbmdGaWx0ZXJzKSA9PiBbLi4uYm9va2luZ0tleXMubGlzdHMoKSwgZmlsdGVyc10gYXMgY29uc3QsXG4gIGRldGFpbHM6ICgpID0+IFsuLi5ib29raW5nS2V5cy5hbGwsICdkZXRhaWwnXSBhcyBjb25zdCxcbiAgZGV0YWlsOiAoaWQ6IHN0cmluZykgPT4gWy4uLmJvb2tpbmdLZXlzLmRldGFpbHMoKSwgaWRdIGFzIGNvbnN0LFxuICBtaW5lOiAoZmlsdGVycz86IEJvb2tpbmdGaWx0ZXJzKSA9PiBbLi4uYm9va2luZ0tleXMuYWxsLCAnbWluZScsIGZpbHRlcnNdIGFzIGNvbnN0LFxuICBxckNvZGU6IChpZDogc3RyaW5nKSA9PiBbLi4uYm9va2luZ0tleXMuZGV0YWlsKGlkKSwgJ3FyJ10gYXMgY29uc3QsXG59O1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBUWVBFU1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnQgaW50ZXJmYWNlIEJvb2tpbmdGaWx0ZXJzIHtcbiAgcGFnZT86IG51bWJlcjtcbiAgbGltaXQ/OiBudW1iZXI7XG4gIHN0YXR1cz86ICdDT05GSVJNRUQnIHwgJ1dBSVRMSVNURUQnIHwgJ0NBTkNFTExFRCc7XG4gIGV2ZW50SWQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFnaW5hdGVkQm9va2luZ3NSZXNwb25zZSB7XG4gIGJvb2tpbmdzOiBCb29raW5nUmVzcG9uc2VbXTtcbiAgdG90YWw6IG51bWJlcjtcbiAgcGFnZTogbnVtYmVyO1xuICBsaW1pdDogbnVtYmVyO1xuICB0b3RhbFBhZ2VzOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUXJDb2RlUmVzcG9uc2Uge1xuICBxckNvZGU6IHN0cmluZztcbiAgYm9va2luZ0lkOiBzdHJpbmc7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFFVRVJZIEhPT0tTXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogR2V0IGEgc2luZ2xlIGJvb2tpbmcgYnkgSURcbiAqXG4gKiBAcGFyYW0gaWQgLSBCb29raW5nIElEXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRhblN0YWNrIFF1ZXJ5IG9wdGlvbnNcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHN4XG4gKiBjb25zdCB7IGRhdGEsIGlzTG9hZGluZyB9ID0gdXNlQm9va2luZygnYm9va2luZy0xMjMnKTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlQm9va2luZyhcbiAgaWQ6IHN0cmluZyxcbiAgb3B0aW9ucz86IE9taXQ8VXNlUXVlcnlPcHRpb25zPEJvb2tpbmdSZXNwb25zZT4sICdxdWVyeUtleScgfCAncXVlcnlGbic+XG4pIHtcbiAgcmV0dXJuIHVzZVF1ZXJ5KHtcbiAgICBxdWVyeUtleTogYm9va2luZ0tleXMuZGV0YWlsKGlkKSxcbiAgICBxdWVyeUZuOiBhc3luYyAoKTogUHJvbWlzZTxCb29raW5nUmVzcG9uc2U+ID0+IHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IGdldEFwaUNsaWVudCgpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuZ2V0KGAvYXBpL3YxL2Jvb2tpbmdzLyR7aWR9YCk7XG4gICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcbiAgICB9LFxuICAgIGVuYWJsZWQ6ICEhaWQsXG4gICAgLi4ub3B0aW9ucyxcbiAgfSk7XG59XG5cbi8qKlxuICogR2V0IGN1cnJlbnQgdXNlcidzIGJvb2tpbmdzIHdpdGggb3B0aW9uYWwgZmlsdGVyc1xuICpcbiAqIEBwYXJhbSBmaWx0ZXJzIC0gUXVlcnkgcGFyYW1ldGVycyBmb3IgZmlsdGVyaW5nIGFuZCBwYWdpbmF0aW9uXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRhblN0YWNrIFF1ZXJ5IG9wdGlvbnNcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHN4XG4gKiBjb25zdCB7IGRhdGEsIGlzTG9hZGluZyB9ID0gdXNlTXlCb29raW5ncyh7XG4gKiAgIHBhZ2U6IDEsXG4gKiAgIGxpbWl0OiAyMCxcbiAqICAgc3RhdHVzOiAnQ09ORklSTUVEJyxcbiAqICAgZXZlbnRJZDogJ2V2ZW50LTEyMydcbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VNeUJvb2tpbmdzKFxuICBmaWx0ZXJzPzogQm9va2luZ0ZpbHRlcnMsXG4gIG9wdGlvbnM/OiBPbWl0PFVzZVF1ZXJ5T3B0aW9uczxQYWdpbmF0ZWRCb29raW5nc1Jlc3BvbnNlPiwgJ3F1ZXJ5S2V5JyB8ICdxdWVyeUZuJz5cbikge1xuICByZXR1cm4gdXNlUXVlcnkoe1xuICAgIHF1ZXJ5S2V5OiBib29raW5nS2V5cy5taW5lKGZpbHRlcnMpLFxuICAgIHF1ZXJ5Rm46IGFzeW5jICgpOiBQcm9taXNlPFBhZ2luYXRlZEJvb2tpbmdzUmVzcG9uc2U+ID0+IHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IGdldEFwaUNsaWVudCgpO1xuICAgICAgLy8gVXNlIC91c2Vycy9tZS9ib29raW5ncyAtIHRoZSBleGlzdGluZyBBUEkgZW5kcG9pbnRcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LmdldCgnL2FwaS92MS91c2Vycy9tZS9ib29raW5ncycsIHtcbiAgICAgICAgcGFyYW1zOiBmaWx0ZXJzLFxuICAgICAgfSk7XG4gICAgICAvLyBBUEkgcmV0dXJucyB7IGRhdGE6IHsgYm9va2luZ3M6IFsuLi5dIH0sIG1ldGE6IHsuLi59IH1cbiAgICAgIHJldHVybiByZXNwb25zZS5kYXRhLmRhdGEgfHwgcmVzcG9uc2UuZGF0YTtcbiAgICB9LFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pO1xufVxuXG4vKipcbiAqIEdldCBRUiBjb2RlIGZvciBhIHNwZWNpZmljIGJvb2tpbmdcbiAqXG4gKiBAcGFyYW0gaWQgLSBCb29raW5nIElEXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRhblN0YWNrIFF1ZXJ5IG9wdGlvbnNcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHN4XG4gKiBjb25zdCB7IGRhdGEsIGlzTG9hZGluZyB9ID0gdXNlQm9va2luZ1FyQ29kZSgnYm9va2luZy0xMjMnKTtcbiAqIC8vIGRhdGEucXJDb2RlIGNvbnRhaW5zIHRoZSBRUiBjb2RlIHN0cmluZyBmb3IgZGlzcGxheVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VCb29raW5nUXJDb2RlKFxuICBpZDogc3RyaW5nLFxuICBvcHRpb25zPzogT21pdDxVc2VRdWVyeU9wdGlvbnM8UXJDb2RlUmVzcG9uc2U+LCAncXVlcnlLZXknIHwgJ3F1ZXJ5Rm4nPlxuKSB7XG4gIHJldHVybiB1c2VRdWVyeSh7XG4gICAgcXVlcnlLZXk6IGJvb2tpbmdLZXlzLnFyQ29kZShpZCksXG4gICAgcXVlcnlGbjogYXN5bmMgKCk6IFByb21pc2U8UXJDb2RlUmVzcG9uc2U+ID0+IHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IGdldEFwaUNsaWVudCgpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuZ2V0KGAvYXBpL3YxL2Jvb2tpbmdzLyR7aWR9L3FyYCk7XG4gICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcbiAgICB9LFxuICAgIGVuYWJsZWQ6ICEhaWQsXG4gICAgLi4ub3B0aW9ucyxcbiAgfSk7XG59XG4iXX0=
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
import { UseQueryOptions } from '@tanstack/react-query';
|
|
2
|
+
import type { BusinessResponse, OfferResponse } from '../types';
|
|
3
|
+
export declare const businessKeys: {
|
|
4
|
+
all: readonly ["businesses"];
|
|
5
|
+
lists: () => readonly ["businesses", "list"];
|
|
6
|
+
list: (filters?: BusinessFilters) => readonly ["businesses", "list", BusinessFilters | undefined];
|
|
7
|
+
details: () => readonly ["businesses", "detail"];
|
|
8
|
+
detail: (id: string) => readonly ["businesses", "detail", string];
|
|
9
|
+
featured: () => readonly ["businesses", "featured"];
|
|
10
|
+
nearby: (params?: NearbyBusinessParams) => readonly ["businesses", "nearby", NearbyBusinessParams | undefined];
|
|
11
|
+
offers: (businessId: string) => readonly ["businesses", "detail", string, "offers"];
|
|
12
|
+
};
|
|
13
|
+
export interface BusinessFilters {
|
|
14
|
+
page?: number;
|
|
15
|
+
limit?: number;
|
|
16
|
+
search?: string;
|
|
17
|
+
cityId?: string;
|
|
18
|
+
type?: string;
|
|
19
|
+
hasAfDrinks?: boolean;
|
|
20
|
+
isAfVenue?: boolean;
|
|
21
|
+
isFeatured?: boolean;
|
|
22
|
+
isPartner?: boolean;
|
|
23
|
+
lat?: number;
|
|
24
|
+
long?: number;
|
|
25
|
+
radius?: number;
|
|
26
|
+
sortBy?: string;
|
|
27
|
+
sortOrder?: 'asc' | 'desc';
|
|
28
|
+
}
|
|
29
|
+
export interface NearbyBusinessParams {
|
|
30
|
+
lat: number;
|
|
31
|
+
long: number;
|
|
32
|
+
radius?: number;
|
|
33
|
+
}
|
|
34
|
+
export interface PaginatedBusinessesResponse {
|
|
35
|
+
businesses: BusinessResponse[];
|
|
36
|
+
total: number;
|
|
37
|
+
page: number;
|
|
38
|
+
limit: number;
|
|
39
|
+
totalPages: number;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Get paginated list of businesses with optional filters
|
|
43
|
+
*
|
|
44
|
+
* @param filters - Query parameters for filtering and pagination
|
|
45
|
+
* @param options - TanStack Query options
|
|
46
|
+
*
|
|
47
|
+
* @example
|
|
48
|
+
* ```tsx
|
|
49
|
+
* const { data, isLoading } = useBusinesses({
|
|
50
|
+
* page: 1,
|
|
51
|
+
* limit: 20,
|
|
52
|
+
* cityId: 'city-123',
|
|
53
|
+
* hasAfDrinks: true,
|
|
54
|
+
* sortBy: 'name',
|
|
55
|
+
* sortOrder: 'asc'
|
|
56
|
+
* });
|
|
57
|
+
* ```
|
|
58
|
+
*/
|
|
59
|
+
export declare function useBusinesses(filters?: BusinessFilters, options?: Omit<UseQueryOptions<PaginatedBusinessesResponse>, 'queryKey' | 'queryFn'>): import("@tanstack/react-query").UseQueryResult<PaginatedBusinessesResponse, Error>;
|
|
60
|
+
/**
|
|
61
|
+
* Get featured businesses
|
|
62
|
+
*
|
|
63
|
+
* @param options - TanStack Query options
|
|
64
|
+
*
|
|
65
|
+
* @example
|
|
66
|
+
* ```tsx
|
|
67
|
+
* const { data, isLoading } = useFeaturedBusinesses();
|
|
68
|
+
* ```
|
|
69
|
+
*/
|
|
70
|
+
export declare function useFeaturedBusinesses(options?: Omit<UseQueryOptions<BusinessResponse[]>, 'queryKey' | 'queryFn'>): import("@tanstack/react-query").UseQueryResult<{
|
|
71
|
+
id: string;
|
|
72
|
+
appId: string;
|
|
73
|
+
name: string;
|
|
74
|
+
slug?: Record<string, never>;
|
|
75
|
+
description?: Record<string, never>;
|
|
76
|
+
type: "COFFEE_SHOP" | "RESTAURANT" | "BAR" | "WELLNESS" | "VENUE" | "ACTIVITY" | "RETAIL" | "OTHER";
|
|
77
|
+
hasAfDrinks: boolean;
|
|
78
|
+
isAfVenue: boolean;
|
|
79
|
+
afHighlights: string[];
|
|
80
|
+
address?: Record<string, never>;
|
|
81
|
+
cityId?: Record<string, never>;
|
|
82
|
+
locationLat?: Record<string, never>;
|
|
83
|
+
locationLong?: Record<string, never>;
|
|
84
|
+
phone?: Record<string, never>;
|
|
85
|
+
email?: Record<string, never>;
|
|
86
|
+
website?: Record<string, never>;
|
|
87
|
+
instagramUrl?: Record<string, never>;
|
|
88
|
+
profileImage?: Record<string, never>;
|
|
89
|
+
bannerImage?: Record<string, never>;
|
|
90
|
+
photos: string[];
|
|
91
|
+
openingHours?: Record<string, never>;
|
|
92
|
+
isActive: boolean;
|
|
93
|
+
isVerified: boolean;
|
|
94
|
+
isFeatured: boolean;
|
|
95
|
+
isPartner: boolean;
|
|
96
|
+
createdAt: string;
|
|
97
|
+
updatedAt: string;
|
|
98
|
+
}[], Error>;
|
|
99
|
+
/**
|
|
100
|
+
* Get nearby businesses based on location
|
|
101
|
+
*
|
|
102
|
+
* @param params - Location parameters (latitude, longitude, radius)
|
|
103
|
+
* @param options - TanStack Query options
|
|
104
|
+
*
|
|
105
|
+
* @example
|
|
106
|
+
* ```tsx
|
|
107
|
+
* const { data, isLoading } = useNearbyBusinesses({
|
|
108
|
+
* lat: 51.5074,
|
|
109
|
+
* long: -0.1278,
|
|
110
|
+
* radius: 5000 // 5km radius
|
|
111
|
+
* });
|
|
112
|
+
* ```
|
|
113
|
+
*/
|
|
114
|
+
export declare function useNearbyBusinesses(params: NearbyBusinessParams, options?: Omit<UseQueryOptions<BusinessResponse[]>, 'queryKey' | 'queryFn'>): import("@tanstack/react-query").UseQueryResult<{
|
|
115
|
+
id: string;
|
|
116
|
+
appId: string;
|
|
117
|
+
name: string;
|
|
118
|
+
slug?: Record<string, never>;
|
|
119
|
+
description?: Record<string, never>;
|
|
120
|
+
type: "COFFEE_SHOP" | "RESTAURANT" | "BAR" | "WELLNESS" | "VENUE" | "ACTIVITY" | "RETAIL" | "OTHER";
|
|
121
|
+
hasAfDrinks: boolean;
|
|
122
|
+
isAfVenue: boolean;
|
|
123
|
+
afHighlights: string[];
|
|
124
|
+
address?: Record<string, never>;
|
|
125
|
+
cityId?: Record<string, never>;
|
|
126
|
+
locationLat?: Record<string, never>;
|
|
127
|
+
locationLong?: Record<string, never>;
|
|
128
|
+
phone?: Record<string, never>;
|
|
129
|
+
email?: Record<string, never>;
|
|
130
|
+
website?: Record<string, never>;
|
|
131
|
+
instagramUrl?: Record<string, never>;
|
|
132
|
+
profileImage?: Record<string, never>;
|
|
133
|
+
bannerImage?: Record<string, never>;
|
|
134
|
+
photos: string[];
|
|
135
|
+
openingHours?: Record<string, never>;
|
|
136
|
+
isActive: boolean;
|
|
137
|
+
isVerified: boolean;
|
|
138
|
+
isFeatured: boolean;
|
|
139
|
+
isPartner: boolean;
|
|
140
|
+
createdAt: string;
|
|
141
|
+
updatedAt: string;
|
|
142
|
+
}[], Error>;
|
|
143
|
+
/**
|
|
144
|
+
* Get a single business by ID
|
|
145
|
+
*
|
|
146
|
+
* @param id - Business ID
|
|
147
|
+
* @param options - TanStack Query options
|
|
148
|
+
*
|
|
149
|
+
* @example
|
|
150
|
+
* ```tsx
|
|
151
|
+
* const { data, isLoading } = useBusiness('business-123');
|
|
152
|
+
* ```
|
|
153
|
+
*/
|
|
154
|
+
export declare function useBusiness(id: string, options?: Omit<UseQueryOptions<BusinessResponse>, 'queryKey' | 'queryFn'>): import("@tanstack/react-query").UseQueryResult<{
|
|
155
|
+
id: string;
|
|
156
|
+
appId: string;
|
|
157
|
+
name: string;
|
|
158
|
+
slug?: Record<string, never>;
|
|
159
|
+
description?: Record<string, never>;
|
|
160
|
+
type: "COFFEE_SHOP" | "RESTAURANT" | "BAR" | "WELLNESS" | "VENUE" | "ACTIVITY" | "RETAIL" | "OTHER";
|
|
161
|
+
hasAfDrinks: boolean;
|
|
162
|
+
isAfVenue: boolean;
|
|
163
|
+
afHighlights: string[];
|
|
164
|
+
address?: Record<string, never>;
|
|
165
|
+
cityId?: Record<string, never>;
|
|
166
|
+
locationLat?: Record<string, never>;
|
|
167
|
+
locationLong?: Record<string, never>;
|
|
168
|
+
phone?: Record<string, never>;
|
|
169
|
+
email?: Record<string, never>;
|
|
170
|
+
website?: Record<string, never>;
|
|
171
|
+
instagramUrl?: Record<string, never>;
|
|
172
|
+
profileImage?: Record<string, never>;
|
|
173
|
+
bannerImage?: Record<string, never>;
|
|
174
|
+
photos: string[];
|
|
175
|
+
openingHours?: Record<string, never>;
|
|
176
|
+
isActive: boolean;
|
|
177
|
+
isVerified: boolean;
|
|
178
|
+
isFeatured: boolean;
|
|
179
|
+
isPartner: boolean;
|
|
180
|
+
createdAt: string;
|
|
181
|
+
updatedAt: string;
|
|
182
|
+
}, Error>;
|
|
183
|
+
/**
|
|
184
|
+
* Get all offers for a specific business
|
|
185
|
+
*
|
|
186
|
+
* @param businessId - Business ID
|
|
187
|
+
* @param options - TanStack Query options
|
|
188
|
+
*
|
|
189
|
+
* @example
|
|
190
|
+
* ```tsx
|
|
191
|
+
* const { data, isLoading } = useBusinessOffers('business-123');
|
|
192
|
+
* ```
|
|
193
|
+
*/
|
|
194
|
+
export declare function useBusinessOffers(businessId: string, options?: Omit<UseQueryOptions<OfferResponse[]>, 'queryKey' | 'queryFn'>): import("@tanstack/react-query").UseQueryResult<{
|
|
195
|
+
id: string;
|
|
196
|
+
businessId: string;
|
|
197
|
+
title: string;
|
|
198
|
+
description?: Record<string, never>;
|
|
199
|
+
discountType?: "PERCENTAGE" | "FIXED_AMOUNT" | "FREE_ITEM" | "BOGO";
|
|
200
|
+
discountValue?: Record<string, never>;
|
|
201
|
+
discountCode?: Record<string, never>;
|
|
202
|
+
validFrom: string;
|
|
203
|
+
validTo?: Record<string, never>;
|
|
204
|
+
terms?: Record<string, never>;
|
|
205
|
+
maxRedemptions?: Record<string, never>;
|
|
206
|
+
redemptionCount: number;
|
|
207
|
+
perUserLimit?: Record<string, never>;
|
|
208
|
+
premiumOnly: boolean;
|
|
209
|
+
isActive: boolean;
|
|
210
|
+
createdAt: string;
|
|
211
|
+
updatedAt: string;
|
|
212
|
+
}[], Error>;
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.businessKeys = void 0;
|
|
4
|
+
exports.useBusinesses = useBusinesses;
|
|
5
|
+
exports.useFeaturedBusinesses = useFeaturedBusinesses;
|
|
6
|
+
exports.useNearbyBusinesses = useNearbyBusinesses;
|
|
7
|
+
exports.useBusiness = useBusiness;
|
|
8
|
+
exports.useBusinessOffers = useBusinessOffers;
|
|
9
|
+
const react_query_1 = require("@tanstack/react-query");
|
|
10
|
+
const client_1 = require("../client");
|
|
11
|
+
// ============================================================================
|
|
12
|
+
// QUERY KEY FACTORY
|
|
13
|
+
// ============================================================================
|
|
14
|
+
exports.businessKeys = {
|
|
15
|
+
all: ['businesses'],
|
|
16
|
+
lists: () => [...exports.businessKeys.all, 'list'],
|
|
17
|
+
list: (filters) => [...exports.businessKeys.lists(), filters],
|
|
18
|
+
details: () => [...exports.businessKeys.all, 'detail'],
|
|
19
|
+
detail: (id) => [...exports.businessKeys.details(), id],
|
|
20
|
+
featured: () => [...exports.businessKeys.all, 'featured'],
|
|
21
|
+
nearby: (params) => [...exports.businessKeys.all, 'nearby', params],
|
|
22
|
+
offers: (businessId) => [...exports.businessKeys.detail(businessId), 'offers'],
|
|
23
|
+
};
|
|
24
|
+
// ============================================================================
|
|
25
|
+
// QUERY HOOKS
|
|
26
|
+
// ============================================================================
|
|
27
|
+
/**
|
|
28
|
+
* Get paginated list of businesses with optional filters
|
|
29
|
+
*
|
|
30
|
+
* @param filters - Query parameters for filtering and pagination
|
|
31
|
+
* @param options - TanStack Query options
|
|
32
|
+
*
|
|
33
|
+
* @example
|
|
34
|
+
* ```tsx
|
|
35
|
+
* const { data, isLoading } = useBusinesses({
|
|
36
|
+
* page: 1,
|
|
37
|
+
* limit: 20,
|
|
38
|
+
* cityId: 'city-123',
|
|
39
|
+
* hasAfDrinks: true,
|
|
40
|
+
* sortBy: 'name',
|
|
41
|
+
* sortOrder: 'asc'
|
|
42
|
+
* });
|
|
43
|
+
* ```
|
|
44
|
+
*/
|
|
45
|
+
function useBusinesses(filters, options) {
|
|
46
|
+
return (0, react_query_1.useQuery)({
|
|
47
|
+
queryKey: exports.businessKeys.list(filters),
|
|
48
|
+
queryFn: async () => {
|
|
49
|
+
const client = (0, client_1.getApiClient)();
|
|
50
|
+
const response = await client.get('/api/v1/businesses', {
|
|
51
|
+
params: filters,
|
|
52
|
+
});
|
|
53
|
+
return response.data;
|
|
54
|
+
},
|
|
55
|
+
...options,
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Get featured businesses
|
|
60
|
+
*
|
|
61
|
+
* @param options - TanStack Query options
|
|
62
|
+
*
|
|
63
|
+
* @example
|
|
64
|
+
* ```tsx
|
|
65
|
+
* const { data, isLoading } = useFeaturedBusinesses();
|
|
66
|
+
* ```
|
|
67
|
+
*/
|
|
68
|
+
function useFeaturedBusinesses(options) {
|
|
69
|
+
return (0, react_query_1.useQuery)({
|
|
70
|
+
queryKey: exports.businessKeys.featured(),
|
|
71
|
+
queryFn: async () => {
|
|
72
|
+
const client = (0, client_1.getApiClient)();
|
|
73
|
+
const response = await client.get('/api/v1/businesses/featured');
|
|
74
|
+
return response.data;
|
|
75
|
+
},
|
|
76
|
+
...options,
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Get nearby businesses based on location
|
|
81
|
+
*
|
|
82
|
+
* @param params - Location parameters (latitude, longitude, radius)
|
|
83
|
+
* @param options - TanStack Query options
|
|
84
|
+
*
|
|
85
|
+
* @example
|
|
86
|
+
* ```tsx
|
|
87
|
+
* const { data, isLoading } = useNearbyBusinesses({
|
|
88
|
+
* lat: 51.5074,
|
|
89
|
+
* long: -0.1278,
|
|
90
|
+
* radius: 5000 // 5km radius
|
|
91
|
+
* });
|
|
92
|
+
* ```
|
|
93
|
+
*/
|
|
94
|
+
function useNearbyBusinesses(params, options) {
|
|
95
|
+
return (0, react_query_1.useQuery)({
|
|
96
|
+
queryKey: exports.businessKeys.nearby(params),
|
|
97
|
+
queryFn: async () => {
|
|
98
|
+
const client = (0, client_1.getApiClient)();
|
|
99
|
+
const response = await client.get('/api/v1/businesses/nearby', {
|
|
100
|
+
params,
|
|
101
|
+
});
|
|
102
|
+
return response.data;
|
|
103
|
+
},
|
|
104
|
+
enabled: !!params.lat && !!params.long,
|
|
105
|
+
...options,
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Get a single business by ID
|
|
110
|
+
*
|
|
111
|
+
* @param id - Business ID
|
|
112
|
+
* @param options - TanStack Query options
|
|
113
|
+
*
|
|
114
|
+
* @example
|
|
115
|
+
* ```tsx
|
|
116
|
+
* const { data, isLoading } = useBusiness('business-123');
|
|
117
|
+
* ```
|
|
118
|
+
*/
|
|
119
|
+
function useBusiness(id, options) {
|
|
120
|
+
return (0, react_query_1.useQuery)({
|
|
121
|
+
queryKey: exports.businessKeys.detail(id),
|
|
122
|
+
queryFn: async () => {
|
|
123
|
+
const client = (0, client_1.getApiClient)();
|
|
124
|
+
const response = await client.get(`/api/v1/businesses/${id}`);
|
|
125
|
+
return response.data;
|
|
126
|
+
},
|
|
127
|
+
enabled: !!id,
|
|
128
|
+
...options,
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Get all offers for a specific business
|
|
133
|
+
*
|
|
134
|
+
* @param businessId - Business ID
|
|
135
|
+
* @param options - TanStack Query options
|
|
136
|
+
*
|
|
137
|
+
* @example
|
|
138
|
+
* ```tsx
|
|
139
|
+
* const { data, isLoading } = useBusinessOffers('business-123');
|
|
140
|
+
* ```
|
|
141
|
+
*/
|
|
142
|
+
function useBusinessOffers(businessId, options) {
|
|
143
|
+
return (0, react_query_1.useQuery)({
|
|
144
|
+
queryKey: exports.businessKeys.offers(businessId),
|
|
145
|
+
queryFn: async () => {
|
|
146
|
+
const client = (0, client_1.getApiClient)();
|
|
147
|
+
const response = await client.get(`/api/v1/businesses/${businessId}/offers`);
|
|
148
|
+
return response.data;
|
|
149
|
+
},
|
|
150
|
+
enabled: !!businessId,
|
|
151
|
+
...options,
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVzaW5lc3Nlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcGkvcXVlcmllcy9idXNpbmVzc2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQTRFQSxzQ0FlQztBQVlELHNEQVlDO0FBaUJELGtEQWdCQztBQWFELGtDQWNDO0FBYUQsOENBY0M7QUExTUQsdURBQWtFO0FBQ2xFLHNDQUF5QztBQUd6QywrRUFBK0U7QUFDL0Usb0JBQW9CO0FBQ3BCLCtFQUErRTtBQUVsRSxRQUFBLFlBQVksR0FBRztJQUMxQixHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQVU7SUFDNUIsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRyxvQkFBWSxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQVU7SUFDbkQsSUFBSSxFQUFFLENBQUMsT0FBeUIsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLG9CQUFZLENBQUMsS0FBSyxFQUFFLEVBQUUsT0FBTyxDQUFVO0lBQ2hGLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsb0JBQVksQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFVO0lBQ3ZELE1BQU0sRUFBRSxDQUFDLEVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLG9CQUFZLENBQUMsT0FBTyxFQUFFLEVBQUUsRUFBRSxDQUFVO0lBQ2hFLFFBQVEsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsb0JBQVksQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFVO0lBQzFELE1BQU0sRUFBRSxDQUFDLE1BQTZCLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxvQkFBWSxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFVO0lBQzNGLE1BQU0sRUFBRSxDQUFDLFVBQWtCLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxvQkFBWSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsRUFBRSxRQUFRLENBQVU7Q0FDeEYsQ0FBQztB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QUM7WUFDOUIsTUFBTSxRQUFRLEdBQUcsTUFBTSxNQUFNLENBQUMsR0FBRyxDQUFDLHNCQUFzQixVQUFVLFNBQVMsQ0FBQyxDQUFDO1lBQzdFLE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQztRQUN2QixDQUFDO1FBQ0QsT0FBTyxFQUFFLENBQUMsQ0FBQyxVQUFVO1FBQ3JCLEdBQUcsT0FBTztLQUNYLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB1c2VRdWVyeSwgVXNlUXVlcnlPcHRpb25zIH0gZnJvbSAnQHRhbnN0YWNrL3JlYWN0LXF1ZXJ5JztcbmltcG9ydCB7IGdldEFwaUNsaWVudCB9IGZyb20gJy4uL2NsaWVudCc7XG5pbXBvcnQgdHlwZSB7IEJ1c2luZXNzUmVzcG9uc2UsIE9mZmVyUmVzcG9uc2UgfSBmcm9tICcuLi90eXBlcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFFVRVJZIEtFWSBGQUNUT1JZXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmV4cG9ydCBjb25zdCBidXNpbmVzc0tleXMgPSB7XG4gIGFsbDogWydidXNpbmVzc2VzJ10gYXMgY29uc3QsXG4gIGxpc3RzOiAoKSA9PiBbLi4uYnVzaW5lc3NLZXlzLmFsbCwgJ2xpc3QnXSBhcyBjb25zdCxcbiAgbGlzdDogKGZpbHRlcnM/OiBCdXNpbmVzc0ZpbHRlcnMpID0+IFsuLi5idXNpbmVzc0tleXMubGlzdHMoKSwgZmlsdGVyc10gYXMgY29uc3QsXG4gIGRldGFpbHM6ICgpID0+IFsuLi5idXNpbmVzc0tleXMuYWxsLCAnZGV0YWlsJ10gYXMgY29uc3QsXG4gIGRldGFpbDogKGlkOiBzdHJpbmcpID0+IFsuLi5idXNpbmVzc0tleXMuZGV0YWlscygpLCBpZF0gYXMgY29uc3QsXG4gIGZlYXR1cmVkOiAoKSA9PiBbLi4uYnVzaW5lc3NLZXlzLmFsbCwgJ2ZlYXR1cmVkJ10gYXMgY29uc3QsXG4gIG5lYXJieTogKHBhcmFtcz86IE5lYXJieUJ1c2luZXNzUGFyYW1zKSA9PiBbLi4uYnVzaW5lc3NLZXlzLmFsbCwgJ25lYXJieScsIHBhcmFtc10gYXMgY29uc3QsXG4gIG9mZmVyczogKGJ1c2luZXNzSWQ6IHN0cmluZykgPT4gWy4uLmJ1c2luZXNzS2V5cy5kZXRhaWwoYnVzaW5lc3NJZCksICdvZmZlcnMnXSBhcyBjb25zdCxcbn07XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFRZUEVTXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmV4cG9ydCBpbnRlcmZhY2UgQnVzaW5lc3NGaWx0ZXJzIHtcbiAgcGFnZT86IG51bWJlcjtcbiAgbGltaXQ/OiBudW1iZXI7XG4gIHNlYXJjaD86IHN0cmluZztcbiAgY2l0eUlkPzogc3RyaW5nO1xuICB0eXBlPzogc3RyaW5nO1xuICBoYXNBZkRyaW5rcz86IGJvb2xlYW47XG4gIGlzQWZWZW51ZT86IGJvb2xlYW47XG4gIGlzRmVhdHVyZWQ/OiBib29sZWFuO1xuICBpc1BhcnRuZXI/OiBib29sZWFuO1xuICBsYXQ/OiBudW1iZXI7XG4gIGxvbmc/OiBudW1iZXI7XG4gIHJhZGl1cz86IG51bWJlcjtcbiAgc29ydEJ5Pzogc3RyaW5nO1xuICBzb3J0T3JkZXI/OiAnYXNjJyB8ICdkZXNjJztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBOZWFyYnlCdXNpbmVzc1BhcmFtcyB7XG4gIGxhdDogbnVtYmVyO1xuICBsb25nOiBudW1iZXI7XG4gIHJhZGl1cz86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQYWdpbmF0ZWRCdXNpbmVzc2VzUmVzcG9uc2Uge1xuICBidXNpbmVzc2VzOiBCdXNpbmVzc1Jlc3BvbnNlW107XG4gIHRvdGFsOiBudW1iZXI7XG4gIHBhZ2U6IG51bWJlcjtcbiAgbGltaXQ6IG51bWJlcjtcbiAgdG90YWxQYWdlczogbnVtYmVyO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBRVUVSWSBIT09LU1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIEdldCBwYWdpbmF0ZWQgbGlzdCBvZiBidXNpbmVzc2VzIHdpdGggb3B0aW9uYWwgZmlsdGVyc1xuICpcbiAqIEBwYXJhbSBmaWx0ZXJzIC0gUXVlcnkgcGFyYW1ldGVycyBmb3IgZmlsdGVyaW5nIGFuZCBwYWdpbmF0aW9uXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRhblN0YWNrIFF1ZXJ5IG9wdGlvbnNcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHN4XG4gKiBjb25zdCB7IGRhdGEsIGlzTG9hZGluZyB9ID0gdXNlQnVzaW5lc3Nlcyh7XG4gKiAgIHBhZ2U6IDEsXG4gKiAgIGxpbWl0OiAyMCxcbiAqICAgY2l0eUlkOiAnY2l0eS0xMjMnLFxuICogICBoYXNBZkRyaW5rczogdHJ1ZSxcbiAqICAgc29ydEJ5OiAnbmFtZScsXG4gKiAgIHNvcnRPcmRlcjogJ2FzYydcbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VCdXNpbmVzc2VzKFxuICBmaWx0ZXJzPzogQnVzaW5lc3NGaWx0ZXJzLFxuICBvcHRpb25zPzogT21pdDxVc2VRdWVyeU9wdGlvbnM8UGFnaW5hdGVkQnVzaW5lc3Nlc1Jlc3BvbnNlPiwgJ3F1ZXJ5S2V5JyB8ICdxdWVyeUZuJz5cbikge1xuICByZXR1cm4gdXNlUXVlcnkoe1xuICAgIHF1ZXJ5S2V5OiBidXNpbmVzc0tleXMubGlzdChmaWx0ZXJzKSxcbiAgICBxdWVyeUZuOiBhc3luYyAoKTogUHJvbWlzZTxQYWdpbmF0ZWRCdXNpbmVzc2VzUmVzcG9uc2U+ID0+IHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IGdldEFwaUNsaWVudCgpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuZ2V0KCcvYXBpL3YxL2J1c2luZXNzZXMnLCB7XG4gICAgICAgIHBhcmFtczogZmlsdGVycyxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG4gICAgfSxcbiAgICAuLi5vcHRpb25zLFxuICB9KTtcbn1cblxuLyoqXG4gKiBHZXQgZmVhdHVyZWQgYnVzaW5lc3Nlc1xuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGFuU3RhY2sgUXVlcnkgb3B0aW9uc1xuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c3hcbiAqIGNvbnN0IHsgZGF0YSwgaXNMb2FkaW5nIH0gPSB1c2VGZWF0dXJlZEJ1c2luZXNzZXMoKTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlRmVhdHVyZWRCdXNpbmVzc2VzKFxuICBvcHRpb25zPzogT21pdDxVc2VRdWVyeU9wdGlvbnM8QnVzaW5lc3NSZXNwb25zZVtdPiwgJ3F1ZXJ5S2V5JyB8ICdxdWVyeUZuJz5cbikge1xuICByZXR1cm4gdXNlUXVlcnkoe1xuICAgIHF1ZXJ5S2V5OiBidXNpbmVzc0tleXMuZmVhdHVyZWQoKSxcbiAgICBxdWVyeUZuOiBhc3luYyAoKTogUHJvbWlzZTxCdXNpbmVzc1Jlc3BvbnNlW10+ID0+IHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IGdldEFwaUNsaWVudCgpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuZ2V0KCcvYXBpL3YxL2J1c2luZXNzZXMvZmVhdHVyZWQnKTtcbiAgICAgIHJldHVybiByZXNwb25zZS5kYXRhO1xuICAgIH0sXG4gICAgLi4ub3B0aW9ucyxcbiAgfSk7XG59XG5cbi8qKlxuICogR2V0IG5lYXJieSBidXNpbmVzc2VzIGJhc2VkIG9uIGxvY2F0aW9uXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIExvY2F0aW9uIHBhcmFtZXRlcnMgKGxhdGl0dWRlLCBsb25naXR1ZGUsIHJhZGl1cylcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGFuU3RhY2sgUXVlcnkgb3B0aW9uc1xuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c3hcbiAqIGNvbnN0IHsgZGF0YSwgaXNMb2FkaW5nIH0gPSB1c2VOZWFyYnlCdXNpbmVzc2VzKHtcbiAqICAgbGF0OiA1MS41MDc0LFxuICogICBsb25nOiAtMC4xMjc4LFxuICogICByYWRpdXM6IDUwMDAgLy8gNWttIHJhZGl1c1xuICogfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZU5lYXJieUJ1c2luZXNzZXMoXG4gIHBhcmFtczogTmVhcmJ5QnVzaW5lc3NQYXJhbXMsXG4gIG9wdGlvbnM/OiBPbWl0PFVzZVF1ZXJ5T3B0aW9uczxCdXNpbmVzc1Jlc3BvbnNlW10+LCAncXVlcnlLZXknIHwgJ3F1ZXJ5Rm4nPlxuKSB7XG4gIHJldHVybiB1c2VRdWVyeSh7XG4gICAgcXVlcnlLZXk6IGJ1c2luZXNzS2V5cy5uZWFyYnkocGFyYW1zKSxcbiAgICBxdWVyeUZuOiBhc3luYyAoKTogUHJvbWlzZTxCdXNpbmVzc1Jlc3BvbnNlW10+ID0+IHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IGdldEFwaUNsaWVudCgpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuZ2V0KCcvYXBpL3YxL2J1c2luZXNzZXMvbmVhcmJ5Jywge1xuICAgICAgICBwYXJhbXMsXG4gICAgICB9KTtcbiAgICAgIHJldHVybiByZXNwb25zZS5kYXRhO1xuICAgIH0sXG4gICAgZW5hYmxlZDogISFwYXJhbXMubGF0ICYmICEhcGFyYW1zLmxvbmcsXG4gICAgLi4ub3B0aW9ucyxcbiAgfSk7XG59XG5cbi8qKlxuICogR2V0IGEgc2luZ2xlIGJ1c2luZXNzIGJ5IElEXG4gKlxuICogQHBhcmFtIGlkIC0gQnVzaW5lc3MgSURcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGFuU3RhY2sgUXVlcnkgb3B0aW9uc1xuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c3hcbiAqIGNvbnN0IHsgZGF0YSwgaXNMb2FkaW5nIH0gPSB1c2VCdXNpbmVzcygnYnVzaW5lc3MtMTIzJyk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUJ1c2luZXNzKFxuICBpZDogc3RyaW5nLFxuICBvcHRpb25zPzogT21pdDxVc2VRdWVyeU9wdGlvbnM8QnVzaW5lc3NSZXNwb25zZT4sICdxdWVyeUtleScgfCAncXVlcnlGbic+XG4pIHtcbiAgcmV0dXJuIHVzZVF1ZXJ5KHtcbiAgICBxdWVyeUtleTogYnVzaW5lc3NLZXlzLmRldGFpbChpZCksXG4gICAgcXVlcnlGbjogYXN5bmMgKCk6IFByb21pc2U8QnVzaW5lc3NSZXNwb25zZT4gPT4ge1xuICAgICAgY29uc3QgY2xpZW50ID0gZ2V0QXBpQ2xpZW50KCk7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5nZXQoYC9hcGkvdjEvYnVzaW5lc3Nlcy8ke2lkfWApO1xuICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG4gICAgfSxcbiAgICBlbmFibGVkOiAhIWlkLFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pO1xufVxuXG4vKipcbiAqIEdldCBhbGwgb2ZmZXJzIGZvciBhIHNwZWNpZmljIGJ1c2luZXNzXG4gKlxuICogQHBhcmFtIGJ1c2luZXNzSWQgLSBCdXNpbmVzcyBJRFxuICogQHBhcmFtIG9wdGlvbnMgLSBUYW5TdGFjayBRdWVyeSBvcHRpb25zXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzeFxuICogY29uc3QgeyBkYXRhLCBpc0xvYWRpbmcgfSA9IHVzZUJ1c2luZXNzT2ZmZXJzKCdidXNpbmVzcy0xMjMnKTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlQnVzaW5lc3NPZmZlcnMoXG4gIGJ1c2luZXNzSWQ6IHN0cmluZyxcbiAgb3B0aW9ucz86IE9taXQ8VXNlUXVlcnlPcHRpb25zPE9mZmVyUmVzcG9uc2VbXT4sICdxdWVyeUtleScgfCAncXVlcnlGbic+XG4pIHtcbiAgcmV0dXJuIHVzZVF1ZXJ5KHtcbiAgICBxdWVyeUtleTogYnVzaW5lc3NLZXlzLm9mZmVycyhidXNpbmVzc0lkKSxcbiAgICBxdWVyeUZuOiBhc3luYyAoKTogUHJvbWlzZTxPZmZlclJlc3BvbnNlW10+ID0+IHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IGdldEFwaUNsaWVudCgpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuZ2V0KGAvYXBpL3YxL2J1c2luZXNzZXMvJHtidXNpbmVzc0lkfS9vZmZlcnNgKTtcbiAgICAgIHJldHVybiByZXNwb25zZS5kYXRhO1xuICAgIH0sXG4gICAgZW5hYmxlZDogISFidXNpbmVzc0lkLFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pO1xufVxuIl19
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { EventChatResponse, ChatMemberResponse, PaginatedMessagesResponse } from '../types';
|
|
2
|
+
export declare const eventChatKeys: {
|
|
3
|
+
all: readonly ["event-chat"];
|
|
4
|
+
chat: (eventId: string) => readonly ["event-chat", "chat", string];
|
|
5
|
+
members: (eventId: string) => readonly ["event-chat", "members", string];
|
|
6
|
+
messages: (eventId: string) => readonly ["event-chat", "messages", string];
|
|
7
|
+
};
|
|
8
|
+
/**
|
|
9
|
+
* Get or create chat for an event
|
|
10
|
+
*/
|
|
11
|
+
export declare function useEventChat(eventId: string | undefined): import("@tanstack/react-query").UseQueryResult<EventChatResponse, Error>;
|
|
12
|
+
/**
|
|
13
|
+
* Get chat members
|
|
14
|
+
*/
|
|
15
|
+
export declare function useEventChatMembers(eventId: string | undefined): import("@tanstack/react-query").UseQueryResult<ChatMemberResponse[], Error>;
|
|
16
|
+
/**
|
|
17
|
+
* Get chat messages with infinite scroll pagination
|
|
18
|
+
*/
|
|
19
|
+
export declare function useEventChatMessages(eventId: string | undefined, limit?: number): import("@tanstack/react-query").UseInfiniteQueryResult<import("@tanstack/react-query").InfiniteData<PaginatedMessagesResponse, unknown>, Error>;
|