diff --git a/src/ModalProvider.jsx b/src/ModalProvider.jsx
index f098ed0f..a68465f7 100644
--- a/src/ModalProvider.jsx
+++ b/src/ModalProvider.jsx
@@ -1,14 +1,12 @@
import React from 'react'
-import Modal from './components/common/Modal'
import ManageOrganization from './components/Organization/ManageOrganization'
+import { useOrganizationModal } from './hooks/useOrganization';
const ModalProvider = () => {
- return (
- <>
+ const { isOpen } = useOrganizationModal();
+
+ return <>{isOpen && }>;
+};
-
- >
- )
-}
export default ModalProvider
\ No newline at end of file
diff --git a/src/components/Organization/ManageOrganization.jsx b/src/components/Organization/ManageOrganization.jsx
index cd98a2e0..d8f9b936 100644
--- a/src/components/Organization/ManageOrganization.jsx
+++ b/src/components/Organization/ManageOrganization.jsx
@@ -6,77 +6,135 @@ import {
organizationSchema,
} from "./OrganizationSchema";
import Modal from "../common/Modal";
-import { useOrganization } from "../../hooks/useDirectory";
-import { useOrganizationModal } from "../../hooks/useOrganization";
+import { useCreateOrganization, useOrganizationModal } from "../../hooks/useOrganization";
import Label from "../common/Label";
import SelectMultiple from "../common/SelectMultiple";
+import { useServices } from "../../hooks/masterHook/useMaster";
const ManageOrganization = () => {
const orgModal = useOrganizationModal();
+ const { data: services,isLoading } = useServices();
+
const method = useForm({
resolver: zodResolver(organizationSchema),
defaultValues: defaultOrganizationValues,
});
- const { handleSubmit, watch, register } = method;
+ const {
+ handleSubmit,
+ register,
+ formState: { errors },
+ } = method;
- const onSubmit = () => {};
+ const {mutate:CreateOrganization,isPending} = useCreateOrganization(()=>{})
+ const onSubmit = (OrgPayload) => {
+ CreateOrganization()
+ };
+ console.log(services)
const contentBody = (
);
+
return (
);
diff --git a/src/components/Organization/OrganizationSchema.js b/src/components/Organization/OrganizationSchema.js
index cd8a81d1..54b8db95 100644
--- a/src/components/Organization/OrganizationSchema.js
+++ b/src/components/Organization/OrganizationSchema.js
@@ -3,12 +3,13 @@ import { array, z } from "zod";
const phoneRegex = /^\+?[1-9]\d{6,14}$/;
export const organizationSchema = z.object({
- organizationName: z.string().min(1, { message: "Name is required" }),
- contactPhone: z
+ name: z.string().min(1, { message: "Name is required" }),
+ contactNumber: z
.string()
.trim()
- .min(7)
- .max(20)
+ .min(7, { message: "Contact number must be at least 7 digits" })
+ .max(20, { message: "Contact number cannot exceed 12 digits" })
+
.regex(phoneRegex, { message: "Invalid phone number" }),
contactPerson: z.string().min(1, { message: "Person name required" }),
address: z.string().min(1, { message: "Address is required!" }),
@@ -16,17 +17,16 @@ export const organizationSchema = z.object({
.string()
.min(1, { message: "Email is required" })
.email("Invalid email address"),
- listOfServiceId: z
+ serviceIds: z
.array(z.string())
.min(1, { message: "Please insert service id" }),
});
-
export const defaultOrganizationValues = {
- organizationSchema:"",
- contactPhone:"",
- contactPerson:"",
- address:"",
- email:"",
- listOfServiceId:[]
-}
\ No newline at end of file
+ name: "",
+ contactNumber: "",
+ contactPerson: "",
+ address: "",
+ email: "",
+ serviceIds: [],
+};
diff --git a/src/components/common/SelectMultiple.jsx b/src/components/common/SelectMultiple.jsx
index 200aa9e7..01b327cc 100644
--- a/src/components/common/SelectMultiple.jsx
+++ b/src/components/common/SelectMultiple.jsx
@@ -12,7 +12,6 @@ const SelectMultiple = ({
valueKey = "id",
placeholder = "Please select...",
IsLoading = false,
- required = false,
}) => {
const { setValue, watch } = useFormContext();
const selectedValues = watch(name) || [];
@@ -147,9 +146,7 @@ const SelectMultiple = ({
className="multi-select-dropdown-container"
style={{ position: "relative" }}
>
-
+
{
+ return useQuery({
+ queryKey:["services"],
+ queryFn:async()=> await MasterRespository.getServices()
+ })
+}
export const useMasterMenu = ()=>{
return useQuery({
diff --git a/src/hooks/useOrganization.js b/src/hooks/useOrganization.js
index f01495c9..598eace6 100644
--- a/src/hooks/useOrganization.js
+++ b/src/hooks/useOrganization.js
@@ -1,16 +1,42 @@
import { useSelector, useDispatch } from "react-redux";
-import { toggleOrgModal,openOrgModal,closeOrgModal } from "../slices/localVariablesSlice";
-
+import {
+ toggleOrgModal,
+ openOrgModal,
+ closeOrgModal,
+} from "../slices/localVariablesSlice";
+import { useMutation } from "@tanstack/react-query";
+import OrganizationRepository from "../repositories/OrganizationRespository";
+import showToast from "../services/toastService";
export const useOrganizationModal = () => {
const dispatch = useDispatch();
- const isOpen = useSelector((state) => state.localVariables.OrganizationModal.isOpen);
+ const isOpen = useSelector(
+ (state) => state.localVariables.OrganizationModal.isOpen
+ );
return {
isOpen,
onOpen: () => dispatch(openOrgModal()),
onClose: () => dispatch(closeOrgModal()),
- Togggle:()=> dispatch(toggleOrgModal(isOpen))
+ Togggle: () => dispatch(toggleOrgModal(isOpen)),
};
};
+export const useCreateOrganization = (onSuccessCallback) => {
+ return useMutation({
+ mutationFn: async (OrgPayload) =>
+ await OrganizationRepository.createOrganization(OrgPayload),
+ onSuccess: (_, variables) => {
+ showToast("Organization created successfully", "success");
+ if (onSuccessCallback) onSuccessCallback();
+ },
+ onError: (error) => {
+ showToast(
+ error.response.data.message ||
+ error.message ||
+ "Something went wrong please try again !",
+ "error"
+ );
+ },
+ });
+};
diff --git a/src/repositories/MastersRepository.jsx b/src/repositories/MastersRepository.jsx
index a853fdbe..1a0416f7 100644
--- a/src/repositories/MastersRepository.jsx
+++ b/src/repositories/MastersRepository.jsx
@@ -106,4 +106,8 @@ export const MasterRespository = {
createDocumentType: (data) => api.post(`/api/Master/document-type`, data),
updateDocumentType: (id, data) =>
api.put(`/api/Master/document-type/edit/${id}`, data),
+
+
+
+ getServices:()=>api.get("/api/Master/global-service/list")
};
diff --git a/src/repositories/OrganizationRespository.jsx b/src/repositories/OrganizationRespository.jsx
new file mode 100644
index 00000000..4bd2f9d4
--- /dev/null
+++ b/src/repositories/OrganizationRespository.jsx
@@ -0,0 +1,9 @@
+import { api } from "../utils/axiosClient";
+
+
+const OrganizationRepository = {
+ createOrganization:(data)=>api.post('/api/Organization/create',data)
+}
+
+export default OrganizationRepository;
+