-
+
{
{" "}
-
-
diff --git a/src/components/Layout/Header.jsx b/src/components/Layout/Header.jsx
index 50280bb1..7f051738 100644
--- a/src/components/Layout/Header.jsx
+++ b/src/components/Layout/Header.jsx
@@ -13,7 +13,7 @@ import { useProfile } from "../../hooks/useProfile";
import { useLocation, useNavigate, useParams } from "react-router-dom";
import Avatar from "../../components/common/Avatar";
import { useChangePassword } from "../Context/ChangePasswordContext";
-import { useProjects } from "../../hooks/useProjects";
+import { useProjectModal, useProjects } from "../../hooks/useProjects";
import { useCallback, useEffect, useState } from "react";
import { useProjectName } from "../../hooks/useProjects";
import eventBus from "../../services/eventBus";
@@ -27,9 +27,10 @@ const Header = () => {
const dispatch = useDispatch();
const { data, loading } = useMaster();
const navigate = useNavigate();
- const {onOpen} = useAuthModal()
+ const { onOpen } = useAuthModal();
const HasManageProjectPermission = useHasUserPermission(MANAGE_PROJECT);
- const { mutate : logout,isPending:logouting} = useLogout()
+ const { mutate: logout, isPending: logouting } = useLogout();
+ const { openModal } = useProjectModal();
const isDashboardPath =
/^\/dashboard$/.test(location.pathname) || /^\/$/.test(location.pathname);
@@ -59,10 +60,6 @@ const Header = () => {
return role ? role.name : "User";
};
-
-
-
-
const handleProfilePage = () => {
navigate(`/employee/${profile?.employeeInfo?.id}`);
};
@@ -249,111 +246,15 @@ const Header = () => {
)}
@@ -454,4 +359,4 @@ const Header = () => {
);
};
-export default Header;
\ No newline at end of file
+export default Header;
diff --git a/src/components/Project/ManageProjectInfo.jsx b/src/components/Project/ManageProjectInfo.jsx
index d6eec199..b2da3c0b 100644
--- a/src/components/Project/ManageProjectInfo.jsx
+++ b/src/components/Project/ManageProjectInfo.jsx
@@ -5,7 +5,12 @@ import { zodResolver } from "@hookform/resolvers/zod";
import Label from "../common/Label";
import DatePicker from "../common/DatePicker";
-import { useCreateProject, useProjectDetails, useUpdateProject } from "../../hooks/useProjects";
+import {
+ useCreateProject,
+ useProjectDetails,
+ useProjectModal,
+ useUpdateProject,
+} from "../../hooks/useProjects";
import {
DEFAULT_EMPTY_STATUS_ID,
@@ -17,6 +22,7 @@ import {
useOrganizationsList,
} from "../../hooks/useOrganization";
import { localToUtc } from "../../utils/appUtils";
+import Modal from "../common/Modal";
const currentDate = new Date().toLocaleDateString("en-CA");
const formatDate = (date) => {
@@ -37,13 +43,19 @@ const ManageProjectInfo = ({ project, onClose }) => {
const ACTIVE_STATUS_ID = "b74da4c2-d07e-46f2-9919-e75e49b12731";
const { projects_Details, loading } = useProjectDetails(project);
- const { data, isLoading, isError, error } = useOrganizationsList(
- ITEMS_PER_PAGE,
- 1,
- true
+ // const { data, isLoading, isError, error } = useOrganizationsList(
+ // ITEMS_PER_PAGE,
+ // 1,
+ // true
+ // );
+ const { mutate: UpdateProject, isPending } = useUpdateProject(() => {
+ onClose?.();
+ });
+ const { mutate: CeateProject, isPending: isCreating } = useCreateProject(
+ () => {
+ onClose?.();
+ }
);
- const { mutate: UpdateProject, isPending } = useUpdateProject(() => {onClose?.()});
- const {mutate:CeateProject,isPending:isCreating} = useCreateProject(()=>{onClose?.()})
const {
register,
@@ -70,11 +82,11 @@ const ManageProjectInfo = ({ project, onClose }) => {
projectStatusId:
String(projects_Details?.projectStatus?.id) ||
DEFAULT_EMPTY_STATUS_IDF,
- promoterId: projects_Details?.promoter?.id || "",
- pmcId: projects_Details?.pmc?.id || "",
+ // promoterId: projects_Details?.promoter?.id || "", // hide temp. for version 1
+ // pmcId: projects_Details?.pmc?.id || "",
});
setAddressLength(projects_Details?.projectAddress?.length || 0);
- }, [project, projects_Details, reset,data]);
+ }, [project, projects_Details, reset]);
const onSubmitForm = (formData) => {
if (project) {
@@ -85,13 +97,13 @@ const ManageProjectInfo = ({ project, onClose }) => {
id: project,
};
UpdateProject({ projectId: project, payload: payload });
- }else{
- let payload = {
+ } else {
+ let payload = {
...formData,
startDate: localToUtc(formData.startDate),
endDate: localToUtc(formData.endDate),
};
- CeateProject(payload)
+ CeateProject(payload);
}
};
@@ -104,7 +116,6 @@ const ManageProjectInfo = ({ project, onClose }) => {
onOpen({ startStep: 2, flowType: "default" });
};
-
return (
@@ -254,7 +265,7 @@ const ManageProjectInfo = ({ project, onClose }) => {
)}
-
+ {/*
@@ -330,7 +341,7 @@ const ManageProjectInfo = ({ project, onClose }) => {
-
+
*/}
@@ -385,3 +400,15 @@ const ManageProjectInfo = ({ project, onClose }) => {
};
export default ManageProjectInfo;
+
+export const ProjectModal = () => {
+ const { isOpen, data, closeModal } = useProjectModal();
+
+ return (
+
}
+ onClose={closeModal}
+ />
+ );
+};
diff --git a/src/components/Project/ProjectSchema.jsx b/src/components/Project/ProjectSchema.jsx
index 6caafe81..cd0d74a2 100644
--- a/src/components/Project/ProjectSchema.jsx
+++ b/src/components/Project/ProjectSchema.jsx
@@ -11,8 +11,8 @@ export const projectDefault = {
startDate: currentDate.toISOString().split("T")[0],
endDate: currentDate.toISOString().split("T")[0],
projectStatusId: DEFAULT_EMPTY_STATUS_ID,
- promoterId: "",
- pmcId: "",
+ // promoterId: "",
+ // pmcId: "",
};
@@ -39,8 +39,8 @@ export const projectSchema = z
.min(1, { message: "End Date is required" })
.default(projectDefault),
projectStatusId: z.string().min(1, { message: "Status is required" }),
- promoterId: z.string().min(1, { message: "Promoter is required" }),
- pmcId: z.string().min(1, { message: "PMC is required" }),
+ // promoterId: z.string().min(1, { message: "Promoter is required" }),
+ // pmcId: z.string().min(1, { message: "PMC is required" }),
})
.refine(
(data) => {
diff --git a/src/components/Tenant/OrganizationInfo.jsx b/src/components/Tenant/OrganizationInfo.jsx
index 1e166423..29f3843f 100644
--- a/src/components/Tenant/OrganizationInfo.jsx
+++ b/src/components/Tenant/OrganizationInfo.jsx
@@ -29,7 +29,6 @@ const OrganizationInfo = ({ onNext, onPrev, onSubmitTenant }) => {
error,
isPending,
} = useCreateTenant(() => {
- debugger
onNext()
});
@@ -134,7 +133,6 @@ const OrganizationInfo = ({ onNext, onPrev, onSubmitTenant }) => {
control={control}
placeholder="DD-MM-YYYY"
maxDate={new Date()}
- className={errors.onBoardingDate ? "is-invalid" : ""}
/>
{errors.onBoardingDate && (
diff --git a/src/components/common/EmployeeSearchInput.jsx b/src/components/common/EmployeeSearchInput.jsx
index f1121e6b..c4cdda09 100644
--- a/src/components/common/EmployeeSearchInput.jsx
+++ b/src/components/common/EmployeeSearchInput.jsx
@@ -1,13 +1,11 @@
-import { useState, useEffect } from "react";
+import { useState, useEffect, useRef } from "react";
import { useEmployeesName } from "../../hooks/useEmployees";
import { useDebounce } from "../../utils/appUtils";
import { useController } from "react-hook-form";
import Avatar from "./Avatar";
-
-
-const EmployeeSearchInput = ({ control, name, projectId,placeholder }) => {
+const EmployeeSearchInput = ({ control, name, projectId, placeholder }) => {
const {
field: { onChange, value, ref },
fieldState: { error },
@@ -17,6 +15,8 @@ const EmployeeSearchInput = ({ control, name, projectId,placeholder }) => {
const [showDropdown, setShowDropdown] = useState(false);
const debouncedSearch = useDebounce(search, 500);
+ const wrapperRef = useRef(null);
+
const {
data: employees,
isLoading,
@@ -29,6 +29,19 @@ const EmployeeSearchInput = ({ control, name, projectId,placeholder }) => {
}
}, [value, employees]);
+ useEffect(() => {
+ const handleClickOutside = (e) => {
+ if (wrapperRef.current && !wrapperRef.current.contains(e.target)) {
+ setShowDropdown(false);
+ }
+ };
+ document.addEventListener("mousedown", handleClickOutside);
+
+ return () => {
+ document.removeEventListener("mousedown", handleClickOutside);
+ };
+ }, []);
+
const handleSelect = (employee) => {
onChange(employee.id);
setSearch(employee.firstName + " " + employee.lastName);
@@ -36,17 +49,17 @@ const EmployeeSearchInput = ({ control, name, projectId,placeholder }) => {
};
return (
-
+
{
setSearch(e.target.value);
setShowDropdown(true);
- onChange("");
+ onChange("");
}}
onFocus={() => {
if (search) setShowDropdown(true);
@@ -55,34 +68,33 @@ const EmployeeSearchInput = ({ control, name, projectId,placeholder }) => {
{showDropdown && (employees?.data?.length > 0 || isLoading) && (
{isLoading ? (
-
Searching...
-
) : (
employees?.data?.map((emp) => (
- - handleSelect(emp)}
- >
-
-
-
- {`${emp?.firstName} ${emp?.lastName}`.trim()}
-
-
-
+ - handleSelect(emp)}
+ >
+
+
+
+ {`${emp?.firstName} ${emp?.lastName}`.trim()}
+
+
+
))
)}
@@ -94,3 +106,4 @@ const EmployeeSearchInput = ({ control, name, projectId,placeholder }) => {
};
export default EmployeeSearchInput;
+
diff --git a/src/hooks/useDirectory.js b/src/hooks/useDirectory.js
index a1fd716b..a4111b85 100644
--- a/src/hooks/useDirectory.js
+++ b/src/hooks/useDirectory.js
@@ -415,7 +415,7 @@ export const useUpdateBucket = (onSuccessCallBack) => {
});
};
-export const useAssignEmpToBucket = () => {
+export const useAssignEmpToBucket = (onSuccessCallBack) => {
return useMutation({
mutationFn: async ({ bucketId, EmployeePayload }) =>
await DirectoryRepository.AssignedBuckets(bucketId, EmployeePayload),
diff --git a/src/hooks/useProjects.js b/src/hooks/useProjects.js
index 9f5c48b9..d4dd36dc 100644
--- a/src/hooks/useProjects.js
+++ b/src/hooks/useProjects.js
@@ -3,7 +3,7 @@ import { cacheData, getCachedData } from "../slices/apiDataManager";
import ProjectRepository from "../repositories/ProjectRepository";
import { useProfile } from "./useProfile";
import { useDispatch, useSelector } from "react-redux";
-import { setProjectId } from "../slices/localVariablesSlice";
+import { closeProjectModal, openProjectModal, setProjectId } from "../slices/localVariablesSlice";
import EmployeeList from "../components/Directory/EmployeeList";
import eventBus from "../services/eventBus";
import {
@@ -18,6 +18,18 @@ export const useCurrentService = () => {
return useSelector((store) => store.globalVariables.selectedServiceId);
};
+export const useProjectModal = () => {
+ const dispatch = useDispatch();
+ const { isOpen, data } = useSelector((state) => state.localVariables.ProjectModal);
+
+ return {
+ isOpen,
+ data,
+ openModal: (payload = null) => dispatch(openProjectModal(payload)),
+ closeModal: () => dispatch(closeProjectModal()),
+ };
+};
+
// ------------------------------Query-------------------
export const useProjects = () => {
diff --git a/src/slices/localVariablesSlice.jsx b/src/slices/localVariablesSlice.jsx
index 784100e0..15f7dd6a 100644
--- a/src/slices/localVariablesSlice.jsx
+++ b/src/slices/localVariablesSlice.jsx
@@ -19,6 +19,10 @@ const localVariablesSlice = createSlice({
startStep: 1,
flowType: "default",
},
+ ProjectModal:{
+ isOpen: false,
+ data: null,
+ },
AuthModal: {
isOpen: false,
@@ -70,6 +74,17 @@ const localVariablesSlice = createSlice({
closeAuthModal: (state, action) => {
state.AuthModal.isOpen = false;
},
+
+
+ // project modal
+ openProjectModal: (state, action) => {
+ state.ProjectModal.isOpen = true;
+ state.ProjectModal.data = action.payload || null;
+ },
+ closeProjectModal: (state) => {
+ state.ProjectModal.isOpen = false;
+ state.ProjectModal.data = null;
+ },
},
});
@@ -84,5 +99,6 @@ export const {
toggleOrgModal,
openAuthModal,
closeAuthModal,
+ openProjectModal, closeProjectModal
} = localVariablesSlice.actions;
export default localVariablesSlice.reducer;
\ No newline at end of file