fix: usage: datepicker item disabled issue

This commit is contained in:
jialin
2025-06-26 12:15:09 +08:00
parent 8751400ae3
commit 47d7418eb1
6 changed files with 37 additions and 20 deletions
+2
View File
@@ -35,6 +35,8 @@ const useStyles = createStyles(({ css }) => ({
white-space: pre-line; white-space: pre-line;
span { span {
color: var(--ant-color-text); color: var(--ant-color-text);
display: flex;
margin-top: 8px;
} }
` `
})); }));
@@ -29,7 +29,8 @@ const ExportData: React.FC<{
} = useUsageData<{ } = useUsageData<{
items: TableRow[]; items: TableRow[];
}>({ }>({
url: DASHBOARD_USAGE_API url: DASHBOARD_USAGE_API,
disabledDate: false
}); });
const exportTableColumns: TableColumnType[] = [ const exportTableColumns: TableColumnType[] = [
@@ -24,6 +24,7 @@ const UsageInner: FC<{ paddingRight: string }> = ({ paddingRight }) => {
const { usageData, handleOnCancel, handleExport, FilterBar, init, open } = const { usageData, handleOnCancel, handleExport, FilterBar, init, open } =
useUsageData<DashboardUsageData>({ useUsageData<DashboardUsageData>({
url: DASHBOARD_STATS_API, url: DASHBOARD_STATS_API,
disabledDate: true,
defaultData: { defaultData: {
api_request_history: [], api_request_history: [],
completion_token_history: [], completion_token_history: [],
@@ -80,7 +80,7 @@ const legendData = [
]; ];
const RequestTokenInner: React.FC<RequestTokenInnerProps> = (props) => { const RequestTokenInner: React.FC<RequestTokenInnerProps> = (props) => {
const { requestData, tokenData, xAxisData, onExport } = props; const { requestData, tokenData, xAxisData } = props;
const totalData = useMemo(() => { const totalData = useMemo(() => {
const data: Record<string, number> = { const data: Record<string, number> = {
@@ -42,10 +42,10 @@ interface RequestTokenData {
xAxisData: string[]; xAxisData: string[];
} }
interface TopUserData { const DefaultDateConfig = {
userData: { name: string; value: number }[]; maxRange: 60,
topUserList: string[]; defaultRange: 30
} };
const getLast30Days = () => { const getLast30Days = () => {
const dates: string[] = []; const dates: string[] = [];
@@ -94,14 +94,16 @@ const generateData = (dateRage: string[], valueMap: Map<string, number>) => {
export default function useUseageData<T>(config: { export default function useUseageData<T>(config: {
url: string; url: string;
defaultData?: T; defaultData?: T;
disabledDate?: boolean;
}) { }) {
const { url, defaultData } = config || {}; const { url, defaultData, disabledDate = false } = config || {};
const intl = useIntl(); const intl = useIntl();
const { TagRender } = useSelectRender({ const { TagRender } = useSelectRender({
maxTagWidth: 100 maxTagWidth: 100
}); });
const { disabledRangeDaysDate, rangePresets } = useRangePickerPreset({ const { disabledRangeDaysDate, rangePresets } = useRangePickerPreset({
range: 60 range: DefaultDateConfig.maxRange,
disabledDate: disabledDate
}); });
const [open, setOpen] = useState(false); const [open, setOpen] = useState(false);
const [result, setResult] = useState<{ const [result, setResult] = useState<{
@@ -109,7 +111,9 @@ export default function useUseageData<T>(config: {
end_date?: string; end_date?: string;
data: T; data: T;
}>({ }>({
start_date: dayjs().subtract(30, 'days').format('YYYY-MM-DD'), start_date: dayjs()
.subtract(DefaultDateConfig.defaultRange, 'days')
.format('YYYY-MM-DD'),
end_date: dayjs().format('YYYY-MM-DD'), end_date: dayjs().format('YYYY-MM-DD'),
data: defaultData as T data: defaultData as T
}); });
@@ -120,7 +124,9 @@ export default function useUseageData<T>(config: {
model_ids: number[]; model_ids: number[];
user_ids: number[]; user_ids: number[];
}>({ }>({
start_date: dayjs().subtract(30, 'days').format('YYYY-MM-DD'), start_date: dayjs()
.subtract(DefaultDateConfig.defaultRange, 'days')
.format('YYYY-MM-DD'),
end_date: dayjs().format('YYYY-MM-DD'), end_date: dayjs().format('YYYY-MM-DD'),
model_ids: [], model_ids: [],
user_ids: [] user_ids: []
@@ -318,11 +324,15 @@ export default function useUseageData<T>(config: {
}; };
const FilterBar = () => { const FilterBar = () => {
const filterOptions = (inputValue: any, option: any) => {
return option.label?.toLowerCase().includes(inputValue.toLowerCase());
};
return ( return (
<FilterWrapper> <FilterWrapper>
<div className="selection"> <div className="selection">
<DatePicker.RangePicker <DatePicker.RangePicker
defaultValue={[dayjs().add(-30, 'd'), dayjs()]} maxDate={dayjs()}
defaultValue={[dayjs().add(-29, 'd'), dayjs()]}
disabledDate={disabledRangeDaysDate} disabledDate={disabledRangeDaysDate}
presets={rangePresets} presets={rangePresets}
allowClear={false} allowClear={false}
@@ -332,9 +342,11 @@ export default function useUseageData<T>(config: {
></DatePicker.RangePicker> ></DatePicker.RangePicker>
<Select <Select
allowClear allowClear
showSearch
mode="multiple" mode="multiple"
options={userList} options={userList}
maxTagCount={1} maxTagCount={1}
filterOption={filterOptions}
tagRender={TagRender} tagRender={TagRender}
placeholder={intl.formatMessage({ placeholder={intl.formatMessage({
id: 'dashboard.usage.selectuser' id: 'dashboard.usage.selectuser'
@@ -345,10 +357,12 @@ export default function useUseageData<T>(config: {
></Select> ></Select>
<Select <Select
allowClear allowClear
showSearch
mode="multiple" mode="multiple"
options={modelList} options={modelList}
maxTagCount={1} maxTagCount={1}
tagRender={TagRender} tagRender={TagRender}
filterOption={filterOptions}
placeholder={intl.formatMessage({ placeholder={intl.formatMessage({
id: 'dashboard.usage.selectmodel' id: 'dashboard.usage.selectmodel'
})} })}
@@ -4,6 +4,7 @@ import dayjs, { type Dayjs } from 'dayjs';
interface RangePickerPreset { interface RangePickerPreset {
range: number; range: number;
disabledDate?: boolean;
} }
export default function useRangePickerPreset(options?: RangePickerPreset): { export default function useRangePickerPreset(options?: RangePickerPreset): {
@@ -14,7 +15,7 @@ export default function useRangePickerPreset(options?: RangePickerPreset): {
}[]; }[];
range: number; range: number;
} { } {
const { range = 60 } = options || {}; const { range = 60, disabledDate } = options || {};
const intl = useIntl(); const intl = useIntl();
const getYearMonth = (date: Dayjs) => date.year() * 12 + date.month(); const getYearMonth = (date: Dayjs) => date.year() * 12 + date.month();
@@ -23,9 +24,8 @@ export default function useRangePickerPreset(options?: RangePickerPreset): {
current, current,
{ from, type } { from, type }
) => { ) => {
// before 2025 is not allowed if (!disabledDate) {
if (current.year() < 2025) { return false;
return true;
} }
if (from) { if (from) {
@@ -45,10 +45,9 @@ export default function useRangePickerPreset(options?: RangePickerPreset): {
); );
default: default:
return Math.abs(current.diff(from, 'days')) > range; return current.isBefore(minDate) || current.isAfter(maxDate);
} }
} }
return false; return false;
}; };
@@ -58,19 +57,19 @@ export default function useRangePickerPreset(options?: RangePickerPreset): {
}[] = [ }[] = [
{ {
label: intl.formatMessage({ id: 'dashboard.usage.datePicker.last7days' }), label: intl.formatMessage({ id: 'dashboard.usage.datePicker.last7days' }),
value: [dayjs().add(-7, 'd'), dayjs()] value: [dayjs().add(-6, 'd'), dayjs()]
}, },
{ {
label: intl.formatMessage({ label: intl.formatMessage({
id: 'dashboard.usage.datePicker.last30days' id: 'dashboard.usage.datePicker.last30days'
}), }),
value: [dayjs().add(-30, 'd'), dayjs()] value: [dayjs().add(-29, 'd'), dayjs()]
}, },
{ {
label: intl.formatMessage({ label: intl.formatMessage({
id: 'dashboard.usage.datePicker.last60days' id: 'dashboard.usage.datePicker.last60days'
}), }),
value: [dayjs().add(-60, 'd'), dayjs()] value: [dayjs().add(-59, 'd'), dayjs()]
} }
]; ];