Add customer search and navigation updates

This commit is contained in:
2026-03-12 16:50:50 +01:00
parent 8ebb4d06e5
commit 1a8e37bd36
17 changed files with 710 additions and 137 deletions

View File

@@ -30,6 +30,7 @@ export default function AnamnesisPage() {
const [activeQuarter, setActiveQuarter] = useState<QuarterKey | null>(null);
const [message, setMessage] = useState<string | null>(null);
const [saving, setSaving] = useState(false);
const [showValidation, setShowValidation] = useState(false);
useEffect(() => {
async function load() {
@@ -70,10 +71,22 @@ export default function AnamnesisPage() {
}));
}
function quarterHasPathogen(quarterKey: QuarterKey) {
const quarterState = quarterStates[quarterKey];
return Boolean(quarterState?.pathogenBusinessKey || quarterState?.customPathogenName?.trim());
}
async function handleSave() {
if (!sampleId || !sample) {
return;
}
setShowValidation(true);
const missingQuarter = sample.quarters.find((quarter) => !quarterHasPathogen(quarter.quarterKey));
if (missingQuarter) {
setActiveQuarter(missingQuarter.quarterKey);
setMessage("Bitte fuer jede Entnahmestelle einen Erreger auswaehlen oder eingeben.");
return;
}
setSaving(true);
setMessage(null);
@@ -134,7 +147,9 @@ export default function AnamnesisPage() {
<button
key={quarter.quarterKey}
type="button"
className={`tab-chip ${activeQuarter === quarter.quarterKey ? "is-active" : ""}`}
className={`tab-chip ${activeQuarter === quarter.quarterKey ? "is-active" : ""} ${
showValidation && !quarterHasPathogen(quarter.quarterKey) ? "is-invalid" : ""
}`}
onClick={() => setActiveQuarter(quarter.quarterKey)}
>
{quarter.label}
@@ -153,7 +168,8 @@ export default function AnamnesisPage() {
<div className="info-chip">Auffaelliges Viertel markiert</div>
) : null}
<div className="pathogen-grid">
<p className="required-label">Erreger</p>
<div className={`pathogen-grid ${showValidation && !quarterHasPathogen(visibleQuarter.quarterKey) ? "is-invalid" : ""}`}>
{catalogs.pathogens.map((pathogen) => (
<button
key={pathogen.businessKey}
@@ -175,9 +191,10 @@ export default function AnamnesisPage() {
))}
</div>
<label className="field">
<label className="field field--required">
<span>Erreger manuell eingeben</span>
<input
className={showValidation && !quarterHasPathogen(visibleQuarter.quarterKey) ? "is-invalid" : ""}
value={state.customPathogenName}
onChange={(event) =>
updateQuarter(visibleQuarter.quarterKey, {