"use client"; import { Box, Typography, useTheme, useMediaQuery, Chip, Button, FormHelperText, } from "@mui/material"; import CheckCircleIcon from "@mui/icons-material/CheckCircle"; import { Form, FormikProps } from "formik"; import BusinessIcon from "@mui/icons-material/Business"; import LocationOnIcon from "@mui/icons-material/LocationOn"; import LocalHospitalIcon from "@mui/icons-material/LocalHospital"; import { useGetAllCenters } from "@/hooks/center.hook"; import { RegistrationCenterFormProps, RegistrationCenterFormValues, } from "./RegistrationCenterForm"; import { CenterItem } from "@/core/types"; // تعریف اینترفیس برای تمیزی بیشتر interface InnerFormProps extends FormikProps, RegistrationCenterFormProps {} export default function InnerRegistrationCenterForm(props: InnerFormProps) { const { data } = useGetAllCenters(); const theme = useTheme(); const isMobile = useMediaQuery(theme.breakpoints.down("md")); const handleBack = () => { props.update({ registrationCenter: props.values.selectedCenter}); props.setStep((prev) => Math.max(1, prev - 1)); }; // منطق نمایش خطا const isSelectedCenterError = (props.touched.selectedCenter || props.submitCount > 0) && !!props.errors.selectedCenter; const handleCenterSelect = (center: CenterItem) => { props.setFieldValue("selectedCenter", center); props.setFieldTouched("selectedCenter", true, true); // فعال کردن حالت لمس شده }; const handleNext = async () => { // اگر مرحله اول است، فیلد را لمس کن تا اگر خالی بود خطا نشان دهد if (props.step === 1) { props.setFieldTouched("selectedCenter", true, true); } // اعتبارسنجی دستی کل فرم const errors = await props.validateForm(); // اگر در گام فعلی خطایی وجود ندارد، برو مرحله بعد if (Object.keys(errors).length === 0) { if (props.step === 12) { props.submitForm(); // ثبت نهایی } else { props.setStep(props.step + 1); } } }; const renderCenterList = () => (
{data?.data.map((center: CenterItem) => { const isSelected = props.values.selectedCenter?.id === center.id; return (
handleCenterSelect(center)} sx={{ p: 2.5, borderRadius: "18px", border: isSelected ? "2px solid #2563eb" : isSelectedCenterError ? "2px solid #d32f2f" : "1px solid #e2e8f0", backgroundColor: isSelected ? "#eff6ff" : "#fff", cursor: "pointer", transition: "all 0.25s ease", "&:hover": { borderColor: "#2563eb" }, }} > {center.name} {center.address} {isSelected && }
); })}
{/* نمایش پیام خطا به صورت تمیز زیر لیست */} {isSelectedCenterError && ( {props.errors.selectedCenter as string} )}
); return (
{/* رندر محتوای استپ ها */} {props.step === 1 ? ( renderCenterList() ) : ( محتوای مرحله {props.step} )}
); }