From 72ed07071c5040d6cdc6a1050e799b6bd36fe372 Mon Sep 17 00:00:00 2001 From: Ehsan Date: Tue, 10 Jun 2025 14:27:06 +0330 Subject: [PATCH] handle update data in tab dashboard --- app/component/element/AutoSelector.js | 4 +- app/dashboard/page.js | 12 +-- components/dashboard/Content.js | 11 ++- .../userAccount/components/UpdateBtn.js | 3 +- .../userAccount/detailUser/disease/index.js | 27 ++++-- .../userAccount/detailUser/function.js | 25 ++++++ .../dashboard/userAccount/detailUser/index.js | 88 +++++++++++++------ .../detailUser/information/Form.js | 18 ++-- .../detailUser/information/index.js | 31 +++++-- components/dashboard/userAccount/index.js | 3 +- components/doctors/sortlist/SelectSort.js | 8 +- lib/auth.js | 6 +- services/response.js | 6 ++ 13 files changed, 181 insertions(+), 61 deletions(-) create mode 100644 components/dashboard/userAccount/detailUser/function.js diff --git a/app/component/element/AutoSelector.js b/app/component/element/AutoSelector.js index bca2d7d..308e5fb 100644 --- a/app/component/element/AutoSelector.js +++ b/app/component/element/AutoSelector.js @@ -24,7 +24,9 @@ function AutoSelector({ return option?.name || option?.label || ""; }} className="!w-full !rounded-lg auto-complete-selector" - onChange={(e, newValue) => updateData(name, newValue?.label || "")} + onChange={(e, newValue) => { + updateData(name, newValue?.label || newValue || ""); + }} sx={{ ...styleTextSelectRight, // Hide Icon Number diff --git a/app/dashboard/page.js b/app/dashboard/page.js index b612113..7d8d8a7 100644 --- a/app/dashboard/page.js +++ b/app/dashboard/page.js @@ -3,6 +3,7 @@ import { defineAbilitiesFor } from "@/lib/ability"; import { getUser } from "@/lib/auth"; import { getStateInfo } from "@/lib/getStateInfo"; import { fetchReq } from "@/lib/req"; +import { removeToken } from "@/utils"; import { cookies, headers } from "next/headers"; import { redirect } from "next/navigation"; @@ -13,22 +14,20 @@ export default async function Dashboard({ searchParams }) { const cookieStore = cookies(); const token = cookieStore.get("access_token"); const userInfo = cookieStore.get("userInfo"); - console.log(userInfo.value.uuid); if (!ability.can("access", "Dashboard")) { - return redirect("/"); + removeToken(); + return redirect("/login"); } const response = await fetchReq( - `https://back-dev.clinic-pro.ir/api/v1/user-profile/${userInfo.value.uuid}`, + `https://back-dev.clinic-pro.ir/api/v1/user-profile/${JSON.parse(userInfo?.value).uuid}`, { headers: { Authorization: `Bearer ${token.value}`, }, } - ) - .then((res) => console.log(res)) - .catch((err) => console.log(err)); + ); const userAgent = headers().get("user-agent") || ""; const isMobile = /Mobi|Android/i.test(userAgent); @@ -40,6 +39,7 @@ export default async function Dashboard({ searchParams }) { params={searchParams} matchedCity={matchedCity} initialTurnsDetails={isMobile} + userInfo={JSON.parse(userInfo.value || {})} /> ); } diff --git a/components/dashboard/Content.js b/components/dashboard/Content.js index ceefe4d..a53fa3d 100644 --- a/components/dashboard/Content.js +++ b/components/dashboard/Content.js @@ -6,11 +6,17 @@ import userData from "@/data/userData.json"; import DashboardPage from "@/components/dashboard"; import UserAccountPage from "./userAccount"; -function Content({ matchedCity, params, logged, initialIsOpenSide, dataUser }) { +function Content({ + matchedCity, + userInfo, + params, + logged, + initialIsOpenSide, + dataUser, +}) { const [value, setValue] = useState(Number(params?.sidebar) || 0); const [isOpenSide, setIsOpenSide] = useState(initialIsOpenSide); const [isTurnsDetails, setIsTurnsDetails] = useState(false); - console.log(dataUser); return ( diff --git a/components/dashboard/userAccount/detailUser/disease/index.js b/components/dashboard/userAccount/detailUser/disease/index.js index e6328fb..c9ec833 100644 --- a/components/dashboard/userAccount/detailUser/disease/index.js +++ b/components/dashboard/userAccount/detailUser/disease/index.js @@ -3,31 +3,42 @@ import TextLoading from "@/app/component/loading/Text"; import { Switch, TableCell, TableRow } from "@mui/material"; import Head from "@/components/dashboard/userAccount/components/Head"; import UpdateBtn from "@/components/dashboard/userAccount/components/UpdateBtn"; -import { useState } from "react"; -import { dieses } from "../information/dieses"; -function Disease() { +function Disease({ data, setData, updateData }) { + const { other } = data; + const { disease } = other && other[0]; const tableHead = ["ردیف", "اسم", "وضعیت", ""]; - const [data, setData] = useState(dieses); const centerTable = [0]; + const changeData = (id, payload) => { - const updatedData = data.map((item, index) => + const newDisease = data.other[0].disease?.map((item, index) => index === id ? { ...item, status: payload } : item ); - setData(updatedData); + + const newData = { + ...data, + other: [ + { + ...data.other[0], + disease: newDisease, + }, + ], + }; + + setData(newData); }; return (
- + - {data.map((row, idx) => ( + {disease?.map((row, idx) => ( { + const newData = { + ...data, + [name]: [...data[name]], + }; + + switch (action) { + case "update": + newData[name][id] = payload; + break; + + case "add": + newData[name].push(payload); + break; + + case "delete": + newData[name].splice(id, 1); + break; + + default: + console.warn(`Unknown action: ${action}`); + return; + } + setData(newData); +}; diff --git a/components/dashboard/userAccount/detailUser/index.js b/components/dashboard/userAccount/detailUser/index.js index bf1248e..cfa506b 100644 --- a/components/dashboard/userAccount/detailUser/index.js +++ b/components/dashboard/userAccount/detailUser/index.js @@ -10,10 +10,60 @@ import Allergies from "./allergies"; import Surgeries from "./surgeries"; import FamilyHistory from "./familyHistory"; import Relatives from "./relatives"; +import { request } from "@/services/response"; +import { changeData } from "./function"; -function DetailUser({ user, isTurnsDetails, setIsTurnsDetails, dataUser }) { +function DetailUser({ + user, + dataUser, + userInfo, + isTurnsDetails, + setIsTurnsDetails, +}) { const [tab, setTab] = useState(0); - const [data, setData] = useState(profileData[0]); + const { + name, + description, + birthday, + insurance_id, + basic_insurance, + blood_type, + education, + fathers_name, + gender, + home_phone, + job, + marital_status, + national_code, + national_code_approved, + supplementary_insurance, + work_phone, + address, + other, + } = dataUser; + const [data, setData] = useState({ + name: name, + description: description, + birthday: birthday, + insurance_id: insurance_id, + basic_insurance: basic_insurance, + blood_type: blood_type, + education: education, + fathers_name: fathers_name, + gender: gender, + home_phone: home_phone, + job: job, + marital_status: marital_status, + national_code: national_code, + national_code_approved: national_code_approved, + supplementary_insurance: supplementary_insurance, + work_phone: work_phone, + address: address, + other: other, + }); + console.log(data); + console.log(dataUser); + console.log(userInfo); const listTab = [ "اطلاعات عمومی", @@ -26,40 +76,24 @@ function DetailUser({ user, isTurnsDetails, setIsTurnsDetails, dataUser }) { ]; const handleChange = (_, newValue) => setTab(newValue); - const changeData = (action, name, id, payload) => { - const newData = { - ...data, - [name]: [...data[name]], - }; - - switch (action) { - case "update": - newData[name][id] = payload; - break; - - case "add": - newData[name].push(payload); - break; - - case "delete": - newData[name].splice(id, 1); - break; - - default: - console.warn(`Unknown action: ${action}`); - return; - } - setData(newData); + const updateData = () => { + request + .patchUserProfile(data, data.uuid) + .then((res) => {}) + .catch((err) => {}); }; const components = [ , - , + , , , , diff --git a/components/dashboard/userAccount/detailUser/information/Form.js b/components/dashboard/userAccount/detailUser/information/Form.js index f8841a6..1f00b81 100644 --- a/components/dashboard/userAccount/detailUser/information/Form.js +++ b/components/dashboard/userAccount/detailUser/information/Form.js @@ -2,7 +2,6 @@ import Content from "./Content"; import DateBirthday from "./DateBirthday"; import Field from "./Field"; import { - insurance, gender, blood_group, marital_status, @@ -11,8 +10,9 @@ import { } from "./listSelector"; import AutoSelector from "@/app/component/element/AutoSelector"; -function Form({ data, changeData, prevData }) { - const findVal = (list, name) => data && list.find((g) => g.id === data[name]); +function Form({ data, userInfo, insurance, changeData, prevData }) { + const findVal = (list, name) => + data && list && list.length && list.find((g) => g.id === data[name]); return (
@@ -22,8 +22,8 @@ function Form({ data, changeData, prevData }) { iconGray={true} type="number" changeData={changeData} - data={data?.work_phone} - disable={prevData} + data={userInfo?.username} + disable={true} name="work_phone" /> @@ -75,7 +75,9 @@ function Form({ data, changeData, prevData }) { { + changeData([Number(val.id)], "value", name); + }} value={findVal(insurance, "basic_insurance")} label="نوع بیمه" name="basic_insurance" @@ -88,8 +90,8 @@ function Form({ data, changeData, prevData }) { iconGray={true} type="number" changeData={changeData} - data={data?.insurance_number} - name="insurance_number" + data={data?.supplementary_insurance} + name="supplementary_insurance" /> diff --git a/components/dashboard/userAccount/detailUser/information/index.js b/components/dashboard/userAccount/detailUser/information/index.js index 11c5074..a8558f5 100644 --- a/components/dashboard/userAccount/detailUser/information/index.js +++ b/components/dashboard/userAccount/detailUser/information/index.js @@ -1,13 +1,25 @@ -import { useState } from "react"; +import { useEffect, useState } from "react"; import Form from "./Form"; import { Button } from "@mui/material"; import ArrowLeftWhiteD from "@/components/icons/ArrowLeftWhiteD"; import { request } from "@/services/response"; +import Cookies from "js-cookie"; -function Information({ user, dataUser }) { +function Information({ user, data, setData, userInfo, dataUser }) { const [disable, setDisable] = useState(true); const [loading, setLoading] = useState(false); - const [data, setData] = useState(dataUser || {}); + const [insurance, setInsurance] = useState(); + + useEffect(() => { + request + .getInsuranceType() + .then((res) => { + if (res && res.data) { + setInsurance(res.data); + } + }) + .catch((err) => {}); + }, []); const changeData = (value, type, name) => { disable && setDisable(false); @@ -19,7 +31,10 @@ function Information({ user, dataUser }) { const sendReq = () => { setLoading(true); - request[dataUser ? "patchUserProfile" : "postUserProfile"](data) + request[dataUser ? "patchUserProfile" : "postUserProfile"]( + data, + Cookies.get("uuid") + ) .then((res) => { setLoading(false); }) @@ -30,7 +45,13 @@ function Information({ user, dataUser }) { return (
-
+