"use client" // React and Formik imports import React, { useState } from "react"; import { Form, Formik } from "formik"; import axios from "axios"; // UI components and utilities import { Button } from "./Button"; import ClientField from "./ClientField"; import FileInput from "./FileInput"; import RadioGroup from "./RadioGroup"; import SelectInput from "./SelectInput"; import StatusField from "./StatusField"; import ToggleField from "./ToggleField"; // Data and schema and types import { FormValues } from "./types"; import { data } from "./data"; import { initialValues, validationSchema } from "./formSchemas"; // Icons import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { faXmark } from "@fortawesome/free-solid-svg-icons"; /** * FormComponent: Main form component for document upload. * * This component handles the document upload form, including input fields for document details, * file upload, and form submission. It uses Formik for form state management and validation, * and Axios for submission to a backend endpoint. */ const FormComponent: React.FC = () => { // State to track if the form has been successfully submitted const [formSubmitted, setFormSubmitted] = useState(false); // Function to handle form submission const submitForm = (values: FormValues) => { //TODO implement form submission return axios.post( `/api/submitForm`, { submissionData: values, }, { // options headers: { "Content-Type": "application/json", }, } ) } return ( <> {/* Formik setup for handling form state, validation, and submission */} { //console.log("Form values:", values); // Log form values on submit try { //await submitForm(values) setFormSubmitted(true) } catch (error) { console.error("Error submitting form:", error) } finally { setSubmitting(false) } }} > {(formik) => { //console.log("Form errors:", formik.errors); // Log form errors on every render //console.log("Form values:", formik.values); // Log current form values on every render return (
{/* Close button - allows resetting the form to initial state */} {/* Title - provides context for the form's purpose */}

Document Upload

{/* Form layout - organizes the form fields into logical sections */}
{/* Left Column */}
{data.importNames.map((option) => ( ))} Tolerance Window:
{/* Right Column */}
{/* Form Footer - contains actions for form submission and cancellation */}

Data in the import file is correct. Please press Continue to import.

{/* Success message - Display a success message if the form has been submitted successfully */} {formSubmitted &&
Success
}
) } }
) } export default FormComponent