feat: add toast
This commit is contained in:
Generated
+27
-1
@@ -28,6 +28,7 @@
|
|||||||
"radix-ui": "^1.4.3",
|
"radix-ui": "^1.4.3",
|
||||||
"react": "^19.2.0",
|
"react": "^19.2.0",
|
||||||
"react-dom": "^19.2.0",
|
"react-dom": "^19.2.0",
|
||||||
|
"react-hot-toast": "^2.6.0",
|
||||||
"react-router-dom": "^7.13.1",
|
"react-router-dom": "^7.13.1",
|
||||||
"shadcn": "^4.0.5",
|
"shadcn": "^4.0.5",
|
||||||
"tailwind-merge": "^3.5.0",
|
"tailwind-merge": "^3.5.0",
|
||||||
@@ -5187,7 +5188,6 @@
|
|||||||
"version": "3.2.3",
|
"version": "3.2.3",
|
||||||
"resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz",
|
"resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz",
|
||||||
"integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==",
|
"integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==",
|
||||||
"devOptional": true,
|
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
"node_modules/data-uri-to-buffer": {
|
"node_modules/data-uri-to-buffer": {
|
||||||
@@ -6352,6 +6352,15 @@
|
|||||||
"url": "https://github.com/sponsors/sindresorhus"
|
"url": "https://github.com/sponsors/sindresorhus"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/goober": {
|
||||||
|
"version": "2.1.18",
|
||||||
|
"resolved": "https://registry.npmjs.org/goober/-/goober-2.1.18.tgz",
|
||||||
|
"integrity": "sha512-2vFqsaDVIT9Gz7N6kAL++pLpp41l3PfDuusHcjnGLfR6+huZkl6ziX+zgVC3ZxpqWhzH6pyDdGrCeDhMIvwaxw==",
|
||||||
|
"license": "MIT",
|
||||||
|
"peerDependencies": {
|
||||||
|
"csstype": "^3.0.10"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/gopd": {
|
"node_modules/gopd": {
|
||||||
"version": "1.2.0",
|
"version": "1.2.0",
|
||||||
"resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
|
||||||
@@ -8136,6 +8145,23 @@
|
|||||||
"react": "^19.2.4"
|
"react": "^19.2.4"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/react-hot-toast": {
|
||||||
|
"version": "2.6.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/react-hot-toast/-/react-hot-toast-2.6.0.tgz",
|
||||||
|
"integrity": "sha512-bH+2EBMZ4sdyou/DPrfgIouFpcRLCJ+HoCA32UoAYHn6T3Ur5yfcDCeSr5mwldl6pFOsiocmrXMuoCJ1vV8bWg==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"csstype": "^3.1.3",
|
||||||
|
"goober": "^2.1.16"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=10"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"react": ">=16",
|
||||||
|
"react-dom": ">=16"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/react-refresh": {
|
"node_modules/react-refresh": {
|
||||||
"version": "0.18.0",
|
"version": "0.18.0",
|
||||||
"resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.18.0.tgz",
|
"resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.18.0.tgz",
|
||||||
|
|||||||
@@ -30,6 +30,7 @@
|
|||||||
"radix-ui": "^1.4.3",
|
"radix-ui": "^1.4.3",
|
||||||
"react": "^19.2.0",
|
"react": "^19.2.0",
|
||||||
"react-dom": "^19.2.0",
|
"react-dom": "^19.2.0",
|
||||||
|
"react-hot-toast": "^2.6.0",
|
||||||
"react-router-dom": "^7.13.1",
|
"react-router-dom": "^7.13.1",
|
||||||
"shadcn": "^4.0.5",
|
"shadcn": "^4.0.5",
|
||||||
"tailwind-merge": "^3.5.0",
|
"tailwind-merge": "^3.5.0",
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
import {BrowserRouter, Routes, Route, Navigate} from "react-router-dom";
|
import {BrowserRouter, Routes, Route, Navigate} from "react-router-dom";
|
||||||
|
import {Toaster} from "react-hot-toast";
|
||||||
|
|
||||||
import Login from "@/pages/Login";
|
import Login from "@/pages/Login";
|
||||||
|
|
||||||
@@ -26,6 +27,8 @@ import ImportData from "./pages/ImportData";
|
|||||||
export default function App() {
|
export default function App() {
|
||||||
return (
|
return (
|
||||||
<BrowserRouter>
|
<BrowserRouter>
|
||||||
|
<Toaster position="top-right" />
|
||||||
|
|
||||||
<AuthProvider>
|
<AuthProvider>
|
||||||
<Routes>
|
<Routes>
|
||||||
<Route element={<PublicRoute />}>
|
<Route element={<PublicRoute />}>
|
||||||
|
|||||||
@@ -1,11 +1,49 @@
|
|||||||
import apiClient from "@/api/client";
|
import apiClient from "@/api/client";
|
||||||
|
import toast from "react-hot-toast";
|
||||||
|
|
||||||
export const getCareersApi = async () => {
|
export const getCareersApi = async () => {
|
||||||
const res = await apiClient.get("/careers/getAll?admin=true");
|
const res = await apiClient.get("/careers/getAll?admin=true");
|
||||||
return res.data;
|
return res.data;
|
||||||
};
|
};
|
||||||
|
|
||||||
export const deleteCareerApi = async (id: number) => {
|
export const createCareerApi = async (data: any) => {
|
||||||
const res = await apiClient.delete(`/careers/${id}`);
|
try {
|
||||||
|
const res = await apiClient.post("/careers", data);
|
||||||
|
|
||||||
|
toast.success("Career created successfully");
|
||||||
|
|
||||||
return res.data;
|
return res.data;
|
||||||
|
} catch (error: any) {
|
||||||
|
toast.error(error?.response?.data?.message || "Failed to create career");
|
||||||
|
|
||||||
|
throw error;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
export const updateCareerApi = async (id: number, data: any) => {
|
||||||
|
try {
|
||||||
|
const res = await apiClient.patch(`/careers/${id}`, data);
|
||||||
|
|
||||||
|
toast.success("Career updated successfully");
|
||||||
|
|
||||||
|
return res.data;
|
||||||
|
} catch (error: any) {
|
||||||
|
toast.error(error?.response?.data?.message || "Failed to update career");
|
||||||
|
|
||||||
|
throw error;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
export const deleteCareerApi = async (id: number) => {
|
||||||
|
try {
|
||||||
|
const res = await apiClient.delete(`/careers/${id}`);
|
||||||
|
|
||||||
|
toast.success("Career deleted successfully");
|
||||||
|
|
||||||
|
return res.data;
|
||||||
|
} catch (error: any) {
|
||||||
|
toast.error(error?.response?.data?.message || "Failed to delete career");
|
||||||
|
|
||||||
|
throw error;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
import apiClient from "@/api/client";
|
import apiClient from "@/api/client";
|
||||||
|
import toast from "react-hot-toast";
|
||||||
|
|
||||||
export interface Department {
|
export interface Department {
|
||||||
departmentId: string;
|
departmentId: string;
|
||||||
@@ -9,6 +10,8 @@ export interface Department {
|
|||||||
para3: string;
|
para3: string;
|
||||||
facilities: string;
|
facilities: string;
|
||||||
services: string;
|
services: string;
|
||||||
|
isActive?: boolean;
|
||||||
|
sortOrder?: number;
|
||||||
}
|
}
|
||||||
|
|
||||||
export const getDepartmentsApi = async () => {
|
export const getDepartmentsApi = async () => {
|
||||||
@@ -25,8 +28,19 @@ export const createDepartmentApi = async (data: {
|
|||||||
facilities?: string;
|
facilities?: string;
|
||||||
services?: string;
|
services?: string;
|
||||||
}) => {
|
}) => {
|
||||||
|
try {
|
||||||
const res = await apiClient.post("/departments", data);
|
const res = await apiClient.post("/departments", data);
|
||||||
|
|
||||||
|
toast.success("Department created successfully");
|
||||||
|
|
||||||
return res.data;
|
return res.data;
|
||||||
|
} catch (error: any) {
|
||||||
|
toast.error(
|
||||||
|
error?.response?.data?.message || "Failed to create department",
|
||||||
|
);
|
||||||
|
|
||||||
|
throw error;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
export const updateDepartmentApi = async (
|
export const updateDepartmentApi = async (
|
||||||
@@ -40,11 +54,33 @@ export const updateDepartmentApi = async (
|
|||||||
services?: string;
|
services?: string;
|
||||||
},
|
},
|
||||||
) => {
|
) => {
|
||||||
|
try {
|
||||||
const res = await apiClient.put(`/departments/${departmentId}`, data);
|
const res = await apiClient.put(`/departments/${departmentId}`, data);
|
||||||
|
|
||||||
|
toast.success("Department updated successfully");
|
||||||
|
|
||||||
return res.data;
|
return res.data;
|
||||||
|
} catch (error: any) {
|
||||||
|
toast.error(
|
||||||
|
error?.response?.data?.message || "Failed to update department",
|
||||||
|
);
|
||||||
|
|
||||||
|
throw error;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
export const deleteDepartmentApi = async (departmentId: string) => {
|
export const deleteDepartmentApi = async (departmentId: string) => {
|
||||||
|
try {
|
||||||
const res = await apiClient.delete(`/departments/${departmentId}`);
|
const res = await apiClient.delete(`/departments/${departmentId}`);
|
||||||
|
|
||||||
|
toast.success("Department deleted successfully");
|
||||||
|
|
||||||
return res.data;
|
return res.data;
|
||||||
|
} catch (error: any) {
|
||||||
|
toast.error(
|
||||||
|
error?.response?.data?.message || "Failed to delete department",
|
||||||
|
);
|
||||||
|
|
||||||
|
throw error;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
import apiClient from "@/api/client";
|
import apiClient from "@/api/client";
|
||||||
|
import toast from "react-hot-toast";
|
||||||
|
|
||||||
export interface Doctor {
|
export interface Doctor {
|
||||||
doctorId: string;
|
doctorId: string;
|
||||||
@@ -34,21 +35,48 @@ export const getDoctorByIdApi = async (doctorId: string) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
export const createDoctorApi = async (data: Doctor) => {
|
export const createDoctorApi = async (data: Doctor) => {
|
||||||
|
try {
|
||||||
const res = await apiClient.post("/doctors", data);
|
const res = await apiClient.post("/doctors", data);
|
||||||
|
|
||||||
|
toast.success("Doctor created successfully");
|
||||||
|
|
||||||
return res.data;
|
return res.data;
|
||||||
|
} catch (error: any) {
|
||||||
|
toast.error(error?.response?.data?.message || "Failed to create doctor");
|
||||||
|
|
||||||
|
throw error;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
export const updateDoctorApi = async (
|
export const updateDoctorApi = async (
|
||||||
doctorId: string,
|
doctorId: string,
|
||||||
data: Partial<Doctor>,
|
data: Partial<Doctor>,
|
||||||
) => {
|
) => {
|
||||||
|
try {
|
||||||
const res = await apiClient.patch(`/doctors/${doctorId}`, data);
|
const res = await apiClient.patch(`/doctors/${doctorId}`, data);
|
||||||
|
|
||||||
|
toast.success("Doctor updated successfully");
|
||||||
|
|
||||||
return res.data;
|
return res.data;
|
||||||
|
} catch (error: any) {
|
||||||
|
toast.error(error?.response?.data?.message || "Failed to update doctor");
|
||||||
|
|
||||||
|
throw error;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
export const deleteDoctorApi = async (doctorId: string) => {
|
export const deleteDoctorApi = async (doctorId: string) => {
|
||||||
|
try {
|
||||||
const res = await apiClient.delete(`/doctors/${doctorId}`);
|
const res = await apiClient.delete(`/doctors/${doctorId}`);
|
||||||
|
|
||||||
|
toast.success("Doctor deleted successfully");
|
||||||
|
|
||||||
return res.data;
|
return res.data;
|
||||||
|
} catch (error: any) {
|
||||||
|
toast.error(error?.response?.data?.message || "Failed to delete doctor");
|
||||||
|
|
||||||
|
throw error;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
export const getDoctorTimingApi = async (doctorId: string) => {
|
export const getDoctorTimingApi = async (doctorId: string) => {
|
||||||
|
|||||||
Reference in New Issue
Block a user