Add persistent invoice template management

This commit is contained in:
2026-03-13 16:02:46 +01:00
parent ff237332e1
commit 490be6a89b
16 changed files with 1254 additions and 146 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -12,6 +12,7 @@ export default function LoginPage() {
const [showRegistration, setShowRegistration] = useState(false);
const [email, setEmail] = useState("");
const [password, setPassword] = useState("");
const [loginInputsUnlocked, setLoginInputsUnlocked] = useState(false);
const [showLoginValidation, setShowLoginValidation] = useState(false);
const [showRegisterValidation, setShowRegisterValidation] = useState(false);
const [registration, setRegistration] = useState({
@@ -28,6 +29,10 @@ export default function LoginPage() {
const [feedback, setFeedback] = useState<FeedbackState>(null);
const { setSession } = useSession();
function unlockLoginInputs() {
setLoginInputsUnlocked(true);
}
async function handlePasswordLogin(event: FormEvent<HTMLFormElement>) {
event.preventDefault();
setShowLoginValidation(true);
@@ -116,14 +121,23 @@ export default function LoginPage() {
<div className="auth-grid">
{!showRegistration ? (
<form className={`login-panel__section ${showLoginValidation ? "show-validation" : ""}`} onSubmit={handlePasswordLogin}>
<form
className={`login-panel__section ${showLoginValidation ? "show-validation" : ""}`}
onSubmit={handlePasswordLogin}
autoComplete="off"
>
<label className="field field--required">
<span>E-Mail</span>
<input
type="email"
name="login-email"
value={email}
onChange={(event) => setEmail(event.target.value)}
onFocus={unlockLoginInputs}
onPointerDown={unlockLoginInputs}
placeholder="z. B. name@hof.de"
autoComplete="off"
readOnly={!loginInputsUnlocked}
required
/>
</label>
@@ -131,8 +145,13 @@ export default function LoginPage() {
<span>Passwort</span>
<input
type="password"
name="login-password"
value={password}
onChange={(event) => setPassword(event.target.value)}
onFocus={unlockLoginInputs}
onPointerDown={unlockLoginInputs}
autoComplete="new-password"
readOnly={!loginInputsUnlocked}
required
/>
</label>