VendeeDocs
Frontend

Hooks

Padrão 1 arquivo por concern em src/hooks/

Os hooks ficam em src/hooks/, com um arquivo por tabela ou concern do Supabase.

Hooks disponíveis

HookConcern
use-activities.tsCRUD de atividades
use-activity-attempts.tsTentativas de contato em atividades
use-activity-types.tsTipos de atividade
use-ai-insight.tsInsights de IA sobre base de clientes
use-client-base-metrics.tsMétricas de base de clientes importada
use-client-bases.tsCRUD de bases importadas
use-column-config.tsConfiguração de colunas de tabela
use-comments.tsComentários/notas/observações em negócios
use-companies.tsCRUD de empresas
use-company-timeline.tsTimeline de empresa
use-contact-timeline.tsTimeline de contato
use-contacts.tsCRUD de contatos
use-create-client-base-from-import.tsCriar base a partir de importação
use-custom-field-definitions.tsDefinições de campos personalizados
use-dashboard-filters.tsEstado dos filtros do dashboard (período, owner)
use-dashboard.tsTodas as RPCs de dashboard (KPIs, timeline, funil, etc.)
use-deal-activities.tsAtividades de um negócio específico
use-deal-history.tsEvent logs de um negócio
use-deal-products.tsProdutos vinculados a um negócio
use-deal-qualification.tsQualificação de um negócio
use-deal-qualification-scores.tsScores de qualificação de negócios
use-deal-timeline.tsTimeline unificada do hub do negócio
use-deal-types.tsTipos de negócio
use-deals-by-relation.tsNegócios vinculados a contato/empresa
use-deals.tsCRUD de negócios (criar, editar, mover, ganhar, perder)
use-global-search.tsBusca global
use-goals.tsMetas mensais do workspace
use-infinite-scroll.tsScroll infinito utilitário
use-js-loaded.tsDetecta se JS carregou
use-lead-sources.tsOrigens de leads
use-loss-reasons.tsMotivos de perda
use-members.tsMembros do workspace
use-mobile.tsBreakpoint mobile
use-next-activities.tsPróximas atividades agendadas
use-now.tsRelógio visibility-aware (pausa em background, atualiza ao voltar)
use-pipelines.tsPipelines e etapas
use-product-suggestions.tsSugestões de produtos do catálogo
use-products.tsCRUD de produtos
use-profile.tsPerfil do usuário autenticado
use-proposals.tsCRUD de propostas e wizard
use-qualification.tsFormulários de qualificação (CRUD + respostas)
use-super-admin.tsOperações de super admin (listar workspaces, entrar, sair, criar)
use-update-deal-field.tsAtualização individual de campo de negócio (inline edit)
use-workspace-cases.tsCases/exemplos do workspace para propostas
use-workspace-proposal-settings.tsConfigurações de propostas do workspace
use-workspace-settings.tsConfigurações gerais do workspace
use-workspace.tsWorkspace ativo e membros

Padrão de um hook

Cada hook exporta funções que seguem o padrão:

// Leitura (useQuery)
export function useDeals(pipelineId?: string) {
  const workspace = useWorkspaceStore((s) => s.workspace);
  return useQuery({
    queryKey: ["deals", workspace?.id, pipelineId],
    queryFn: async () => {
      const { data, error } = await supabase
        .from("deals")
        .select("*, companies(name), contacts(name), stages(name)")
        .eq("workspace_id", workspace!.id);
      if (error) throw error;
      return data;
    },
    enabled: !!workspace && !!pipelineId,
  });
}

// Escrita (useMutation)
export function useCreateDeal() {
  const workspace = useWorkspaceStore((s) => s.workspace);
  const qc = useQueryClient();
  return useMutation({
    mutationFn: async (deal: DealInsert) => {
      const { data, error } = await supabase
        .from("deals")
        .insert({ ...deal, workspace_id: workspace!.id })
        .select()
        .single();
      if (error) throw error;
      return data;
    },
    onSuccess: () =>
      qc.invalidateQueries({ queryKey: ["deals", workspace?.id] }),
  });
}

Convenções

  • workspace_id é injetado automaticamente pelo hook (não passado pelo chamador)
  • Tipos são derivados de Database["public"]["Tables"]["<table>"]
  • enabled garante que a query só roda quando há workspace
  • onSuccess invalida as queries relacionadas

On this page