diff --git a/webui2/src/components/ui/back-link.tsx b/webui2/src/components/ui/back-link.tsx new file mode 100644 index 0000000000000000000000000000000000000000..aa7e27dc8c2e1fb21e8d685978621ec7ee92dcfb --- /dev/null +++ b/webui2/src/components/ui/back-link.tsx @@ -0,0 +1,37 @@ +import { Link, useCanGoBack, useRouter } from "@tanstack/react-router"; +import type { LinkProps } from "@tanstack/react-router"; +import { ArrowLeft } from "lucide-react"; + +// A "Back to ..." link that uses browser history when available, +// falling back to a typed Link destination otherwise. +// This preserves scroll position and filter state when navigating +// back from a detail page to a list. +export function BackLink({ + children, + ...fallbackProps +}: LinkProps & { children: React.ReactNode }) { + const canGoBack = useCanGoBack(); + const router = useRouter(); + + if (canGoBack) { + return ( + + ); + } + + return ( + + + {children} + + ); +} diff --git a/webui2/src/routes/$repo/_issues/issues/$id.tsx b/webui2/src/routes/$repo/_issues/issues/$id.tsx index 4684b3fe96077c141e434d57e924c618129e8e91..c74f46437fe6e557d64217e36bc0450dd71e2504 100644 --- a/webui2/src/routes/$repo/_issues/issues/$id.tsx +++ b/webui2/src/routes/$repo/_issues/issues/$id.tsx @@ -1,7 +1,6 @@ import { useReadQuery } from "@apollo/client/react"; import { createFileRoute, Link } from "@tanstack/react-router"; import { formatDistanceToNow } from "date-fns"; -import { ArrowLeft } from "lucide-react"; import { type BugDetailQuery, BugDetailDocument } from "@/__generated__/graphql"; import { CommentBox } from "@/components/bugs/CommentBox"; @@ -10,6 +9,7 @@ import { StatusBadge } from "@/components/bugs/StatusBadge"; import { Timeline } from "@/components/bugs/Timeline"; import { TitleEditor } from "@/components/bugs/TitleEditor"; import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar"; +import { BackLink } from "@/components/ui/back-link"; import { Separator } from "@/components/ui/separator"; import { Skeleton } from "@/components/ui/skeleton"; @@ -42,15 +42,9 @@ function RouteComponent() { return (
- - + Back to issues - + {/* Title row — hover reveals edit button when logged in */}
diff --git a/webui2/src/routes/$repo/_issues/issues/new.tsx b/webui2/src/routes/$repo/_issues/issues/new.tsx index 9eeb5cbf09e8dd8e97fe55d6c75619d987464a85..ee0817ad2564e9ddc131c62920a6a23b930095b2 100644 --- a/webui2/src/routes/$repo/_issues/issues/new.tsx +++ b/webui2/src/routes/$repo/_issues/issues/new.tsx @@ -1,9 +1,9 @@ -import { createFileRoute, Link, useNavigate } from "@tanstack/react-router"; -import { ArrowLeft } from "lucide-react"; +import { createFileRoute, useNavigate } from "@tanstack/react-router"; import { useState } from "react"; import { useBugCreateMutation } from "@/__generated__/graphql"; import { Markdown } from "@/components/content/Markdown"; +import { BackLink } from "@/components/ui/back-link"; import { Button } from "@/components/ui/button"; import { ButtonLink } from "@/components/ui/button-link"; import { Input } from "@/components/ui/input"; @@ -38,15 +38,9 @@ function RouteComponent() { return (
- - + Back to issues - +

New issue

diff --git a/webui2/src/routes/$repo/_issues/user/$id.tsx b/webui2/src/routes/$repo/_issues/user/$id.tsx index 5a88c47c960225843ea5dc39a9e3a730f0793735..5494eab32333796e5168a8980fe40b2e43097eaa 100644 --- a/webui2/src/routes/$repo/_issues/user/$id.tsx +++ b/webui2/src/routes/$repo/_issues/user/$id.tsx @@ -9,7 +9,6 @@ import { createFileRoute, Link } from "@tanstack/react-router"; import { formatDistanceToNow } from "date-fns"; import { - ArrowLeft, MessageSquare, CircleDot, CircleCheck, @@ -22,6 +21,7 @@ import { useState } from "react"; import { Status, useUserProfileQuery } from "@/__generated__/graphql"; import { LabelBadge } from "@/components/bugs/LabelBadge"; import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar"; +import { BackLink } from "@/components/ui/back-link"; import { Button } from "@/components/ui/button"; import { Skeleton } from "@/components/ui/skeleton"; import { cn } from "@/lib/utils"; @@ -96,15 +96,9 @@ function RouteComponent() { return (
- - + Back to issues - + {/* ── Profile header ─────────────────────────────────────────────── */}
diff --git a/webui2/src/routes/$repo/commit/$hash.tsx b/webui2/src/routes/$repo/commit/$hash.tsx index d2af8fee105da2cd8f3faf53763812eda3ad5a81..e87367b98d784cdd63166b8d266c19617d160113 100644 --- a/webui2/src/routes/$repo/commit/$hash.tsx +++ b/webui2/src/routes/$repo/commit/$hash.tsx @@ -3,11 +3,12 @@ import { gql } from "@apollo/client"; import { useReadQuery } from "@apollo/client/react"; -import { createFileRoute, Link, useCanGoBack, useRouter } from "@tanstack/react-router"; +import { createFileRoute, Link } from "@tanstack/react-router"; import { format } from "date-fns"; -import { ArrowLeft, GitCommit } from "lucide-react"; +import { GitCommit } from "lucide-react"; import { FileDiffView } from "@/components/code/FileDiffView"; +import { BackLink } from "@/components/ui/back-link"; import { Skeleton } from "@/components/ui/skeleton"; const COMMIT_QUERY = gql` @@ -68,8 +69,6 @@ function RouteComponent() { const { repo } = Route.useParams(); const { commitRef } = Route.useLoaderData(); const { data } = useReadQuery(commitRef); - const canGoBack = useCanGoBack(); - const router = useRouter(); const commit = data?.repository?.commit; if (!commit) return null; @@ -79,15 +78,9 @@ function RouteComponent() { return (
- {canGoBack && ( - - )} + + Back +