diff --git a/src/components/Organization/AssignOrg.jsx b/src/components/Organization/AssignOrg.jsx new file mode 100644 index 00000000..0fde3168 --- /dev/null +++ b/src/components/Organization/AssignOrg.jsx @@ -0,0 +1,9 @@ +import React from 'react' + +const AssignOrg = () => { + return ( +
AssignOrg
+ ) +} + +export default AssignOrg \ No newline at end of file diff --git a/src/components/Organization/ManageOrganization.jsx b/src/components/Organization/ManageOrganization.jsx index 80a9bcff..b143b165 100644 --- a/src/components/Organization/ManageOrganization.jsx +++ b/src/components/Organization/ManageOrganization.jsx @@ -8,7 +8,9 @@ import { import Modal from "../common/Modal"; import { useCreateOrganization, + useOrganizationBySPRID, useOrganizationModal, + useOrganizationsList, } from "../../hooks/useOrganization"; import Label from "../common/Label"; import SelectMultiple from "../common/SelectMultiple"; @@ -18,14 +20,26 @@ const ManageOrganization = ({ projectOrganizations = ["ee"], organizationId = null, }) => { - const [step, setStep] = useState(1); // 1 = Service Provider, 2 = Org Details, 3 = Add New Org + const [step, setStep] = useState(1); const orgModal = useOrganizationModal(); - const { data: services, isLoading } = useServices(); + const { data: masterService, isLoading } = useServices(); + const [searchText, setSearchText] = useState(); + const [SPRID, setSPRID] = useState(""); + const { data: orgList, isLoading: orgLoading } = useOrganizationsList( + 20, + 1, + true, + searchText + ); + const { data: OrgListbySPRID, isLoading: isLoadingBySPRID } = + useOrganizationBySPRID(SPRID); + const [Organization, setOrganization] = useState({}); const method = useForm({ resolver: zodResolver(organizationSchema), defaultValues: defaultOrganizationValues, }); + console.log(masterService); const { handleSubmit, @@ -52,7 +66,7 @@ const ManageOrganization = ({ } if (step === 1) { - return projectOrganizations && projectOrganizations.length > 0 + return projectOrganizations && projectOrganizations !== null ? "Add Organization" : "Find Organization"; } @@ -74,32 +88,82 @@ const ManageOrganization = ({ {step === 1 && (
- +
-
- {orgModal.orgData && (

Don't have Service provder id, Select Service Provider orgModal.orgData ? setStep(2):setStep(3)}>Choose Provider

-)} +
+
+ {orgList?.map((org) => ( +
+
+ +
+ +
+
+
+
{org.name}
+ + {org.contactPerson} + +
+ In Meeting +
+
+
+ +
+
+
+
+ ))} +
+ + {orgModal.orgData && ( +

+ Don't have required organization, Please find using{" "} + setStep(2)} + > + SPRID + +

+ )}
- {/* ======== org list ======*/} - {/*
-
setStep(2)} - > - - Sample Organization 1 -
-
*/} +
+ {!projectOrganizations && ( + + )} -
+
+
+
+
+ ))} -
+
+ - +
+
+ +
+ {Organization.address} +
+
+
+ +
+
+ +
    + {masterService.data && + masterService.data?.map((serv) => ( +
  • + + {serv.name} +
  • + ))} +
