@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,181 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Map Mutation Hooks
|
|
4
|
+
*
|
|
5
|
+
* TanStack Query mutation hooks for map-related write operations.
|
|
6
|
+
* These hooks handle updating user location and visibility settings.
|
|
7
|
+
*
|
|
8
|
+
* @module api/mutations/map
|
|
9
|
+
*/
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
exports.useUpdateLocation = useUpdateLocation;
|
|
12
|
+
exports.useUpdateOpenToMeet = useUpdateOpenToMeet;
|
|
13
|
+
const react_query_1 = require("@tanstack/react-query");
|
|
14
|
+
const client_1 = require("../client");
|
|
15
|
+
const map_1 = require("../queries/map");
|
|
16
|
+
const users_1 = require("../queries/users");
|
|
17
|
+
// ============================================================================
|
|
18
|
+
// MUTATION HOOKS
|
|
19
|
+
// ============================================================================
|
|
20
|
+
/**
|
|
21
|
+
* Update current user's location
|
|
22
|
+
*
|
|
23
|
+
* @description
|
|
24
|
+
* Updates the authenticated user's location for display on the member map.
|
|
25
|
+
* Location is only visible to other users if the user has enabled "open to meet".
|
|
26
|
+
*
|
|
27
|
+
* @endpoint PUT /api/v1/map/location
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* ```tsx
|
|
31
|
+
* import { useUpdateLocation } from '@growsober/sdk';
|
|
32
|
+
*
|
|
33
|
+
* function LocationUpdater() {
|
|
34
|
+
* const updateLocation = useUpdateLocation();
|
|
35
|
+
*
|
|
36
|
+
* const handleLocationUpdate = async () => {
|
|
37
|
+
* // Get current position from device
|
|
38
|
+
* navigator.geolocation.getCurrentPosition(
|
|
39
|
+
* async (position) => {
|
|
40
|
+
* await updateLocation.mutateAsync({
|
|
41
|
+
* lat: position.coords.latitude,
|
|
42
|
+
* lng: position.coords.longitude,
|
|
43
|
+
* });
|
|
44
|
+
* },
|
|
45
|
+
* (error) => console.error('Location error:', error)
|
|
46
|
+
* );
|
|
47
|
+
* };
|
|
48
|
+
*
|
|
49
|
+
* return (
|
|
50
|
+
* <button onClick={handleLocationUpdate} disabled={updateLocation.isPending}>
|
|
51
|
+
* Update My Location
|
|
52
|
+
* </button>
|
|
53
|
+
* );
|
|
54
|
+
* }
|
|
55
|
+
* ```
|
|
56
|
+
*
|
|
57
|
+
* @example
|
|
58
|
+
* With Expo Location:
|
|
59
|
+
* ```tsx
|
|
60
|
+
* import * as Location from 'expo-location';
|
|
61
|
+
* import { useUpdateLocation } from '@growsober/sdk';
|
|
62
|
+
*
|
|
63
|
+
* function App() {
|
|
64
|
+
* const updateLocation = useUpdateLocation();
|
|
65
|
+
*
|
|
66
|
+
* useEffect(() => {
|
|
67
|
+
* (async () => {
|
|
68
|
+
* const { status } = await Location.requestForegroundPermissionsAsync();
|
|
69
|
+
* if (status === 'granted') {
|
|
70
|
+
* const location = await Location.getCurrentPositionAsync({});
|
|
71
|
+
* updateLocation.mutate({
|
|
72
|
+
* lat: location.coords.latitude,
|
|
73
|
+
* lng: location.coords.longitude,
|
|
74
|
+
* });
|
|
75
|
+
* }
|
|
76
|
+
* })();
|
|
77
|
+
* }, []);
|
|
78
|
+
* }
|
|
79
|
+
* ```
|
|
80
|
+
*
|
|
81
|
+
* @param options - TanStack Query mutation options
|
|
82
|
+
* @returns TanStack Query mutation result
|
|
83
|
+
*/
|
|
84
|
+
function useUpdateLocation(options) {
|
|
85
|
+
const queryClient = (0, react_query_1.useQueryClient)();
|
|
86
|
+
return (0, react_query_1.useMutation)({
|
|
87
|
+
mutationFn: async (data) => {
|
|
88
|
+
const client = (0, client_1.getApiClient)();
|
|
89
|
+
const response = await client.put('/api/v1/map/location', data);
|
|
90
|
+
return response.data;
|
|
91
|
+
},
|
|
92
|
+
onSuccess: () => {
|
|
93
|
+
// Invalidate map queries to reflect new location
|
|
94
|
+
queryClient.invalidateQueries({ queryKey: map_1.mapKeys.members() });
|
|
95
|
+
// Also invalidate user data as location is stored on user
|
|
96
|
+
queryClient.invalidateQueries({ queryKey: users_1.userKeys.me() });
|
|
97
|
+
},
|
|
98
|
+
...options,
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Toggle "open to meet" status
|
|
103
|
+
*
|
|
104
|
+
* @description
|
|
105
|
+
* Updates the user's "open to meet" visibility setting.
|
|
106
|
+
* When enabled, the user's location will be visible to other premium members on the map.
|
|
107
|
+
* Premium feature.
|
|
108
|
+
*
|
|
109
|
+
* @endpoint PUT /api/v1/map/open-to-meet
|
|
110
|
+
*
|
|
111
|
+
* @example
|
|
112
|
+
* ```tsx
|
|
113
|
+
* import { useUpdateOpenToMeet } from '@growsober/sdk';
|
|
114
|
+
*
|
|
115
|
+
* function OpenToMeetToggle() {
|
|
116
|
+
* const updateOpenToMeet = useUpdateOpenToMeet();
|
|
117
|
+
* const [isOpen, setIsOpen] = useState(false);
|
|
118
|
+
*
|
|
119
|
+
* const handleToggle = async () => {
|
|
120
|
+
* const newValue = !isOpen;
|
|
121
|
+
* await updateOpenToMeet.mutateAsync({ openToMeet: newValue });
|
|
122
|
+
* setIsOpen(newValue);
|
|
123
|
+
* };
|
|
124
|
+
*
|
|
125
|
+
* return (
|
|
126
|
+
* <Switch
|
|
127
|
+
* checked={isOpen}
|
|
128
|
+
* onChange={handleToggle}
|
|
129
|
+
* disabled={updateOpenToMeet.isPending}
|
|
130
|
+
* />
|
|
131
|
+
* );
|
|
132
|
+
* }
|
|
133
|
+
* ```
|
|
134
|
+
*
|
|
135
|
+
* @example
|
|
136
|
+
* With user state:
|
|
137
|
+
* ```tsx
|
|
138
|
+
* import { useCurrentUser, useUpdateOpenToMeet } from '@growsober/sdk';
|
|
139
|
+
*
|
|
140
|
+
* function OpenToMeetSetting() {
|
|
141
|
+
* const { data: user } = useCurrentUser();
|
|
142
|
+
* const updateOpenToMeet = useUpdateOpenToMeet({
|
|
143
|
+
* onSuccess: (data) => {
|
|
144
|
+
* console.log(data.openToMeet ? 'Now visible on map!' : 'Hidden from map');
|
|
145
|
+
* },
|
|
146
|
+
* });
|
|
147
|
+
*
|
|
148
|
+
* return (
|
|
149
|
+
* <div>
|
|
150
|
+
* <label>Open to Meet</label>
|
|
151
|
+
* <Switch
|
|
152
|
+
* checked={user?.openToMeet}
|
|
153
|
+
* onChange={(checked) => updateOpenToMeet.mutate({ openToMeet: checked })}
|
|
154
|
+
* />
|
|
155
|
+
* <p>Show your location to other members</p>
|
|
156
|
+
* </div>
|
|
157
|
+
* );
|
|
158
|
+
* }
|
|
159
|
+
* ```
|
|
160
|
+
*
|
|
161
|
+
* @param options - TanStack Query mutation options
|
|
162
|
+
* @returns TanStack Query mutation result
|
|
163
|
+
*/
|
|
164
|
+
function useUpdateOpenToMeet(options) {
|
|
165
|
+
const queryClient = (0, react_query_1.useQueryClient)();
|
|
166
|
+
return (0, react_query_1.useMutation)({
|
|
167
|
+
mutationFn: async (data) => {
|
|
168
|
+
const client = (0, client_1.getApiClient)();
|
|
169
|
+
const response = await client.put('/api/v1/map/open-to-meet', data);
|
|
170
|
+
return response.data;
|
|
171
|
+
},
|
|
172
|
+
onSuccess: () => {
|
|
173
|
+
// Invalidate user data to reflect new setting
|
|
174
|
+
queryClient.invalidateQueries({ queryKey: users_1.userKeys.me() });
|
|
175
|
+
// Invalidate map queries as visibility has changed
|
|
176
|
+
queryClient.invalidateQueries({ queryKey: map_1.mapKeys.members() });
|
|
177
|
+
},
|
|
178
|
+
...options,
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwaS9tdXRhdGlvbnMvbWFwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7OztHQU9HOztBQTJHSCw4Q0F5QkM7QUFpRUQsa0RBeUJDO0FBNU5ELHVEQUsrQjtBQUMvQixzQ0FBeUM7QUFDekMsd0NBQXlDO0FBQ3pDLDRDQUE0QztBQTZCNUMsK0VBQStFO0FBQy9FLGlCQUFpQjtBQUNqQiwrRUFBK0U7QUFFL0U7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQStERztBQUNILFNBQWdCLGlCQUFpQixDQUMvQixPQUdDO0lBRUQsTUFBTSxXQUFXLEdBQUcsSUFBQSw0QkFBYyxHQUFFLENBQUM7SUFFckMsT0FBTyxJQUFBLHlCQUFXLEVBQUM7UUFDakIsVUFBVSxFQUFFLEtBQUssRUFBRSxJQUEyQixFQUFtQyxFQUFFO1lBQ2pGLE1BQU0sTUFBTSxHQUFHLElBQUEscUJBQVksR0FBRSxDQUFDO1lBQzlCLE1BQU0sUUFBUSxHQUFHLE1BQU0sTUFBTSxDQUFDLEdBQUcsQ0FDL0Isc0JBQXNCLEVBQ3RCLElBQUksQ0FDTCxDQUFDO1lBQ0YsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDO1FBQ3ZCLENBQUM7UUFDRCxTQUFTLEVBQUUsR0FBRyxFQUFFO1lBQ2QsaURBQWlEO1lBQ2pELFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLFFBQVEsRUFBRSxhQUFPLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQy9ELDBEQUEwRDtZQUMxRCxXQUFXLENBQUMsaUJBQWlCLENBQUMsRUFBRSxRQUFRLEVBQUUsZ0JBQVEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDN0QsQ0FBQztRQUNELEdBQUcsT0FBTztLQUNYLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E4REc7QUFDSCxTQUFnQixtQkFBbUIsQ0FDakMsT0FHQztJQUVELE1BQU0sV0FBVyxHQUFHLElBQUEsNEJBQWMsR0FBRSxDQUFDO0lBRXJDLE9BQU8sSUFBQSx5QkFBVyxFQUFDO1FBQ2pCLFVBQVUsRUFBRSxLQUFLLEVBQUUsSUFBNkIsRUFBK0IsRUFBRTtZQUMvRSxNQUFNLE1BQU0sR0FBRyxJQUFBLHFCQUFZLEdBQUUsQ0FBQztZQUM5QixNQUFNLFFBQVEsR0FBRyxNQUFNLE1BQU0sQ0FBQyxHQUFHLENBQy9CLDBCQUEwQixFQUMxQixJQUFJLENBQ0wsQ0FBQztZQUNGLE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQztRQUN2QixDQUFDO1FBQ0QsU0FBUyxFQUFFLEdBQUcsRUFBRTtZQUNkLDhDQUE4QztZQUM5QyxXQUFXLENBQUMsaUJBQWlCLENBQUMsRUFBRSxRQUFRLEVBQUUsZ0JBQVEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDM0QsbURBQW1EO1lBQ25ELFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLFFBQVEsRUFBRSxhQUFPLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ2pFLENBQUM7UUFDRCxHQUFHLE9BQU87S0FDWCxDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBNYXAgTXV0YXRpb24gSG9va3NcbiAqXG4gKiBUYW5TdGFjayBRdWVyeSBtdXRhdGlvbiBob29rcyBmb3IgbWFwLXJlbGF0ZWQgd3JpdGUgb3BlcmF0aW9ucy5cbiAqIFRoZXNlIGhvb2tzIGhhbmRsZSB1cGRhdGluZyB1c2VyIGxvY2F0aW9uIGFuZCB2aXNpYmlsaXR5IHNldHRpbmdzLlxuICpcbiAqIEBtb2R1bGUgYXBpL211dGF0aW9ucy9tYXBcbiAqL1xuXG5pbXBvcnQge1xuICB1c2VNdXRhdGlvbixcbiAgVXNlTXV0YXRpb25PcHRpb25zLFxuICBVc2VNdXRhdGlvblJlc3VsdCxcbiAgdXNlUXVlcnlDbGllbnQsXG59IGZyb20gJ0B0YW5zdGFjay9yZWFjdC1xdWVyeSc7XG5pbXBvcnQgeyBnZXRBcGlDbGllbnQgfSBmcm9tICcuLi9jbGllbnQnO1xuaW1wb3J0IHsgbWFwS2V5cyB9IGZyb20gJy4uL3F1ZXJpZXMvbWFwJztcbmltcG9ydCB7IHVzZXJLZXlzIH0gZnJvbSAnLi4vcXVlcmllcy91c2Vycyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFJFUVVFU1QgVFlQRVNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IGludGVyZmFjZSBVcGRhdGVMb2NhdGlvblJlcXVlc3Qge1xuICBsYXQ6IG51bWJlcjtcbiAgbG5nOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVXBkYXRlT3BlblRvTWVldFJlcXVlc3Qge1xuICBvcGVuVG9NZWV0OiBib29sZWFuO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBSRVNQT05TRSBUWVBFU1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnQgaW50ZXJmYWNlIExvY2F0aW9uVXBkYXRlUmVzcG9uc2Uge1xuICBzdWNjZXNzOiBib29sZWFuO1xuICBtZXNzYWdlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3BlblRvTWVldFJlc3BvbnNlIHtcbiAgb3BlblRvTWVldDogYm9vbGVhbjtcbiAgbWVzc2FnZTogc3RyaW5nO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBNVVRBVElPTiBIT09LU1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIFVwZGF0ZSBjdXJyZW50IHVzZXIncyBsb2NhdGlvblxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogVXBkYXRlcyB0aGUgYXV0aGVudGljYXRlZCB1c2VyJ3MgbG9jYXRpb24gZm9yIGRpc3BsYXkgb24gdGhlIG1lbWJlciBtYXAuXG4gKiBMb2NhdGlvbiBpcyBvbmx5IHZpc2libGUgdG8gb3RoZXIgdXNlcnMgaWYgdGhlIHVzZXIgaGFzIGVuYWJsZWQgXCJvcGVuIHRvIG1lZXRcIi5cbiAqXG4gKiBAZW5kcG9pbnQgUFVUIC9hcGkvdjEvbWFwL2xvY2F0aW9uXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzeFxuICogaW1wb3J0IHsgdXNlVXBkYXRlTG9jYXRpb24gfSBmcm9tICdAZ3Jvd3NvYmVyL3Nkayc7XG4gKlxuICogZnVuY3Rpb24gTG9jYXRpb25VcGRhdGVyKCkge1xuICogICBjb25zdCB1cGRhdGVMb2NhdGlvbiA9IHVzZVVwZGF0ZUxvY2F0aW9uKCk7XG4gKlxuICogICBjb25zdCBoYW5kbGVMb2NhdGlvblVwZGF0ZSA9IGFzeW5jICgpID0+IHtcbiAqICAgICAvLyBHZXQgY3VycmVudCBwb3NpdGlvbiBmcm9tIGRldmljZVxuICogICAgIG5hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oXG4gKiAgICAgICBhc3luYyAocG9zaXRpb24pID0+IHtcbiAqICAgICAgICAgYXdhaXQgdXBkYXRlTG9jYXRpb24ubXV0YXRlQXN5bmMoe1xuICogICAgICAgICAgIGxhdDogcG9zaXRpb24uY29vcmRzLmxhdGl0dWRlLFxuICogICAgICAgICAgIGxuZzogcG9zaXRpb24uY29vcmRzLmxvbmdpdHVkZSxcbiAqICAgICAgICAgfSk7XG4gKiAgICAgICB9LFxuICogICAgICAgKGVycm9yKSA9PiBjb25zb2xlLmVycm9yKCdMb2NhdGlvbiBlcnJvcjonLCBlcnJvcilcbiAqICAgICApO1xuICogICB9O1xuICpcbiAqICAgcmV0dXJuIChcbiAqICAgICA8YnV0dG9uIG9uQ2xpY2s9e2hhbmRsZUxvY2F0aW9uVXBkYXRlfSBkaXNhYmxlZD17dXBkYXRlTG9jYXRpb24uaXNQZW5kaW5nfT5cbiAqICAgICAgIFVwZGF0ZSBNeSBMb2NhdGlvblxuICogICAgIDwvYnV0dG9uPlxuICogICApO1xuICogfVxuICogYGBgXG4gKlxuICogQGV4YW1wbGVcbiAqIFdpdGggRXhwbyBMb2NhdGlvbjpcbiAqIGBgYHRzeFxuICogaW1wb3J0ICogYXMgTG9jYXRpb24gZnJvbSAnZXhwby1sb2NhdGlvbic7XG4gKiBpbXBvcnQgeyB1c2VVcGRhdGVMb2NhdGlvbiB9IGZyb20gJ0Bncm93c29iZXIvc2RrJztcbiAqXG4gKiBmdW5jdGlvbiBBcHAoKSB7XG4gKiAgIGNvbnN0IHVwZGF0ZUxvY2F0aW9uID0gdXNlVXBkYXRlTG9jYXRpb24oKTtcbiAqXG4gKiAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gKiAgICAgKGFzeW5jICgpID0+IHtcbiAqICAgICAgIGNvbnN0IHsgc3RhdHVzIH0gPSBhd2FpdCBMb2NhdGlvbi5yZXF1ZXN0Rm9yZWdyb3VuZFBlcm1pc3Npb25zQXN5bmMoKTtcbiAqICAgICAgIGlmIChzdGF0dXMgPT09ICdncmFudGVkJykge1xuICogICAgICAgICBjb25zdCBsb2NhdGlvbiA9IGF3YWl0IExvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbkFzeW5jKHt9KTtcbiAqICAgICAgICAgdXBkYXRlTG9jYXRpb24ubXV0YXRlKHtcbiAqICAgICAgICAgICBsYXQ6IGxvY2F0aW9uLmNvb3Jkcy5sYXRpdHVkZSxcbiAqICAgICAgICAgICBsbmc6IGxvY2F0aW9uLmNvb3Jkcy5sb25naXR1ZGUsXG4gKiAgICAgICAgIH0pO1xuICogICAgICAgfVxuICogICAgIH0pKCk7XG4gKiAgIH0sIFtdKTtcbiAqIH1cbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGFuU3RhY2sgUXVlcnkgbXV0YXRpb24gb3B0aW9uc1xuICogQHJldHVybnMgVGFuU3RhY2sgUXVlcnkgbXV0YXRpb24gcmVzdWx0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VVcGRhdGVMb2NhdGlvbihcbiAgb3B0aW9ucz86IE9taXQ8XG4gICAgVXNlTXV0YXRpb25PcHRpb25zPExvY2F0aW9uVXBkYXRlUmVzcG9uc2UsIEVycm9yLCBVcGRhdGVMb2NhdGlvblJlcXVlc3Q+LFxuICAgICdtdXRhdGlvbkZuJ1xuICA+XG4pOiBVc2VNdXRhdGlvblJlc3VsdDxMb2NhdGlvblVwZGF0ZVJlc3BvbnNlLCBFcnJvciwgVXBkYXRlTG9jYXRpb25SZXF1ZXN0PiB7XG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gdXNlUXVlcnlDbGllbnQoKTtcblxuICByZXR1cm4gdXNlTXV0YXRpb24oe1xuICAgIG11dGF0aW9uRm46IGFzeW5jIChkYXRhOiBVcGRhdGVMb2NhdGlvblJlcXVlc3QpOiBQcm9taXNlPExvY2F0aW9uVXBkYXRlUmVzcG9uc2U+ID0+IHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IGdldEFwaUNsaWVudCgpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQucHV0PExvY2F0aW9uVXBkYXRlUmVzcG9uc2U+KFxuICAgICAgICAnL2FwaS92MS9tYXAvbG9jYXRpb24nLFxuICAgICAgICBkYXRhXG4gICAgICApO1xuICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG4gICAgfSxcbiAgICBvblN1Y2Nlc3M6ICgpID0+IHtcbiAgICAgIC8vIEludmFsaWRhdGUgbWFwIHF1ZXJpZXMgdG8gcmVmbGVjdCBuZXcgbG9jYXRpb25cbiAgICAgIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHsgcXVlcnlLZXk6IG1hcEtleXMubWVtYmVycygpIH0pO1xuICAgICAgLy8gQWxzbyBpbnZhbGlkYXRlIHVzZXIgZGF0YSBhcyBsb2NhdGlvbiBpcyBzdG9yZWQgb24gdXNlclxuICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoeyBxdWVyeUtleTogdXNlcktleXMubWUoKSB9KTtcbiAgICB9LFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pO1xufVxuXG4vKipcbiAqIFRvZ2dsZSBcIm9wZW4gdG8gbWVldFwiIHN0YXR1c1xuICpcbiAqIEBkZXNjcmlwdGlvblxuICogVXBkYXRlcyB0aGUgdXNlcidzIFwib3BlbiB0byBtZWV0XCIgdmlzaWJpbGl0eSBzZXR0aW5nLlxuICogV2hlbiBlbmFibGVkLCB0aGUgdXNlcidzIGxvY2F0aW9uIHdpbGwgYmUgdmlzaWJsZSB0byBvdGhlciBwcmVtaXVtIG1lbWJlcnMgb24gdGhlIG1hcC5cbiAqIFByZW1pdW0gZmVhdHVyZS5cbiAqXG4gKiBAZW5kcG9pbnQgUFVUIC9hcGkvdjEvbWFwL29wZW4tdG8tbWVldFxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c3hcbiAqIGltcG9ydCB7IHVzZVVwZGF0ZU9wZW5Ub01lZXQgfSBmcm9tICdAZ3Jvd3NvYmVyL3Nkayc7XG4gKlxuICogZnVuY3Rpb24gT3BlblRvTWVldFRvZ2dsZSgpIHtcbiAqICAgY29uc3QgdXBkYXRlT3BlblRvTWVldCA9IHVzZVVwZGF0ZU9wZW5Ub01lZXQoKTtcbiAqICAgY29uc3QgW2lzT3Blbiwgc2V0SXNPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAqXG4gKiAgIGNvbnN0IGhhbmRsZVRvZ2dsZSA9IGFzeW5jICgpID0+IHtcbiAqICAgICBjb25zdCBuZXdWYWx1ZSA9ICFpc09wZW47XG4gKiAgICAgYXdhaXQgdXBkYXRlT3BlblRvTWVldC5tdXRhdGVBc3luYyh7IG9wZW5Ub01lZXQ6IG5ld1ZhbHVlIH0pO1xuICogICAgIHNldElzT3BlbihuZXdWYWx1ZSk7XG4gKiAgIH07XG4gKlxuICogICByZXR1cm4gKFxuICogICAgIDxTd2l0Y2hcbiAqICAgICAgIGNoZWNrZWQ9e2lzT3Blbn1cbiAqICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVUb2dnbGV9XG4gKiAgICAgICBkaXNhYmxlZD17dXBkYXRlT3BlblRvTWVldC5pc1BlbmRpbmd9XG4gKiAgICAgLz5cbiAqICAgKTtcbiAqIH1cbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlXG4gKiBXaXRoIHVzZXIgc3RhdGU6XG4gKiBgYGB0c3hcbiAqIGltcG9ydCB7IHVzZUN1cnJlbnRVc2VyLCB1c2VVcGRhdGVPcGVuVG9NZWV0IH0gZnJvbSAnQGdyb3dzb2Jlci9zZGsnO1xuICpcbiAqIGZ1bmN0aW9uIE9wZW5Ub01lZXRTZXR0aW5nKCkge1xuICogICBjb25zdCB7IGRhdGE6IHVzZXIgfSA9IHVzZUN1cnJlbnRVc2VyKCk7XG4gKiAgIGNvbnN0IHVwZGF0ZU9wZW5Ub01lZXQgPSB1c2VVcGRhdGVPcGVuVG9NZWV0KHtcbiAqICAgICBvblN1Y2Nlc3M6IChkYXRhKSA9PiB7XG4gKiAgICAgICBjb25zb2xlLmxvZyhkYXRhLm9wZW5Ub01lZXQgPyAnTm93IHZpc2libGUgb24gbWFwIScgOiAnSGlkZGVuIGZyb20gbWFwJyk7XG4gKiAgICAgfSxcbiAqICAgfSk7XG4gKlxuICogICByZXR1cm4gKFxuICogICAgIDxkaXY+XG4gKiAgICAgICA8bGFiZWw+T3BlbiB0byBNZWV0PC9sYWJlbD5cbiAqICAgICAgIDxTd2l0Y2hcbiAqICAgICAgICAgY2hlY2tlZD17dXNlcj8ub3BlblRvTWVldH1cbiAqICAgICAgICAgb25DaGFuZ2U9eyhjaGVja2VkKSA9PiB1cGRhdGVPcGVuVG9NZWV0Lm11dGF0ZSh7IG9wZW5Ub01lZXQ6IGNoZWNrZWQgfSl9XG4gKiAgICAgICAvPlxuICogICAgICAgPHA+U2hvdyB5b3VyIGxvY2F0aW9uIHRvIG90aGVyIG1lbWJlcnM8L3A+XG4gKiAgICAgPC9kaXY+XG4gKiAgICk7XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRhblN0YWNrIFF1ZXJ5IG11dGF0aW9uIG9wdGlvbnNcbiAqIEByZXR1cm5zIFRhblN0YWNrIFF1ZXJ5IG11dGF0aW9uIHJlc3VsdFxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlVXBkYXRlT3BlblRvTWVldChcbiAgb3B0aW9ucz86IE9taXQ8XG4gICAgVXNlTXV0YXRpb25PcHRpb25zPE9wZW5Ub01lZXRSZXNwb25zZSwgRXJyb3IsIFVwZGF0ZU9wZW5Ub01lZXRSZXF1ZXN0PixcbiAgICAnbXV0YXRpb25GbidcbiAgPlxuKTogVXNlTXV0YXRpb25SZXN1bHQ8T3BlblRvTWVldFJlc3BvbnNlLCBFcnJvciwgVXBkYXRlT3BlblRvTWVldFJlcXVlc3Q+IHtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSB1c2VRdWVyeUNsaWVudCgpO1xuXG4gIHJldHVybiB1c2VNdXRhdGlvbih7XG4gICAgbXV0YXRpb25GbjogYXN5bmMgKGRhdGE6IFVwZGF0ZU9wZW5Ub01lZXRSZXF1ZXN0KTogUHJvbWlzZTxPcGVuVG9NZWV0UmVzcG9uc2U+ID0+IHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IGdldEFwaUNsaWVudCgpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQucHV0PE9wZW5Ub01lZXRSZXNwb25zZT4oXG4gICAgICAgICcvYXBpL3YxL21hcC9vcGVuLXRvLW1lZXQnLFxuICAgICAgICBkYXRhXG4gICAgICApO1xuICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG4gICAgfSxcbiAgICBvblN1Y2Nlc3M6ICgpID0+IHtcbiAgICAgIC8vIEludmFsaWRhdGUgdXNlciBkYXRhIHRvIHJlZmxlY3QgbmV3IHNldHRpbmdcbiAgICAgIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHsgcXVlcnlLZXk6IHVzZXJLZXlzLm1lKCkgfSk7XG4gICAgICAvLyBJbnZhbGlkYXRlIG1hcCBxdWVyaWVzIGFzIHZpc2liaWxpdHkgaGFzIGNoYW5nZWRcbiAgICAgIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHsgcXVlcnlLZXk6IG1hcEtleXMubWVtYmVycygpIH0pO1xuICAgIH0sXG4gICAgLi4ub3B0aW9ucyxcbiAgfSk7XG59XG4iXX0=
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import { UseMutationOptions, UseMutationResult } from '@tanstack/react-query';
|
|
2
|
+
import { MatchResponse, BuddyResponse } from '../queries/matching';
|
|
3
|
+
export interface CreateMatchRequest {
|
|
4
|
+
matchedUserId: string;
|
|
5
|
+
message?: string;
|
|
6
|
+
}
|
|
7
|
+
export interface UpdateMatchRequest {
|
|
8
|
+
status: 'ACCEPTED' | 'DECLINED' | 'BLOCKED';
|
|
9
|
+
}
|
|
10
|
+
export interface CreateBuddyRequest {
|
|
11
|
+
buddyId: string;
|
|
12
|
+
message?: string;
|
|
13
|
+
}
|
|
14
|
+
export interface UpdateBuddyRequest {
|
|
15
|
+
status: 'ACCEPTED' | 'DECLINED' | 'ENDED';
|
|
16
|
+
}
|
|
17
|
+
export interface LogBuddyActivityRequest {
|
|
18
|
+
type: 'CHECK_IN' | 'MESSAGE' | 'SUPPORT';
|
|
19
|
+
note?: string;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Create a new match request
|
|
23
|
+
*
|
|
24
|
+
* @endpoint POST /api/v1/matching/matches
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```tsx
|
|
28
|
+
* const createMatch = useCreateMatch();
|
|
29
|
+
* await createMatch.mutateAsync({ matchedUserId: 'user-123' });
|
|
30
|
+
* ```
|
|
31
|
+
*/
|
|
32
|
+
export declare function useCreateMatch(options?: Omit<UseMutationOptions<MatchResponse, Error, CreateMatchRequest>, 'mutationFn'>): UseMutationResult<MatchResponse, Error, CreateMatchRequest>;
|
|
33
|
+
/**
|
|
34
|
+
* Update match status (accept/decline/block)
|
|
35
|
+
*
|
|
36
|
+
* @endpoint PUT /api/v1/matching/matches/:matchId
|
|
37
|
+
*
|
|
38
|
+
* @example
|
|
39
|
+
* ```tsx
|
|
40
|
+
* const updateMatch = useUpdateMatch();
|
|
41
|
+
* await updateMatch.mutateAsync({ matchId: 'match-123', status: 'ACCEPTED' });
|
|
42
|
+
* ```
|
|
43
|
+
*/
|
|
44
|
+
export declare function useUpdateMatch(options?: Omit<UseMutationOptions<MatchResponse, Error, {
|
|
45
|
+
matchId: string;
|
|
46
|
+
data: UpdateMatchRequest;
|
|
47
|
+
}>, 'mutationFn'>): UseMutationResult<MatchResponse, Error, {
|
|
48
|
+
matchId: string;
|
|
49
|
+
data: UpdateMatchRequest;
|
|
50
|
+
}>;
|
|
51
|
+
/**
|
|
52
|
+
* Accept a match (convenience hook)
|
|
53
|
+
*
|
|
54
|
+
* @example
|
|
55
|
+
* ```tsx
|
|
56
|
+
* const acceptMatch = useAcceptMatch();
|
|
57
|
+
* await acceptMatch.mutateAsync('match-123');
|
|
58
|
+
* ```
|
|
59
|
+
*/
|
|
60
|
+
export declare function useAcceptMatch(options?: Omit<UseMutationOptions<MatchResponse, Error, string>, 'mutationFn'>): UseMutationResult<MatchResponse, Error, string>;
|
|
61
|
+
/**
|
|
62
|
+
* Decline a match (convenience hook)
|
|
63
|
+
*
|
|
64
|
+
* @example
|
|
65
|
+
* ```tsx
|
|
66
|
+
* const declineMatch = useDeclineMatch();
|
|
67
|
+
* await declineMatch.mutateAsync('match-123');
|
|
68
|
+
* ```
|
|
69
|
+
*/
|
|
70
|
+
export declare function useDeclineMatch(options?: Omit<UseMutationOptions<MatchResponse, Error, string>, 'mutationFn'>): UseMutationResult<MatchResponse, Error, string>;
|
|
71
|
+
/**
|
|
72
|
+
* Delete a match
|
|
73
|
+
*
|
|
74
|
+
* @endpoint DELETE /api/v1/matching/matches/:matchId
|
|
75
|
+
*
|
|
76
|
+
* @example
|
|
77
|
+
* ```tsx
|
|
78
|
+
* const deleteMatch = useDeleteMatch();
|
|
79
|
+
* await deleteMatch.mutateAsync('match-123');
|
|
80
|
+
* ```
|
|
81
|
+
*/
|
|
82
|
+
export declare function useDeleteMatch(options?: Omit<UseMutationOptions<void, Error, string>, 'mutationFn'>): UseMutationResult<void, Error, string>;
|
|
83
|
+
/**
|
|
84
|
+
* Request someone as accountability buddy
|
|
85
|
+
*
|
|
86
|
+
* @endpoint POST /api/v1/matching/buddies
|
|
87
|
+
*
|
|
88
|
+
* @example
|
|
89
|
+
* ```tsx
|
|
90
|
+
* const requestBuddy = useRequestBuddy();
|
|
91
|
+
* await requestBuddy.mutateAsync({ buddyId: 'user-123' });
|
|
92
|
+
* ```
|
|
93
|
+
*/
|
|
94
|
+
export declare function useRequestBuddy(options?: Omit<UseMutationOptions<BuddyResponse, Error, CreateBuddyRequest>, 'mutationFn'>): UseMutationResult<BuddyResponse, Error, CreateBuddyRequest>;
|
|
95
|
+
/**
|
|
96
|
+
* Update buddy request (accept/decline/end)
|
|
97
|
+
*
|
|
98
|
+
* @endpoint PUT /api/v1/matching/buddies/:buddyId
|
|
99
|
+
*
|
|
100
|
+
* @example
|
|
101
|
+
* ```tsx
|
|
102
|
+
* const updateBuddy = useUpdateBuddy();
|
|
103
|
+
* await updateBuddy.mutateAsync({ buddyId: 'buddy-123', data: { status: 'ACCEPTED' } });
|
|
104
|
+
* ```
|
|
105
|
+
*/
|
|
106
|
+
export declare function useUpdateBuddy(options?: Omit<UseMutationOptions<BuddyResponse, Error, {
|
|
107
|
+
buddyId: string;
|
|
108
|
+
data: UpdateBuddyRequest;
|
|
109
|
+
}>, 'mutationFn'>): UseMutationResult<BuddyResponse, Error, {
|
|
110
|
+
buddyId: string;
|
|
111
|
+
data: UpdateBuddyRequest;
|
|
112
|
+
}>;
|
|
113
|
+
/**
|
|
114
|
+
* Log activity with buddy (check-in, message)
|
|
115
|
+
*
|
|
116
|
+
* @endpoint POST /api/v1/matching/buddies/:buddyId/activity
|
|
117
|
+
*
|
|
118
|
+
* @example
|
|
119
|
+
* ```tsx
|
|
120
|
+
* const logActivity = useLogBuddyActivity();
|
|
121
|
+
* await logActivity.mutateAsync({ buddyId: 'buddy-123', data: { type: 'CHECK_IN' } });
|
|
122
|
+
* ```
|
|
123
|
+
*/
|
|
124
|
+
export declare function useLogBuddyActivity(options?: Omit<UseMutationOptions<void, Error, {
|
|
125
|
+
buddyId: string;
|
|
126
|
+
data: LogBuddyActivityRequest;
|
|
127
|
+
}>, 'mutationFn'>): UseMutationResult<void, Error, {
|
|
128
|
+
buddyId: string;
|
|
129
|
+
data: LogBuddyActivityRequest;
|
|
130
|
+
}>;
|
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.useCreateMatch = useCreateMatch;
|
|
4
|
+
exports.useUpdateMatch = useUpdateMatch;
|
|
5
|
+
exports.useAcceptMatch = useAcceptMatch;
|
|
6
|
+
exports.useDeclineMatch = useDeclineMatch;
|
|
7
|
+
exports.useDeleteMatch = useDeleteMatch;
|
|
8
|
+
exports.useRequestBuddy = useRequestBuddy;
|
|
9
|
+
exports.useUpdateBuddy = useUpdateBuddy;
|
|
10
|
+
exports.useLogBuddyActivity = useLogBuddyActivity;
|
|
11
|
+
const react_query_1 = require("@tanstack/react-query");
|
|
12
|
+
const client_1 = require("../client");
|
|
13
|
+
const matching_1 = require("../queries/matching");
|
|
14
|
+
// ============================================================================
|
|
15
|
+
// MUTATION HOOKS
|
|
16
|
+
// ============================================================================
|
|
17
|
+
/**
|
|
18
|
+
* Create a new match request
|
|
19
|
+
*
|
|
20
|
+
* @endpoint POST /api/v1/matching/matches
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* ```tsx
|
|
24
|
+
* const createMatch = useCreateMatch();
|
|
25
|
+
* await createMatch.mutateAsync({ matchedUserId: 'user-123' });
|
|
26
|
+
* ```
|
|
27
|
+
*/
|
|
28
|
+
function useCreateMatch(options) {
|
|
29
|
+
const queryClient = (0, react_query_1.useQueryClient)();
|
|
30
|
+
return (0, react_query_1.useMutation)({
|
|
31
|
+
mutationFn: async (data) => {
|
|
32
|
+
const client = (0, client_1.getApiClient)();
|
|
33
|
+
const response = await client.post('/api/v1/matching/matches', data);
|
|
34
|
+
return response.data?.data || response.data;
|
|
35
|
+
},
|
|
36
|
+
onSuccess: () => {
|
|
37
|
+
queryClient.invalidateQueries({ queryKey: matching_1.matchingKeys.matches() });
|
|
38
|
+
queryClient.invalidateQueries({ queryKey: matching_1.matchingKeys.stats() });
|
|
39
|
+
},
|
|
40
|
+
...options,
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Update match status (accept/decline/block)
|
|
45
|
+
*
|
|
46
|
+
* @endpoint PUT /api/v1/matching/matches/:matchId
|
|
47
|
+
*
|
|
48
|
+
* @example
|
|
49
|
+
* ```tsx
|
|
50
|
+
* const updateMatch = useUpdateMatch();
|
|
51
|
+
* await updateMatch.mutateAsync({ matchId: 'match-123', status: 'ACCEPTED' });
|
|
52
|
+
* ```
|
|
53
|
+
*/
|
|
54
|
+
function useUpdateMatch(options) {
|
|
55
|
+
const queryClient = (0, react_query_1.useQueryClient)();
|
|
56
|
+
return (0, react_query_1.useMutation)({
|
|
57
|
+
mutationFn: async ({ matchId, data }) => {
|
|
58
|
+
const client = (0, client_1.getApiClient)();
|
|
59
|
+
const response = await client.put(`/api/v1/matching/matches/${matchId}`, data);
|
|
60
|
+
return response.data?.data || response.data;
|
|
61
|
+
},
|
|
62
|
+
onSuccess: () => {
|
|
63
|
+
queryClient.invalidateQueries({ queryKey: matching_1.matchingKeys.matches() });
|
|
64
|
+
queryClient.invalidateQueries({ queryKey: matching_1.matchingKeys.stats() });
|
|
65
|
+
},
|
|
66
|
+
...options,
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Accept a match (convenience hook)
|
|
71
|
+
*
|
|
72
|
+
* @example
|
|
73
|
+
* ```tsx
|
|
74
|
+
* const acceptMatch = useAcceptMatch();
|
|
75
|
+
* await acceptMatch.mutateAsync('match-123');
|
|
76
|
+
* ```
|
|
77
|
+
*/
|
|
78
|
+
function useAcceptMatch(options) {
|
|
79
|
+
const updateMatch = useUpdateMatch();
|
|
80
|
+
return {
|
|
81
|
+
...updateMatch,
|
|
82
|
+
mutate: (matchId, mutateOptions) => updateMatch.mutate({ matchId, data: { status: 'ACCEPTED' } }, mutateOptions),
|
|
83
|
+
mutateAsync: (matchId) => updateMatch.mutateAsync({ matchId, data: { status: 'ACCEPTED' } }),
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Decline a match (convenience hook)
|
|
88
|
+
*
|
|
89
|
+
* @example
|
|
90
|
+
* ```tsx
|
|
91
|
+
* const declineMatch = useDeclineMatch();
|
|
92
|
+
* await declineMatch.mutateAsync('match-123');
|
|
93
|
+
* ```
|
|
94
|
+
*/
|
|
95
|
+
function useDeclineMatch(options) {
|
|
96
|
+
const updateMatch = useUpdateMatch();
|
|
97
|
+
return {
|
|
98
|
+
...updateMatch,
|
|
99
|
+
mutate: (matchId, mutateOptions) => updateMatch.mutate({ matchId, data: { status: 'DECLINED' } }, mutateOptions),
|
|
100
|
+
mutateAsync: (matchId) => updateMatch.mutateAsync({ matchId, data: { status: 'DECLINED' } }),
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Delete a match
|
|
105
|
+
*
|
|
106
|
+
* @endpoint DELETE /api/v1/matching/matches/:matchId
|
|
107
|
+
*
|
|
108
|
+
* @example
|
|
109
|
+
* ```tsx
|
|
110
|
+
* const deleteMatch = useDeleteMatch();
|
|
111
|
+
* await deleteMatch.mutateAsync('match-123');
|
|
112
|
+
* ```
|
|
113
|
+
*/
|
|
114
|
+
function useDeleteMatch(options) {
|
|
115
|
+
const queryClient = (0, react_query_1.useQueryClient)();
|
|
116
|
+
return (0, react_query_1.useMutation)({
|
|
117
|
+
mutationFn: async (matchId) => {
|
|
118
|
+
const client = (0, client_1.getApiClient)();
|
|
119
|
+
await client.delete(`/api/v1/matching/matches/${matchId}`);
|
|
120
|
+
},
|
|
121
|
+
onSuccess: () => {
|
|
122
|
+
queryClient.invalidateQueries({ queryKey: matching_1.matchingKeys.matches() });
|
|
123
|
+
queryClient.invalidateQueries({ queryKey: matching_1.matchingKeys.stats() });
|
|
124
|
+
},
|
|
125
|
+
...options,
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Request someone as accountability buddy
|
|
130
|
+
*
|
|
131
|
+
* @endpoint POST /api/v1/matching/buddies
|
|
132
|
+
*
|
|
133
|
+
* @example
|
|
134
|
+
* ```tsx
|
|
135
|
+
* const requestBuddy = useRequestBuddy();
|
|
136
|
+
* await requestBuddy.mutateAsync({ buddyId: 'user-123' });
|
|
137
|
+
* ```
|
|
138
|
+
*/
|
|
139
|
+
function useRequestBuddy(options) {
|
|
140
|
+
const queryClient = (0, react_query_1.useQueryClient)();
|
|
141
|
+
return (0, react_query_1.useMutation)({
|
|
142
|
+
mutationFn: async (data) => {
|
|
143
|
+
const client = (0, client_1.getApiClient)();
|
|
144
|
+
const response = await client.post('/api/v1/matching/buddies', data);
|
|
145
|
+
return response.data?.data || response.data;
|
|
146
|
+
},
|
|
147
|
+
onSuccess: () => {
|
|
148
|
+
queryClient.invalidateQueries({ queryKey: matching_1.matchingKeys.buddies() });
|
|
149
|
+
queryClient.invalidateQueries({ queryKey: matching_1.matchingKeys.buddyRequests() });
|
|
150
|
+
},
|
|
151
|
+
...options,
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Update buddy request (accept/decline/end)
|
|
156
|
+
*
|
|
157
|
+
* @endpoint PUT /api/v1/matching/buddies/:buddyId
|
|
158
|
+
*
|
|
159
|
+
* @example
|
|
160
|
+
* ```tsx
|
|
161
|
+
* const updateBuddy = useUpdateBuddy();
|
|
162
|
+
* await updateBuddy.mutateAsync({ buddyId: 'buddy-123', data: { status: 'ACCEPTED' } });
|
|
163
|
+
* ```
|
|
164
|
+
*/
|
|
165
|
+
function useUpdateBuddy(options) {
|
|
166
|
+
const queryClient = (0, react_query_1.useQueryClient)();
|
|
167
|
+
return (0, react_query_1.useMutation)({
|
|
168
|
+
mutationFn: async ({ buddyId, data }) => {
|
|
169
|
+
const client = (0, client_1.getApiClient)();
|
|
170
|
+
const response = await client.put(`/api/v1/matching/buddies/${buddyId}`, data);
|
|
171
|
+
return response.data?.data || response.data;
|
|
172
|
+
},
|
|
173
|
+
onSuccess: () => {
|
|
174
|
+
queryClient.invalidateQueries({ queryKey: matching_1.matchingKeys.buddies() });
|
|
175
|
+
queryClient.invalidateQueries({ queryKey: matching_1.matchingKeys.buddyRequests() });
|
|
176
|
+
},
|
|
177
|
+
...options,
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Log activity with buddy (check-in, message)
|
|
182
|
+
*
|
|
183
|
+
* @endpoint POST /api/v1/matching/buddies/:buddyId/activity
|
|
184
|
+
*
|
|
185
|
+
* @example
|
|
186
|
+
* ```tsx
|
|
187
|
+
* const logActivity = useLogBuddyActivity();
|
|
188
|
+
* await logActivity.mutateAsync({ buddyId: 'buddy-123', data: { type: 'CHECK_IN' } });
|
|
189
|
+
* ```
|
|
190
|
+
*/
|
|
191
|
+
function useLogBuddyActivity(options) {
|
|
192
|
+
const queryClient = (0, react_query_1.useQueryClient)();
|
|
193
|
+
return (0, react_query_1.useMutation)({
|
|
194
|
+
mutationFn: async ({ buddyId, data }) => {
|
|
195
|
+
const client = (0, client_1.getApiClient)();
|
|
196
|
+
await client.post(`/api/v1/matching/buddies/${buddyId}/activity`, data);
|
|
197
|
+
},
|
|
198
|
+
onSuccess: () => {
|
|
199
|
+
queryClient.invalidateQueries({ queryKey: matching_1.matchingKeys.buddies() });
|
|
200
|
+
},
|
|
201
|
+
...options,
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0Y2hpbmcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBpL211dGF0aW9ucy9tYXRjaGluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQW1EQSx3Q0FpQkM7QUFhRCx3Q0FvQkM7QUFXRCx3Q0FZQztBQVdELDBDQVlDO0FBYUQsd0NBZ0JDO0FBYUQsMENBaUJDO0FBYUQsd0NBb0JDO0FBYUQsa0RBa0JDO0FBOVFELHVEQUsrQjtBQUMvQixzQ0FBeUM7QUFDekMsa0RBQWlGO0FBNkJqRiwrRUFBK0U7QUFDL0UsaUJBQWlCO0FBQ2pCLCtFQUErRTtBQUUvRTs7Ozs7Ozs7OztHQVVHO0FBQ0gsU0FBZ0IsY0FBYyxDQUM1QixPQUEwRjtJQUUxRixNQUFNLFdBQVcsR0FBRyxJQUFBLDRCQUFjLEdBQUUsQ0FBQztJQUVyQyxPQUFPLElBQUEseUJBQVcsRUFBQztRQUNqQixVQUFVLEVBQUUsS0FBSyxFQUFFLElBQXdCLEVBQTBCLEVBQUU7WUFDckUsTUFBTSxNQUFNLEdBQUcsSUFBQSxxQkFBWSxHQUFFLENBQUM7WUFDOUIsTUFBTSxRQUFRLEdBQUcsTUFBTSxNQUFNLENBQUMsSUFBSSxDQUFDLDBCQUEwQixFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3JFLE9BQU8sUUFBUSxDQUFDLElBQUksRUFBRSxJQUFJLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQztRQUM5QyxDQUFDO1FBQ0QsU0FBUyxFQUFFLEdBQUcsRUFBRTtZQUNkLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLFFBQVEsRUFBRSx1QkFBWSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNwRSxXQUFXLENBQUMsaUJBQWlCLENBQUMsRUFBRSxRQUFRLEVBQUUsdUJBQVksQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDcEUsQ0FBQztRQUNELEdBQUcsT0FBTztLQUNYLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRDs7Ozs7Ozs7OztHQVVH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QUFNLENBQUMsR0FBRyxDQUFDLDRCQUE0QixPQUFPLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUMvRSxPQUFPLFFBQVEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUM7UUFDOUMsQ0FBQztRQUNELFNBQVMsRUFBRSxHQUFHLEVBQUU7WUFDZCxXQUFXLENBQUMsaUJBQWlCLENBQUMsRUFBRSxRQUFRLEVBQUUsdUJBQVksQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDcEUsV0FBVyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsUUFBUSxFQUFFLHVCQUFZLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzVFLENBQUM7UUFDRCxHQUFHLE9BQU87S0FDWCxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7R0FVRztBQUNILFNBQWdCLG1CQUFtQixDQUNqQyxPQUdDO0lBRUQsTUFBTSxXQUFXLEdBQUcsSUFBQSw0QkFBYyxHQUFFLENBQUM7SUFFckMsT0FBTyxJQUFBLHlCQUFXLEVBQUM7UUFDakIsVUFBVSxFQUFFLEtBQUssRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsRUFBaUIsRUFBRTtZQUNyRCxNQUFNLE1BQU0sR0FBRyxJQUFBLHFCQUFZLEdBQUUsQ0FBQztZQUM5QixNQUFNLE1BQU0sQ0FBQyxJQUFJLENBQUMsNEJBQTRCLE9BQU8sV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzFFLENBQUM7UUFDRCxTQUFTLEVBQUUsR0FBRyxFQUFFO1lBQ2QsV0FBVyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsUUFBUSxFQUFFLHVCQUFZLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3RFLENBQUM7UUFDRCxHQUFHLE9BQU87S0FDWCxDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgdXNlTXV0YXRpb24sXG4gIHVzZVF1ZXJ5Q2xpZW50LFxuICBVc2VNdXRhdGlvbk9wdGlvbnMsXG4gIFVzZU11dGF0aW9uUmVzdWx0LFxufSBmcm9tICdAdGFuc3RhY2svcmVhY3QtcXVlcnknO1xuaW1wb3J0IHsgZ2V0QXBpQ2xpZW50IH0gZnJvbSAnLi4vY2xpZW50JztcbmltcG9ydCB7IG1hdGNoaW5nS2V5cywgTWF0Y2hSZXNwb25zZSwgQnVkZHlSZXNwb25zZSB9IGZyb20gJy4uL3F1ZXJpZXMvbWF0Y2hpbmcnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBSRVFVRVNUIFRZUEVTXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRlTWF0Y2hSZXF1ZXN0IHtcbiAgbWF0Y2hlZFVzZXJJZDogc3RyaW5nO1xuICBtZXNzYWdlPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVwZGF0ZU1hdGNoUmVxdWVzdCB7XG4gIHN0YXR1czogJ0FDQ0VQVEVEJyB8ICdERUNMSU5FRCcgfCAnQkxPQ0tFRCc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRlQnVkZHlSZXF1ZXN0IHtcbiAgYnVkZHlJZDogc3RyaW5nO1xuICBtZXNzYWdlPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVwZGF0ZUJ1ZGR5UmVxdWVzdCB7XG4gIHN0YXR1czogJ0FDQ0VQVEVEJyB8ICdERUNMSU5FRCcgfCAnRU5ERUQnO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExvZ0J1ZGR5QWN0aXZpdHlSZXF1ZXN0IHtcbiAgdHlwZTogJ0NIRUNLX0lOJyB8ICdNRVNTQUdFJyB8ICdTVVBQT1JUJztcbiAgbm90ZT86IHN0cmluZztcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gTVVUQVRJT04gSE9PS1Ncbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBDcmVhdGUgYSBuZXcgbWF0Y2ggcmVxdWVzdFxuICpcbiAqIEBlbmRwb2ludCBQT1NUIC9hcGkvdjEvbWF0Y2hpbmcvbWF0Y2hlc1xuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c3hcbiAqIGNvbnN0IGNyZWF0ZU1hdGNoID0gdXNlQ3JlYXRlTWF0Y2goKTtcbiAqIGF3YWl0IGNyZWF0ZU1hdGNoLm11dGF0ZUFzeW5jKHsgbWF0Y2hlZFVzZXJJZDogJ3VzZXItMTIzJyB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlQ3JlYXRlTWF0Y2goXG4gIG9wdGlvbnM/OiBPbWl0PFVzZU11dGF0aW9uT3B0aW9uczxNYXRjaFJlc3BvbnNlLCBFcnJvciwgQ3JlYXRlTWF0Y2hSZXF1ZXN0PiwgJ211dGF0aW9uRm4nPlxuKTogVXNlTXV0YXRpb25SZXN1bHQ8TWF0Y2hSZXNwb25zZSwgRXJyb3IsIENyZWF0ZU1hdGNoUmVxdWVzdD4ge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IHVzZVF1ZXJ5Q2xpZW50KCk7XG5cbiAgcmV0dXJuIHVzZU11dGF0aW9uKHtcbiAgICBtdXRhdGlvbkZuOiBhc3luYyAoZGF0YTogQ3JlYXRlTWF0Y2hSZXF1ZXN0KTogUHJvbWlzZTxNYXRjaFJlc3BvbnNlPiA9PiB7XG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRBcGlDbGllbnQoKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LnBvc3QoJy9hcGkvdjEvbWF0Y2hpbmcvbWF0Y2hlcycsIGRhdGEpO1xuICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE/LmRhdGEgfHwgcmVzcG9uc2UuZGF0YTtcbiAgICB9LFxuICAgIG9uU3VjY2VzczogKCkgPT4ge1xuICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoeyBxdWVyeUtleTogbWF0Y2hpbmdLZXlzLm1hdGNoZXMoKSB9KTtcbiAgICAgIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHsgcXVlcnlLZXk6IG1hdGNoaW5nS2V5cy5zdGF0cygpIH0pO1xuICAgIH0sXG4gICAgLi4ub3B0aW9ucyxcbiAgfSk7XG59XG5cbi8qKlxuICogVXBkYXRlIG1hdGNoIHN0YXR1cyAoYWNjZXB0L2RlY2xpbmUvYmxvY2spXG4gKlxuICogQGVuZHBvaW50IFBVVCAvYXBpL3YxL21hdGNoaW5nL21hdGNoZXMvOm1hdGNoSWRcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHN4XG4gKiBjb25zdCB1cGRhdGVNYXRjaCA9IHVzZVVwZGF0ZU1hdGNoKCk7XG4gKiBhd2FpdCB1cGRhdGVNYXRjaC5tdXRhdGVBc3luYyh7IG1hdGNoSWQ6ICdtYXRjaC0xMjMnLCBzdGF0dXM6ICdBQ0NFUFRFRCcgfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVVwZGF0ZU1hdGNoKFxuICBvcHRpb25zPzogT21pdDxcbiAgICBVc2VNdXRhdGlvbk9wdGlvbnM8TWF0Y2hSZXNwb25zZSwgRXJyb3IsIHsgbWF0Y2hJZDogc3RyaW5nOyBkYXRhOiBVcGRhdGVNYXRjaFJlcXVlc3QgfT4sXG4gICAgJ211dGF0aW9uRm4nXG4gID5cbik6IFVzZU11dGF0aW9uUmVzdWx0PE1hdGNoUmVzcG9uc2UsIEVycm9yLCB7IG1hdGNoSWQ6IHN0cmluZzsgZGF0YTogVXBkYXRlTWF0Y2hSZXF1ZXN0IH0+IHtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSB1c2VRdWVyeUNsaWVudCgpO1xuXG4gIHJldHVybiB1c2VNdXRhdGlvbih7XG4gICAgbXV0YXRpb25GbjogYXN5bmMgKHsgbWF0Y2hJZCwgZGF0YSB9KTogUHJvbWlzZTxNYXRjaFJlc3BvbnNlPiA9PiB7XG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRBcGlDbGllbnQoKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LnB1dChgL2FwaS92MS9tYXRjaGluZy9tYXRjaGVzLyR7bWF0Y2hJZH1gLCBkYXRhKTtcbiAgICAgIHJldHVybiByZXNwb25zZS5kYXRhPy5kYXRhIHx8IHJlc3BvbnNlLmRhdGE7XG4gICAgfSxcbiAgICBvblN1Y2Nlc3M6ICgpID0+IHtcbiAgICAgIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHsgcXVlcnlLZXk6IG1hdGNoaW5nS2V5cy5tYXRjaGVzKCkgfSk7XG4gICAgICBxdWVyeUNsaWVudC5pbnZhbGlkYXRlUXVlcmllcyh7IHF1ZXJ5S2V5OiBtYXRjaGluZ0tleXMuc3RhdHMoKSB9KTtcbiAgICB9LFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pO1xufVxuXG4vKipcbiAqIEFjY2VwdCBhIG1hdGNoIChjb252ZW5pZW5jZSBob29rKVxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c3hcbiAqIGNvbnN0IGFjY2VwdE1hdGNoID0gdXNlQWNjZXB0TWF0Y2goKTtcbiAqIGF3YWl0IGFjY2VwdE1hdGNoLm11dGF0ZUFzeW5jKCdtYXRjaC0xMjMnKTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlQWNjZXB0TWF0Y2goXG4gIG9wdGlvbnM/OiBPbWl0PFVzZU11dGF0aW9uT3B0aW9uczxNYXRjaFJlc3BvbnNlLCBFcnJvciwgc3RyaW5nPiwgJ211dGF0aW9uRm4nPlxuKTogVXNlTXV0YXRpb25SZXN1bHQ8TWF0Y2hSZXNwb25zZSwgRXJyb3IsIHN0cmluZz4ge1xuICBjb25zdCB1cGRhdGVNYXRjaCA9IHVzZVVwZGF0ZU1hdGNoKCk7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi51cGRhdGVNYXRjaCxcbiAgICBtdXRhdGU6IChtYXRjaElkOiBzdHJpbmcsIG11dGF0ZU9wdGlvbnM/OiBhbnkpID0+XG4gICAgICB1cGRhdGVNYXRjaC5tdXRhdGUoeyBtYXRjaElkLCBkYXRhOiB7IHN0YXR1czogJ0FDQ0VQVEVEJyB9IH0sIG11dGF0ZU9wdGlvbnMpLFxuICAgIG11dGF0ZUFzeW5jOiAobWF0Y2hJZDogc3RyaW5nKSA9PlxuICAgICAgdXBkYXRlTWF0Y2gubXV0YXRlQXN5bmMoeyBtYXRjaElkLCBkYXRhOiB7IHN0YXR1czogJ0FDQ0VQVEVEJyB9IH0pLFxuICB9IGFzIFVzZU11dGF0aW9uUmVzdWx0PE1hdGNoUmVzcG9uc2UsIEVycm9yLCBzdHJpbmc+O1xufVxuXG4vKipcbiAqIERlY2xpbmUgYSBtYXRjaCAoY29udmVuaWVuY2UgaG9vaylcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHN4XG4gKiBjb25zdCBkZWNsaW5lTWF0Y2ggPSB1c2VEZWNsaW5lTWF0Y2goKTtcbiAqIGF3YWl0IGRlY2xpbmVNYXRjaC5tdXRhdGVBc3luYygnbWF0Y2gtMTIzJyk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZURlY2xpbmVNYXRjaChcbiAgb3B0aW9ucz86IE9taXQ8VXNlTXV0YXRpb25PcHRpb25zPE1hdGNoUmVzcG9uc2UsIEVycm9yLCBzdHJpbmc+LCAnbXV0YXRpb25Gbic+XG4pOiBVc2VNdXRhdGlvblJlc3VsdDxNYXRjaFJlc3BvbnNlLCBFcnJvciwgc3RyaW5nPiB7XG4gIGNvbnN0IHVwZGF0ZU1hdGNoID0gdXNlVXBkYXRlTWF0Y2goKTtcblxuICByZXR1cm4ge1xuICAgIC4uLnVwZGF0ZU1hdGNoLFxuICAgIG11dGF0ZTogKG1hdGNoSWQ6IHN0cmluZywgbXV0YXRlT3B0aW9ucz86IGFueSkgPT5cbiAgICAgIHVwZGF0ZU1hdGNoLm11dGF0ZSh7IG1hdGNoSWQsIGRhdGE6IHsgc3RhdHVzOiAnREVDTElORUQnIH0gfSwgbXV0YXRlT3B0aW9ucyksXG4gICAgbXV0YXRlQXN5bmM6IChtYXRjaElkOiBzdHJpbmcpID0+XG4gICAgICB1cGRhdGVNYXRjaC5tdXRhdGVBc3luYyh7IG1hdGNoSWQsIGRhdGE6IHsgc3RhdHVzOiAnREVDTElORUQnIH0gfSksXG4gIH0gYXMgVXNlTXV0YXRpb25SZXN1bHQ8TWF0Y2hSZXNwb25zZSwgRXJyb3IsIHN0cmluZz47XG59XG5cbi8qKlxuICogRGVsZXRlIGEgbWF0Y2hcbiAqXG4gKiBAZW5kcG9pbnQgREVMRVRFIC9hcGkvdjEvbWF0Y2hpbmcvbWF0Y2hlcy86bWF0Y2hJZFxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c3hcbiAqIGNvbnN0IGRlbGV0ZU1hdGNoID0gdXNlRGVsZXRlTWF0Y2goKTtcbiAqIGF3YWl0IGRlbGV0ZU1hdGNoLm11dGF0ZUFzeW5jKCdtYXRjaC0xMjMnKTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlRGVsZXRlTWF0Y2goXG4gIG9wdGlvbnM/OiBPbWl0PFVzZU11dGF0aW9uT3B0aW9uczx2b2lkLCBFcnJvciwgc3RyaW5nPiwgJ211dGF0aW9uRm4nPlxuKTogVXNlTXV0YXRpb25SZXN1bHQ8dm9pZCwgRXJyb3IsIHN0cmluZz4ge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IHVzZVF1ZXJ5Q2xpZW50KCk7XG5cbiAgcmV0dXJuIHVzZU11dGF0aW9uKHtcbiAgICBtdXRhdGlvbkZuOiBhc3luYyAobWF0Y2hJZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRBcGlDbGllbnQoKTtcbiAgICAgIGF3YWl0IGNsaWVudC5kZWxldGUoYC9hcGkvdjEvbWF0Y2hpbmcvbWF0Y2hlcy8ke21hdGNoSWR9YCk7XG4gICAgfSxcbiAgICBvblN1Y2Nlc3M6ICgpID0+IHtcbiAgICAgIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHsgcXVlcnlLZXk6IG1hdGNoaW5nS2V5cy5tYXRjaGVzKCkgfSk7XG4gICAgICBxdWVyeUNsaWVudC5pbnZhbGlkYXRlUXVlcmllcyh7IHF1ZXJ5S2V5OiBtYXRjaGluZ0tleXMuc3RhdHMoKSB9KTtcbiAgICB9LFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pO1xufVxuXG4vKipcbiAqIFJlcXVlc3Qgc29tZW9uZSBhcyBhY2NvdW50YWJpbGl0eSBidWRkeVxuICpcbiAqIEBlbmRwb2ludCBQT1NUIC9hcGkvdjEvbWF0Y2hpbmcvYnVkZGllc1xuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c3hcbiAqIGNvbnN0IHJlcXVlc3RCdWRkeSA9IHVzZVJlcXVlc3RCdWRkeSgpO1xuICogYXdhaXQgcmVxdWVzdEJ1ZGR5Lm11dGF0ZUFzeW5jKHsgYnVkZHlJZDogJ3VzZXItMTIzJyB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlUmVxdWVzdEJ1ZGR5KFxuICBvcHRpb25zPzogT21pdDxVc2VNdXRhdGlvbk9wdGlvbnM8QnVkZHlSZXNwb25zZSwgRXJyb3IsIENyZWF0ZUJ1ZGR5UmVxdWVzdD4sICdtdXRhdGlvbkZuJz5cbik6IFVzZU11dGF0aW9uUmVzdWx0PEJ1ZGR5UmVzcG9uc2UsIEVycm9yLCBDcmVhdGVCdWRkeVJlcXVlc3Q+IHtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSB1c2VRdWVyeUNsaWVudCgpO1xuXG4gIHJldHVybiB1c2VNdXRhdGlvbih7XG4gICAgbXV0YXRpb25GbjogYXN5bmMgKGRhdGE6IENyZWF0ZUJ1ZGR5UmVxdWVzdCk6IFByb21pc2U8QnVkZHlSZXNwb25zZT4gPT4ge1xuICAgICAgY29uc3QgY2xpZW50ID0gZ2V0QXBpQ2xpZW50KCk7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5wb3N0KCcvYXBpL3YxL21hdGNoaW5nL2J1ZGRpZXMnLCBkYXRhKTtcbiAgICAgIHJldHVybiByZXNwb25zZS5kYXRhPy5kYXRhIHx8IHJlc3BvbnNlLmRhdGE7XG4gICAgfSxcbiAgICBvblN1Y2Nlc3M6ICgpID0+IHtcbiAgICAgIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHsgcXVlcnlLZXk6IG1hdGNoaW5nS2V5cy5idWRkaWVzKCkgfSk7XG4gICAgICBxdWVyeUNsaWVudC5pbnZhbGlkYXRlUXVlcmllcyh7IHF1ZXJ5S2V5OiBtYXRjaGluZ0tleXMuYnVkZHlSZXF1ZXN0cygpIH0pO1xuICAgIH0sXG4gICAgLi4ub3B0aW9ucyxcbiAgfSk7XG59XG5cbi8qKlxuICogVXBkYXRlIGJ1ZGR5IHJlcXVlc3QgKGFjY2VwdC9kZWNsaW5lL2VuZClcbiAqXG4gKiBAZW5kcG9pbnQgUFVUIC9hcGkvdjEvbWF0Y2hpbmcvYnVkZGllcy86YnVkZHlJZFxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c3hcbiAqIGNvbnN0IHVwZGF0ZUJ1ZGR5ID0gdXNlVXBkYXRlQnVkZHkoKTtcbiAqIGF3YWl0IHVwZGF0ZUJ1ZGR5Lm11dGF0ZUFzeW5jKHsgYnVkZHlJZDogJ2J1ZGR5LTEyMycsIGRhdGE6IHsgc3RhdHVzOiAnQUNDRVBURUQnIH0gfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVVwZGF0ZUJ1ZGR5KFxuICBvcHRpb25zPzogT21pdDxcbiAgICBVc2VNdXRhdGlvbk9wdGlvbnM8QnVkZHlSZXNwb25zZSwgRXJyb3IsIHsgYnVkZHlJZDogc3RyaW5nOyBkYXRhOiBVcGRhdGVCdWRkeVJlcXVlc3QgfT4sXG4gICAgJ211dGF0aW9uRm4nXG4gID5cbik6IFVzZU11dGF0aW9uUmVzdWx0PEJ1ZGR5UmVzcG9uc2UsIEVycm9yLCB7IGJ1ZGR5SWQ6IHN0cmluZzsgZGF0YTogVXBkYXRlQnVkZHlSZXF1ZXN0IH0+IHtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSB1c2VRdWVyeUNsaWVudCgpO1xuXG4gIHJldHVybiB1c2VNdXRhdGlvbih7XG4gICAgbXV0YXRpb25GbjogYXN5bmMgKHsgYnVkZHlJZCwgZGF0YSB9KTogUHJvbWlzZTxCdWRkeVJlc3BvbnNlPiA9PiB7XG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRBcGlDbGllbnQoKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LnB1dChgL2FwaS92MS9tYXRjaGluZy9idWRkaWVzLyR7YnVkZHlJZH1gLCBkYXRhKTtcbiAgICAgIHJldHVybiByZXNwb25zZS5kYXRhPy5kYXRhIHx8IHJlc3BvbnNlLmRhdGE7XG4gICAgfSxcbiAgICBvblN1Y2Nlc3M6ICgpID0+IHtcbiAgICAgIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHsgcXVlcnlLZXk6IG1hdGNoaW5nS2V5cy5idWRkaWVzKCkgfSk7XG4gICAgICBxdWVyeUNsaWVudC5pbnZhbGlkYXRlUXVlcmllcyh7IHF1ZXJ5S2V5OiBtYXRjaGluZ0tleXMuYnVkZHlSZXF1ZXN0cygpIH0pO1xuICAgIH0sXG4gICAgLi4ub3B0aW9ucyxcbiAgfSk7XG59XG5cbi8qKlxuICogTG9nIGFjdGl2aXR5IHdpdGggYnVkZHkgKGNoZWNrLWluLCBtZXNzYWdlKVxuICpcbiAqIEBlbmRwb2ludCBQT1NUIC9hcGkvdjEvbWF0Y2hpbmcvYnVkZGllcy86YnVkZHlJZC9hY3Rpdml0eVxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c3hcbiAqIGNvbnN0IGxvZ0FjdGl2aXR5ID0gdXNlTG9nQnVkZHlBY3Rpdml0eSgpO1xuICogYXdhaXQgbG9nQWN0aXZpdHkubXV0YXRlQXN5bmMoeyBidWRkeUlkOiAnYnVkZHktMTIzJywgZGF0YTogeyB0eXBlOiAnQ0hFQ0tfSU4nIH0gfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUxvZ0J1ZGR5QWN0aXZpdHkoXG4gIG9wdGlvbnM/OiBPbWl0PFxuICAgIFVzZU11dGF0aW9uT3B0aW9uczx2b2lkLCBFcnJvciwgeyBidWRkeUlkOiBzdHJpbmc7IGRhdGE6IExvZ0J1ZGR5QWN0aXZpdHlSZXF1ZXN0IH0+LFxuICAgICdtdXRhdGlvbkZuJ1xuICA+XG4pOiBVc2VNdXRhdGlvblJlc3VsdDx2b2lkLCBFcnJvciwgeyBidWRkeUlkOiBzdHJpbmc7IGRhdGE6IExvZ0J1ZGR5QWN0aXZpdHlSZXF1ZXN0IH0+IHtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSB1c2VRdWVyeUNsaWVudCgpO1xuXG4gIHJldHVybiB1c2VNdXRhdGlvbih7XG4gICAgbXV0YXRpb25GbjogYXN5bmMgKHsgYnVkZHlJZCwgZGF0YSB9KTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRBcGlDbGllbnQoKTtcbiAgICAgIGF3YWl0IGNsaWVudC5wb3N0KGAvYXBpL3YxL21hdGNoaW5nL2J1ZGRpZXMvJHtidWRkeUlkfS9hY3Rpdml0eWAsIGRhdGEpO1xuICAgIH0sXG4gICAgb25TdWNjZXNzOiAoKSA9PiB7XG4gICAgICBxdWVyeUNsaWVudC5pbnZhbGlkYXRlUXVlcmllcyh7IHF1ZXJ5S2V5OiBtYXRjaGluZ0tleXMuYnVkZGllcygpIH0pO1xuICAgIH0sXG4gICAgLi4ub3B0aW9ucyxcbiAgfSk7XG59XG4iXX0=
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { UseMutationOptions } from '@tanstack/react-query';
|
|
2
|
+
import type { NotificationResponse } from '../types';
|
|
3
|
+
/**
|
|
4
|
+
* Mark a notification as read
|
|
5
|
+
*
|
|
6
|
+
* @param options - TanStack Query mutation options
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```tsx
|
|
10
|
+
* const { mutate: markAsRead } = useMarkNotificationRead();
|
|
11
|
+
*
|
|
12
|
+
* const handleNotificationClick = (notificationId: string) => {
|
|
13
|
+
* markAsRead(notificationId);
|
|
14
|
+
* };
|
|
15
|
+
* ```
|
|
16
|
+
*/
|
|
17
|
+
export declare function useMarkNotificationRead(options?: Omit<UseMutationOptions<NotificationResponse, Error, string>, 'mutationFn'>): import("@tanstack/react-query").UseMutationResult<{
|
|
18
|
+
id: string;
|
|
19
|
+
userId: string;
|
|
20
|
+
type: "EVENT_REMINDER" | "EVENT_CANCELLED" | "EVENT_UPDATED" | "NEW_EVENT" | "HUB_WELCOME" | "NEW_MEMBER" | "STREAK_MILESTONE" | "DAILY_REMINDER" | "JACK_RESPONSE" | "WEEKLY_REFLECTION" | "BADGE_EARNED" | "SYSTEM_UPDATE";
|
|
21
|
+
title: string;
|
|
22
|
+
body?: Record<string, never>;
|
|
23
|
+
data?: Record<string, never>;
|
|
24
|
+
imageUrl?: Record<string, never>;
|
|
25
|
+
channel: "APP" | "EMAIL" | "PUSH" | "SMS" | "WHATSAPP";
|
|
26
|
+
isRead: boolean;
|
|
27
|
+
sentAt?: Record<string, never>;
|
|
28
|
+
readAt?: Record<string, never>;
|
|
29
|
+
actionUrl?: Record<string, never>;
|
|
30
|
+
deliveryStatus: "PENDING" | "SENT" | "DELIVERED" | "FAILED";
|
|
31
|
+
errorMessage?: Record<string, never>;
|
|
32
|
+
createdAt: string;
|
|
33
|
+
}, Error, string, unknown>;
|
|
34
|
+
/**
|
|
35
|
+
* Mark all notifications as read
|
|
36
|
+
*
|
|
37
|
+
* @param options - TanStack Query mutation options
|
|
38
|
+
*
|
|
39
|
+
* @example
|
|
40
|
+
* ```tsx
|
|
41
|
+
* const { mutate: markAllRead, isPending } = useMarkAllNotificationsRead();
|
|
42
|
+
*
|
|
43
|
+
* const handleMarkAllRead = () => {
|
|
44
|
+
* markAllRead();
|
|
45
|
+
* };
|
|
46
|
+
* ```
|
|
47
|
+
*/
|
|
48
|
+
export declare function useMarkAllNotificationsRead(options?: Omit<UseMutationOptions<void, Error, void>, 'mutationFn'>): import("@tanstack/react-query").UseMutationResult<void, Error, void, unknown>;
|
|
49
|
+
/**
|
|
50
|
+
* Delete a notification
|
|
51
|
+
*
|
|
52
|
+
* @param options - TanStack Query mutation options
|
|
53
|
+
*
|
|
54
|
+
* @example
|
|
55
|
+
* ```tsx
|
|
56
|
+
* const { mutate: deleteNotification } = useDeleteNotification();
|
|
57
|
+
*
|
|
58
|
+
* const handleDelete = (notificationId: string) => {
|
|
59
|
+
* deleteNotification(notificationId);
|
|
60
|
+
* };
|
|
61
|
+
* ```
|
|
62
|
+
*/
|
|
63
|
+
export declare function useDeleteNotification(options?: Omit<UseMutationOptions<void, Error, string>, 'mutationFn'>): import("@tanstack/react-query").UseMutationResult<void, Error, string, unknown>;
|