mirror of
https://github.com/MBombeck/HealthLog.git
synced 2026-11-14 22:50:51 +00:00
fix(insights): place metric detail back-nav above the heading
The metric values subpage (/insights/values/[type]) and the workout detail page rendered the back link as the first child of SubPageShell, which paints it below the page heading. Add an optional backLink slot to SubPageShell that renders above the header — the standard back-nav placement — and move both pages' back links into it. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> (cherry picked from commit 72a73a52eb8295c9e70a3456972476b8c4469f07)
This commit is contained in:
1 parent
a9aa0b8531
commit
ee845946fa
5 files changed
+57
-48
No files matched your search
@@ -47,20 +47,21 @@ export default function InsightsMetricValuesPage({
|
||||
<SubPageShell
|
||||
title={t("insights.subPage.valuesPageTitle", { metric: metricLabel })}
|
||||
description={t("insights.subPage.valuesPageDescription")}
|
||||
backLink={
|
||||
<Button
|
||||
asChild
|
||||
variant="ghost"
|
||||
size="sm"
|
||||
data-slot="metric-values-back"
|
||||
className="-ml-2 w-fit"
|
||||
>
|
||||
<Link href="/insights">
|
||||
<ArrowLeft className="mr-1 size-4" aria-hidden="true" />
|
||||
{t("insights.subPage.valuesBack")}
|
||||
</Link>
|
||||
</Button>
|
||||
}
|
||||
>
|
||||
<Button
|
||||
asChild
|
||||
variant="ghost"
|
||||
size="sm"
|
||||
data-slot="metric-values-back"
|
||||
className="-ml-2 w-fit"
|
||||
>
|
||||
<Link href="/insights">
|
||||
<ArrowLeft className="mr-1 size-4" aria-hidden="true" />
|
||||
{t("insights.subPage.valuesBack")}
|
||||
</Link>
|
||||
</Button>
|
||||
|
||||
<MeasurementList lockedType={type} />
|
||||
</SubPageShell>
|
||||
);
|
||||
|
||||
@@ -40,19 +40,21 @@ export default function InsightsWorkoutDetailPage({
|
||||
<SubPageShell
|
||||
title={t("insights.workouts.title")}
|
||||
description={t("insights.workouts.description")}
|
||||
backLink={
|
||||
<Button
|
||||
asChild
|
||||
variant="ghost"
|
||||
size="sm"
|
||||
data-slot="workout-detail-back"
|
||||
className="-ml-2 w-fit"
|
||||
>
|
||||
<Link href="/insights/workouts">
|
||||
<ArrowLeft className="mr-1 size-4" />
|
||||
{t("insights.workouts.detail.backToList")}
|
||||
</Link>
|
||||
</Button>
|
||||
}
|
||||
>
|
||||
<Button
|
||||
asChild
|
||||
variant="ghost"
|
||||
size="sm"
|
||||
data-slot="workout-detail-back"
|
||||
>
|
||||
<Link href="/insights/workouts">
|
||||
<ArrowLeft className="mr-1 size-4" />
|
||||
{t("insights.workouts.detail.backToList")}
|
||||
</Link>
|
||||
</Button>
|
||||
|
||||
{isLoading ? (
|
||||
<div data-slot="workout-detail-loading" className="space-y-3">
|
||||
<Skeleton className="h-20 w-full rounded-lg" />
|
||||
|
||||
@@ -1,23 +0,0 @@
|
||||
import { permanentRedirect } from "next/navigation";
|
||||
|
||||
/**
|
||||
* v1.4.34 IW-D — `/settings/sources` permanent redirect.
|
||||
*
|
||||
* The Sources settings section was merged into `/settings/thresholds`
|
||||
* (now titled "Targets & Sources" / "Zielwerte & Quellen"). The two
|
||||
* editors share the same per-metric configuration shelf and reading
|
||||
* them side-by-side on one page matches how a user actually thinks
|
||||
* about metric configuration ("for this metric, which sources do I
|
||||
* trust AND what range counts as healthy?"). Per
|
||||
* `.planning/research/v1434-r-2-carryover-scope.md` §7 and
|
||||
* `.planning/round-v1433-audit-menu.md` §7.1 (item 3).
|
||||
*
|
||||
* 308 (`permanentRedirect`) keeps the request method intact so any
|
||||
* external system that POSTs (none today, but cheap insurance) follows
|
||||
* through with its original method. Existing bookmarks, iOS Settings
|
||||
* deep-links, and any docs that referenced `/settings/sources`
|
||||
* continue to resolve.
|
||||
*/
|
||||
export default function SettingsSourcesRedirect(): never {
|
||||
permanentRedirect("/settings/thresholds");
|
||||
}
|
||||
Reference in new issue
Block a user