Merge: + client: add digit grouping for numbers on the dashboard

Closes #1423

Squashed commit of the following:

commit 6e5de427c48577ebbe4d963f817b66fed9b29bb4
Author: Ildar Kamalov <i.kamalov@adguard.com>
Date:   Wed Mar 11 17:56:39 2020 +0300

    + client: add digit grouping for numbers on the dashboard
This commit is contained in:
Ildar Kamalov 2020-03-17 15:15:19 +03:00
parent bc9bccc669
commit e5db33705d
4 changed files with 41 additions and 12 deletions

View File

@ -5,6 +5,7 @@ import round from 'lodash/round';
import Card from '../ui/Card'; import Card from '../ui/Card';
import Tooltip from '../ui/Tooltip'; import Tooltip from '../ui/Tooltip';
import { formatNumber } from '../../helpers/helpers';
const tooltipType = 'tooltip-custom--narrow'; const tooltipType = 'tooltip-custom--narrow';
@ -42,7 +43,9 @@ const Counters = (props) => {
<Tooltip text={tooltipTitle} type={tooltipType} /> <Tooltip text={tooltipTitle} type={tooltipType} />
</td> </td>
<td className="text-right"> <td className="text-right">
<span className="text-muted">{dnsQueries}</span> <span className="text-muted">
{formatNumber(dnsQueries)}
</span>
</td> </td>
</tr> </tr>
<tr> <tr>
@ -56,7 +59,9 @@ const Counters = (props) => {
/> />
</td> </td>
<td className="text-right"> <td className="text-right">
<span className="text-muted">{blockedFiltering}</span> <span className="text-muted">
{formatNumber(blockedFiltering)}
</span>
</td> </td>
</tr> </tr>
<tr> <tr>
@ -68,7 +73,9 @@ const Counters = (props) => {
/> />
</td> </td>
<td className="text-right"> <td className="text-right">
<span className="text-muted">{replacedSafebrowsing}</span> <span className="text-muted">
{formatNumber(replacedSafebrowsing)}
</span>
</td> </td>
</tr> </tr>
<tr> <tr>
@ -80,7 +87,9 @@ const Counters = (props) => {
/> />
</td> </td>
<td className="text-right"> <td className="text-right">
<span className="text-muted">{replacedParental}</span> <span className="text-muted">
{formatNumber(replacedParental)}
</span>
</td> </td>
</tr> </tr>
<tr> <tr>
@ -92,7 +101,9 @@ const Counters = (props) => {
/> />
</td> </td>
<td className="text-right"> <td className="text-right">
<span className="text-muted">{replacedSafesearch}</span> <span className="text-muted">
{formatNumber(replacedSafesearch)}
</span>
</td> </td>
</tr> </tr>
<tr> <tr>

View File

@ -2,6 +2,7 @@ import React from 'react';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import { STATUS_COLORS } from '../../helpers/constants'; import { STATUS_COLORS } from '../../helpers/constants';
import { formatNumber } from '../../helpers/helpers';
import Card from '../ui/Card'; import Card from '../ui/Card';
import Line from '../ui/Line'; import Line from '../ui/Line';
@ -10,10 +11,16 @@ const StatsCard = ({
}) => ( }) => (
<Card type="card--full" bodyType="card-wrap"> <Card type="card--full" bodyType="card-wrap">
<div className="card-body-stats"> <div className="card-body-stats">
<div className={`card-value card-value-stats text-${color}`}>{total}</div> <div className={`card-value card-value-stats text-${color}`}>
{formatNumber(total)}
</div>
<div className="card-title-stats">{title}</div> <div className="card-title-stats">{title}</div>
</div> </div>
{percent >= 0 && (<div className={`card-value card-value-percent text-${color}`}>{percent}</div>)} {percent >= 0 && (
<div className={`card-value card-value-percent text-${color}`}>
{percent}
</div>
)}
<div className="card-chart-bg"> <div className="card-chart-bg">
<Line data={lineData} color={STATUS_COLORS[color]} /> <Line data={lineData} color={STATUS_COLORS[color]} />
</div> </div>

View File

@ -1,18 +1,20 @@
import React from 'react'; import React from 'react';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
const Cell = props => ( import { formatNumber } from '../../helpers/helpers';
const Cell = ({ value, percent, color }) => (
<div className="stats__row"> <div className="stats__row">
<div className="stats__row-value mb-1"> <div className="stats__row-value mb-1">
<strong>{props.value}</strong> <strong>{formatNumber(value)}</strong>
<small className="ml-3 text-muted">{props.percent}%</small> <small className="ml-3 text-muted">{percent}%</small>
</div> </div>
<div className="progress progress-xs"> <div className="progress progress-xs">
<div <div
className="progress-bar" className="progress-bar"
style={{ style={{
width: `${props.percent}%`, width: `${percent}%`,
backgroundColor: props.color, backgroundColor: color,
}} }}
/> />
</div> </div>

View File

@ -449,3 +449,12 @@ export const getCurrentFilter = (url, filters) => {
return { name: '', url: '' }; return { name: '', url: '' };
}; };
/**
* @param number Number to format
* @returns string Returns a string with a language-sensitive representation of this number
*/
export const formatNumber = (num) => {
const currentLanguage = i18n.languages[0] || DEFAULT_LANGUAGE;
return num.toLocaleString(currentLanguage);
};