feat: clinic doc integration

This commit is contained in:
deepvasoya 2025-05-26 12:11:41 +05:30
parent 232f11d142
commit 24c600ac32
8 changed files with 417 additions and 629 deletions

View File

@ -1,5 +1,5 @@
import { Clear } from '@mui/icons-material'; import { Clear } from "@mui/icons-material";
import ExpandMoreOutlinedIcon from '@mui/icons-material/ExpandMoreOutlined'; import ExpandMoreOutlinedIcon from "@mui/icons-material/ExpandMoreOutlined";
import { import {
Autocomplete, Autocomplete,
Box, Box,
@ -8,17 +8,16 @@ import {
CircularProgress, CircularProgress,
ListItemText, ListItemText,
Stack, Stack,
TextField TextField,
} from '@mui/material'; } from "@mui/material";
import debounce from 'lodash/debounce'; import debounce from "lodash/debounce";
import React, { useEffect, useMemo, useState } from 'react'; import React, { useEffect, useMemo, useState } from "react";
import { NOTIFICATION } from '../constants'; import { NOTIFICATION } from "../constants";
import { pushNotification } from '../utils/notification'; import { pushNotification } from "../utils/notification";
import { useStyles } from './styles/multiSelectStyles'; import { useStyles } from "./styles/multiSelectStyles";
import { getMasterData } from "../services/masterData.services";
const MultiSelect = ({ const MultiSelect = ({
apiCall,
searchParams = {},
searchDebounceTime = 500, searchDebounceTime = 500,
maxSelections = Infinity, maxSelections = Infinity,
formik, formik,
@ -26,19 +25,16 @@ const MultiSelect = ({
fieldObjectValue, fieldObjectValue,
getOptionLabel, getOptionLabel,
customErrorMessage = null, customErrorMessage = null,
hideEndAdornment = false,
onError = (error) => console.error(error), onError = (error) => console.error(error),
onOptionsChange = () => {},
fieldName,
styleForSelectorParent, styleForSelectorParent,
styleForSelector, styleForSelector,
placeholderText = '', placeholderText = "",
inputRef, inputRef,
}) => { }) => {
const classes = useStyles(); const classes = useStyles();
const [data, setData] = useState([]); const [data, setData] = useState([]);
const [page, setPage] = useState(0); const [page, setPage] = useState(0);
const [searchQuery, setSearchQuery] = useState(''); const [searchQuery, setSearchQuery] = useState("");
const [isLoading, setIsLoading] = useState(false); const [isLoading, setIsLoading] = useState(false);
const [hasMore, setHasMore] = useState(true); const [hasMore, setHasMore] = useState(true);
const [dropdownOpen, setDropdownOpen] = useState(false); const [dropdownOpen, setDropdownOpen] = useState(false);
@ -47,20 +43,8 @@ const MultiSelect = ({
const fetchData = async () => { const fetchData = async () => {
try { try {
setIsLoading(true); setIsLoading(true);
const response = await apiCall({ const response = await getMasterData();
...searchParams, setData(response?.data?.data?.data);
page,
size: 30,
search: searchQuery,
});
const newData = response?.data || [];
if (page === 0) {
setData(newData);
} else {
setData((prevData) => [...prevData, ...newData]);
}
setHasMore(newData.length > 0);
onOptionsChange(newData);
} catch (error) { } catch (error) {
onError(error); onError(error);
} finally { } finally {
@ -182,13 +166,13 @@ const MultiSelect = ({
debouncedSearch(event.target.value.trim()); debouncedSearch(event.target.value.trim());
}} }}
onKeyDown={(event) => { onKeyDown={(event) => {
if (event.key === 'Backspace') { if (event.key === "Backspace") {
event.stopPropagation(); event.stopPropagation();
} }
}} }}
InputProps={{ InputProps={{
...params.InputProps, ...params.InputProps,
type: 'search', type: "search",
endAdornment: ( endAdornment: (
<> <>
{isLoading ? ( {isLoading ? (

View File

@ -23,8 +23,8 @@ export const createAdmin = (data) => {
export const getAdmins = (params) => { export const getAdmins = (params) => {
let searchParams = new URLSearchParams(); let searchParams = new URLSearchParams();
searchParams.append("size", params?.pagination?.pageSize ?? 10); searchParams.append("limit", params?.pagination?.pageSize ?? 10);
searchParams.append("page", params?.pagination.pageIndex ?? 0); searchParams.append("page", params?.pagination.pageIndex+1 ?? 1);
searchParams.append("search", params?.globalFilter ?? ""); searchParams.append("search", params?.globalFilter ?? "");
const url = `/admin/?${searchParams.toString()}`; const url = `/admin/?${searchParams.toString()}`;

View File

@ -2,23 +2,10 @@ import { axiosInstance } from "../config/api";
import { CLINIC_TYPE } from "../constants"; import { CLINIC_TYPE } from "../constants";
import { clinicsData, registeredClinicsData } from "../mock/clinics"; import { clinicsData, registeredClinicsData } from "../mock/clinics";
// export const getClinics = (params) => {
// switch (params.type) {
// case CLINIC_TYPE.UNREGISTERED:
// return { data: clinicsData };
// case CLINIC_TYPE.REGISTERED:
// return { data: registeredClinicsData };
// case CLINIC_TYPE.SUBSCRIBED:
// return { data: registeredClinicsData };
// default:
// return { data: clinicsData };
// }
// };
export const getClinics = (params) => { export const getClinics = (params) => {
let searchParams = new URLSearchParams(); let searchParams = new URLSearchParams();
searchParams.append("size", params?.pagination?.pageSize ?? 10); searchParams.append("limit", params?.pagination?.pageSize ?? 10);
searchParams.append("page", params?.pagination.pageIndex ?? 0); searchParams.append("page", params?.pagination.pageIndex+1 ?? 1);
searchParams.append("filter_type", params?.type ?? CLINIC_TYPE.REGISTERED); searchParams.append("filter_type", params?.type ?? CLINIC_TYPE.REGISTERED);
searchParams.append("search", params?.globalFilter ?? ""); searchParams.append("search", params?.globalFilter ?? "");
@ -30,7 +17,6 @@ export const getClinics = (params) => {
.then((response) => resolve(response)) .then((response) => resolve(response))
.catch((err) => reject(err)); .catch((err) => reject(err));
}); });
}; };
export const getLatestClinicId = () => { export const getLatestClinicId = () => {
@ -94,11 +80,10 @@ export const createClinicOffer = (data) => {
}; };
export const getClinicOffer = (params) => { export const getClinicOffer = (params) => {
let searchParams = new URLSearchParams();
let searchParams = new URLSearchParams(); searchParams.append("limit", params?.pagination?.pageSize ?? 10);
searchParams.append("size", params?.pagination?.pageSize ?? 10); searchParams.append("page", params?.pagination.pageIndex+1 ?? 1);
searchParams.append("page", params?.pagination.pageIndex ?? 0); searchParams.append("search", params?.globalFilter ?? "");
searchParams.append("search", params?.globalFilter ?? "");
const url = `/admin/clinic/offers?${searchParams.toString()}`; const url = `/admin/clinic/offers?${searchParams.toString()}`;
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
@ -128,3 +113,49 @@ export const deleteClinicOffer = (id) => {
.catch((err) => reject(err)); .catch((err) => reject(err));
}); });
}; };
export const getClinicDoctors = (params) => {
let searchParams = new URLSearchParams();
searchParams.append("limit", params?.pagination?.pageSize ?? 10);
searchParams.append("page", params?.pagination.pageIndex+1 ?? 1);
searchParams.append("search", params?.globalFilter ?? "");
const url = `/clinic-doctors?${searchParams.toString()}`;
return new Promise((resolve, reject) => {
axiosInstance
.get(url)
.then((response) => resolve(response))
.catch((err) => reject(err));
});
}
export const createDoctor = (data) => {
const url = `/clinic-doctors/`;
return new Promise((resolve, reject) => {
axiosInstance
.post(url, data)
.then((response) => resolve(response))
.catch((err) => reject(err));
});
};
export const updateDoctor = (data, id) => {
const url = `/clinic-doctors/${id}`;
return new Promise((resolve, reject) => {
axiosInstance
.put(url, data)
.then((response) => resolve(response))
.catch((err) => reject(err));
});
};
export const deleteDoctor = (id) => {
const url = `/clinic-doctors/${id}`;
return new Promise((resolve, reject) => {
axiosInstance
.delete(url)
.then((response) => resolve(response))
.catch((err) => reject(err));
});
};

View File

@ -74,7 +74,7 @@ const ClinicsList = () => {
tableState?.pagination?.pageIndex * tableState?.pagination?.pageSize tableState?.pagination?.pageIndex * tableState?.pagination?.pageSize
) )
?.toString() ?.toString()
?.padStart(2, "0"); ?.padStart(1, "0");
return <span>{serialNumber}</span>; return <span>{serialNumber}</span>;
}, },
enableSorting: false, enableSorting: false,
@ -273,7 +273,7 @@ const ClinicsList = () => {
tableState?.pagination?.pageSize tableState?.pagination?.pageSize
) )
?.toString() ?.toString()
?.padStart(2, "0"); ?.padStart(1, "0");
return <span>{serialNumber}</span>; return <span>{serialNumber}</span>;
}, },
enableSorting: false, enableSorting: false,
@ -519,7 +519,7 @@ const ClinicsList = () => {
columns={columnsUnregistered} columns={columnsUnregistered}
getData={getData} getData={getData}
options={{ options={{
enableRowSelection: true, enableRowSelection: false,
showTopBar: false, showTopBar: false,
showFilters: true, showFilters: true,
}} }}

View File

@ -172,7 +172,7 @@ const MasterDataManagement = () => {
tableState?.pagination?.pageIndex * tableState?.pagination?.pageSize tableState?.pagination?.pageIndex * tableState?.pagination?.pageSize
) )
?.toString() ?.toString()
?.padStart(2, "0"); ?.padStart(1, "0");
return <span>{serialNumber}</span>; return <span>{serialNumber}</span>;
}, },
enableSorting: false, enableSorting: false,
@ -182,6 +182,13 @@ const MasterDataManagement = () => {
size: 280, size: 280,
accessorKey: "type", accessorKey: "type",
header: "Type", header: "Type",
Cell: (props) => {
return (
<span>
{props.row.original.type.charAt(0).toUpperCase() + props.row.original.type.slice(1)}
</span>
);
},
enableColumnFilter: false, enableColumnFilter: false,
}, },
// Removed the empty object that was causing the error // Removed the empty object that was causing the error
@ -203,7 +210,7 @@ const MasterDataManagement = () => {
columns={columns} columns={columns}
getData={getData} getData={getData}
options={{ options={{
enableRowSelection: true, enableRowSelection: false,
showTopBar: false, showTopBar: false,
showFilters: true, showFilters: true,
}} }}

View File

@ -23,7 +23,6 @@ import CustomBreadcrumbs from "../../components/CustomBreadcrumbs";
import PageHeader from "../../components/PageHeader"; import PageHeader from "../../components/PageHeader";
import { useStyles } from "./paymentStyles"; import { useStyles } from "./paymentStyles";
import Table from "../../components/Table"; import Table from "../../components/Table";
import { getAdmins } from "../../services/auth.services";
import { pushNotification } from "../../utils/notification"; import { pushNotification } from "../../utils/notification";
import { NOTIFICATION } from "../../constants"; import { NOTIFICATION } from "../../constants";
import { emailRegex } from "../../utils/regex"; import { emailRegex } from "../../utils/regex";
@ -66,7 +65,7 @@ const PaymentManagement = () => {
tableState?.pagination?.pageIndex * tableState?.pagination?.pageSize tableState?.pagination?.pageIndex * tableState?.pagination?.pageSize
) )
?.toString() ?.toString()
?.padStart(2, "0"); ?.padStart(1, "0");
return <span>{serialNumber}</span>; return <span>{serialNumber}</span>;
}, },
enableSorting: false, enableSorting: false,
@ -261,7 +260,7 @@ const PaymentManagement = () => {
columns={columns} columns={columns}
getData={getData} getData={getData}
options={{ options={{
enableRowSelection: true, enableRowSelection: false,
showTopBar: false, showTopBar: false,
showFilters: true, showFilters: true,
}} }}

View File

@ -208,7 +208,7 @@ const StaffManagement = () => {
tableState?.pagination?.pageIndex * tableState?.pagination?.pageSize tableState?.pagination?.pageIndex * tableState?.pagination?.pageSize
) )
?.toString() ?.toString()
?.padStart(2, "0"); ?.padStart(1, "0");
return <span>{serialNumber}</span>; return <span>{serialNumber}</span>;
}, },
enableSorting: false, enableSorting: false,
@ -243,7 +243,7 @@ const StaffManagement = () => {
columns={columns} columns={columns}
getData={getData} getData={getData}
options={{ options={{
enableRowSelection: true, enableRowSelection: false,
showTopBar: false, showTopBar: false,
showFilters: true, showFilters: true,
}} }}

File diff suppressed because it is too large Load Diff