argo-cd
64 строки · 3.1 Кб
1import * as moment from 'moment';
2import * as React from 'react';
3import {ago} from 'argo-ui/v2';
4
5import * as models from '../../models';
6
7require('./events-list.scss');
8
9function timestampSort(first: models.Event, second: models.Event): number {
10if (first.lastTimestamp && !second.lastTimestamp) {
11return moment(second.eventTime).diff(first.lastTimestamp);
12} else if (!first.lastTimestamp && second.lastTimestamp) {
13return moment(second.lastTimestamp).diff(first.eventTime);
14} else if (!first.lastTimestamp && !second.lastTimestamp) {
15return moment(second.eventTime).diff(first.eventTime);
16}
17return moment(second.lastTimestamp).diff(first.lastTimestamp);
18}
19
20function getTimeElements(timestamp: string) {
21const readableFormat = (d: Date) => moment(d).calendar();
22const dateOfEvent = new Date(timestamp);
23return (
24<>
25<div className='events-list__event__ago'>{ago(dateOfEvent)}</div>
26<div className='events-list__event__time'>{readableFormat(dateOfEvent)}</div>
27</>
28);
29}
30
31export const EventsList = (props: {events: models.Event[]}) => {
32const events = props.events.sort((first, second) => timestampSort(first, second));
33
34return (
35<div className='events-list'>
36{(events.length === 0 && <p>No events available</p>) || (
37<div className='argo-table-list'>
38<div className='argo-table-list__head'>
39<div className='row'>
40<div className='columns small-2 xxlarge-2'>REASON</div>
41<div className='columns small-4 xxlarge-5'>MESSAGE</div>
42<div className='columns small-2 xxlarge-1'>COUNT</div>
43<div className='columns small-2 xxlarge-2'>FIRST OCCURRED</div>
44<div className='columns small-2 xxlarge-2'>LAST OCCURRED</div>
45</div>
46</div>
47{events.map(event => (
48<div className={`argo-table-list__row events-list__event events-list__event--${event.type}`} key={event.metadata.uid}>
49<div className='row'>
50<div className='columns small-2 xxlarge-2'>{event.reason}</div>
51<div className='columns small-4 xxlarge-5' style={{whiteSpace: 'normal', lineHeight: 'normal'}}>
52{event.message}
53</div>
54<div className='columns small-2 xxlarge-1'>{event.count}</div>
55<div className='columns small-2 xxlarge-2'>{event.firstTimestamp ? getTimeElements(event.firstTimestamp) : getTimeElements(event.eventTime)}</div>
56<div className='columns small-2 xxlarge-2'>{event.lastTimestamp ? getTimeElements(event.lastTimestamp) : getTimeElements(event.eventTime)}</div>
57</div>
58</div>
59))}
60</div>
61)}
62</div>
63);
64};
65