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 123 124 125 126 127 128 | 34x 1624x 34x 1624x 1624x 1624x 1624x 1624x 1624x 1624x 1624x 1624x 1624x 1624x 1624x 224x 1624x | import { useAppDispatch, useAppSelector } from "@redux/hooks";
import {
resetMarkedMerchants,
selectMarkedMerchants,
} from "@redux/slices/enterprise/merchants";
import { useMutation, useQueryClient } from "react-query";
import { customInstance } from "@services/api";
import { useGetCurrentMerchantId } from "@hooks/common";
import { showMessage } from "@common/Toast/ShowToast";
import {
getLastBulkApprovalTask,
useGetBackgroundTaskStatus,
useGetBackgroundTaskStatusById,
} from "./useGetBackgroundTaskStatus";
import {
QKEY_LIST_ACQUIRER_MERCHANTS,
QKEY_LIST_MERCHANT_STATS,
} from "@constants/queryKeys";
import { useEffect, useState } from "react";
import { MERCHANT_SIDE_PANEL_PREVIEW_API_KEYS } from "features/Merchants/MerchantSidePanel/constants";
import { useGetFeatureFlagValues } from "FeatureFlags/useGetFeatureFlagValues";
import { useRefetchCounters } from "@hooks/acquirer-api/merchants/stats/useGetMerchantCounters";
import {
APPROVAL_TYPE,
REFACTORED_APPROVAL_TYPE,
} from "@redux/slices/enterprise/consts";
export const useUpdateBulkStatus = (merchantId: number) => {
return useMutation((payload: any) => {
return customInstance({
url: `/merchants/${merchantId}/sponsor-statuses`,
method: "PATCH",
data: payload,
});
});
};
export const useBulkUpdateSponsorStatus = () => {
const { include, exclude, auto, pre } =
useAppSelector(selectMarkedMerchants) || [];
const { merchantId } = useGetCurrentMerchantId();
const { handleRefetchCounters } = useRefetchCounters();
const queryClient = useQueryClient();
const dispatch = useAppDispatch();
const statusMutation = useUpdateBulkStatus(merchantId);
const [backgroundTaskId, setBackgroundTaskId] = useState<null | number>(null);
const { isMerchantStatusRefactorEnabled } = useGetFeatureFlagValues();
const { refetch } = useGetBackgroundTaskStatus({
enabled: false,
});
const { data: taskData, isLoading } = useGetBackgroundTaskStatusById({
taskId: backgroundTaskId,
});
const bulkUpdateSponsorStatus = async (action: string) => {
const getBulkApprove = () => {
if (auto === true && pre === true) {
return {
updateAll: true,
};
} else if (auto === true) {
return isMerchantStatusRefactorEnabled
? { merchantStateToUpdate: REFACTORED_APPROVAL_TYPE.AUTO }
: { merchantStatusToUpdate: APPROVAL_TYPE.AUTO };
} else if (pre === true) {
return isMerchantStatusRefactorEnabled
? { merchantStateToUpdate: REFACTORED_APPROVAL_TYPE.PRE }
: { merchantStatusToUpdate: APPROVAL_TYPE.PRE };
}
return {};
};
const payload = {
sponsorStatus: action === "approve" ? "approved" : "declined",
excludedMerchIDs: exclude.map((merchant) => merchant.id),
merchIDs: include.map((merchant) => merchant.id),
...getBulkApprove(),
};
//
try {
const tasks = await getLastBulkApprovalTask({ accountId: merchantId });
if (tasks?.total != 0) {
showMessage(
"Error",
`${
action === "approve" ? "Approval" : "Decline"
} process is already running in background. Please try again later`,
);
return;
}
await statusMutation.mutateAsync(payload, {
onSuccess: (res) => {
setBackgroundTaskId(res?.id);
dispatch(resetMarkedMerchants({}));
refetch();
queryClient.invalidateQueries([QKEY_LIST_ACQUIRER_MERCHANTS]);
queryClient.invalidateQueries([QKEY_LIST_MERCHANT_STATS, merchantId]);
handleRefetchCounters();
queryClient.invalidateQueries([
MERCHANT_SIDE_PANEL_PREVIEW_API_KEYS.GET,
merchantId,
]);
},
});
} catch (error: any) {
showMessage(
"Error",
error?.message || "Whoops.. an error occured. Please try again",
);
}
};
useEffect(() => {
Iif (taskData?.status === "completed") {
queryClient.invalidateQueries(QKEY_LIST_ACQUIRER_MERCHANTS);
queryClient.invalidateQueries([QKEY_LIST_MERCHANT_STATS, merchantId]);
handleRefetchCounters();
setBackgroundTaskId(null);
}
}, [isLoading, taskData]);
return {
bulkUpdateSponsorStatus,
isUpdating: statusMutation.isLoading,
};
};
|