0% found this document useful (0 votes)
15 views6 pages

Create Housing Expense Form Guide

The document outlines a React component for creating a housing expense form using Formik for form management. It includes fields for member information, expense details, and document uploads, with validation and initial values provided. The form allows users to submit expense requests and manage related documents efficiently.

Uploaded by

raifaysal2
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
15 views6 pages

Create Housing Expense Form Guide

The document outlines a React component for creating a housing expense form using Formik for form management. It includes fields for member information, expense details, and document uploads, with validation and initial values provided. The form allows users to submit expense requests and manage related documents efficiently.

Uploaded by

raifaysal2
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd

import { Formik, FieldArray } from "formik";

import Input from "components/common/input";


import DateInput from "components/common/date-picker";
import SelectComponent from "components/common/select";
import { Plus } from "phosphor-react";
import {
expenseRequestInitialValues,
expenseRequestValidationSchema,
} from "../../constants/expenseRequest";

const CreateHousingExpenseForm = ({ selectedMember = {} }) => {


const renderUploadBox = (fieldName, labelText, setFieldValue) => (
<div className="mb-4">
<label className="fw-semibold mb-2 d-block">{labelText}</label>
<div className="border border-warning rounded p-4 text-center bg-light h-
100">
<div className="mb-2">
<i className="bi bi-upload" style={{ fontSize: "24px" }}></i>
</div>
<div>
<span>Drag & drop or </span>
<label className="text-warning fw-bold" style={{ cursor: "pointer" }}>
choose file
<input
type="file"
hidden
onChange={(e) =>
setFieldValue(fieldName, [Link][0])
}
/>
</label>
<div className="text-muted small mt-1">(Max. 5 MB)</div>
</div>
</div>
</div>
);

return (
<Formik
initialValues={{
...expenseRequestInitialValues,
member_name: selectedMember.first_name || "",
date_of_birth: selectedMember.date_of_birth || "",
cin: [Link] || "",
health_plan: selectedMember.health_plan || "",
county: [Link] || "",
department_code: selectedMember.department_code || "",
case_manager: selectedMember.case_manager || "",
landlord_name: selectedMember.landlord_name || "",
}}
validationSchema={expenseRequestValidationSchema}
onSubmit={(values) => {
[Link]("Form Submitted:", values);
}}
>
{({ values, handleChange, handleSubmit, setFieldValue }) => (
<form onSubmit={handleSubmit}>
<div className="row bg-white">
<h4 className="my-4">Member Information</h4>
<div className="col-sm-6">
<Input
handleChange={handleChange}
placeholder="e.g. John Doe"
type="text"
label="Member Name"
name="member_name"
value={values.member_name}
disabled={!!selectedMember.first_name}
/>
</div>

<div className="col-sm-6">
<DateInput
label="Date of Birth"
name="date_of_birth"
placeholder="Select Date of Birth"
value={values.date_of_birth}
handleChange={(date) => setFieldValue("date_of_birth", date)}
disabled={!!selectedMember.date_of_birth}
/>
</div>

<div className="col-sm-6">
<Input
handleChange={handleChange}
placeholder="e.g. CIN7438201"
type="text"
label="CIN"
name="cin"
value={[Link]}
disabled={!![Link]}
/>
</div>

<div className="col-sm-6">
<SelectComponent
name="health_plan"
label="Health Plan"
options={[
{ label: "Plan A", value: "Plan A" },
{ label: "Plan B", value: "Plan B" },
]}
handleChange={(option) =>
setFieldValue("health_plan", [Link])
}
selectedValue={
values.health_plan
? { label: values.health_plan, value: values.health_plan }
: null
}
isDisabled={!!selectedMember.health_plan}
/>
</div>

<div className="col-sm-6">
<Input
handleChange={handleChange}
placeholder="e.g. Chicago"
type="text"
label="County"
name="county"
value={[Link]}
disabled={!![Link]}
/>
</div>

<div className="col-sm-6">
<Input
handleChange={handleChange}
placeholder="e.g. DC-101"
type="text"
label="Department Code"
name="department_code"
value={values.department_code}
disabled={!!selectedMember.department_code}
/>
</div>

<div className="col-sm-6">
<SelectComponent
name="case_manager"
label="Case Manager"
options={[
{ label: "Manager A", value: "Manager A" },
{ label: "Manager B", value: "Manager B" },
]}
handleChange={(option) =>
setFieldValue("case_manager", [Link])
}
selectedValue={
values.case_manager
? { label: values.case_manager, value: values.case_manager }
: null
}
isDisabled={!!selectedMember.case_manager}
/>
</div>

<div className="col-sm-6">
<Input
handleChange={handleChange}
placeholder="e.g. Jane Smith"
type="text"
label="Landlord Name"
name="landlord_name"
value={values.landlord_name}
disabled={!!selectedMember.landlord_name}
/>
</div>

<hr className="mt-4" />


<h4 className="my-4">Expense Information</h4>

<FieldArray name="expenses">
{() => (
<>
<div className="col-sm-6">
<Input
handleChange={handleChange}
name="expenses[0].authorization_no"
label="Authorization No"
value={[Link][0].authorization_no}
placeholder="Enter"
/>
</div>

<div className="col-sm-6">
<Input
handleChange={handleChange}
name="expenses[0].payment_method"
label="Payment Method"
value={[Link][0].payment_method}
placeholder="Enter"
/>
</div>

<div className="col-sm-6">
<Input
handleChange={handleChange}
placeholder="e.g. 100"
type="text"
label="Authorization Amount"
name="expenses[0].authorization_amount"
value={[Link][0].authorization_amount}
/>
</div>

<div className="col-sm-6">
<DateInput
label="Start Date"
name="expenses[0].start_date"
value={[Link][0].start_date}
handleChange={(date) =>
setFieldValue("expenses[0].start_date", date)
}
placeholder="Select"
/>
</div>

<div className="col-sm-12">
<DateInput
label="End Date"
name="expenses[0].end_date"
value={[Link][0].end_date}
handleChange={(date) =>
setFieldValue("expenses[0].end_date", date)
}
placeholder="Select"
/>
</div>
</>
)}
</FieldArray>

<div className="col-sm-12">
<button
className="secondary-btn w-100 mt-4"
type="button"
onClick={() => [Link]("Add Expense clicked")}
>
<Plus size={18} /> Add Expense
</button>
</div>

<hr className="mt-4" />


<h4 className="my-4">Upload Documents</h4>

<div className="col-sm-6">
{renderUploadBox("w9", "Upload W-9", setFieldValue)}
</div>
<div className="col-sm-6">
{renderUploadBox(
"lease_agreement",
"Upload Lease Agreement",
setFieldValue
)}
</div>
<div className="col-sm-6">
{renderUploadBox(
"health_plan_authorization",
"Upload Authorization from Health Plan",
setFieldValue
)}
</div>
<div className="col-sm-6">
{renderUploadBox("check_request", "Check Request", setFieldValue)}
</div>

<div className="col-sm-12 mt-5">


{renderUploadBox(
"other_documents",
"Other Documents",
setFieldValue
)}
</div>

<hr className="mt-4" />

<div className="col-sm-6">
<Input
handleChange={handleChange}
placeholder="Write any additional comments"
type="text"
label="Additional Comments"
name="comments"
value={[Link]}
/>
</div>

<div className="col-sm-6">
<input
className="primary-btn w-100"
type="submit"
name="submit"
value="Create Request"
style={{ marginTop: "43px" }}
/>
</div>
</div>
</form>
)}
</Formik>
);
};

export default CreateHousingExpenseForm;

You might also like