2025-08-18 16:04:03 +01:00
|
|
|
import { Form, Formik, Field } from "formik";
|
|
|
|
|
import FormGroup from "../components/FormGroup";
|
2025-08-29 10:07:59 +01:00
|
|
|
import type { NPEDErrorValues, NPEDFieldType } from "../../../types/types";
|
|
|
|
|
import { useNPEDAuth } from "../../../hooks/useNPEDAuth";
|
|
|
|
|
import { toast } from "sonner";
|
2025-09-16 14:20:38 +01:00
|
|
|
import { faEyeSlash, faEye } from "@fortawesome/free-solid-svg-icons";
|
|
|
|
|
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
|
|
|
|
|
import { useState } from "react";
|
2025-08-18 16:04:03 +01:00
|
|
|
|
|
|
|
|
const NPEDFields = () => {
|
2025-09-16 14:20:38 +01:00
|
|
|
const [showPwd, setShowPwd] = useState(false);
|
2025-08-29 14:55:37 +01:00
|
|
|
const { signIn, user, signOut } = useNPEDAuth();
|
2025-09-12 13:28:14 +01:00
|
|
|
|
2025-08-29 14:55:37 +01:00
|
|
|
const initialValues = user
|
|
|
|
|
? {
|
2025-09-17 11:39:26 +01:00
|
|
|
username: user?.propUsername?.value,
|
|
|
|
|
password: user?.propPassword?.value,
|
|
|
|
|
clientId: user?.propClientID?.value,
|
2025-08-29 14:55:37 +01:00
|
|
|
frontId: "NPED",
|
|
|
|
|
rearId: "NPED",
|
|
|
|
|
}
|
|
|
|
|
: {
|
|
|
|
|
username: "",
|
|
|
|
|
password: "",
|
|
|
|
|
clientId: "",
|
|
|
|
|
frontId: "NPED",
|
|
|
|
|
rearId: "NPED",
|
|
|
|
|
};
|
2025-08-18 16:04:03 +01:00
|
|
|
|
2025-10-06 15:18:58 +01:00
|
|
|
const handleSubmit = async (values: NPEDFieldType) => {
|
2025-08-29 10:07:59 +01:00
|
|
|
const valuesToSend = {
|
|
|
|
|
...values,
|
|
|
|
|
};
|
2025-10-06 15:18:58 +01:00
|
|
|
await signIn(valuesToSend);
|
2025-08-29 10:07:59 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const validateValues = (values: NPEDFieldType) => {
|
|
|
|
|
const errors: NPEDErrorValues = {};
|
|
|
|
|
if (!values.username) errors.username = "Required";
|
|
|
|
|
if (!values.password) errors.password = "Required";
|
|
|
|
|
if (!values.clientId) errors.clientId = "Required";
|
|
|
|
|
return errors;
|
2025-08-18 16:04:03 +01:00
|
|
|
};
|
|
|
|
|
|
2025-08-29 14:55:37 +01:00
|
|
|
const handleLogoutClick = () => {
|
|
|
|
|
signOut();
|
2025-09-10 09:05:47 +01:00
|
|
|
toast.warning("logged out of NPED");
|
2025-08-29 14:55:37 +01:00
|
|
|
};
|
|
|
|
|
|
2025-08-18 16:04:03 +01:00
|
|
|
return (
|
2025-08-29 10:07:59 +01:00
|
|
|
<Formik
|
|
|
|
|
initialValues={initialValues}
|
|
|
|
|
onSubmit={handleSubmit}
|
|
|
|
|
validate={validateValues}
|
2025-09-16 14:20:38 +01:00
|
|
|
enableReinitialize
|
2025-08-29 10:07:59 +01:00
|
|
|
>
|
2025-10-06 15:18:58 +01:00
|
|
|
{({ errors, touched, isSubmitting }) => (
|
2025-09-26 13:58:14 +01:00
|
|
|
<Form className="flex flex-col space-y-5 px-2">
|
2025-08-29 10:07:59 +01:00
|
|
|
<FormGroup>
|
|
|
|
|
<label htmlFor="username">Username</label>
|
|
|
|
|
{touched.username && errors.username && (
|
|
|
|
|
<small className="absolute right-0 -top-5 text-red-500">
|
|
|
|
|
{errors.username}
|
|
|
|
|
</small>
|
|
|
|
|
)}
|
|
|
|
|
<Field
|
|
|
|
|
name="username"
|
|
|
|
|
type="text"
|
|
|
|
|
id="username"
|
|
|
|
|
placeholder="NPED username"
|
|
|
|
|
className="p-1.5 border border-gray-400 rounded-lg"
|
|
|
|
|
/>
|
|
|
|
|
</FormGroup>
|
|
|
|
|
<FormGroup>
|
|
|
|
|
<label htmlFor="password">Password</label>
|
|
|
|
|
{touched.password && errors.password && (
|
|
|
|
|
<small className="absolute right-0 -top-5 text-red-500">
|
|
|
|
|
{errors.password}
|
|
|
|
|
</small>
|
|
|
|
|
)}
|
|
|
|
|
<Field
|
|
|
|
|
name="password"
|
2025-09-16 14:20:38 +01:00
|
|
|
type={showPwd ? "text" : "password"}
|
2025-08-29 10:07:59 +01:00
|
|
|
id="password"
|
|
|
|
|
placeholder="NPED Password"
|
|
|
|
|
className="p-1.5 border border-gray-400 rounded-lg"
|
|
|
|
|
/>
|
2025-09-16 14:20:38 +01:00
|
|
|
<FontAwesomeIcon
|
|
|
|
|
type="button"
|
|
|
|
|
className="absolute right-5 end-0"
|
|
|
|
|
onClick={() => setShowPwd((s) => !s)}
|
|
|
|
|
icon={showPwd ? faEyeSlash : faEye}
|
|
|
|
|
/>
|
2025-08-29 10:07:59 +01:00
|
|
|
</FormGroup>
|
|
|
|
|
<FormGroup>
|
|
|
|
|
<label htmlFor="clientId">Client ID</label>
|
|
|
|
|
{touched.clientId && errors.clientId && (
|
|
|
|
|
<small className="absolute right-0 -top-5 text-red-500">
|
|
|
|
|
{errors.clientId}
|
|
|
|
|
</small>
|
|
|
|
|
)}
|
|
|
|
|
<Field
|
|
|
|
|
name="clientId"
|
|
|
|
|
type="text"
|
|
|
|
|
id="clientId"
|
|
|
|
|
placeholder="NPED client ID"
|
|
|
|
|
className="p-1.5 border border-gray-400 rounded-lg"
|
|
|
|
|
/>
|
|
|
|
|
</FormGroup>
|
2025-08-29 14:55:37 +01:00
|
|
|
{!user?.propClientID?.value ? (
|
|
|
|
|
<button
|
|
|
|
|
type="submit"
|
|
|
|
|
className="w-1/4 text-white bg-green-700 hover:bg-green-800 font-small rounded-lg text-sm px-2 py-2.5 hover:cursor-pointer"
|
|
|
|
|
>
|
2025-10-06 15:18:58 +01:00
|
|
|
{isSubmitting ? "Logging in..." : "Login"}
|
2025-08-29 14:55:37 +01:00
|
|
|
</button>
|
|
|
|
|
) : (
|
|
|
|
|
<button
|
|
|
|
|
type="button"
|
|
|
|
|
className="w-1/4 border-red-700 bg-red-800 text-white font-small rounded-lg text-sm px-2 py-2.5 hover:cursor-pointer"
|
|
|
|
|
onClick={handleLogoutClick}
|
|
|
|
|
>
|
|
|
|
|
Logout
|
|
|
|
|
</button>
|
|
|
|
|
)}
|
2025-08-29 10:07:59 +01:00
|
|
|
</Form>
|
|
|
|
|
)}
|
2025-08-18 16:04:03 +01:00
|
|
|
</Formik>
|
|
|
|
|
);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
export default NPEDFields;
|