import React from 'react'; import { usePlant } from '@sensoro/plant'; import { formatParam } from '../utils/param'; import { APP_TYPE } from '../types'; export interface useQueryResult { loading?: boolean; total: number; allIds: any[]; onValuesChange: (allValues: any) => void; onLoadMore: () => Promise; onRefresh: () => void; } const useQuery = ( initQuery: any = {}, initPage = 1, useModel: any, ): useQueryResult => { const { allIds, fetch, append, loading, total, ...rest } = useModel(); const [page, setPage] = React.useState(initPage); const [query, setQuery] = React.useState({}); const onValuesChange = (allValues: any) => { let query = allValues; if (allValues?.createdTime?.[0] && allValues?.createdTime?.[1]) { query = formatParam( { ...allValues, startTime: allValues?.createdTime?.[0], endTime: allValues?.createdTime?.[1], }, ['createdTime'], true, ); } else { query = formatParam({ ...allValues, }); } setPage(1); setQuery(query); fetch({ page: 1, ...initQuery, ...query, }); }; const onLoadMore = () => { return new Promise((resolve, reject) => { append({ ...initQuery, ...formatParam(query), page: page + 1, }).then(res => { if (res) { setPage(page + 1); } resolve(!!res); }); }); }; const onRefresh = () => { setPage(1); fetch({ page: 1, ...initQuery, ...formatParam(query), }); }; return { onValuesChange, onLoadMore, onRefresh, loading: loading.fetch, total, allIds, ...rest, }; }; export default useQuery;