From 5eb6b826c314db6751be5a37af03c840b3adbdd7 Mon Sep 17 00:00:00 2001 From: Mr-Quin <8700123+Mr-Quin@users.noreply.github.com> Date: Thu, 20 Nov 2025 02:37:59 -0800 Subject: [PATCH] feat(stage-tamagotchi): memorize scroll position (#752) --- .../composables/use-restore-scroll.ts | 36 +++++++++++++++++++ apps/stage-tamagotchi/src/renderer/index.html | 2 +- .../src/renderer/layouts/settings.vue | 6 +++- 3 files changed, 42 insertions(+), 2 deletions(-) create mode 100644 apps/stage-tamagotchi/src/renderer/composables/use-restore-scroll.ts diff --git a/apps/stage-tamagotchi/src/renderer/composables/use-restore-scroll.ts b/apps/stage-tamagotchi/src/renderer/composables/use-restore-scroll.ts new file mode 100644 index 000000000..7bf929bbc --- /dev/null +++ b/apps/stage-tamagotchi/src/renderer/composables/use-restore-scroll.ts @@ -0,0 +1,36 @@ +import { nextTick, ref, watch } from 'vue' +import { useRoute } from 'vue-router' + +const scrollPositions = new Map() + +export function useRestoreScroll() { + const route = useRoute() + + const scrollContainer = ref(null) + + watch( + () => route.fullPath, + async (newPath, oldPath) => { + if (!scrollContainer.value) { + return + } + + if (oldPath) { + scrollPositions.set(oldPath, scrollContainer.value.scrollTop) + } + + await nextTick() + + if (!scrollContainer.value) { + return + } + + const savedPosition = scrollPositions.get(newPath) || 0 + scrollContainer.value.scrollTop = savedPosition + }, + ) + + return { + scrollContainer, + } +} diff --git a/apps/stage-tamagotchi/src/renderer/index.html b/apps/stage-tamagotchi/src/renderer/index.html index 65c64030d..6d87e754c 100644 --- a/apps/stage-tamagotchi/src/renderer/index.html +++ b/apps/stage-tamagotchi/src/renderer/index.html @@ -3,7 +3,7 @@ AIRI - +