All files / src/components/Disputes/DisputeTable/hooks useDisputesStats.tsx

81.81% Statements 18/22
78.26% Branches 18/23
100% Functions 3/3
80% Lines 16/20

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 88 89      1x 75x 75x   75x   57x   57x     57x                       1x 75x 75x     1x 15x                         15x   15x                                             15x                 15x                  
import { useGetDisputesStats } from "@components/Disputes/DisputesList/hooks/useGetDisputesStats";
import { parseAmount } from "@utils/index";
 
const getFractionDigits = (ratio: number = 0) => {
  const percentage = ratio * 100;
  const absVal = Math.abs(percentage);
 
  if (absVal >= 0.1) return 1;
 
  const str = absVal.toFixed(10);
 
  const decimals = str.split(".")[1];
 
  // if it only contain 0 return 1
  Eif (/^0+$/.test(decimals)) return 1;
 
  // Count how many leading zeros before first significant digit
  let count = Math.floor(-Math.log10(absVal));
 
  // Fix for values like 0.01, 0.001, 0.0001
  if (absVal === Math.pow(10, -count)) {
    count -= 1;
  }
  return count + 1;
};
 
const formatRatio = (value?: number) => {
  const ratio = value || 0;
  return `(${parseAmount(ratio * 100, getFractionDigits(ratio))}%)`;
};
 
export const useDisputesStats = () => {
  const { data, isLoading } = useGetDisputesStats();
 
  const {
    disputeVolumeRatio,
    disputeCount,
    disputeCountRatio,
    winCount,
    preChargebackRefundCount,
    preChargebackRefundCountRatio,
    winCountRatio,
    lostCount,
    lostCountRatio,
    disputeAmount,
  } = data || {};
 
  const stats = [
    {
      title: "Disputes Count",
      value: disputeCount || 0,
      ratio: formatRatio(disputeCountRatio),
    },
    {
      title: "Refunded Count",
      value: preChargebackRefundCount || 0,
      ratio: formatRatio(preChargebackRefundCountRatio),
    },
    {
      title: "Won Count",
      value: winCount || 0,
      ratio: formatRatio(winCountRatio),
    },
    {
      title: "Lost Count",
      value: lostCount || 0,
      ratio: formatRatio(lostCountRatio),
    },
  ];
 
  const mainStats = [
    {
      isAmount: true,
      title: "Disputes Amount",
      value: parseAmount(disputeAmount ? disputeAmount / 100 : 0) ?? 0,
      ratio: formatRatio(disputeVolumeRatio),
    },
  ];
 
  return {
    isLoading,
    data: {
      mainStats,
      stats,
    },
    tabStats: data,
  };
};