@oxyhq/services 22.2.0 → 22.4.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.
Files changed (88) hide show
  1. package/lib/commonjs/index.js +6 -0
  2. package/lib/commonjs/index.js.map +1 -1
  3. package/lib/commonjs/ui/components/FollowButton.js +24 -19
  4. package/lib/commonjs/ui/components/FollowButton.js.map +1 -1
  5. package/lib/commonjs/ui/components/OxyAuthChooser.js +74 -94
  6. package/lib/commonjs/ui/components/OxyAuthChooser.js.map +1 -1
  7. package/lib/commonjs/ui/components/oxyAuthChooserStyles.js +0 -19
  8. package/lib/commonjs/ui/components/oxyAuthChooserStyles.js.map +1 -1
  9. package/lib/commonjs/ui/context/useOxyAccountGraph.js +2 -0
  10. package/lib/commonjs/ui/context/useOxyAccountGraph.js.map +1 -1
  11. package/lib/commonjs/ui/hooks/useFollow.js +53 -10
  12. package/lib/commonjs/ui/hooks/useFollow.js.map +1 -1
  13. package/lib/commonjs/ui/hooks/useSessionManagement.js +2 -0
  14. package/lib/commonjs/ui/hooks/useSessionManagement.js.map +1 -1
  15. package/lib/commonjs/ui/index.js +6 -0
  16. package/lib/commonjs/ui/index.js.map +1 -1
  17. package/lib/commonjs/ui/stores/followStore.js +276 -92
  18. package/lib/commonjs/ui/stores/followStore.js.map +1 -1
  19. package/lib/commonjs/ui/stores/resetSessionScopedStores.js +14 -0
  20. package/lib/commonjs/ui/stores/resetSessionScopedStores.js.map +1 -0
  21. package/lib/module/index.js +1 -1
  22. package/lib/module/index.js.map +1 -1
  23. package/lib/module/ui/components/FollowButton.js +24 -19
  24. package/lib/module/ui/components/FollowButton.js.map +1 -1
  25. package/lib/module/ui/components/OxyAuthChooser.js +75 -95
  26. package/lib/module/ui/components/OxyAuthChooser.js.map +1 -1
  27. package/lib/module/ui/components/oxyAuthChooserStyles.js +0 -19
  28. package/lib/module/ui/components/oxyAuthChooserStyles.js.map +1 -1
  29. package/lib/module/ui/context/useOxyAccountGraph.js +2 -0
  30. package/lib/module/ui/context/useOxyAccountGraph.js.map +1 -1
  31. package/lib/module/ui/hooks/useFollow.js +51 -9
  32. package/lib/module/ui/hooks/useFollow.js.map +1 -1
  33. package/lib/module/ui/hooks/useSessionManagement.js +2 -0
  34. package/lib/module/ui/hooks/useSessionManagement.js.map +1 -1
  35. package/lib/module/ui/index.js +1 -1
  36. package/lib/module/ui/index.js.map +1 -1
  37. package/lib/module/ui/stores/followStore.js +274 -91
  38. package/lib/module/ui/stores/followStore.js.map +1 -1
  39. package/lib/module/ui/stores/resetSessionScopedStores.js +11 -0
  40. package/lib/module/ui/stores/resetSessionScopedStores.js.map +1 -0
  41. package/lib/typescript/commonjs/index.d.ts +1 -1
  42. package/lib/typescript/commonjs/index.d.ts.map +1 -1
  43. package/lib/typescript/commonjs/ui/components/FollowButton.d.ts.map +1 -1
  44. package/lib/typescript/commonjs/ui/components/OxyAuthChooser.d.ts.map +1 -1
  45. package/lib/typescript/commonjs/ui/components/oxyAuthChooserStyles.d.ts +0 -19
  46. package/lib/typescript/commonjs/ui/components/oxyAuthChooserStyles.d.ts.map +1 -1
  47. package/lib/typescript/commonjs/ui/context/useOxyAccountGraph.d.ts.map +1 -1
  48. package/lib/typescript/commonjs/ui/hooks/mutations/useAccountMutations.d.ts +3 -0
  49. package/lib/typescript/commonjs/ui/hooks/mutations/useAccountMutations.d.ts.map +1 -1
  50. package/lib/typescript/commonjs/ui/hooks/useFollow.d.ts +13 -2
  51. package/lib/typescript/commonjs/ui/hooks/useFollow.d.ts.map +1 -1
  52. package/lib/typescript/commonjs/ui/hooks/useSessionManagement.d.ts.map +1 -1
  53. package/lib/typescript/commonjs/ui/index.d.ts +1 -1
  54. package/lib/typescript/commonjs/ui/index.d.ts.map +1 -1
  55. package/lib/typescript/commonjs/ui/stores/followStore.d.ts +4 -1
  56. package/lib/typescript/commonjs/ui/stores/followStore.d.ts.map +1 -1
  57. package/lib/typescript/commonjs/ui/stores/resetSessionScopedStores.d.ts +3 -0
  58. package/lib/typescript/commonjs/ui/stores/resetSessionScopedStores.d.ts.map +1 -0
  59. package/lib/typescript/module/index.d.ts +1 -1
  60. package/lib/typescript/module/index.d.ts.map +1 -1
  61. package/lib/typescript/module/ui/components/FollowButton.d.ts.map +1 -1
  62. package/lib/typescript/module/ui/components/OxyAuthChooser.d.ts.map +1 -1
  63. package/lib/typescript/module/ui/components/oxyAuthChooserStyles.d.ts +0 -19
  64. package/lib/typescript/module/ui/components/oxyAuthChooserStyles.d.ts.map +1 -1
  65. package/lib/typescript/module/ui/context/useOxyAccountGraph.d.ts.map +1 -1
  66. package/lib/typescript/module/ui/hooks/mutations/useAccountMutations.d.ts +3 -0
  67. package/lib/typescript/module/ui/hooks/mutations/useAccountMutations.d.ts.map +1 -1
  68. package/lib/typescript/module/ui/hooks/useFollow.d.ts +13 -2
  69. package/lib/typescript/module/ui/hooks/useFollow.d.ts.map +1 -1
  70. package/lib/typescript/module/ui/hooks/useSessionManagement.d.ts.map +1 -1
  71. package/lib/typescript/module/ui/index.d.ts +1 -1
  72. package/lib/typescript/module/ui/index.d.ts.map +1 -1
  73. package/lib/typescript/module/ui/stores/followStore.d.ts +4 -1
  74. package/lib/typescript/module/ui/stores/followStore.d.ts.map +1 -1
  75. package/lib/typescript/module/ui/stores/resetSessionScopedStores.d.ts +3 -0
  76. package/lib/typescript/module/ui/stores/resetSessionScopedStores.d.ts.map +1 -0
  77. package/package.json +5 -5
  78. package/src/index.ts +1 -1
  79. package/src/ui/components/FollowButton.tsx +22 -20
  80. package/src/ui/components/OxyAuthChooser.tsx +87 -75
  81. package/src/ui/components/oxyAuthChooserStyles.ts +0 -19
  82. package/src/ui/context/useOxyAccountGraph.ts +2 -0
  83. package/src/ui/hooks/useFollow.ts +51 -9
  84. package/src/ui/hooks/useSessionManagement.ts +2 -0
  85. package/src/ui/index.ts +1 -1
  86. package/src/ui/stores/__tests__/followStore.test.ts +178 -0
  87. package/src/ui/stores/followStore.ts +277 -106
  88. package/src/ui/stores/resetSessionScopedStores.ts +8 -0
