import { Box, Button, Text } from "@chakra-ui/react"; import React, { useContext, useEffect } from "react"; import { useNavigate, useParams } from "react-router-dom"; import { useForm } from "react-hook-form"; import GlobalStateContext from "../../../Contexts/GlobalStateContext"; import DataTable from "../../../Components/DataTable/DataTable"; import FormInputView from "../../../Components/FormInputView"; import FullscreenLoaders from "../../../Components/Loaders/FullscreenLoaders"; import { useGetIOByIdQuery } from "../../../Services/io.service"; import * as yup from "yup"; import { yupResolver } from "@hookform/resolvers/yup"; import { formatDate } from "../../Master/Sponser/Sponsers"; import { formatCurrency } from "../../../Components/CurrencyInput"; import { removeTrailingZeros } from "../../../Constants/Constants"; const schema = yup.object().shape({ investmentNameEnglish: yup .string() .required("IO name in English is required") .min(3, "IO name in English must be at least 3 characters long") .max(50, "IO name in English must be at most 50 characters long"), investmentNameArabic: yup .string() .required("IO name in Arabic is required") .min(3, "IO name in Arabic must be at least 3 characters long") .max(50, "IO name in Arabic must be at most 50 characters long"), descriptionEnglish: yup .string() .required("Description in English is required") .min(10, "Description in English must be at least 10 characters long") .max(500, "Description in English must be at most 500 characters long"), descriptionArabic: yup .string() .required("Description in Arabic is required") .min(10, "Description in Arabic must be at least 10 characters long") .max(500, "Description in Arabic must be at most 500 characters long"), goalAmount: yup .number() .required("Goal amount is required") .positive("Goal amount must be a positive number") .min(1, "Goal amount must be at least 1"), closingDate: yup .date() .required("Closing date is required") .min(new Date(), "Closing date cannot be in the past"), holdingPeriod: yup .number() .required("Holding period is required") .positive("Holding period must be a positive number"), // minInvestmentAmount: yup // .number() // .required("Minimum investment is required") // .positive("Minimum investment must be a positive number") // .min(1, "Minimum investment must be at least 1"), ISIN: yup.string(), InvestmentDetails: yup.string(), comment: yup.string(), expectedReturn: yup .number() .required("Expected return is required") .positive("Expected return must be a positive number") .min(0.01, "Expected return must be at least 0.01"), }); const ViewIOdetails = () => { const navigate = useNavigate(); const params = useParams(); const id = params?.id; const { IODetails, setIODetails } = useContext(GlobalStateContext); const { data: IObyID, isLoading: IObyIDisLoading, error: IObyIDerror, } = useGetIOByIdQuery(id, { skip: !id }); // ======================[ Validator filter ] const { control, reset, setValue, handleSubmit, formState: { errors }, } = useForm({ resolver: yupResolver(schema), }); useEffect(() => { setIODetails({ ...IObyID?.data, }); if (IObyID?.data) { reset({ investmentNameEnglish: IObyID?.data?.investmentNameEnglish, investmentNameArabic: IObyID?.data?.investmentNameArabic, descriptionEnglish: IObyID?.data?.descriptionEnglish, descriptionArabic: IObyID?.data?.descriptionArabic, goalAmount: removeTrailingZeros(IObyID?.data?.goalAmount), closingDate: IObyID?.data?.closingDate, holdingPeriod: IObyID?.dpata?.holdingPeriod, ISIN: IObyID?.data?.ISIN, comment: IObyID?.data?.comment, expectedReturn: IObyID?.data?.expectedReturn, investmentType_xid: IObyID?.data?.investmentType_xid, InvestmentDetails: IObyID?.data?.InvestmentDetails, minInvestmentAmount: IObyID?.data?.minInvestmentAmount, }); } }, [id, IObyID]); const minInvestmentById = IObyID?.data?.minInvestmentAmt?.map(({minInvestmentAmt, country, currencyCode, id})=>{ return{ id:id, country: country?.countryName, value: removeTrailingZeros(minInvestmentAmt), logo: country?.flagIcon, curr: currencyCode, } }) console.log(); //=======================[ Editor ] const formFields = [ { label: "IO Name", value: IObyID?.data?.investmentNameEnglish ? IObyID?.data?.investmentNameEnglish : "---", name: "investmentNameEnglish", type: "text", section: " ", width: "49%", isRequired: true, }, { label: "IO Name (Arabic)", name: "investmentNameArabic", type: "text", value: IObyID?.data?.investmentNameArabic ? IObyID?.data?.investmentNameArabic : "---", isRequired: true, arabic: true, section: " ", width: "49%", }, { label: "Description", name: "descriptionEnglish", value: IObyID?.data?.descriptionEnglish ? IObyID?.data?.descriptionEnglish : "---", type: "textarea", isRequired: true, section: " ", width: "49%", }, { label: "Description (Arabic)", name: "descriptionArabic", value: IObyID?.data?.descriptionArabic ? IObyID?.data?.descriptionArabic : "---", type: "textarea", isRequired: true, arabic: true, section: " ", width: "49%", }, { label: "Holding Period", name: "holdingPeriod", value: IObyID?.data?.holdingPeriod ? IObyID?.data?.holdingPeriod : "---", type: "text", isRequired: true, placeHolder: "1Y", section: " ", width: "49%", }, { label: "Holding Period (Arabic)", name: "holdingPeriodArabic", value: IObyID?.data?.holdingPeriodArabic ? IObyID?.data?.holdingPeriodArabic : "---", type: "text", isRequired: true, arabic: true, placeHolder: "1Y", section: " ", width: "49%", }, { label: "Expected Return", placeHolder: "$00.00", name: "expectedReturn", type: "number", isRequired: true, value: IObyID?.data?.expectedReturn ? IObyID?.data?.expectedReturn : "---", section: " ", width: "32.3%", }, { label: "Expected Return (Arabic)", name: "expectedReturnArabic", placeHolder: "$00.00", type: "number", isRequired: true, arabic: true, value: IObyID?.data?.expectedReturnArabic ? IObyID?.data?.expectedReturnArabic : "---", section: " ", width: "32.3%", }, { label: "Shariah", name: "isShariah", type: "checkBox", // isRequired: true, section: " ", width: "32.3%", value: IObyID?.data?.isShariah, }, { label: "Investment Type", placeHolder: "Select option", value: IObyID?.data?.investmentType?.investmentTypeName ? IObyID?.data?.investmentType?.investmentTypeName : "---", name: "investmentType_xid", type: "select", isRequired: true, section: " ", width: "32.3%", }, { label: "Sponsor Name", placeHolder: "Select option", name: "sponsor_xid", type: "select", // options: sponserNameOption, value: IObyID?.data?.sponsor?.sponsorName ? IObyID?.data?.sponsor?.sponsorName : "---", section: " ", isRequired: true, width: "32.3%", }, { label: "Goal Amount", placeHolder: "$00.00", value: IObyID?.data?.goalAmount?parseFloat(IObyID?.data?.goalAmount||0).toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2 }) : "---", name: "goalAmount", type: "number", isRequired: true, arabic:true, section: " ", width: "32.3%", }, { label: "Closing Date", name: "closingDate", type: "date", isRequired: true, value: IObyID?.data?.closingDate ? formatDate(IObyID?.data?.closingDate) : "---", section: " ", width: "32.3%", }, { label: "ISIN", placeHolder: "$00.00", name: "ISIN", value: IObyID?.data?.ISIN ? IObyID?.data?.ISIN : "---", type: "number", section: " ", width: "32.3%", align:"right" }, { label: "Investment Details", placeHolder: "", name: "InvestmentDetails", value: IObyID?.data?.InvestmentDetails ? IObyID?.data?.InvestmentDetails : "---", type: "text", section: " ", width: "32.3%", }, { label: "Minimum Investment", placeHolder: "Enter comment here", name: "table", type: "table", section: " ", width: "100%", isRequired: true, value: minInvestmentById, }, { label: "Comment", placeHolder: "Enter comment here", name: "comment", type: "textarea", value: IObyID?.data?.comment ? IObyID?.data?.comment : "---", section: " ", width: "100%", }, ]; const groupedFields = formFields.reduce((groups, field) => { const { section } = field; if (!groups[section]) { groups[section] = []; } groups[section].push(field); return groups; }, {}); if (!IObyID?.data) { return ; } return ( ); }; export default ViewIOdetails;