diff --git a/app/appointment/[slug]/page.js b/app/appointment/[doctorId]/page.js similarity index 100% rename from app/appointment/[slug]/page.js rename to app/appointment/[doctorId]/page.js diff --git a/app/component/date/datePicker/index.js b/app/component/date/datePicker/index.js index 20e849b..0a364ad 100644 --- a/app/component/date/datePicker/index.js +++ b/app/component/date/datePicker/index.js @@ -3,8 +3,9 @@ import { useEffect, useRef, useState } from "react"; import FirstDatePicker from "./date/FirstDatePicker"; import SecondDatePicker from "./date/SecondDatePicker"; +import { dateToTimestamp } from "@/helper"; -function DatePicker({ date, updateDate }) { +function DatePicker({ setDate }) { const nextIconDatePickerF = useRef(); const prevIconDatePickerF = useRef(); const nextIconDatePickerS = useRef(); @@ -16,13 +17,15 @@ function DatePicker({ date, updateDate }) { const handleStartDateChange = (date, e) => { if (date) { - setStartDate(date); + setDate(dateToTimestamp(date)); setEndDate(null); + setStartDate(date); } }; const handleEndDateChange = (date) => { if (date) { + setDate(dateToTimestamp(date)); setEndDate(date); setStartDate(null); } @@ -36,7 +39,6 @@ function DatePicker({ date, updateDate }) { useEffect(() => { if (nextIconDatePickerS.current) { nextIconDatePickerS.current.click(); - console.log(nextIconDatePickerS.current); setLoading(false); } diff --git a/app/component/date/dateTime/Hours.js b/app/component/date/dateTime/Hours.js deleted file mode 100644 index eff8943..0000000 --- a/app/component/date/dateTime/Hours.js +++ /dev/null @@ -1,34 +0,0 @@ -import { Button } from "@mui/material"; - -function Hours({ doctor, hour, setHour, value, nameHours }) { - return ( - - ); -} - -export default Hours; diff --git a/app/component/date/dateTime/SendAppo.js b/app/component/date/dateTime/SendAppo.js new file mode 100644 index 0000000..722e610 --- /dev/null +++ b/app/component/date/dateTime/SendAppo.js @@ -0,0 +1,49 @@ +import ArrowLeftB from "@/components/icons/ArrowLeftB"; +import { request } from "@/services/response"; +import { Button } from "@mui/material"; +import { useParams } from "next/navigation"; +import { useState } from "react"; + +function SendAppo({ hour }) { + const params = useParams(); + const doctorId = params.doctorId; + const [loading, setLoading] = useState(false); + + const sendReq = () => { + setLoading(true); + request + .postAppointment({ + doctor_id: doctorId, + slot: hour, + }) + .then((res) => { + console.log(res); + setLoading(false); + }) + .catch((err) => { + console.log(err); + }); + // if (locateVisit) { + // setStep((prev) => prev + 1); + // } else { + // setIsError(true); + // } + }; + + return ( +
+ +
+ ); +} + +export default SendAppo; diff --git a/app/component/date/dateTime/hours/List.js b/app/component/date/dateTime/hours/List.js new file mode 100644 index 0000000..2f25cad --- /dev/null +++ b/app/component/date/dateTime/hours/List.js @@ -0,0 +1,44 @@ +import { Button } from "@mui/material"; +import React from "react"; + +function List({ appo, hour, setHour, value }) { + const list = appo && appo[value ? "evening" : "morning"]; + + if (list && list.length) { + return ( + + ); + } else { + return ( +

+ در حال حاضر، نوبتی برای ساعت‌های {[value ? "بعد از ظهر" : "صبح"]} موجود + نمی‌باشد. +

+ ); + } +} + +export default List; diff --git a/app/component/date/dateTime/hours/Loading.js b/app/component/date/dateTime/hours/Loading.js new file mode 100644 index 0000000..14542d2 --- /dev/null +++ b/app/component/date/dateTime/hours/Loading.js @@ -0,0 +1,23 @@ +import { CircularProgress } from "@mui/material"; + +function Loading() { + return ( +
+ +
+ ); +} + +export default Loading; diff --git a/app/component/date/dateTime/hours/index.js b/app/component/date/dateTime/hours/index.js new file mode 100644 index 0000000..df895ad --- /dev/null +++ b/app/component/date/dateTime/hours/index.js @@ -0,0 +1,18 @@ +import List from "./List"; +import Loading from "./Loading"; + +function Hours({ appo, doctor, hour, setHour, value, nameHours }) { + if (appo === "loading") { + return ; + } else if (typeof appo === "string") { + return ( +

+ {appo} +

+ ); + } else { + return ; + } +} + +export default Hours; diff --git a/app/component/date/dateTime/index.js b/app/component/date/dateTime/index.js index a4a0f57..73a2856 100644 --- a/app/component/date/dateTime/index.js +++ b/app/component/date/dateTime/index.js @@ -1,19 +1,46 @@ "use client"; -import { useState } from "react"; -import Hours from "./Hours"; +import { useEffect, useState } from "react"; +import Hours from "./hours"; import Tabs from "../../Tabs"; import { Button } from "@mui/material"; import ArrowLeftB from "@/components/icons/ArrowLeftB"; +import { request } from "@/services/response"; +import { useParams, useSearchParams } from "next/navigation"; +import SendAppo from "./SendAppo"; const listTab = ["صبح", "بعد از ظهر"]; const nameHours = ["hours_morning", "hours_afternoon"]; -function DateTime({ doctor, setStep, setIsError, locateVisit }) { +function DateTime({ date, doctor, setStep, setIsError, locateVisit }) { + const params = useParams(); + const doctorId = params.doctorId; const [value, setValue] = useState(0); - const [hour, setHour] = useState(0); + const [hour, setHour] = useState(); + const [appo, setAppo] = useState("تاریخ مورد نظرتان را انتخاب کنید."); - const handleChange = (event, newValue) => setValue(newValue); + const handleChange = (event, newValue) => { + setHour(); + setValue(newValue); + }; + console.log(hour); + + useEffect(() => { + if (date) { + setAppo("loading"); + setHour(); + request + .getAppointment(doctorId, date) + .then((res) => { + console.log(res); + setAppo(res); + }) + .catch((err) => { + console.log(err); + setAppo("در حال حاضر، نوبتی برای ساعت‌های صبح موجود نمی‌باشد."); + }); + } + }, [date]); return (
@@ -41,29 +68,14 @@ function DateTime({ doctor, setStep, setIsError, locateVisit }) { handleChange={handleChange} /> -
- -
+
); } diff --git a/components/appointment/date/Time/SelectDatePicker.js b/components/appointment/date/Time/SelectDatePicker.js index 452ddae..d75c985 100644 --- a/components/appointment/date/Time/SelectDatePicker.js +++ b/components/appointment/date/Time/SelectDatePicker.js @@ -1,20 +1,7 @@ import DatePicker from "@/app/component/date/datePicker"; -import { request } from "@/services/response"; -import { useEffect } from "react"; -function SelectDatePicker() { - useEffect(() => { - request - .getAppointment(47, 1753859133) - .then((res) => { - console.log(res); - }) - .catch((err) => { - console.log(err); - }); - }); - - return ; +function SelectDatePicker({ setDate }) { + return ; } export default SelectDatePicker; diff --git a/components/appointment/date/Time/index.js b/components/appointment/date/Time/index.js index 9cb6c89..b69cf87 100644 --- a/components/appointment/date/Time/index.js +++ b/components/appointment/date/Time/index.js @@ -1,12 +1,12 @@ import SelectDatePicker from "./SelectDatePicker"; -function Time({ isStep }) { +function Time({ isStep, setDate }) { return (

2. انتخاب روز

- + {!isStep && (
)} diff --git a/components/appointment/date/hour/index.js b/components/appointment/date/hour/index.js index 848382d..5fa1917 100644 --- a/components/appointment/date/hour/index.js +++ b/components/appointment/date/hour/index.js @@ -1,12 +1,13 @@ import DateTime from "@/app/component/date/dateTime"; -function Hour({ doctor, setStep, setIsError, locateVisit, isStep }) { +function Hour({ doctor, setStep, date, setIsError, locateVisit, isStep }) { return (

3. انتخاب ساعت

@@ -19,8 +20,9 @@ function Date({ doctor, setStep }) { isError={isError} />
diff --git a/helper/index.js b/helper/index.js index eed868c..e71cbd9 100644 --- a/helper/index.js +++ b/helper/index.js @@ -237,3 +237,20 @@ export const changeDateType = (data, toTimeStamp) => { } return newData; }; + +export const removeTokenHead = { + headers: { + Authorization: "", + }, +}; + +export const dateToTimestamp = (date) => { + const gregorianMoment = date.clone().locale("fa"); + + // Get the Unix timestamp in milliseconds + const unixTimestamp = gregorianMoment.valueOf(); + + const inSeconde = unixTimestamp / 1000; + + return inSeconde; +}; diff --git a/services/response.js b/services/response.js index b01a5a8..0dcd8a4 100644 --- a/services/response.js +++ b/services/response.js @@ -1,3 +1,4 @@ +import { removeTokenHead } from "@/helper"; import api from "./api"; export const request = { @@ -8,11 +9,7 @@ export const request = { mobile, captcha_token, }, - { - headers: { - Authorization: "", - }, - } + removeTokenHead ), getToken: (grant_type, client_id, client_secret, uuid, code) => { const formData = new URLSearchParams(); @@ -47,11 +44,7 @@ export const request = { }), getUserInfo: (headers) => api.get("oauth/userinfo", headers), getInsuranceType: () => - api.get("api/v1/categorys/insurance_type", { - headers: { - Authorization: "", - }, - }), + api.get("api/v1/categorys/insurance_type", removeTokenHead), getAppointmentWeeklySchedule: (uuid) => api.get(`api/v1/appointment-settings/weekly-schedule/${uuid}`), postAppointmentWeeklySchedule: () => @@ -61,6 +54,9 @@ export const request = { deleteAppointmentWeeklySchedule: (uuid) => api.delete(`api/v1/appointment-settings/weekly-schedule/${uuid}`), getAppointment: (doctor_id, date) => - api.get(`api/v1/appointment?doctor_id=${doctor_id}&date=${date}`), + api.get( + `api/v1/appointment-slots?doctor_id=${doctor_id}&date=${date}`, + removeTokenHead + ), postAppointment: (data) => api.post(`api/v1/appointment`, data), };