Frontend
Hooks
Padrao 1 hook por tabela
Os hooks ficam em src/hooks/, com um arquivo por tabela ou concern do Supabase.
Hooks disponiveis
| Hook | Tabela/Concern |
|---|---|
use-deals.ts | deals (CRUD + move + win/lose) |
use-contacts.ts | contacts |
use-companies.ts | companies |
use-activities.ts | activities |
use-comments.ts | comments |
use-dashboard.ts | RPCs de dashboard |
use-deal-activities.ts | atividades de um deal |
use-deal-history.ts | event_logs de um deal |
use-deal-types.ts | deal_types |
use-lead-sources.ts | lead_sources |
use-loss-reasons.ts | loss_reasons |
use-members.ts | members |
use-pipelines.ts | pipelines + stages |
use-products.ts | products |
use-profile.ts | perfil do usuario |
use-qualification.ts | qualification_* |
use-activity-types.ts | activity_types |
use-workspace.ts | workspace |
use-workspace-settings.ts | workspace settings |
use-global-search.ts | busca 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_ide injetado automaticamente pelo hook (nao passado pelo chamador)- Tipos sao derivados de
Database["public"]["Tables"]["<table>"] enabledgarante que a query so roda quando ha workspaceonSuccessinvalida as queries relacionadas