optimistic update sample+count

This commit is contained in:
Samuel Newman
2025-12-01 13:04:31 +02:00
parent 2b3e6edb4b
commit 6570bb35b7
+49 -8
View File
@@ -178,10 +178,32 @@ export function useListMembershipAddMutation({
pages: old.pages.map(page => ({ pages: old.pages.map(page => ({
...page, ...page,
starterPacksWithMembership: page.starterPacksWithMembership.map( starterPacksWithMembership: page.starterPacksWithMembership.map(
list => { spWithMembership => {
if (list.starterPack.list?.uri === variables.listUri) { if (
spWithMembership.starterPack.list?.uri === variables.listUri
) {
return { return {
...list, ...spWithMembership,
starterPack: {
...spWithMembership.starterPack,
listItemsSample: [
{
uri: data.uri,
subject: subject as AppBskyActorDefs.ProfileView,
},
...(spWithMembership.starterPack.listItemsSample?.filter(
item => item.subject.did !== variables.actorDid,
) ?? []),
],
list: spWithMembership.starterPack.list
? {
...spWithMembership.starterPack.list,
listItemCount:
(spWithMembership.starterPack.list
.listItemCount ?? 0) + 1,
}
: undefined,
},
listItem: { listItem: {
uri: data.uri, uri: data.uri,
subject: subject as AppBskyActorDefs.ProfileView, subject: subject as AppBskyActorDefs.ProfileView,
@@ -189,7 +211,7 @@ export function useListMembershipAddMutation({
} }
} }
return list return spWithMembership
}, },
), ),
})), })),
@@ -263,15 +285,34 @@ export function useListMembershipRemoveMutation({
pages: old.pages.map(page => ({ pages: old.pages.map(page => ({
...page, ...page,
starterPacksWithMembership: page.starterPacksWithMembership.map( starterPacksWithMembership: page.starterPacksWithMembership.map(
list => { spWithMembership => {
if (list.starterPack.list?.uri === variables.listUri) { if (
spWithMembership.starterPack.list?.uri === variables.listUri
) {
return { return {
...list, ...spWithMembership,
starterPack: {
...spWithMembership.starterPack,
listItemsSample:
spWithMembership.starterPack.listItemsSample?.filter(
item => item.subject.did !== variables.actorDid,
),
list: spWithMembership.starterPack.list
? {
...spWithMembership.starterPack.list,
listItemCount: Math.max(
0,
(spWithMembership.starterPack.list
.listItemCount ?? 1) - 1,
),
}
: undefined,
},
listItem: undefined, listItem: undefined,
} }
} }
return list return spWithMembership
}, },
), ),
})), })),