import { useEffect, useState } from "react"; import { collection, setDoc, doc } from "firebase/firestore"; import { db, auth } from "../../firebase"; import Button from "../../pageElements/Button"; import { v4 as uuidv4 } from "uuid"; import arrow from "../../Assets/Images/Arrow.png"; import { useNavigate } from "react-router-dom"; import ConfirmModal from "../Modals/ConfirmModal"; import { createUserWithEmailAndPassword } from "firebase/auth"; import { stateDataValues } from "../../Constants/Fields/SignupFields"; import "../../styles/homepage.scss"; import LoadingSpinner from "../../pageElements/LoadingSpinner"; const HomePage = () => { const navigate = useNavigate(); const [showPromoModal, setShowPromoModal] = useState(false); const [isBusy, setIsBusy] = useState(false); const [notice, setNotice] = useState(""); const apiUrl = process.env.NODE_ENV === "development" ? process.env.REACT_APP_API_DEV : process.env.REACT_APP_API_PROD; async function saveUserData( authId, dataValues, email, password, customerId, subscriptionCreated, subscriptionPeriodStart, subscriptionPeriodEnd, subscriptionId, isPromotionalMebership = true, docsAllowedPeMonth = 1 ) { if (!email || !password || !dataValues[0]) { return; } const appUserId = uuidv4(); const firmId = uuidv4(); const fbAuthUid = authId; const tpe = password; let plan = "promo plan"; let docsAllowedPerMonth; docsAllowedPerMonth = 1; subscriptionId = uuidv4(); plan = plan; const docsGenerated = 0; const { firstName, lastName, firm, telephone, streetAddress, city, state, zipCode, barNumber, practiceArea, } = dataValues[0]; const userState = stateDataValues.filter((value) => { if (value.name === state) return value; }); const tempData = { docsAllowedPerMonth, docsGenerated, appUserId, fbAuthUid, firmId, firstName, lastName, firm, telephone, streetAddress, city, state: userState, zipCode, barNumber, practiceArea, email, tpe: tpe, isPromotionalMebership, isPromotionalFirstLogin: true, customerId: customerId, subscriptionId: subscriptionId, subscriptionPlan: "flordia-spring-promo-plan", subscriptionCreated: subscriptionCreated, subscriptionPeriodStart: subscriptionPeriodStart, subscriptionPeriodEnd: subscriptionPeriodEnd, }; function scrubUndef(obj) { Object.keys(obj).forEach(function (key) { if (obj[key] === undefined) { obj[key] = "---"; } }); console.log("new object", obj); return obj; } const userData = scrubUndef(tempData); try { const usersRef = collection(db, "users"); const res = await setDoc(doc(usersRef, fbAuthUid), userData); return res; } catch (error) { console.log(`Error saving new user to db: ${error}`); } } async function getFocusData(code) { console.log("code in getFocusData", code); try { const response = await fetch(`${apiUrl}/v1/get-focused-data/${code}`, { method: "GET", }); const res = await response.json(); console.log("res in getFocusData", res); return res; } catch (err) { console.log("Error in get rqst:", err); } } async function handleProcessPromoSubscription(code) { console.log("code in handleProcessPromoSubscription", code); setIsBusy(true); setShowPromoModal(false); if (!code) { return; } const userData = await getFocusData(code); console.log("userData in returned from getFocusData", userData); const email = userData[0].email; const password = userData[0].mspall; if (email && password) { handlePromoSignup(userData, email, password); } else { setIsBusy(false); setShowPromoModal(false); } } async function handlePromoSignup(dataValues, email, password) { if (!email || !password) { return; } try { const customerId = `${uuidv4()}-florida-spring-promo`; const today = new Date(); const subscriptionCreated = today; const subscriptionPeriodStart = today; const subscriptionPeriodEnd = today; const subscriptionId = uuidv4(); const userCredential = await createUserWithEmailAndPassword( auth, email, password ); const user = userCredential.user; dataValues = { ...dataValues }; const isPromotionalMebership = true; console.log("userCredential", userCredential); const res = await saveUserData( user.uid, dataValues, email, password, customerId, subscriptionCreated, subscriptionPeriodStart, subscriptionPeriodEnd, subscriptionId, isPromotionalMebership ); console.log("res from saveUserData in handlePromoSignup", res); setIsBusy(false); navigate("/dashboard"); } catch (error) { console.log("Error handling request", error, error.message); setIsBusy(false); setNotice("Sorry, something went wrong. Please try again."); } } const handleTryItButton = () => { setShowPromoModal(true); }; const handleLogin = () => { navigate("/login"); }; const handleCancelModal = () => { setShowPromoModal(!showPromoModal); navigate("/signup"); }; const handleDemo = () => { const supReq = null; navigate("/requestpage/supReq"); }; const homeContent = (
Discovery requests done dramatically fast – discovery responses ready in minutes.
Reclaim hours every week. Spend time growing your practice, or just get home by dinner.
Legal tech developed by people that understand what you need.
Novodraft understands the demands on your time. For example, that discovery request on your desk. With a few clicks, and Novodraft's AI assistant on the task, you can draft a ready-to-serve response in minutes. It's as easy as uploading a .pdf file.
Novodraft cuts through a mire of rote tasks, but does much more than automate.
Intellidraft AI technology powers persuasive arguments and boosts bland, boilerplate objections. Configurable for level of authoritative citation and for infering factual context from pleadings and briefs. Use it to augment your drafting as much or as little as you prefer.
Created by litigators to give you an edge.
Generate interrogatories and requests for production/admissions leveraging AI.
Edit or add special language with tags. Concise yet comprehensive demands, done in minutes.
Use Novodraft AI to quickly draft responses including compelling arguments about what you withhold from disclosure. Finish in minutes with a downloadable .docx file.
Your dashboard displays important deadlines, alerts, and can be configured to auto-draft documents with reminders for tasks such as service or hearings.