import React, { useState, useEffect, useCallback, useRef } from "react"; import { Clock } from "lucide-react"; import "./HorariosDisponibilidade.css"; const initialBlockTemplate = { id: null, inicio: "07:00", termino: "18:00", isNew: true, }; const emptyAvailabilityTemplate = [ { dia: "Segunda-feira", isChecked: false, blocos: [] }, { dia: "Terça-feira", isChecked: false, blocos: [] }, { dia: "Quarta-feira", isChecked: false, blocos: [] }, { dia: "Quinta-feira", isChecked: false, blocos: [] }, { dia: "Sexta-feira", isChecked: false, blocos: [] }, { dia: "Sábado", isChecked: false, blocos: [] }, { dia: "Domingo", isChecked: false, blocos: [] }, ]; const HorariosDisponibilidade = ({ initialAvailability = emptyAvailabilityTemplate, onUpdate, onCancel, }) => { const [availability, setAvailability] = useState(initialAvailability); const isFirstRun = useRef(true); useEffect(() => { if (initialAvailability && initialAvailability.length > 0) { setAvailability(initialAvailability); } else { setAvailability(emptyAvailabilityTemplate); } }, [initialAvailability]); const handleDayCheck = useCallback((dayIndex, currentIsChecked) => { const isChecked = !currentIsChecked; setAvailability((prev) => prev.map((day, i) => i === dayIndex ? { ...day, isChecked, blocos: isChecked ? day.blocos.length === 0 ? [ { ...initialBlockTemplate, id: Date.now() + Math.random(), isNew: true, }, ] : day.blocos : [], } : day ) ); }, []); const handleAddBlock = useCallback((dayIndex) => { const tempId = Date.now() + Math.random(); const newBlock = { ...initialBlockTemplate, id: tempId, isNew: true }; setAvailability((prev) => prev.map((day, i) => i === dayIndex ? { ...day, blocos: [...day.blocos, newBlock], isChecked: true, } : day ) ); }, []); const handleRemoveBlock = useCallback((dayIndex, blockId) => { setAvailability((prev) => prev.map((day, i) => { if (i === dayIndex) { const newBlocos = day.blocos.filter((bloco) => bloco.id !== blockId); return { ...day, blocos: newBlocos, isChecked: newBlocos.length > 0, }; } return day; }) ); }, []); const handleTimeChange = useCallback((dayIndex, blockId, field, value) => { setAvailability((prev) => prev.map((day, i) => i === dayIndex ? { ...day, blocos: day.blocos.map((bloco) => bloco.id === blockId ? { ...bloco, [field]: value } : bloco ), } : day ) ); }, []); const handleSave = useCallback(() => { if (onUpdate) onUpdate(availability); }, [availability, onUpdate]); return (
{availability.map((day, dayIndex) => (
handleDayCheck(dayIndex, day.isChecked)} >
{day.isChecked && (
{day.blocos.map((bloco) => (
))}
)}
))}
); }; export default HorariosDisponibilidade;