@@ -3,8 +3,43 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.useFollowStore = void 0;
6
+ exports.useFollowStore = exports.resetFollowBatchState = void 0;
7
7
  var _zustand = require("zustand");
8
+ const hasKey = (map, key) => Object.prototype.hasOwnProperty.call(map, key);
9
+ const scheduleMicrotask = cb => {
10
+ if (typeof queueMicrotask === 'function') {
11
+ queueMicrotask(cb);
12
+ } else {
13
+ setTimeout(cb, 0);
14
+ }
15
+ };
16
+
17
+ // ---------------------------------------------------------------------------
18
+ // Module-level micro-batch coordination for `resolveFollowStatuses`.
19
+ //
20
+ // Every UNKNOWN id requested within a single synchronous tick (e.g. a whole
21
+ // page of FollowButtons mounting in one commit) is collected in `pendingIds`
22
+ // and flushed by a SINGLE coalesced `getFollowStatuses` call on the next
23
+ // microtask. `inFlightIds` prevents an id already being fetched from being
24
+ // re-enqueued before its result lands. These are imperative coordination
25
+ // primitives read/written ONLY inside store actions — never in a render/memo
26
+ // position — so they are safe under the React Compiler.
27
+ // ---------------------------------------------------------------------------
28
+ let pendingIds = new Set();
29
+ let pendingServices = null;
30
+ let flushScheduled = false;
31
+ const inFlightIds = new Set();
32
+ let batchGeneration = 0;
33
+
34
+ /** Clears module-level micro-batch coordination state (test + sign-out hooks). */
35
+ const resetFollowBatchState = () => {
36
+ pendingIds = new Set();
37
+ pendingServices = null;
38
+ flushScheduled = false;
39
+ inFlightIds.clear();
40
+ batchGeneration += 1;
41
+ };
42
+ exports.resetFollowBatchState = resetFollowBatchState;
8
43
  const useFollowStore = exports.useFollowStore = (0, _zustand.create)((set, get) => ({
9
44
  followingUsers: {},
10
45
  loadingUsers: {},
@@ -23,63 +58,141 @@ const useFollowStore = exports.useFollowStore = (0, _zustand.create)((set, get)
23
58
  [userId]: null
24
59
  }
25
60
  })),
61
+ setFollowStatuses: map => set(state => {
62
+ const followingUsers = {
63
+ ...state.followingUsers
64
+ };
65
+ let changed = false;
66
+ for (const [userId, isFollowing] of Object.entries(map)) {
67
+ // Seed only if absent — never overwrite a definite value the store already
68
+ // holds (e.g. one written optimistically). Idempotent and safe to call on
69
+ // every graph refresh.
70
+ if (!hasKey(followingUsers, userId)) {
71
+ followingUsers[userId] = isFollowing;
72
+ changed = true;
73
+ }
74
+ }
75
+ return changed ? {
76
+ followingUsers
77
+ } : {};
78
+ }),
26
79
  clearFollowError: userId => set(state => ({
27
80
  errors: {
28
81
  ...state.errors,
29
82
  [userId]: null
30
83
  }
31
84
  })),
