diff --git a/fe_calckey/frontend/client/src/components/MkPoll.vue b/fe_calckey/frontend/client/src/components/MkPoll.vue index 3e789f8..119cb1f 100644 --- a/fe_calckey/frontend/client/src/components/MkPoll.vue +++ b/fe_calckey/frontend/client/src/components/MkPoll.vue @@ -42,7 +42,10 @@ · - {{ i18n.ts.reload }} + {{ + i18n.ts.reload + }} + {{ i18n.ts._poll.refreshing }} · {{ i18n.ts._poll.voted }} · {{ i18n.ts._poll.closed }} @@ -57,14 +60,17 @@ import * as misskey from "calckey-js"; import { sum } from "@/scripts/array"; import { pleaseLogin } from "@/scripts/please-login"; import * as os from "@/os"; +import { alert } from "@/os"; import { i18n } from "@/i18n"; import { useInterval } from "@/scripts/use-interval"; +import Mfm from "@/components/mfm"; const props = defineProps<{ - note: misskey.entities.Note; + note: misskey.entities.Note & Required>; readOnly?: boolean; }>(); +const refreshing = ref(false); const remaining = ref(-1); const total = computed(() => sum(props.note.poll.choices.map((x) => x.votes))); @@ -100,7 +106,7 @@ if (props.note.poll.expiresAt) { const tick = () => { remaining.value = Math.floor( Math.max( - new Date(props.note.poll.expiresAt).getTime() - Date.now(), + new Date(props.note.poll.expiresAt!).getTime() - Date.now(), 0 ) / 1000 ); @@ -117,13 +123,27 @@ if (props.note.poll.expiresAt) { async function refresh() { if (!props.note.uri) return; - const obj = await os.apiWithDialog("ap/show", { uri: props.note.uri }); - if (obj.type === "Note" && obj.object.poll) { - props.note.poll = obj.object.poll; - } + + refreshing.value = true; + + os.api("ap/show", { uri: props.note.uri }) + .then((obj) => { + if (obj && obj.type === "Note" && obj.object.poll) { + props.note.poll = obj.object.poll; + } + }) + .catch((err) => { + alert({ + type: "error", + text: err.message + "\n" + (err as any).id, + }); + }) + .finally(() => { + refreshing.value = false; + }); } -const vote = async (id) => { +const vote = async (id: number) => { pleaseLogin(); if (props.readOnly || closed.value || isVoted.value) return;