@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,202 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.supportKeys = void 0;
|
|
4
|
+
exports.useCheckIns = useCheckIns;
|
|
5
|
+
exports.useTodayCheckIn = useTodayCheckIn;
|
|
6
|
+
exports.useCheckInStreak = useCheckInStreak;
|
|
7
|
+
exports.useMoodLogs = useMoodLogs;
|
|
8
|
+
exports.useWins = useWins;
|
|
9
|
+
exports.useWinsByCategory = useWinsByCategory;
|
|
10
|
+
exports.useHabits = useHabits;
|
|
11
|
+
exports.useReflections = useReflections;
|
|
12
|
+
const react_query_1 = require("@tanstack/react-query");
|
|
13
|
+
const client_1 = require("../client");
|
|
14
|
+
// ============================================================================
|
|
15
|
+
// QUERY KEY FACTORY
|
|
16
|
+
// ============================================================================
|
|
17
|
+
exports.supportKeys = {
|
|
18
|
+
all: ['support'],
|
|
19
|
+
checkIns: () => [...exports.supportKeys.all, 'check-ins'],
|
|
20
|
+
checkInToday: () => [...exports.supportKeys.checkIns(), 'today'],
|
|
21
|
+
checkInStreak: () => [...exports.supportKeys.checkIns(), 'streak'],
|
|
22
|
+
moodLogs: () => [...exports.supportKeys.all, 'mood'],
|
|
23
|
+
wins: () => [...exports.supportKeys.all, 'wins'],
|
|
24
|
+
winsByCategory: () => [...exports.supportKeys.wins(), 'by-category'],
|
|
25
|
+
habits: () => [...exports.supportKeys.all, 'habits'],
|
|
26
|
+
reflections: () => [...exports.supportKeys.all, 'reflections'],
|
|
27
|
+
};
|
|
28
|
+
// ============================================================================
|
|
29
|
+
// QUERY HOOKS
|
|
30
|
+
// ============================================================================
|
|
31
|
+
/**
|
|
32
|
+
* Get user's daily check-ins
|
|
33
|
+
*
|
|
34
|
+
* @param options - TanStack Query options
|
|
35
|
+
*
|
|
36
|
+
* @example
|
|
37
|
+
* ```tsx
|
|
38
|
+
* const { data, isLoading } = useCheckIns();
|
|
39
|
+
* ```
|
|
40
|
+
*/
|
|
41
|
+
function useCheckIns(options) {
|
|
42
|
+
return (0, react_query_1.useQuery)({
|
|
43
|
+
queryKey: exports.supportKeys.checkIns(),
|
|
44
|
+
queryFn: async () => {
|
|
45
|
+
const client = (0, client_1.getApiClient)();
|
|
46
|
+
const response = await client.get('/api/v1/support/check-ins');
|
|
47
|
+
// API wraps responses in { data: [...], meta: {...} }
|
|
48
|
+
return response.data?.data || response.data || [];
|
|
49
|
+
},
|
|
50
|
+
...options,
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Get today's check-in
|
|
55
|
+
*
|
|
56
|
+
* @param options - TanStack Query options
|
|
57
|
+
*
|
|
58
|
+
* @example
|
|
59
|
+
* ```tsx
|
|
60
|
+
* const { data, isLoading } = useTodayCheckIn();
|
|
61
|
+
* ```
|
|
62
|
+
*/
|
|
63
|
+
function useTodayCheckIn(options) {
|
|
64
|
+
return (0, react_query_1.useQuery)({
|
|
65
|
+
queryKey: exports.supportKeys.checkInToday(),
|
|
66
|
+
queryFn: async () => {
|
|
67
|
+
const client = (0, client_1.getApiClient)();
|
|
68
|
+
const response = await client.get('/api/v1/support/check-ins/today');
|
|
69
|
+
// API wraps responses in { data: {...}, meta: {...} }
|
|
70
|
+
return response.data?.data ?? response.data ?? null;
|
|
71
|
+
},
|
|
72
|
+
...options,
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Get user's check-in streak
|
|
77
|
+
*
|
|
78
|
+
* @param options - TanStack Query options
|
|
79
|
+
*
|
|
80
|
+
* @example
|
|
81
|
+
* ```tsx
|
|
82
|
+
* const { data, isLoading } = useCheckInStreak();
|
|
83
|
+
* ```
|
|
84
|
+
*/
|
|
85
|
+
function useCheckInStreak(options) {
|
|
86
|
+
return (0, react_query_1.useQuery)({
|
|
87
|
+
queryKey: exports.supportKeys.checkInStreak(),
|
|
88
|
+
queryFn: async () => {
|
|
89
|
+
const client = (0, client_1.getApiClient)();
|
|
90
|
+
const response = await client.get('/api/v1/support/check-ins/streak');
|
|
91
|
+
// API wraps responses in { data: {...}, meta: {...} }
|
|
92
|
+
return response.data?.data || response.data || { currentStreak: 0, longestStreak: 0, totalCheckIns: 0 };
|
|
93
|
+
},
|
|
94
|
+
...options,
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Get user's mood logs
|
|
99
|
+
*
|
|
100
|
+
* @param options - TanStack Query options
|
|
101
|
+
*
|
|
102
|
+
* @example
|
|
103
|
+
* ```tsx
|
|
104
|
+
* const { data, isLoading } = useMoodLogs();
|
|
105
|
+
* ```
|
|
106
|
+
*/
|
|
107
|
+
function useMoodLogs(options) {
|
|
108
|
+
return (0, react_query_1.useQuery)({
|
|
109
|
+
queryKey: exports.supportKeys.moodLogs(),
|
|
110
|
+
queryFn: async () => {
|
|
111
|
+
const client = (0, client_1.getApiClient)();
|
|
112
|
+
const response = await client.get('/api/v1/support/mood');
|
|
113
|
+
return response.data;
|
|
114
|
+
},
|
|
115
|
+
...options,
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Get user's wins
|
|
120
|
+
*
|
|
121
|
+
* @param options - TanStack Query options
|
|
122
|
+
*
|
|
123
|
+
* @example
|
|
124
|
+
* ```tsx
|
|
125
|
+
* const { data, isLoading } = useWins();
|
|
126
|
+
* ```
|
|
127
|
+
*/
|
|
128
|
+
function useWins(options) {
|
|
129
|
+
return (0, react_query_1.useQuery)({
|
|
130
|
+
queryKey: exports.supportKeys.wins(),
|
|
131
|
+
queryFn: async () => {
|
|
132
|
+
const client = (0, client_1.getApiClient)();
|
|
133
|
+
const response = await client.get('/api/v1/support/wins');
|
|
134
|
+
return response.data;
|
|
135
|
+
},
|
|
136
|
+
...options,
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Get user's wins grouped by category
|
|
141
|
+
*
|
|
142
|
+
* @param options - TanStack Query options
|
|
143
|
+
*
|
|
144
|
+
* @example
|
|
145
|
+
* ```tsx
|
|
146
|
+
* const { data, isLoading } = useWinsByCategory();
|
|
147
|
+
* ```
|
|
148
|
+
*/
|
|
149
|
+
function useWinsByCategory(options) {
|
|
150
|
+
return (0, react_query_1.useQuery)({
|
|
151
|
+
queryKey: exports.supportKeys.winsByCategory(),
|
|
152
|
+
queryFn: async () => {
|
|
153
|
+
const client = (0, client_1.getApiClient)();
|
|
154
|
+
const response = await client.get('/api/v1/support/wins/by-category');
|
|
155
|
+
return response.data;
|
|
156
|
+
},
|
|
157
|
+
...options,
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Get user's habits
|
|
162
|
+
*
|
|
163
|
+
* @param options - TanStack Query options
|
|
164
|
+
*
|
|
165
|
+
* @example
|
|
166
|
+
* ```tsx
|
|
167
|
+
* const { data, isLoading } = useHabits();
|
|
168
|
+
* ```
|
|
169
|
+
*/
|
|
170
|
+
function useHabits(options) {
|
|
171
|
+
return (0, react_query_1.useQuery)({
|
|
172
|
+
queryKey: exports.supportKeys.habits(),
|
|
173
|
+
queryFn: async () => {
|
|
174
|
+
const client = (0, client_1.getApiClient)();
|
|
175
|
+
const response = await client.get('/api/v1/support/habits');
|
|
176
|
+
return response.data;
|
|
177
|
+
},
|
|
178
|
+
...options,
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Get user's reflections
|
|
183
|
+
*
|
|
184
|
+
* @param options - TanStack Query options
|
|
185
|
+
*
|
|
186
|
+
* @example
|
|
187
|
+
* ```tsx
|
|
188
|
+
* const { data, isLoading } = useReflections();
|
|
189
|
+
* ```
|
|
190
|
+
*/
|
|
191
|
+
function useReflections(options) {
|
|
192
|
+
return (0, react_query_1.useQuery)({
|
|
193
|
+
queryKey: exports.supportKeys.reflections(),
|
|
194
|
+
queryFn: async () => {
|
|
195
|
+
const client = (0, client_1.getApiClient)();
|
|
196
|
+
const response = await client.get('/api/v1/support/reflections');
|
|
197
|
+
return response.data;
|
|
198
|
+
},
|
|
199
|
+
...options,
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VwcG9ydC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcGkvcXVlcmllcy9zdXBwb3J0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQW1EQSxrQ0FhQztBQVlELDBDQWFDO0FBWUQsNENBYUM7QUFZRCxrQ0FZQztBQVlELDBCQVlDO0FBWUQsOENBWUM7QUFZRCw4QkFZQztBQVlELHdDQVlDO0FBMU9ELHVEQUFrRTtBQUNsRSxzQ0FBeUM7QUFVekMsK0VBQStFO0FBQy9FLG9CQUFvQjtBQUNwQiwrRUFBK0U7QUFFbEUsUUFBQSxXQUFXLEdBQUc7SUFDekIsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFVO0lBQ3pCLFFBQVEsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsbUJBQVcsQ0FBQyxHQUFHLEVBQUUsV0FBVyxDQUFVO0lBQzFELFlBQVksRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsbUJBQVcsQ0FBQyxRQUFRLEVBQUUsRUFBRSxPQUFPLENBQVU7SUFDakUsYUFBYSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRyxtQkFBVyxDQUFDLFFBQVEsRUFBRSxFQUFFLFFBQVEsQ0FBVTtJQUNuRSxRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLG1CQUFXLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBVTtJQUNyRCxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLG1CQUFXLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBVTtJQUNqRCxjQUFjLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLG1CQUFXLENBQUMsSUFBSSxFQUFFLEVBQUUsYUFBYSxDQUFVO0lBQ3JFLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsbUJBQVcsQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFVO0lBQ3JELFdBQVcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsbUJBQVcsQ0FB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bkMsT0FBTyxFQUFFLEtBQUssSUFBbUMsRUFBRTtZQUNqRCxNQUFNLE1BQU0sR0FBRyxJQUFBLHFCQUFZLEdBQUUsQ0FBQztZQUM5QixNQUFNLFFBQVEsR0FBRyxNQUFNLE1BQU0sQ0FBQyxHQUFHLENBQUMsNkJBQTZCLENBQUMsQ0FBQztZQUNqRSxPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUM7UUFDdkIsQ0FBQztRQUNELEdBQUcsT0FBTztLQUNYLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB1c2VRdWVyeSwgVXNlUXVlcnlPcHRpb25zIH0gZnJvbSAnQHRhbnN0YWNrL3JlYWN0LXF1ZXJ5JztcbmltcG9ydCB7IGdldEFwaUNsaWVudCB9IGZyb20gJy4uL2NsaWVudCc7XG5pbXBvcnQgdHlwZSB7XG4gIERhaWx5Q2hlY2tJblJlc3BvbnNlLFxuICBNb29kTG9nUmVzcG9uc2UsXG4gIFdpblJlc3BvbnNlLFxuICBIYWJpdFJlc3BvbnNlLFxuICBSZWZsZWN0aW9uUmVzcG9uc2UsXG4gIFVzZXJTdHJlYWtSZXNwb25zZSxcbn0gZnJvbSAnLi4vdHlwZXMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBRVUVSWSBLRVkgRkFDVE9SWVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnQgY29uc3Qgc3VwcG9ydEtleXMgPSB7XG4gIGFsbDogWydzdXBwb3J0J10gYXMgY29uc3QsXG4gIGNoZWNrSW5zOiAoKSA9PiBbLi4uc3VwcG9ydEtleXMuYWxsLCAnY2hlY2staW5zJ10gYXMgY29uc3QsXG4gIGNoZWNrSW5Ub2RheTogKCkgPT4gWy4uLnN1cHBvcnRLZXlzLmNoZWNrSW5zKCksICd0b2RheSddIGFzIGNvbnN0LFxuICBjaGVja0luU3RyZWFrOiAoKSA9PiBbLi4uc3VwcG9ydEtleXMuY2hlY2tJbnMoKSwgJ3N0cmVhayddIGFzIGNvbnN0LFxuICBtb29kTG9nczogKCkgPT4gWy4uLnN1cHBvcnRLZXlzLmFsbCwgJ21vb2QnXSBhcyBjb25zdCxcbiAgd2luczogKCkgPT4gWy4uLnN1cHBvcnRLZXlzLmFsbCwgJ3dpbnMnXSBhcyBjb25zdCxcbiAgd2luc0J5Q2F0ZWdvcnk6ICgpID0+IFsuLi5zdXBwb3J0S2V5cy53aW5zKCksICdieS1jYXRlZ29yeSddIGFzIGNvbnN0LFxuICBoYWJpdHM6ICgpID0+IFsuLi5zdXBwb3J0S2V5cy5hbGwsICdoYWJpdHMnXSBhcyBjb25zdCxcbiAgcmVmbGVjdGlvbnM6ICgpID0+IFsuLi5zdXBwb3J0S2V5cy5hbGwsICdyZWZsZWN0aW9ucyddIGFzIGNvbnN0LFxufTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gVFlQRVNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IGludGVyZmFjZSBXaW5zQnlDYXRlZ29yeSB7XG4gIGNhdGVnb3J5OiBzdHJpbmc7XG4gIHdpbnM6IFdpblJlc3BvbnNlW107XG4gIGNvdW50OiBudW1iZXI7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFFVRVJZIEhPT0tTXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogR2V0IHVzZXIncyBkYWlseSBjaGVjay1pbnNcbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRhblN0YWNrIFF1ZXJ5IG9wdGlvbnNcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHN4XG4gKiBjb25zdCB7IGRhdGEsIGlzTG9hZGluZyB9ID0gdXNlQ2hlY2tJbnMoKTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlQ2hlY2tJbnMoXG4gIG9wdGlvbnM/OiBPbWl0PFVzZVF1ZXJ5T3B0aW9uczxEYWlseUNoZWNrSW5SZXNwb25zZVtdPiwgJ3F1ZXJ5S2V5JyB8ICdxdWVyeUZuJz5cbikge1xuICByZXR1cm4gdXNlUXVlcnkoe1xuICAgIHF1ZXJ5S2V5OiBzdXBwb3J0S2V5cy5jaGVja0lucygpLFxuICAgIHF1ZXJ5Rm46IGFzeW5jICgpOiBQcm9taXNlPERhaWx5Q2hlY2tJblJlc3BvbnNlW10+ID0+IHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IGdldEFwaUNsaWVudCgpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuZ2V0KCcvYXBpL3YxL3N1cHBvcnQvY2hlY2staW5zJyk7XG4gICAgICAvLyBBUEkgd3JhcHMgcmVzcG9uc2VzIGluIHsgZGF0YTogWy4uLl0sIG1ldGE6IHsuLi59IH1cbiAgICAgIHJldHVybiByZXNwb25zZS5kYXRhPy5kYXRhIHx8IHJlc3BvbnNlLmRhdGEgfHwgW107XG4gICAgfSxcbiAgICAuLi5vcHRpb25zLFxuICB9KTtcbn1cblxuLyoqXG4gKiBHZXQgdG9kYXkncyBjaGVjay1pblxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGFuU3RhY2sgUXVlcnkgb3B0aW9uc1xuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c3hcbiAqIGNvbnN0IHsgZGF0YSwgaXNMb2FkaW5nIH0gPSB1c2VUb2RheUNoZWNrSW4oKTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlVG9kYXlDaGVja0luKFxuICBvcHRpb25zPzogT21pdDxVc2VRdWVyeU9wdGlvbnM8RGFpbHlDaGVja0luUmVzcG9uc2UgfCBudWxsPiwgJ3F1ZXJ5S2V5JyB8ICdxdWVyeUZuJz5cbikge1xuICByZXR1cm4gdXNlUXVlcnkoe1xuICAgIHF1ZXJ5S2V5OiBzdXBwb3J0S2V5cy5jaGVja0luVG9kYXkoKSxcbiAgICBxdWVyeUZuOiBhc3luYyAoKTogUHJvbWlzZTxEYWlseUNoZWNrSW5SZXNwb25zZSB8IG51bGw+ID0+IHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IGdldEFwaUNsaWVudCgpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuZ2V0KCcvYXBpL3YxL3N1cHBvcnQvY2hlY2staW5zL3RvZGF5Jyk7XG4gICAgICAvLyBBUEkgd3JhcHMgcmVzcG9uc2VzIGluIHsgZGF0YTogey4uLn0sIG1ldGE6IHsuLi59IH1cbiAgICAgIHJldHVybiByZXNwb25zZS5kYXRhPy5kYXRhID8/IHJlc3BvbnNlLmRhdGEgPz8gbnVsbDtcbiAgICB9LFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pO1xufVxuXG4vKipcbiAqIEdldCB1c2VyJ3MgY2hlY2staW4gc3RyZWFrXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUYW5TdGFjayBRdWVyeSBvcHRpb25zXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzeFxuICogY29uc3QgeyBkYXRhLCBpc0xvYWRpbmcgfSA9IHVzZUNoZWNrSW5TdHJlYWsoKTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlQ2hlY2tJblN0cmVhayhcbiAgb3B0aW9ucz86IE9taXQ8VXNlUXVlcnlPcHRpb25zPFVzZXJTdHJlYWtSZXNwb25zZT4sICdxdWVyeUtleScgfCAncXVlcnlGbic+XG4pIHtcbiAgcmV0dXJuIHVzZVF1ZXJ5KHtcbiAgICBxdWVyeUtleTogc3VwcG9ydEtleXMuY2hlY2tJblN0cmVhaygpLFxuICAgIHF1ZXJ5Rm46IGFzeW5jICgpOiBQcm9taXNlPFVzZXJTdHJlYWtSZXNwb25zZT4gPT4ge1xuICAgICAgY29uc3QgY2xpZW50ID0gZ2V0QXBpQ2xpZW50KCk7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5nZXQoJy9hcGkvdjEvc3VwcG9ydC9jaGVjay1pbnMvc3RyZWFrJyk7XG4gICAgICAvLyBBUEkgd3JhcHMgcmVzcG9uc2VzIGluIHsgZGF0YTogey4uLn0sIG1ldGE6IHsuLi59IH1cbiAgICAgIHJldHVybiByZXNwb25zZS5kYXRhPy5kYXRhIHx8IHJlc3BvbnNlLmRhdGEgfHwgeyBjdXJyZW50U3RyZWFrOiAwLCBsb25nZXN0U3RyZWFrOiAwLCB0b3RhbENoZWNrSW5zOiAwIH07XG4gICAgfSxcbiAgICAuLi5vcHRpb25zLFxuICB9KTtcbn1cblxuLyoqXG4gKiBHZXQgdXNlcidzIG1vb2QgbG9nc1xuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGFuU3RhY2sgUXVlcnkgb3B0aW9uc1xuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c3hcbiAqIGNvbnN0IHsgZGF0YSwgaXNMb2FkaW5nIH0gPSB1c2VNb29kTG9ncygpO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VNb29kTG9ncyhcbiAgb3B0aW9ucz86IE9taXQ8VXNlUXVlcnlPcHRpb25zPE1vb2RMb2dSZXNwb25zZVtdPiwgJ3F1ZXJ5S2V5JyB8ICdxdWVyeUZuJz5cbikge1xuICByZXR1cm4gdXNlUXVlcnkoe1xuICAgIHF1ZXJ5S2V5OiBzdXBwb3J0S2V5cy5tb29kTG9ncygpLFxuICAgIHF1ZXJ5Rm46IGFzeW5jICgpOiBQcm9taXNlPE1vb2RMb2dSZXNwb25zZVtdPiA9PiB7XG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRBcGlDbGllbnQoKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LmdldCgnL2FwaS92MS9zdXBwb3J0L21vb2QnKTtcbiAgICAgIHJldHVybiByZXNwb25zZS5kYXRhO1xuICAgIH0sXG4gICAgLi4ub3B0aW9ucyxcbiAgfSk7XG59XG5cbi8qKlxuICogR2V0IHVzZXIncyB3aW5zXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUYW5TdGFjayBRdWVyeSBvcHRpb25zXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzeFxuICogY29uc3QgeyBkYXRhLCBpc0xvYWRpbmcgfSA9IHVzZVdpbnMoKTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlV2lucyhcbiAgb3B0aW9ucz86IE9taXQ8VXNlUXVlcnlPcHRpb25zPFdpblJlc3BvbnNlW10+LCAncXVlcnlLZXknIHwgJ3F1ZXJ5Rm4nPlxuKSB7XG4gIHJldHVybiB1c2VRdWVyeSh7XG4gICAgcXVlcnlLZXk6IHN1cHBvcnRLZXlzLndpbnMoKSxcbiAgICBxdWVyeUZuOiBhc3luYyAoKTogUHJvbWlzZTxXaW5SZXNwb25zZVtdPiA9PiB7XG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRBcGlDbGllbnQoKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LmdldCgnL2FwaS92MS9zdXBwb3J0L3dpbnMnKTtcbiAgICAgIHJldHVybiByZXNwb25zZS5kYXRhO1xuICAgIH0sXG4gICAgLi4ub3B0aW9ucyxcbiAgfSk7XG59XG5cbi8qKlxuICogR2V0IHVzZXIncyB3aW5zIGdyb3VwZWQgYnkgY2F0ZWdvcnlcbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRhblN0YWNrIFF1ZXJ5IG9wdGlvbnNcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHN4XG4gKiBjb25zdCB7IGRhdGEsIGlzTG9hZGluZyB9ID0gdXNlV2luc0J5Q2F0ZWdvcnkoKTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlV2luc0J5Q2F0ZWdvcnkoXG4gIG9wdGlvbnM/OiBPbWl0PFVzZVF1ZXJ5T3B0aW9uczxXaW5zQnlDYXRlZ29yeVtdPiwgJ3F1ZXJ5S2V5JyB8ICdxdWVyeUZuJz5cbikge1xuICByZXR1cm4gdXNlUXVlcnkoe1xuICAgIHF1ZXJ5S2V5OiBzdXBwb3J0S2V5cy53aW5zQnlDYXRlZ29yeSgpLFxuICAgIHF1ZXJ5Rm46IGFzeW5jICgpOiBQcm9taXNlPFdpbnNCeUNhdGVnb3J5W10+ID0+IHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IGdldEFwaUNsaWVudCgpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuZ2V0KCcvYXBpL3YxL3N1cHBvcnQvd2lucy9ieS1jYXRlZ29yeScpO1xuICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG4gICAgfSxcbiAgICAuLi5vcHRpb25zLFxuICB9KTtcbn1cblxuLyoqXG4gKiBHZXQgdXNlcidzIGhhYml0c1xuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGFuU3RhY2sgUXVlcnkgb3B0aW9uc1xuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c3hcbiAqIGNvbnN0IHsgZGF0YSwgaXNMb2FkaW5nIH0gPSB1c2VIYWJpdHMoKTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlSGFiaXRzKFxuICBvcHRpb25zPzogT21pdDxVc2VRdWVyeU9wdGlvbnM8SGFiaXRSZXNwb25zZVtdPiwgJ3F1ZXJ5S2V5JyB8ICdxdWVyeUZuJz5cbikge1xuICByZXR1cm4gdXNlUXVlcnkoe1xuICAgIHF1ZXJ5S2V5OiBzdXBwb3J0S2V5cy5oYWJpdHMoKSxcbiAgICBxdWVyeUZuOiBhc3luYyAoKTogUHJvbWlzZTxIYWJpdFJlc3BvbnNlW10+ID0+IHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IGdldEFwaUNsaWVudCgpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuZ2V0KCcvYXBpL3YxL3N1cHBvcnQvaGFiaXRzJyk7XG4gICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcbiAgICB9LFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pO1xufVxuXG4vKipcbiAqIEdldCB1c2VyJ3MgcmVmbGVjdGlvbnNcbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRhblN0YWNrIFF1ZXJ5IG9wdGlvbnNcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHN4XG4gKiBjb25zdCB7IGRhdGEsIGlzTG9hZGluZyB9ID0gdXNlUmVmbGVjdGlvbnMoKTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlUmVmbGVjdGlvbnMoXG4gIG9wdGlvbnM/OiBPbWl0PFVzZVF1ZXJ5T3B0aW9uczxSZWZsZWN0aW9uUmVzcG9uc2VbXT4sICdxdWVyeUtleScgfCAncXVlcnlGbic+XG4pIHtcbiAgcmV0dXJuIHVzZVF1ZXJ5KHtcbiAgICBxdWVyeUtleTogc3VwcG9ydEtleXMucmVmbGVjdGlvbnMoKSxcbiAgICBxdWVyeUZuOiBhc3luYyAoKTogUHJvbWlzZTxSZWZsZWN0aW9uUmVzcG9uc2VbXT4gPT4ge1xuICAgICAgY29uc3QgY2xpZW50ID0gZ2V0QXBpQ2xpZW50KCk7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5nZXQoJy9hcGkvdjEvc3VwcG9ydC9yZWZsZWN0aW9ucycpO1xuICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG4gICAgfSxcbiAgICAuLi5vcHRpb25zLFxuICB9KTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,293 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Users Query Hooks
|
|
3
|
+
*
|
|
4
|
+
* TanStack Query hooks for user-related read operations.
|
|
5
|
+
* These hooks handle fetching user data, profiles, library items, and subscriptions.
|
|
6
|
+
*
|
|
7
|
+
* @module api/queries/users
|
|
8
|
+
*/
|
|
9
|
+
import { UseQueryOptions, UseQueryResult } from '@tanstack/react-query';
|
|
10
|
+
import type { UserResponse, UserPublicResponse, LibraryContentResponse, LibraryProgressResponse, OfferResponse } from '../types';
|
|
11
|
+
/**
|
|
12
|
+
* Query key factory for user-related queries
|
|
13
|
+
* @see https://tkdodo.eu/blog/effective-react-query-keys
|
|
14
|
+
*/
|
|
15
|
+
export declare const userKeys: {
|
|
16
|
+
all: readonly ["users"];
|
|
17
|
+
me: () => readonly ["users", "me"];
|
|
18
|
+
detail: (id: string) => readonly ["users", "detail", string];
|
|
19
|
+
public: (id: string) => readonly ["users", "public", string];
|
|
20
|
+
library: {
|
|
21
|
+
all: () => readonly ["users", "me", "library"];
|
|
22
|
+
bookmarks: () => readonly ["users", "me", "library", "bookmarks"];
|
|
23
|
+
progress: () => readonly ["users", "me", "library", "progress"];
|
|
24
|
+
};
|
|
25
|
+
offers: {
|
|
26
|
+
all: () => readonly ["users", "me", "offers"];
|
|
27
|
+
redeemed: () => readonly ["users", "me", "offers", "redeemed"];
|
|
28
|
+
};
|
|
29
|
+
subscription: () => readonly ["users", "me", "subscription"];
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* Get current user's profile
|
|
33
|
+
*
|
|
34
|
+
* @description
|
|
35
|
+
* Retrieves the currently authenticated user's complete profile information.
|
|
36
|
+
* Requires a valid access token to be set via the SDK configuration.
|
|
37
|
+
*
|
|
38
|
+
* @endpoint GET /api/v1/users/me
|
|
39
|
+
*
|
|
40
|
+
* @example
|
|
41
|
+
* ```tsx
|
|
42
|
+
* import { useCurrentUser } from '@growsober/sdk';
|
|
43
|
+
*
|
|
44
|
+
* function ProfileScreen() {
|
|
45
|
+
* const { data: user, isLoading, error } = useCurrentUser();
|
|
46
|
+
*
|
|
47
|
+
* if (isLoading) return <Spinner />;
|
|
48
|
+
* if (error) return <Error message={error.message} />;
|
|
49
|
+
* if (!user) return <NotFound />;
|
|
50
|
+
*
|
|
51
|
+
* return (
|
|
52
|
+
* <div>
|
|
53
|
+
* <h1>{user.name}</h1>
|
|
54
|
+
* <p>{user.email}</p>
|
|
55
|
+
* <p>Sober Since: {user.soberDate}</p>
|
|
56
|
+
* </div>
|
|
57
|
+
* );
|
|
58
|
+
* }
|
|
59
|
+
* ```
|
|
60
|
+
*
|
|
61
|
+
* @example
|
|
62
|
+
* With custom options:
|
|
63
|
+
* ```tsx
|
|
64
|
+
* const { data: user } = useCurrentUser({
|
|
65
|
+
* refetchOnMount: false,
|
|
66
|
+
* staleTime: 5 * 60 * 1000, // 5 minutes
|
|
67
|
+
* });
|
|
68
|
+
* ```
|
|
69
|
+
*
|
|
70
|
+
* @param options - TanStack Query options for customizing the query behavior
|
|
71
|
+
* @returns TanStack Query result with user data
|
|
72
|
+
*/
|
|
73
|
+
export declare function useCurrentUser(options?: Omit<UseQueryOptions<UserResponse>, 'queryKey' | 'queryFn'>): UseQueryResult<UserResponse>;
|
|
74
|
+
/**
|
|
75
|
+
* Get a specific user's full profile by ID
|
|
76
|
+
*
|
|
77
|
+
* @description
|
|
78
|
+
* Retrieves a user's complete profile information by their ID.
|
|
79
|
+
* This may include private information depending on the requesting user's permissions.
|
|
80
|
+
*
|
|
81
|
+
* @endpoint GET /api/v1/users/{id}
|
|
82
|
+
*
|
|
83
|
+
* @example
|
|
84
|
+
* ```tsx
|
|
85
|
+
* import { useUser } from '@growsober/sdk';
|
|
86
|
+
*
|
|
87
|
+
* function UserProfileScreen({ userId }: { userId: string }) {
|
|
88
|
+
* const { data: user, isLoading } = useUser(userId);
|
|
89
|
+
*
|
|
90
|
+
* if (isLoading) return <Spinner />;
|
|
91
|
+
*
|
|
92
|
+
* return (
|
|
93
|
+
* <div>
|
|
94
|
+
* <Avatar src={user.avatar} />
|
|
95
|
+
* <h1>{user.name}</h1>
|
|
96
|
+
* <p>{user.bio}</p>
|
|
97
|
+
* </div>
|
|
98
|
+
* );
|
|
99
|
+
* }
|
|
100
|
+
* ```
|
|
101
|
+
*
|
|
102
|
+
* @example
|
|
103
|
+
* With conditional fetching:
|
|
104
|
+
* ```tsx
|
|
105
|
+
* const { data: user } = useUser(userId, {
|
|
106
|
+
* enabled: !!userId, // Only fetch when userId is defined
|
|
107
|
+
* });
|
|
108
|
+
* ```
|
|
109
|
+
*
|
|
110
|
+
* @param id - The user ID to fetch
|
|
111
|
+
* @param options - TanStack Query options for customizing the query behavior
|
|
112
|
+
* @returns TanStack Query result with user data
|
|
113
|
+
*/
|
|
114
|
+
export declare function useUser(id: string, options?: Omit<UseQueryOptions<UserResponse>, 'queryKey' | 'queryFn'>): UseQueryResult<UserResponse>;
|
|
115
|
+
/**
|
|
116
|
+
* Get a user's public profile by ID
|
|
117
|
+
*
|
|
118
|
+
* @description
|
|
119
|
+
* Retrieves a user's public profile information.
|
|
120
|
+
* This endpoint returns only publicly visible information and doesn't require authentication.
|
|
121
|
+
*
|
|
122
|
+
* @endpoint GET /api/v1/users/{id}/public
|
|
123
|
+
*
|
|
124
|
+
* @example
|
|
125
|
+
* ```tsx
|
|
126
|
+
* import { usePublicProfile } from '@growsober/sdk';
|
|
127
|
+
*
|
|
128
|
+
* function PublicProfileCard({ userId }: { userId: string }) {
|
|
129
|
+
* const { data: profile, isLoading } = usePublicProfile(userId);
|
|
130
|
+
*
|
|
131
|
+
* if (isLoading) return <Skeleton />;
|
|
132
|
+
*
|
|
133
|
+
* return (
|
|
134
|
+
* <div>
|
|
135
|
+
* <Avatar src={profile.avatar} />
|
|
136
|
+
* <h2>{profile.displayName}</h2>
|
|
137
|
+
* <p>{profile.city}</p>
|
|
138
|
+
* {profile.soberSince && (
|
|
139
|
+
* <p>Sober since: {new Date(profile.soberSince).toLocaleDateString()}</p>
|
|
140
|
+
* )}
|
|
141
|
+
* </div>
|
|
142
|
+
* );
|
|
143
|
+
* }
|
|
144
|
+
* ```
|
|
145
|
+
*
|
|
146
|
+
* @param id - The user ID to fetch
|
|
147
|
+
* @param options - TanStack Query options for customizing the query behavior
|
|
148
|
+
* @returns TanStack Query result with public profile data
|
|
149
|
+
*/
|
|
150
|
+
export declare function usePublicProfile(id: string, options?: Omit<UseQueryOptions<UserPublicResponse>, 'queryKey' | 'queryFn'>): UseQueryResult<UserPublicResponse>;
|
|
151
|
+
/**
|
|
152
|
+
* Get current user's bookmarked library content
|
|
153
|
+
*
|
|
154
|
+
* @description
|
|
155
|
+
* Retrieves all library content (articles, videos, podcasts, etc.) that the user has bookmarked.
|
|
156
|
+
* This allows users to save content for later reading/viewing.
|
|
157
|
+
*
|
|
158
|
+
* @endpoint GET /api/v1/users/me/library/bookmarks
|
|
159
|
+
*
|
|
160
|
+
* @example
|
|
161
|
+
* ```tsx
|
|
162
|
+
* import { useMyBookmarks } from '@growsober/sdk';
|
|
163
|
+
*
|
|
164
|
+
* function BookmarksScreen() {
|
|
165
|
+
* const { data: bookmarks, isLoading } = useMyBookmarks();
|
|
166
|
+
*
|
|
167
|
+
* if (isLoading) return <Loading />;
|
|
168
|
+
*
|
|
169
|
+
* return (
|
|
170
|
+
* <div>
|
|
171
|
+
* <h1>My Saved Content</h1>
|
|
172
|
+
* {bookmarks?.map(content => (
|
|
173
|
+
* <ContentCard key={content.id} content={content} />
|
|
174
|
+
* ))}
|
|
175
|
+
* </div>
|
|
176
|
+
* );
|
|
177
|
+
* }
|
|
178
|
+
* ```
|
|
179
|
+
*
|
|
180
|
+
* @example
|
|
181
|
+
* With auto-refresh:
|
|
182
|
+
* ```tsx
|
|
183
|
+
* const { data: bookmarks } = useMyBookmarks({
|
|
184
|
+
* refetchInterval: 60000, // Refresh every minute
|
|
185
|
+
* });
|
|
186
|
+
* ```
|
|
187
|
+
*
|
|
188
|
+
* @param options - TanStack Query options for customizing the query behavior
|
|
189
|
+
* @returns TanStack Query result with array of bookmarked content
|
|
190
|
+
*/
|
|
191
|
+
export declare function useMyBookmarks(options?: Omit<UseQueryOptions<LibraryContentResponse[]>, 'queryKey' | 'queryFn'>): UseQueryResult<LibraryContentResponse[]>;
|
|
192
|
+
/**
|
|
193
|
+
* Get current user's library content progress
|
|
194
|
+
*
|
|
195
|
+
* @description
|
|
196
|
+
* Retrieves the user's progress on library content items.
|
|
197
|
+
* Tracks which content has been started, completed, or partially viewed/read.
|
|
198
|
+
*
|
|
199
|
+
* @endpoint GET /api/v1/users/me/library/progress
|
|
200
|
+
*
|
|
201
|
+
* @example
|
|
202
|
+
* ```tsx
|
|
203
|
+
* import { useMyProgress } from '@growsober/sdk';
|
|
204
|
+
*
|
|
205
|
+
* function LibraryProgressScreen() {
|
|
206
|
+
* const { data: progress, isLoading } = useMyProgress();
|
|
207
|
+
*
|
|
208
|
+
* if (isLoading) return <Loading />;
|
|
209
|
+
*
|
|
210
|
+
* const completed = progress?.filter(p => p.completed) || [];
|
|
211
|
+
* const inProgress = progress?.filter(p => !p.completed && p.progress > 0) || [];
|
|
212
|
+
*
|
|
213
|
+
* return (
|
|
214
|
+
* <div>
|
|
215
|
+
* <h2>Completed: {completed.length}</h2>
|
|
216
|
+
* <h2>In Progress: {inProgress.length}</h2>
|
|
217
|
+
* </div>
|
|
218
|
+
* );
|
|
219
|
+
* }
|
|
220
|
+
* ```
|
|
221
|
+
*
|
|
222
|
+
* @example
|
|
223
|
+
* Check progress for specific content:
|
|
224
|
+
* ```tsx
|
|
225
|
+
* function ContentProgress({ contentId }: { contentId: string }) {
|
|
226
|
+
* const { data: progress } = useMyProgress();
|
|
227
|
+
* const contentProgress = progress?.find(p => p.contentId === contentId);
|
|
228
|
+
*
|
|
229
|
+
* return (
|
|
230
|
+
* <ProgressBar
|
|
231
|
+
* value={contentProgress?.progress || 0}
|
|
232
|
+
* max={100}
|
|
233
|
+
* />
|
|
234
|
+
* );
|
|
235
|
+
* }
|
|
236
|
+
* ```
|
|
237
|
+
*
|
|
238
|
+
* @param options - TanStack Query options for customizing the query behavior
|
|
239
|
+
* @returns TanStack Query result with array of progress records
|
|
240
|
+
*/
|
|
241
|
+
export declare function useMyProgress(options?: Omit<UseQueryOptions<LibraryProgressResponse[]>, 'queryKey' | 'queryFn'>): UseQueryResult<LibraryProgressResponse[]>;
|
|
242
|
+
/**
|
|
243
|
+
* Get current user's redeemed offers
|
|
244
|
+
*
|
|
245
|
+
* @description
|
|
246
|
+
* Retrieves all offers/deals that the user has redeemed.
|
|
247
|
+
* Shows history of partner offers used by the user.
|
|
248
|
+
*
|
|
249
|
+
* @endpoint GET /api/v1/users/me/offers/redeemed
|
|
250
|
+
*
|
|
251
|
+
* @example
|
|
252
|
+
* ```tsx
|
|
253
|
+
* import { useMyRedeemedOffers } from '@growsober/sdk';
|
|
254
|
+
*
|
|
255
|
+
* function RedeemedOffersScreen() {
|
|
256
|
+
* const { data: offers, isLoading } = useMyRedeemedOffers();
|
|
257
|
+
*
|
|
258
|
+
* if (isLoading) return <Loading />;
|
|
259
|
+
*
|
|
260
|
+
* return (
|
|
261
|
+
* <div>
|
|
262
|
+
* <h1>My Redeemed Offers</h1>
|
|
263
|
+
* {offers?.map(offer => (
|
|
264
|
+
* <div key={offer.id}>
|
|
265
|
+
* <h3>{offer.title}</h3>
|
|
266
|
+
* <p>Redeemed: {new Date(offer.redeemedAt).toLocaleDateString()}</p>
|
|
267
|
+
* <p>Code: {offer.code}</p>
|
|
268
|
+
* </div>
|
|
269
|
+
* ))}
|
|
270
|
+
* </div>
|
|
271
|
+
* );
|
|
272
|
+
* }
|
|
273
|
+
* ```
|
|
274
|
+
*
|
|
275
|
+
* @example
|
|
276
|
+
* Check if specific offer was redeemed:
|
|
277
|
+
* ```tsx
|
|
278
|
+
* function OfferCard({ offerId }: { offerId: string }) {
|
|
279
|
+
* const { data: redeemedOffers } = useMyRedeemedOffers();
|
|
280
|
+
* const isRedeemed = redeemedOffers?.some(o => o.id === offerId);
|
|
281
|
+
*
|
|
282
|
+
* return (
|
|
283
|
+
* <button disabled={isRedeemed}>
|
|
284
|
+
* {isRedeemed ? 'Already Redeemed' : 'Redeem Offer'}
|
|
285
|
+
* </button>
|
|
286
|
+
* );
|
|
287
|
+
* }
|
|
288
|
+
* ```
|
|
289
|
+
*
|
|
290
|
+
* @param options - TanStack Query options for customizing the query behavior
|
|
291
|
+
* @returns TanStack Query result with array of redeemed offers
|
|
292
|
+
*/
|
|
293
|
+
export declare function useMyRedeemedOffers(options?: Omit<UseQueryOptions<OfferResponse[]>, 'queryKey' | 'queryFn'>): UseQueryResult<OfferResponse[]>;
|