diff --git a/src/Components/CutomBreadcrumb.jsx b/src/Components/CutomBreadcrumb.jsx
new file mode 100644
index 0000000..d11c711
--- /dev/null
+++ b/src/Components/CutomBreadcrumb.jsx
@@ -0,0 +1,104 @@
+import React from "react";
+import {
+ Box,
+ Breadcrumb,
+ BreadcrumbItem,
+ BreadcrumbLink,
+ Text,
+ Button,
+} from "@chakra-ui/react";
+import { Link, useLocation } from "react-router-dom";
+import { nav } from "../Routes/Nav";
+
+const CustomBreadcrumb = () => {
+ const { pathname } = useLocation();
+
+ // Remove leading slash and split path into parts
+ const pathParts = pathname.replace(/^\//, "").split("/");
+
+ // Find the current menu item based on the provided path
+ const findMenuItem = (path) => {
+ let menuItem = null;
+ nav.forEach((menu) => {
+ if (menu.submenu) {
+ menu.submenu.forEach((item) => {
+ if (item.path === path) {
+ menuItem = item;
+ }
+ });
+ }
+ });
+ return menuItem;
+ };
+
+ // Generate breadcrumb items based on the current path
+ const generateBreadcrumbs = (pathParts) => {
+ const breadcrumbs = [];
+ let currentPath = "";
+ pathParts.forEach((part, index) => {
+ currentPath += `/${part}`;
+ const menuItem = findMenuItem(currentPath);
+ if (menuItem) {
+ breadcrumbs.push({ path: currentPath, title: menuItem.title });
+ } else {
+ // For nested paths without direct match, create a custom breadcrumb title
+ const customTitle = part.replace(/-/g, " ").replace(/\b\w/g, (c) => c.toUpperCase());
+ breadcrumbs.push({ path: currentPath, title: customTitle });
+ }
+ });
+ return breadcrumbs;
+ };
+
+ const breadcrumbs = generateBreadcrumbs(pathParts);
+ console.log(breadcrumbs);
+
+ return (
+
+ {" "}
+ {breadcrumbs.map((item, index) => (
+
+
+
+ /
+
+
+
+
+ ))}
+
+ );
+};
+
+export default CustomBreadcrumb;
diff --git a/src/Components/Loaders/FullscreenLoaders.jsx b/src/Components/Loaders/FullscreenLoaders.jsx
index 3d6dfd6..b5fe61a 100644
--- a/src/Components/Loaders/FullscreenLoaders.jsx
+++ b/src/Components/Loaders/FullscreenLoaders.jsx
@@ -8,9 +8,9 @@ const FullscreenLoaders = () => {
justifyContent={"center"}
alignItems={"center"}
w={"100%"}
- h={"90%"}
+ h={"70vh"}
>
-
+
);
};
diff --git a/src/Components/NavBreadCrumbs.jsx b/src/Components/NavBreadCrumbs.jsx
new file mode 100644
index 0000000..490c4d5
--- /dev/null
+++ b/src/Components/NavBreadCrumbs.jsx
@@ -0,0 +1,40 @@
+import React from "react";
+import { Link } from "react-router-dom"; // Adjust this based on your routing setup
+import CustomBreadcrumb from "./CutomBreadcrumb";
+
+const NavBreadcrumbs = ({ nav }) => {
+ // Function to recursively flatten submenu items and add parent titles
+ const flattenNav = (items, parentTitle = "") => {
+ let breadcrumbs = [];
+ items.forEach((item) => {
+ if (item.submenu) {
+ // Add parent title if present
+ breadcrumbs.push({
+ label: parentTitle ? `${parentTitle} / ${item.title}` : item.title,
+ link: null, // Adjust link as per your routing setup
+ });
+ // Recursively flatten submenu items
+ breadcrumbs = [
+ ...breadcrumbs,
+ ...flattenNav(item.submenu, `${parentTitle} / ${item.title}`),
+ ];
+ } else {
+ // If no submenu, add current item as breadcrumb
+ breadcrumbs.push({
+ label: parentTitle ? `${parentTitle} / ${item.title}` : item.title,
+ link: item.path, // Adjust link as per your routing setup
+ });
+ }
+ });
+ return breadcrumbs;
+ };
+
+ // Flatten nav array into breadcrumbs
+ const flattenedNav = flattenNav(nav);
+
+ console.log(nav);
+
+ return ;
+};
+
+export default NavBreadcrumbs;
diff --git a/src/Layout/DefaultLayout.jsx b/src/Layout/DefaultLayout.jsx
index b501cc0..02523fe 100644
--- a/src/Layout/DefaultLayout.jsx
+++ b/src/Layout/DefaultLayout.jsx
@@ -49,6 +49,7 @@ import {
Image,
Alert,
AlertIcon,
+ Breadcrumb,
} from "@chakra-ui/react";
import GlobalStateContext from "../Contexts/GlobalStateContext";
import Cookies from "js-cookie"; // Import the Cookies library
@@ -68,6 +69,8 @@ import { GrManual } from "react-icons/gr";
import { LuContact } from "react-icons/lu";
import shield from "../assets/shield.png";
import SplashScreen from "../Pages/SplashScreen";
+import CutomBreadcrumb from "../Components/CutomBreadcrumb";
+import CustomBreadcrumb from "../Components/CutomBreadcrumb";
const DashboardLayout = ({ isOnline }) => {
const navigate = useNavigate();
@@ -120,8 +123,6 @@ const DashboardLayout = ({ isOnline }) => {
navigate("/login");
};
- console.log();
-
// // Function to get the title based on the route
const getTitle = () => {
switch (true) {
@@ -623,10 +624,11 @@ const DashboardLayout = ({ isOnline }) => {
)}
{/*
@@ -639,6 +641,8 @@ const DashboardLayout = ({ isOnline }) => {
icon
title={getTitle()}
/>
+
+
diff --git a/src/Pages/IO_Management/CreateIO/IODetails.jsx b/src/Pages/IO_Management/CreateIO/IODetails.jsx
index 9e54f81..4514ea9 100644
--- a/src/Pages/IO_Management/CreateIO/IODetails.jsx
+++ b/src/Pages/IO_Management/CreateIO/IODetails.jsx
@@ -97,12 +97,7 @@ const schema = yup.object().shape({
.min(new Date(), "Closing date cannot be in the past"),
ioStatus: yup
- .string()
- .required("Investment Object status is required")
- .oneOf(
- ["open", "pending", "closed"],
- "Investment Object status must be one of 'open', 'pending', or 'closed'"
- ),
+ .string(),
});
const IODetails = ({ enableNextTab, index, isLoading, setIsLoading }) => {
@@ -153,6 +148,8 @@ const IODetails = ({ enableNextTab, index, isLoading, setIsLoading }) => {
resolver: yupResolver(schema),
});
+ console.log(errors);
+
useEffect(() => {
const found = IODetails?.find(
(item) => item?.id.toString() === id?.toString()
@@ -515,8 +512,10 @@ const IODetails = ({ enableNextTab, index, isLoading, setIsLoading }) => {
return enableNextTab(index);
}
const id = generateUniqueId();
- setValue("id", id)
- const updatedData = { ...data, id };
+ const status = "Draft"
+ // setValue("id", id)
+ console.log(data);
+ const updatedData = { ...data, id, ioStatus : status };
console.log(data);
// Add the updated data to the IODetails array
diff --git a/src/Pages/IO_Management/ViewIO/HeaderModal/AmountInvested.jsx b/src/Pages/IO_Management/ViewIO/HeaderModal/AmountInvested.jsx
index 15a1674..1d385b8 100644
--- a/src/Pages/IO_Management/ViewIO/HeaderModal/AmountInvested.jsx
+++ b/src/Pages/IO_Management/ViewIO/HeaderModal/AmountInvested.jsx
@@ -43,19 +43,32 @@ const AmountInvested = ({ isOpen, onClose }) => {
size="sm"
rounded={'sm'}
textAlign={'end'}
+ readOnly
+ value={"$ 100000"}
focusBorderColor="forestGreen.300"
fontSize={"sm"} placeholder="$00.00" />
+
+ Amount to invest
+
+
+
- Comments
+ IO Cash
-
+ fontSize={"sm"} />
diff --git a/src/Pages/IO_Management/ViewIO/HeaderModal/Cancle.jsx b/src/Pages/IO_Management/ViewIO/HeaderModal/Cancle.jsx
new file mode 100644
index 0000000..b906ea3
--- /dev/null
+++ b/src/Pages/IO_Management/ViewIO/HeaderModal/Cancle.jsx
@@ -0,0 +1,63 @@
+import {
+ Box,
+ Button,
+ FormControl,
+ FormLabel,
+ Input,
+ Modal,
+ ModalBody,
+ ModalCloseButton,
+ ModalContent,
+ ModalFooter,
+ ModalHeader,
+ ModalOverlay,
+ Text,
+ Textarea,
+ } from "@chakra-ui/react";
+
+ const Cancle = ({ isOpen, onClose }) => {
+ return (
+
+
+
+ Cancel
+
+
+
+ Comment
+
+
+
+
+
+
+
+
+
+
+ );
+ };
+
+ export default Cancle;
+
\ No newline at end of file
diff --git a/src/Pages/IO_Management/ViewIO/HeaderModal/DistributionInvestor.jsx b/src/Pages/IO_Management/ViewIO/HeaderModal/DistributionInvestor.jsx
index 68b2fab..362a049 100644
--- a/src/Pages/IO_Management/ViewIO/HeaderModal/DistributionInvestor.jsx
+++ b/src/Pages/IO_Management/ViewIO/HeaderModal/DistributionInvestor.jsx
@@ -3,6 +3,7 @@ import {
Button,
FormControl,
FormLabel,
+ HStack,
Input,
Modal,
ModalBody,
@@ -11,54 +12,218 @@ import {
ModalFooter,
ModalHeader,
ModalOverlay,
+ Switch,
+ Table,
+ Tbody,
Text,
Textarea,
+ Th,
+ Tr,
} from "@chakra-ui/react";
+import DataTable from "../../../../Components/DataTable/DataTable";
+import { useState } from "react";
+import { AddIcon } from "@chakra-ui/icons";
const DistributionInvestor = ({ isOpen, onClose }) => {
+
+ // ====================================================[Table Setup]================================================================
+ const tableHeadRow = [
+ "Sr No.",
+ "Client Id",
+ "First name",
+ "Last Name",
+ "Amount",
+ "%",
+ "($)",
+ ];
+
+ const filteredData = [
+ {
+ id: 1,
+ },
+ {
+ id: 1,
+ },
+ {
+ id: 1,
+ },
+ {
+ id: 1,
+ },]
+
+ const [extractedArray, setExtractedArray] = useState(
+ filteredData?.map((item, index) => ({
+ id: item?.id,
+ "Sr No.":
+
+
+ {index + 1}
+
+ ,
+ "Client Id": (
+
+
+ BH00000001
+
+
+ ),
+ "First name": (
+
+
+ Faisal
+
+
+ ),
+ "Last Name": (
+
+
+ Aljalahma
+
+
+ ),
+ "Amount": (
+
+
+ $100,000 /-
+
+
+ ),
+ "%": (
+
+
+ 26.0 %
+
+
+ ),
+ "($)": (
+
+
+ $100,000 /-
+
+
+ ),
+ }))
+ );
+
+
+ const Total = () => {
+ return (
+
+
+
+ |
+ Total
+ |
+
+ {" "}
+ |
+
+ {" "}
+ |
+
+ {" "}
+ |
+
+ $100200
+ |
+
+ {" "}
+ |
+
+
+ $100230
+ |
+
+
+
+ );
+ };
+
+
+
+
+
return (
-
+
-
+
Distribution To investors
-
-
-
- Date
-
-
-
+
-
- Amount
-
-
+
+
+
+ } size={'sm'} rounded={'sm'} colorScheme="green">Add
+
-
-
- Comments
-
-
-
+ }
+ // isLoading={isLoading}
+ />
+
-
+ {/*
-
+ */}
+
+
+
);
diff --git a/src/Pages/IO_Management/ViewIO/HeaderModal/Exit.jsx b/src/Pages/IO_Management/ViewIO/HeaderModal/Exit.jsx
new file mode 100644
index 0000000..eb3c41a
--- /dev/null
+++ b/src/Pages/IO_Management/ViewIO/HeaderModal/Exit.jsx
@@ -0,0 +1,86 @@
+import {
+ Box,
+ Button,
+ FormControl,
+ FormLabel,
+ Input,
+ Modal,
+ ModalBody,
+ ModalCloseButton,
+ ModalContent,
+ ModalFooter,
+ ModalHeader,
+ ModalOverlay,
+ Text,
+ Textarea,
+ } from "@chakra-ui/react";
+
+ const Exit = ({ isOpen, onClose }) => {
+ return (
+
+
+
+ Amount Invested
+
+
+
+
+ Date
+
+
+
+
+
+ IO NAV
+
+
+
+
+ Distribution
+
+
+
+
+
+
+
+
+
+
+ );
+ };
+
+ export default Exit;
+
\ No newline at end of file
diff --git a/src/Pages/IO_Management/ViewIO/HeaderModal/UpdateIOStatus.jsx b/src/Pages/IO_Management/ViewIO/HeaderModal/UpdateIOStatus.jsx
index 7680bb9..46afc69 100644
--- a/src/Pages/IO_Management/ViewIO/HeaderModal/UpdateIOStatus.jsx
+++ b/src/Pages/IO_Management/ViewIO/HeaderModal/UpdateIOStatus.jsx
@@ -54,7 +54,7 @@ const UpdateIOStatus = ({ isOpen, onClose }) => {
diff --git a/src/Pages/IO_Management/ViewIO/ViewIOdataHeader.jsx b/src/Pages/IO_Management/ViewIO/ViewIOdataHeader.jsx
index cb8e17a..5318087 100644
--- a/src/Pages/IO_Management/ViewIO/ViewIOdataHeader.jsx
+++ b/src/Pages/IO_Management/ViewIO/ViewIOdataHeader.jsx
@@ -22,6 +22,7 @@ import {
MenuDivider,
Badge,
Box,
+ Icon,
} from "@chakra-ui/react";
import header from "../../../assets/IOheader.png";
import { HiDotsVertical } from "react-icons/hi";
@@ -34,9 +35,13 @@ import UpdateIONav from "./HeaderModal/UpdateIONav";
import UpdateIOStatus from "./HeaderModal/UpdateIOStatus";
import { useContext, useRef } from "react";
import GlobalStateContext from "../../../Contexts/GlobalStateContext";
+import Exit from "./HeaderModal/Exit";
+import Cancle from "./HeaderModal/Cancle";
+import { AddIcon } from "@chakra-ui/icons";
+import { GrGallery } from "react-icons/gr";
const ViewIOdataHeader = () => {
- const params = useParams()
+ const params = useParams();
const id = params?.id;
const { isOpen, onOpen, onClose } = useDisclosure();
const btnRef = useRef();
@@ -45,7 +50,6 @@ const ViewIOdataHeader = () => {
(item) => item?.id.toString() === id?.toString()
);
-
const {
isOpen: isInvestmentOpen,
onOpen: onInvestmentOpen,
@@ -76,6 +80,17 @@ const ViewIOdataHeader = () => {
onOpen: onUpdateStatusOpen,
onClose: onUpdateStatusClose,
} = useDisclosure();
+ const {
+ isOpen: isExitOpen,
+ onOpen: onExitOpen,
+ onClose: onExitClose,
+ } = useDisclosure();
+ const {
+ isOpen: isCancleOpen,
+ onOpen: onCancleOpen,
+ onClose: onCancleClose,
+ } = useDisclosure();
+
const bg = {
bg: "#fff",
@@ -109,8 +124,11 @@ const ViewIOdataHeader = () => {
borderRadius={"10px"}
position={"relative"}
>
-
-
+
+ {/* */}
+
+
+
{/*
@@ -121,37 +139,35 @@ const ViewIOdataHeader = () => {
*/}
-
+
IO Name
- {id ? foundObject?.ioName : "N/A"}
+ {id ? foundObject?.ioName : "---"}
-
Sponsorer Name
- {id ? foundObject?.sponserName : "N/A"}
+ {id ? foundObject?.sponserName : "---"}
-
IO Status
{
: "red"
}
>
- {id ? foundObject?.ioStatus : "N/A"}
+ {id ? foundObject?.ioStatus : "---"}
@@ -175,8 +191,7 @@ const ViewIOdataHeader = () => {
IO MV NAV
- {id? "$42012.00" : "N/A"}
-
+ {id ? "$42012.00" : "---"}
@@ -184,7 +199,7 @@ const ViewIOdataHeader = () => {
IO cash
- {id ?"$48,000" : "N/A"}
+ {id ? "$48,000" : "---"}
@@ -192,7 +207,7 @@ const ViewIOdataHeader = () => {
IO NAV
- {id ? "$1,140,500" : "N/A"}
+ {id ? "$1,140,500" : "---"}
@@ -215,24 +230,34 @@ const ViewIOdataHeader = () => {
-
@@ -322,6 +347,8 @@ const ViewIOdataHeader = () => {
{/* Modals */}
+
+
{
const navigate = useNavigate()
@@ -117,7 +118,7 @@ const ViewIOdetails = () => {
}, {});
if (!foundObject) {
- return Loading...;
+ return ;
}
return
diff --git a/src/Pages/Investor_Management/InvestorDetails/InvestorDetails.jsx b/src/Pages/Investor_Management/InvestorDetails/InvestorDetails.jsx
index 7c63135..08104d4 100644
--- a/src/Pages/Investor_Management/InvestorDetails/InvestorDetails.jsx
+++ b/src/Pages/Investor_Management/InvestorDetails/InvestorDetails.jsx
@@ -296,6 +296,20 @@ const InvestorDetails = () => {
+
+