|
|
|
@ -4,11 +4,10 @@ import { getTimerBucketIcon } from '../../util/timer';
|
|
|
|
|
|
|
|
|
|
// tslint:disable-next-line: no-submodule-imports
|
|
|
|
|
import useInterval from 'react-use/lib/useInterval';
|
|
|
|
|
import styled from 'styled-components';
|
|
|
|
|
import styled, { CSSProperties } from 'styled-components';
|
|
|
|
|
import { SessionIcon } from '../icon/SessionIcon';
|
|
|
|
|
|
|
|
|
|
const ExpireTimerBucket = styled.div`
|
|
|
|
|
margin-inline-start: 6px;
|
|
|
|
|
font-size: var(--font-size-xs);
|
|
|
|
|
line-height: 16px;
|
|
|
|
|
letter-spacing: 0.3px;
|
|
|
|
@ -20,11 +19,11 @@ const ExpireTimerBucket = styled.div`
|
|
|
|
|
type Props = {
|
|
|
|
|
expirationLength: number; // should be in milliseconds
|
|
|
|
|
expirationTimestamp: number | null;
|
|
|
|
|
isCorrectSide: boolean;
|
|
|
|
|
style: CSSProperties;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
export const ExpireTimer = (props: Props) => {
|
|
|
|
|
const { expirationLength, expirationTimestamp, isCorrectSide } = props;
|
|
|
|
|
const { expirationLength, expirationTimestamp, style } = props;
|
|
|
|
|
|
|
|
|
|
const initialTimeLeft = Math.max(Math.round(((expirationTimestamp || 0) - Date.now()) / 1000), 0);
|
|
|
|
|
const [timeLeft, setTimeLeft] = useState(initialTimeLeft);
|
|
|
|
@ -41,7 +40,7 @@ export const ExpireTimer = (props: Props) => {
|
|
|
|
|
const updateFrequency = 500;
|
|
|
|
|
useInterval(update, updateFrequency);
|
|
|
|
|
|
|
|
|
|
if (!(isCorrectSide && expirationLength && expirationTimestamp)) {
|
|
|
|
|
if (!(expirationLength && expirationTimestamp)) {
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -50,7 +49,7 @@ export const ExpireTimer = (props: Props) => {
|
|
|
|
|
const bucket = getTimerBucketIcon(expirationTimestamp, expirationLength);
|
|
|
|
|
|
|
|
|
|
return (
|
|
|
|
|
<ExpireTimerBucket>
|
|
|
|
|
<ExpireTimerBucket style={style}>
|
|
|
|
|
<SessionIcon iconType={bucket} iconSize="tiny" iconColor={expireTimerColor} />
|
|
|
|
|
</ExpireTimerBucket>
|
|
|
|
|
);
|
|
|
|
|