Mhermank

Untitled

Mar 16th, 2021
1,161
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import React, { useEffect, useState } from "react";
  2.  
  3. import dayjs from "dayjs";
  4. import { Button, Tag } from "carbon-components-react";
  5. import { CaretDown16, CaretUp16 } from "@carbon/icons-react";
  6. import capitalize from "lodash-es/capitalize";
  7.  
  8. import { useCurrentPatient } from "@openmrs/esm-react-utils";
  9. import { useTranslation } from "react-i18next";
  10.  
  11. import ContactDetails from "../contact-details/contact-details.component";
  12. import { OverflowMenu, OverflowMenuItem } from "carbon-components-react";
  13.  
  14. import placeholder from "../../assets/placeholder.png";
  15. import { age } from "../contact-details/age-helpers";
  16. import styles from "./patient-banner.scss";
  17. import { getStartedVisit, visitItem, visitMode } from "../visit/visit-utils";
  18. import { forEach } from "lodash-es";
  19. import { windowToggle } from "rxjs/operators";
  20.  
  21. export default function PatientBanner() {
  22.   const [showContactDetails, setShowContactDetails] = useState(false);
  23.   const [menuOpen, setMenuOpen] = useState(false);
  24.   const [isLoadingPatient, patient, , patientErr] = useCurrentPatient();
  25.   const [hasActiveVisit, setActiveVisit] = useState(false);
  26.   const { t } = useTranslation();
  27.   const toggleContactDetails = () => {
  28.     setShowContactDetails(!showContactDetails);
  29.   };
  30.  
  31.   const _actionButtonMenu = () => {
  32.   <OverflowMenu>
  33.         <OverflowMenuItem itemText="Start Visit" />
  34.         <OverflowMenuItem itemText="Edit Patient Details" />
  35.         <OverflowMenuItem itemText="Mark Patient Deceased" />
  36.         <OverflowMenuItem itemText="Add Past Visit" />
  37.   </OverflowMenu>
  38. }
  39.  
  40.   useEffect(() => {
  41.     const sub = getStartedVisit.subscribe((visit?: visitItem) => {
  42.       setActiveVisit(visit !== null);
  43.     });
  44.  
  45.     return () => sub.unsubscribe();
  46.   }, []);
  47.  
  48.   return (
  49.     <>
  50.       {!isLoadingPatient && !patientErr && (
  51.         <div className={styles.container}>
  52.           <div className={styles.patientBanner}>
  53.             <div className={styles.patientAvatar}>
  54.               <img src={placeholder} alt="Patient avatar" />
  55.             </div>
  56.             <div className={styles.patientInfo}>
  57.               <div className={(styles.row, styles.nameRow)}>
  58.                 <span className={styles.patientName}>{getPatientNames()}</span>
  59.                 {hasActiveVisit && (
  60.                   <Tag type="blue">{t("Active Visit", "Active Visit")}</Tag>
  61.                 )}
  62.                  <Button
  63.                   kind="ghost"
  64.                   renderIcon={_actionButtonMenu}
  65.                   iconDescription="show action details"
  66.                   onClick={showActionDetails}
  67.                 >
  68.                   Actions
  69.                 </Button>
  70.               </div>
  71.               <div className={styles.row}>
  72.                 <div className={styles.demographics}>
  73.                   <span>{capitalize(patient.gender)}</span> &middot;{" "}
  74.                   <span>{age(patient.birthDate)}</span> &middot;{" "}
  75.                   <span>
  76.                     {dayjs(patient.birthDate).format("DD - MMM - YYYY")}
  77.                   </span>
  78.                 </div>
  79.               </div>
  80.               <div className={styles.row}>
  81.                 <span className={styles.identifiers}>
  82.                   {getPatientIdentifiers()}
  83.                 </span>
  84.                 <Button
  85.                   kind="ghost"
  86.                   renderIcon={showContactDetails ? CaretUp16 : CaretDown16}
  87.                   iconDescription="Toggle contact details"
  88.                   onClick={toggleContactDetails}
  89.                 >
  90.                   {showContactDetails
  91.                     ? "Hide Contact Details"
  92.                     : "Show Contact Details"}
  93.                 </Button>
  94.               </div>
  95.             </div>
  96.           </div>
  97.           {showContactDetails && (
  98.             <ContactDetails
  99.               address={patient.address}
  100.               telecom={patient.telecom}
  101.               patientId={patient.id}
  102.             />
  103.           )}
  104.         </div>
  105.       )}
  106.     </>
  107.   );
  108.  
  109.   function getPatientNames() {
  110.     return `${patient.name[0].given.join(" ")} ${patient.name[0].family}`;
  111.   }
  112.  
  113.   function getPatientIdentifiers() {
  114.     return patient.identifier.map(i => i.value);
  115.   }
  116. }
  117.  
Advertisement
Add Comment
Please, Sign In to add comment