From 901bca65292944b54d420dcfad73faa95359eecf Mon Sep 17 00:00:00 2001 From: Ehsan Date: Fri, 18 Jul 2025 13:54:48 +0330 Subject: [PATCH] handle save some data and send server correct & change component form & clean code & fix bugs --- app/component/date/dateTime/SendAppo.js | 11 +- app/component/selectors/GroupedSelect.js | 102 ++++++++++++++++ components/panel/addDoctor/form/Fields.js | 97 +++++++++++++++ .../addDoctor/form/fields/RadioGender.js | 6 +- .../panel/addDoctor/form/fields/Selector.js | 6 +- components/panel/addDoctor/form/index.js | 111 +++--------------- .../panel/addDoctor/form/sendReq/function.js | 5 +- .../panel/addDoctor/form/sendReq/index.js | 4 +- components/panel/addDoctor/index.js | 1 - 9 files changed, 235 insertions(+), 108 deletions(-) create mode 100644 app/component/selectors/GroupedSelect.js create mode 100644 components/panel/addDoctor/form/Fields.js diff --git a/app/component/date/dateTime/SendAppo.js b/app/component/date/dateTime/SendAppo.js index 3f636b3..0d27cc6 100644 --- a/app/component/date/dateTime/SendAppo.js +++ b/app/component/date/dateTime/SendAppo.js @@ -16,17 +16,12 @@ function SendAppo({ hour }) { doctor_id: doctorId, slot: hour, }) - .then((res) => { + .then(() => { setLoading(false); }) - .catch((err) => { - console.log(err); + .catch(() => { + // }); - // if (locateVisit) { - // setStep((prev) => prev + 1); - // } else { - // setIsError(true); - // } }; return ( diff --git a/app/component/selectors/GroupedSelect.js b/app/component/selectors/GroupedSelect.js new file mode 100644 index 0000000..8cad342 --- /dev/null +++ b/app/component/selectors/GroupedSelect.js @@ -0,0 +1,102 @@ +import MenuItem from "@mui/material/MenuItem"; +import ListSubheader from "@mui/material/ListSubheader"; +import Select from "@mui/material/Select"; +import { useState } from "react"; +import { styleTextSelectRight } from "@/mui"; +import IconMultipleSelect from "@/components/icons/IconMultipleSelect"; + +function groupSpecialtiesByParent(specialties) { + const groups = []; + + const parents = specialties.filter((item) => item.parent === null); + + parents.forEach((parent) => { + const children = specialties.filter((item) => item.parent === parent.id); + if (children.length > 0) { + groups.push({ + parent, + children, + }); + } + }); + + return groups; +} + +export default function GroupedSelect({ + list, + name, + updateData, + data, + nameKey = "name", +}) { + const groupedList = groupSpecialtiesByParent(list); + + const handleChange = (event) => { + const value = event.target.value; + updateData && updateData(value, "value", name); + }; + + return ( +
+ +
+ ); +} diff --git a/components/panel/addDoctor/form/Fields.js b/components/panel/addDoctor/form/Fields.js new file mode 100644 index 0000000..80d95fd --- /dev/null +++ b/components/panel/addDoctor/form/Fields.js @@ -0,0 +1,97 @@ +import Selector from "./fields/Selector"; +import EditField from "@/app/component/fields/EditField"; +import GroupedSelect from "@/app/component/selectors/GroupedSelect"; +import MultipleSelect from "@/app/component/selectors/MultipleSelect"; + +// Data +import specialties from "@/data/specialties.json"; +import education from "@/data/education.json"; +import ContentText from "@/app/component/ContentText"; + +const validate_medical_number = { + min: 1, + max: 9999999999, +}; + +function Fields({ services, data, updateNum, changeData }) { + return ( + <> + + + + + + + + + + + + + + + + + + + + + + + ); +} + +export default Fields; diff --git a/components/panel/addDoctor/form/fields/RadioGender.js b/components/panel/addDoctor/form/fields/RadioGender.js index 0768993..1adc3e4 100644 --- a/components/panel/addDoctor/form/fields/RadioGender.js +++ b/components/panel/addDoctor/form/fields/RadioGender.js @@ -1,11 +1,11 @@ import { FormControlLabel, Radio, RadioGroup } from "@mui/material"; -function RadioGender({ changeData, name }) { +function RadioGender({ changeData, name, data }) { return ( changeData(e.target.value, "value", name)} sx={{ "& .muirtl-j204z7-MuiFormControlLabel-root": { @@ -17,12 +17,14 @@ function RadioGender({ changeData, name }) { label="مرد" value="man" control={} + dir="rtl" className="!text-[#A1A1A1]" /> } + dir="rtl" className="!text-[#A1A1A1]" /> diff --git a/components/panel/addDoctor/form/fields/Selector.js b/components/panel/addDoctor/form/fields/Selector.js index 8833fa4..f38cf2b 100644 --- a/components/panel/addDoctor/form/fields/Selector.js +++ b/components/panel/addDoctor/form/fields/Selector.js @@ -2,9 +2,12 @@ import BottomSelect from "@/components/icons/BottomSelect"; import { Autocomplete, Button, TextField } from "@mui/material"; import { styleTextSelectRight } from "@/mui"; -function Selector({ updateData, nameKey, label, name, list }) { +function Selector({ data, updateData, nameKey, label, name, list }) { + const selectedOption = list.find((item) => item.id === data) || null; + return ( option[nameKey] || ""} @@ -17,7 +20,6 @@ function Selector({ updateData, nameKey, label, name, list }) { }} sx={{ ...styleTextSelectRight, - // Hide Icon Number "& input::-webkit-outer-spin-button, & input::-webkit-inner-spin-button": { display: "none", diff --git a/components/panel/addDoctor/form/index.js b/components/panel/addDoctor/form/index.js index aeac80b..e51d23a 100644 --- a/components/panel/addDoctor/form/index.js +++ b/components/panel/addDoctor/form/index.js @@ -2,17 +2,9 @@ import { useEffect, useState } from "react"; import FieldDate from "./fields/FieldDate"; import RadioGender from "./fields/RadioGender"; import SendReq from "./sendReq"; -import Selector from "./fields/Selector"; - -// Components -import EditField from "@/app/component/fields/EditField"; import ContentText from "@/app/component/ContentText"; - -// Data -import specialties from "@/data/specialties.json"; -import education from "@/data/education.json"; -import MultipleSelect from "@/app/component/selectors/MultipleSelect"; import { request } from "@/services/response"; +import Fields from "./Fields"; const validate_medical_number = { min: 1, @@ -41,7 +33,6 @@ function Form({ image, data, setData, resetData }) { const validateValue = parseValue > max ? data[name].value : value; changeData(validateValue, type, name); }; - const filteredSpe = specialties.filter((item) => item.parent); useEffect(() => { request @@ -49,94 +40,30 @@ function Form({ image, data, setData, resetData }) { .then((res) => { setServices(res.data); }) - .catch((err) => { - console.log(err); + .catch(() => { + // }); }, []); - console.log(services); return ( <>
- - - - - - - - - - - - - - - - - - - - - - - - - + +
+ + + + +
diff --git a/components/panel/addDoctor/form/sendReq/function.js b/components/panel/addDoctor/form/sendReq/function.js index 0249999..21e0303 100644 --- a/components/panel/addDoctor/form/sendReq/function.js +++ b/components/panel/addDoctor/form/sendReq/function.js @@ -12,7 +12,10 @@ export const transformData = (data) => { activity_time: dateToTimestamp(data.time_work.value), doctor_mobile_number: data.phone.value, degree: data.degree.value, - specialty: [Number(data.expertise.value)], + specialty: [data.expertise.value], info: data.description.value, + doctor_id: data.medical_system_number.value, + doctor_services: data.skills.value, + gender: data.gender.value, }; }; diff --git a/components/panel/addDoctor/form/sendReq/index.js b/components/panel/addDoctor/form/sendReq/index.js index 1ed303e..9b82581 100644 --- a/components/panel/addDoctor/form/sendReq/index.js +++ b/components/panel/addDoctor/form/sendReq/index.js @@ -27,6 +27,7 @@ function SendReq({ img, data, resetData }) { }; const saveImg = () => { + resetData(); setLoading(true); if (img) { request @@ -35,7 +36,7 @@ function SendReq({ img, data, resetData }) { const imgId = res.fid[0].value; saveData(imgId); }) - .catch((err) => { + .catch(() => { setLoading(false); }); } else { @@ -47,7 +48,6 @@ function SendReq({ img, data, resetData }) {