Kundenart: Prüfung, Texte und Segment-Schalter

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
ClaudeandClaude Sonnet 5.5 committed 2026-10-16 13:11:52 +00:00
1 parent 0112c77afc
commit 45b2b145b0
4 files changed
+62

No files matched your search

+21
View File
@@ -0,0 +1,21 @@
import { KUNDENART_AUSWAHL } from '../lib/kundenFelder'
/** Segment-Schalter für die Kundenart (V9): zwei Werte, nie eine Vorauswahl; der Aufrufer prüft mit kundenartPruefen. */
export default function KundenartAuswahl({ value, onChange, disabled = false }) {
return (
<div className="seg" role="group" aria-label="Kundenart">
{KUNDENART_AUSWAHL.map((o) => (
<button
key={o.value}
type="button"
className={value === o.value ? 'on' : ''}
aria-pressed={value === o.value}
disabled={disabled}
onClick={() => onChange(o.value)}
>
{o.label}
</button>
))}
</div>
)
}
+21
View File
@@ -12,6 +12,27 @@ export const KUNDENART_OPTIONEN = [
export const KUNDENART_HINWEIS = 'Für Auftragsbestätigungen: Privatpersonen bekommen die Widerrufsbelehrung.'
/** Auswahl für neue Eingaben (V9): ohne den Leer-Eintrag, es gibt nie eine Vorauswahl. */
export const KUNDENART_AUSWAHL = KUNDENART_OPTIONEN.filter((o) => o.value !== '')
export const KUNDENART_FEHLT_FEHLER = 'Bitte die Kundenart wählen.'
export const KUNDENART_AUSWAHL_HINWEIS =
'Unternehmen bestellt als Betrieb, Privatperson als Verbraucher mit Widerrufsrecht. Das Portal fragt den Kunden nicht danach.'
export const KUNDENART_HOCHSTUFEN_HINWEIS =
'Bitte zuerst die Kundenart festlegen (unter „Rechnungsdaten“), dann „Zum festen Kunden machen“.'
/** Gesetzt heisst genau 'unternehmen' oder 'privat'; Gross-/Kleinschreibung, Leerzeichen, null und Zahlen gelten nicht. */
export function kundenartGesetzt(value) {
return typeof value === 'string' && KUNDENARTEN.includes(value)
}
/** Pflichtpruefung fuer neue Eingaben: null = in Ordnung, sonst der Fehlertext. */
export function kundenartPruefen(value) {
return kundenartGesetzt(value) ? null : KUNDENART_FEHLT_FEHLER
}
const text = (v) => (typeof v === 'string' ? v : '')
/** Beschriftung der Kundenart; alles Unbekannte heisst „Nicht festgelegt“. */
+1
View File
@@ -411,6 +411,7 @@ a.list-row:hover .cell-title { color: var(--accent-ink); }
.seg { display: inline-flex; padding: 2px; border-radius: var(--radius); background: var(--bg-hover); gap: 2px; }
.seg button { height: 28px; padding: 0 12px; border-radius: 5px; color: var(--text-2); font-weight: 500; }
.seg button.on, .seg button[aria-pressed="true"] { background: var(--bg); color: var(--text); box-shadow: 0 1px 2px rgba(26,31,54,.12), 0 0 0 1px rgba(26,31,54,.04); }
.field > .seg { align-self: flex-start; }
.toast {
position: fixed;