All files / src/features/Processing/hooks useProcessingFilters.tsx

5.12% Statements 2/39
0% Branches 0/8
0% Functions 0/10
5.4% Lines 2/37

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 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122                              5x                                                                                                                                                                                                 5x                  
import { useAppDispatch, useAppSelector } from "@redux/hooks";
import { useEffect, useMemo, useState } from "react";
import {
  addBlockedFilter,
  addQuarantineFilter,
  addStatusFilter,
  clearFilters,
  selectHasUnseenBlockedTransactions,
  setHasUnseenBlockedTransactions,
  setProcessingTab,
  addBlockedAndQuarantinedFilter,
} from "@redux/slices/transactions";
import { AlertDot } from "../ProcessingTable.atoms";
import { checkPortals } from "@utils/routing";
 
export const useProcessingFilters = () => {
  const { isMerchantPortal, isAcquirerOrProviderManageMoney } = checkPortals();
  const dispatch = useAppDispatch();
  const [selectedFilter, setSelectedFilter] = useState<number>(0);
 
  const handleClick = (index: number) => {
    setSelectedFilter((prev) => {
      if (prev === index) return prev;
      dispatch(clearFilters());
      return index;
    });
  };
  const hasUnseenBlockedTransactions = useAppSelector(
    selectHasUnseenBlockedTransactions,
  );
 
  useEffect(() => {
    dispatch(setProcessingTab(tabNames.all));
    if (isAcquirerOrProviderManageMoney) return;
    dispatch(addStatusFilter("!declined"));
    dispatch(addBlockedAndQuarantinedFilter());
  }, []);
 
  const tableFilters = useMemo(
    () => [
      {
        label: "All",
        value: tabNames.all,
        onClickItem: (index: number) => {
          handleClick(index);
          dispatch(setProcessingTab(tabNames.all));
          dispatch(addStatusFilter("!declined"));
          dispatch(addBlockedAndQuarantinedFilter());
        },
      },
      {
        label: "Pending",
        value: tabNames.pending,
        onClickItem: (index: number) => {
          handleClick(index);
          dispatch(setProcessingTab(tabNames.pending));
          dispatch(
            addStatusFilter([
              "processing_issue",
              "captured",
              "created",
              "authorized",
              "pending",
              "enqueued",
            ]),
          );
          dispatch(addBlockedAndQuarantinedFilter());
        },
      },
      ...(!isMerchantPortal
        ? [
            {
              label: "Suspected",
              value: tabNames.fraud,
              onClickItem: (index: number) => {
                handleClick(index);
                dispatch(setProcessingTab(tabNames.fraud));
                dispatch(addBlockedFilter());
                dispatch(setHasUnseenBlockedTransactions(false));
              },
              endItem: hasUnseenBlockedTransactions ? <AlertDot /> : null,
            },
            {
              label: "Quarantined",
              value: tabNames.quarantined,
              onClickItem: (index: number) => {
                handleClick(index);
                dispatch(setProcessingTab(tabNames.quarantined));
                dispatch(addQuarantineFilter());
              },
            },
            {
              label: "Declined",
              value: tabNames.declined,
              onClickItem: (index: number) => {
                handleClick(index);
                dispatch(setProcessingTab(tabNames.declined));
                dispatch(addStatusFilter("declined"));
              },
            },
          ]
        : []),
    ],
    [hasUnseenBlockedTransactions, isMerchantPortal],
  );
 
  return {
    tableFilters,
    selectedFilter,
  };
};
 
export const tabNames = {
  all: "-all",
  pending: "-pending",
  fraud: "-fraud",
  quarantined: "-quarantined",
  declined: "-declined",
  settled: "-settled",
  transfers: "-transfers",
};