forked from elastic/kibana
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.tsx
84 lines (70 loc) · 2.07 KB
/
index.tsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License
* 2.0; you may not use this file except in compliance with the Elastic License
* 2.0.
*/
import { EuiIcon, EuiText, EuiToolTip } from '@elastic/eui';
import { FormattedRelative } from '@kbn/i18n/react';
import React, { useEffect, useMemo, useState } from 'react';
import * as i18n from './translations';
interface LastUpdatedAtProps {
compact?: boolean;
updatedAt: number;
showUpdating?: boolean;
}
export const Updated = React.memo<{ date: number; prefix: string; updatedAt: number }>(
({ date, prefix, updatedAt }) => (
<>
{prefix}
{
<FormattedRelative
data-test-subj="last-updated-at-date"
key={`formatedRelative-${date}`}
value={new Date(updatedAt)}
/>
}
</>
)
);
Updated.displayName = 'Updated';
const prefix = ` ${i18n.UPDATED} `;
export const LastUpdatedAt = React.memo<LastUpdatedAtProps>(
({ compact = false, updatedAt, showUpdating = false }) => {
const [date, setDate] = useState(Date.now());
function tick() {
setDate(Date.now());
}
useEffect(() => {
const timerID = setInterval(() => tick(), 10000);
return () => {
clearInterval(timerID);
};
}, []);
const updateText = useMemo(() => {
if (showUpdating) {
return <span> {i18n.UPDATING}</span>;
}
if (!compact) {
return <Updated date={date} prefix={prefix} updatedAt={updatedAt} />;
}
return null;
}, [compact, date, showUpdating, updatedAt]);
return (
<EuiToolTip
data-test-subj="timeline-stream-tool-tip"
content={
<>
<Updated date={date} prefix={prefix} updatedAt={updatedAt} />
</>
}
>
<EuiText size="s">
<EuiIcon data-test-subj="last-updated-at-clock-icon" type="clock" />
{updateText}
</EuiText>
</EuiToolTip>
);
}
);
LastUpdatedAt.displayName = 'LastUpdatedAt';