387 lines
11 KiB
JavaScript
387 lines
11 KiB
JavaScript
import React from "react";
|
|
import Button from "../pageElements/Button.js";
|
|
import { FileEarmarkText } from "react-bootstrap-icons";
|
|
import TextInput from "../pageElements/TextInput";
|
|
import Tooltip from "../pageElements/Tooltip";
|
|
import { InfoCircle } from "react-bootstrap-icons";
|
|
import { toDate } from "firebase/firestore";
|
|
export const InfoCard = (props) => {
|
|
const { data, onEdit, onCancel, onSave, onChangeInput, isEditing, isBusy } =
|
|
props;
|
|
|
|
const {
|
|
caseNumber,
|
|
caption,
|
|
jurisdiction,
|
|
judge,
|
|
venue,
|
|
caseType,
|
|
trialDate,
|
|
filedDate,
|
|
contactFirstName,
|
|
contactLastName,
|
|
contactEmail,
|
|
attorneys,
|
|
parties,
|
|
} = data;
|
|
|
|
const editingContent = () => {
|
|
return (
|
|
<>
|
|
<div className="info-column">
|
|
<div className="info-row">Case caption:</div>
|
|
<TextInput
|
|
id="caption"
|
|
disa
|
|
inputClassName="info-edit-input"
|
|
value={caption}
|
|
disabled={isBusy}
|
|
onChange={(e) => onChangeInput(e, "caption")}
|
|
/>
|
|
<div className="info-row">Jurisdiction:</div>
|
|
<TextInput
|
|
id="jurisdiction"
|
|
inputClassName="info-edit-input"
|
|
value={jurisdiction}
|
|
disabled={isBusy}
|
|
onChange={(e) => onChangeInput(e, "jurisdiction")}
|
|
/>
|
|
<div className="info-row">Judge:</div>
|
|
<TextInput
|
|
id="judge"
|
|
inputClassName="info-edit-input"
|
|
value={judge}
|
|
disabled={isBusy}
|
|
onChange={(e) => onChangeInput(e, "judge")}
|
|
/>
|
|
<div className="info-row">Venue:</div>
|
|
<TextInput
|
|
id="venue"
|
|
inputClassName="info-edit-input"
|
|
value={venue}
|
|
disabled={isBusy}
|
|
onChange={(e) => onChangeInput(e, "venue")}
|
|
/>
|
|
{caseType || isEditing ? (
|
|
<>
|
|
<div className="info-row">Case type:</div>
|
|
<div>
|
|
<TextInput
|
|
id="caseType"
|
|
inputClassName="info-edit-input"
|
|
value={caseType}
|
|
disabled={isBusy}
|
|
onChange={(e) => onChangeInput(e, "caseType")}
|
|
/>
|
|
</div>
|
|
</>
|
|
) : (
|
|
<></>
|
|
)}
|
|
<div className="info-row">Trial date:</div>
|
|
<TextInput
|
|
id="trialDate"
|
|
inputClassName="info-edit-input"
|
|
value={trialDate}
|
|
disabled={isBusy}
|
|
onChange={(e) => onChangeInput(e, "trialDate")}
|
|
/>
|
|
</div>
|
|
<div className="info-column">
|
|
<div className="info-row">Index number:</div>
|
|
<TextInput
|
|
id="caseNumber"
|
|
inputClassName="info-edit-input"
|
|
value={caseNumber}
|
|
disabled={isBusy}
|
|
onChange={(e) => onChangeInput(e, "caseNumber")}
|
|
/>
|
|
<div className="info-row">Date filed:</div>
|
|
<TextInput
|
|
id="dateFiled"
|
|
inputClassName="info-edit-input"
|
|
value={filedDate}
|
|
disabled={isBusy}
|
|
onChange={(e) => onChangeInput(e, "filedDate")}
|
|
/>
|
|
<div className="info-row">
|
|
Contact:
|
|
<TextInput
|
|
id="contactFirst"
|
|
inputClassName="info-edit-input"
|
|
value={contactFirstName}
|
|
disabled={isBusy}
|
|
onChange={(e) => onChangeInput(e, "contactFirstName")}
|
|
/>
|
|
<TextInput
|
|
id="contactLast"
|
|
inputClassName="info-edit-input"
|
|
value={contactLastName}
|
|
disabled={isBusy}
|
|
onChange={(e) => onChangeInput(e, "contactLastName")}
|
|
/>
|
|
</div>
|
|
<div className="info-row">Contact email:</div>
|
|
<TextInput
|
|
id="contactEmail"
|
|
inputClassName="info-edit-input"
|
|
value={contactEmail}
|
|
disabled={isBusy}
|
|
onChange={(e) => onChangeInput(e, "contactEmail")}
|
|
/>
|
|
<div className="info-row">Lead attorneys:</div>
|
|
<TextInput
|
|
id="leadAttorneys"
|
|
inputClassName="info-edit-input"
|
|
value={attorneys}
|
|
disabled={isBusy}
|
|
onChange={(e) => onChangeInput(e, "attorneys")}
|
|
/>
|
|
</div>
|
|
</>
|
|
);
|
|
};
|
|
|
|
const infoContent = () => {
|
|
return (
|
|
<>
|
|
<div className="info-column">
|
|
<div className="info-row">
|
|
Case caption: <p className="info-text"> {caption}</p>
|
|
</div>
|
|
<div className="info-row">
|
|
Jurisdiction: <p className="info-text"> {jurisdiction}</p>
|
|
</div>
|
|
<div className="info-row">
|
|
Judge: <p className="info-text"> {judge}</p>
|
|
</div>
|
|
<div className="info-row">
|
|
Venue: <p className="info-text"> {venue}</p>
|
|
</div>
|
|
{caseType ? (
|
|
<div className="info-row">
|
|
Case type: <p className="info-text"> {caseType}</p>
|
|
</div>
|
|
) : (
|
|
<></>
|
|
)}
|
|
<div className="info-row">
|
|
Trial date: <p className="info-text"> {trialDate}</p>
|
|
</div>
|
|
</div>
|
|
<div className="info-column">
|
|
<div className="info-row">
|
|
Index number: <p className="info-text"> {caseNumber}</p>
|
|
</div>
|
|
<div className="info-row">
|
|
Date filed: <p className="info-text"> {filedDate}</p>
|
|
</div>
|
|
<div className="info-row">
|
|
Contact:
|
|
<p className="info-text">
|
|
{contactFirstName} {contactLastName}
|
|
</p>
|
|
</div>
|
|
<div className="info-row">
|
|
Contact email: <p>{contactEmail}</p>
|
|
</div>
|
|
<div className="info-row">
|
|
Lead attorneys: <p className="info-text"> {attorneys}</p>
|
|
</div>
|
|
</div>
|
|
</>
|
|
);
|
|
};
|
|
|
|
return (
|
|
<div className="info-card-outer">
|
|
<div className="info-upper-wrapper">
|
|
{isEditing ? editingContent() : infoContent()}
|
|
</div>
|
|
<div className="info-button-wrapper">
|
|
{isEditing ? (
|
|
<>
|
|
<Button
|
|
onClick={() => onSave()}
|
|
labelText="Save"
|
|
className="btn primary-button save-button"
|
|
disabled={isBusy}
|
|
/>
|
|
<Button
|
|
onClick={() => onCancel()}
|
|
labelText="Cancel"
|
|
className="btn primary-button cancel-button"
|
|
disabled={isBusy}
|
|
/>
|
|
</>
|
|
) : (
|
|
<Button
|
|
onClick={() => onEdit()}
|
|
labelText="Edit"
|
|
className="btn primary-button edit-button"
|
|
disabled={isBusy}
|
|
/>
|
|
)}
|
|
</div>
|
|
</div>
|
|
);
|
|
};
|
|
|
|
export const CaseCard = (props) => {
|
|
const {
|
|
caption,
|
|
captionTwo,
|
|
caseNumber,
|
|
filedDate,
|
|
jurisdiction,
|
|
caseId,
|
|
onClick,
|
|
labelText,
|
|
} = props;
|
|
|
|
return (
|
|
<div className="linkcard-container">
|
|
<div className="card-col1">
|
|
{caption} v. {captionTwo}
|
|
</div>
|
|
<div className="card-col2">{jurisdiction}</div>
|
|
<div className="card-col3">
|
|
<p className="card-text">{`Filed: ${filedDate}`}</p>
|
|
</div>
|
|
<div className="card-col4">{caseNumber}</div>
|
|
<div className="card-viewButton-container">
|
|
<Button
|
|
onClick={() => onClick(caseId)}
|
|
labelText={labelText}
|
|
className="btn btn-primary view-button"
|
|
/>
|
|
</div>
|
|
</div>
|
|
);
|
|
};
|
|
|
|
export const DocCard = (props) => {
|
|
const {
|
|
title,
|
|
parentCaseNumber,
|
|
parentCaseName,
|
|
parentCaseId,
|
|
documentId,
|
|
dateServed,
|
|
docType,
|
|
displayDeleteButton,
|
|
handleNavigate,
|
|
responseGenerations,
|
|
confirmDelete,
|
|
createdAt,
|
|
} = props;
|
|
const createdAtTime = createdAt?.seconds
|
|
? createdAt?.seconds
|
|
: new Date().getTime();
|
|
const now = new Date().getTime();
|
|
const uploadedAt = new Date(createdAtTime * 1000);
|
|
const isReportable = Math.round((now - uploadedAt) / 60 / 1000) > 15;
|
|
|
|
const disabled = docType ? false : true;
|
|
const tooltipText =
|
|
"Parsing is taking a bit longer than usual. This usually resolves within 15 minutes. If it does not, click “report” and support will address the issue within 24 hours.";
|
|
const pendingText =
|
|
"Parsing in process, please be patient. This should resolve within 10 minutes.";
|
|
const report = (documentId, docType) => {
|
|
//console.log("report documentId, docType", documentId, docType);
|
|
};
|
|
|
|
const documentTitle =
|
|
docType === "interrogatories-out"
|
|
? "Outbound requests"
|
|
: "Discovery responses";
|
|
|
|
const isOutbound = docType === "interrogatories-out";
|
|
const buttonText =
|
|
docType === "interrogatories" && responseGenerations > 0
|
|
? "Edit Request"
|
|
: docType === "interrogatories-out"
|
|
? "Edit Response"
|
|
: "Generate Response";
|
|
return (
|
|
<div className="doc-card-container">
|
|
<div className="doc-card-input">
|
|
<div className="card-col-icon">
|
|
<FileEarmarkText className="doc-file-icon" size="22px" />
|
|
</div>
|
|
<div className="doc-col2">
|
|
{documentTitle}{" "}
|
|
{disabled && isReportable ? <Tooltip text={tooltipText} /> : <></>}
|
|
{disabled && !isReportable ? (
|
|
<Tooltip text={pendingText} iconStyle="clock" />
|
|
) : (
|
|
<></>
|
|
)}
|
|
</div>
|
|
{dateServed ? (
|
|
<div className="doc-col3">Served: {dateServed}</div>
|
|
) : (
|
|
<></>
|
|
)}
|
|
<div className="doc-col4">
|
|
<div className="jurisdiction-box">{parentCaseName}</div>
|
|
</div>
|
|
{disabled && isReportable ? (
|
|
<div className="doc-col5">
|
|
<Button
|
|
labelText="Report"
|
|
className="btn btn-primary report-button"
|
|
onClick={() => report(documentId, docType)}
|
|
/>
|
|
</div>
|
|
) : (
|
|
<div className="doc-col5">{parentCaseNumber}</div>
|
|
)}
|
|
<div className="doc-col6">
|
|
{displayDeleteButton ? (
|
|
<Button
|
|
onClick={() =>
|
|
confirmDelete(documentId, docType, responseGenerations)
|
|
}
|
|
labelText="Delete"
|
|
className="btn btn-primary view-button delete-one"
|
|
/>
|
|
) : (
|
|
<></>
|
|
)}
|
|
</div>
|
|
</div>
|
|
<div className="doccard-button-wrapper">
|
|
<Button
|
|
disabled={disabled}
|
|
className={"primary-button pt-2 pb-2 gen-button"}
|
|
onClick={() =>
|
|
documentId &&
|
|
handleNavigate(
|
|
documentId,
|
|
responseGenerations,
|
|
parentCaseId,
|
|
docType
|
|
)
|
|
}
|
|
labelText={buttonText}
|
|
/>
|
|
</div>
|
|
</div>
|
|
);
|
|
};
|
|
|
|
/*
|
|
|
|
{disabled ? (
|
|
isReportable ? (
|
|
<Tooltip text={tooltipText} />
|
|
) : (
|
|
<Tooltip text={pendingText} iconStyle="clock" />
|
|
)
|
|
) : (
|
|
<></>
|
|
)}
|
|
|
|
*/
|