import { Field, Form, Formik, useFormikContext } from "formik"; import FormGroup from "../components/FormGroup"; import { useEffect, useState } from "react"; import { faEyeSlash, faEye } from "@fortawesome/free-solid-svg-icons"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { useCameraOutput } from "../../../hooks/useCameraOutput"; import type { InitialValuesForm, InitialValuesFormErrors, } from "../../../types/types"; import { toast } from "sonner"; const ChannelFields = () => { const [showPwd, setShowPwd] = useState(false); const { backOfficeQuery, backOfficeMutation } = useCameraOutput(); const backOfficeURL = backOfficeQuery?.data?.propBackofficeURL?.value; const username = backOfficeQuery?.data?.propUsername?.value; const password = backOfficeQuery?.data?.propPassword?.value; const connectTimeoutSeconds = backOfficeQuery?.data?.propConnectTimeoutSeconds?.value; const readTimeoutSeconds = backOfficeQuery?.data?.propReadTimeoutSeconds?.value; const initialValues: InitialValuesForm = { backOfficeURL: backOfficeURL ?? "", username: username ?? "", password: password ?? "", connectTimeoutSeconds: Number(connectTimeoutSeconds), readTimeoutSeconds: Number(readTimeoutSeconds), }; const handleSubmit = (values: InitialValuesForm) => { backOfficeMutation.mutate(values); }; const ValidationToastOnce = () => { const { submitCount, isValid } = useFormikContext(); useEffect(() => { if (submitCount > 0 && !isValid) { toast.error("Check fields are filled in"); } }, [submitCount, isValid]); return null; }; const validateValues = ( values: InitialValuesForm ): InitialValuesFormErrors => { const errors: InitialValuesFormErrors = {}; const url = values.backOfficeURL?.trim(); const username = values.username?.trim(); const password = values.password?.trim(); if (!url) { errors.backOfficeURL = "Required"; } if (!username) errors.username = "Required"; if (!password) errors.password = "Required"; const read = Number(values.readTimeoutSeconds); if (!Number.isFinite(read)) { errors.readTimeoutSeconds = "Must be a number"; } else if (read < 0) { errors.readTimeoutSeconds = "Must be ≥ 0"; } const connect = Number(values.connectTimeoutSeconds); if (!Number.isFinite(connect)) { errors.connectTimeoutSeconds = "Must be a number"; } else if (connect < 0) { errors.connectTimeoutSeconds = "Must be ≥ 0"; } return errors; }; return ( {({ errors, touched }) => (
setShowPwd((s) => !s)} icon={showPwd ? faEyeSlash : faEye} />
)}
); }; export default ChannelFields;