Implementing Restore Functionality in Jobs.

This commit is contained in:
Kartik Sharma 2025-11-21 11:39:36 +05:30
parent 17a9f4a9b1
commit ee4ef18594
2 changed files with 57 additions and 35 deletions

View File

@ -28,28 +28,26 @@ const JobList = ({ isArchive }) => {
); );
const [isArchiveModalOpen, setIsArchiveModalOpen] = useState(false); const [isArchiveModalOpen, setIsArchiveModalOpen] = useState(false);
const [archiveJobId, setArchiveJobId] = useState(null); const [archiveJobId, setArchiveJobId] = useState(null);
const [isArchiveAction, setIsArchiveAction] = useState(true);
const handleArchive = () => { const handleArchive = () => {
const payload = [ const payload = [
{ {
op: "replace", op: "replace",
path: "/isArchive", path: "/isArchive",
value: true, value: isArchiveAction,
}, },
]; ];
UpdateJob({ UpdateJob({
id: archiveJobId, id: archiveJobId,
payload, payload,
isArchiveAction: true, isArchiveAction,
}); });
setIsArchiveModalOpen(false); setIsArchiveModalOpen(false);
setArchiveJobId(null); setArchiveJobId(null);
}; };
const jobGrid = [ const jobGrid = [
{ {
key: "jobTicketUId", key: "jobTicketUId",
@ -123,17 +121,21 @@ const JobList = ({ isArchive }) => {
return ( return (
<> <>
{isArchiveModalOpen && ( {isArchiveModalOpen && (
<ConfirmModal <ConfirmModal
isOpen={isArchiveModalOpen} isOpen={isArchiveModalOpen}
type="success" type={isArchiveAction ? "success" : "undo"}
header="Archive Job" header={isArchiveAction ? "Archive Job" : "Restore Job"}
message="Are you sure you want to archive this job?" message={
isArchiveAction
? "Are you sure you want to archive this job?"
: "Are you sure you want to restore this job?"
}
onSubmit={handleArchive} onSubmit={handleArchive}
onClose={() => setIsArchiveModalOpen(false)} onClose={() => setIsArchiveModalOpen(false)}
loading={false} loading={false}
/> />
)} )}
<div className="dataTables_wrapper dt-bootstrap5 no-footer table-responsive"> <div className="dataTables_wrapper dt-bootstrap5 no-footer table-responsive">
@ -170,6 +172,7 @@ const JobList = ({ isArchive }) => {
onClick={() => onClick={() =>
setSelectedJob({ showCanvas: true, job: row?.id }) setSelectedJob({ showCanvas: true, job: row?.id })
} }
> >
{col.getValue(row)} {col.getValue(row)}
</td> </td>
@ -183,6 +186,9 @@ const JobList = ({ isArchive }) => {
<i className="bx bx-dots-vertical-rounded bx-md"></i> <i className="bx bx-dots-vertical-rounded bx-md"></i>
</button> </button>
<div className="dropdown-menu dropdown-menu-end"> <div className="dropdown-menu dropdown-menu-end">
{!isArchive && (
<>
<button <button
className="dropdown-item py-1" className="dropdown-item py-1"
onClick={() => onClick={() =>
@ -191,7 +197,7 @@ const JobList = ({ isArchive }) => {
> >
<i className="bx bx-detail bx-sm"></i> View <i className="bx bx-detail bx-sm"></i> View
</button> </button>
<>
<button <button
className="dropdown-item py-1" className="dropdown-item py-1"
onClick={() => onClick={() =>
@ -201,12 +207,27 @@ const JobList = ({ isArchive }) => {
<i className="bx bx-edit bx-sm"></i> Edit <i className="bx bx-edit bx-sm"></i> Edit
</button> </button>
</> </>
)}
{canArchive(row?.status?.id) && ( {isArchive && (
<button <button
className="dropdown-item py-1" className="dropdown-item py-1"
onClick={() => { onClick={() => {
setArchiveJobId(row.id); setArchiveJobId(row.id);
setIsArchiveAction(false);
setIsArchiveModalOpen(true);
}}
>
<i className="bx bx-reset bx-sm"></i> Restore
</button>
)}
{!isArchive && canArchive(row?.status?.id) && (
<button
className="dropdown-item py-1"
onClick={() => {
setArchiveJobId(row.id);
setIsArchiveAction(true);
setIsArchiveModalOpen(true); setIsArchiveModalOpen(true);
}} }}
> >
@ -215,6 +236,7 @@ const JobList = ({ isArchive }) => {
)} )}
</div> </div>
</div> </div>
</td> </td>
</tr> </tr>

View File

@ -264,7 +264,6 @@ export const useCreateServiceProjectJob = (onSuccessCallback) => {
export const useUpdateServiceProjectJob = (onSuccessCallback) => { export const useUpdateServiceProjectJob = (onSuccessCallback) => {
const queryClient = useQueryClient(); const queryClient = useQueryClient();
return useMutation({ return useMutation({
mutationFn: async ({ id, payload, isArchiveAction = false }) => { mutationFn: async ({ id, payload, isArchiveAction = false }) => {
const resp = await ServiceProjectRepository.UpdateJob(id, payload); const resp = await ServiceProjectRepository.UpdateJob(id, payload);
@ -281,10 +280,11 @@ export const useUpdateServiceProjectJob = (onSuccessCallback) => {
if (isArchiveAction) { if (isArchiveAction) {
showToast("Job archived successfully", "success"); showToast("Job archived successfully", "success");
} else { } else {
showToast("Job Updated successfully", "success"); showToast("Job restored successfully", "success");
} }
}, },
onError: (error) => { onError: (error) => {
showToast( showToast(
error?.response?.data?.message || error?.response?.data?.message ||
@ -336,10 +336,10 @@ export const useBranches = (
}); });
}; };
export const useBranchTypes = ()=>{ export const useBranchTypes = () => {
return useQuery({ return useQuery({
queryKey:["branch_Type"], queryKey: ["branch_Type"],
queryFn:async()=> { queryFn: async () => {
const resp = await ServiceProjectRepository.GetBranchTypeList(); const resp = await ServiceProjectRepository.GetBranchTypeList();
return resp.data; return resp.data;
}, },
@ -409,9 +409,9 @@ export const useDeleteBranch = () => {
mutationFn: async ({ id, isActive }) => mutationFn: async ({ id, isActive }) =>
await ServiceProjectRepository.DeleteBranch(id, isActive), await ServiceProjectRepository.DeleteBranch(id, isActive),
onSuccess: (_,variable) => { onSuccess: (_, variable) => {
queryClient.invalidateQueries({ queryKey: ["branches"] }); queryClient.invalidateQueries({ queryKey: ["branches"] });
showToast(`Branch ${variable.isActive ? "restored":"deleted"} successfully`, "success"); showToast(`Branch ${variable.isActive ? "restored" : "deleted"} successfully`, "success");
}, },
onError: (error) => { onError: (error) => {