Skip to content

Commit ea2050e

Browse files
committed
feat(charts): add '1m' time period option to charts and update date range logic accordingly
1 parent d92babf commit ea2050e

File tree

5 files changed

+24
-24
lines changed

5 files changed

+24
-24
lines changed

dashboard/src/components/charts/all-nodes-stacked-bar-chart.tsx

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -499,18 +499,18 @@ export function AllNodesStackedBarChart() {
499499
if (!showCustomRange) {
500500
const now = new Date()
501501
let from: Date | undefined
502-
if (selectedTime === '12h') {
503-
from = new Date(now.getTime() - 12 * 60 * 60 * 1000)
504-
} else if (selectedTime === '24h') {
502+
if (selectedTime === '24h') {
505503
from = new Date(now.getTime() - 24 * 60 * 60 * 1000)
506504
} else if (selectedTime === '3d') {
507505
from = new Date(now.getTime() - 2 * 24 * 60 * 60 * 1000)
508506
} else if (selectedTime === '1w') {
509507
from = new Date(now.getTime() - 6 * 24 * 60 * 60 * 1000)
508+
} else if (selectedTime === '1m') {
509+
from = new Date(now.getTime() - 29 * 24 * 60 * 60 * 1000)
510510
}
511511
if (from) {
512-
// For 1w and 3d, set to end of current day to avoid extra bar
513-
const to = selectedTime === '1w' || selectedTime === '3d' ? dateUtils.toDayjs(now).endOf('day').toDate() : now
512+
// For 1w, 3d, and 1m, set to end of current day to avoid extra bar
513+
const to = selectedTime === '1w' || selectedTime === '3d' || selectedTime === '1m' ? dateUtils.toDayjs(now).endOf('day').toDate() : now
514514
setDateRange({ from, to })
515515
}
516516
}

dashboard/src/components/charts/costume-bar-chart.tsx

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -365,18 +365,18 @@ export function CostumeBarChart({ nodeId }: CostumeBarChartProps) {
365365
if (!showCustomRange) {
366366
const now = new Date()
367367
let from: Date | undefined
368-
if (selectedTime === '12h') {
369-
from = new Date(now.getTime() - 12 * 60 * 60 * 1000)
370-
} else if (selectedTime === '24h') {
368+
if (selectedTime === '24h') {
371369
from = new Date(now.getTime() - 24 * 60 * 60 * 1000)
372370
} else if (selectedTime === '3d') {
373371
from = new Date(now.getTime() - 3 * 24 * 60 * 60 * 1000)
374372
} else if (selectedTime === '1w') {
375373
from = new Date(now.getTime() - 6 * 24 * 60 * 60 * 1000)
374+
} else if (selectedTime === '1m') {
375+
from = new Date(now.getTime() - 29 * 24 * 60 * 60 * 1000)
376376
}
377377
if (from) {
378-
// For 1w and 3d, set to end of current day to avoid extra bar
379-
const to = selectedTime === '1w' || selectedTime === '3d' ? dateUtils.toDayjs(now).endOf('day').toDate() : now
378+
// For 1w, 3d, and 1m, set to end of current day to avoid extra bar
379+
const to = selectedTime === '1w' || selectedTime === '3d' || selectedTime === '1m' ? dateUtils.toDayjs(now).endOf('day').toDate() : now
380380
setDateRange({ from, to })
381381
}
382382
}

dashboard/src/components/charts/time-selector.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,6 @@ export default function TimeSelector({ selectedTime, setSelectedTime }: TimeSele
1212
return (
1313
<div className="inline-flex max-h-[50px] max-w-[220px] rounded-md border p-1">
1414
<ToggleGroup type="single" value={selectedTime} onValueChange={(value: any) => value && setSelectedTime(value)} className="space-x-1">
15-
<ToggleGroupItem value="12h" variant="default" className="border-0 bg-transparent px-3 py-1 text-sm">
16-
12h
17-
</ToggleGroupItem>
1815
<ToggleGroupItem value="24h" variant="default" className="border-0 bg-transparent px-3 py-1 text-sm">
1916
24h
2017
</ToggleGroupItem>
@@ -24,6 +21,9 @@ export default function TimeSelector({ selectedTime, setSelectedTime }: TimeSele
2421
<ToggleGroupItem value="1w" variant="default" className="border-0 bg-transparent px-3 py-1 text-sm">
2522
1w
2623
</ToggleGroupItem>
24+
<ToggleGroupItem value="1m" variant="default" className="border-0 bg-transparent px-3 py-1 text-sm">
25+
1m
26+
</ToggleGroupItem>
2727
</ToggleGroup>
2828
</div>
2929
)

dashboard/src/components/dashboard/data-usage-chart.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,11 @@ type PeriodOption = {
2323
}
2424

2525
const PERIOD_KEYS = [
26-
{ key: '12h', period: 'hour' as Period, amount: 12, unit: 'hour' },
2726
{ key: '24h', period: 'hour' as Period, amount: 24, unit: 'hour' },
2827
{ key: '3d', period: 'day' as Period, amount: 3, unit: 'day' },
2928
{ key: '7d', period: 'day' as Period, amount: 7, unit: 'day' },
3029
{ key: '30d', period: 'day' as Period, amount: 30, unit: 'day' },
30+
{ key: '1m', period: 'day' as Period, amount: 1, unit: 'month' },
3131
{ key: '3m', period: 'day' as Period, amount: 3, unit: 'month' },
3232
{ key: 'all', period: 'day' as Period, allTime: true },
3333
]
@@ -246,7 +246,7 @@ const DataUsageChart = ({ admin_username }: { admin_username?: string }) => {
246246
],
247247
[t],
248248
)
249-
const [periodOption, setPeriodOption] = useState<PeriodOption>(() => PERIOD_OPTIONS[3])
249+
const [periodOption, setPeriodOption] = useState<PeriodOption>(() => PERIOD_OPTIONS[2])
250250

251251
// Update periodOption when PERIOD_OPTIONS changes (e.g., language change)
252252
useEffect(() => {
@@ -334,9 +334,9 @@ const DataUsageChart = ({ admin_username }: { admin_username?: string }) => {
334334
}, [chartData])
335335

336336
const xAxisInterval = useMemo(() => {
337-
// For hours (12h, 24h), show approximately 6-8 labels
337+
// For hours (24h), show approximately 8 labels
338338
if (periodOption.hours) {
339-
const targetLabels = periodOption.hours === 12 ? 6 : 8
339+
const targetLabels = 8
340340
return Math.max(1, Math.floor(chartData.length / targetLabels))
341341
}
342342

dashboard/src/components/dialogs/usage-modal.tsx

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -21,15 +21,15 @@ import NodeStatsModal from './node-stats-modal'
2121
import { getPeriodFromDateRange } from '@/utils/datePickerUtils'
2222

2323
// Define allowed period keys
24-
const PERIOD_KEYS = ['1h', '12h', '24h', '3d', '1w'] as const
24+
const PERIOD_KEYS = ['1h', '24h', '3d', '1w', '1m'] as const
2525
type PeriodKey = (typeof PERIOD_KEYS)[number]
2626

2727
const getPeriodMap = (now: number) => ({
2828
'1h': { period: Period.minute, start: new Date(now - 60 * 60 * 1000) },
29-
'12h': { period: Period.hour, start: new Date(now - 12 * 60 * 60 * 1000) },
3029
'24h': { period: Period.hour, start: new Date(now - 24 * 60 * 60 * 1000) },
3130
'3d': { period: Period.day, start: new Date(now - 2 * 24 * 60 * 60 * 1000) },
3231
'1w': { period: Period.day, start: new Date(now - 6 * 24 * 60 * 60 * 1000) },
32+
'1m': { period: Period.day, start: new Date(now - 29 * 24 * 60 * 60 * 1000) },
3333
})
3434

3535
interface UsageModalProps {
@@ -538,12 +538,12 @@ const UsageModal = ({ open, onClose, username }: UsageModalProps) => {
538538
}
539539
}
540540
let filtered = flatStats
541-
if ((period === '12h' || period === '24h') && !showCustomRange) {
541+
if (period === '24h' && !showCustomRange) {
542542
if (!start || !end)
543543
return flatStats.map((point: any) => {
544544
const dateObj = dateUtils.toDayjs(point.period_start)
545545
let timeFormat
546-
if (period === '12h' || period === '24h' || (showCustomRange && backendPeriod === Period.hour)) {
546+
if (period === '24h' || (showCustomRange && backendPeriod === Period.hour)) {
547547
timeFormat = dateObj.format('HH:mm')
548548
} else {
549549
timeFormat = dateObj.format('MM/DD')
@@ -572,7 +572,7 @@ const UsageModal = ({ open, onClose, username }: UsageModalProps) => {
572572
return filtered.map((point: any) => {
573573
const dateObj = dateUtils.toDayjs(point.period_start)
574574
let timeFormat
575-
if (period === '12h' || period === '24h' || (showCustomRange && backendPeriod === Period.hour)) {
575+
if (period === '24h' || (showCustomRange && backendPeriod === Period.hour)) {
576576
timeFormat = dateObj.format('HH:mm')
577577
} else {
578578
timeFormat = dateObj.format('MM/DD')
@@ -642,10 +642,10 @@ const UsageModal = ({ open, onClose, username }: UsageModalProps) => {
642642
setShowCustomRange(true)
643643
const diffHours = (range.to.getTime() - range.from.getTime()) / (1000 * 60 * 60)
644644
if (diffHours <= 1) setPeriod('1h')
645-
else if (diffHours <= 12) setPeriod('12h')
646645
else if (diffHours <= 24) setPeriod('24h')
647646
else if (diffHours <= 72) setPeriod('3d')
648-
else setPeriod('1w')
647+
else if (diffHours <= 168) setPeriod('1w')
648+
else setPeriod('1m')
649649
}
650650
}, [])
651651

0 commit comments

Comments
 (0)