VendeeDocs
Frontend

Hooks

Padrao 1 hook por tabela

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

Hooks disponiveis

HookTabela/Concern
use-deals.tsdeals (CRUD + move + win/lose)
use-contacts.tscontacts
use-companies.tscompanies
use-activities.tsactivities
use-comments.tscomments
use-dashboard.tsRPCs de dashboard
use-deal-activities.tsatividades de um deal
use-deal-history.tsevent_logs de um deal
use-deal-types.tsdeal_types
use-lead-sources.tslead_sources
use-loss-reasons.tsloss_reasons
use-members.tsmembers
use-pipelines.tspipelines + stages
use-products.tsproducts
use-profile.tsperfil do usuario
use-qualification.tsqualification_*
use-activity-types.tsactivity_types
use-workspace.tsworkspace
use-workspace-settings.tsworkspace settings
use-global-search.tsbusca global

Padrao de um hook

Cada hook exporta funcoes que seguem o padrao:

// 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] }),
  });
}

Convencoes

  • workspace_id e injetado automaticamente pelo hook (nao passado pelo chamador)
  • Tipos sao derivados de Database["public"]["Tables"]["<table>"]
  • enabled garante que a query so roda quando ha workspace
  • onSuccess invalida as queries relacionadas

On this page