- Catálogo só mostra produtos com preço preenchido (vl_preco1 > 0) por default - Novo endpoint GET /catalog/pautas — retorna as 6 pautas do representante logado - GET /catalog?idPauta=N — usa preço da pauta selecionada (vw_pauta_produtos) - CatalogPage: dropdown "Selecionar pauta de preços" com as pautas do rep - product.contract: adiciona PautaSchema e idPauta no ProdutoListQuerySchema Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
54 lines
1.6 KiB
TypeScript
54 lines
1.6 KiB
TypeScript
import { useQuery } from '@tanstack/react-query';
|
|
import {
|
|
PautaSchema,
|
|
ProdutoListResponseSchema,
|
|
ProdutoDetailSchema,
|
|
type ProdutoListQuery,
|
|
type ProdutoListResponse,
|
|
type ProdutoDetail,
|
|
type Pauta,
|
|
} from '@sar/api-interface';
|
|
import { z } from 'zod';
|
|
import { apiFetch } from '../api-client';
|
|
|
|
export function usePautas() {
|
|
return useQuery<Pauta[]>({
|
|
queryKey: ['catalog', 'pautas'],
|
|
queryFn: async () => {
|
|
const res = await apiFetch('/catalog/pautas');
|
|
return z.array(PautaSchema).parse(res);
|
|
},
|
|
staleTime: 10 * 60 * 1000,
|
|
});
|
|
}
|
|
|
|
export function useCatalog(params: Partial<ProdutoListQuery> = {}) {
|
|
const search = new URLSearchParams();
|
|
if (params.q) search.set('q', params.q);
|
|
if (params.codGrupo) search.set('codGrupo', String(params.codGrupo));
|
|
if (params.idPauta) search.set('idPauta', String(params.idPauta));
|
|
if (params.page) search.set('page', String(params.page));
|
|
if (params.limit) search.set('limit', String(params.limit));
|
|
|
|
const qs = search.toString();
|
|
return useQuery<ProdutoListResponse>({
|
|
queryKey: ['catalog', params],
|
|
queryFn: async () => {
|
|
const res = await apiFetch(`/catalog${qs ? `?${qs}` : ''}`);
|
|
return ProdutoListResponseSchema.parse(res);
|
|
},
|
|
staleTime: 4 * 60 * 60 * 1000,
|
|
});
|
|
}
|
|
|
|
export function useProdutoDetail(id: number | undefined) {
|
|
return useQuery<ProdutoDetail>({
|
|
queryKey: ['catalog', id],
|
|
enabled: id != null,
|
|
queryFn: async () => {
|
|
const res = await apiFetch(`/catalog/${id}`);
|
|
return ProdutoDetailSchema.parse(res);
|
|
},
|
|
});
|
|
}
|