openreplay/frontend/app/components/shared/DevTools/TimeTable/BarRow.tsx
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

73 lines
1.6 KiB
TypeScript

import { percentOf } from 'App/utils';
import React from 'react';
import styles from './barRow.module.css';
import tableStyles from './timeTable.module.css';
const formatTime = (time) =>
time < 1000 ? `${time.toFixed(2)}ms` : `${time / 1000}s`;
interface Props {
resource: {
time: number;
ttfb?: number;
duration?: number;
key: string;
};
popup?: boolean;
timestart: number;
timewidth: number;
}
// TODO: If request has no duration, set duration to 0.2s. Enforce existence of duration in the future.
function BarRow({
resource: { time, ttfb = 0, duration = 200, key },
popup = false,
timestart = 0,
timewidth,
}: Props) {
const timeOffset = time - timestart;
ttfb = ttfb || 0;
const trigger = (
<div
className={styles.barWrapper}
style={{
left: `${percentOf(timeOffset, timewidth)}%`,
right: `${100 - percentOf(timeOffset + duration, timewidth)}%`,
minWidth: '5px',
}}
>
<div
className={styles.ttfbBar}
style={{
width: `${percentOf(ttfb, duration)}%`,
}}
/>
<div
className={styles.downloadBar}
style={{
width: `${percentOf(duration - ttfb, duration)}%`,
minWidth: '5px',
}}
/>
</div>
);
if (!popup) {
return (
<div key={key} className={tableStyles.row}>
{' '}
{trigger}{' '}
</div>
);
}
return (
<div key={key} className={tableStyles.row} style={{ height: '15px' }}>
{trigger}
</div>
);
}
BarRow.displayName = 'BarRow';
export default React.memo(BarRow);