2
0
mirror of https://github.com/Laupetin/OpenAssetTools.git synced 2025-11-17 18:52:06 +00:00

chore: only show specific back buttons in modman

This commit is contained in:
Jan Laupetin
2025-10-27 22:02:20 +01:00
parent 03b03be181
commit 27ecb4cc57
3 changed files with 29 additions and 14 deletions

View File

@@ -1,31 +1,36 @@
<script setup lang="ts"> <script setup lang="ts">
import Button from "primevue/button"; import Button from "primevue/button";
import { useRoute, useRouter } from "vue-router"; import { useRouter } from "vue-router";
import IconArrowLeft from "./icons/IconArrowLeft.vue"; import IconArrowLeft from "./icons/IconArrowLeft.vue";
import IconGear from "./icons/IconGear.vue"; import IconGear from "./icons/IconGear.vue";
import { computed } from "vue"; import { useRouteMeta } from "@/router/RouteMeta";
import { getNameForRoute } from "@/router/RouteMeta";
const route = useRoute(); const { routeDisplayName, routeNavigateBackTo } = useRouteMeta();
const router = useRouter(); const router = useRouter();
const routeName = computed<string>(() => getNameForRoute(route));
function onClickBack() { function onClickBack() {
router.back(); if (!routeNavigateBackTo.value) return;
router.push({ name: routeNavigateBackTo.value });
} }
</script> </script>
<template> <template>
<header class="header"> <header class="header">
<div class="header-section left"> <div class="header-section left">
<Button variant="text" severity="secondary" aria-label="Back" @click="onClickBack"> <Button
v-if="routeNavigateBackTo"
variant="text"
severity="secondary"
aria-label="Back"
@click="onClickBack"
>
<template #icon> <template #icon>
<IconArrowLeft class="icon" /> <IconArrowLeft class="icon" />
</template> </template>
</Button> </Button>
</div> </div>
<h1 class="title">{{ routeName }}</h1> <h1 class="title">{{ routeDisplayName }}</h1>
<div class="header-section right"> <div class="header-section right">
<Button variant="text" severity="secondary" aria-label="Settings"> <Button variant="text" severity="secondary" aria-label="Settings">
<template #icon> <template #icon>

View File

@@ -1,15 +1,24 @@
import type { RouteLocationNormalizedGeneric } from "vue-router"; import { computed } from "vue";
import { useRoute, type RouteLocationNormalizedGeneric } from "vue-router";
export interface TypedRouteMeta { export interface TypedRouteMeta {
backTo?: string;
nameFunc?(route: RouteLocationNormalizedGeneric): string; nameFunc?(route: RouteLocationNormalizedGeneric): string;
} }
export type RouteMeta = TypedRouteMeta & Record<string, unknown>; export type RouteMeta = TypedRouteMeta & Record<string, unknown>;
export function getNameForRoute(route: RouteLocationNormalizedGeneric): string { export function useRouteMeta() {
const meta = route.meta as RouteMeta; const route = useRoute();
const meta = computed<RouteMeta>(() => route.meta as RouteMeta);
if (meta.nameFunc) return meta.nameFunc(route); const routeDisplayName = computed<string>(() => {
if (meta.value.nameFunc) return meta.value.nameFunc(route);
return String(route.name); return String(route.name);
});
const routeNavigateBackTo = computed<string | null>(() => meta.value.backTo ?? null);
return { routeDisplayName, routeNavigateBackTo };
} }

View File

@@ -18,6 +18,7 @@ const ROUTES: RouteRecordRaw[] = [
name: PAGE.INSPECT.ZONE_DETAILS, name: PAGE.INSPECT.ZONE_DETAILS,
component: InspectDetails, component: InspectDetails,
meta: { meta: {
backTo: PAGE.INSPECT.SELECT_ZONE,
nameFunc: (route) => `Zone details: ${route.params["zoneName"]}`, nameFunc: (route) => `Zone details: ${route.params["zoneName"]}`,
} satisfies RouteMeta, } satisfies RouteMeta,
props: true, props: true,