"use client"; import { useState, useCallback } from "react"; import { motion } from "framer-motion"; import { Lightbulb } from "lucide-react"; import { toggleLight, setLightBrightness } from "@/lib/api"; import { getBrightnessPct, pctToBrightness } from "@/lib/ha"; interface Props { entityId: string; name: string; state: string; brightness?: number; showSlider?: boolean; onUpdate: () => void; } export default function LightCard({ entityId, name, state, brightness, showSlider = false, onUpdate, }: Props) { const isOn = state === "on"; const brightPct = getBrightnessPct(brightness); const [localBrightness, setLocalBrightness] = useState(brightPct || 70); const [pending, setPending] = useState(false); const handleToggle = useCallback(async () => { if (pending) return; setPending(true); await toggleLight(entityId, !isOn); onUpdate(); setPending(false); }, [entityId, isOn, pending, onUpdate]); const handleBrightnessChange = useCallback( async (val: number) => { setLocalBrightness(val); await setLightBrightness(entityId, pctToBrightness(val)); onUpdate(); }, [entityId, onUpdate] ); return (
{name}
{isOn ? (showSlider ? `${localBrightness}%` : "Включён") : "Выключен"}
{/* Toggle */}
{showSlider && isOn && (
Яркость {localBrightness}%
setLocalBrightness(parseInt(e.target.value))} onMouseUp={(e) => handleBrightnessChange(parseInt((e.target as HTMLInputElement).value))} onTouchEnd={(e) => handleBrightnessChange(parseInt((e.target as HTMLInputElement).value))} className="w-full relative z-10" style={{ background: "transparent" }} />
)} ); }