diff --git a/src/Components/Case/CaseTypePage.js b/src/Components/Case/CaseTypePage.js index 308680c..9a49bcd 100644 --- a/src/Components/Case/CaseTypePage.js +++ b/src/Components/Case/CaseTypePage.js @@ -17,13 +17,18 @@ const CaseTypePage = () => { const { group } = appState; const appUserId = group ? group.appUserId : null; const [subCase, setSubCase] = useState(); - const [email, setEmail] = useState(""); + const [contactEmail, setContactEmail] = useState(""); const [contactName, setContactName] = useState(""); const [billingCode, setBillingCode] = useState(""); const [leadAttorney, setLeadAttorney] = useState(""); - const [radioValue, setRadioValue] = useState(); + const [radioValue, setRadioValue] = useState(""); const [selectedCaseTags, setSelectedCaseTags] = useState([]); const [isBusy, setIsBusy] = useState(false); + + const [contactEmailError, setContactEmailError] = useState(""); + const [leadAttorneyError, setLeadAttorneyError] = useState(""); + const [caseTypeError, setCaseTypeError] = useState(false); + const [clientPositionError, setClientPositionError] = useState(); const typeaheadRef = useRef(); function getCase() { @@ -43,10 +48,20 @@ const CaseTypePage = () => { useEffect(getCase, [caseId, appUserId]); const setSelectedTag = (item) => { - console.log("item in setSelectedTag ---------------------->", item); - const temp = [...selectedCaseTags, item.tagName]; - setSelectedCaseTags(temp); - console.log("selectedCaseTags", selectedCaseTags); + if (selectedCaseTags.length < 5) { + const temp = [...selectedCaseTags, item.tagName]; + setSelectedCaseTags(temp); + } + }; + + const handleTagClick = (arg) => { + const temp = selectedCaseTags; + const foo = temp.filter((tag) => { + if (tag != arg) { + return tag; + } + }); + setSelectedCaseTags(foo); }; const radioOptions = [ @@ -55,30 +70,78 @@ const CaseTypePage = () => { ]; const handleSetRadioValue = (e) => { - console.log("e", e); setRadioValue(e.value); }; - const handleSave = () => { - console.log("handleSave"); + const validateEmail = (email) => { + const result = /.+@.+\.[A-Za-z]+$/.test(email); + return result; + }; + + const validateInput = () => { + const leadAttorneyValid = leadAttorney.length > 2; + const contactEmailValid = validateEmail(contactEmail); + const caseTypeValid = selectedCaseTags.length > 0; + const clientPositionValid = + radioValue === "Defendant" || radioValue === "Plaintiff"; + + const allValid = + leadAttorneyValid && + contactEmailValid && + caseTypeValid && + clientPositionValid; + + if (!leadAttorneyValid) { + setLeadAttorneyError("Field cannot be left blank"); + } + if (!contactEmailValid) { + setContactEmailError("Field cannot be left blank"); + } + if (!caseTypeValid) { + setCaseTypeError("Field cannot be left blank"); + } + if (!clientPositionValid) { + setClientPositionError("You must make a selection"); + } + + return allValid; }; async function saveCaseData() { if (isBusy) { return; } - const dataValues = { - leadAttorney: leadAttorney, - }; - setIsBusy(true); - try { - await updateDoc(doc(db, "cases", caseId), dataValues); - } catch (err) { - console.log("Error updating case:", err); + const valid = validateInput(); + + if (valid) { + const recordTags = []; + selectedCaseTags.forEach((tag) => { + parsedTags.forEach((item) => { + if (item.tagName.toLowerCase() === tag.toLowerCase()) { + recordTags.push(item); + } + }); + }); + + const dataValues = { + leadAttorney: leadAttorney, + contactEmail: contactEmail, + contactName: contactName, + clientPosition: radioValue, + caseTags: recordTags, + }; + setIsBusy(true); + try { + await updateDoc(doc(db, "cases", caseId), dataValues); + setIsBusy(false); + navigate(`/casedetails/${caseId}`); + } catch (err) { + console.log("Error updating case:", err); + setIsBusy(false); + navigate(`/dashboard`); + } } - - setIsBusy(false); } return ( @@ -100,6 +163,13 @@ const CaseTypePage = () => { value={leadAttorney} onChange={(e) => setLeadAttorney(e.target.value)} > +
+ {leadAttorneyError ? ( +
{leadAttorneyError}
+ ) : ( + <> + )} +
{ className="form-control" id="emailInput" placeholder="Contact Email" - value={email} - onChange={(e) => setEmail(e.target.value)} + value={contactEmail} + onChange={(e) => setContactEmail(e.target.value)} > + {contactEmailError ? ( +
{contactEmailError}
+ ) : ( + <> + )}
@@ -143,7 +218,7 @@ const CaseTypePage = () => { options={parsedTags} minLength={1} ref={typeaheadRef} - placeholder="Case Type - start typing to search" + placeholder="Case Type - type to search, tab/click to select" onChange={(selected) => { let item = null; for (const currentItem of selected) { @@ -153,12 +228,20 @@ const CaseTypePage = () => { typeaheadRef.current.clear(); }} /> + {caseTypeError ? ( +
{caseTypeError}
+ ) : ( + <> + )}
{selectedCaseTags.map((tag, i) => (
-
-
x
+
handleTagClick(tag)} + > +
x
{tag}
@@ -175,9 +258,15 @@ const CaseTypePage = () => { onClick={(e) => handleSetRadioValue(e, "clientPosition")} />
+ {clientPositionError ? ( +
{clientPositionError}
+ ) : ( + <> + )}
-
+ +