dashboard/app/src/App.vue (53 lines of code) (raw):

<template> <router-view v-slot="{ Component, route }"> <ScrollTop /> <template v-if="route.path.startsWith('/degradation') || route.path.startsWith('/metrics') || route.path.startsWith('/bisect')"> <keep-alive :key="route.path" max="4" > <component :is="Component" /> </keep-alive> </template> <template v-else> <PageLayout> <keep-alive :key="route.path" max="4" > <component :is="Component" /> </keep-alive> </PageLayout> </template> </router-view> <Toast /> </template> <script setup lang="ts"> import Toast from "primevue/toast" import PageLayout from "new-dashboard/src/PageLayout.vue" import { PersistentStateManager } from "new-dashboard/src/components/common/PersistentStateManager" import { ServerWithCompressConfigurator } from "new-dashboard/src/configurators/ServerWithCompressConfigurator" import { limit, refToObservable } from "new-dashboard/src/configurators/rxjs" import { serverUrlObservableKey } from "new-dashboard/src/shared/injectionKeys" import { filter, shareReplay } from "rxjs" import { provide, shallowRef, watch } from "vue" import { useRoute } from "vue-router" const serverUrl = shallowRef(ServerWithCompressConfigurator.DEFAULT_SERVER_URL) // shallow ref doesn't work - items are modified by primevue const serverUrlObservable = refToObservable(serverUrl).pipe( filter((it: string | null): it is string => it !== null && it.length > 0), shareReplay(1) ) provide(serverUrlObservableKey, serverUrlObservable) const activePath = shallowRef("") const _route = useRoute() watch( () => _route.path, (p) => { activePath.value = p limit.clearQueue() } ) const persistentStateManager = new PersistentStateManager("common", { serverUrl: ServerWithCompressConfigurator.DEFAULT_SERVER_URL }) persistentStateManager.add("serverUrl", serverUrl) </script>