All files / src/components/Merchants/MerchantPreview/MerchantAgreement helpers.tsx

100% Statements 18/18
97.43% Branches 38/39
100% Functions 5/5
100% Lines 17/17

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 86 87                            41x       94x 94x     41x             94x   94x                                           41x 95x 29x 29x           41x         94x 94x 3x   91x         41x 29x                  
import type { TMerchantAgreementPayload } from "@components/Merchants/CreateMerchantPanel/hooks/TMerchantAgreementPayload";
import { IParsedData } from "@components/Merchants/MerchantPreview/data.types";
import GiveText from "@shared/Text/GiveText";
import moment from "moment";
import { PLATFORM_TIMEZONE } from "@utils/timezones";
 
type ParseMerchantAgreementOptions = {
  rawAgreement?: Partial<TMerchantAgreementPayload>;
  apiData?: any;
  signedByFallback?: string;
  tcVersion?: string;
  msaVersion?: string;
};
 
export const getLocalSignatureFile = (
  merchantAgreement: any,
): File | undefined => {
  const localSignature =
    merchantAgreement?.signatureFile?.file ?? merchantAgreement?.signatureFile;
  return localSignature instanceof File ? localSignature : undefined;
};
 
export const parseMerchantAgreementPayload = ({
  rawAgreement,
  apiData,
  signedByFallback,
  tcVersion,
  msaVersion,
}: ParseMerchantAgreementOptions): TMerchantAgreementPayload => {
  const rawAgreementData = rawAgreement ?? {};
 
  return {
    ...(rawAgreementData as any),
    msaRefundPolicy: rawAgreementData.msaRefundPolicy ?? "30 Days of Purchase",
    msaPCICompliant: rawAgreementData.msaPCICompliant ?? true,
    msaPreviousTermination: rawAgreementData.msaPreviousTermination ?? false,
    msaPreviousTerminationProcessorName:
      rawAgreementData.msaPreviousTerminationProcessorName ?? "",
    msaPreviousTerminationReason:
      rawAgreementData.msaPreviousTerminationReason ?? "",
    msaPreviousTerminationAt: rawAgreementData.msaPreviousTerminationAt ?? null,
    msaHadAgreed: Boolean(rawAgreementData.msaHadAgreed),
    signedBy: rawAgreementData.signedBy || signedByFallback,
    msaLastUpdatedAt: rawAgreementData.msaLastUpdatedAt,
    msaLastAcceptedVersion:
      rawAgreementData.msaLastAcceptedVersion ||
      apiData?.msaLastAcceptedVersion,
    tcVersion: tcVersion ?? rawAgreementData.tcVersion,
    msaVersion: msaVersion ?? rawAgreementData.msaVersion,
    tcVersionUpdatedAt: apiData?.acquirerTcDate,
  };
};
 
export const formatAgreementDate = (timestamp?: number) => {
  if (!timestamp) return { signedDate: "", signedDateTime: "" };
  const m = moment.unix(timestamp).tz(PLATFORM_TIMEZONE);
  return {
    signedDate: m.format("MM/DD/YYYY"),
    signedDateTime: m.format("MM/DD/YYYY HH:mm:ss"),
  };
};
 
export const getDisplayTimestamp = (
  data?: TMerchantAgreementPayload,
  merchantData?: Partial<IParsedData>,
  signatureFile?: File,
): number | undefined => {
  const hasLocalSignature = signatureFile && "name" in signatureFile;
  if (hasLocalSignature && !data?.msaLastUpdatedAt) {
    return Math.floor(Date.now() / 1000);
  }
  return (
    data?.msaLastUpdatedAt || merchantData?.merchantAgreement?.msaLastUpdatedAt
  );
};
 
export const renderSpan = (text: string, inBold = false) => (
  <GiveText
    variant="bodyS"
    component="span"
    color="primary"
    fontWeight={inBold ? "500" : "400"}
  >
    {text}
  </GiveText>
);