import React from 'react';
import {duration} from '@gravity-ui/date-utils';
import {ArrowsRotateLeft} from '@gravity-ui/icons';
import {ActionTooltip, Button, Flex, Text} from '@gravity-ui/uikit';
import {isNil} from 'lodash';
import {DAY_IN_SECONDS, HOUR_IN_SECONDS, SECOND_IN_MS} from '../../../../utils/constants';
import i18n from '../i18n';
function getPassedMilliseconds(lastFullfiled = 0) {
return Date.now() - lastFullfiled;
}
interface HealthcheckRefreshProps {
lastFullfiled?: number;
refresh: () => void;
}
export function HealthcheckRefresh({lastFullfiled, refresh}: HealthcheckRefreshProps) {
const [passedFromLastFullfiled, setPassedFromLastFullfiled] = React.useState(
getPassedMilliseconds(lastFullfiled),
);
React.useEffect(() => {
setPassedFromLastFullfiled(getPassedMilliseconds(lastFullfiled));
const interval = setInterval(() => {
setPassedFromLastFullfiled(getPassedMilliseconds(lastFullfiled));
}, 60 * SECOND_IN_MS);
return () => clearInterval(interval);
}, [lastFullfiled]);
const renderPassedFromLastFullfiled = () => {
if (isNil(lastFullfiled)) {
return null;
}
const showHours = passedFromLastFullfiled > HOUR_IN_SECONDS * SECOND_IN_MS;
const showDays = passedFromLastFullfiled > DAY_IN_SECONDS * SECOND_IN_MS;
const preparedDuration = duration(passedFromLastFullfiled);
let durationText = '';
if (showDays) {
const days = preparedDuration.asDays();
durationText = i18n('description_days', {count: Math.round(days)});
} else if (showHours) {
const hours = preparedDuration.asHours();
durationText = i18n('description_hours', {count: Math.round(hours)});
} else {
const minutes = preparedDuration.asMinutes();
durationText = i18n('description_minutes', {count: Math.round(minutes)});
}
return {durationText};
};
return (
{renderPassedFromLastFullfiled()}
);
}