import req from 'editorReq'; import { useQuery } from 'react-query'; import { TResponce1 } from 'src/type'; import { API } from './config'; import _ from 'lodash'; import { useState } from 'react'; import { tablePageSize } from 'editorSrc/pages/config/table'; export const PRODUCT_GET_ALL = (page: number, pageSize: number) => { return `${API}/quote/goods/list/${pageSize}/${page}/created_at/desc/complex`; }; export async function getAll(url: string, param: ISearchParam) { return req({ url, method: 'POST', data: _.pickBy({ ...param, hasMaterials: true, status: 1 }, _.identity), }).then((data: TResponce1) => { return { ...data, items: data.items.map((item) => ({ ...item, key: item.id, })), }; }) as Promise>; } export interface ISearchParam { cateIdAndChild?: string; id?: string; name?: string; } const defaultSearchParam = { cateIdAndChild: '', id: '', name: '', }; export function useProduct() { const [searchParam, setSearchParam] = useState(defaultSearchParam); const [page, setPage] = useState(1); const [pageSize, setPageSize] = useState(tablePageSize); const url = PRODUCT_GET_ALL(page, pageSize); const { data, ...rest } = useQuery([url, searchParam], () => getAll(url, searchParam)); const onSearch = (searchParam: ISearchParam) => { setPage(1); setSearchParam((old) => ({ ...old, ...searchParam })); }; const reset = () => { setSearchParam({ ...defaultSearchParam }); setPage(1); }; return { data, onSearch, setPage, setPageSize, reset, ...rest, }; } export interface IProduct { key: string; id: string; name: string; cover_path: string; sales_volume: number; price: number; description: string; status_label: string; site_info?: { name: string; }; quote_info?: { target_cate_info?: { crumbs: string; }; }; } export interface IProducts { firstPage: boolean; hasNextPage: boolean; hasPrePage: boolean; items: IProduct[]; lastPage: boolean; limit: number; nextPage: number; page: number; prePage: number; totalCount: number; totalPages: number; }