All files / publisher-admin/pages/Collaboration Invites.tsx

90.9% Statements 10/11
100% Branches 0/0
50% Functions 1/2
90.9% Lines 10/11

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85                            7x   7x 7x 7x 7x       7x   7x             7x             7x               7x                                                                          
import { useRecoilValue } from "recoil";
import { MainTable } from "@canonical/react-components";
import { useParams } from "react-router-dom";
 
import { getInvitesByStatus, buildInviteTableRows } from "../../utils";
 
import { filteredInvitesListState } from "../../state/selectors";
 
type Props = {
  setShowRevokeModal: (showRevokeModal: boolean) => void;
  setShowReopenModal: (showReopenModal: boolean) => void;
};
 
function Invites({ setShowRevokeModal, setShowReopenModal }: Props) {
  const invitesList = useRecoilValue(filteredInvitesListState);
 
  const pendingInvites = getInvitesByStatus(invitesList, "pending");
  const expiredInvites = getInvitesByStatus(invitesList, "expired");
  const revokedInvites = getInvitesByStatus(invitesList, "revoked");
  const uniqueRevokedInvites = Array.from(
    new Map(revokedInvites.map((invite) => [invite.email, invite])).values()
  );
 
  const { packageName } = useParams();
 
  const pendingInvitesTableRows = buildInviteTableRows(
    pendingInvites,
    "Pending",
    packageName!,
    setShowRevokeModal,
    setShowReopenModal
  );
  const expiredInvitesTableRows = buildInviteTableRows(
    expiredInvites,
    "Expired",
    packageName!,
    setShowRevokeModal,
    setShowReopenModal
  );
  const revokedInvitesTableRows = buildInviteTableRows(
    uniqueRevokedInvites,
    "Revoked",
    packageName!,
    setShowRevokeModal,
    setShowReopenModal
  );
 
  return (
    <MainTable
      responsive
      headers={[
        {
          content: "Status",
          heading: "Status",
        },
        {
          content: "Email",
          heading: "Email",
        },
        {
          content: "Sent by",
          heading: "Sent by",
        },
        {
          content: "Expires",
        },
        {
          content: "",
          heading: "Revoke",
        },
        {
          content: "",
          heading: "Actions",
        },
      ]}
      rows={pendingInvitesTableRows.concat(
        expiredInvitesTableRows,
        revokedInvitesTableRows
      )}
    />
  );
}
 
export default Invites;