Compare commits

..

No commits in common. "1200937097703f18ac38e3a70aeced89ea67a5f3" and "aecaee711611a2a20e9210a24a5f885851371e59" have entirely different histories.

10 changed files with 59 additions and 100 deletions

View File

@ -1,5 +1,5 @@
import React, { useState } from "react";
import { useCurrentService } from "../../hooks/useProjects";
import { useCurrentService, useProjectInfra } from "../../hooks/useProjects";
import { useSelectedProject } from "../../slices/apiDataManager";
import { FormProvider, useForm } from "react-hook-form";
import { zodResolver } from "@hookform/resolvers/zod";
@ -10,14 +10,15 @@ import {
import { DateRangePicker1 } from "../common/DateRangePicker";
import SelectMultiple from "../common/SelectMultiple";
import { localToUtc } from "../../utils/appUtils";
import { useTaskFilter } from "../../hooks/useTasks";
const TaskReportFilterPanel = ({ handleFilter }) => {
const [resetKey, setResetKey] = useState(0);
const selectedProject = useSelectedProject();
const selectedProjec = useSelectedProject();
const selectedService = useCurrentService();
const { data } = useTaskFilter(selectedProject);
const { projectInfra, isLoading, error, isFetched } = useProjectInfra(
selectedProjec,
selectedService
);
const methods = useForm({
resolver: zodResolver(TaskReportFilterSchema),
defaultValues: TaskReportDefaultValue,
@ -31,19 +32,21 @@ const TaskReportFilterPanel = ({ handleFilter }) => {
} = methods;
const onSubmit = (formData) => {
const filterPayload = {
...formData,
dateFrom: localToUtc(formData.dateFrom),
dateTo: localToUtc(formData.dateTo),
};
console.log(formData)
const filterPayload = {
startDate:localToUtc(formData.startDate),
endDate:localToUtc(formData.endDate)
}
handleFilter(filterPayload);
};
const onClear = () => {
const onClear =()=>{
setResetKey((prev) => prev + 1);
handleFilter(TaskReportDefaultValue);
reset(TaskReportDefaultValue);
};
handleFilter(TaskReportDefaultValue)
reset(TaskReportDefaultValue)
}
return (
<FormProvider {...methods}>
<form onSubmit={handleSubmit(onSubmit)} className="p-2 text-start">
@ -51,47 +54,34 @@ const TaskReportFilterPanel = ({ handleFilter }) => {
<label className="fw-semibold">Choose Date Range:</label>
<DateRangePicker1
placeholder="DD-MM-YYYY To DD-MM-YYYY"
startField="dateFrom"
endField="dateTo"
startField="startDate"
endField="endDate"
resetSignal={resetKey}
defaultRange={false}
defaultRange={true}
/>
</div>
<div className="row g-2">
<SelectMultiple
name="buildingIds"
label="Building"
options={data?.buildings}
labelKey="name"
valueKey="id"
/>
</div>
<div className="row g-2">
<SelectMultiple
name="floorIds"
label="Floor"
options={data?.floors}
labelKey="name"
valueKey="id"
/>
</div>
<div className="row g-2">
<SelectMultiple
name="activityIds"
label="Activities"
options={data?.activities}
labelKey="name"
valueKey="id"
/>
</div>
{/* <div className="row g-2">
<SelectMultiple
name="buildingIds"
label="Projects"
options={projectInfra}
labelKey="buildingName"
valueKey="id"
/>
</div>
<div className="row g-2">
<SelectMultiple
name="floorIds"
label="Floor"
options={projectInfra}
labelKey="floorName"
valueKey="id"
/>
</div> */}
<div className="d-flex justify-content-end py-3 gap-2">
<button
type="button"
className="btn btn-label-secondary btn-sm"
onClick={onClear}
>
<button type="button" className="btn btn-label-secondary btn-sm" onClick={onClear}>
Clear
</button>
<button type="submit" className="btn btn-primary btn-sm">

View File

@ -1,17 +1,15 @@
import { z } from "zod";
export const TaskReportFilterSchema = z.object({
buildingIds: z.array(z.string()).optional(),
floorIds: z.array(z.string()).optional(),
activityIds: z.array(z.string()).optional(),
dateFrom: z.string().optional(),
dateTo: z.string().optional(),
// buildingIds: z.array(z.string()).optional(),
// floorIds: z.array(z.string()).optional(),
startDate: z.string().optional(),
endDate: z.string().optional(),
});
export const TaskReportDefaultValue = {
buildingIds:[],
floorIds:[],
activityIds:[],
dateFrom:null,
dateTo:null
// buildingIds:[],
// floorIds:[],
startDate:null,
endDate:null
}

View File

@ -37,6 +37,7 @@ const ServiceGroups = ({ service }) => {
<div className="w-100 my-2">
<p className="fs-5 fw-semibold">Manage Service</p>
<div className="accordion" id="accordionExample">
<div className="accordion-item active shadow-none">
{/* Service Header */}

View File

@ -207,6 +207,7 @@ export const useMarkAttendance = () => {
onSuccess: (data, variables) => {
if (variables.forWhichTab == 1) {
queryClient.setQueryData(["attendance", selectedProject,selectedOrganization], (oldData) => {
debugger
if (!oldData) return oldData;
return oldData.map((emp) =>
emp.employeeId === data.employeeId ? { ...emp, ...data } : emp

View File

@ -8,30 +8,11 @@ import { useSelector } from "react-redux";
// ---------Query---------------------------------
export const useTaskList = (projectId, pageSize, pageNumber, serviceId, filter) => {
const cleanFilter = (filter) => {
const cleaned = { ...filter };
["buildingIds", "floorIds", "activityIds"].forEach((key) => {
if (Array.isArray(cleaned[key]) && cleaned[key].length === 0) {
delete cleaned[key];
}
});
return cleaned;
};
export const useTaskList = (
projectId,
pageSize,
pageNumber,
serviceId,
filter
) => {
return useQuery({
queryKey: ["taskList", projectId, pageSize, pageNumber, serviceId, filter],
queryFn: async () => {
const cleanedFilter = cleanFilter(filter)
const response = await TasksRepository.getTaskList(
projectId,
pageSize,
@ -41,21 +22,11 @@ export const useTaskList = (
);
return response.data;
},
enabled: !!projectId,
});
};
export const useTaskFilter = (projectId) => {
return useQuery({
queryKey: ["taskFilter", projectId],
queryFn: async () => {
const resp = await TasksRepository.getTaskListFilter(projectId);
return resp.data;
},
enabled:!!projectId
});
};
export const useTaskById = (TaskId) => {
const {
data: Task = null,

View File

@ -86,7 +86,7 @@ const DailyProgrssReport = () => {
/>
<div className="card card-fullscreen p-5">
{data?.data?.length > 0 && (<div className="col-sm-4 col-md-3 col-12">
<div className="col-sm-4 col-md-3 col-12">
<select
className="form-select form-select-sm"
value={service ?? ""}
@ -107,7 +107,7 @@ const DailyProgrssReport = () => {
</>
)}
</select>
</div>)}
</div>
<div>
<TaskReportList />
</div>

View File

@ -60,12 +60,12 @@ const ContactFilterPanel = ({ onApply, clearFilter }) => {
<div className="d-flex justify-content-end py-3 gap-2">
<button
type="button"
className="btn btn-label-secondary btn-sm"
className="btn btn-label-secondary btn-xs"
onClick={handleClose}
>
Clear
</button>
<button type="submit" className="btn btn-primary btn-sm">
<button type="submit" className="btn btn-primary btn-xs">
Apply
</button>
</div>

View File

@ -60,12 +60,12 @@ const NoteFilterPanel = ({ onApply, clearFilter }) => {
<div className="d-flex justify-content-end py-3 gap-2">
<button
type="button"
className="btn btn-label-secondary btn-sm"
className="btn btn-label-secondary btn-xs"
onClick={handleClose}
>
Clear
</button>
<button type="submit" className="btn btn-primary btn-sm">
<button type="submit" className="btn btn-primary btn-xs">
Apply
</button>
</div>

View File

@ -77,7 +77,7 @@ const ImageGalleryPage = () => {
/>
<div className="card page-min-h p-2">
{/* {selectedProjectId && (
{selectedProjectId && (
<div className="d-flex flex-row w-20 pb-2">
{!isLoading && assignedServices?.length === 0 ? (
<span className="badge bg-label-secondary">
@ -102,7 +102,7 @@ const ImageGalleryPage = () => {
</select>
)}
</div>
)} */}
)}
<ImageGalleryListView filter={filter}/>
</div>

View File

@ -16,8 +16,6 @@ export const TasksRepository = {
return api.get(url);
},
getTaskListFilter:(projectId)=>api.get(`/api/task/filter/${projectId}`),
getTaskById: (id) => api.get(`/api/task/get/${id}`),
reportTask: (data) => api.post("api/task/report", data),
taskComments: (data) => api.post("api/task/comment", data),