/* eslint-disable @typescript-eslint/no-explicit-any */ import { Field, Form, useFormikContext, type FormikTouched } 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 type { BearerTypeFieldType, InitialValuesForm, InitialValuesFormErrors } from "../../../types/types"; import { toast } from "sonner"; import type { UseMutationResult, UseQueryResult } from "@tanstack/react-query"; type ChannelFieldsProps = { touched: FormikTouched; isSubmitting: boolean; backOfficeMutation: UseMutationResult; backOfficeData: UseQueryResult; handleFormSubmit: (values: BearerTypeFieldType & InitialValuesForm) => Promise; handleSubmit: () => void; }; const ChannelFields = ({ touched, isSubmitting, backOfficeMutation, handleFormSubmit, handleSubmit, }: ChannelFieldsProps) => { const [showPwd, setShowPwd] = useState(false); const { submitCount, isValid, values, setErrors, errors } = useFormikContext< BearerTypeFieldType & InitialValuesForm >(); 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; }; const onSubmit = (values: BearerTypeFieldType & InitialValuesForm) => { const validationErrors = validateValues(values); if (Object.values(validationErrors).length > 0) { setErrors(validationErrors); return; } handleFormSubmit(values); handleSubmit(); }; const ValidationToastOnce = () => { useEffect(() => { if (submitCount > 0 && !isValid) { toast.error("Check fields are filled in"); } }, []); return null; }; return (
setShowPwd((s) => !s)} icon={showPwd ? faEyeSlash : faEye} />
); }; export default ChannelFields;