fix: 🐛 when editing polls, keep votes for unmodified choices
This commit is contained in:
parent
10b9030368
commit
6fd240a764
|
@ -33,6 +33,7 @@ import { renderActivity } from "@/remote/activitypub/renderer/index.js";
|
||||||
import renderNote from "@/remote/activitypub/renderer/note.js";
|
import renderNote from "@/remote/activitypub/renderer/note.js";
|
||||||
import renderUpdate from "@/remote/activitypub/renderer/update.js";
|
import renderUpdate from "@/remote/activitypub/renderer/update.js";
|
||||||
import { deliverToRelays } from "@/services/relay.js";
|
import { deliverToRelays } from "@/services/relay.js";
|
||||||
|
import { deliverQuestionUpdate } from "@/services/note/polls/update.js";
|
||||||
import { fetchMeta } from "@/misc/fetch-meta.js";
|
import { fetchMeta } from "@/misc/fetch-meta.js";
|
||||||
|
|
||||||
export const meta = {
|
export const meta = {
|
||||||
|
@ -476,14 +477,19 @@ export default define(meta, paramDef, async (ps, user) => {
|
||||||
if (poll.noteVisibility !== ps.visibility) {
|
if (poll.noteVisibility !== ps.visibility) {
|
||||||
pollUpdate.noteVisibility = ps.visibility;
|
pollUpdate.noteVisibility = ps.visibility;
|
||||||
}
|
}
|
||||||
// We can't do an unordered equal check because the order of choices
|
// Keep votes for unmodified choices, reset votes if choice is modified or new
|
||||||
// is important and if it changes, we need to reset the votes.
|
const oldVoteCounts = new Map<string, number>();
|
||||||
if (JSON.stringify(poll.choices) !== JSON.stringify(pp.choices)) {
|
for (let i = 0; i < poll.choices.length; i++) {
|
||||||
pollUpdate.choices = pp.choices;
|
oldVoteCounts.set(poll.choices[i], poll.votes[i]);
|
||||||
pollUpdate.votes = new Array(pp.choices.length).fill(0);
|
|
||||||
}
|
}
|
||||||
|
const newVotes = pp.choices.map(
|
||||||
|
(choice) => oldVoteCounts.get(choice) || 0,
|
||||||
|
);
|
||||||
|
pollUpdate.choices = pp.choices;
|
||||||
|
pollUpdate.votes = newVotes;
|
||||||
if (notEmpty(pollUpdate)) {
|
if (notEmpty(pollUpdate)) {
|
||||||
await Polls.update(note.id, pollUpdate);
|
await Polls.update(note.id, pollUpdate);
|
||||||
|
await deliverQuestionUpdate(note.id);
|
||||||
}
|
}
|
||||||
publishing = true;
|
publishing = true;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue