/*
This file is part of GNU Taler
(C) 2022 Taler Systems S.A.
GNU Taler is free software; you can redistribute it and/or modify it under the
terms of the GNU General Public License as published by the Free Software
Foundation; either version 3, or (at your option) any later version.
GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with
GNU Taler; see the file COPYING. If not, see
*/
import { h, VNode } from "preact";
import { route } from "preact-router";
import { useEffect, useRef, useState } from "preact/hooks";
import { useBackendContext } from "../context/backend.js";
import { useTranslationContext } from "@gnu-taler/web-util/lib/index.browser";
import { BackendStateHandler } from "../hooks/backend.js";
import { bankUiSettings } from "../settings.js";
import { getBankBackendBaseUrl, undefinedIfEmpty } from "../utils.js";
import { ShowInputErrorLabel } from "./ShowInputErrorLabel.js";
/**
* Collect and submit login data.
*/
export function LoginForm(): VNode {
const backend = useBackendContext();
const [username, setUsername] = useState();
const [password, setPassword] = useState();
const { i18n } = useTranslationContext();
const ref = useRef(null);
useEffect(() => {
ref.current?.focus();
}, []);
const errors = undefinedIfEmpty({
username: !username ? i18n.str`Missing username` : undefined,
password: !password ? i18n.str`Missing password` : undefined,
});
return (
);
}
async function loginCall(
req: { username: string; password: string },
/**
* FIXME: figure out if the two following
* functions can be retrieved from the state.
*/
backend: BackendStateHandler,
): Promise {
/**
* Optimistically setting the state as 'logged in', and
* let the Account component request the balance to check
* whether the credentials are valid. */
backend.save({
url: getBankBackendBaseUrl(),
username: req.username,
password: req.password,
});
}