Skip to content

Commit 79c7c40

Browse files
committed
fixup! feat(pwa): queue tracking actions offline and overlay pending state
1 parent 07320a8 commit 79c7c40

4 files changed

Lines changed: 42 additions & 32 deletions

File tree

projects/client/src/lib/sections/media-actions/favorite/useFavorites.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -62,16 +62,17 @@ export function useFavorites({ type, id }: FavoritesStoreProps) {
6262

6363
const payload = getFavoritesPayload({ type, id });
6464

65-
await executeOrEnqueue({
65+
const result = await executeOrEnqueue({
6666
endpoint: action === 'add' ? 'favorites:add' : 'favorites:remove',
6767
keys: [toMediaKey(type, id)],
6868
body: payload,
6969
invalidations: [InvalidateAction.Favorited(type)],
7070
});
7171

72-
await invalidate(InvalidateAction.Favorited(type));
73-
74-
isUpdatingFavorite.next(false);
72+
if (result === 'executed') {
73+
await invalidate(InvalidateAction.Favorited(type));
74+
isUpdatingFavorite.next(false);
75+
}
7576
};
7677

7778
return {

projects/client/src/lib/sections/media-actions/mark-as-watched/useMarkAsWatched.ts

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -44,16 +44,17 @@ export function useMarkAsWatched(
4444
isMarkingAsWatched.next(true);
4545
track({ action: 'add' });
4646

47-
await executeOrEnqueue({
47+
const result = await executeOrEnqueue({
4848
endpoint: 'history:add',
4949
keys: mediaKeys,
5050
body: toMarkAsWatchedPayload(props, watchedAtDate),
5151
invalidations: [InvalidateAction.MarkAsWatched(type)],
5252
});
5353

54-
await invalidate(InvalidateAction.MarkAsWatched(type));
55-
56-
isMarkingAsWatched.next(false);
54+
if (result === 'executed') {
55+
await invalidate(InvalidateAction.MarkAsWatched(type));
56+
isMarkingAsWatched.next(false);
57+
}
5758
};
5859

5960
// Ids whose rating this removal orphans. The main action removes *every*
@@ -100,26 +101,29 @@ export function useMarkAsWatched(
100101

101102
const orphanedRatingIds = await getOrphanedRatingIds();
102103

103-
await executeOrEnqueue({
104+
const removeResult = await executeOrEnqueue({
104105
endpoint: 'history:remove',
105106
keys: mediaKeys,
106107
body: toMarkAsWatchedPayload(props),
107108
invalidations: [InvalidateAction.MarkAsWatched(type)],
108109
});
109110

110111
if (orphanedRatingIds.length > 0) {
111-
await executeOrEnqueue({
112+
const ratingResult = await executeOrEnqueue({
112113
endpoint: 'rating:remove',
113114
keys: orphanedRatingIds.map((id) => toMediaKey(type, id)),
114115
body: toRemoveRatingsPayload(type, orphanedRatingIds),
115116
invalidations: [InvalidateAction.Rated(type)],
116117
});
117-
await invalidate(InvalidateAction.Rated(type));
118+
if (ratingResult === 'executed') {
119+
await invalidate(InvalidateAction.Rated(type));
120+
}
118121
}
119122

120-
await invalidate(InvalidateAction.MarkAsWatched(type));
121-
122-
isMarkingAsWatched.next(false);
123+
if (removeResult === 'executed') {
124+
await invalidate(InvalidateAction.MarkAsWatched(type));
125+
isMarkingAsWatched.next(false);
126+
}
123127
};
124128

125129
const isWatchable = media.every((item) => {

projects/client/src/lib/sections/media-actions/watchlist/useWatchlist.ts

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -29,16 +29,17 @@ export function useWatchlist(props: MediaStoreProps) {
2929
isWatchlistUpdating.next(true);
3030
track({ action: 'add' });
3131

32-
await executeOrEnqueue({
32+
const addResult = await executeOrEnqueue({
3333
endpoint: 'watchlist:add',
3434
keys: ids.map((id) => toMediaKey(type, id)),
3535
body,
3636
invalidations: [InvalidateAction.Watchlisted(type)],
3737
});
3838

39-
await invalidate(InvalidateAction.Watchlisted(type));
40-
41-
isWatchlistUpdating.next(false);
39+
if (addResult === 'executed') {
40+
await invalidate(InvalidateAction.Watchlisted(type));
41+
isWatchlistUpdating.next(false);
42+
}
4243
};
4344

4445
const removeFromWatchlist = async () => {
@@ -49,16 +50,17 @@ export function useWatchlist(props: MediaStoreProps) {
4950
isWatchlistUpdating.next(true);
5051
track({ action: 'remove' });
5152

52-
await executeOrEnqueue({
53+
const removeResult = await executeOrEnqueue({
5354
endpoint: 'watchlist:remove',
5455
keys: ids.map((id) => toMediaKey(type, id)),
5556
body,
5657
invalidations: [InvalidateAction.Watchlisted(type)],
5758
});
5859

59-
await invalidate(InvalidateAction.Watchlisted(type));
60-
61-
isWatchlistUpdating.next(false);
60+
if (removeResult === 'executed') {
61+
await invalidate(InvalidateAction.Watchlisted(type));
62+
isWatchlistUpdating.next(false);
63+
}
6264
};
6365

6466
return {

projects/client/src/lib/sections/summary/components/rating/useRatings.ts

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -175,18 +175,19 @@ export function useRatings({ type, id }: WatchlistStoreProps) {
175175

176176
track({ action: hasRating ? 'changed' : 'added', rating: newRating });
177177

178-
await executeOrEnqueue({
178+
const addResult = await executeOrEnqueue({
179179
endpoint: 'rating:add',
180180
keys: [toMediaKey(type, id)],
181181
body: toAddPayload(type, id, newRating),
182182
invalidations: [InvalidateAction.Rated(type)],
183183
});
184-
await invalidate(InvalidateAction.Rated(type));
185-
186-
pendingRating.next(null);
187-
isSubmitting.next(false);
188-
if (type !== 'season') {
189-
dismiss(id, type, 'rating');
184+
if (addResult === 'executed') {
185+
await invalidate(InvalidateAction.Rated(type));
186+
pendingRating.next(null);
187+
isSubmitting.next(false);
188+
if (type !== 'season') {
189+
dismiss(id, type, 'rating');
190+
}
190191
}
191192
});
192193

@@ -200,14 +201,16 @@ export function useRatings({ type, id }: WatchlistStoreProps) {
200201
pendingRating.next(0);
201202

202203
track({ action: 'removed' });
203-
await executeOrEnqueue({
204+
const removeResult = await executeOrEnqueue({
204205
endpoint: 'rating:remove',
205206
keys: [toMediaKey(type, id)],
206207
body: toRemovePayload(type, id),
207208
invalidations: [InvalidateAction.Rated(type)],
208209
});
209-
await invalidate(InvalidateAction.Rated(type));
210-
pendingRating.next(null);
210+
if (removeResult === 'executed') {
211+
await invalidate(InvalidateAction.Rated(type));
212+
pendingRating.next(null);
213+
}
211214
};
212215

213216
return {

0 commit comments

Comments
 (0)