From 6d3d23364af2cce9916eb853c0da9ea5019c6b48 Mon Sep 17 00:00:00 2001 From: Saumitra-agrahari Date: Sun, 10 May 2026 17:24:43 +0530 Subject: [PATCH] Add patent module dashboard UI components --- src/App.jsx | 109 +- src/Modules/Patent/PatentModulePage.jsx | 31 + .../Applicant/ApplicantMainDashboard.jsx | 109 ++ .../Dashboard/ApplicantDashboard.jsx | 322 ++++ .../Applicant/Dashboard/DownloadsSection.jsx | 179 +++ .../Notifications/ApplicantNotifications.jsx | 180 +++ .../SavedDrafts/ApplicationDraft.jsx | 142 ++ .../SubmitNewApplication/ApplicantSubmit.jsx | 52 + .../SubmitNewApplication/ApplicationForm.jsx | 1323 ++++++++++++++++ .../ViewApplication/ApplicationView.jsx | 1218 +++++++++++++++ .../Attorney/AttorneyMainDashboard.jsx | 147 ++ .../Director/Dashboard/DirectorDashboard.jsx | 186 +++ .../Director/Dashboard/DirectorDownloads.jsx | 138 ++ .../Director/Dashboard/DirectorInsights.jsx | 17 + .../Director/DirectorMainDashboard.jsx | 101 ++ .../Director/NewApplications/StatusView.jsx | 647 ++++++++ .../NewApplications/SubmittedApplications.jsx | 211 +++ .../Notifications/DirectorNotifications.jsx | 226 +++ .../ReviewedApplications/RecentsView.jsx | 201 +++ .../PCCAdmin/Dashboard/DownloadsPage.jsx | 165 ++ .../PCCAdmin/Dashboard/InsightsPage.jsx | 188 +++ .../PCCAdmin/Dashboard/PCCAdminDashboard.jsx | 133 ++ .../ManageAttorney/AddNewAttorneyForm.jsx | 127 ++ .../ManageAttorney/AttorneyDetailsForm.jsx | 263 ++++ .../ManageAttorney/ManageAttorneys.jsx | 259 ++++ .../PCCAdmin/NewApplication/NewApplicaion.jsx | 330 ++++ .../NewApplication/ViewNewApplication.jsx | 1165 ++++++++++++++ .../Notifications/PCCAdminNotification.jsx | 226 +++ .../OngoingApplication/OngoingApplication.jsx | 489 ++++++ .../ViewOngoingApplication.jsx | 1367 +++++++++++++++++ .../components/PCCAdmin/PCCAStatusView.jsx | 526 +++++++ .../PCCAdmin/PCCAdminMainDashboard.jsx | 114 ++ .../PastApplication/PastApplications.jsx | 390 +++++ .../PastApplication/ViewPastApplication.jsx | 702 +++++++++ .../components/common/LoadingSpinner.jsx | 26 + .../forms/PatentApplicationForm.jsx | 1 + .../tables/PatentApplicationsTable.jsx | 1 + src/Modules/Patent/pages/PatentModulePage.jsx | 41 + src/Modules/Patent/routes/PatentRoutes.jsx | 71 + src/Modules/Patent/services/api.js | 22 + .../Patent/services/applicantService.js | 44 + .../Patent/services/attorneyService.jsx | 253 +++ .../Patent/services/directorService.js | 72 + .../Patent/services/documentService.jsx | 42 + .../Patent/services/pccAdminService.js | 364 +++++ .../style/Applicant/ApplicantDashboard.css | 189 +++ .../style/Applicant/ApplicantSubmit.css | 101 ++ .../style/Applicant/ApplicationDraft.css | 53 + .../style/Applicant/ApplicationView.css | 648 ++++++++ .../style/Director/DirectorDashboard.css | 141 ++ .../Patent/style/Director/RecentsView.css | 199 +++ .../Patent/style/Director/StatusView.css | 198 +++ .../style/Director/SubmittedApplications.css | 208 +++ .../style/Pcc_Admin/AttorneyDetails.css | 156 ++ .../Patent/style/Pcc_Admin/AttorneyForm.css | 123 ++ .../Patent/style/Pcc_Admin/DownloadsPage.css | 185 +++ .../Patent/style/Pcc_Admin/InsightsPage.css | 222 +++ .../style/Pcc_Admin/ManageAttorneys.css | 221 +++ .../Patent/style/Pcc_Admin/NewApplication.css | 266 ++++ .../style/Pcc_Admin/NewAttorneyForm.css | 157 ++ .../style/Pcc_Admin/OngoingApplication.css | 151 ++ .../Patent/style/Pcc_Admin/PCCAStatus.css | 236 +++ .../style/Pcc_Admin/PCCAdminDashboard.css | 104 ++ .../style/Pcc_Admin/PastApplications.css | 173 +++ .../style/Pcc_Admin/ReviewApplication.css | 164 ++ .../style/Pcc_Admin/ReviewComponent.css | 88 ++ .../style/Pcc_Admin/StatusOfApplications.css | 111 ++ .../style/Pcc_Admin/ViewNewApplication.css | 311 ++++ .../Pcc_Admin/ViewOngoingApplication.css | 273 ++++ .../style/Pcc_Admin/ViewPastApplications.css | 246 +++ src/Modules/Patent/utils/helpers.js | 17 + src/components/sidebarContent.jsx | 28 +- src/services/patentService.js | 180 +++ 73 files changed, 18046 insertions(+), 23 deletions(-) create mode 100644 src/Modules/Patent/PatentModulePage.jsx create mode 100644 src/Modules/Patent/components/Applicant/ApplicantMainDashboard.jsx create mode 100644 src/Modules/Patent/components/Applicant/Dashboard/ApplicantDashboard.jsx create mode 100644 src/Modules/Patent/components/Applicant/Dashboard/DownloadsSection.jsx create mode 100644 src/Modules/Patent/components/Applicant/Notifications/ApplicantNotifications.jsx create mode 100644 src/Modules/Patent/components/Applicant/SavedDrafts/ApplicationDraft.jsx create mode 100644 src/Modules/Patent/components/Applicant/SubmitNewApplication/ApplicantSubmit.jsx create mode 100644 src/Modules/Patent/components/Applicant/SubmitNewApplication/ApplicationForm.jsx create mode 100644 src/Modules/Patent/components/Applicant/ViewApplication/ApplicationView.jsx create mode 100644 src/Modules/Patent/components/Attorney/AttorneyMainDashboard.jsx create mode 100644 src/Modules/Patent/components/Director/Dashboard/DirectorDashboard.jsx create mode 100644 src/Modules/Patent/components/Director/Dashboard/DirectorDownloads.jsx create mode 100644 src/Modules/Patent/components/Director/Dashboard/DirectorInsights.jsx create mode 100644 src/Modules/Patent/components/Director/DirectorMainDashboard.jsx create mode 100644 src/Modules/Patent/components/Director/NewApplications/StatusView.jsx create mode 100644 src/Modules/Patent/components/Director/NewApplications/SubmittedApplications.jsx create mode 100644 src/Modules/Patent/components/Director/Notifications/DirectorNotifications.jsx create mode 100644 src/Modules/Patent/components/Director/ReviewedApplications/RecentsView.jsx create mode 100644 src/Modules/Patent/components/PCCAdmin/Dashboard/DownloadsPage.jsx create mode 100644 src/Modules/Patent/components/PCCAdmin/Dashboard/InsightsPage.jsx create mode 100644 src/Modules/Patent/components/PCCAdmin/Dashboard/PCCAdminDashboard.jsx create mode 100644 src/Modules/Patent/components/PCCAdmin/ManageAttorney/AddNewAttorneyForm.jsx create mode 100644 src/Modules/Patent/components/PCCAdmin/ManageAttorney/AttorneyDetailsForm.jsx create mode 100644 src/Modules/Patent/components/PCCAdmin/ManageAttorney/ManageAttorneys.jsx create mode 100644 src/Modules/Patent/components/PCCAdmin/NewApplication/NewApplicaion.jsx create mode 100644 src/Modules/Patent/components/PCCAdmin/NewApplication/ViewNewApplication.jsx create mode 100644 src/Modules/Patent/components/PCCAdmin/Notifications/PCCAdminNotification.jsx create mode 100644 src/Modules/Patent/components/PCCAdmin/OngoingApplication/OngoingApplication.jsx create mode 100644 src/Modules/Patent/components/PCCAdmin/OngoingApplication/ViewOngoingApplication.jsx create mode 100644 src/Modules/Patent/components/PCCAdmin/PCCAStatusView.jsx create mode 100644 src/Modules/Patent/components/PCCAdmin/PCCAdminMainDashboard.jsx create mode 100644 src/Modules/Patent/components/PCCAdmin/PastApplication/PastApplications.jsx create mode 100644 src/Modules/Patent/components/PCCAdmin/PastApplication/ViewPastApplication.jsx create mode 100644 src/Modules/Patent/components/common/LoadingSpinner.jsx create mode 100644 src/Modules/Patent/components/forms/PatentApplicationForm.jsx create mode 100644 src/Modules/Patent/components/tables/PatentApplicationsTable.jsx create mode 100644 src/Modules/Patent/pages/PatentModulePage.jsx create mode 100644 src/Modules/Patent/routes/PatentRoutes.jsx create mode 100644 src/Modules/Patent/services/api.js create mode 100644 src/Modules/Patent/services/applicantService.js create mode 100644 src/Modules/Patent/services/attorneyService.jsx create mode 100644 src/Modules/Patent/services/directorService.js create mode 100644 src/Modules/Patent/services/documentService.jsx create mode 100644 src/Modules/Patent/services/pccAdminService.js create mode 100644 src/Modules/Patent/style/Applicant/ApplicantDashboard.css create mode 100644 src/Modules/Patent/style/Applicant/ApplicantSubmit.css create mode 100644 src/Modules/Patent/style/Applicant/ApplicationDraft.css create mode 100644 src/Modules/Patent/style/Applicant/ApplicationView.css create mode 100644 src/Modules/Patent/style/Director/DirectorDashboard.css create mode 100644 src/Modules/Patent/style/Director/RecentsView.css create mode 100644 src/Modules/Patent/style/Director/StatusView.css create mode 100644 src/Modules/Patent/style/Director/SubmittedApplications.css create mode 100644 src/Modules/Patent/style/Pcc_Admin/AttorneyDetails.css create mode 100644 src/Modules/Patent/style/Pcc_Admin/AttorneyForm.css create mode 100644 src/Modules/Patent/style/Pcc_Admin/DownloadsPage.css create mode 100644 src/Modules/Patent/style/Pcc_Admin/InsightsPage.css create mode 100644 src/Modules/Patent/style/Pcc_Admin/ManageAttorneys.css create mode 100644 src/Modules/Patent/style/Pcc_Admin/NewApplication.css create mode 100644 src/Modules/Patent/style/Pcc_Admin/NewAttorneyForm.css create mode 100644 src/Modules/Patent/style/Pcc_Admin/OngoingApplication.css create mode 100644 src/Modules/Patent/style/Pcc_Admin/PCCAStatus.css create mode 100644 src/Modules/Patent/style/Pcc_Admin/PCCAdminDashboard.css create mode 100644 src/Modules/Patent/style/Pcc_Admin/PastApplications.css create mode 100644 src/Modules/Patent/style/Pcc_Admin/ReviewApplication.css create mode 100644 src/Modules/Patent/style/Pcc_Admin/ReviewComponent.css create mode 100644 src/Modules/Patent/style/Pcc_Admin/StatusOfApplications.css create mode 100644 src/Modules/Patent/style/Pcc_Admin/ViewNewApplication.css create mode 100644 src/Modules/Patent/style/Pcc_Admin/ViewOngoingApplication.css create mode 100644 src/Modules/Patent/style/Pcc_Admin/ViewPastApplications.css create mode 100644 src/Modules/Patent/utils/helpers.js create mode 100644 src/services/patentService.js diff --git a/src/App.jsx b/src/App.jsx index 99d55a675..fc136eb48 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -2,6 +2,7 @@ import { createTheme, MantineProvider } from "@mantine/core"; import "@mantine/core/styles.css"; import "@mantine/notifications/styles.css"; import { Route, Routes, Navigate, useLocation } from "react-router-dom"; +import PropTypes from "prop-types"; import { Notifications } from "@mantine/notifications"; import { Layout } from "./components/layout"; import Dashboard from "./Modules/Dashboard/dashboardNotifications"; @@ -15,6 +16,7 @@ import InactivityHandler from "./helper/inactivityhandler"; import Examination from "./Modules/Examination/examination"; import Database from "./Modules/Database/database"; import ProgrammeCurriculumRoutes from "./Modules/Program_curriculum/programmCurriculum"; +import PatentModulePage from "./Modules/Patent/PatentModulePage"; import NotFoundPage from "./components/NotFoundPage"; const theme = createTheme({ @@ -28,60 +30,127 @@ const theme = createTheme({ }, }); +function RequireAuth({ children }) { + const currentLocation = useLocation(); + const token = localStorage.getItem("authToken"); + + if (!token) { + return ( + + ); + } + + return children; +} + +RequireAuth.propTypes = { + children: PropTypes.node.isRequired, +}; + export default function App() { const location = useLocation(); + const hasToken = Boolean(localStorage.getItem("authToken")); + return ( - {location.pathname !== "/accounts/login" && } - {location.pathname !== "/accounts/login" && } + {location.pathname !== "/accounts/login" && hasToken && } + {location.pathname !== "/accounts/login" && hasToken && ( + + )} - } /> + + } + /> - - + + + + + } /> - - + + + + + } /> - - + + + + + } /> - - + + + + + } /> - - + +
+ +
+
+ } + /> + + + + + } /> } /> } /> - } /> - } /> + + + + } + /> + + + + } + /> } />
diff --git a/src/Modules/Patent/PatentModulePage.jsx b/src/Modules/Patent/PatentModulePage.jsx new file mode 100644 index 000000000..6b0c988b3 --- /dev/null +++ b/src/Modules/Patent/PatentModulePage.jsx @@ -0,0 +1,31 @@ +import { useSelector } from "react-redux"; +import ApplicantMainDashboard from "./components/Applicant/ApplicantMainDashboard"; +import DirectorMainDashboard from "./components/Director/DirectorMainDashboard"; +import PCCAdminMainDashboard from "./components/PCCAdmin/PCCAdminMainDashboard"; + +export default function PatentModulePage() { + const role = useSelector((state) => state.user.role); + + if ( + [ + "student", + "alumini", + "Professor", + "Associate Professor", + "Assistant Professor", + "Research Engineer", + ].includes(role) + ) { + return ; + } + + if (role === "Director") { + return ; + } + + if (role === "PCC Admin") { + return ; + } + + return null; +} diff --git a/src/Modules/Patent/components/Applicant/ApplicantMainDashboard.jsx b/src/Modules/Patent/components/Applicant/ApplicantMainDashboard.jsx new file mode 100644 index 000000000..78c872a01 --- /dev/null +++ b/src/Modules/Patent/components/Applicant/ApplicantMainDashboard.jsx @@ -0,0 +1,109 @@ +import React, { useEffect, useState } from "react"; +import { Grid, Container, Loader, Flex, Select } from "@mantine/core"; +import { useDispatch } from "react-redux"; +import { SortAscending } from "@phosphor-icons/react"; +import CustomBreadcrumbs from "../../../../components/Breadcrumbs.jsx"; +import ModuleTabs from "../../../../components/moduleTabs.jsx"; +import SubmitNewApplication from "./SubmitNewApplication/ApplicantSubmit.jsx"; +import ApplicantDashboard from "./Dashboard/ApplicantDashboard.jsx"; +import ViewApplicationsPage from "./ViewApplication/ApplicationView.jsx"; +import SavedDraftsPage from "./SavedDrafts/ApplicationDraft.jsx"; +import NotificationsPage from "./Notifications/ApplicantNotifications.jsx"; +import ApplicationForm from "./SubmitNewApplication/ApplicationForm.jsx"; + +const categories = ["Most Recent", "Tags", "Title"]; + +function ApplicantMainDashboard() { + const [activeTab, setActiveTab] = useState("0"); + const [sortedBy, setSortedBy] = useState("Most Recent"); + const [loading, setLoading] = useState(false); + const dispatch = useDispatch(); + + // Define your tabs here + const tabItems = [ + { title: "Dashboard" }, + { title: "Submit New Application" }, + { title: "View Applications" }, + { title: "Saved Drafts" }, + { title: "Notifications" }, + ]; + + useEffect(() => { + const fetchData = async () => { + const token = localStorage.getItem("authToken"); + if (!token) return console.error("No authentication token found!"); + + try { + setLoading(true); + // Fetch data logic here if needed + } catch (error) { + console.error("Error fetching data:", error); + } finally { + setLoading(false); + } + }; + + fetchData(); + }, [dispatch]); + + return ( + <> + + + + + +