Cabeçalho
Visão Geral
Este arquivo define o componente CatalogSearchAndAddSection, responsável por fornecer a interface de busca, seleção de filtros e configuração de visualização para o catálogo de produtos. Ele integra diversos controles de UI, lógica de permissão e interações com o estado global via Redux.
⚙️ Principais Funções e Componentes
- ComponentCard: Wrapper visual para o bloco de busca/filtros.
- TextField, Select, Autocomplete, FormControl: Inputs para busca e seleção de cliente, empresa, tipo de operação, tipo de negociação, tabela de preço, centro de resultados etc.
- Checkboxes: Filtros adicionais como "Promoção", "Comprados", "Não Comprados", "Último Pedido", "Mais Vendidos", "Com Estoque", "Perfil".
- SearchPreferences, SearchPartnerModal, CentroResultadosModal: Modais e componentes auxiliares para preferências de busca, seleção de parceiro/cliente e centro de resultados.
- Redux Selectors e Actions: Uso de
useSelectorpara acessar dados (catálogo, permissões, usuário, empresas, tabelas de preço) euseDispatchpara disparar ações (alterar empresa, parceiro, tipo de operação, filtros). - Permissões: Exibição de campos/filtros personalizada por empresa via
permission.permissionByCompany.isDisan(),isChrisMedic(),isNeoDistribuidora(),isMakena(),isVinicolaGaribaldi()etc. - Debounce: Busca de produtos otimizada com debounce para evitar requisições excessivas.
- Filtros Dinâmicos: Array de checkboxes filtrado dinamicamente conforme permissões e contexto.
- Chips: Exibe os filtros ativos como chips.
⚡ Requisitos Funcionais
- Busca de Produtos: Campo principal para busca textual (código, descrição, marca).
- Seleção de Cliente/Parceiro: Campo condicional conforme permissões da empresa.
- Seleção de Empresa: Exibido para empresas com múltiplas opções/regras específicas.
- Seleção de Tabela de Preço: Exibido para empresas como Disan ou NeoDistribuidora.
- Seleção de Tipo de Operação e Negociação: Inputs dinâmicos conforme contexto/permissões.
- Centro de Resultados: Campo específico para empresas Makena.
- Filtros Avançados: Checkboxes com lógica condicional.
- Chips de Filtros Ativos: Visualização dos filtros aplicados.
- Reset de Filtros: Botão/função para limpar todos os filtros e seleções.
- Modais de Configuração: Preferências de busca, seleção de parceiro e centro de resultados.
- Integração com Redux: Todas as ações e seleções sincronizadas globalmente.
🧠 Lógica de Permissões
A lógica de permissões determina quais campos, filtros e opções são exibidos/habilitados:
- isDisan: Exibe campo de tabela de preço.
- isChrisMedic: Oculta campo de cliente.
- isNeoDistribuidora: Exibe empresa e tabela de preço vinculada.
- isMakena: Exibe campo de centro de resultados.
- isVinicolaGaribaldi: Define valores padrão para empresa e tipo de operação.
- OCULTAINFOEST: Oculta filtro "Com Estoque" quando ativo.
⚙️ Principais Customizações
- Debounced Search: Busca disparada com debounce (ex.: 1s), ajustável por empresa (ex.: Baratao).
- Filtros Dinâmicos: Checkboxes filtrados conforme permissões e contexto para exibir apenas opções válidas.
- Seleção de Parceiro/Cliente: Modal de busca e seleção integrado ao estado global.
- Seleção de Empresa/Tabela de Preço: Sincronização entre empresa selecionada e tabela de preço (especialmente para NeoDistribuidora).
- Chips de Filtros: Visualização dos filtros ativos para melhor UX.
🧩 Estrutura do Componente
// ... existing code ...
const CatalogSearchAndAddSection: React.FC<Props> = ({
onViewChange,
onSearch,
onFilter,
onReset,
}) => {
// ... estados, seletores, lógica de permissões, handlers ...
return (
<ComponentCard>
<section className="flex items-center justify-between flex-wrap gap-2">
<div className="flex items-center flex-wrap gap-3">
{/* Campo de busca principal */}
{/* Campos condicionais: Cliente, Empresa, Tabela de Preço, Centro de Resultados, Tipo de Operação, Tipo de Negociação */}
{/* Checkboxes de filtros dinâmicos */}
</div>
{/* Chips de filtros ativos */}
{/* Botão de reset */}
{/* Modais de configuração */}
</section>
</ComponentCard>
)
}
// ... existing code ...
🧾 Observações
- O componente é altamente customizável e adaptável ao contexto do usuário/empresa.
- A lógica de permissões garante que o usuário veja apenas opções relevantes.
- A integração com Redux reflete globalmente as seleções e filtros.
- O uso de debounce e filtragem dinâmica melhora a performance e a experiência do usuário.