From 7d7c8df99007b8bb2b2003f07be4c0dd7c1738d9 Mon Sep 17 00:00:00 2001 From: Maksim Sukharev Date: Fri, 4 Oct 2024 17:54:18 +0200 Subject: [PATCH] feat: import and export polls Signed-off-by: Maksim Sukharev --- .../NewMessage/NewMessagePollEditor.vue | 54 +++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/src/components/NewMessage/NewMessagePollEditor.vue b/src/components/NewMessage/NewMessagePollEditor.vue index 539cb44a892..bba30132da7 100644 --- a/src/components/NewMessage/NewMessagePollEditor.vue +++ b/src/components/NewMessage/NewMessagePollEditor.vue @@ -13,6 +13,18 @@ {{ t('spreed', 'Question') }}

+ + + + {{ t('spreed', 'Import poll from file') }} +

@@ -58,6 +70,9 @@ {{ t('spreed', 'Dismiss') }} + + {{ t('spreed', 'Export') }} + {{ t('spreed', 'Create poll') }} @@ -154,6 +169,41 @@ export default { } }, + triggerImport() { + this.$refs.pollImport.click() + }, + + importPoll(event) { + if (!event?.target?.files?.[0]) { + return + } + + const reader = new FileReader() + reader.onload = (e) => { + try { + const jsonObject = JSON.parse(e.target.result) + for (const key of Object.keys(this.pollForm)) { + this.pollForm[key] = jsonObject[key] + } + } catch (error) { + console.error('Error while parsing JSON:', error) + } + } + + reader.readAsText(event.target.files[0]) + }, + + exportPoll() { + const jsonString = JSON.stringify(this.pollForm, null, 2) + const blob = new Blob([jsonString], { type: 'application/json' }) + + const link = document.createElement('a') + link.href = URL.createObjectURL(blob) + link.download = `Talk Poll ${new Date().toISOString().slice(0, 10)}` + document.body.appendChild(link) + link.click() + document.body.removeChild(link) + }, }, } @@ -167,6 +217,10 @@ export default { color: var(--color-primary-element); } + &__button { + margin-block: 8px; + } + &__option { display: flex; align-items: flex-end;