fix: reset page after filters changed
This commit is contained in:
@@ -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 }}>
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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'],
|
||||||
|
|||||||
@@ -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'],
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
Reference in New Issue
Block a user