32
- resetFollowState: () => set({
33
- followingUsers: {},
34
- loadingUsers: {},
35
- fetchingUsers: {},
36
- errors: {},
37
- followerCounts: {},
38
- followingCounts: {},
39
- loadingCounts: {}
40
- }),
41
- fetchFollowStatus: async (userId, oxyServices) => {
42
- set(state => ({
43
- fetchingUsers: {
44
- ...state.fetchingUsers,
45
- [userId]: true
46
- },
47
- errors: {
48
- ...state.errors,
49
- [userId]: null
50
- }
51
- }));
52
- try {
53
- const response = await oxyServices.getFollowStatus(userId);
54
- set(state => ({
55
- followingUsers: {
56
- ...state.followingUsers,
57
- [userId]: response.isFollowing
58
- },
59
- fetchingUsers: {
60
- ...state.fetchingUsers,
61
- [userId]: false
62
- },
63
- errors: {
64
- ...state.errors,
65
- [userId]: null
66
- }
67
- }));
68
- } catch (error) {
69
- set(state => ({
70
- fetchingUsers: {
71
- ...state.fetchingUsers,
72
- [userId]: false
73
- },
74
- errors: {
75
- ...state.errors,
76
- [userId]: (error instanceof Error ? error.message : null) || 'Failed to fetch follow status'
77
- }
78
- }));
85
+ resetFollowState: () => {
86
+ resetFollowBatchState();
87
+ set({
88
+ followingUsers: {},
89
+ loadingUsers: {},
90
+ fetchingUsers: {},
91
+ errors: {},
92
+ followerCounts: {},
93
+ followingCounts: {},
94
+ loadingCounts: {}
95
+ });
96
+ },
97
+ resolveFollowStatuses: (userIds, oxyServices) => {
98
+ const {
99
+ followingUsers
100
+ } = get();
101
+ let enqueuedAny = false;
102
+ for (const rawId of userIds) {
103
+ if (typeof rawId !== 'string') continue;
104
+ const id = rawId.trim();
105
+ if (!id) continue;
106
+ // Skip ids with a known (seeded or fetched) status, already-in-flight ids,
107
+ // and ids already queued for this flush.
108
+ if (hasKey(followingUsers, id) || inFlightIds.has(id) || pendingIds.has(id)) continue;
109
+ pendingIds.add(id);
110
+ enqueuedAny = true;
79
111
  }
112
+ if (!enqueuedAny) return;
113
+
114
+ // The most recent instance wins the flush — they are the same client per app.
115
+ pendingServices = oxyServices;
116
+ if (flushScheduled) return;
117
+ flushScheduled = true;
118
+ scheduleMicrotask(() => {
119
+ flushScheduled = false;
120
+ const ids = Array.from(pendingIds);
121
+ pendingIds = new Set();
122
+ const services = pendingServices;
123
+ pendingServices = null;
124
+ if (ids.length === 0 || !services) return;
125
+ const generation = batchGeneration;
126
+ for (const id of ids) inFlightIds.add(id);
127
+ set(state => {
128
+ const fetchingUsers = {
129
+ ...state.fetchingUsers
130
+ };
131
+ for (const id of ids) fetchingUsers[id] = true;
132
+ return {
133
+ fetchingUsers
134
+ };
135
+ });
136
+ void services.getFollowStatuses(ids).then(statuses => {
137
+ if (generation !== batchGeneration) return;
138
+ set(state => {
139
+ const followingUsersNext = {
140
+ ...state.followingUsers
141
+ };
142
+ const fetchingUsers = {
143
+ ...state.fetchingUsers
144
+ };
145
+ for (const id of ids) {
146
+ // Do not clobber a definite value written by a mutation that raced
147
+ // ahead of this batch — seed only if still unknown.
148
+ if (!hasKey(followingUsersNext, id)) {
149
+ followingUsersNext[id] = statuses[id] ?? false;
150
+ }
151
+ fetchingUsers[id] = false;
152
+ }
153
+ return {
154
+ followingUsers: followingUsersNext,
155
+ fetchingUsers
156
+ };
157
+ });
158
+ }).catch(error => {
159
+ if (generation !== batchGeneration) return;
160
+ const message = (error instanceof Error ? error.message : null) || 'Failed to fetch follow status';
161
+ set(state => {
162
+ const fetchingUsers = {
163
+ ...state.fetchingUsers
164
+ };
165
+ const errors = {
166
+ ...state.errors
167
+ };
168
+ for (const id of ids) {
169
+ fetchingUsers[id] = false;
170
+ errors[id] = message;
171
+ }
172
+ return {
173
+ fetchingUsers,
174
+ errors
175
+ };
176
+ });
177
+ }).finally(() => {
178
+ for (const id of ids) inFlightIds.delete(id);
179
+ });
180
+ });
80
181
  },
81
182
  toggleFollowUser: async (userId, oxyServices, isCurrentlyFollowing) => {
183
+ // Snapshot the prior value for rollback. `undefined` = was UNKNOWN.
184
+ const priorState = get().followingUsers;
185
+ const hadPrevious = hasKey(priorState, userId);
186
+ const previousValue = priorState[userId];
187
+ const optimisticValue = !isCurrentlyFollowing;
188
+
189
+ // Write the new value IMMEDIATELY (before the await) so the button flips
190
+ // instantly; mark loading; clear any prior error.
82
191
  set(state => ({
192
+ followingUsers: {
193
+ ...state.followingUsers,
194
+ [userId]: optimisticValue
195
+ },
83
196
  loadingUsers: {
84
197
  ...state.loadingUsers,
85
198
  [userId]: true
@@ -90,21 +203,13 @@ const useFollowStore = exports.useFollowStore = (0, _zustand.create)((set, get)
90
203
  }
91
204
  }));
92
205
  try {
93
- let response;
94
- let newFollowState;
95
- if (isCurrentlyFollowing) {
96
- response = await oxyServices.unfollowUser(userId);
97
- newFollowState = false;
98
- } else {
99
- response = await oxyServices.followUser(userId);
100
- newFollowState = true;
101
- }
206
+ const response = isCurrentlyFollowing ? await oxyServices.unfollowUser(userId) : await oxyServices.followUser(userId);
102
207
 
103
- // Update follow status
208
+ // Reconcile: confirm the optimistic value is authoritative, clear loading.
104
209
  set(state => ({
105
210
  followingUsers: {
106
211
  ...state.followingUsers,
107
- [userId]: newFollowState
212
+ [userId]: optimisticValue
108
213
  },
109
214
  loadingUsers: {
110
215
  ...state.loadingUsers,
@@ -116,51 +221,72 @@ const useFollowStore = exports.useFollowStore = (0, _zustand.create)((set, get)
116
221
  }
117
222
  }));
118
223
 
119
- // Update counts if the response includes them
224
+ // Update counts if the response includes them.
120
225
  // The API returns counts for both users:
121
226
  // - followers: target user's follower count (the user being followed)
122
227
  // - following: current user's following count (the user doing the following)
123
- if (response?.counts) {
228
+ if (response.counts) {
124
229
  const {
125
230
  counts
126
231
  } = response;
127
-
128
- // Get current user ID from oxyServices
129
232
  const currentUserId = oxyServices.getCurrentUserId();
130
233
  set(state => {
131
- const updates = {};
132
-
133
- // Update target user's follower count (the user being followed)
134
- updates.followerCounts = {
234
+ const followerCounts = {
135
235
  ...state.followerCounts,
136
236
  [userId]: counts.followers
137
237
  };
138
-
139
- // Update current user's following count (the user doing the following)
140
238
  if (currentUserId) {
141
- updates.followingCounts = {
142
- ...state.followingCounts,
143
- [currentUserId]: counts.following
239
+ return {
240
+ followerCounts,
241
+ followingCounts: {
242
+ ...state.followingCounts,
243
+ [currentUserId]: counts.following
244
+ }
144
245
  };
145
246
  }
146
- return updates;
247
+ return {
248
+ followerCounts
249
+ };
147
250
  });
148
251
  }
149
252
  } catch (error) {
150
- set(state => ({
151
- loadingUsers: {
152
- ...state.loadingUsers,
153
- [userId]: false
154
- },
155
- errors: {
156
- ...state.errors,
157
- [userId]: (error instanceof Error ? error.message : null) || 'Failed to update follow status'
253
+ // Roll back to the prior value (or back to UNKNOWN if there was none).
254
+ set(state => {
255
+ const followingUsers = {
256
+ ...state.followingUsers
257
+ };
258
+ if (hadPrevious) {
259
+ followingUsers[userId] = previousValue;
260
+ } else {
261
+ delete followingUsers[userId];
158
262
  }
159
- }));
263
+ return {
264
+ followingUsers,
265
+ loadingUsers: {
266
+ ...state.loadingUsers,
267
+ [userId]: false
268
+ },
269
+ errors: {
270
+ ...state.errors,
271
+ [userId]: (error instanceof Error ? error.message : null) || 'Failed to update follow status'
272
+ }
273
+ };
274
+ });
160
275
  }
161
276
  },
162
277
  followManyUsers: async (userIds, oxyServices) => {
278
+ // Snapshot prior values for rollback (tri-state: undefined = unknown).
279
+ const prior = get().followingUsers;
280
+ const previous = new Map();
281
+ for (const uid of userIds) {
282
+ previous.set(uid, hasKey(prior, uid) ? prior[uid] : undefined);
283
+ }
284
+
285
+ // Optimistically mark every target followed BEFORE the await.
163
286
  set(state => {
287
+ const followingUsers = {
288
+ ...state.followingUsers
289
+ };
164
290
  const loadingUsers = {
165
291
  ...state.loadingUsers
166
292
  };
@@ -168,10 +294,12 @@ const useFollowStore = exports.useFollowStore = (0, _zustand.create)((set, get)
168
294
  ...state.errors
169
295
  };
170
296
  for (const uid of userIds) {
297
+ followingUsers[uid] = true;
171
298
  loadingUsers[uid] = true;
172
299
  errors[uid] = null;
173
300
  }
174
301
  return {
302
+ followingUsers,
175
303
  loadingUsers,
176
304
  errors
177
305
  };
@@ -196,6 +324,13 @@ const useFollowStore = exports.useFollowStore = (0, _zustand.create)((set, get)
196
324
  followingUsers[entry.userId] = true;
197
325
  errors[entry.userId] = null;
198
326
  } else {
327
+ // This target failed — roll IT back to its prior value.
328
+ const prev = previous.get(entry.userId);
329
+ if (prev === undefined) {
330
+ delete followingUsers[entry.userId];
331
+ } else {
332
+ followingUsers[entry.userId] = prev;
333
+ }
199
334
  errors[entry.userId] = 'Failed to update follow status';
200
335
  }
201
336
  }
@@ -208,7 +343,11 @@ const useFollowStore = exports.useFollowStore = (0, _zustand.create)((set, get)
208
343
  return result;
209
344
  } catch (error) {
210
345
  const message = (error instanceof Error ? error.message : null) || 'Failed to update follow status';
346
+ // Whole batch failed — roll ALL targets back to their prior values.
211
347
  set(state => {
348
+ const followingUsers = {
349
+ ...state.followingUsers
350
+ };
212
351
  const loadingUsers = {
213
352
  ...state.loadingUsers
214
353
  };
@@ -216,10 +355,17 @@ const useFollowStore = exports.useFollowStore = (0, _zustand.create)((set, get)
216
355
  ...state.errors
217
356
  };
218
357
  for (const uid of userIds) {
358
+ const prev = previous.get(uid);
359
+ if (prev === undefined) {
360
+ delete followingUsers[uid];
361
+ } else {
362
+ followingUsers[uid] = prev;
363
+ }
219
364
  loadingUsers[uid] = false;
220
365
  errors[uid] = message;
221
366
  }
222
367
  return {
368
+ followingUsers,
223
369
  loadingUsers,
224
370
  errors
225
371
  };
@@ -228,7 +374,18 @@ const useFollowStore = exports.useFollowStore = (0, _zustand.create)((set, get)
228
374
  }
229
375
  },
230
376
  unfollowManyUsers: async (userIds, oxyServices) => {
377
+ // Snapshot prior values for rollback (tri-state: undefined = unknown).
378
+ const prior = get().followingUsers;
379
+ const previous = new Map();
380
+ for (const uid of userIds) {
381
+ previous.set(uid, hasKey(prior, uid) ? prior[uid] : undefined);
382
+ }
383
+
384
+ // Optimistically mark every target NOT followed BEFORE the await.
231
385
  set(state => {
386
+ const followingUsers = {
387
+ ...state.followingUsers
388
+ };
232
389
  const loadingUsers = {
233
390
  ...state.loadingUsers
234
391
  };
@@ -236,10 +393,12 @@ const useFollowStore = exports.useFollowStore = (0, _zustand.create)((set, get)
236
393
  ...state.errors
237
394
  };
238
395
  for (const uid of userIds) {
396
+ followingUsers[uid] = false;
239
397
  loadingUsers[uid] = true;
240
398
  errors[uid] = null;
241
399
  }
242
400
  return {
401
+ followingUsers,
243
402
  loadingUsers,
244
403
  errors
245
404
  };
@@ -264,6 +423,13 @@ const useFollowStore = exports.useFollowStore = (0, _zustand.create)((set, get)
264
423
  followingUsers[entry.userId] = false;
265
424
  errors[entry.userId] = null;
266
425
  } else {
426
+ // This target failed — roll IT back to its prior value.
427
+ const prev = previous.get(entry.userId);
428
+ if (prev === undefined) {
429
+ delete followingUsers[entry.userId];
430
+ } else {
431
+ followingUsers[entry.userId] = prev;
432
+ }
267
433
  errors[entry.userId] = 'Failed to update follow status';
268
434
  }
269
435
  }
@@ -276,7 +442,11 @@ const useFollowStore = exports.useFollowStore = (0, _zustand.create)((set, get)
276
442
  return result;
277
443
  } catch (error) {
278
444
  const message = (error instanceof Error ? error.message : null) || 'Failed to update follow status';
445
+ // Whole batch failed — roll ALL targets back to their prior values.
279
446
  set(state => {
447
+ const followingUsers = {
448
+ ...state.followingUsers
449
+ };
280
450
  const loadingUsers = {
281
451
  ...state.loadingUsers
282
452
  };
@@ -284,10 +454,17 @@ const useFollowStore = exports.useFollowStore = (0, _zustand.create)((set, get)
284
454
  ...state.errors
285
455
  };
286
456
  for (const uid of userIds) {
457
+ const prev = previous.get(uid);
458
+ if (prev === undefined) {
459
+ delete followingUsers[uid];
460
+ } else {
461
+ followingUsers[uid] = prev;
462
+ }
287
463
  loadingUsers[uid] = false;
288
464
  errors[uid] = message;
289
465
  }
290
466
  return {
467
+ followingUsers,
291
468
  loadingUsers,
292
469
  errors
293
470
  };
@@ -309,22 +486,22 @@ const useFollowStore = exports.useFollowStore = (0, _zustand.create)((set, get)
309
486
  })),
310
487
  updateCountsFromFollowAction: (targetUserId, action, counts, currentUserId) => {
311
488
  set(state => {
312
- const updates = {};
313
-
314
- // Update target user's follower count (the user being followed)
315
- updates.followerCounts = {
489
+ const followerCounts = {
316
490
  ...state.followerCounts,
317
491
  [targetUserId]: counts.followers
318
492
  };
319
-
320
- // Update current user's following count (the user doing the following)
321
493
  if (currentUserId) {
322
- updates.followingCounts = {
323
- ...state.followingCounts,
324
- [currentUserId]: counts.following
494
+ return {
495
+ followerCounts,
496
+ followingCounts: {
497
+ ...state.followingCounts,
498
+ [currentUserId]: counts.following
499
+ }
325
500
  };
326
501
  }
327
- return updates;
502
+ return {
503
+ followerCounts
504
+ };
328
505
  });
329
506
  },
330
507
  fetchUserCounts: async (userId, oxyServices) => {
@@ -351,6 +528,13 @@ const useFollowStore = exports.useFollowStore = (0, _zustand.create)((set, get)
351
528
  [userId]: false
352
529
  }
353
530
  }));
531
+ } else {
532
+ set(state => ({
533
+ loadingCounts: {
534
+ ...state.loadingCounts,
535
+ [userId]: false
536
+ }
537
+ }));
354
538
  }
355
539
  } catch (error) {
356
540
  set(state => ({
@@ -1 +1 @@
1
- {"version":3,"names":["_zustand","require","useFollowStore","exports","create","set","get","followingUsers","loadingUsers","fetchingUsers","errors","followerCounts","followingCounts","loadingCounts","setFollowingStatus","userId","isFollowing","state","clearFollowError","resetFollowState","fetchFollowStatus","oxyServices","response","getFollowStatus","error","Error","message","toggleFollowUser","isCurrentlyFollowing","newFollowState","unfollowUser","followUser","counts","currentUserId","getCurrentUserId","updates","followers","following","followManyUsers","userIds","uid","result","followUsers","entry","results","success","alreadyFollowing","unfollowManyUsers","unfollowUsers","setFollowerCount","count","setFollowingCount","updateCountsFromFollowAction","targetUserId","action","fetchUserCounts","user","getUserById","_count"],"sourceRoot":"../../../../src","sources":["ui/stores/followStore.ts"],"mappings":";;;;;;AAAA,IAAAA,QAAA,GAAAC,OAAA;AA6BO,MAAMC,cAAc,GAAAC,OAAA,CAAAD,cAAA,GAAG,IAAAE,eAAM,EAAc,CAACC,GAAQ,EAAEC,GAAQ,MAAM;EACzEC,cAAc,EAAE,CAAC,CAAC;EAClBC,YAAY,EAAE,CAAC,CAAC;EAChBC,aAAa,EAAE,CAAC,CAAC;EACjBC,MAAM,EAAE,CAAC,CAAC;EACVC,cAAc,EAAE,CAAC,CAAC;EAClBC,eAAe,EAAE,CAAC,CAAC;EACnBC,aAAa,EAAE,CAAC,CAAC;EACjBC,kBAAkB,EAAEA,CAACC,MAAc,EAAEC,WAAoB,KAAKX,GAAG,CAAEY,KAAkB,KAAM;IACzFV,cAAc,EAAE;MAAE,GAAGU,KAAK,CAACV,cAAc;MAAE,CAACQ,MAAM,GAAGC;IAAY,CAAC;IAClEN,MAAM,EAAE;MAAE,GAAGO,KAAK,CAACP,MAAM;MAAE,CAACK,MAAM,GAAG;IAAK;EAC5C,CAAC,CAAC,CAAC;EACHG,gBAAgB,EAAGH,MAAc,IAAKV,GAAG,CAAEY,KAAkB,KAAM;IACjEP,MAAM,EAAE;MAAE,GAAGO,KAAK,CAACP,MAAM;MAAE,CAACK,MAAM,GAAG;IAAK;EAC5C,CAAC,CAAC,CAAC;EACHI,gBAAgB,EAAEA,CAAA,KAAMd,GAAG,CAAC;IAC1BE,cAAc,EAAE,CAAC,CAAC;IAClBC,YAAY,EAAE,CAAC,CAAC;IAChBC,aAAa,EAAE,CAAC,CAAC;IACjBC,MAAM,EAAE,CAAC,CAAC;IACVC,cAAc,EAAE,CAAC,CAAC;IAClBC,eAAe,EAAE,CAAC,CAAC;IACnBC,aAAa,EAAE,CAAC;EAClB,CAAC,CAAC;EACFO,iBAAiB,EAAE,MAAAA,CAAOL,MAAc,EAAEM,WAAwB,KAAK;IACrEhB,GAAG,CAAEY,KAAkB,KAAM;MAC3BR,aAAa,EAAE;QAAE,GAAGQ,KAAK,CAACR,aAAa;QAAE,CAACM,MAAM,GAAG;MAAK,CAAC;MACzDL,MAAM,EAAE;QAAE,GAAGO,KAAK,CAACP,MAAM;QAAE,CAACK,MAAM,GAAG;MAAK;IAC5C,CAAC,CAAC,CAAC;IACH,IAAI;MACF,MAAMO,QAAQ,GAAG,MAAMD,WAAW,CAACE,eAAe,CAACR,MAAM,CAAC;MAC1DV,GAAG,CAAEY,KAAkB,KAAM;QAC3BV,cAAc,EAAE;UAAE,GAAGU,KAAK,CAACV,cAAc;UAAE,CAACQ,MAAM,GAAGO,QAAQ,CAACN;QAAY,CAAC;QAC3EP,aAAa,EAAE;UAAE,GAAGQ,KAAK,CAACR,aAAa;UAAE,CAACM,MAAM,GAAG;QAAM,CAAC;QAC1DL,MAAM,EAAE;UAAE,GAAGO,KAAK,CAACP,MAAM;UAAE,CAACK,MAAM,GAAG;QAAK;MAC5C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,OAAOS,KAAc,EAAE;MACvBnB,GAAG,CAAEY,KAAkB,KAAM;QAC3BR,aAAa,EAAE;UAAE,GAAGQ,KAAK,CAACR,aAAa;UAAE,CAACM,MAAM,GAAG;QAAM,CAAC;QAC1DL,MAAM,EAAE;UAAE,GAAGO,KAAK,CAACP,MAAM;UAAE,CAACK,MAAM,GAAG,CAACS,KAAK,YAAYC,KAAK,GAAGD,KAAK,CAACE,OAAO,GAAG,IAAI,KAAK;QAAgC;MAC1H,CAAC,CAAC,CAAC;IACL;EACF,CAAC;EACDC,gBAAgB,EAAE,MAAAA,CAAOZ,MAAc,EAAEM,WAAwB,EAAEO,oBAA6B,KAAK;IACnGvB,GAAG,CAAEY,KAAkB,KAAM;MAC3BT,YAAY,EAAE;QAAE,GAAGS,KAAK,CAACT,YAAY;QAAE,CAACO,MAAM,GAAG;MAAK,CAAC;MACvDL,MAAM,EAAE;QAAE,GAAGO,KAAK,CAACP,MAAM;QAAE,CAACK,MAAM,GAAG;MAAK;IAC5C,CAAC,CAAC,CAAC;IACH,IAAI;MACF,IAAIO,QAAa;MACjB,IAAIO,cAAc;MAClB,IAAID,oBAAoB,EAAE;QACxBN,QAAQ,GAAG,MAAMD,WAAW,CAACS,YAAY,CAACf,MAAM,CAAC;QACjDc,cAAc,GAAG,KAAK;MACxB,CAAC,MAAM;QACLP,QAAQ,GAAG,MAAMD,WAAW,CAACU,UAAU,CAAChB,MAAM,CAAC;QAC/Cc,cAAc,GAAG,IAAI;MACvB;;MAEA;MACAxB,GAAG,CAAEY,KAAkB,KAAM;QAC3BV,cAAc,EAAE;UAAE,GAAGU,KAAK,CAACV,cAAc;UAAE,CAACQ,MAAM,GAAGc;QAAe,CAAC;QACrErB,YAAY,EAAE;UAAE,GAAGS,KAAK,CAACT,YAAY;UAAE,CAACO,MAAM,GAAG;QAAM,CAAC;QACxDL,MAAM,EAAE;UAAE,GAAGO,KAAK,CAACP,MAAM;UAAE,CAACK,MAAM,GAAG;QAAK;MAC5C,CAAC,CAAC,CAAC;;MAEH;MACA;MACA;MACA;MACA,IAAIO,QAAQ,EAAEU,MAAM,EAAE;QACpB,MAAM;UAAEA;QAAO,CAAC,GAAGV,QAAQ;;QAE3B;QACA,MAAMW,aAAa,GAAGZ,WAAW,CAACa,gBAAgB,CAAC,CAAC;QAEpD7B,GAAG,CAAEY,KAAkB,IAAK;UAC1B,MAAMkB,OAAY,GAAG,CAAC,CAAC;;UAEvB;UACAA,OAAO,CAACxB,cAAc,GAAG;YACvB,GAAGM,KAAK,CAACN,cAAc;YACvB,CAACI,MAAM,GAAGiB,MAAM,CAACI;UACnB,CAAC;;UAED;UACA,IAAIH,aAAa,EAAE;YACjBE,OAAO,CAACvB,eAAe,GAAG;cACxB,GAAGK,KAAK,CAACL,eAAe;cACxB,CAACqB,aAAa,GAAGD,MAAM,CAACK;YAC1B,CAAC;UACH;UAEA,OAAOF,OAAO;QAChB,CAAC,CAAC;MACJ;IACF,CAAC,CAAC,OAAOX,KAAc,EAAE;MACvBnB,GAAG,CAAEY,KAAkB,KAAM;QAC3BT,YAAY,EAAE;UAAE,GAAGS,KAAK,CAACT,YAAY;UAAE,CAACO,MAAM,GAAG;QAAM,CAAC;QACxDL,MAAM,EAAE;UAAE,GAAGO,KAAK,CAACP,MAAM;UAAE,CAACK,MAAM,GAAG,CAACS,KAAK,YAAYC,KAAK,GAAGD,KAAK,CAACE,OAAO,GAAG,IAAI,KAAK;QAAiC;MAC3H,CAAC,CAAC,CAAC;IACL;EACF,CAAC;EACDY,eAAe,EAAE,MAAAA,CAAOC,OAAiB,EAAElB,WAAwB,KAAgC;IACjGhB,GAAG,CAAEY,KAAkB,IAAK;MAC1B,MAAMT,YAAY,GAAG;QAAE,GAAGS,KAAK,CAACT;MAAa,CAAC;MAC9C,MAAME,MAAM,GAAG;QAAE,GAAGO,KAAK,CAACP;MAAO,CAAC;MAClC,KAAK,MAAM8B,GAAG,IAAID,OAAO,EAAE;QACzB/B,YAAY,CAACgC,GAAG,CAAC,GAAG,IAAI;QACxB9B,MAAM,CAAC8B,GAAG,CAAC,GAAG,IAAI;MACpB;MACA,OAAO;QAAEhC,YAAY;QAAEE;MAAO,CAAC;IACjC,CAAC,CAAC;IACF,IAAI;MACF,MAAM+B,MAAM,GAAG,MAAMpB,WAAW,CAACqB,WAAW,CAACH,OAAO,CAAC;MACrDlC,GAAG,CAAEY,KAAkB,IAAK;QAC1B,MAAMV,cAAc,GAAG;UAAE,GAAGU,KAAK,CAACV;QAAe,CAAC;QAClD,MAAMC,YAAY,GAAG;UAAE,GAAGS,KAAK,CAACT;QAAa,CAAC;QAC9C,MAAME,MAAM,GAAG;UAAE,GAAGO,KAAK,CAACP;QAAO,CAAC;QAClC,KAAK,MAAM8B,GAAG,IAAID,OAAO,EAAE;UACzB/B,YAAY,CAACgC,GAAG,CAAC,GAAG,KAAK;QAC3B;QACA,KAAK,MAAMG,KAAK,IAAIF,MAAM,CAACG,OAAO,EAAE;UAClC,IAAID,KAAK,CAACE,OAAO,IAAIF,KAAK,CAACG,gBAAgB,EAAE;YAC3CvC,cAAc,CAACoC,KAAK,CAAC5B,MAAM,CAAC,GAAG,IAAI;YACnCL,MAAM,CAACiC,KAAK,CAAC5B,MAAM,CAAC,GAAG,IAAI;UAC7B,CAAC,MAAM;YACLL,MAAM,CAACiC,KAAK,CAAC5B,MAAM,CAAC,GAAG,gCAAgC;UACzD;QACF;QACA,OAAO;UAAER,cAAc;UAAEC,YAAY;UAAEE;QAAO,CAAC;MACjD,CAAC,CAAC;MACF,OAAO+B,MAAM;IACf,CAAC,CAAC,OAAOjB,KAAc,EAAE;MACvB,MAAME,OAAO,GAAG,CAACF,KAAK,YAAYC,KAAK,GAAGD,KAAK,CAACE,OAAO,GAAG,IAAI,KAAK,gCAAgC;MACnGrB,GAAG,CAAEY,KAAkB,IAAK;QAC1B,MAAMT,YAAY,GAAG;UAAE,GAAGS,KAAK,CAACT;QAAa,CAAC;QAC9C,MAAME,MAAM,GAAG;UAAE,GAAGO,KAAK,CAACP;QAAO,CAAC;QAClC,KAAK,MAAM8B,GAAG,IAAID,OAAO,EAAE;UACzB/B,YAAY,CAACgC,GAAG,CAAC,GAAG,KAAK;UACzB9B,MAAM,CAAC8B,GAAG,CAAC,GAAGd,OAAO;QACvB;QACA,OAAO;UAAElB,YAAY;UAAEE;QAAO,CAAC;MACjC,CAAC,CAAC;MACF,MAAMc,KAAK;IACb;EACF,CAAC;EACDuB,iBAAiB,EAAE,MAAAA,CAAOR,OAAiB,EAAElB,WAAwB,KAAkC;IACrGhB,GAAG,CAAEY,KAAkB,IAAK;MAC1B,MAAMT,YAAY,GAAG;QAAE,GAAGS,KAAK,CAACT;MAAa,CAAC;MAC9C,MAAME,MAAM,GAAG;QAAE,GAAGO,KAAK,CAACP;MAAO,CAAC;MAClC,KAAK,MAAM8B,GAAG,IAAID,OAAO,EAAE;QACzB/B,YAAY,CAACgC,GAAG,CAAC,GAAG,IAAI;QACxB9B,MAAM,CAAC8B,GAAG,CAAC,GAAG,IAAI;MACpB;MACA,OAAO;QAAEhC,YAAY;QAAEE;MAAO,CAAC;IACjC,CAAC,CAAC;IACF,IAAI;MACF,MAAM+B,MAAM,GAAG,MAAMpB,WAAW,CAAC2B,aAAa,CAACT,OAAO,CAAC;MACvDlC,GAAG,CAAEY,KAAkB,IAAK;QAC1B,MAAMV,cAAc,GAAG;UAAE,GAAGU,KAAK,CAACV;QAAe,CAAC;QAClD,MAAMC,YAAY,GAAG;UAAE,GAAGS,KAAK,CAACT;QAAa,CAAC;QAC9C,MAAME,MAAM,GAAG;UAAE,GAAGO,KAAK,CAACP;QAAO,CAAC;QAClC,KAAK,MAAM8B,GAAG,IAAID,OAAO,EAAE;UACzB/B,YAAY,CAACgC,GAAG,CAAC,GAAG,KAAK;QAC3B;QACA,KAAK,MAAMG,KAAK,IAAIF,MAAM,CAACG,OAAO,EAAE;UAClC,IAAID,KAAK,CAACE,OAAO,EAAE;YACjBtC,cAAc,CAACoC,KAAK,CAAC5B,MAAM,CAAC,GAAG,KAAK;YACpCL,MAAM,CAACiC,KAAK,CAAC5B,MAAM,CAAC,GAAG,IAAI;UAC7B,CAAC,MAAM;YACLL,MAAM,CAACiC,KAAK,CAAC5B,MAAM,CAAC,GAAG,gCAAgC;UACzD;QACF;QACA,OAAO;UAAER,cAAc;UAAEC,YAAY;UAAEE;QAAO,CAAC;MACjD,CAAC,CAAC;MACF,OAAO+B,MAAM;IACf,CAAC,CAAC,OAAOjB,KAAc,EAAE;MACvB,MAAME,OAAO,GAAG,CAACF,KAAK,YAAYC,KAAK,GAAGD,KAAK,CAACE,OAAO,GAAG,IAAI,KAAK,gCAAgC;MACnGrB,GAAG,CAAEY,KAAkB,IAAK;QAC1B,MAAMT,YAAY,GAAG;UAAE,GAAGS,KAAK,CAACT;QAAa,CAAC;QAC9C,MAAME,MAAM,GAAG;UAAE,GAAGO,KAAK,CAACP;QAAO,CAAC;QAClC,KAAK,MAAM8B,GAAG,IAAID,OAAO,EAAE;UACzB/B,YAAY,CAACgC,GAAG,CAAC,GAAG,KAAK;UACzB9B,MAAM,CAAC8B,GAAG,CAAC,GAAGd,OAAO;QACvB;QACA,OAAO;UAAElB,YAAY;UAAEE;QAAO,CAAC;MACjC,CAAC,CAAC;MACF,MAAMc,KAAK;IACb;EACF,CAAC;EACDyB,gBAAgB,EAAEA,CAAClC,MAAc,EAAEmC,KAAa,KAAK7C,GAAG,CAAEY,KAAkB,KAAM;IAChFN,cAAc,EAAE;MAAE,GAAGM,KAAK,CAACN,cAAc;MAAE,CAACI,MAAM,GAAGmC;IAAM;EAC7D,CAAC,CAAC,CAAC;EACHC,iBAAiB,EAAEA,CAACpC,MAAc,EAAEmC,KAAa,KAAK7C,GAAG,CAAEY,KAAkB,KAAM;IACjFL,eAAe,EAAE;MAAE,GAAGK,KAAK,CAACL,eAAe;MAAE,CAACG,MAAM,GAAGmC;IAAM;EAC/D,CAAC,CAAC,CAAC;EACHE,4BAA4B,EAAEA,CAACC,YAAoB,EAAEC,MAA6B,EAAEtB,MAAgD,EAAEC,aAAsB,KAAK;IAC/J5B,GAAG,CAAEY,KAAkB,IAAK;MAC1B,MAAMkB,OAAY,GAAG,CAAC,CAAC;;MAEvB;MACAA,OAAO,CAACxB,cAAc,GAAG;QACvB,GAAGM,KAAK,CAACN,cAAc;QACvB,CAAC0C,YAAY,GAAGrB,MAAM,CAACI;MACzB,CAAC;;MAED;MACA,IAAIH,aAAa,EAAE;QACjBE,OAAO,CAACvB,eAAe,GAAG;UACxB,GAAGK,KAAK,CAACL,eAAe;UACxB,CAACqB,aAAa,GAAGD,MAAM,CAACK;QAC1B,CAAC;MACH;MAEA,OAAOF,OAAO;IAChB,CAAC,CAAC;EACJ,CAAC;EACDoB,eAAe,EAAE,MAAAA,CAAOxC,MAAc,EAAEM,WAAwB,KAAK;IACnEhB,GAAG,CAAEY,KAAkB,KAAM;MAC3BJ,aAAa,EAAE;QAAE,GAAGI,KAAK,CAACJ,aAAa;QAAE,CAACE,MAAM,GAAG;MAAK;IAC1D,CAAC,CAAC,CAAC;IACH,IAAI;MACF,MAAMyC,IAAI,GAAG,MAAMnC,WAAW,CAACoC,WAAW,CAAC1C,MAAM,CAAC;MAClD,IAAIyC,IAAI,EAAEE,MAAM,EAAE;QAChBrD,GAAG,CAAEY,KAAkB,KAAM;UAC3BN,cAAc,EAAE;YACd,GAAGM,KAAK,CAACN,cAAc;YACvB,CAACI,MAAM,GAAGyC,IAAI,CAACE,MAAM,EAAEtB,SAAS,IAAI;UACtC,CAAC;UACDxB,eAAe,EAAE;YACf,GAAGK,KAAK,CAACL,eAAe;YACxB,CAACG,MAAM,GAAGyC,IAAI,CAACE,MAAM,EAAErB,SAAS,IAAI;UACtC,CAAC;UACDxB,aAAa,EAAE;YAAE,GAAGI,KAAK,CAACJ,aAAa;YAAE,CAACE,MAAM,GAAG;UAAM;QAC3D,CAAC,CAAC,CAAC;MACL;IACF,CAAC,CAAC,OAAOS,KAAc,EAAE;MACvBnB,GAAG,CAAEY,KAAkB,KAAM;QAC3BJ,aAAa,EAAE;UAAE,GAAGI,KAAK,CAACJ,aAAa;UAAE,CAACE,MAAM,GAAG;QAAM;MAC3D,CAAC,CAAC,CAAC;IACL;EACF;AACF,CAAC,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["_zustand","require","hasKey","map","key","Object","prototype","hasOwnProperty","call","scheduleMicrotask","cb","queueMicrotask","setTimeout","pendingIds","Set","pendingServices","flushScheduled","inFlightIds","batchGeneration","resetFollowBatchState","clear","exports","useFollowStore","create","set","get","followingUsers","loadingUsers","fetchingUsers","errors","followerCounts","followingCounts","loadingCounts","setFollowingStatus","userId","isFollowing","state","setFollowStatuses","changed","entries","clearFollowError","resetFollowState","resolveFollowStatuses","userIds","oxyServices","enqueuedAny","rawId","id","trim","has","add","ids","Array","from","services","length","generation","getFollowStatuses","then","statuses","followingUsersNext","catch","error","message","Error","finally","delete","toggleFollowUser","isCurrentlyFollowing","priorState","hadPrevious","previousValue","optimisticValue","response","unfollowUser","followUser","counts","currentUserId","getCurrentUserId","followers","following","followManyUsers","prior","previous","Map","uid","undefined","result","followUsers","entry","results","success","alreadyFollowing","prev","unfollowManyUsers","unfollowUsers","setFollowerCount","count","setFollowingCount","updateCountsFromFollowAction","targetUserId","action","fetchUserCounts","user","getUserById","_count"],"sourceRoot":"../../../../src","sources":["ui/stores/followStore.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.resetSessionScopedStores = resetSessionScopedStores;
7
+ var _followStore = require("./followStore.js");
8
+ var _fileStore = require("./fileStore.js");
9
+ /** Drop session-scoped Zustand slices so the next user/account never inherits stale UI state. */
10
+ function resetSessionScopedStores() {
11
+ _followStore.useFollowStore.getState().resetFollowState();
12
+ _fileStore.useFileStore.getState().reset();
13
+ }
14
+ //# sourceMappingURL=resetSessionScopedStores.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_followStore","require","_fileStore","resetSessionScopedStores","useFollowStore","getState","resetFollowState","useFileStore","reset"],"sourceRoot":"../../../../src","sources":["ui/stores/resetSessionScopedStores.ts"],"mappings":";;;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AACA,IAAAC,UAAA,GAAAD,OAAA;AAEA;AACO,SAASE,wBAAwBA,CAAA,EAAS;EAC/CC,2BAAc,CAACC,QAAQ,CAAC,CAAC,CAACC,gBAAgB,CAAC,CAAC;EAC5CC,uBAAY,CAACF,QAAQ,CAAC,CAAC,CAACG,KAAK,CAAC,CAAC;AACjC","ignoreList":[]}
@@ -53,7 +53,7 @@ export { useAssetStore, useAssets as useAssetsStore, useAsset, useUploadProgress
53
53
  // ---------------------------------------------------------------------------
54
54
  export { useAssets, setOxyAssetInstance } from "./ui/hooks/useAssets.js";
55
55
  export { useFileDownloadUrl } from "./ui/hooks/useFileDownloadUrl.js";
56
- export { useFollow, useFollowerCounts } from "./ui/hooks/useFollow.js";
56
+ export { useFollow, useFollowerCounts, useSeedFollowStatuses } from "./ui/hooks/useFollow.js";
57
57
  export { useStorage } from "./ui/hooks/useStorage.js";
58
58
  // ---------------------------------------------------------------------------
59
59
  // Query hooks (TanStack Query — fetching)
@@ -1 +1 @@
1
- {"version":3,"names":["setPlatformOS","Platform","OS","default","OxyProvider","useOxy","useAuth","FontLoader","setupFonts","useAuthStore","useAccountStore","useAssetStore","useAssets","useAssetsStore","useAsset","useUploadProgress","useAssetLoading","useAssetErrors","useAssetsByApp","useAssetsByEntity","useAssetUsageCount","useIsAssetLinked","setOxyAssetInstance","useFileDownloadUrl","useFollow","useFollowerCounts","useStorage","useUserProfile","useUserProfiles","useCurrentUser","useUserById","useUserByUsername","useUsersBySessions","usePrivacySettings","useConnectedApps","useSessions","useSession","useDeviceSessions","useUserDevices","useSecurityInfo","useAccountStorageUsage","useSecurityActivity","useRecentSecurityActivity","useInfiniteSecurityActivity","useAuthMethods","useUserSubscription","useUserPayments","useUserWallet","useUserWalletTransactions","useUpdateProfile","useUploadAvatar","useUpdateAccountSettings","useUpdatePrivacySettings","useUpdateNotificationPreferences","useUpdateUserPreferences","useRevokeConnectedApp","useUploadFile","useSwitchSession","useLogoutSession","useLogoutAll","useUpdateDeviceName","useRemoveDevice","createProfileMutation","createGenericMutation","mutationKeys","queryKeys","invalidateAccountQueries","invalidateUserQueries","invalidateSessionQueries","invalidateDeviceQueries","invalidatePrivacyQueries","invalidateSecurityQueries","invalidateStorageQueries","invalidatePaymentsQueries","invalidateConnectedAppsQueries","invalidateAuthMethodsQueries","useMutationStatus","useOnlineStatus","useOxyEvent","handleAuthError","isInvalidSessionError","isTimeoutOrNetworkError","extractErrorMessage","useFileFiltering","OXY_OAUTH_STATE_STORAGE_KEY","OXY_OAUTH_CODE_VERIFIER_STORAGE_KEY","OxySignInButton","OxyAuthPrompt","OxyOAuthCallback","OxyConsentScreen","RequireOxyAuth","FollowButton","OxyPayButton","LogoIcon","LogoText","ProfileButton","OxyAuthChooser","useSwitchableAccounts","ProfileScreen","ManageAccountScreen","NotificationsScreen","PreferencesScreen","ConnectedAppsScreen","CreateAccountScreen","AccountMembersScreen","AccountSettingsScreen","showBottomSheet","closeBottomSheet","openAccountDialog","closeAccountDialog","subscribeToAccountDialog"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["setPlatformOS","Platform","OS","default","OxyProvider","useOxy","useAuth","FontLoader","setupFonts","useAuthStore","useAccountStore","useAssetStore","useAssets","useAssetsStore","useAsset","useUploadProgress","useAssetLoading","useAssetErrors","useAssetsByApp","useAssetsByEntity","useAssetUsageCount","useIsAssetLinked","setOxyAssetInstance","useFileDownloadUrl","useFollow","useFollowerCounts","useSeedFollowStatuses","useStorage","useUserProfile","useUserProfiles","useCurrentUser","useUserById","useUserByUsername","useUsersBySessions","usePrivacySettings","useConnectedApps","useSessions","useSession","useDeviceSessions","useUserDevices","useSecurityInfo","useAccountStorageUsage","useSecurityActivity","useRecentSecurityActivity","useInfiniteSecurityActivity","useAuthMethods","useUserSubscription","useUserPayments","useUserWallet","useUserWalletTransactions","useUpdateProfile","useUploadAvatar","useUpdateAccountSettings","useUpdatePrivacySettings","useUpdateNotificationPreferences","useUpdateUserPreferences","useRevokeConnectedApp","useUploadFile","useSwitchSession","useLogoutSession","useLogoutAll","useUpdateDeviceName","useRemoveDevice","createProfileMutation","createGenericMutation","mutationKeys","queryKeys","invalidateAccountQueries","invalidateUserQueries","invalidateSessionQueries","invalidateDeviceQueries","invalidatePrivacyQueries","invalidateSecurityQueries","invalidateStorageQueries","invalidatePaymentsQueries","invalidateConnectedAppsQueries","invalidateAuthMethodsQueries","useMutationStatus","useOnlineStatus","useOxyEvent","handleAuthError","isInvalidSessionError","isTimeoutOrNetworkError","extractErrorMessage","useFileFiltering","OXY_OAUTH_STATE_STORAGE_KEY","OXY_OAUTH_CODE_VERIFIER_STORAGE_KEY","OxySignInButton","OxyAuthPrompt","OxyOAuthCallback","OxyConsentScreen","RequireOxyAuth","FollowButton","OxyPayButton","LogoIcon","LogoText","ProfileButton","OxyAuthChooser","useSwitchableAccounts","ProfileScreen","ManageAccountScreen","NotificationsScreen","PreferencesScreen","ConnectedAppsScreen","CreateAccountScreen","AccountMembersScreen","AccountSettingsScreen","showBottomSheet","closeBottomSheet","openAccountDialog","closeAccountDialog","subscribeToAccountDialog"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":"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","ignoreList":[]}