import React, { useEffect, useMemo, useRef } from "react"; import { useDispatch, useSelector } from "react-redux"; import { updateLifestyleDetails } from "../redux/registrationFormSlice"; import { Grid, FormControl, InputLabel, Select, MenuItem, Button, TextField, Checkbox, ListItemText, } from "@mui/material"; import { LocalizationProvider } from "@mui/x-date-pickers"; import { DatePicker } from "@mui/x-date-pickers/DatePicker"; import { TimePicker } from "@mui/x-date-pickers/TimePicker"; import { AdapterDateFns } from "@mui/x-date-pickers/AdapterDateFns"; import { useLifestyleMasters } from "../hooks/useMasters"; const LifestyleDetailsForm = ({ onSubmitStep, onSkipStep, errors, onFieldChange, }) => { const dispatch = useDispatch(); const data = useSelector((state) => state.registerform.lifestyleDetails); const inputRef = useRef(null); const requiredMark = *; const { data: lifestyleMasters, isLoading: isLifestyleMastersLoading } = useLifestyleMasters(); const dietOptions = useMemo(() => { const raw = lifestyleMasters; if (!raw) return []; if (Array.isArray(raw)) return raw; return raw.diet || raw.diets || []; }, [lifestyleMasters]); const hobbyOptions = useMemo(() => { const raw = lifestyleMasters; if (!raw) return []; if (Array.isArray(raw)) return raw; return raw.hobbies || raw.hobby || []; }, [lifestyleMasters]); const grahaOptions = useMemo(() => { const raw = lifestyleMasters; if (!raw) return []; if (Array.isArray(raw)) return raw; return raw.grahas || raw.graha || []; }, [lifestyleMasters]); useEffect(() => { inputRef.current?.focus(); }, []); const handleChange = (field, value) => { dispatch(updateLifestyleDetails({ [field]: value })); if (onFieldChange) onFieldChange(field); }; const handleMultiChange = (field, value) => { const nextValue = Array.isArray(value) ? value : String(value).split(","); dispatch(updateLifestyleDetails({ [field]: nextValue })); if (onFieldChange) onFieldChange(field); }; const handleGrahaChange = (house, value) => { const next = { ...(data.graha || {}) }; next[house] = value; dispatch(updateLifestyleDetails({ graha: next })); if (onFieldChange) onFieldChange("graha"); }; const handleAmsamChange = (house, value) => { const next = { ...(data.amsam || {}) }; next[house] = value; dispatch(updateLifestyleDetails({ amsam: next })); if (onFieldChange) onFieldChange("amsam"); }; const handleSubmit = () => { console.log("Submitting lifestyle details:", data); onSubmitStep(); }; const parseDateValue = (value) => { if (!value) return null; const date = new Date(value); return Number.isNaN(date.getTime()) ? null : date; }; const parseTimeValue = (value) => { if (!value || typeof value !== "string") return null; const [hours, minutes] = value.split(":").map(Number); if (Number.isNaN(hours) || Number.isNaN(minutes)) return null; const date = new Date(); date.setHours(hours, minutes, 0, 0); return date; }; const formatDate = (value) => { if (!(value instanceof Date) || Number.isNaN(value)) return ""; const y = value.getFullYear(); const m = String(value.getMonth() + 1).padStart(2, "0"); const d = String(value.getDate()).padStart(2, "0"); return `${y}-${m}-${d}`; }; const formatTime = (value) => { if (!(value instanceof Date) || Number.isNaN(value)) return ""; const h = String(value.getHours()).padStart(2, "0"); const m = String(value.getMinutes()).padStart(2, "0"); return `${h}:${m}`; }; const renderChartCell = (label, value, onChange) => (
{label}
); const renderChartGrid = (type) => { const getValue = (house) => (type === "graha" ? data.graha : data.amsam)?.[house] || []; const onChange = (house, value) => type === "graha" ? handleGrahaChange(house, value) : handleAmsamChange(house, value); const label = type === "graha" ? "Rasi" : "Navamsam"; return (
{renderChartCell(label, getValue(1), (value) => onChange(1, value))} {renderChartCell(label, getValue(2), (value) => onChange(2, value))} {renderChartCell(label, getValue(3), (value) => onChange(3, value))} {renderChartCell(label, getValue(4), (value) => onChange(4, value))} {renderChartCell(label, getValue(5), (value) => onChange(5, value))}
{renderChartCell(label, getValue(6), (value) => onChange(6, value))} {renderChartCell(label, getValue(7), (value) => onChange(7, value))} {renderChartCell(label, getValue(8), (value) => onChange(8, value))} {renderChartCell(label, getValue(9), (value) => onChange(9, value))} {renderChartCell(label, getValue(10), (value) => onChange(10, value))} {renderChartCell(label, getValue(11), (value) => onChange(11, value))} {renderChartCell(label, getValue(12), (value) => onChange(12, value))}
); }; return (
Select Diet {errors.diets && (

{errors.diets}

)}
Select Hobbies & Interests {errors.hobbies && (

{errors.hobbies}

)}

Astrology / Horoscope

handleChange("dob", formatDate(value))} slotProps={{ textField: { name: "dob", fullWidth: true, error: Boolean(errors.dob), helperText: errors.dob, }, }} />
handleChange("tob", formatTime(value))} slotProps={{ textField: { name: "tob", fullWidth: true, error: Boolean(errors.tob), helperText: errors.tob, }, }} />
handleChange("placeOfBirth", e.target.value)} error={Boolean(errors.placeOfBirth)} helperText={errors.placeOfBirth} placeholder="Enter Place of Birth" variant="outlined" />

Add Rasi

{renderChartGrid("graha")} {errors.graha_duplicate && (

{errors.graha_duplicate}

)}

Add Navamsam

{renderChartGrid("amsam")} {errors.amsam_duplicate && (

{errors.amsam_duplicate}

)}
{onSkipStep && ( )}
); }; export default LifestyleDetailsForm;