+
+ +
+ + +
)} @@ -309,48 +469,3 @@ const ManageOrganization = ({ }; export default ManageOrganization; - -//
-//
-//
-// -//
- -//
-//
-//
-//
Icing sweet gummies
-// 15 minutes -//
-// In Meeting -//
-//
-//
-// -//
-//
-//
-//
- -// {/* Icon item */} -//
-//
-// -//
- -//
-//
-//
-//
Icing sweet gummies
-// 15 minutes -//
-// In Meeting -//
-//
-//
-// -//
-//
-//
-//
-//
diff --git a/src/components/Organization/ManageOrganization1.jsx b/src/components/Organization/ManageOrganization1.jsx new file mode 100644 index 00000000..4ba25c4f --- /dev/null +++ b/src/components/Organization/ManageOrganization1.jsx @@ -0,0 +1,193 @@ +const ManageOrganization1 = ({ + projectOrganizations = [], + organizationId = null, +}) => { + const [step, setStep] = useState(1); // default = scenario decision + const orgModal = useOrganizationModal(); + const { data: services, isLoading } = useServices(); + + const method = useForm({ + resolver: zodResolver(organizationSchema), + defaultValues: defaultOrganizationValues, + }); + + const { + handleSubmit, + register, + reset, + formState: { errors }, + } = method; + + const { mutate: CreateOrganization, isPending } = useCreateOrganization( + () => { + reset(defaultOrganizationValues); + orgModal.onClose(); + setStep(1); // reset to first step + } + ); + + // 🔹 Decide first step when modal opens + useEffect(() => { + if (orgModal.isOpen) { + if (organizationId) { + setStep(3); // update flow → show org details directly + } else if (projectOrganizations && projectOrganizations.length > 0) { + setStep(1); // Scenario 1 → from current tenant list + } else { + setStep(2); // Scenario 2 → search with SPRID + } + } + }, [orgModal.isOpen, organizationId, projectOrganizations]); + + const onSubmit = (OrgPayload) => { + CreateOrganization(OrgPayload); + }; + + const RenderTitle = useMemo(() => { + if (organizationId) return "Update Organization"; + if (step === 1) return "Add Organization"; // current tenant + if (step === 2) return "Find Organization"; // search with SPRID + if (step === 3) return "Organization Details"; + if (step === 4) return "Create Organization"; + return "Manage Organization"; + }, [step, organizationId]); + + const contentBody = ( +
+ {/* ---------- STEP 1: From Current Tenant Organizations ---------- */} + {step === 1 && ( +
+
+ {projectOrganizations.map((org, idx) => ( +
setStep(3)} + > + + {org} +
+ ))} +
+ +
+ + +
+
+ )} + + {/* ---------- STEP 2: Search by Service Provider ID ---------- */} + {step === 2 && ( +
+
+ + +
+ + {/* Example SPR results */} +
+
setStep(3)} + > + + Sample Organization (SPRID) +
+
+ +
+ + +
+
+ )} + + {/* ---------- STEP 3: Organization Details ---------- */} + {step === 3 && ( +
+

+ Show organization details here (from SPR or tenant list). User + selects services and clicks Add. +

+
+ +
    +
  • + + Service 1 +
  • +
  • + + Service 2 +
  • +
+
+
+ + +
+
+ )} + + {/* ---------- STEP 4: Create New Organization ---------- */} + {step === 4 && ( + +
+ {/* same form as your code, unchanged */} + {/* ... */} +
+
+ )} +
+ ); + + return ( + + ); +}; + +export default ManageOrganization; \ No newline at end of file diff --git a/src/components/Project/ProjectOrganizations.jsx b/src/components/Project/ProjectOrganizations.jsx index c7093542..fd30568e 100644 --- a/src/components/Project/ProjectOrganizations.jsx +++ b/src/components/Project/ProjectOrganizations.jsx @@ -7,7 +7,8 @@ const ProjectOrganizations = () => { const selectedProject = useSelectedProject() return (
-
+
+
+

diff --git a/src/hooks/useOrganization.js b/src/hooks/useOrganization.js index 2fa6ea00..34e249ff 100644 --- a/src/hooks/useOrganization.js +++ b/src/hooks/useOrganization.js @@ -24,6 +24,15 @@ export const useOrganizationModal = () => { }; }; +export const useOrganizationBySPRID =(sprid)=>{ + return useQuery({ + queryKey:["organization by",sprid], + queryFn:async()=>await OrganizationRepository.getOrganizationBySPRID(sprid), + enabled:!!sprid + }) +} + + export const useOrganizationsList = ( pageSize, pageNumber, diff --git a/src/hooks/useProjects.js b/src/hooks/useProjects.js index 5650f0fa..b411ef33 100644 --- a/src/hooks/useProjects.js +++ b/src/hooks/useProjects.js @@ -268,6 +268,18 @@ export const useProjectLevelEmployeePermission = (employeeId, projectId) => { }); }; + +export const useProjectAssignedServices =(projectId)=>{ + return useQuery({ + queryKey: ["projectAssignedServices", projectId], + queryFn: async () => { + const resp = await ProjectRepository.getProjectAssignedServices(projectId); + return resp.data; + }, + enabled:!!projectId, + }); +} + // -- -------------Mutation------------------------------- export const useCreateProject = ({ onSuccessCallback }) => { diff --git a/src/pages/Directory/ContactsPage.jsx b/src/pages/Directory/ContactsPage.jsx index 40759abe..670b3ef9 100644 --- a/src/pages/Directory/ContactsPage.jsx +++ b/src/pages/Directory/ContactsPage.jsx @@ -98,7 +98,7 @@ const ContactsPage = ({ projectId, searchText, onExport }) => { Pagination={ } diff --git a/src/repositories/OrganizationRespository.jsx b/src/repositories/OrganizationRespository.jsx index ccde9714..36f41006 100644 --- a/src/repositories/OrganizationRespository.jsx +++ b/src/repositories/OrganizationRespository.jsx @@ -10,6 +10,8 @@ const OrganizationRepository = { ); }, + getOrganizationBySPRID :()=>api.get(`/api/Organization/list?sprid=${sprid}`), + assignOrganizationToProject:(data)=>api.post(`/api/Organization/assign/project`,data) }; diff --git a/src/repositories/ProjectRepository.jsx b/src/repositories/ProjectRepository.jsx index fc1c648d..af5c6e67 100644 --- a/src/repositories/ProjectRepository.jsx +++ b/src/repositories/ProjectRepository.jsx @@ -45,7 +45,12 @@ const ProjectRepository = { getProjectLevelModules:()=>api.get(`/api/Project/get/proejct-level/modules`), getProjectLevelEmployeePermissions:(employeeId,projectId)=>api.get(`/api/Project/get/project-level-permission/employee/${employeeId}/project/${projectId}`), updateProjectLevelEmployeePermission:(data)=>api.post(`/api/Project/assign/project-level-permission`,data), - getAllProjectLevelPermission:(projectId)=>api.get(`/api/Project/get/all/project-level-permission/${projectId}`) + getAllProjectLevelPermission:(projectId)=>api.get(`/api/Project/get/all/project-level-permission/${projectId}`), + + + // Services + + getProjectAssignedServices:(projectId)=>api.get(`/api/Project/get/assigned/services/${projectId}`) }; export const TasksRepository = {