fixed: visible sub task without refresh page

This commit is contained in:
Pramod Mahajan 2025-07-03 19:10:49 +05:30
parent 094811a8ec
commit b39a3d7e97
7 changed files with 32 additions and 102 deletions

View File

@ -8,16 +8,11 @@ import { TasksRepository } from "../../repositories/TaskRepository";
import { useReportTask } from "../../hooks/useTasks"; import { useReportTask } from "../../hooks/useTasks";
export const ReportTask = ({ report, closeModal }) => { export const ReportTask = ({ report, closeModal }) => {
const [loading, setloading] = useState(false);
const { mutate: reportTask, isPending } = useReportTask({ const { mutate: reportTask, isPending } = useReportTask({
onSuccessCallback: () => { onSuccessCallback: () => {
reset(); reset();
setloading(false);
closeModal(); closeModal();
}, },
onErrorCallback: () => {
setloading(false);
},
}); });
const maxPending = const maxPending =
@ -59,7 +54,7 @@ export const ReportTask = ({ report, closeModal }) => {
}, [report, reset]); }, [report, reset]);
const onSubmit = (data) => { const onSubmit = (data) => {
setloading(true);
const reportData = { const reportData = {
...data, ...data,
id: report?.id, id: report?.id,
@ -186,13 +181,14 @@ export const ReportTask = ({ report, closeModal }) => {
</div> </div>
</div> </div>
<div className="col-12 text-center my-2"> <div className="col-12 text-center my-2">
<button type="submit" className="btn btn-sm btn-primary me-3"> <button type="submit" className="btn btn-sm btn-primary me-3" disabled={isPending}>
{loading ? "Please wait" : "Submit Report"} {isPending ? "Please wait" : "Submit Report"}
</button> </button>
<button <button
type="button" type="button"
className="btn btn-sm btn-label-secondary" className="btn btn-sm btn-label-secondary"
onClick={handleClose} onClick={handleClose}
disabled={isPending}
> >
Cancel Cancel
</button> </button>

View File

@ -99,63 +99,6 @@ const ReportTaskComments = ({
} }
}, [comments]); }, [comments]);
// const onSubmit = async (data) => {
// let payload = {
// ...data,
// [actionAllow ? "id" : "taskAllocationId"]: commentsData?.id,
// ...(actionAllow ? {} : { commentDate: new Date().toISOString() }),
// };
// try {
// setloading(true);
// const resp = actionAllow
// ? await TasksRepository.auditTask(payload)
// : await TasksRepository.taskComments(payload);
// setComment((prevItems) => [...prevItems, resp.data]);
// const taskList = getCachedData("taskList");
// if (actionAllow) {
// handleCloseAction(IsNeededSubTask);
// showToast(
// "Review submitted successfully. Record has been updated.",
// "success"
// );
// } else {
// if (taskList && taskList.data) {
// const updatedTaskList = taskList.data.map((task) => {
// if (task.id === resp.data.taskAllocationId) {
// const existingComments = Array.isArray(task.comments)
// ? task.comments
// : [];
// return {
// ...task,
// comments: [...existingComments, resp.data],
// };
// }
// return task;
// });
// cacheData("taskList", {
// data: updatedTaskList,
// projectId: taskList.projectId,
// });
// }
// showToast("Successfully Sent", "success");
// }
// reset();
// setloading(false);
// } catch (error) {
// setloading(false);
// showToast(
// error.response.data?.message || "Something went wrong",
// "error"
// );
// }
// };
const onSubmit = (formData) => { const onSubmit = (formData) => {
submitComment({ data: formData, commentsData }); submitComment({ data: formData, commentsData });
}; };
@ -421,15 +364,16 @@ const ReportTaskComments = ({
className="btn btn-sm btn-secondary" className="btn btn-sm btn-secondary"
onClick={closeModal} onClick={closeModal}
data-bs-dismiss="modal" data-bs-dismiss="modal"
disabled={isPending}
> >
Close Close
</button> </button>
<button <button
type="submit" type="submit"
className="btn btn-sm btn-primary ms-2" className="btn btn-sm btn-primary ms-2"
disabled={loading} disabled={isPending}
> >
{loading {isPending
? actionAllow ? actionAllow
? "Please Wait..." ? "Please Wait..."
: "Send..." : "Send..."

View File

@ -9,6 +9,7 @@ import {
import showToast from "../../services/toastService"; import showToast from "../../services/toastService";
import ProjectRepository from "../../repositories/ProjectRepository"; import ProjectRepository from "../../repositories/ProjectRepository";
import { useTaskById } from "../../hooks/useTasks"; import { useTaskById } from "../../hooks/useTasks";
import {useManageTask} from "../../hooks/useProjects";
const subTaskSchema = z.object({ const subTaskSchema = z.object({
activityId: z.string().min(1, "Activity is required"), activityId: z.string().min(1, "Activity is required"),
@ -23,7 +24,6 @@ const SubTask = ({ activity, onClose }) => {
const [categoryData, setCategoryData] = useState([]); const [categoryData, setCategoryData] = useState([]);
const { activities, loading } = useActivitiesMaster(); const { activities, loading } = useActivitiesMaster();
const { categories, categoryLoading } = useWorkCategoriesMaster(); const { categories, categoryLoading } = useWorkCategoriesMaster();
const [isSubmitting, setIsSubmitting] = useState(false);
const { Task, loading: TaskLoading } = useTaskById(activity?.id); const { Task, loading: TaskLoading } = useTaskById(activity?.id);
const { const {
register, register,
@ -37,13 +37,19 @@ const SubTask = ({ activity, onClose }) => {
}); });
const selectedActivityId = watch("activityId"); const selectedActivityId = watch("activityId");
const selectedActivity = activities?.find((a) => a.id === selectedActivityId); const selectedActivity = activities?.find((a) => a.id === selectedActivityId);
const {mutate:createSubTask,isPending } = useManageTask( {
onSuccessCallback: () =>
{
showToast("Sub Task Created Successfully","success")
reset();
onClose();
}
} )
// Set categories when fetched
useEffect(() => { useEffect(() => {
setCategoryData(categories); setCategoryData(categories);
}, [categories]); }, [categories]);
// Set initial values from activity
useEffect(() => { useEffect(() => {
if (!TaskLoading && (Task?.workItem || activity)) { if (!TaskLoading && (Task?.workItem || activity)) {
reset({ reset({
@ -76,22 +82,8 @@ const SubTask = ({ activity, onClose }) => {
parentTaskId: activity?.id, parentTaskId: activity?.id,
comment: formData.comment, comment: formData.comment,
}; };
setIsSubmitting(true);
createSubTask([payload])
try {
await ProjectRepository.manageProjectTasks([payload]);
showToast("SubTask Created Successfully", "success");
setIsSubmitting(false);
reset();
onClose();
} catch (error) {
setIsSubmitting(false);
const msg =
error.response.message ||
error.message ||
"Error occured during API calling";
showToast(msg, "error");
}
}; };
return ( return (
<div className="container-xxl my-1"> <div className="container-xxl my-1">
@ -221,15 +213,15 @@ const SubTask = ({ activity, onClose }) => {
<button <button
type="submit" type="submit"
className="btn btn-sm btn-primary me-2" className="btn btn-sm btn-primary me-2"
disabled={isSubmitting} disabled={isPending}
> >
{isSubmitting ? "Please wait..." : "Submit"} {isPending ? "Please wait..." : "Submit"}
</button> </button>
<button <button
type="button" type="button"
className="btn btn-sm btn-secondary" className="btn btn-sm btn-secondary"
onClick={() => onClose()} onClick={() => onClose()}
disabled={isSubmitting} disabled={isPending}
> >
Cancel Cancel
</button> </button>

View File

@ -58,7 +58,10 @@ const EditActivityModal = ({
}, },
}); });
const { mutate: UpdateTask, isPending } = useManageTask({ const { mutate: UpdateTask, isPending } = useManageTask({
onSuccessCallback: () => onClose?.() onSuccessCallback: (response) =>
{
showToast(response?.message,"success")
}
}); });
const activityID = watch("activityID"); const activityID = watch("activityID");

View File

@ -7,6 +7,7 @@ import {
useWorkCategoriesMaster, useWorkCategoriesMaster,
} from "../../../hooks/masterHook/useMaster"; } from "../../../hooks/masterHook/useMaster";
import { useManageTask } from "../../../hooks/useProjects"; import { useManageTask } from "../../../hooks/useProjects";
import showToast from "../../../services/toastService";
const taskSchema = z.object({ const taskSchema = z.object({
buildingID: z.string().min(1, "Building is required"), buildingID: z.string().min(1, "Building is required"),
@ -68,7 +69,11 @@ const TaskModel = ({ project, onSubmit, onClose }) => {
const selectedCategory = categoryData?.find((c) => c.id === watchCategoryId); const selectedCategory = categoryData?.find((c) => c.id === watchCategoryId);
const { mutate: CreateTask, isPending } = useManageTask({ const { mutate: CreateTask, isPending } = useManageTask({
onSuccessCallback: () => onClose?.(), onSuccessCallback: ( response ) =>
{
showToast( response?.message, "success" )
onClose?.()
},
}); });
useEffect(() => { useEffect(() => {
reset(defaultModel); reset(defaultModel);

View File

@ -499,14 +499,6 @@ export const useManageTask = ({onSuccessCallback}) =>
mutationFn: async ( payload ) => await ProjectRepository.manageProjectTasks( payload ), mutationFn: async ( payload ) => await ProjectRepository.manageProjectTasks( payload ),
onSuccess: ( data, variables ) => onSuccess: ( data, variables ) =>
{ {
if ( variables[ 0 ]?.id )
{
showToast( 'Activity Updated Successfully', 'success' );
} else
{
showToast( 'Activity Created Successfully', 'success' );
}
queryClient.invalidateQueries(["WorkItems"]) queryClient.invalidateQueries(["WorkItems"])
if (onSuccessCallback) onSuccessCallback(data); if (onSuccessCallback) onSuccessCallback(data);
}, },

View File

@ -115,7 +115,6 @@ export const useReportTask = ( {onSuccessCallback, onErrorCallback} = {} ) =>
const msg = const msg =
error?.response?.data?.message || error.message || "Error occurred during API call"; error?.response?.data?.message || error.message || "Error occurred during API call";
showToast( msg, "error" ); showToast( msg, "error" );
if (onErrorCallback) onErrorCallback(error);
}, },
}); });
@ -153,7 +152,6 @@ export const useSubmitTaskComment = ({ actionAllow, onSuccessCallback }) => {
if (actionAllow) { if (actionAllow) {
showToast( "Review submitted successfully.", "success" ); showToast( "Review submitted successfully.", "success" );
// queryClient.invalidateQueries({ queryKey: [ "WorkItems", workAreaId ] });
} else } else
{ {
showToast("Comment sent successfully.", "success"); showToast("Comment sent successfully.", "success");
@ -181,7 +179,7 @@ export const useCreateTask = ( {onSuccessCallback, onErrorCallback} = {} ) =>
onSuccess: ( _, variables ) => onSuccess: ( _, variables ) =>
{ {
queryClient.invalidateQueries(["taskList"]); queryClient.invalidateQueries(["taskList"]);
showToast("Task Assigned Successfully.", "success"); showToast( "Task Assigned Successfully.", "success" );
if (onSuccessCallback) onSuccessCallback(variables); if (onSuccessCallback) onSuccessCallback(variables);
}, },
onError: ( error ) => onError: ( error ) =>