From 7e794aa641af47c623c0c67981f88d0433de6b55 Mon Sep 17 00:00:00 2001 From: Ivan Demchuk Date: Thu, 5 Jan 2023 18:51:50 +0200 Subject: [PATCH] feat: preserve media dialog state in browser history (#743) --- composables/dialog.ts | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/composables/dialog.ts b/composables/dialog.ts index 883fcb3e..db0dede0 100644 --- a/composables/dialog.ts +++ b/composables/dialog.ts @@ -57,14 +57,33 @@ if (isPreviewHelpOpen.value) { }) } +function restoreMediaPreviewFromState() { + mediaPreviewList.value = JSON.parse(history.state?.mediaPreviewList ?? '[]') + mediaPreviewIndex.value = history.state?.mediaPreviewIndex ?? 0 + isMediaPreviewOpen.value = history.state?.mediaPreview ?? false +} + +if (process.client) { + window.addEventListener('popstate', restoreMediaPreviewFromState) + + restoreMediaPreviewFromState() +} + export function openMediaPreview(attachments: Attachment[], index = 0) { mediaPreviewList.value = attachments mediaPreviewIndex.value = index isMediaPreviewOpen.value = true + + history.pushState({ + ...history.state, + mediaPreview: true, + mediaPreviewList: JSON.stringify(attachments), + mediaPreviewIndex: index, + }, '') } export function closeMediaPreview() { - isMediaPreviewOpen.value = false + history.back() } export function openEditHistoryDialog(edit: StatusEdit) {