Skip to content

Commit 05dd75d

Browse files
committed
Fix issue where ping value with decimals throws errors
1 parent 43f0e1a commit 05dd75d

3 files changed

Lines changed: 14 additions & 5 deletions

File tree

Plan/react/dashboard/src/components/cards/server/values/ServerAsNumbersCard.jsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ const ServerAsNumbersCard = ({data}) => {
2929
</h6>
3030
</Card.Header>
3131
<ExtendableCardBody
32-
id={data.player_kills !== undefined ? 'card-body-server-as-numbers' : 'card-body-network-as-numbers'}>
32+
id={data.player_kills === undefined ? 'card-body-network-as-numbers' : 'card-body-server-as-numbers'}>
3333
<CurrentUptime uptime={data.current_uptime}/>
3434
<hr/>
3535
<Datapoint name={t('html.label.totalPlayers')}
@@ -58,7 +58,7 @@ const ServerAsNumbersCard = ({data}) => {
5858
color={'playtime'} icon={faClock}
5959
value={<FormattedTime timeMs={data.player_playtime}/>}/>
6060
{data.session_length_avg && <Datapoint name={t('html.label.averageSessionLength')}
61-
color={'sessions'} icon={faClock}
61+
color={'sessions'} icon={faClock}
6262
value={<FormattedTime timeMs={data.session_length_avg}/>}/>}
6363
<Datapoint name={t('html.label.sessions')}
6464
color={'sessions'} icon={faCalendarCheck}

Plan/react/dashboard/src/components/table/PingTable.jsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,13 @@ import {usePreferences} from "../../hooks/preferencesHook.jsx";
66
import DataTablesTable from "./DataTablesTable.jsx";
77
import {localeService, reverseRegionLookupMap} from "../../service/localeService.js";
88
import {usePingFormatter} from "../../util/format/usePingFormatter.js";
9+
import {useDecimalFormatter} from "../../util/format/useDecimalFormatter.js";
910

1011
const PingTable = ({countries}) => {
1112
const {t} = useTranslation();
1213
const {preferencesLoaded} = usePreferences();
1314
const {formatPing} = usePingFormatter();
15+
const {formatDecimals} = useDecimalFormatter();
1416

1517
const columns = [{
1618
title: <><Fa icon={faGlobe}/> {t('html.label.country')}</>,
@@ -34,7 +36,7 @@ const PingTable = ({countries}) => {
3436
return {
3537
country: location,
3638
pingAverage: country.avg_ping,
37-
pingAverageFormatted: formatPing(country.avg_ping),
39+
pingAverageFormatted: formatPing(formatDecimals(country.avg_ping)),
3840
pingMax: country.max_ping,
3941
pingMaxFormatted: formatPing(country.max_ping),
4042
pingMin: country.min_ping,

Plan/react/dashboard/src/util/format/usePingFormatter.js

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,19 @@ export const usePingFormatter = () => {
1010

1111
const formatPing = useCallback((value) => {
1212
if (isNumber(value) && !String(value).includes("ms")) {
13-
const parts = formatter.formatToParts({milliseconds: value});
13+
const split = isNumber(value) ? [value] : value.split('.');
14+
const parts = formatter.formatToParts({milliseconds: split[0]});
1415

15-
return parts.map((part) => {
16+
const ints = parts.map((part, i) => part.type === 'integer' ? i : -1)
17+
.filter((i) => i >= 0);
18+
const lastIndex = ints[ints.length - 1];
19+
return parts.map((part, i) => {
1620
if (part.type === 'group') {
1721
return '';
1822
}
23+
if (lastIndex === i && split.length > 1) {
24+
return part.value + '.' + split[1];
25+
}
1926
return part.value;
2027
}).join('');
2128
}

0 commit comments

Comments
 (0)