openreplay/frontend/app/components/Dashboard/Widgets/common/CountBadge.js
Andrey Babushkin fd5c0c9747
Add lokalisation (#3092)
* applied eslint

* add locales and lint the project

* removed error boundary

* updated locales

* fix min files

* fix locales
2025-03-06 17:43:15 +01:00

56 lines
1.5 KiB
JavaScript

import React from 'react';
import { Icon } from 'UI';
import cn from 'classnames';
import styles from './countBadge.module.css';
const getFixedValue = (val) => {
let accuracy = 0;
while (Math.trunc(val * 10 ** accuracy) === 0) {
accuracy += 1;
}
const parsed = parseFloat(val).toFixed(accuracy).toString();
return parsed;
};
function CountBadge({
title,
icon,
count = '',
unit = '',
change,
oppositeColors = false,
component,
className,
}) {
const viewChange = typeof change === 'number' && change !== 0;
const changeIncrease = change > 0;
const colorGreen = oppositeColors ? !changeIncrease : changeIncrease;
return (
<div className={cn(className, 'flex items-baseline')}>
<div className={cn(styles.countWrapper, 'flex items-baseline')}>
{icon && (
<Icon name={icon} size="18" marginRight="5" className={styles.icon} />
)}
<span className={styles.count}> {component || count} </span>
<span className={styles.unit}>{unit}</span>
</div>
<div className={cn(styles.change, 'ml-2')} data-colorgreen={colorGreen}>
{viewChange && (
<div>
<Icon
size="10"
name={changeIncrease ? 'arrow-up' : 'arrow-down'}
color={colorGreen ? 'green' : 'red'}
marginRight="5"
/>
{`${getFixedValue(change)}%`}
</div>
)}
</div>
</div>
);
}
CountBadge.displayName = 'CountBadge';
export default CountBadge;