Adding Tabs in attendancepage just like View Jobs.

This commit is contained in:
Kartik Sharma 2025-12-04 16:03:55 +05:30
parent 949126d790
commit ae83d1d2f6

View File

@ -59,7 +59,7 @@ const AttendancePage = () => {
if (selectedProject == null) { if (selectedProject == null) {
dispatch(setProjectId(projectNames[0]?.id)); dispatch(setProjectId(projectNames[0]?.id));
} }
dispatch(setOrganization(appliedFilters?.selectedOrganization)) dispatch(setOrganization(appliedFilters?.selectedOrganization));
}, [appliedFilters?.selectedOrganization]); }, [appliedFilters?.selectedOrganization]);
const getRole = (roleId) => { const getRole = (roleId) => {
@ -94,6 +94,49 @@ const AttendancePage = () => {
setSearchTerm(""); // Reset search term when tab changes setSearchTerm(""); // Reset search term when tab changes
}; };
// --- START: Tab Configuration Array
const tabsData = [
{
id: "all",
title: "Today's",
content: (
<Attendance
handleModalData={handleModalData}
getRole={getRole}
searchTerm={searchTerm}
organizationId={appliedFilters.selectedOrganization}
/>
),
},
{
id: "logs",
title: "Logs",
content: (
<AttendanceLog
handleModalData={handleModalData}
searchTerm={searchTerm}
organizationId={appliedFilters.selectedOrganization}
/>
),
},
// Conditionally include Regularization tab based on permission
...(DoRegularized
? [
{
id: "regularization",
title: "Regularization",
content: (
<Regularization
searchTerm={searchTerm}
organizationId={appliedFilters.selectedOrganization}
/>
),
},
]
: []),
];
// --- END: Tab Configuration Array
return ( return (
<> <>
{isCreateModalOpen && modelConfig && ( {isCreateModalOpen && modelConfig && (
@ -114,9 +157,7 @@ const AttendancePage = () => {
{modelConfig?.action === 6 && ( {modelConfig?.action === 6 && (
<AttendLogs Id={modelConfig?.id} closeModal={closeModal} /> <AttendLogs Id={modelConfig?.id} closeModal={closeModal} />
)} )}
{modelConfig?.action === 7 && ( {modelConfig?.action === 7 && <Confirmation closeModal={closeModal} />}
<Confirmation closeModal={closeModal} />
)}
</GlobalModel> </GlobalModel>
)} )}
@ -129,57 +170,39 @@ const AttendancePage = () => {
></Breadcrumb> ></Breadcrumb>
<div className="nav-align-top nav-tabs-shadow "> <div className="nav-align-top nav-tabs-shadow ">
{/* Tabs */} {/* Tabs header with search and filter */}
<div className="nav-align-top nav-tabs-shadow bg-white border-bottom pt-5"> <div className="nav-align-top nav-tabs-shadow bg-white border-bottom pt-5">
<div className="row align-items-center g-0 mb-3 mb-md-0 mx-1 mx-sm-5"> <div className="row align-items-center g-0 mb-3 mb-md-0 mx-1 mx-sm-5">
{/* Tabs */} {/* Tabs Buttons */}
<div className="col-12 col-md"> <div className="col-12 col-md mt-1">
<ul className="nav nav-tabs" role="tablist"> <ul className="nav nav-tabs" role="tablist">
<li className="nav-item"> {tabsData.map((tab) => (
<button <li
type="button" className={`nav-item ${
className={`nav-link ${ tab.id === "regularization" && !DoRegularized
activeTab === "all" ? "active" : "" ? "d-none"
} fs-6`} : ""
onClick={() => handleTabChange("all")} }`} // Keep the d-none logic for regularization, although it's filtered above
data-bs-toggle="tab" key={tab.id}
data-bs-target="#navs-top-home"
> >
Today's <button
</button> type="button"
</li> className={`nav-link ${
<li className="nav-item"> activeTab === tab.id ? "active" : ""
<button } fs-6`}
type="button" onClick={() => handleTabChange(tab.id)}
className={`nav-link ${ data-bs-toggle="tab"
activeTab === "logs" ? "active" : "" data-bs-target={`#navs-top-${tab.id}`}
} fs-6`} >
onClick={() => handleTabChange("logs")} {tab.title}
data-bs-toggle="tab" </button>
data-bs-target="#navs-top-profile" </li>
> ))}
Logs
</button>
</li>
<li className={`nav-item ${!DoRegularized ? "d-none" : ""}`}>
<button
type="button"
className={`nav-link ${
activeTab === "regularization" ? "active" : ""
} fs-6`}
onClick={() => handleTabChange("regularization")}
data-bs-toggle="tab"
data-bs-target="#navs-top-messages"
>
Regularization
</button>
</li>
</ul> </ul>
</div> </div>
{/* Search + Organization filter */} {/* Search + Organization filter */}
<div className="col-12 col-md-auto pb-2 m-0 mt-md-0 ms-md-auto nav-tabs"> <div className="col-12 col-md-auto mb-2 mt-md-0 ms-md-auto nav">
<div className="row g-2"> <div className="row g-2">
<div className="col-12 col-sm-6"> <div className="col-12 col-sm-6">
<select <select
@ -212,40 +235,25 @@ const AttendancePage = () => {
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
{/* Tab Content */}
<div className="tab-content attedanceTabs py-0 px-1 px-sm-3 pb-10"> <div className="tab-content attedanceTabs py-0 px-1 px-sm-3 pb-10">
{selectedProject ? ( {selectedProject ? (
<> <>
{activeTab === "all" && ( {tabsData.map((tab) => (
<div className="tab-pane fade show active py-0 mx-2"> <div
<Attendance key={tab.id}
handleModalData={handleModalData} className={`tab-pane fade ${
getRole={getRole} activeTab === tab.id ? "show active" : ""
searchTerm={searchTerm} } py-0 ${tab.id === "all" ? "mx-2" : "p-3"}`}
organizationId={appliedFilters.selectedOrganization} id={`navs-top-${tab.id}`}
/> role="tabpanel"
>
{activeTab === tab.id && tab.content}
</div> </div>
)} ))}
{activeTab === "logs" && (
<div className="tab-pane fade p-3 show active py-0">
<AttendanceLog
handleModalData={handleModalData}
searchTerm={searchTerm}
organizationId={appliedFilters.selectedOrganization}
/>
</div>
)}
{activeTab === "regularization" && DoRegularized && (
<div className="tab-pane fade p-3 show active py-0">
<Regularization
searchTerm={searchTerm}
organizationId={appliedFilters.selectedOrganization}
/>
</div>
)}
</> </>
) : ( ) : (
<div className="py-2"> <div className="py-2">
@ -259,4 +267,4 @@ const AttendancePage = () => {
); );
}; };
export default AttendancePage; export default AttendancePage;