import { useState } from "react"; import ButtonFixed from "../paying/ButtonFixed"; import { Button } from "@mui/material"; import ArrowLeftB from "@/components/icons/ArrowLeftB"; import { request } from "@/services/response"; import Cookies from "js-cookie"; function SubmitData({ setStep, data, prevData, setErrors }) { const [loading, setLoading] = useState(false); const newStep = () => setStep((prev) => prev + 1); const refreshAccessToken = async () => { try { const refreshToken = Cookies.get("refresh_token"); if (!refreshToken) { return; } const formData = new URLSearchParams(); formData.append("grant_type", "refresh_token"); formData.append("client_id", process.env.NEXT_PUBLIC_CLIENT_ID || "4gSZTqkcM-13yfCHptFjsIoEzwA996bjGuSEFy02Dkc"); formData.append("client_secret", process.env.NEXT_PUBLIC_CLIENT_SECRET || "13yfCHptFjsIoEzwA996bjGuSEFy02Dkc"); formData.append("refresh_token", refreshToken); const response = await request.postRefreshToken(formData); if (response?.access_token) { Cookies.set("access_token", response.access_token, { expires: 7 }); if (response.refresh_token) { Cookies.set("refresh_token", response.refresh_token, { expires: 7 }); } } } catch (error) { // خطا در refresh token } }; const handleSubmit = async () => { const isChanged = JSON.stringify(prevData) !== JSON.stringify(data); // پاک کردن error های قبلی setErrors({}); if (isChanged) { setLoading(true); const { basic_insurance, supplementary_insurance, name, family, national_code, gender, insurance_id, uuid } = data; let payload = {}; // برای PATCH فقط فیلدهای تغییر یافته را ارسال می‌کنیم if (uuid) { // بررسی تغییرات فیلد به فیلد if (JSON.stringify(prevData.name) !== JSON.stringify(name)) { payload.name = name?.value; } if (JSON.stringify(prevData.family) !== JSON.stringify(family)) { payload.family = family?.value; } if (JSON.stringify(prevData.national_code) !== JSON.stringify(national_code)) { payload.national_code = national_code?.value; } if (JSON.stringify(prevData.gender) !== JSON.stringify(gender)) { payload.gender = gender?.value?.id || gender?.value; } if (JSON.stringify(prevData.insurance_id) !== JSON.stringify(insurance_id)) { payload.insurance_id = insurance_id?.value; } if (JSON.stringify(prevData.basic_insurance) !== JSON.stringify(basic_insurance)) { payload.basic_insurance = basic_insurance?.value?.id ? [basic_insurance.value.id] : []; } if (JSON.stringify(prevData.supplementary_insurance) !== JSON.stringify(supplementary_insurance)) { payload.supplementary_insurance = supplementary_insurance?.value?.id ? [supplementary_insurance.value.id] : []; } } else { // برای POST همه فیلدها را ارسال می‌کنیم payload = { name: name?.value, family: family?.value, national_code: national_code?.value, gender: gender?.value?.id || gender?.value, insurance_id: insurance_id?.value, basic_insurance: basic_insurance?.value?.id ? [basic_insurance.value.id] : [], supplementary_insurance: supplementary_insurance?.value?.id ? [supplementary_insurance.value.id] : [], }; } try { if (uuid) { // اگر uuid داریم، پروفایل وجود داره و باید PATCH کنیم await request.patchUserProfile(payload, uuid); } else { // اگر uuid نداریم، پروفایل وجود نداره و باید POST کنیم await request.postUserProfile(payload); } // فوراً بعد از موفقیت، refresh token می‌زنیم await refreshAccessToken(); setLoading(false); newStep(); } catch (error) { setLoading(false); // اگر خطای validation بود، error ها را ست می‌کنیم if (error?.response?.data) { setErrors(error.response.data); } } } else { newStep(); } }; return ( ); } export default SubmitData;