All files / react-app/src/components/Profile/WithdrawRoleModal index.tsx

100% Statements 15/15
86.66% Branches 13/15
100% Functions 3/3
100% Lines 10/10

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                                                                              105x 1x   1x                                         105x 27x 27x 5x 2x 1x     27x                  
import { getApprovingRole, newUserRoleMap } from "shared-utils";
 
import { ConfirmationDialog } from "@/components/ConfirmationDialog";
import { SelfRevokeAcess } from "@/features";
import { convertStateAbbrToFullName } from "@/utils";
 
interface ModalProps {
  open: boolean;
  selfRevokeRole: SelfRevokeAcess | null;
  onAccept: () => void;
  onCancel: () => void;
}
 
const LegacyWithdrawRoleModal = ({ open, selfRevokeRole, onAccept, onCancel }: ModalProps) => (
  <ConfirmationDialog
    open={open}
    title="Withdraw State Access?"
    body={`This action cannot be undone. ${convertStateAbbrToFullName(
      selfRevokeRole.territory,
    )} State System Admin will be notified.`}
    aria-labelledby="Self Revoke Access Modal"
    acceptButtonText="Confirm"
    onAccept={onAccept}
    onCancel={onCancel}
  />
);
 
const WithdrawPendingRoleModal = ({ open, onAccept, onCancel }: ModalProps) => (
  <ConfirmationDialog
    open={open}
    title="Withdraw role request?"
    body="This role is still pending approval. Withdrawing it will cancel your request."
    aria-labelledby="Self Withdraw Pending Access Modal"
    acceptButtonText="Withdraw request"
    onAccept={onAccept}
    onCancel={onCancel}
  />
);
 
const RemoveActiveRoleModal = ({ open, selfRevokeRole, onAccept, onCancel }: ModalProps) => {
  const approvingRole = getApprovingRole(selfRevokeRole.role);
  const stateDisplay =
    selfRevokeRole.role === "statesubmitter"
      ? `${convertStateAbbrToFullName(selfRevokeRole.territory)} `
      : "";
  return (
    <ConfirmationDialog
      open={open}
      title={
        <div className="mr-4">
          Withdraw {stateDisplay}
          {newUserRoleMap[selfRevokeRole.role].toLowerCase()} access?
        </div>
      }
      body={`This action cannot be undone. The ${stateDisplay}${newUserRoleMap[approvingRole]} will be notified of this change.`}
      aria-labelledby="Self Remove Role Modal"
      acceptButtonText="Confirm"
      onAccept={onAccept}
      onCancel={onCancel}
    />
  );
};
 
export const WithdrawRoleModal = (props: ModalProps) => {
  const modalType = (function () {
    if (!props.selfRevokeRole) return null;
    if (!props.selfRevokeRole.isNewUserRoleDisplay) return "legacy-withdraw";
    if (props.selfRevokeRole.status === "pending") return "pending-withdraw";
    Eif (props.selfRevokeRole.status === "active") return "remove-role";
  })();
 
  if (!props.selfRevokeRole) return;
  return (
    <>
      {modalType === "legacy-withdraw" && <LegacyWithdrawRoleModal {...props} />}
      {modalType === "pending-withdraw" && <WithdrawPendingRoleModal {...props} />}
      {modalType === "remove-role" && <RemoveActiveRoleModal {...props} />}
    </>
  );
};