From c7976a5a0a3761071ccdc9119dbbe6c328195b1f Mon Sep 17 00:00:00 2001 From: Kartik Sharma Date: Thu, 30 Oct 2025 12:06:57 +0530 Subject: [PATCH 01/18] Changes in Expense List at heading Expense Type to Expense Category. --- src/components/Expenses/ExpenseList.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/Expenses/ExpenseList.jsx b/src/components/Expenses/ExpenseList.jsx index 752ad7b4..27e06345 100644 --- a/src/components/Expenses/ExpenseList.jsx +++ b/src/components/Expenses/ExpenseList.jsx @@ -124,7 +124,7 @@ const ExpenseList = ({ filters, groupBy = "transactionDate", searchText }) => { }, { key: "expensesType", - label: "Expense Type", + label: "Expense Category", getValue: (e) => e.expensesType?.name || "N/A", align: "text-start", }, From 565ce3f757dc700dd6a387f848447afd24ad3f08 Mon Sep 17 00:00:00 2001 From: Kartik Sharma Date: Thu, 30 Oct 2025 12:16:25 +0530 Subject: [PATCH 02/18] UI changes in View popup at attendance logs --- src/components/Activities/AttendLogs.jsx | 29 +++++++++++++++--------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/src/components/Activities/AttendLogs.jsx b/src/components/Activities/AttendLogs.jsx index 7c1e686d..39af03ab 100644 --- a/src/components/Activities/AttendLogs.jsx +++ b/src/components/Activities/AttendLogs.jsx @@ -123,12 +123,15 @@ const AttendLogs = ({ Id }) => { }, []); return (
-
+
+
Attendance Logs
{logs && !loading && ( -

- Attendance logs for{" "} - {logs[0]?.employee?.firstName + " " + logs[0]?.employee?.lastName}{" "} - on {formatUTCToLocalTime(logs[0]?.activityTime)} +

+ Showing logs for{" "} + + {logs[0]?.employee?.firstName + " " + logs[0]?.employee?.lastName} + {" "} + on {formatUTCToLocalTime(logs[0]?.activityTime)}

)}
@@ -142,9 +145,9 @@ const AttendLogs = ({ Id }) => { + - @@ -156,11 +159,16 @@ const AttendLogs = ({ Id }) => { .sort((a, b) => b.id - a.id) .map((log, index) => ( - - + + + From f7c55b4e6749647366d7f18c091e1536a6267a00 Mon Sep 17 00:00:00 2001 From: Kartik Sharma Date: Thu, 30 Oct 2025 15:35:51 +0530 Subject: [PATCH 05/18] Changes in Attendance tabs. --- src/pages/Activities/AttendancePage.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/Activities/AttendancePage.jsx b/src/pages/Activities/AttendancePage.jsx index b2a0c39b..5b07002e 100644 --- a/src/pages/Activities/AttendancePage.jsx +++ b/src/pages/Activities/AttendancePage.jsx @@ -179,7 +179,7 @@ const AttendancePage = () => { {/* Search + Organization filter */} -
+
Activity Date TimeActivity Location Recored By Description
{formatUTCToLocalTime(log.activityTime)}{convertShortTime(log.activityTime)} {whichActivityPerform(log.activity, log.activityTime)} +
+ {formatUTCToLocalTime(log.activityTime)} +
+
{convertShortTime(log.activityTime)} {log?.latitude != 0 ? ( { )} - {`${log?.updatedByEmployee?.firstName ?? ""} ${ - log?.updatedByEmployee?.lastName ?? "" - }`} + {`${log?.updatedByEmployee?.firstName ?? ""} ${log?.updatedByEmployee?.lastName ?? "" + }`} {log?.comment?.length > 50 From 8fb2091dbd077c950cc56244028f0f7aacd51581 Mon Sep 17 00:00:00 2001 From: Kartik Sharma Date: Thu, 30 Oct 2025 16:30:29 +0530 Subject: [PATCH 03/18] Changes in Expense Component UI. --- src/components/Expenses/ExpenseList.jsx | 4 ++-- src/pages/Expense/ExpensePage.jsx | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/components/Expenses/ExpenseList.jsx b/src/components/Expenses/ExpenseList.jsx index 27e06345..eeb4cc5b 100644 --- a/src/components/Expenses/ExpenseList.jsx +++ b/src/components/Expenses/ExpenseList.jsx @@ -267,10 +267,10 @@ const ExpenseList = ({ filters, groupBy = "transactionDate", searchText }) => {
{" "} - + {displayField} :{" "} {" "} - + {IsGroupedByDate ? formatUTCToLocalTime(key) : key} diff --git a/src/pages/Expense/ExpensePage.jsx b/src/pages/Expense/ExpensePage.jsx index f5c3ea5d..09064cd8 100644 --- a/src/pages/Expense/ExpensePage.jsx +++ b/src/pages/Expense/ExpensePage.jsx @@ -115,7 +115,7 @@ const ExpensePage = () => { {IsViewAll || IsViewSelf || IsCreatedAble ? ( <>
-
+
Date: Thu, 30 Oct 2025 14:59:21 +0530 Subject: [PATCH 04/18] Changes in UI of Attendance Tabs --- src/components/Activities/Attendance.jsx | 37 ++++++++------ src/components/Activities/AttendcesLogs.jsx | 53 +++++++++++---------- 2 files changed, 49 insertions(+), 41 deletions(-) diff --git a/src/components/Activities/Attendance.jsx b/src/components/Activities/Attendance.jsx index b7ddfaff..24f1ff38 100644 --- a/src/components/Activities/Attendance.jsx +++ b/src/components/Activities/Attendance.jsx @@ -110,25 +110,32 @@ const Attendance = ({ getRole, handleModalData, searchTerm, projectId, organizat return ( <> +
+ {/* Left side - Date */} +
+ Date: {formatUTCToLocalTime(todayDate)} +
+ + {/* Right side - Pending Attendance toggle */} +
+ setShowPending(e.target.checked)} + /> + +
+
-
- Date : {formatUTCToLocalTime(todayDate)} -
- setShowPending(e.target.checked)} - /> - -
-
{attLoading ? (
Loading...
) : currentItems?.length > 0 ? ( diff --git a/src/components/Activities/AttendcesLogs.jsx b/src/components/Activities/AttendcesLogs.jsx index 4660f956..3b544b7c 100644 --- a/src/components/Activities/AttendcesLogs.jsx +++ b/src/components/Activities/AttendcesLogs.jsx @@ -174,37 +174,38 @@ const AttendanceLog = ({ handleModalData, searchTerm, organizationId }) => { return ( <>
-
- {/* Date Range Picker */} -
- -
- - {/* Pending Attendance Switch */} -
- setShowPending(e.target.checked)} - /> - -
+ {/* Left Side - Date Picker */} +
+
+ {/* Right Side - Pending Attendance Switch */} +
+ setShowPending(e.target.checked)} + /> + +
+
{ className="table-row-header" >
- + {moment(currentDate).format("DD-MM-YYYY")}
@@ -179,9 +178,8 @@ const EmpAttendance = () => { {[...Array(totalPages)].map((_, index) => (
  • ))}
  • @@ -290,8 +287,8 @@ const Teams = () => { )} diff --git a/src/components/gallary/ImageGalleryListView.jsx b/src/components/gallary/ImageGalleryListView.jsx index 6973f6f0..af5cfbc2 100644 --- a/src/components/gallary/ImageGalleryListView.jsx +++ b/src/components/gallary/ImageGalleryListView.jsx @@ -7,8 +7,7 @@ import { useSelectedProject } from "../../slices/apiDataManager"; import { ITEMS_PER_PAGE } from "../../utils/constants"; import Pagination from "../common/Pagination"; import { formatUTCToLocalTime } from "../../utils/dateUtils"; -import Loader from "../common/Loader"; - +import { SpinnerLoader } from "../common/Loader"; const ImageGalleryListView = ({filter}) => { const [hoveredImage, setHoveredImage] = useState(null); const selectedProject = useSelectedProject(); @@ -44,10 +43,10 @@ const ImageGalleryListView = ({filter}) => { } - if (isLoading) { + if (isLoading) { return (
    - +
    ); } diff --git a/src/pages/Directory/ContactsPage.jsx b/src/pages/Directory/ContactsPage.jsx index 195ebb96..15fc9535 100644 --- a/src/pages/Directory/ContactsPage.jsx +++ b/src/pages/Directory/ContactsPage.jsx @@ -11,8 +11,7 @@ import { defaultContactFilter } from "../../components/Directory/DirectorySchema import { useDebounce } from "../../utils/appUtils"; import Pagination from "../../components/common/Pagination"; import ListViewContact from "../../components/Directory/ListViewContact"; -import Loader from "../../components/common/Loader"; - +import { SpinnerLoader } from "../../components/common/Loader"; // Utility for CSV export const formatExportData = (contacts) => { return contacts.map((contact) => ({ @@ -113,7 +112,14 @@ const ContactsPage = ({ projectId, searchText, onExport }) => { {/* Grid / List View */} {gridView ? ( <> - {isLoading && } + {isLoading && ( +
    + +
    + )} {data?.data?.length === 0 && (
    diff --git a/src/pages/Tenant/SelfTenantDetails.jsx b/src/pages/Tenant/SelfTenantDetails.jsx index ea4b107d..2e3fbb38 100644 --- a/src/pages/Tenant/SelfTenantDetails.jsx +++ b/src/pages/Tenant/SelfTenantDetails.jsx @@ -3,7 +3,7 @@ import { useProfile } from "../../hooks/useProfile"; import TenantDetails from "./TenantDetails"; import { VIEW_TENANTS } from "../../utils/constants"; import { useNavigate } from "react-router-dom"; -import Loader from "../../components/common/Loader"; +import { SpinnerLoader } from "../../components/common/Loader"; import { useHasUserPermission } from "../../hooks/useHasUserPermission"; const SelfTenantDetails = () => { @@ -19,7 +19,7 @@ const SelfTenantDetails = () => { }, [isSelfTenantView, navigate]); if (loading || !tenantId) { - return ; + return ; } return ( diff --git a/src/pages/Tenant/TenantDetails.jsx b/src/pages/Tenant/TenantDetails.jsx index d799522e..8d744293 100644 --- a/src/pages/Tenant/TenantDetails.jsx +++ b/src/pages/Tenant/TenantDetails.jsx @@ -7,7 +7,7 @@ import { ComingSoonPage } from "../Misc/ComingSoonPage"; import GlobalModel from "../../components/common/GlobalModel"; import EditProfile from "../../components/Tenant/EditProfile"; import SubScriptionHistory from "../../components/Tenant/SubScriptionHistory"; -import Loader from "../../components/common/Loader"; +import { SpinnerLoader } from "../../components/common/Loader"; import { useHasUserPermission } from "../../hooks/useHasUserPermission"; import { MANAGE_TENANTS, SUPPER_TENANT } from "../../utils/constants"; @@ -71,8 +71,11 @@ const TenantDetails = ({ if (!activeTenantId) return
    No tenant selected.
    ; if (isLoading) return ( -
    - +
    +
    ); if (isError) @@ -110,14 +113,14 @@ const TenantDetails = ({ data={ iTSelf ? [ - { label: "Home", link: "/dashboard" }, - { label: "Tenant Details", link: null }, - ] + { label: "Home", link: "/dashboard" }, + { label: "Tenant Details", link: null }, + ] : [ - { label: "Home", link: "/dashboard" }, - { label: "Tenant", link: "/tenants" }, - { label: "Tenant Details", link: null }, - ] + { label: "Home", link: "/dashboard" }, + { label: "Tenant", link: "/tenants" }, + { label: "Tenant Details", link: null }, + ] } /> )} @@ -128,9 +131,8 @@ const TenantDetails = ({
  • ); - return :contentBody} />; + return :contentBody} />; }; export default SwitchTenant; \ No newline at end of file diff --git a/src/pages/authentication/TenantSelectionPage.jsx b/src/pages/authentication/TenantSelectionPage.jsx index b8a5398d..5dac4e62 100644 --- a/src/pages/authentication/TenantSelectionPage.jsx +++ b/src/pages/authentication/TenantSelectionPage.jsx @@ -2,7 +2,7 @@ import { useEffect, useState } from "react"; import { useTenants, useSelectTenant, useLogout } from "../../hooks/useAuth.jsx"; import { Link, useNavigate } from "react-router-dom"; import Dashboard from "../../components/Dashboard/Dashboard.jsx"; -import Loader from "../../components/common/Loader.jsx"; +import { SpinnerLoader } from "../../components/common/Loader.jsx"; const TenantSelectionPage = () => { const [pendingTenant, setPendingTenant] = useState(null); @@ -45,7 +45,7 @@ const TenantSelectionPage = () => { isPending || (data?.data?.length === 1 && pendingTenant !== null) ) { - return ; + return ; } if (!data?.data?.length) { diff --git a/src/pages/employee/EmployeeList.jsx b/src/pages/employee/EmployeeList.jsx index 10db6786..d675d5d2 100644 --- a/src/pages/employee/EmployeeList.jsx +++ b/src/pages/employee/EmployeeList.jsx @@ -39,6 +39,7 @@ import { setProjectId } from "../../slices/localVariablesSlice"; import { useHasUserPermission } from "../../hooks/useHasUserPermission"; import Pagination from "../../components/common/Pagination"; import handleEmployeeExport from "../../components/Employee/handleEmployeeExport"; +import { SpinnerLoader } from "../../components/common/Loader"; const EmployeeList = () => { const selectedProjectId = useSelector( @@ -468,12 +469,15 @@ const EmployeeList = () => {
    {loading && ( - )} + {!loading && displayData?.length === 0 && (!searchText) ? ( @@ -649,16 +653,16 @@ const EmployeeList = () => { ))} -
    {emp.reAllocationDate ? moment(emp.reAllocationDate).format( - "DD-MMM-YYYY" - ) + "DD-MMM-YYYY" + ) : "Present"}
    -

    Loading...

    +
    +
    + +
    +
    - {displayData?.length > 0 && ( - - )} + {displayData?.length > 0 && ( + + )} ) : (
    diff --git a/src/pages/project/ProjectDetails.jsx b/src/pages/project/ProjectDetails.jsx index d6fbd55d..011d1e9b 100644 --- a/src/pages/project/ProjectDetails.jsx +++ b/src/pages/project/ProjectDetails.jsx @@ -7,7 +7,7 @@ import AboutProject from "../../components/Project/AboutProject"; import ProjectNav from "../../components/Project/ProjectNav"; import Teams from "../../components/Project/Team/Teams"; import ProjectInfra from "../../components/Project/ProjectInfra"; -import Loader from "../../components/common/Loader"; +import { SpinnerLoader } from "../../components/common/Loader"; import WorkPlan from "../../components/Project/WorkPlan"; import Breadcrumb from "../../components/common/Breadcrumb"; import { useSelectedProject } from "../../slices/apiDataManager"; @@ -20,7 +20,7 @@ import { setProjectId } from "../../slices/localVariablesSlice"; import ProjectDocuments from "../../components/Project/ProjectDocuments"; import ProjectSetting from "../../components/Project/ProjectSetting"; import DirectoryPage from "../Directory/DirectoryPage"; -import { useProjectAccess } from "../../hooks/useProjectAccess"; +import { useProjectAccess } from "../../hooks/useProjectAccess"; import "./ProjectDetails.css"; import ProjectOrganizations from "../../components/Project/ProjectOrganizations"; @@ -65,7 +65,14 @@ const ProjectDetails = () => { }; if (projectLoading || permsLoading || !projects_Details) { - return ; + return ( +
    + +
    + ); } const renderContent = () => { diff --git a/src/pages/project/ProjectPage.jsx b/src/pages/project/ProjectPage.jsx index a85d6f58..3806608d 100644 --- a/src/pages/project/ProjectPage.jsx +++ b/src/pages/project/ProjectPage.jsx @@ -7,8 +7,8 @@ import ManageProjectInfo from "../../components/Project/ManageProjectInfo"; import ProjectCardView from "../../components/Project/ProjectCardView"; import usePagination from "../../hooks/usePagination"; import { useProjects } from "../../hooks/useProjects"; -import Loader from "../../components/common/Loader"; import { useHasUserPermission } from "../../hooks/useHasUserPermission"; +import { SpinnerLoader } from "../../components/common/Loader"; const ProjectContext = createContext(); export const useProjectContext = () => { @@ -95,8 +95,16 @@ const ProjectPage = () => { } }, [data, isLoading, selectedStatuses]); + if (isLoading) + return ( +
    + +
    + ); - if (isLoading) return
    if (isError) return

    {error.message}

    return ( From 166c0794ed9ad2712b88ec956327766887d59743 Mon Sep 17 00:00:00 2001 From: Kartik Sharma Date: Fri, 31 Oct 2025 15:15:36 +0530 Subject: [PATCH 08/18] Image filter is not auto close when we move to next tab. --- src/components/Expenses/ExpenseFilterPanel.jsx | 2 +- src/components/gallary/GalleryFilterPanel.jsx | 14 ++++++++++---- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/components/Expenses/ExpenseFilterPanel.jsx b/src/components/Expenses/ExpenseFilterPanel.jsx index 3f0085c3..00c1a7f0 100644 --- a/src/components/Expenses/ExpenseFilterPanel.jsx +++ b/src/components/Expenses/ExpenseFilterPanel.jsx @@ -145,7 +145,7 @@ const ExpenseFilterPanel = forwardRef(({ onApply, handleGroupBy, setFilterdata } handleGroupBy, selectedGroup.id, appliedStatusId, - selectedProjectId, // ✅ Added dependency + selectedProjectId, ]); diff --git a/src/components/gallary/GalleryFilterPanel.jsx b/src/components/gallary/GalleryFilterPanel.jsx index d71625a3..760d0587 100644 --- a/src/components/gallary/GalleryFilterPanel.jsx +++ b/src/components/gallary/GalleryFilterPanel.jsx @@ -1,4 +1,4 @@ -import React, { useState } from "react"; +import React, { useEffect, useState } from "react"; import { useImageGalleryFilter } from "../../hooks/useImageGallery"; import { useSelectedProject } from "../../slices/apiDataManager"; import { FormProvider, useForm } from "react-hook-form"; @@ -8,6 +8,7 @@ import { zodResolver } from "@hookform/resolvers/zod"; import { defaultGalleryFilterValue, gallerySchema } from "./GallerySchema"; import SelectMultiple from "../common/SelectMultiple"; import { localToUtc } from "../../utils/appUtils"; +import { useLocation } from "react-router-dom"; const GalleryFilterPanel = ({ onApply }) => { const selectedProject = useSelectedProject(); @@ -27,7 +28,7 @@ const GalleryFilterPanel = ({ onApply }) => { const { handleSubmit, register, - setValue,reset, + setValue, reset, formState: { errors }, } = methods; @@ -40,12 +41,17 @@ const GalleryFilterPanel = ({ onApply }) => { // closePanel() }; - const onClear=()=>{ + const onClear = () => { reset(defaultGalleryFilterValue); - setResetKey((prev) => prev + 1); + setResetKey((prev) => prev + 1); // closePanel() } + const location = useLocation(); + useEffect(() => { + closePanel(); + }, [location]); + if (isLoading) return
    Loading....
    ; if (isError) return
    {error.message}
    ; return ( From 8522f0ca823cf3bf98590fe5f5875685154548ca Mon Sep 17 00:00:00 2001 From: Kartik Sharma Date: Fri, 31 Oct 2025 15:37:26 +0530 Subject: [PATCH 09/18] Correction in Date format in Attendance logs, and adding spinnerloade at attendance tab. --- src/components/Activities/Attendance.jsx | 11 +++++++++-- src/components/Activities/AttendcesLogs.jsx | 12 +++++++----- src/components/Activities/Regularization.jsx | 7 ++++--- src/components/Dashboard/AttendanceChart.jsx | 5 +++-- src/components/Dashboard/Tasks.jsx | 6 +++--- src/pages/Directory/DirectoryPage.jsx | 2 +- 6 files changed, 27 insertions(+), 16 deletions(-) diff --git a/src/components/Activities/Attendance.jsx b/src/components/Activities/Attendance.jsx index 24f1ff38..681434df 100644 --- a/src/components/Activities/Attendance.jsx +++ b/src/components/Activities/Attendance.jsx @@ -11,6 +11,7 @@ import { useSelector } from "react-redux"; import { useQueryClient } from "@tanstack/react-query"; import eventBus from "../../services/eventBus"; import { useSelectedProject } from "../../slices/apiDataManager"; +import { SpinnerLoader } from "../common/Loader"; const Attendance = ({ getRole, handleModalData, searchTerm, projectId, organizationId, }) => { const queryClient = useQueryClient(); @@ -133,12 +134,18 @@ const Attendance = ({ getRole, handleModalData, searchTerm, projectId, organizat
    {attLoading ? ( -
    Loading...
    +
    + +
    ) : currentItems?.length > 0 ? ( + <> diff --git a/src/components/Activities/AttendcesLogs.jsx b/src/components/Activities/AttendcesLogs.jsx index 3b544b7c..f1d8e008 100644 --- a/src/components/Activities/AttendcesLogs.jsx +++ b/src/components/Activities/AttendcesLogs.jsx @@ -1,7 +1,7 @@ import React, { useEffect, useState, useMemo, useCallback } from "react"; import moment from "moment"; import Avatar from "../common/Avatar"; -import { convertShortTime } from "../../utils/dateUtils"; +import { convertShortTime, formatUTCToLocalTime } from "../../utils/dateUtils"; import RenderAttendanceStatus from "./RenderAttendanceStatus"; import { useSelector, useDispatch } from "react-redux"; import DateRangePicker from "../common/DateRangePicker"; @@ -16,6 +16,7 @@ import { useAttendancesLogs } from "../../hooks/useAttendance"; import { queryClient } from "../../layouts/AuthLayout"; import { ITEMS_PER_PAGE } from "../../utils/constants"; import { useNavigate } from "react-router-dom"; +import { SpinnerLoader } from "../common/Loader"; const usePagination = (data, itemsPerPage) => { const [currentPage, setCurrentPage] = useState(1); @@ -207,17 +208,18 @@ const AttendanceLog = ({ handleModalData, searchTerm, organizationId }) => {
    {isLoading ? (
    -

    Loading...

    +
    ) : filteredSearchData?.length > 0 ? ( +
    @@ -257,7 +259,7 @@ const AttendanceLog = ({ handleModalData, searchTerm, organizationId }) => { > diff --git a/src/components/Activities/Regularization.jsx b/src/components/Activities/Regularization.jsx index 954820c2..8e0ff865 100644 --- a/src/components/Activities/Regularization.jsx +++ b/src/components/Activities/Regularization.jsx @@ -15,6 +15,7 @@ import { import { useQueryClient } from "@tanstack/react-query"; import Pagination from "../../components/common/Pagination"; import { useNavigate } from "react-router-dom"; +import { SpinnerLoader } from "../common/Loader"; const Regularization = ({ handleRequest, @@ -106,15 +107,15 @@ const Regularization = ({ return (
    {loading ? (
    -

    Loading...

    +
    ) : currentItems?.length > 0 ? (
    - {moment(currentDate).format("DD-MM-YYYY")} + {formatUTCToLocalTime(currentDate)}
    diff --git a/src/components/Dashboard/AttendanceChart.jsx b/src/components/Dashboard/AttendanceChart.jsx index 67950d9a..1fd024fa 100644 --- a/src/components/Dashboard/AttendanceChart.jsx +++ b/src/components/Dashboard/AttendanceChart.jsx @@ -4,6 +4,7 @@ import ReactApexChart from "react-apexcharts"; import { useAttendanceOverviewData } from "../../hooks/useDashboard_Data"; import flatColors from "../Charts/flatColor"; import ChartSkeleton from "../Charts/Skelton"; +import { SpinnerLoader } from "../common/Loader"; const formatDate = (dateStr) => { const date = new Date(dateStr); @@ -138,9 +139,9 @@ const AttendanceOverview = () => { {/* Content */} -
    +
    {loading ? ( - + ) : error ? (

    {error}

    ) : view === "chart" ? ( diff --git a/src/components/Dashboard/Tasks.jsx b/src/components/Dashboard/Tasks.jsx index c386eb15..76072cfb 100644 --- a/src/components/Dashboard/Tasks.jsx +++ b/src/components/Dashboard/Tasks.jsx @@ -44,9 +44,9 @@ const TasksCard = () => {
    ) : ( -
    +
    {/* Total Tasks */} -
    +

    {formatFigure(tasksCardData?.totalTasks ?? 0, { notation: "compact", @@ -56,7 +56,7 @@ const TasksCard = () => {

    {/* Completed Tasks */} -
    +

    {formatFigure(tasksCardData?.completedTasks ?? 0, { notation: "compact", diff --git a/src/pages/Directory/DirectoryPage.jsx b/src/pages/Directory/DirectoryPage.jsx index e0871446..43c2f823 100644 --- a/src/pages/Directory/DirectoryPage.jsx +++ b/src/pages/Directory/DirectoryPage.jsx @@ -44,7 +44,7 @@ export default function DirectoryPage({ IsPage = true, projectId = null }) { const [searchNote, setSearchNote] = useState(""); const [activeTab, setActiveTab] = useState("notes"); const { setActions } = useFab(); - const [gridView, setGridView] = useState(false); + const [gridView, setGridView] = useState(true); const [isOpenBucket, setOpenBucket] = useState(false); const [isManageContact, setManageContact] = useState({ isOpen: false, From 466b09df88511b3152f1bae24c962cf75f603b86 Mon Sep 17 00:00:00 2001 From: Kartik Sharma Date: Fri, 31 Oct 2025 15:39:27 +0530 Subject: [PATCH 10/18] Correction in Tenant Schema at onboarding date. --- src/components/Tenant/TenantSchema.js | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/src/components/Tenant/TenantSchema.js b/src/components/Tenant/TenantSchema.js index 33fba1c4..e52c53bb 100644 --- a/src/components/Tenant/TenantSchema.js +++ b/src/components/Tenant/TenantSchema.js @@ -20,16 +20,7 @@ export const newTenantSchema = z.object({ contactNumber: z.string().trim() .nonempty("Contact number is required") .regex(/^\+?[1-9]\d{7,14}$/, "Enter a valid contact number"), - onBoardingDate: z.preprocess((val) => { - if (typeof val === "string" && val.includes("-")) { - const [day, month, year] = val.split("-"); - return new Date(`${year}-${month}-${day}`); - } - return val; - }, z.date({ - required_error: "Onboarding date is required", - invalid_type_error: "Invalid date format", - })), + onBoardingDate: z.string().min(1, { message: "Date is required" }), organizationSize: z.string().nonempty("Organization size is required"), industryId: z.string().uuid("Invalid industry ID"), reference: z.string().nonempty("Reference is required"), From 72eb64177f56db86ab27fb94ceeb3686cf96564a Mon Sep 17 00:00:00 2001 From: Kartik Sharma Date: Fri, 31 Oct 2025 15:50:33 +0530 Subject: [PATCH 11/18] Correction in Attendance Overview. --- src/components/Dashboard/AttendanceChart.jsx | 4 ++-- src/components/Dashboard/Dashboard.jsx | 4 ++-- src/components/Dashboard/ExpenseByProject.jsx | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/components/Dashboard/AttendanceChart.jsx b/src/components/Dashboard/AttendanceChart.jsx index 1fd024fa..ea3e2ba4 100644 --- a/src/components/Dashboard/AttendanceChart.jsx +++ b/src/components/Dashboard/AttendanceChart.jsx @@ -100,7 +100,7 @@ const AttendanceOverview = () => { }; return ( -
    +
    {/* Header */}
    @@ -139,7 +139,7 @@ const AttendanceOverview = () => {
    {/* Content */} -
    +
    {loading ? ( ) : error ? ( diff --git a/src/components/Dashboard/Dashboard.jsx b/src/components/Dashboard/Dashboard.jsx index 4c09056a..3d0f0a66 100644 --- a/src/components/Dashboard/Dashboard.jsx +++ b/src/components/Dashboard/Dashboard.jsx @@ -63,12 +63,12 @@ const Dashboard = () => {
    -
    +
    {!isAllProjectsSelected && ( -
    +
    )} diff --git a/src/components/Dashboard/ExpenseByProject.jsx b/src/components/Dashboard/ExpenseByProject.jsx index 6dc2f49a..9d617efe 100644 --- a/src/components/Dashboard/ExpenseByProject.jsx +++ b/src/components/Dashboard/ExpenseByProject.jsx @@ -83,7 +83,7 @@ const ExpenseByProject = () => { ]; return ( -
    +
    {/* Header */}
    From 7b1ed97452baaf4f7dc045b9a68f92453dc56f42 Mon Sep 17 00:00:00 2001 From: Kartik Sharma Date: Fri, 31 Oct 2025 16:42:07 +0530 Subject: [PATCH 12/18] UI changes in Expense Weidget and Attendance weidget. --- src/components/Dashboard/AttendanceChart.jsx | 21 ++++++++----------- src/components/Dashboard/ExpenseByProject.jsx | 8 +++---- 2 files changed, 13 insertions(+), 16 deletions(-) diff --git a/src/components/Dashboard/AttendanceChart.jsx b/src/components/Dashboard/AttendanceChart.jsx index ea3e2ba4..71d14e48 100644 --- a/src/components/Dashboard/AttendanceChart.jsx +++ b/src/components/Dashboard/AttendanceChart.jsx @@ -118,18 +118,16 @@ const AttendanceOverview = () => {

    - + {dates.map((date, idx) => ( - {roles.map((role) => ( {tableData.map((row, idx) => { const value = row[role]; - const cellStyle = - value > 0 ? { backgroundColor: "#d5d5d5" } : {}; + const cellStyle = value > 0 ? { backgroundColor: "#d5d5d5" } : {}; return (
    - Role - Role { ))}
    {role} {value} diff --git a/src/components/Dashboard/ExpenseByProject.jsx b/src/components/Dashboard/ExpenseByProject.jsx index 9d617efe..37b9d211 100644 --- a/src/components/Dashboard/ExpenseByProject.jsx +++ b/src/components/Dashboard/ExpenseByProject.jsx @@ -86,12 +86,12 @@ const ExpenseByProject = () => {
    {/* Header */}
    -
    +
    Monthly Expense -

    {projectName}

    -
    +
    {/* Chart */} -
    +
    {isLoading ? (
    ) : !expenseApiData || expenseApiData.length === 0 ? ( -
    No data found
    +
    No data found
    ) : ( )} From 2596739fc5ba229932bd7f218d62bc4d21a284ab Mon Sep 17 00:00:00 2001 From: Kartik Sharma Date: Fri, 7 Nov 2025 11:36:27 +0530 Subject: [PATCH 13/18] Giving some extra gap in document view form. --- src/components/Documents/DocumentVersionList.jsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/Documents/DocumentVersionList.jsx b/src/components/Documents/DocumentVersionList.jsx index ea1bdc13..851b927f 100644 --- a/src/components/Documents/DocumentVersionList.jsx +++ b/src/components/Documents/DocumentVersionList.jsx @@ -74,7 +74,7 @@ const DocumentVersionList = ({ firstName={currentDoc.uploadedBy?.firstName} lastName={currentDoc.uploadedBy?.lastName} /> - + {`${currentDoc.uploadedBy?.firstName ?? ""} ${currentDoc.uploadedBy?.lastName ?? ""}`.trim() || "N/A"} @@ -216,7 +216,7 @@ const DocumentVersionList = ({ firstName={document.verifiedBy?.firstName} lastName={document.verifiedBy?.lastName} /> - + {`${document.verifiedBy?.firstName ?? ""} ${document.verifiedBy?.lastName ?? ""}`.trim() || "N/A"} From c3d1b468614f46e0440b97ba06ea9a639960710b Mon Sep 17 00:00:00 2001 From: Kartik Sharma Date: Fri, 7 Nov 2025 11:43:22 +0530 Subject: [PATCH 14/18] Increasing some gap in document view button and uploaded by and approved at. --- src/components/Documents/DocumentVersionList.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/Documents/DocumentVersionList.jsx b/src/components/Documents/DocumentVersionList.jsx index 851b927f..9061c52c 100644 --- a/src/components/Documents/DocumentVersionList.jsx +++ b/src/components/Documents/DocumentVersionList.jsx @@ -196,7 +196,7 @@ const DocumentVersionList = ({ firstName={document.uploadedBy?.firstName} lastName={document.uploadedBy?.lastName} /> - + {`${document.uploadedBy?.firstName ?? ""} ${document.uploadedBy?.lastName ?? ""}`.trim() || "N/A"} From 9ef1e390418aa900d7bdd35c2bd88a932ad02710 Mon Sep 17 00:00:00 2001 From: Kartik Sharma Date: Fri, 7 Nov 2025 12:34:57 +0530 Subject: [PATCH 15/18] Changes in Directory card and Notes view at the UI. --- src/components/Directory/CardViewContact.jsx | 2 +- src/components/Directory/NoteCardDirectoryEditable.jsx | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/components/Directory/CardViewContact.jsx b/src/components/Directory/CardViewContact.jsx index 8e6c8068..0b446da0 100644 --- a/src/components/Directory/CardViewContact.jsx +++ b/src/components/Directory/CardViewContact.jsx @@ -61,7 +61,7 @@ const CardViewContact = ({ (contact?.name || "").trim().split(" ")[1]?.charAt(0) || "" } />{" "} - {contact?.name} + {contact?.name}
    {IsActive && ( diff --git a/src/components/Directory/NoteCardDirectoryEditable.jsx b/src/components/Directory/NoteCardDirectoryEditable.jsx index 5ef8d08f..bc6ff517 100644 --- a/src/components/Directory/NoteCardDirectoryEditable.jsx +++ b/src/components/Directory/NoteCardDirectoryEditable.jsx @@ -87,7 +87,7 @@ const NoteCardDirectoryEditable = ({ />
    contactProfile(noteItem.contactId)} > @@ -98,7 +98,7 @@ const NoteCardDirectoryEditable = ({
    -
    +
    by{" "} @@ -184,7 +184,7 @@ const NoteCardDirectoryEditable = ({ ) : (
    )} From 5f2a567600f52ec12a6e68fb4142ff5932ce5f66 Mon Sep 17 00:00:00 2001 From: Kartik Sharma Date: Fri, 7 Nov 2025 12:51:28 +0530 Subject: [PATCH 16/18] Document Filter should close automatically when navigating to another menu from Project Profile page --- .../Documents/DocumentFilterPanel.jsx | 420 +++++++++--------- 1 file changed, 213 insertions(+), 207 deletions(-) diff --git a/src/components/Documents/DocumentFilterPanel.jsx b/src/components/Documents/DocumentFilterPanel.jsx index edc613e1..04f54956 100644 --- a/src/components/Documents/DocumentFilterPanel.jsx +++ b/src/components/Documents/DocumentFilterPanel.jsx @@ -13,230 +13,236 @@ import { useParams } from "react-router-dom"; const DocumentFilterPanel = forwardRef( ({ entityTypeId, onApply, setFilterdata }, ref) => { - const [resetKey, setResetKey] = useState(0); - const { status } = useParams(); + const [resetKey, setResetKey] = useState(0); + const { status } = useParams(); - const { data, isError, isLoading, error } = - useDocumentFilterEntities(entityTypeId); + const { data, isError, isLoading, error } = + useDocumentFilterEntities(entityTypeId); - //changes + useEffect(() => { + return () => { + closePanel(); + }; + }, []); - const dynamicDocumentFilterDefaultValues = useMemo(() => { - return { - ...DocumentFilterDefaultValues, - uploadedByIds: DocumentFilterDefaultValues.uploadedByIds || [], - documentCategoryIds: DocumentFilterDefaultValues.documentCategoryIds || [], - documentTypeIds: DocumentFilterDefaultValues.documentTypeIds || [], - documentTagIds: DocumentFilterDefaultValues.documentTagIds || [], - startDate: DocumentFilterDefaultValues.startDate, - endDate: DocumentFilterDefaultValues.endDate, + //changes + + const dynamicDocumentFilterDefaultValues = useMemo(() => { + return { + ...DocumentFilterDefaultValues, + uploadedByIds: DocumentFilterDefaultValues.uploadedByIds || [], + documentCategoryIds: DocumentFilterDefaultValues.documentCategoryIds || [], + documentTypeIds: DocumentFilterDefaultValues.documentTypeIds || [], + documentTagIds: DocumentFilterDefaultValues.documentTagIds || [], + startDate: DocumentFilterDefaultValues.startDate, + endDate: DocumentFilterDefaultValues.endDate, + }; + + }, [status]); + + const methods = useForm({ + resolver: zodResolver(DocumentFilterSchema), + defaultValues: dynamicDocumentFilterDefaultValues, + }); + + const { handleSubmit, reset, setValue, watch } = methods; + + // Watch values from form + const isUploadedAt = watch("isUploadedAt"); + const isVerified = watch("isVerified"); + + // Close the offcanvas (bootstrap specific) + const closePanel = () => { + document.querySelector(".offcanvas.show .btn-close")?.click(); }; - }, [status]); + useImperativeHandle(ref, () => ({ + resetFieldValue: (name, value) => { + if (value !== undefined) { + setValue(name, value); + } else { + reset({ ...methods.getValues(), [name]: DocumentFilterDefaultValues[name] }); + } + }, + getValues: methods.getValues, // optional, to read current filter state + })); - const methods = useForm({ - resolver: zodResolver(DocumentFilterSchema), - defaultValues: dynamicDocumentFilterDefaultValues, - }); - - const { handleSubmit, reset, setValue, watch } = methods; - - // Watch values from form - const isUploadedAt = watch("isUploadedAt"); - const isVerified = watch("isVerified"); - - // Close the offcanvas (bootstrap specific) - const closePanel = () => { - document.querySelector(".offcanvas.show .btn-close")?.click(); - }; - - useImperativeHandle(ref, () => ({ - resetFieldValue: (name, value) => { - if (value !== undefined) { - setValue(name, value); - } else { - reset({ ...methods.getValues(), [name]: DocumentFilterDefaultValues[name] }); + //changes + useEffect(() => { + if (data && setFilterdata) { + setFilterdata(data); } - }, - getValues: methods.getValues, // optional, to read current filter state - })); + }, [data, setFilterdata]); - //changes - useEffect(() => { - if (data && setFilterdata) { - setFilterdata(data); - } - }, [data, setFilterdata]); + const onSubmit = (values) => { + onApply({ + ...values, + startDate: values.startDate + ? moment.utc(values.startDate, "DD-MM-YYYY").toISOString() + : null, + endDate: values.endDate + ? moment.utc(values.endDate, "DD-MM-YYYY").toISOString() + : null, + }); + // closePanel(); + }; - const onSubmit = (values) => { - onApply({ - ...values, - startDate: values.startDate - ? moment.utc(values.startDate, "DD-MM-YYYY").toISOString() - : null, - endDate: values.endDate - ? moment.utc(values.endDate, "DD-MM-YYYY").toISOString() - : null, - }); - // closePanel(); - }; + const onClear = () => { + reset(DocumentFilterDefaultValues); + setResetKey((prev) => prev + 1); + onApply(DocumentFilterDefaultValues); + // closePanel(); + }; - const onClear = () => { - reset(DocumentFilterDefaultValues); - setResetKey((prev) => prev + 1); - onApply(DocumentFilterDefaultValues); - // closePanel(); - }; + if (isLoading) return
    Loading...
    ; + if (isError) + return
    Error: {error?.message || "Something went wrong!"}
    ; - if (isLoading) return
    Loading...
    ; - if (isError) - return
    Error: {error?.message || "Something went wrong!"}
    ; - - const { - uploadedBy = [], - documentCategory = [], - documentType = [], - documentTag = [], - } = data?.data || {}; + const { + uploadedBy = [], + documentCategory = [], + documentType = [], + documentTag = [], + } = data?.data || {}; - return ( - -
    - {/* Date Range Section */} -
    -
    - -
    - - + return ( + + + {/* Date Range Section */} +
    +
    + +
    + + +
    +
    + + +
    + + {/* Dropdown Filters */} +
    + + + + +
    + + {/* Status Filter */} +
    + +
    + + + + +
    - -
    - - {/* Dropdown Filters */} -
    - - - - -
    - - {/* Status Filter */} -
    - -
    - - - - - + {/* Footer Buttons */} +
    + +
    -
    - - {/* Footer Buttons */} -
    - - -
    - - - ); -}); + + + ); + }); export default DocumentFilterPanel; From 3204602b2504a1531228dc295685f90101dcfc21 Mon Sep 17 00:00:00 2001 From: Kartik Sharma Date: Fri, 31 Oct 2025 17:14:44 +0530 Subject: [PATCH 17/18] Progress Bar Misalignment in Project Widgets on Dashboard --- src/components/Dashboard/ExpenseByProject.jsx | 6 ++++++ src/components/Dashboard/ProjectCompletionChart.jsx | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/components/Dashboard/ExpenseByProject.jsx b/src/components/Dashboard/ExpenseByProject.jsx index 37b9d211..1c87ef33 100644 --- a/src/components/Dashboard/ExpenseByProject.jsx +++ b/src/components/Dashboard/ExpenseByProject.jsx @@ -64,6 +64,12 @@ const ExpenseByProject = () => { categories: chartData.categories, labels: { style: { fontSize: "12px" }, rotate: -45 }, }, + yaxis: { + labels: { + formatter: (val) => formatCurrency(val), + style: { fontSize: "12px", colors: "#555" }, + }, + }, tooltip: { y: { formatter: (val) => `${formatCurrency(val)} (${getSelectedTypeName()})`, diff --git a/src/components/Dashboard/ProjectCompletionChart.jsx b/src/components/Dashboard/ProjectCompletionChart.jsx index decf7918..98ee1d3b 100644 --- a/src/components/Dashboard/ProjectCompletionChart.jsx +++ b/src/components/Dashboard/ProjectCompletionChart.jsx @@ -24,7 +24,7 @@ const ProjectCompletionChart = () => {

    Projects Completion Status

    -
    +
    Date: Fri, 7 Nov 2025 15:15:24 +0530 Subject: [PATCH 18/18] removed unwanted code --- src/components/Expenses/ExpenseList.jsx | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/components/Expenses/ExpenseList.jsx b/src/components/Expenses/ExpenseList.jsx index eeb4cc5b..a8147c45 100644 --- a/src/components/Expenses/ExpenseList.jsx +++ b/src/components/Expenses/ExpenseList.jsx @@ -178,8 +178,6 @@ const ExpenseList = ({ filters, groupBy = "transactionDate", searchText }) => { {e.status?.name || "Unknown"}