fix: reset page after filters changed

This commit is contained in:
jialin
2026-04-22 13:16:48 +08:00
committed by jialin
parent f566ea3b63
commit 5f3b9b88ff
5 changed files with 89 additions and 8 deletions
@@ -17,13 +17,14 @@ const BreakdownTabs: React.FC<{
end_date: string; end_date: string;
}; };
scope: string; scope: string;
pageResetKey?: number;
refreshKey?: number; refreshKey?: number;
filters: { filters: {
models?: FilterOptionType[]; models?: FilterOptionType[];
users?: FilterOptionType[]; users?: FilterOptionType[];
api_keys?: FilterOptionType[]; api_keys?: FilterOptionType[];
}; };
}> = ({ filters, dateRange, scope, refreshKey = 0 }) => { }> = ({ filters, dateRange, scope, pageResetKey = 0, refreshKey = 0 }) => {
const intl = useIntl(); const intl = useIntl();
const models = filters.models || EMPTY_FILTERS; const models = filters.models || EMPTY_FILTERS;
const users = filters.users || EMPTY_FILTERS; const users = filters.users || EMPTY_FILTERS;
@@ -41,6 +42,7 @@ const BreakdownTabs: React.FC<{
models={models} models={models}
dateRange={dateRange} dateRange={dateRange}
scope={scope} scope={scope}
pageResetKey={pageResetKey}
refreshKey={refreshKey} refreshKey={refreshKey}
/> />
) )
@@ -55,6 +57,7 @@ const BreakdownTabs: React.FC<{
users={users} users={users}
dateRange={dateRange} dateRange={dateRange}
scope={scope} scope={scope}
pageResetKey={pageResetKey}
refreshKey={refreshKey} refreshKey={refreshKey}
/> />
) )
@@ -69,6 +72,7 @@ const BreakdownTabs: React.FC<{
apiKeys={apiKeys} apiKeys={apiKeys}
dateRange={dateRange} dateRange={dateRange}
scope={scope} scope={scope}
pageResetKey={pageResetKey}
refreshKey={refreshKey} refreshKey={refreshKey}
/> />
) )
@@ -79,7 +83,7 @@ const BreakdownTabs: React.FC<{
} }
return true; return true;
}); });
}, [apiKeys, dateRange, models, refreshKey, scope, users]); }, [apiKeys, dateRange, models, pageResetKey, refreshKey, scope, users]);
return ( return (
<div style={{ marginTop: 16 }}> <div style={{ marginTop: 16 }}>
+26
View File
@@ -21,6 +21,7 @@ const Usage: React.FC = () => {
const { exportTable } = useExportTable(); const { exportTable } = useExportTable();
const [openExportModal, setOpenExportModal] = useState(false); const [openExportModal, setOpenExportModal] = useState(false);
const [breakdownRefreshKey, setBreakdownRefreshKey] = useState(0); const [breakdownRefreshKey, setBreakdownRefreshKey] = useState(0);
const [breakdownPageResetKey, setBreakdownPageResetKey] = useState(0);
const summaryColumns = [ const summaryColumns = [
{ {
@@ -147,10 +148,34 @@ const Usage: React.FC = () => {
setBreakdownRefreshKey((prev) => prev + 1); setBreakdownRefreshKey((prev) => prev + 1);
}; };
const handleBreakdownPageReset = () => {
setBreakdownPageResetKey((prev) => prev + 1);
};
return ( return (
<div> <div>
<FilterBar <FilterBar
{...filterBar} {...filterBar}
onScopeChange={(value) => {
filterBar.onScopeChange(value);
handleBreakdownPageReset();
}}
onDateChange={(dates, dateStrings) => {
filterBar.onDateChange(dates, dateStrings);
handleBreakdownPageReset();
}}
onModelsChange={(value) => {
filterBar.onModelsChange(value);
handleBreakdownPageReset();
}}
onUsersChange={(value) => {
filterBar.onUsersChange(value);
handleBreakdownPageReset();
}}
onApiKeysChange={(value) => {
filterBar.onApiKeysChange(value);
handleBreakdownPageReset();
}}
handleSearch={handleSearch} handleSearch={handleSearch}
handlePickerChange={handlePickerChange} handlePickerChange={handlePickerChange}
onExportTable={exportTable} onExportTable={exportTable}
@@ -189,6 +214,7 @@ const Usage: React.FC = () => {
filters={filters} filters={filters}
dateRange={breakdownDateRange} dateRange={breakdownDateRange}
scope={commonFilters.scope} scope={commonFilters.scope}
pageResetKey={breakdownPageResetKey}
refreshKey={breakdownRefreshKey} refreshKey={breakdownRefreshKey}
></BreakdownTabs> ></BreakdownTabs>
<ExportData <ExportData
+19 -2
View File
@@ -5,7 +5,7 @@ import PageBox from '@/pages/_components/page-box';
import { useIntl } from '@umijs/max'; import { useIntl } from '@umijs/max';
import { ConfigProvider, Table } from 'antd'; import { ConfigProvider, Table } from 'antd';
import _ from 'lodash'; import _ from 'lodash';
import { useEffect, useState } from 'react'; import { useEffect, useRef, useState } from 'react';
import { FilterOptionType } from '../config/types'; import { FilterOptionType } from '../config/types';
import useAPIKeys from '../hooks/use-apikeys-columns'; import useAPIKeys from '../hooks/use-apikeys-columns';
import useQueryBreakdownList from '../services/use-query-breakdown-list'; import useQueryBreakdownList from '../services/use-query-breakdown-list';
@@ -15,8 +15,9 @@ const APIKeys: React.FC<{
apiKeys: FilterOptionType[]; apiKeys: FilterOptionType[];
dateRange: { start_date: string; end_date: string }; dateRange: { start_date: string; end_date: string };
scope: string; scope: string;
pageResetKey?: number;
refreshKey?: number; refreshKey?: number;
}> = ({ apiKeys, dateRange, scope, refreshKey = 0 }) => { }> = ({ apiKeys, dateRange, scope, pageResetKey = 0, refreshKey = 0 }) => {
const intl = useIntl(); const intl = useIntl();
const { loading, dataSource, fetchData } = useQueryBreakdownList({ const { loading, dataSource, fetchData } = useQueryBreakdownList({
@@ -31,6 +32,7 @@ const APIKeys: React.FC<{
perPage: 10, perPage: 10,
sort_by: '' sort_by: ''
}); });
const pendingPageResetRef = useRef(false);
const handleTableChange = (pagination: any, filters: any, sorter: any) => { const handleTableChange = (pagination: any, filters: any, sorter: any) => {
let sort_by = let sort_by =
@@ -50,6 +52,16 @@ const APIKeys: React.FC<{
}; };
const columns = useAPIKeys(); const columns = useAPIKeys();
useEffect(() => {
if (queryParams.page !== 1) {
pendingPageResetRef.current = true;
setQueryParams((prev) => ({
...prev,
page: 1
}));
}
}, [pageResetKey]);
const renderEmpty = (type?: string) => { const renderEmpty = (type?: string) => {
if (type !== 'Table') return; if (type !== 'Table') return;
return ( return (
@@ -69,6 +81,11 @@ const APIKeys: React.FC<{
}; };
useEffect(() => { useEffect(() => {
if (pendingPageResetRef.current && queryParams.page !== 1) {
return;
}
pendingPageResetRef.current = false;
fetchData({ fetchData({
...queryParams, ...queryParams,
group_by: ['api_key'], group_by: ['api_key'],
+19 -2
View File
@@ -5,7 +5,7 @@ import PageBox from '@/pages/_components/page-box';
import { useIntl } from '@umijs/max'; import { useIntl } from '@umijs/max';
import { ConfigProvider, Table } from 'antd'; import { ConfigProvider, Table } from 'antd';
import _ from 'lodash'; import _ from 'lodash';
import { useEffect, useState } from 'react'; import { useEffect, useRef, useState } from 'react';
import { FilterOptionType } from '../config/types'; import { FilterOptionType } from '../config/types';
import useUsersColumns from '../hooks/use-models-columns'; import useUsersColumns from '../hooks/use-models-columns';
import useQueryBreakdownList from '../services/use-query-breakdown-list'; import useQueryBreakdownList from '../services/use-query-breakdown-list';
@@ -15,8 +15,9 @@ const Models: React.FC<{
models: FilterOptionType[]; models: FilterOptionType[];
dateRange: { start_date: string; end_date: string }; dateRange: { start_date: string; end_date: string };
scope: string; scope: string;
pageResetKey?: number;
refreshKey?: number; refreshKey?: number;
}> = ({ models, dateRange, scope, refreshKey = 0 }) => { }> = ({ models, dateRange, scope, pageResetKey = 0, refreshKey = 0 }) => {
const intl = useIntl(); const intl = useIntl();
const { loading, dataSource, fetchData } = useQueryBreakdownList({ const { loading, dataSource, fetchData } = useQueryBreakdownList({
@@ -31,6 +32,7 @@ const Models: React.FC<{
perPage: 10, perPage: 10,
sort_by: '' sort_by: ''
}); });
const pendingPageResetRef = useRef(false);
const handleTableChange = (pagination: any, filters: any, sorter: any) => { const handleTableChange = (pagination: any, filters: any, sorter: any) => {
console.log('pagination, filters, sorter: ', pagination, filters, sorter); console.log('pagination, filters, sorter: ', pagination, filters, sorter);
@@ -52,6 +54,16 @@ const Models: React.FC<{
const columns = useUsersColumns(); const columns = useUsersColumns();
useEffect(() => {
if (queryParams.page !== 1) {
pendingPageResetRef.current = true;
setQueryParams((prev) => ({
...prev,
page: 1
}));
}
}, [pageResetKey]);
const renderEmpty = (type?: string) => { const renderEmpty = (type?: string) => {
if (type !== 'Table') return; if (type !== 'Table') return;
return ( return (
@@ -71,6 +83,11 @@ const Models: React.FC<{
}; };
useEffect(() => { useEffect(() => {
if (pendingPageResetRef.current && queryParams.page !== 1) {
return;
}
pendingPageResetRef.current = false;
fetchData({ fetchData({
...queryParams, ...queryParams,
group_by: ['model'], group_by: ['model'],
+19 -2
View File
@@ -5,7 +5,7 @@ import PageBox from '@/pages/_components/page-box';
import { useIntl } from '@umijs/max'; import { useIntl } from '@umijs/max';
import { ConfigProvider, Table } from 'antd'; import { ConfigProvider, Table } from 'antd';
import _ from 'lodash'; import _ from 'lodash';
import { useEffect, useState } from 'react'; import { useEffect, useRef, useState } from 'react';
import { FilterOptionType } from '../config/types'; import { FilterOptionType } from '../config/types';
import useUsersColumns from '../hooks/use-users-columns'; import useUsersColumns from '../hooks/use-users-columns';
import useQueryBreakdownList from '../services/use-query-breakdown-list'; import useQueryBreakdownList from '../services/use-query-breakdown-list';
@@ -15,8 +15,9 @@ const Users: React.FC<{
users: FilterOptionType[]; users: FilterOptionType[];
dateRange: { start_date: string; end_date: string }; dateRange: { start_date: string; end_date: string };
scope: string; scope: string;
pageResetKey?: number;
refreshKey?: number; refreshKey?: number;
}> = ({ users, dateRange, scope, refreshKey = 0 }) => { }> = ({ users, dateRange, scope, pageResetKey = 0, refreshKey = 0 }) => {
const intl = useIntl(); const intl = useIntl();
const { loading, dataSource, fetchData } = useQueryBreakdownList({ const { loading, dataSource, fetchData } = useQueryBreakdownList({
@@ -31,6 +32,7 @@ const Users: React.FC<{
perPage: 10, perPage: 10,
sort_by: '' sort_by: ''
}); });
const pendingPageResetRef = useRef(false);
const handleTableChange = (pagination: any, filters: any, sorter: any) => { const handleTableChange = (pagination: any, filters: any, sorter: any) => {
let sort_by = let sort_by =
@@ -70,6 +72,21 @@ const Users: React.FC<{
}; };
useEffect(() => { useEffect(() => {
if (queryParams.page !== 1) {
pendingPageResetRef.current = true;
setQueryParams((prev) => ({
...prev,
page: 1
}));
}
}, [pageResetKey]);
useEffect(() => {
if (pendingPageResetRef.current && queryParams.page !== 1) {
return;
}
pendingPageResetRef.current = false;
if (scope === 'all') { if (scope === 'all') {
fetchData({ fetchData({
...queryParams, ...queryParams,