Skip to content

Commit 3926c11

Browse files
committed
fix: all underlying offline store issues with polls
1 parent 6608e7b commit 3926c11

File tree

2 files changed

+24
-8
lines changed

2 files changed

+24
-8
lines changed

package/src/components/Chat/hooks/handleEventToSyncDB.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -233,11 +233,13 @@ export const handleEventToSyncDB = <
233233
'poll.vote_removed',
234234
].includes(type)
235235
) {
236-
const poll = event.poll;
236+
const { poll, poll_vote } = event;
237237
if (poll) {
238238
return updatePollMessage({
239+
client,
239240
flush,
240241
poll,
242+
poll_vote,
241243
});
242244
}
243245
}

package/src/store/apis/updatePollMessage.ts

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,25 @@
1-
import type { PollResponse } from 'stream-chat';
1+
import { isVoteAnswer, PollAnswer, PollResponse, PollVote, StreamChat } from 'stream-chat';
22

3+
import { DefaultStreamChatGenerics } from '../../types/types';
34
import { mapPollToStorable } from '../mappers/mapPollToStorable';
45
import { mapStorableToPoll } from '../mappers/mapStorableToPoll';
56
import { QuickSqliteClient } from '../QuickSqliteClient';
67
import { createSelectQuery } from '../sqlite-utils/createSelectQuery';
78
import { createUpdateQuery } from '../sqlite-utils/createUpdateQuery';
89
import type { PreparedQueries } from '../types';
910

10-
export const updatePollMessage = ({
11+
export const updatePollMessage = <
12+
StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,
13+
>({
14+
client,
1115
flush = true,
1216
poll,
17+
poll_vote,
1318
}: {
14-
poll: PollResponse;
19+
client: StreamChat<StreamChatGenerics>;
20+
poll: PollResponse<StreamChatGenerics>;
1521
flush?: boolean;
22+
poll_vote?: PollVote<StreamChatGenerics> | PollAnswer<StreamChatGenerics>;
1623
}) => {
1724
const queries: PreparedQueries[] = [];
1825

@@ -25,12 +32,19 @@ export const updatePollMessage = ({
2532

2633
for (const pollFromDB of pollsFromDB) {
2734
const serializedPoll = mapStorableToPoll(pollFromDB);
28-
const { latest_votes, own_votes } = serializedPoll;
29-
console.log(own_votes);
35+
const { latest_answers = [], own_votes = [] } = serializedPoll;
36+
const newOwnVotes =
37+
poll_vote && poll_vote.user?.id === client.userID
38+
? [poll_vote, ...own_votes.filter((vote) => vote.id !== poll_vote.id)]
39+
: own_votes;
40+
const newLatestAnswers =
41+
poll_vote && isVoteAnswer(poll_vote)
42+
? [poll_vote, ...latest_answers.filter((answer) => answer.id !== poll_vote?.id)]
43+
: latest_answers;
3044
const storablePoll = mapPollToStorable({
3145
...poll,
32-
// latest_votes: latest_votes ?? [],
33-
// own_votes: own_votes ?? [],
46+
latest_answers: newLatestAnswers,
47+
own_votes: newOwnVotes,
3448
});
3549

3650
console.log('STORABLE POLL: ', storablePoll);

0 commit comments

Comments
 (0)