diff --git a/src/Contexts/GlobalStateProvider.jsx b/src/Contexts/GlobalStateProvider.jsx
index d9db0d1..b3cce1a 100644
--- a/src/Contexts/GlobalStateProvider.jsx
+++ b/src/Contexts/GlobalStateProvider.jsx
@@ -1441,6 +1441,121 @@ const GlobalStateProvider = ({ children }) => {
},
]);
+ const [fawateerRequest, setFawateerRequest] = useState([
+ {
+ id: 8,
+ principal_xid: 2,
+ transaction_date: "2024-10-07",
+ transaction_amount: "2000.00",
+ transactionStatus: "Approved",
+ makerComment: "This is a sample comment for the transactio",
+ checkerComment: "This is a sample comment for the transaction",
+ spportFile_path: "public\\spportFile_path\\screenshot_2024_02_15_152810.png",
+ clientReference_id: "BH00000001",
+ firstName: "jayesh",
+ lastName: "jain ",
+ mobileNumber: "+919819906537",
+ emailAddress: "jayeshkjain6@gmail.com",
+ maker: {
+ firstName: "Faisal",
+ lastName: "Aljalahma",
+ emailAddress: "admin@tanami.com",
+ ISDcode: "+973",
+ mobileNumber: "3633133"
+ }
+ },
+ {
+ id: 8,
+ principal_xid: 2,
+ transaction_date: "2024-10-07",
+ transaction_amount: "2000.00",
+ transactionStatus: "Approved",
+ makerComment: "This is a sample comment for the transactio",
+ checkerComment: "This is a sample comment for the transaction",
+ spportFile_path: "public\\spportFile_path\\screenshot_2024_02_15_152810.png",
+ clientReference_id: "BH00000001",
+ firstName: "jayesh",
+ lastName: "jain ",
+ mobileNumber: "+919819906537",
+ emailAddress: "jayeshkjain6@gmail.com",
+ maker: {
+ firstName: "Faisal",
+ lastName: "Aljalahma",
+ emailAddress: "admin@tanami.com",
+ ISDcode: "+973",
+ mobileNumber: "3633133"
+ }
+ },
+ {
+ id: 8,
+ principal_xid: 2,
+ transaction_date: "2024-10-07",
+ transaction_amount: "2000.00",
+ transactionStatus: "Approved",
+ makerComment: "This is a sample comment for the transactio",
+ checkerComment: "This is a sample comment for the transaction",
+ spportFile_path: "public\\spportFile_path\\screenshot_2024_02_15_152810.png",
+ clientReference_id: "BH00000001",
+ firstName: "jayesh",
+ lastName: "jain ",
+ mobileNumber: "+919819906537",
+ emailAddress: "jayeshkjain6@gmail.com",
+ maker: {
+ firstName: "Faisal",
+ lastName: "Aljalahma",
+ emailAddress: "admin@tanami.com",
+ ISDcode: "+973",
+ mobileNumber: "3633133"
+ }
+ },
+ {
+ id: 8,
+ principal_xid: 2,
+ transaction_date: "2024-10-07",
+ transaction_amount: "2000.00",
+ transactionStatus: "Approved",
+ makerComment: "This is a sample comment for the transactio",
+ checkerComment: "This is a sample comment for the transaction",
+ spportFile_path: "public\\spportFile_path\\screenshot_2024_02_15_152810.png",
+ clientReference_id: "BH00000001",
+ firstName: "jayesh",
+ lastName: "jain ",
+ mobileNumber: "+919819906537",
+ emailAddress: "jayeshkjain6@gmail.com",
+ maker: {
+ firstName: "Faisal",
+ lastName: "Aljalahma",
+ emailAddress: "admin@tanami.com",
+ ISDcode: "+973",
+ mobileNumber: "3633133"
+ }
+ },
+ ]);
+
+ const [approveHistory, setApproveHistory] = useState([
+ {
+ "id": 1,
+ "principal_xid": 2,
+ "transaction_date": "2024-10-07",
+ "transaction_amount": "2000.00",
+ "transactionStatus": "Pending",
+ "makerComment": null,
+ "checkerComment": null,
+ "spportFile_path": null,
+ "clientReference_id": "BH00000001",
+ "firstName": "jayesh",
+ "lastName": "jain",
+ "mobileNumber": "+919819906537",
+ "emailAddress": "jayeshkjain6@gmail.com",
+ "maker": {
+ "firstName": "Faisal",
+ "lastName": "Aljalahma",
+ "emailAddress": "admin@tanami.com",
+ "ISDcode": "+973",
+ "mobileNumber": "3633133"
+ }
+ },
+ ]);
const [InvestorWallet, setInvestorWallet] = useState(null);
@@ -1519,15 +1634,16 @@ const GlobalStateProvider = ({ children }) => {
setAcademicDocuments,
iOArtifactsTwo,
setIOArtifactsTwo,
-
InvestorWallet,
setInvestorWallet,
-
isIOloading,
setIOloading,
-
users,
setUsers,
+ fawateerRequest,
+ setFawateerRequest,
+ approveHistory,
+ setApproveHistory
}}
>
{children}
diff --git a/src/Pages/Fawateer/FawateerRequest.jsx b/src/Pages/Fawateer/FawateerRequest.jsx
index 24d4858..b21df91 100644
--- a/src/Pages/Fawateer/FawateerRequest.jsx
+++ b/src/Pages/Fawateer/FawateerRequest.jsx
@@ -107,7 +107,6 @@ const FawateerRequest = () => {
// ====================================================[Table Setup]================================================================
const tableHeadRow = [
"Sr No",
-
"Client ID",
"First Name",
"Last Name",
diff --git a/src/Pages/FawateerChecker/ApproveHistory/ApproveHistory.jsx b/src/Pages/FawateerChecker/ApproveHistory/ApproveHistory.jsx
new file mode 100644
index 0000000..026b5e2
--- /dev/null
+++ b/src/Pages/FawateerChecker/ApproveHistory/ApproveHistory.jsx
@@ -0,0 +1,340 @@
+import {
+ Avatar,
+ Badge,
+ Box,
+ Button,
+ HStack,
+ Input,
+ Text,
+ Tooltip,
+ useDisclosure,
+ useToast,
+ } from "@chakra-ui/react";
+ import React, { useContext, useEffect, useState } from "react";
+ import { CheckIcon, CloseIcon } from "@chakra-ui/icons";
+import Pagination from "../../../Components/Pagination";
+import GlobalStateContext from "../../../Contexts/GlobalStateContext";
+import CustomAlertDialog from "../../../Components/CustomAlertDialog";
+import DrawalRequestReject from "../../WithDrawal/DrawalRequest/DrawalRequestReject";
+import NormalTable from "../../../Components/DataTable/NormalTable";
+import DrawalRequestApprove from "../../WithDrawal/DrawalRequest/DrawalRequestApprove";
+import { generateSerialNumber } from "../../../Constants/Constants";
+import { useGetFawateerRequestQuery } from "../../../Services/fawateer.request.service";
+import { TABLE_PAGINATION } from "../../../Constants/Paginations";
+import { OPACITY_ON_LOAD } from "../../../Layout/animations";
+
+ const ApproveHistory = () => {
+ const toast = useToast();
+ const { slideFromRight, approveHistory, setApproveHistory } =
+ useContext(GlobalStateContext);
+ const [searchTerm, setSearchTerm] = useState("");
+ const [isLoading, setIsLoading] = useState(true);
+ const [deleteAlert, setDeleteAlert] = useState(false);
+ const [actionId, setActionId] = useState(false);
+ const [mouseEntered, setMouseEntered] = useState(false);
+ const [mouseEnteredId, setMouseEnteredId] = useState("");
+
+ const [pageSize, setPageSize] = useState(TABLE_PAGINATION?.size);
+ const [currentPage, setCurrentPage] = useState(TABLE_PAGINATION?.page);
+
+ const formatDate = (date) => {
+ return new Date(date).toLocaleDateString('en-GB', {
+ day: '2-digit',
+ month: '2-digit',
+ year: 'numeric',
+ });
+ };
+
+ const {
+ isOpen: isConfirmOpen,
+ onOpen: onConfirmOpen,
+ onClose: onConfirmClose,
+ } = useDisclosure();
+ const {
+ isOpen: isRejectOpen,
+ onOpen: onRejectOpen,
+ onClose: onRejectClose,
+ } = useDisclosure();
+
+ const {
+ data,
+ isLoading: drawalRequestLoading,
+ error,
+ refetch
+ } = useGetFawateerRequestQuery();
+
+ console.log(data?.data?.rows);
+
+
+
+
+ // Use useEffect to refetch data when the component mounts
+ useEffect(() => {
+ refetch();
+ }, [refetch]);
+
+ useEffect(() => {
+
+ // Simulate loading
+ const timer = setTimeout(() => {
+ setIsLoading(false);
+ }, 1500);
+
+ // Cleanup the timer on component unmount
+ return () => clearTimeout(timer);
+ }, []);
+
+ // ====================================================[Table Filter]================================================================
+ const filteredData = approveHistory?.filter((item) => {
+ // Filter by name (case insensitive)
+ const name = item.firstName;
+ const searchLower = searchTerm.toLowerCase();
+ const nameMatches = name.toLowerCase().includes(searchLower);
+
+ // Filter by status
+ // const status = item.status;
+ // const statusLower = status ? "active" : "inactive";
+
+ // const statusMatches =
+ // statusFilter === "all" ||
+ // (statusFilter === "active" && status === true) ||
+ // (statusFilter === "inactive" && status === false);
+
+ return nameMatches;
+
+
+ });
+
+ // ====================================================[Table Setup]================================================================
+ const tableHeadRow = [
+ "Sr.no",
+ "Client ID",
+ "First Name",
+ "Last Name",
+ "E-mail ID",
+ "Phone Number",
+ "Transaction Date",
+ "Transaction Amount",
+ "Action",
+ ];
+
+
+
+ const extractedArray = filteredData?.map((item, idx) => ({
+ // id: item?.id,
+ "Sr.no": (
+
+ {generateSerialNumber(idx,currentPage, pageSize )}
+
+ ),
+ "Client ID": (
+
+ {item.clientReference_id}
+
+ ),
+ "First Name": (
+
+
+ {item.firstName}
+
+
+ ),
+ "Last Name": (
+
+
+ {item.lastName}
+
+
+ ),
+ "E-mail ID": (
+
+
+ {item.emailAddress}
+
+
+ ),
+ "Phone Number": (
+
+
+ {item.mobileNumber}
+
+
+ ),
+ "Transaction Date": (
+
+
+ {item.transaction_date}
+
+
+ ),
+ "Transaction Amount": (
+
+
+ {/* {item.investorAmount} */}
+ {parseFloat(item?.transaction_amount || 0).toLocaleString(undefined, {
+ minimumFractionDigits: 2,
+ maximumFractionDigits: 2,
+ })}
+ {/* {item?.transaction_amount} */}
+
+
+ ),
+ Action: (
+
+
+
+
+
+
+
+
+ ),
+ }));
+
+ const handleDelete = () => {
+ const updatedSponsors = sponser.filter(
+ (sponsor) => sponsor.id !== actionId
+ );
+
+ setTimeout(() => {
+ setSponser(updatedSponsors);
+ setDeleteAlert(false);
+ setIsLoading(false);
+ }, 100);
+ setIsLoading(true);
+ };
+
+ return (
+
+
+
+ setSearchTerm(e.target.value)}
+ />
+
+
+
+
+
+
+
+ setDeleteAlert(false)}
+ isOpen={deleteAlert}
+ message={"Are you sure you want to delete sponers?"}
+ alertHandler={handleDelete}
+ isLoading={isLoading}
+ />
+
+
+
+ );
+ };
+
+ export default ApproveHistory;
+
\ No newline at end of file
diff --git a/src/Pages/FawateerChecker/ApproveHistory/ConfirmHistory.jsx b/src/Pages/FawateerChecker/ApproveHistory/ConfirmHistory.jsx
new file mode 100644
index 0000000..88509f8
--- /dev/null
+++ b/src/Pages/FawateerChecker/ApproveHistory/ConfirmHistory.jsx
@@ -0,0 +1,95 @@
+import {
+ Box,
+ Button,
+ FormControl,
+ FormLabel,
+ Input,
+ Modal,
+ ModalBody,
+ ModalCloseButton,
+ ModalContent,
+ ModalFooter,
+ ModalHeader,
+ ModalOverlay,
+ Text,
+ useDisclosure,
+ } from "@chakra-ui/react";
+ import React from "react";
+ import * as yup from "yup";
+ import { yupResolver } from "@hookform/resolvers/yup";
+ import { useForm } from "react-hook-form";
+
+ export const conformModalSchema = yup.object().shape({
+ fees: yup.string().required("File name is required"),
+ totalAmount: yup.string().required("File name is required"),
+ });
+
+ const ConfirmHistory = ({ isOpen, onClose, firstField }) => {
+ const {
+ register,
+ handleSubmit,
+ formState: { errors },
+ } = useForm({
+ resolver: yupResolver(conformModalSchema),
+ });
+
+ const onSubmit = (data) => {
+ console.log(data);
+ setFile(data.document[0]);
+
+ const newDocument = {
+ ...data,
+ document: data.document[0].name, // Store the document name
+ status: true,
+ id: uuidv4(),
+ createdAt: new Date().toISOString(),
+ Type: getFileIcon(file.type),
+ };
+
+ setCreate((prevCreate) => [...prevCreate, newDocument]);
+ onClose();
+ };
+
+ const handleFileChange = (event) => {
+ const selectedFile = event.target.files[0];
+ setFile(selectedFile);
+ };
+
+ return (
+
+
+
+ Confirm
+
+
+
+
+ Withdrawal Amount
+
+
+
+
+
+
+
+
+
+
+ );
+ };
+
+ export default ConfirmHistory;
+
\ No newline at end of file
diff --git a/src/Pages/FawateerChecker/ApproveHistory/RejectHistory.jsx b/src/Pages/FawateerChecker/ApproveHistory/RejectHistory.jsx
new file mode 100644
index 0000000..e407a7f
--- /dev/null
+++ b/src/Pages/FawateerChecker/ApproveHistory/RejectHistory.jsx
@@ -0,0 +1,100 @@
+import {
+ Box,
+ Button,
+ FormControl,
+ FormLabel,
+ Input,
+ Modal,
+ ModalBody,
+ ModalCloseButton,
+ ModalContent,
+ ModalFooter,
+ ModalHeader,
+ ModalOverlay,
+ Text,
+ Textarea,
+ useDisclosure,
+ } from "@chakra-ui/react";
+ import React from "react";
+ import * as yup from "yup";
+ import { yupResolver } from "@hookform/resolvers/yup";
+ import { useForm } from "react-hook-form";
+
+ export const conformModalSchema = yup.object().shape({
+ comment: yup.string().required("Comment is required"),
+ });
+
+ const RejectHistory = ({ isOpen, onClose, firstField }) => {
+ const {
+ register,
+ handleSubmit,
+ formState: { errors },
+ } = useForm({
+ resolver: yupResolver(conformModalSchema),
+ });
+
+ const onSubmit = (data) => {
+ console.log(data);
+ setFile(data.document[0]);
+
+ const newDocument = {
+ ...data,
+ document: data.document[0].name, // Store the document name
+ comment: true,
+ id: uuidv4(),
+ Type: getFileIcon(file.type),
+ };
+
+ setCreate((prevCreate) => [...prevCreate, newDocument]);
+ onClose();
+ };
+
+ const handleFileChange = (event) => {
+ const selectedFile = event.target.files[0];
+ setFile(selectedFile);
+ };
+
+ return (
+
+
+
+ Reject
+
+
+
+
+ Comment
+
+ {errors.comment && (
+
+ {errors.comment.message}
+
+ )}
+
+
+
+
+
+
+
+
+
+ );
+ };
+
+ export default RejectHistory;
+
\ No newline at end of file
diff --git a/src/Pages/FawateerChecker/ApproveRequest/ApproveRequest.jsx b/src/Pages/FawateerChecker/ApproveRequest/ApproveRequest.jsx
new file mode 100644
index 0000000..9da525e
--- /dev/null
+++ b/src/Pages/FawateerChecker/ApproveRequest/ApproveRequest.jsx
@@ -0,0 +1,340 @@
+import {
+ Avatar,
+ Badge,
+ Box,
+ Button,
+ HStack,
+ Input,
+ Text,
+ Tooltip,
+ useDisclosure,
+ useToast,
+ } from "@chakra-ui/react";
+ import React, { useContext, useEffect, useState } from "react";
+ import { CheckIcon, CloseIcon } from "@chakra-ui/icons";
+import Pagination from "../../../Components/Pagination";
+import GlobalStateContext from "../../../Contexts/GlobalStateContext";
+import CustomAlertDialog from "../../../Components/CustomAlertDialog";
+import NormalTable from "../../../Components/DataTable/NormalTable";
+import { generateSerialNumber } from "../../../Constants/Constants";
+import { useGetFawateerRequestQuery } from "../../../Services/fawateer.request.service";
+import { TABLE_PAGINATION } from "../../../Constants/Paginations";
+import { OPACITY_ON_LOAD } from "../../../Layout/animations";
+import RequestApprove from "./RequestApprove";
+import RequestReject from "./RequestReject";
+
+ const ApproveRequest = () => {
+ const toast = useToast();
+ const { slideFromRight, fawateerRequest, setFawateerRequest } =
+ useContext(GlobalStateContext);
+ const [searchTerm, setSearchTerm] = useState("");
+ const [isLoading, setIsLoading] = useState(true);
+ const [deleteAlert, setDeleteAlert] = useState(false);
+ const [actionId, setActionId] = useState(false);
+ const [mouseEntered, setMouseEntered] = useState(false);
+ const [mouseEnteredId, setMouseEnteredId] = useState("");
+
+ const [pageSize, setPageSize] = useState(TABLE_PAGINATION?.size);
+ const [currentPage, setCurrentPage] = useState(TABLE_PAGINATION?.page);
+
+ const formatDate = (date) => {
+ return new Date(date).toLocaleDateString('en-GB', {
+ day: '2-digit',
+ month: '2-digit',
+ year: 'numeric',
+ });
+ };
+
+ const {
+ isOpen: isConfirmOpen,
+ onOpen: onConfirmOpen,
+ onClose: onConfirmClose,
+ } = useDisclosure();
+ const {
+ isOpen: isRejectOpen,
+ onOpen: onRejectOpen,
+ onClose: onRejectClose,
+ } = useDisclosure();
+
+ const {
+ data,
+ isLoading: drawalRequestLoading,
+ error,
+ refetch
+ } = useGetFawateerRequestQuery();
+
+ console.log(data);
+
+
+
+
+ // Use useEffect to refetch data when the component mounts
+ useEffect(() => {
+ refetch();
+ }, [refetch]);
+
+ useEffect(() => {
+
+ // Simulate loading
+ const timer = setTimeout(() => {
+ setIsLoading(false);
+ }, 1500);
+
+ // Cleanup the timer on component unmount
+ return () => clearTimeout(timer);
+ }, []);
+
+ // ====================================================[Table Filter]================================================================
+ const filteredData = fawateerRequest?.filter((item) => {
+ // Filter by name (case insensitive)
+ const name = item.firstName;
+ const searchLower = searchTerm.toLowerCase();
+ const nameMatches = name.toLowerCase().includes(searchLower);
+
+ // Filter by status
+ // const status = item.status;
+ // const statusLower = status ? "active" : "inactive";
+
+ // const statusMatches =
+ // statusFilter === "all" ||
+ // (statusFilter === "active" && status === true) ||
+ // (statusFilter === "inactive" && status === false);
+
+ return nameMatches;
+
+
+ });
+
+ // ====================================================[Table Setup]================================================================
+ const tableHeadRow = [
+ "Sr.no",
+ "Client ID",
+ "First Name",
+ "Last Name",
+ "E-mail ID",
+ "Phone Number",
+ "Transaction Date",
+ "Transaction Amount",
+ "Action",
+ ];
+
+
+
+ const extractedArray = filteredData?.map((item, idx) => ({
+ // id: item?.id,
+ "Sr.no": (
+
+ {generateSerialNumber(idx,currentPage, pageSize )}
+
+ ),
+ "Client ID": (
+
+ {item.clientReference_id}
+
+ ),
+ "First Name": (
+
+
+ {item.firstName}
+
+
+ ),
+ "Last Name": (
+
+
+ {item.lastName}
+
+
+ ),
+ "E-mail ID": (
+
+
+ {item.emailAddress}
+
+
+ ),
+ "Phone Number": (
+
+
+ {item.mobileNumber}
+
+
+ ),
+ "Transaction Date": (
+
+
+ {item.transaction_date}
+
+
+ ),
+ "Transaction Amount": (
+
+
+ {/* {item.investorAmount} */}
+ {parseFloat(item?.transaction_amount || 0).toLocaleString(undefined, {
+ minimumFractionDigits: 2,
+ maximumFractionDigits: 2,
+ })}
+ {/* {item?.transaction_amount} */}
+
+
+ ),
+ Action: (
+
+
+
+
+
+
+
+
+ ),
+ }));
+
+ const handleDelete = () => {
+ const updatedSponsors = sponser.filter(
+ (sponsor) => sponsor.id !== actionId
+ );
+
+ setTimeout(() => {
+ setSponser(updatedSponsors);
+ setDeleteAlert(false);
+ setIsLoading(false);
+ }, 100);
+ setIsLoading(true);
+ };
+
+ return (
+
+
+
+ setSearchTerm(e.target.value)}
+ />
+
+
+
+
+
+
+
+ setDeleteAlert(false)}
+ isOpen={deleteAlert}
+ message={"Are you sure you want to delete sponers?"}
+ alertHandler={handleDelete}
+ isLoading={isLoading}
+ />
+
+
+
+ );
+ };
+
+ export default ApproveRequest;
+
\ No newline at end of file
diff --git a/src/Pages/FawateerChecker/ApproveRequest/RequestApprove.jsx b/src/Pages/FawateerChecker/ApproveRequest/RequestApprove.jsx
new file mode 100644
index 0000000..42ae014
--- /dev/null
+++ b/src/Pages/FawateerChecker/ApproveRequest/RequestApprove.jsx
@@ -0,0 +1,242 @@
+import {
+ Badge,
+ Box,
+ Button,
+ FormControl,
+ FormErrorMessage,
+ FormLabel,
+ Input,
+ Modal,
+ ModalBody,
+ ModalCloseButton,
+ ModalContent,
+ ModalFooter,
+ ModalHeader,
+ ModalOverlay,
+ Text,
+ Textarea,
+ useDisclosure,
+ useToast,
+} from "@chakra-ui/react";
+import React, { useEffect, useState } from "react";
+import * as yup from "yup";
+import { yupResolver } from "@hookform/resolvers/yup";
+import { Controller, useForm } from "react-hook-form";
+import {
+ useGetDepositRequestByIdQuery,
+ useGetDepositRequestQuery,
+ useUpdateDepositRequestMutation,
+} from "../../../Services/deposit.request.service";
+import FullscreenLoaders from "../../../Components/Loaders/FullscreenLoaders";
+import ToastBox from "../../../Components/ToastBox";
+import CurrencyInput, { formatCurrency } from "../../../Components/CurrencyInput";
+
+const FILE_TYPES = ["image/jpeg", "image/png", "image/gif"];
+
+export const conformModalSchema = yup.object().shape({
+ investorAmount: yup.string().required("Investor amount is required"),
+ comment: yup.string().notRequired(),
+ supporting_FileName: yup.mixed().required("File is required"),
+ // .test("fileType", "Unsupported File Format", (value) => {
+ // return value && FILE_TYPES.includes(value.type);
+ // }),
+});
+
+const RequestApprove = ({
+ isOpen,
+ onClose,
+ firstField,
+ id,
+ data: requestData,
+}) => {
+ const toast = useToast();
+ const [file, setFile] = useState();
+ const [isBtnLoading, setIsBtnLoading] = useState(false);
+
+ const [updateDepositRequest] = useUpdateDepositRequestMutation();
+ const { data, isLoading } = useGetDepositRequestByIdQuery(id, {
+ skip: !id,
+ });
+
+ console.log(data?.data?.investorAmount);
+
+ const {
+ control,
+ register,
+ reset,
+ watch,
+ handleSubmit,
+ formState: { errors },
+ } = useForm({
+ resolver: yupResolver(conformModalSchema),
+ });
+
+ useEffect(() => {
+ if (data) {
+ const investorAmount = parseFloat(data?.data?.investorAmount);
+ reset({
+ investorAmount: investorAmount,
+ accountName: data?.data?.accountName,
+ });
+ }
+ }, [id, data, reset]);
+
+ const onSubmit = async (data) => {
+ setIsBtnLoading(true);
+ const formData = new FormData();
+
+ formData.append("investorAmount", data.investorAmount);
+ formData.append("comment", data.comment);
+ const file = data.supporting_FileName["0"];
+ formData.append("supporting_FileName", file);
+
+ try {
+ const res = await updateDepositRequest({ id, data: formData });
+
+ if (res?.error) {
+ toast({
+ render: () => (
+
+ ),
+ });
+ setIsBtnLoading(false);
+ } else if (res?.data?.statusCode === 200) {
+ toast({
+ render: () => ,
+ });
+ setIsBtnLoading(false);
+ }
+ } catch (error) {}
+
+ heandleOnClose();
+ };
+
+ const heandleOnClose = () => {
+ reset();
+ onClose();
+ };
+
+ return (
+
+
+
+
+ Confirm
+
+ {isLoading ? (
+
+ ) : (
+
+
+ {/*
+
+ Deposit Amount
+ {data?.data?.currencyCode}
+
+
+ {errors.investorAmount && (
+
+ {errors.investorAmount.message}
+
+ )}
+ */}
+
+
+ Deposit Amount
+ (
+
+ )}
+ />
+ {errors.investorAmount && (
+
+ {errors.investorAmount.message}
+
+ )}
+
+
+
+ Upload Supporting
+
+ {errors.supporting_FileName && (
+
+ {errors.supporting_FileName.message}
+
+ )}
+
+
+ Comments
+
+ {errors.comment && (
+
+ {errors.comment.message}
+
+ )}
+
+
+
+
+
+
+
+ )}
+
+
+ );
+};
+
+export default RequestApprove;
diff --git a/src/Pages/FawateerChecker/ApproveRequest/RequestReject.jsx b/src/Pages/FawateerChecker/ApproveRequest/RequestReject.jsx
new file mode 100644
index 0000000..b19a42a
--- /dev/null
+++ b/src/Pages/FawateerChecker/ApproveRequest/RequestReject.jsx
@@ -0,0 +1,163 @@
+import {
+ Box,
+ Button,
+ FormControl,
+ FormLabel,
+ Input,
+ Modal,
+ ModalBody,
+ ModalCloseButton,
+ ModalContent,
+ ModalFooter,
+ ModalHeader,
+ ModalOverlay,
+ Text,
+ Textarea,
+ useDisclosure,
+ useToast,
+} from "@chakra-ui/react";
+import React, { useEffect, useState } from "react";
+import * as yup from "yup";
+import { yupResolver } from "@hookform/resolvers/yup";
+import { useForm } from "react-hook-form";
+import { useDepositRejectMutation } from "../../../Services/deposit.request.service";
+import ToastBox from "../../../Components/ToastBox";
+
+export const conformModalSchema = yup.object().shape({
+ comments: yup.string().required("Comment is required"),
+});
+
+const RequestReject = ({ isOpen, onClose, firstField ,id}) => {
+ const [isBtnLoading , setIsBtnLoading] = useState(false)
+
+ const toast = useToast()
+
+ const {
+ register,
+ reset,
+ handleSubmit,
+ formState: { errors },
+ } = useForm({
+ resolver: yupResolver(conformModalSchema),
+ });
+
+ const [ depositReject ] = useDepositRejectMutation()
+
+
+ const onSubmit = async(data) => {
+ setIsBtnLoading(true)
+ try {
+ const res = await depositReject({ id ,data})
+
+ if (res?.error) {
+ toast({
+ render: () => (
+
+ ),
+ });
+ setIsBtnLoading(false)
+ onClose();
+
+ }else if(res?.data?.statusCode === 200) {
+ toast({
+ render: () => (
+
+ ),
+ });
+ setIsBtnLoading(false)
+ onClose();
+
+ }
+
+ } catch (error) {
+ console.log(error);
+
+ }
+
+ };
+
+ const handleFileChange = (event) => {
+ const selectedFile = event.target.files[0];
+ setFile(selectedFile);
+ };
+
+
+ const { data, isLoading } =
+ (id, {
+ skip: !id,
+ });
+
+ useEffect(() => {
+ if (data) {
+ reset({
+ investorAmount: data?.data?.investorAmount,
+ });
+ }
+ }, [data, reset]);
+
+ const heandleOnClose = () =>{
+ reset()
+ onClose()
+ }
+
+ return (
+
+
+
+ Investor Comment
+
+ {isLoading ? (
+
+ ) : (
+
+
+
+ Comment
+
+ {errors.comments && (
+
+ {errors.comments.message}
+
+ )}
+
+
+
+
+
+
+
+ )}
+
+
+ );
+};
+
+export default RequestReject;
diff --git a/src/Routes/Routes.js b/src/Routes/Routes.js
index 296ce14..11cece5 100644
--- a/src/Routes/Routes.js
+++ b/src/Routes/Routes.js
@@ -39,6 +39,8 @@ import Investor from "../Pages/Admin/Investor/BankInvestor/Investor";
import UnbanInvestor from "../Pages/Admin/Investor/UnbanInvestor/UnbanInvestor";
import FawateerRequest from "../Pages/Fawateer/FawateerRequest";
import CreateRequest from "../Pages/Fawateer/CreateRequest";
+import ApproveRequest from "../Pages/FawateerChecker/ApproveRequest/ApproveRequest";
+import ApproveHistory from "../Pages/FawateerChecker/ApproveHistory/ApproveHistory";
export const RouteLink = [
// =============[ Tanami ]================
@@ -116,20 +118,13 @@ export const RouteLink = [
-
-
-
-
-
-
-
// ===============[ fawateer ]===============
{ path: "/fawateer-history", Component: FawateerRequest },
{ path: "/fawateer-request", Component: CreateRequest },
- { path: "/fawateer-approver", Component: PendingRequest },
- { path: "/approver-history", Component: FawateerRequest },
+ { path: "/fawateer-approver", Component: ApproveRequest },
+ { path: "/approver-history", Component: ApproveHistory },
diff --git a/src/Services/fawateer.request.service.js b/src/Services/fawateer.request.service.js
new file mode 100644
index 0000000..026691f
--- /dev/null
+++ b/src/Services/fawateer.request.service.js
@@ -0,0 +1,30 @@
+// investorDetails.service.js
+import { createApi, fetchBaseQuery } from "@reduxjs/toolkit/query/react";
+// import { api } from "./api.service";
+import { baseQuery } from "./token.serivce";
+
+// const baseUrl = api?.defaults.baseURL;
+
+// Define a service using a base URL and expected endpoints
+export const fawateerRequest = createApi({
+ reducerPath: "fawateerRequest",
+ baseQuery: baseQuery,
+ tagTypes: ["getFawateerRequest"],
+ endpoints: (builder) => ({
+
+ getFawateerRequest: builder.query({
+ query: () => `/fawateer/admin/getAll`,
+ providesTags: ["getFawateerRequest"],
+ }),
+
+ // getDrawalHistory: builder.query({
+ // query: () => `/withdrawal/admin/history`,
+ // providesTags: ["getDepositHistory"],
+ // }),
+ }),
+});
+
+// Export hooks for usage in functional components
+export const {
+ useGetFawateerRequestQuery,
+} = fawateerRequest;
diff --git a/src/Store/Store.js b/src/Store/Store.js
index 5de50f9..81fc20f 100644
--- a/src/Store/Store.js
+++ b/src/Store/Store.js
@@ -15,6 +15,7 @@ import { apiSlice, baseQuery } from "../Services/token.serivce";
import { drawalRequest } from "../Services/drawal.request.service";
import { deleteRequest } from "../Services/delete.request.service";
import { banInvestorDetails } from "../Services/ban.investor.service";
+import { fawateerRequest } from "../Services/fawateer.request.service";
export const store = configureStore({
reducer: {
@@ -31,6 +32,7 @@ export const store = configureStore({
[drawalRequest.reducerPath]: drawalRequest.reducer,
[deleteRequest.reducerPath]: deleteRequest.reducer,
[banInvestorDetails.reducerPath]: banInvestorDetails.reducer,
+ [fawateerRequest.reducerPath]: fawateerRequest.reducer,
// Add other reducers as needed
},
middleware: (getDefaultMiddleware) =>
@@ -52,6 +54,7 @@ export const store = configureStore({
drawalRequest.middleware,
deleteRequest.middleware,
banInvestorDetails.middleware,
+ fawateerRequest.middleware,
),
});