import React, { useState, useEffect, useCallback } from "react"; import { Clock } from "lucide-react"; const initialBlockTemplate = { id: null, inicio: "09:00", termino: "17: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, }) => { const [availability, setAvailability] = useState(initialAvailability); useEffect(() => { if (initialAvailability !== emptyAvailabilityTemplate) { setAvailability(initialAvailability); } }, [initialAvailability]); useEffect(() => { if (onUpdate) { onUpdate(availability); } }, [availability, onUpdate]); 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 renderTimeBlock = (dayIndex, bloco) => (
handleTimeChange(dayIndex, bloco.id, "inicio", e.target.value) } style={{ padding: "8px", border: "1px solid #d1d5db", borderRadius: "8px", width: "100%", boxSizing: "border-box", outline: "none", }} step="300" />
handleTimeChange(dayIndex, bloco.id, "termino", e.target.value) } style={{ padding: "8px", border: "1px solid #d1d5db", borderRadius: "8px", width: "100%", boxSizing: "border-box", outline: "none", }} step="300" />
{bloco.isNew && ( (Novo) )}
); return (
{availability.map((day, dayIndex) => { const isChecked = day.isChecked; const dayHeaderStyle = { display: "flex", alignItems: "center", justifyContent: "space-between", padding: "12px 0", borderBottom: "1px solid #e5e7eb", marginBottom: "16px", backgroundColor: isChecked ? "#1f2937" : "#f9fafb", borderRadius: "8px", paddingLeft: "16px", paddingRight: "16px", cursor: "pointer", transition: "background-color 0.2s", }; return (
handleDayCheck(dayIndex, isChecked)} >
{isChecked && (
{day.blocos.length === 0 && (

Nenhum bloco de horário definido.

)}
{day.blocos.map((bloco) => renderTimeBlock(dayIndex, bloco) )}
)}
); })}
); }; export default HorariosDisponibilidade;