1) Handle blank space in menu bar

2) Breadcrum  "Home" link to "Dashboard" on pages where it was missing
This commit is contained in:
Vikas Nale 2025-11-17 18:30:13 +05:30
parent 6860ba3dff
commit 0bd1cea703
7 changed files with 93 additions and 68 deletions

View File

@ -99,7 +99,7 @@ const MenuItem = (item) => {
className={`menu-link ${hasSubmenu ? "menu-toggle" : ""}`}
target={item.link?.includes("http") ? "_blank" : undefined}
>
<i className={`menu-icon tf-icons ${item.icon}`}></i>
{item.icon && <i className={`menu-icon tf-icons ${item.icon}`}></i>}
<div>{item.name}</div>
{item.available === false && (
<div className="badge bg-label-primary fs-tiny rounded-pill ms-auto">

View File

@ -26,7 +26,7 @@ export const useAdvancePaymentContext = () => {
};
const AdvancePaymentPage = () => {
const [balance, setBalance] = useState(null);
const {control, reset, watch } = useForm({
const { control, reset, watch } = useForm({
defaultValues: {
employeeId: "",
},
@ -40,13 +40,12 @@ const AdvancePaymentPage = () => {
});
}, [reset]);
return (
<AdvancePaymentContext.Provider value={{ setBalance }}>
<div className="container-fluid">
<Breadcrumb
data={[
{ label: "Home", link: "/" },
{ label: "Home", link: "/dashboard" },
{ label: "Finance", link: "/advance-payment" },
{ label: "Advance Payment" },
]}
@ -73,7 +72,12 @@ const AdvancePaymentPage = () => {
balance > 0 ? "text-success" : "text-danger"
} fs-5 fw-bold ms-1`}
>
{ balance > 0 ? <i className="bx bx-plus b-sm"></i> : <i className="bx bx-minus b-sm"></i>} {formatFigure(balance, {
{balance > 0 ? (
<i className="bx bx-plus b-sm"></i>
) : (
<i className="bx bx-minus b-sm"></i>
)}{" "}
{formatFigure(balance, {
type: "currency",
currency: "INR",
})}
@ -85,8 +89,6 @@ const AdvancePaymentPage = () => {
</div>
</div>
<AdvancePaymentList employeeId={selectedEmployeeId} />
</div>
</div>
</AdvancePaymentContext.Provider>

View File

@ -1,4 +1,10 @@
import React, { createContext, useContext, useState, useEffect, useRef } from "react";
import React, {
createContext,
useContext,
useState,
useEffect,
useRef,
} from "react";
import { useForm, useFormContext } from "react-hook-form";
import { zodResolver } from "@hookform/resolvers/zod";
import { useSelector } from "react-redux";
@ -19,7 +25,10 @@ import {
VIEW_SELF_EXPENSE,
} from "../../utils/constants";
import { defaultFilter, SearchSchema } from "../../components/Expenses/ExpenseSchema";
import {
defaultFilter,
SearchSchema,
} from "../../components/Expenses/ExpenseSchema";
import PreviewDocument from "../../components/Expenses/PreviewDocument";
// Context
@ -102,14 +111,14 @@ const ExpensePage = () => {
setManageExpenseModal,
setDocumentView,
filterData,
removeFilterChip
removeFilterChip,
};
return (
<ExpenseContext.Provider value={contextValue}>
<div className="container-fluid">
<Breadcrumb
data={[{ label: "Home", link: "/" }, { label: "Expense" }]}
data={[{ label: "Home", link: "/dashboard" }, { label: "Expense" }]}
/>
{IsViewAll || IsViewSelf || IsCreatedAble ? (
@ -128,7 +137,6 @@ const ExpensePage = () => {
</div>
<div className="col-6 text-end mt-2 mt-sm-0">
{IsCreatedAble && (
<button
className="btn btn-sm btn-primary"
@ -151,8 +159,6 @@ const ExpensePage = () => {
</div>
</div>
<ExpenseList
filters={filters}
groupBy={groupBy}

View File

@ -36,11 +36,10 @@ export const useGalleryContext = () => {
};
const ImageGalleryPage = () => {
const [filter,setFilter] = useState()
const [filter, setFilter] = useState();
const selectedProjectId = useSelectedProject();
const { projectNames } = useProjectName();
const [openGallery, setOpenGallery] = useState({ isOpen: false, data: null });
const { data: assignedServices = [], isLoading } =
@ -58,22 +57,24 @@ const ImageGalleryPage = () => {
const { setOffcanvasContent, setShowTrigger } = useFab();
useEffect(()=>{
useEffect(() => {
setShowTrigger(true);
setOffcanvasContent("Gallery Filter",<GalleryFilterPanel onApply={setFilter}/>);
setOffcanvasContent(
"Gallery Filter",
<GalleryFilterPanel onApply={setFilter} />
);
return ()=>{
setOffcanvasContent("",null)
return () => {
setOffcanvasContent("", null);
setShowTrigger(false);
}
},[])
};
}, []);
return (
<GalleryContext.Provider value={contextMessager}>
<div className="container-fluid">
<Breadcrumb
data={[{ label: "Home", link: "/" }, { label: "Gallery" }]}
data={[{ label: "Home", link: "/dashboard" }, { label: "Gallery" }]}
/>
<div className="card page-min-h p-2">
@ -104,7 +105,7 @@ const ImageGalleryPage = () => {
</div>
)} */}
<ImageGalleryListView filter={filter}/>
<ImageGalleryListView filter={filter} />
</div>
{openGallery?.isOpen && (

View File

@ -6,12 +6,15 @@ import OrganizationsList from "../../components/Organization/OrganizationsList";
const OrganizationPage = () => {
const { isOpen, orgData, startStep, onOpen, flowType } =
useOrganizationModal();
const [searchText, setSearchText] = useState("")
const [searchText, setSearchText] = useState("");
return (
<div className="container-fluid">
<Breadcrumb
data={[{ label: "Home", link: "/" }, { label: "Organizations" }]}
data={[
{ label: "Home", link: "/dashboard" },
{ label: "Organizations" },
]}
/>
<div className="card my-3 px-sm-4 px-0">
<div className="card-body py-2 px-3">
@ -42,14 +45,11 @@ const OrganizationPage = () => {
</button>
</div>
</div>
</div>
</div>
<div className="card page-min-h px-sm-4">
<OrganizationsList searchText={searchText} />
</div>
</div>
);
};

View File

@ -6,7 +6,10 @@ import ExpenseFilterPanel from "../../components/Expenses/ExpenseFilterPanel";
import { useFab } from "../../Context/FabContext";
import PaymentRequestList from "../../components/PaymentRequest/PaymentRequestList";
import PaymentRequestFilterPanel from "../../components/PaymentRequest/PaymentRequestFilterPanel";
import { defaultPaymentRequestFilter,SearchPaymentRequestSchema } from "../../components/PaymentRequest/PaymentRequestSchema";
import {
defaultPaymentRequestFilter,
SearchPaymentRequestSchema,
} from "../../components/PaymentRequest/PaymentRequestSchema";
import ViewPaymentRequest from "../../components/PaymentRequest/ViewPaymentRequest";
import PreviewDocument from "../../components/Expenses/PreviewDocument";
import MakeExpense from "../../components/PaymentRequest/MakeExpense";
@ -15,7 +18,9 @@ export const PaymentRequestContext = createContext();
export const usePaymentRequestContext = () => {
const context = useContext(PaymentRequestContext);
if (!context) {
throw new Error("usePaymentRequestContext must be used within an ExpenseProvider");
throw new Error(
"usePaymentRequestContext must be used within an ExpenseProvider"
);
}
return context;
};
@ -24,16 +29,21 @@ const PaymentRequestPage = () => {
IsOpen: null,
RequestId: null,
});
const [ViewRequest,setVieRequest] = useState({view:false,requestId:null})
const [ViewRequest, setVieRequest] = useState({
view: false,
requestId: null,
});
const { setOffcanvasContent, setShowTrigger } = useFab();
const [filters, setFilters] = useState(defaultPaymentRequestFilter);
const [ViewDocument, setDocumentView] = useState({
IsOpen: false,
Image: null,
});
const [isExpenseGenerate,setIsExpenseGenerate] = useState({IsOpen: null,
RequestId: null,})
const [modalSize,setModalSize] = useState("md")
const [isExpenseGenerate, setIsExpenseGenerate] = useState({
IsOpen: null,
RequestId: null,
});
const [modalSize, setModalSize] = useState("md");
const [search, setSearch] = useState("");
const contextValue = {
@ -42,11 +52,10 @@ const PaymentRequestPage = () => {
setDocumentView,
setModalSize,
setIsExpenseGenerate,
isExpenseGenerate
isExpenseGenerate,
};
useEffect(() => {
setShowTrigger(true);
setOffcanvasContent(
"Payment Request Filters",
@ -65,7 +74,7 @@ const PaymentRequestPage = () => {
{/* Breadcrumb */}
<Breadcrumb
data={[
{ label: "Home", link: "/" },
{ label: "Home", link: "/dashboard" },
{ label: "Finance", link: "/Payment Request" },
{ label: "Payment Request" },
]}
@ -81,7 +90,7 @@ const PaymentRequestPage = () => {
className="form-control form-control-sm w-auto"
placeholder="Search Payment Request"
value={search}
style={{minWidth:"200px"}}
style={{ minWidth: "200px" }}
onChange={(e) => setSearch(e.target.value)}
/>
</div>
@ -106,10 +115,7 @@ const PaymentRequestPage = () => {
</div>
</div>
</div>
<PaymentRequestList
search={search}
filters={filters}
/>
<PaymentRequestList search={search} filters={filters} />
{/* Add/Edit Modal */}
{ManageRequest.IsOpen && (
@ -144,10 +150,16 @@ const PaymentRequestPage = () => {
<GlobalModel
isOpen
size="md"
closeModal={() => setIsExpenseGenerate({IsOpen:false, requestId: null})}
closeModal={() =>
setIsExpenseGenerate({ IsOpen: false, requestId: null })
}
>
<MakeExpe
nse onClose={() => setIsExpenseGenerate({IsOpen:false, requestId: null})} />
nse
onClose={() =>
setIsExpenseGenerate({ IsOpen: false, requestId: null })
}
/>
</GlobalModel>
)}
@ -161,7 +173,6 @@ const PaymentRequestPage = () => {
<PreviewDocument imageUrl={ViewDocument.Image} />
</GlobalModel>
)}
</div>
</PaymentRequestContext.Provider>
);

View File

@ -101,7 +101,7 @@ const CollectionPage = () => {
) {
return (
<AccessDenied
data={[{ label: "Home", link: "/" }, { label: "Collection" }]}
data={[{ label: "Home", link: "/dashboard" }, { label: "Collection" }]}
/>
);
}
@ -109,7 +109,10 @@ const CollectionPage = () => {
<CollectionContext.Provider value={contextMassager}>
<div className="container-fluid">
<Breadcrumb
data={[{ label: "Home", link: "/" }, { label: "Collection" }]}
data={[
{ label: "Home", link: "/dashboard" },
{ label: "Collection" },
]}
/>
<div className="card my-3 py-2 px-sm-4 px-2">
@ -152,16 +155,18 @@ const CollectionPage = () => {
<button
className="btn btn-sm btn-primary"
type="button"
onClick={() => setCollection({ isOpen: true, invoiceId: null })}
onClick={() =>
setCollection({ isOpen: true, invoiceId: null })
}
>
<i className="bx bx-plus-circle me-2"></i>
<span className="d-none d-md-inline-block">Add New Collection</span>
<span className="d-none d-md-inline-block">
Add New Collection
</span>
</button>
)}
</div>
</div>
</div>
<CollectionList