Files
Mav-Mobile-UI/src/components/SettingForms/NPED/NPEDFields.tsx

122 lines
3.6 KiB
TypeScript
Raw Normal View History

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-08-18 16:04:03 +01:00
const NPEDFields = () => {
2025-08-29 14:55:37 +01:00
const { signIn, user, signOut } = useNPEDAuth();
const initialValues = user
? {
username: user.propUsername.value,
password: "",
clientId: user.propClientID.value,
frontId: "NPED",
rearId: "NPED",
}
: {
username: "",
password: "",
clientId: "",
frontId: "NPED",
rearId: "NPED",
};
2025-08-18 16:04:03 +01:00
const handleSubmit = (values: NPEDFieldType) => {
2025-08-29 10:07:59 +01:00
const valuesToSend = {
...values,
};
signIn(valuesToSend);
toast.success("Signed into NPED Successfully");
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();
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}
>
{({ errors, touched }) => (
<Form className="flex flex-col space-y-5">
<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"
type="password"
id="password"
placeholder="NPED Password"
className="p-1.5 border border-gray-400 rounded-lg"
/>
</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"
>
Login
</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;