fix(agenten): Thomas' Chat klappt wirklich ein, Einzahl bei Livias Zählung
Der Smoke-Test der fünf betroffenen Seiten hat zwei Fehler aus Runde 8 aufgedeckt, die Typecheck, Lint und Tests nicht sehen konnten. Thomas' Chatkopf blieb stehen, statt in den Titelbalken zu wandern. Seine Seite bot nur 307 Pixel Scrollweg, der Chatkopf misst aber rund 400 — der IntersectionObserver löste deshalb nie aus. Bei den anderen Agenten leistet die lange Liste unter dem Chat den nötigen Weg; hier haben die drei Verwaltungsbereiche ihre eigene Höhe und scrollen innen, also muss die Bedingung ausdrücklich stehen. Die Mindesthöhe des Abschnitts ist jetzt eine Bildschirmhöhe abzüglich des obersten Balkens; `TOP_BAR_PX` kommt dafür aus `AgentWorkspaceHero` statt als zweite Zahl danebenzustehen. Livias Zählzeile schrieb «1 Risiken». Einzahl und Mehrzahl werden nun für alle drei Werte der Zeile unterschieden. Geprüft im Browser gegen den Produktionsbuild: fünf Seiten ohne Laufzeitfehler, Thomas' kompakter Chat erscheint nach dem Scrollen im Balken, Chance- und Risiko-Beispiele sichtbar, alle fünf Vertragstypen bei Ferdi vorhanden, keine Matching-Darstellung auf Livias Seite. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
1 parent
2037e5a463
commit
f5451f649f
4 files changed
+15
-4
No files matched your search
@@ -51,7 +51,8 @@ export function ResearchWorkspace() {
|
|||||||
<Typography variant="caption" sx={{ color: DS_TEXT.muted }}>
|
<Typography variant="caption" sx={{ color: DS_TEXT.muted }}>
|
||||||
{isLoading
|
{isLoading
|
||||||
? 'Leads werden geladen …'
|
? 'Leads werden geladen …'
|
||||||
: `${research.length} Leads aus externen Quellen · ${chancen} Chancen, ${risiken} Risiken`}
|
: `${research.length} ${research.length === 1 ? 'Lead' : 'Leads'} aus externen Quellen · ` +
|
||||||
|
`${chancen} ${chancen === 1 ? 'Chance' : 'Chancen'}, ${risiken} ${risiken === 1 ? 'Risiko' : 'Risiken'}`}
|
||||||
</Typography>
|
</Typography>
|
||||||
|
|
||||||
<UnifiedLeadList
|
<UnifiedLeadList
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ export interface AgentWorkspaceHeroProps {
|
|||||||
* Höhe des obersten globalen Balkens. Der Chatkopf gilt bereits als verschwunden,
|
* Höhe des obersten globalen Balkens. Der Chatkopf gilt bereits als verschwunden,
|
||||||
* sobald er darunter liegt — nicht erst, wenn er den Fensterrand verlässt.
|
* sobald er darunter liegt — nicht erst, wenn er den Fensterrand verlässt.
|
||||||
*/
|
*/
|
||||||
const TOP_BAR_PX = 64
|
export const TOP_BAR_PX = 64
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gemeinsamer Chat-Einstieg aller fünf Agentenseiten (Runde 4, §4; Runde 5, §5).
|
* Gemeinsamer Chat-Einstieg aller fünf Agentenseiten (Runde 4, §4; Runde 5, §5).
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ export { HistorySection } from './HistorySection'
|
|||||||
export { ChannelsSection } from './ChannelsSection'
|
export { ChannelsSection } from './ChannelsSection'
|
||||||
|
|
||||||
// Gemeinsame Bausteine der fünf Agentenseiten
|
// Gemeinsame Bausteine der fünf Agentenseiten
|
||||||
export { AgentWorkspaceHero } from './AgentWorkspaceHero'
|
export { AgentWorkspaceHero, TOP_BAR_PX } from './AgentWorkspaceHero'
|
||||||
export { AgentChatStickyBar } from './AgentChatStickyBar'
|
export { AgentChatStickyBar } from './AgentChatStickyBar'
|
||||||
export { useAgentChat } from './useAgentChat'
|
export { useAgentChat } from './useAgentChat'
|
||||||
export { ObjectDeepLink } from './ObjectDeepLink'
|
export { ObjectDeepLink } from './ObjectDeepLink'
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import { Box } from '@mui/material'
|
|||||||
import {
|
import {
|
||||||
TeamPageHeader,
|
TeamPageHeader,
|
||||||
AgentWorkspaceHero,
|
AgentWorkspaceHero,
|
||||||
|
TOP_BAR_PX,
|
||||||
AgentWorkspaceTabs,
|
AgentWorkspaceTabs,
|
||||||
PersonnelSection,
|
PersonnelSection,
|
||||||
HistorySection,
|
HistorySection,
|
||||||
@@ -68,7 +69,16 @@ export default function MeineAgenten() {
|
|||||||
tabs={<AgentWorkspaceTabs value={section} onChange={handleChange} />}
|
tabs={<AgentWorkspaceTabs value={section} onChange={handleChange} />}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<Box sx={{ display: 'flex', flexDirection: 'column', minHeight: '70vh' }}>
|
{/*
|
||||||
|
Die Mindesthöhe ist kein Gestaltungsmass, sondern die Bedingung dafür,
|
||||||
|
dass der Chatkopf überhaupt wegscrollen kann: Er misst rund 400 Pixel,
|
||||||
|
und erst wenn der Inhalt darunter mindestens eine Bildschirmhöhe
|
||||||
|
einnimmt, entsteht genug Scrollweg, damit er unter den obersten Balken
|
||||||
|
rutscht und `AgentChatStickyBar` übernimmt. Bei den anderen Agenten
|
||||||
|
leistet das die lange Liste; hier hat der Abschnitt seine eigene Höhe
|
||||||
|
und scrollt innen, also muss die Bedingung ausdrücklich stehen.
|
||||||
|
*/}
|
||||||
|
<Box sx={{ display: 'flex', flexDirection: 'column', minHeight: `calc(100vh - ${TOP_BAR_PX}px)` }}>
|
||||||
{section === AGENT_SECTIONS.PERSONNEL && <PersonnelSection />}
|
{section === AGENT_SECTIONS.PERSONNEL && <PersonnelSection />}
|
||||||
{section === AGENT_SECTIONS.HISTORY && <HistorySection />}
|
{section === AGENT_SECTIONS.HISTORY && <HistorySection />}
|
||||||
{section === AGENT_SECTIONS.CHANNELS && <ChannelsSection />}
|
{section === AGENT_SECTIONS.CHANNELS && <ChannelsSection />}
|
||||||
|
|||||||
Reference in new issue
Block a user