refactor: use hook for fetch chart
This commit is contained in:
@@ -330,7 +330,7 @@ const BarChart: React.FC<BarChartProps> = (props) => {
|
|||||||
<div
|
<div
|
||||||
style={{
|
style={{
|
||||||
position: 'absolute',
|
position: 'absolute',
|
||||||
inset: 0,
|
inset: 20,
|
||||||
display: 'flex',
|
display: 'flex',
|
||||||
alignItems: 'center',
|
alignItems: 'center',
|
||||||
justifyContent: 'center',
|
justifyContent: 'center',
|
||||||
|
|||||||
@@ -15,13 +15,13 @@ import useCoolColors from '@/hooks/use-cool-colors';
|
|||||||
import { formatLargeNumber } from '@/utils';
|
import { formatLargeNumber } from '@/utils';
|
||||||
import { SimpleCard } from '@gpustack/core-ui';
|
import { SimpleCard } from '@gpustack/core-ui';
|
||||||
import { useAccess, useIntl } from '@umijs/max';
|
import { useAccess, useIntl } from '@umijs/max';
|
||||||
|
import { useMemoizedFn } from 'ahooks';
|
||||||
import { Tabs } from 'antd';
|
import { Tabs } from 'antd';
|
||||||
import dayjs from 'dayjs';
|
import dayjs from 'dayjs';
|
||||||
import React, { useEffect, useMemo, useState } from 'react';
|
import React, { useEffect, useMemo, useState } from 'react';
|
||||||
import {
|
import {
|
||||||
queryStorageBreakdown,
|
queryStorageBreakdown,
|
||||||
ResourceBreakdownRequest,
|
ResourceBreakdownRequest
|
||||||
ResourceBreakdownResponse
|
|
||||||
} from '../apis/resource';
|
} from '../apis/resource';
|
||||||
import MetricChartCard from '../components/metric-chart-card';
|
import MetricChartCard from '../components/metric-chart-card';
|
||||||
import MetricLabel from '../components/metric-label';
|
import MetricLabel from '../components/metric-label';
|
||||||
@@ -34,6 +34,7 @@ import {
|
|||||||
Granularity
|
Granularity
|
||||||
} from '../utils/time-buckets';
|
} from '../utils/time-buckets';
|
||||||
import { buildTrendSeries } from '../utils/trend-series';
|
import { buildTrendSeries } from '../utils/trend-series';
|
||||||
|
import useQueryStorageBreakdown from './services/use-query-storage-breakdown';
|
||||||
import StorageBreakdownTable from './tables/storage-breakdown-table';
|
import StorageBreakdownTable from './tables/storage-breakdown-table';
|
||||||
import useStorageColumns from './tables/use-storage-columns';
|
import useStorageColumns from './tables/use-storage-columns';
|
||||||
|
|
||||||
@@ -104,13 +105,16 @@ const StorageTab: React.FC = () => {
|
|||||||
const { creators: userOptions, volumes: volumeOptions } =
|
const { creators: userOptions, volumes: volumeOptions } =
|
||||||
useResourceMeta(scope);
|
useResourceMeta(scope);
|
||||||
|
|
||||||
const [chartData, setChartData] = useState<ResourceBreakdownResponse | null>(
|
|
||||||
null
|
|
||||||
);
|
|
||||||
// Bumped on any filter change to snap every mounted table back to page 1;
|
// Bumped on any filter change to snap every mounted table back to page 1;
|
||||||
// each table owns its own page/sort state otherwise.
|
// each table owns its own page/sort state otherwise.
|
||||||
const [pageResetKey, setPageResetKey] = useState(0);
|
const [pageResetKey, setPageResetKey] = useState(0);
|
||||||
|
|
||||||
|
const {
|
||||||
|
detailData: chartData,
|
||||||
|
loading: chartLoading,
|
||||||
|
fetchData: fetchChartData
|
||||||
|
} = useQueryStorageBreakdown({ key: 'storageBreakdownChart' });
|
||||||
|
|
||||||
const baseRequest = (): Omit<ResourceBreakdownRequest, 'group_by'> => ({
|
const baseRequest = (): Omit<ResourceBreakdownRequest, 'group_by'> => ({
|
||||||
start_date: dateRange[0].format('YYYY-MM-DD'),
|
start_date: dateRange[0].format('YYYY-MM-DD'),
|
||||||
end_date: dateRange[1].format('YYYY-MM-DD'),
|
end_date: dateRange[1].format('YYYY-MM-DD'),
|
||||||
@@ -127,9 +131,8 @@ const StorageTab: React.FC = () => {
|
|||||||
perPage: 50
|
perPage: 50
|
||||||
});
|
});
|
||||||
|
|
||||||
const fetchChart = async () => {
|
const fetchChart = useMemoizedFn(() =>
|
||||||
try {
|
fetchChartData({
|
||||||
const data = await queryStorageBreakdown({
|
|
||||||
...baseRequest(),
|
...baseRequest(),
|
||||||
// Split each bucket by the chosen dimension when grouping.
|
// Split each bucket by the chosen dimension when grouping.
|
||||||
group_by: chartGroupBy ? ['date', chartGroupBy] : ['date'],
|
group_by: chartGroupBy ? ['date', chartGroupBy] : ['date'],
|
||||||
@@ -138,12 +141,8 @@ const StorageTab: React.FC = () => {
|
|||||||
// recent) buckets have smaller values and would be pushed onto later
|
// recent) buckets have smaller values and would be pushed onto later
|
||||||
// pages — dropping the newest hours from the chart under a small page.
|
// pages — dropping the newest hours from the chart under a small page.
|
||||||
perPage: 10000
|
perPage: 10000
|
||||||
});
|
})
|
||||||
setChartData(data);
|
);
|
||||||
} catch {
|
|
||||||
// Surfacing handled by global interceptor; keep last data.
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
fetchChart();
|
fetchChart();
|
||||||
@@ -356,6 +355,7 @@ const StorageTab: React.FC = () => {
|
|||||||
groupBy={chartGroupBy}
|
groupBy={chartGroupBy}
|
||||||
groupByOptions={chartGroupByOptions}
|
groupByOptions={chartGroupByOptions}
|
||||||
onGroupByChange={(v) => setChartGroupBy(v as GroupKey | null)}
|
onGroupByChange={(v) => setChartGroupBy(v as GroupKey | null)}
|
||||||
|
loading={chartLoading}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user