import React, { useContext, useEffect, useState } from "react";
import {
Badge,
Box,
Button,
Text,
Tooltip,
useToast,
} from "@chakra-ui/react";
import { useForm} from "react-hook-form";
import { yupResolver } from "@hookform/resolvers/yup";
import * as yup from "yup";
import { useNavigate } from "react-router-dom";
import { OPACITY_ON_LOAD } from "../../Layout/animations";
import FormInputMain from "../../Components/FormInputMain";
import {
useGetContactQuery,
useUpdateContactMutation,
} from "../../Services/contact.service";
import FullscreenLoaders from "../../Components/Loaders/FullscreenLoaders";
import ToastBox from "../../Components/ToastBox";
import NormalTable from "../../Components/DataTable/NormalTable";
import GlobalStateContext from "../../Contexts/GlobalStateContext";
import { useGetInvestorsQuery } from "../../Services/investor.details.service";
import { TABLE_PAGINATION } from "../../Constants/Paginations";
import { generateSerialNumber } from "../../Constants/Constants";
import { ViewIcon } from "@chakra-ui/icons";
export const notification = yup.object().shape({
investmentNameEnglish: yup
.string()
.required("Investment Name is required"),
ManualDate: yup
.date()
.required("Manual Date is required")
.typeError("Invalid date format"),
ManualTime: yup
.string()
.required("Manual Time is required")
.matches(
/^([01]\d|2[0-3]):?([0-5]\d)$/,
"Invalid time format, must be in HH:mm"
),
expectedReturn: yup
.string()
.required("Expected Return is required")
.matches(
/^[0-9]+(\.[0-9]{1,2})?$/,
"Expected Return must be a valid number with up to 2 decimal places"
),
});
const Notification = () => {
const toast = useToast();
const navigate = useNavigate();
const [form, setForm] = useState({});
const [isLoading, setIsLoading] = useState(false);
const [ selectedRadio, setSelectedRadio] = useState([])
const {
control,
reset,
handleSubmit,
formState: { errors },
} = useForm({
resolver: yupResolver(notification),
});
console.log(errors);
const {
data: contact,
isLoading: contactLoading,
error,
} = useGetContactQuery();
const [pageSize, setPageSize] = useState(TABLE_PAGINATION?.size);
const [currentPage, setCurrentPage] = useState(TABLE_PAGINATION?.page);
const {
data: investorDetails,
isLoading: investorDetailsLoading,
// error,
} = useGetInvestorsQuery({ page: currentPage, size: pageSize });
console.log(investorDetails);
const [updateContact] = useUpdateContactMutation();
useEffect(() => {
if (contact) {
reset({
phoneNumber: contact?.data[0]?.phoneNumber,
emailAddress: contact?.data[0]?.emailAddress,
websiteUrl: contact?.data[0]?.websiteUrl,
});
}
}, [contact, reset]);
if (contactLoading) {
return ;
}
const formFields = [
{
label: "Investment Name",
placeHolder: " ",
name: "investmentNameEnglish",
type: "text",
isRequired: true,
section: "Add Details",
// value: contact?.phoneNumber || "",
},
{
label: "Manual Date",
name: "ManualDate",
placeHolder: " ",
type: "date",
isRequired: true,
section: "Add Details",
// value: contact?.emailAddress || "",
},
{
label: "Manual Time",
name: "ManualTime",
placeHolder: " ",
type: "time",
isRequired: true,
section: "Add Details",
// value: contact?.websiteUrl || "",
},
{
label: "Expected Return",
name: "expectedReturn",
placeHolder: " ",
type: "text",
isRequired: true,
section: "Add Details",
// value: contact?.websiteUrl || "",
},
];
const groupedFields = formFields.reduce((groups, field) => {
const { section } = field;
if (!groups[section]) {
groups[section] = [];
}
groups[section].push(field);
return groups;
}, {});
const onSubmit = async (data) => {
const dataToPass = {
...data,
principal_xid:selectedRadio
}
console.log(dataToPass);
setIsLoading(true);
try {
const res = await updateContact(dataToPass);
if (res?.data?.statusCode === 200) {
toast({
render: () => ,
});
setIsLoading(false);
}
} catch (error) {
console.log(error);
setIsLoading(false);
}
};
console.log(selectedRadio);
// ====================================================[Table Setup]================================================================
const tableHeadRow = [
"Sr No",
"Client ID",
"First Name",
"Last Name",
"Country",
"Phone Number",
"E-mail ID",
"Type",
"KYC Status",
// "Status",
];
const extractedArray = investorDetails?.data?.rows?.map((item, idx) => ({
id: item?.id,
"Sr No": (
{/* {item.id} */}
{generateSerialNumber(idx,currentPage, pageSize )}
),
"Client ID": (
{item.clientReference_id}
),
"First Name": (
{item?.principal?.firstName}
),
"Last Name": (
{item?.principal?.lastName}
),
Country: (
{item?.country?.countryName}
),
"Phone Number": (
{item?.principal?.mobileNumber}
),
"E-mail ID": (
{item?.principal?.emailAddress}
),
"Type": (
{item?.investor_type?.investorTypeName}
),
Status: (
{item.ioStatus ? "Ban" : "Unban"}
),
"KYC Status": (
{item.KYCStatus ? "Completed" : "Not complete"}
),
}));
return (
);
};
export default Notification;