Adding Switch button on Jobs.

This commit is contained in:
Kartik Sharma 2025-11-21 09:45:28 +05:30
parent caaadc4c08
commit 8e12eb6797
4 changed files with 58 additions and 19 deletions

View File

@ -14,7 +14,7 @@ import ProjectPage from "../../pages/project/ProjectPage";
import { useServiceProjectJobContext } from "./Jobs"; import { useServiceProjectJobContext } from "./Jobs";
import ConfirmModal from "../common/ConfirmModal"; import ConfirmModal from "../common/ConfirmModal";
const JobList = () => { const JobList = ({ isArchive }) => {
const { setSelectedJob, setManageJob } = useServiceProjectJobContext(); const { setSelectedJob, setManageJob } = useServiceProjectJobContext();
const { mutate: UpdateJob } = useUpdateServiceProjectJob(() => { const { mutate: UpdateJob } = useUpdateServiceProjectJob(() => {
}); });
@ -23,7 +23,8 @@ const JobList = () => {
ITEMS_PER_PAGE, ITEMS_PER_PAGE,
1, 1,
true, true,
projectId projectId,
isArchive
); );
const [isArchiveModalOpen, setIsArchiveModalOpen] = useState(false); const [isArchiveModalOpen, setIsArchiveModalOpen] = useState(false);
const [archiveJobId, setArchiveJobId] = useState(null); const [archiveJobId, setArchiveJobId] = useState(null);

View File

@ -21,6 +21,8 @@ export const useServiceProjectJobContext = () => {
}; };
const Jobs = () => { const Jobs = () => {
const [manageJob, setManageJob] = useState({ isOpen: false, jobId: null }); const [manageJob, setManageJob] = useState({ isOpen: false, jobId: null });
const [showArchive, setShowArchive] = useState(false);
const [showCanvas, setShowCanvas] = useState(false); const [showCanvas, setShowCanvas] = useState(false);
const [selectedProject, setSelectedProject] = useState(null); const [selectedProject, setSelectedProject] = useState(null);
const [selectJob, setSelectedJob] = useState({ const [selectJob, setSelectedJob] = useState({
@ -58,21 +60,55 @@ const Jobs = () => {
<ManageJob Job={manageJob.jobId} /> <ManageJob Job={manageJob.jobId} />
</OffcanvasComponent> </OffcanvasComponent>
<div className="card page-min-h my-2 px-7 pb-4"> <div className="card page-min-h my-2 px-7 pb-4">
<div className="row"> <div className="row align-items-center py-4">
<div className="col-12 py-2 d-flex justify-content-end ">
<div className="px-2"> {/* LEFT — Tabs */}
<button <div className="col-12 col-md-6">
className="btn btn-sm btn-primary" <ul className="nav nav-pills" role="tablist">
onClick={() => setManageJob({ isOpen: true, jobId: null })}
> <li className="nav-item">
<i className="bx bx-plus-circle bx-md me-2"></i>New Job <button
</button> type="button"
</div> className={`nav-link px-2 py-2 ${!showArchive ? "active" : ""}`}
role="tab"
onClick={() => setShowArchive(false)}
style={{ fontSize: "13px" }}
>
Active Jobs
</button>
</li>
<li className="nav-item">
<button
type="button"
className={`nav-link px-2 py-2 ${showArchive ? "active" : ""}`}
role="tab"
onClick={() => setShowArchive(true)}
style={{ fontSize: "13px" }}
>
Archived Jobs
</button>
</li>
</ul>
</div> </div>
<JobList filterByProject={selectedProject} />
{/* RIGHT — New Job button */}
<div className="col-12 col-md-6 d-flex justify-content-md-end mt-2 mt-md-0">
<button
className="btn btn-sm btn-primary"
onClick={() => setManageJob({ isOpen: true, jobId: null })}
>
<i className="bx bx-plus-circle bx-md me-2"></i>New Job
</button>
</div>
</div> </div>
{/* Job List */}
<JobList filterByProject={selectedProject} isArchive={showArchive} />
</div> </div>
</JonContext.Provider> </JonContext.Provider>
</> </>
); );

View File

@ -154,16 +154,18 @@ export const useServiceProjectJobs = (
pageSize, pageSize,
pageNumber, pageNumber,
isActive = true, isActive = true,
project project,
isArchive
) => { ) => {
return useQuery({ return useQuery({
queryKey: ["serviceProjectJobs", pageSize, pageNumber, isActive, project], queryKey: ["serviceProjectJobs", pageSize, pageNumber, isActive, project, isArchive],
queryFn: async () => { queryFn: async () => {
const resp = await ServiceProjectRepository.GetJobList( const resp = await ServiceProjectRepository.GetJobList(
pageSize, pageSize,
pageNumber, pageNumber,
isActive, isActive,
project project,
isArchive
); );
return resp.data; return resp.data;
}, },

View File

@ -24,9 +24,9 @@ export const ServiceProjectRepository = {
//#region Job //#region Job
CreateJob: (data) => api.post(`/api/ServiceProject/job/create`, data), CreateJob: (data) => api.post(`/api/ServiceProject/job/create`, data),
GetJobList: (pageSize, pageNumber, isActive, projectId) => GetJobList: (pageSize, pageNumber, isActive, projectId,isArchive) =>
api.get( api.get(
`/api/ServiceProject/job/list?pageSize=${pageSize}&pageNumber=${pageNumber}&isActive=${isActive}&projectId=${projectId}` `/api/ServiceProject/job/list?pageSize=${pageSize}&pageNumber=${pageNumber}&isActive=${isActive}&projectId=${projectId}&isArchive=${isArchive}`
), ),
GetJobDetails: (id) => api.get(`/api/ServiceProject/job/details/${id}`), GetJobDetails: (id) => api.get(`/api/ServiceProject/job/details/${id}`),
AddComment: (data) => api.post("/api/ServiceProject/job/add/comment", data), AddComment: (data) => api.post("/api/ServiceProject/job/add/comment", data),
@ -45,7 +45,7 @@ export const ServiceProjectRepository = {
CreateBranch: (data) => api.post(`/api/ServiceProject/branch/create`, data), CreateBranch: (data) => api.post(`/api/ServiceProject/branch/create`, data),
UpdateBranch: (id, data) => UpdateBranch: (id, data) =>
api.put(`/api/ServiceProject/branch/edit/${id}`, data), api.put(`/api/ServiceProject/branch/edit/${id}`, data),
GetBranchList: (projectId, isActive, pageSize, pageNumber, searchString) => { GetBranchList: (projectId, isActive, pageSize, pageNumber, searchString) => {
return api.get( return api.get(
`/api/ServiceProject/branch/list/${projectId}?isActive=${isActive}&pageSize=${pageSize}&pageNumber=${pageNumber}&searchString=${searchString}` `/api/ServiceProject/branch/list/${projectId}?isActive=${isActive}&pageSize=${pageSize}&pageNumber=${pageNumber}&searchString=${searchString}`