import React, { useState, useMemo } from 'react'; import { Search, HardHat, Building, ChevronRight, X, AlertCircle } from 'lucide-react'; import { useOFsAtivas, OFAtiva } from '@/hooks/useOFsAtivas'; import { smartAudio } from '@/utils/smartAudio'; import { Input } from '@/components/ui/input'; interface SmartObraSelectorProps { onSelectObra: (of: OFAtiva) => void; } export const SmartObraSelector: React.FC = ({ onSelectObra }) => { const { ofsAtivas, isLoading } = useOFsAtivas(); const [busca, setBusca] = useState(''); const filteredOFs = useMemo(() => { if (!busca.trim()) return ofsAtivas; const term = busca.toLowerCase(); return ofsAtivas.filter( (of) => of.of_number?.toLowerCase().includes(term) || of.cliente?.toLowerCase().includes(term) || of.descricao_resumida?.toLowerCase().includes(term) ); }, [ofsAtivas, busca]); const handleSelect = (of: OFAtiva) => { smartAudio.playClick(); try { localStorage.setItem('tracksteel_smart_last_of', JSON.stringify(of)); } catch { // ignore } onSelectObra(of); }; return (
{/* Título de Instrução Touch */}

Selecione a Obra / OF

Escolha a obra em que você está operando hoje

{/* Campo de Busca Grande para Touch */}
setBusca(e.target.value)} placeholder="Buscar por OF ou Cliente..." className="h-14 pl-11 pr-11 bg-slate-800/90 border-slate-700 text-slate-100 placeholder:text-slate-500 text-base font-medium rounded-2xl focus-visible:ring-amber-500 focus-visible:border-amber-500" /> {busca && ( )}
{/* Lista de Obras em Cards Touch */}
{isLoading ? (
Carregando obras ativas...
) : filteredOFs.length === 0 ? (

Nenhuma obra encontrada

{busca ? 'Tente buscar com outro termo' : 'Nenhuma ordem de fabricação ativa no momento'}

) : ( filteredOFs.map((of) => ( )) )}
); };