Preserve active parent-navigation source for homepage delivery

This commit is contained in:
鲨鱼辣椒 committed 2026-10-14 15:25:21 +08:00
1 parent f1dabdb358
commit 9116938127
5 files changed
+8 -8

No files matched your search

+3 -3
View File
@@ -1,4 +1,4 @@
import { ArrowLeft } from 'lucide-react';
import { Home } from 'lucide-react';
import { useLocation, useNavigate } from 'react-router-dom';
import { cn } from '@/lib/utils';
import { AI_MODULE_SELECTION_PATH, aiModules, getAiModuleForPath } from '@/lib/ai-modules';
@@ -34,10 +34,10 @@ export function ModuleSwitcher({ sidebarCollapsed, compact = false, toolbar = fa
agentReturn && 'rounded-full bg-background/70 text-brand',
)}
>
<ArrowLeft
<Home
data-testid="sidebar-module-return-icon"
aria-hidden="true"
className={cn('h-4 w-4 shrink-0 -translate-y-px transition-[color,transform] duration-150 group-hover:-translate-x-0.5 group-hover:text-brand', agentReturn ? 'text-brand' : 'text-muted-foreground')}
className={cn('h-4 w-4 shrink-0 -translate-y-px transition-colors duration-150 group-hover:text-brand', agentReturn ? 'text-brand' : 'text-muted-foreground')}
/>
{!sidebarCollapsed && !iconOnly ? <span className={cn('min-w-0 whitespace-nowrap leading-4', toolbar && 'truncate')}>{activeModuleLabel}</span> : null}
</button>
+1 -1
View File
@@ -125,7 +125,7 @@ export function DraftEditor({ initial, recent, onBack, onSaved, startingPrompt,
return <CloudPendingContext.Provider value={pending.report}><section className={`agent-desktop${tab === 'chat' ? ' agent-chat-editor' : ''}`} data-testid="cloud-agent-editor"
data-configuration-settled={!dirty && !busy && !publication.pending && !publication.error && !remote && publication.appliedRevision === saved.draft_revision}>
<header className={`agent-workspace-header${tab === 'chat' ? ' agent-chat-workspace-header' : ''}`}>
<Button variant="ghost" size="icon" className="h-10 w-10 shrink-0" aria-label={tab === 'chat' ? '返回智能体列表' : '我的智能体'} disabled={busy}
<Button variant="ghost" size="icon" className="h-10 w-10 shrink-0" aria-label={tab === 'chat' ? '返回智能体列表' : '我的智能体'} title="返回上一级" disabled={busy}
onClick={() => dirty || hasPending ? setLeaving(true) : onBack()}><ArrowLeft className="h-4 w-4" /></Button>
{tab === 'chat' ? <>
<CloudAvatar src={saved.icon_url} name={saved.name} identity={saved.slug} className="agent-chat-header-avatar" />
+1 -1
View File
@@ -213,7 +213,7 @@ export function PluginsView(props: PluginsViewProps) {
size="icon"
data-testid="project-plugins-back-button"
aria-label="返回项目配置"
title="返回项目配置"
title="返回上一级"
onClick={props.onBackToProjectSettings}
className="mt-0.5 h-8 w-8 shrink-0 text-muted-foreground hover:bg-surface-subtle hover:text-foreground"
>
+2 -2
View File
@@ -34,7 +34,7 @@ function ResourceCard({ id, icon, title, subtitle, onClick }: { id: string; icon
}
function DrawerFrame({ title, desc, onClose, children, closeLabel = '关闭', closeIcon = 'close' }: { title: string; desc: string; onClose: () => void; children: React.ReactNode; closeLabel?: string; closeIcon?: 'close' | 'back' }) {
const closeButton = <Button type="button" variant="ghost" size="icon" onClick={onClose} aria-label={closeLabel} title={closeLabel} className="relative z-10 shrink-0">{closeIcon === 'back' ? <ArrowLeft className="h-4 w-4" /> : <X className="h-4 w-4" />}</Button>;
const closeButton = <Button type="button" variant="ghost" size="icon" onClick={onClose} aria-label={closeLabel} title={closeIcon === 'back' ? '返回上一级' : closeLabel} className="relative z-10 shrink-0">{closeIcon === 'back' ? <ArrowLeft className="h-4 w-4" /> : <X className="h-4 w-4" />}</Button>;
return <div className="flex min-h-0 flex-1 flex-col"><div className="glass-surface drawer-motion-header flex items-center justify-between gap-3 border-b border-border/70 bg-background px-5 py-4"><div className="min-w-0 flex-1"><SheetTitle className="text-lg font-semibold">{title}</SheetTitle><SheetDescription className="mt-1 text-sm font-medium text-muted-foreground">{desc}</SheetDescription></div>{closeIcon === 'back' ? closeButton : <SheetClose asChild>{closeButton}</SheetClose>}</div><div className="drawer-motion-body min-h-0 flex-1 overflow-auto p-5">{children}</div></div>;
}
@@ -171,7 +171,7 @@ export function ProjectConfiguration() {
return <main className="-m-5 flex min-h-[calc(100%+2.5rem)] min-h-0 flex-col overflow-auto bg-background p-4 text-foreground sm:-m-6 sm:min-h-[calc(100%+3rem)]" data-testid="project-configuration-page">
<div className="mx-auto flex min-h-0 w-full max-w-7xl flex-1 flex-col gap-3">
<div className="config-motion-title flex items-center gap-2">
<Button type="button" variant="ghost" size="icon" data-testid="project-configuration-back-button" aria-label="返回" title="返回" onClick={handleBack} className="h-8 w-8 shrink-0 text-muted-foreground hover:bg-surface-subtle hover:text-foreground">
<Button type="button" variant="ghost" size="icon" data-testid="project-configuration-back-button" aria-label="返回" title="返回上一级" onClick={handleBack} className="h-8 w-8 shrink-0 text-muted-foreground hover:bg-surface-subtle hover:text-foreground">
<ArrowLeft className="h-4 w-4" />
</Button>
<h1 className="text-xl font-semibold">项目配置</h1>
+1 -1
View File
@@ -257,7 +257,7 @@ export function Settings() {
<main data-testid="settings-page" data-settings-dirty={proxySettingsDirty || savingProxy} className="min-h-full bg-background">
<div className="mx-auto flex max-w-4xl flex-col gap-8 px-8 py-8">
<div className="flex items-center gap-3">
<Button type="button" variant="ghost" aria-label="返回上一页" data-testid="settings-back-button"
<Button type="button" variant="ghost" aria-label="返回上一页" title="返回上一级" data-testid="settings-back-button"
className="shrink-0 gap-2" onClick={() => {
if (!canLeaveCurrentPage()) { toast.info('请先保存或还原当前修改,再返回。'); return; }
navigate(getSettingsReturnPath(location.state));