Improved the Events modal

This commit is contained in:
Shay Nehmad 2019-09-11 17:19:23 +03:00
parent 68383f069b
commit 4d24d8432e
5 changed files with 47 additions and 27 deletions

View File

@ -104,6 +104,7 @@
"react-tooltip-lite": "^1.9.1", "react-tooltip-lite": "^1.9.1",
"redux": "^4.0.0", "redux": "^4.0.0",
"sass-loader": "^7.1.0", "sass-loader": "^7.1.0",
"sha3": "^2.0.0" "sha3": "^2.0.0",
"pluralize": "latest"
} }
} }

View File

@ -32,13 +32,8 @@ export default class EventsButton extends Component {
} }
createEventsAmountBadge() { createEventsAmountBadge() {
let eventsAmountBadge; const eventsAmountBadgeContent = this.props.events.length > 9 ? "9+" : this.props.events.length;
if (this.props.events.length > 9) { return <Badge>{eventsAmountBadgeContent}</Badge>;
eventsAmountBadge = <Badge>9+</Badge>;
} else {
eventsAmountBadge = <Badge>{this.props.events.length}</Badge>;
}
return eventsAmountBadge;
} }
} }

View File

@ -1,9 +1,11 @@
import React, {Component} from "react"; import React, {Component} from "react";
import {Modal} from "react-bootstrap"; import {Badge, Modal} from "react-bootstrap";
import EventsTimeline from "./EventsTimeline"; import EventsTimeline from "./EventsTimeline";
import * as PropTypes from "prop-types"; import * as PropTypes from "prop-types";
import ExportEventsButton from "./ExportEventsButton";
import saveJsonToFile from "../../utils/SaveJsonToFile"; import saveJsonToFile from "../../utils/SaveJsonToFile";
import EventsModalButtons from "./EventsModalButtons";
import Pluralize from 'pluralize'
import {statusToLabelType} from "./StatusLabel";
export default class EventsModal extends Component { export default class EventsModal extends Component {
constructor(props) { constructor(props) {
@ -15,28 +17,31 @@ export default class EventsModal extends Component {
<div> <div>
<Modal show={this.props.showEvents} onHide={() => this.props.hideCallback()}> <Modal show={this.props.showEvents} onHide={() => this.props.hideCallback()}>
<Modal.Body> <Modal.Body>
<h2> <h3>
<div className="text-center">Events</div> <div className="text-center">Events</div>
</h2> </h3>
<hr />
<p>
There {Pluralize('is', this.props.events.length)} {<div className={"label label-primary"}>{this.props.events.length}</div>} {Pluralize('event', this.props.events.length)} associated with this finding.
</p>
{this.props.events.length > 5 ? this.renderButtons() : null}
<EventsTimeline events={this.props.events}/> <EventsTimeline events={this.props.events}/>
{this.renderButtons()}
<div className="text-center">
<button type="button" className="btn btn-success btn-lg" style={{margin: '5px'}}
onClick={() => this.props.hideCallback()}>
Close
</button>
<ExportEventsButton onClick={() => {
const dataToSave = this.props.events;
const filename = this.props.exportFilename;
saveJsonToFile(dataToSave, filename);
}}/>
</div>
</Modal.Body> </Modal.Body>
</Modal> </Modal>
</div> </div>
); );
} }
renderButtons() {
return <EventsModalButtons
onClickClose={() => this.props.hideCallback()}
onClickExport={() => {
const dataToSave = this.props.events;
const filename = this.props.exportFilename;
saveJsonToFile(dataToSave, filename);
}}/>;
}
} }
EventsModal.propTypes = { EventsModal.propTypes = {

View File

@ -0,0 +1,20 @@
import React, {Component} from "react";
import ExportEventsButton from "./ExportEventsButton";
import * as PropTypes from "prop-types";
export default class EventsModalButtons extends Component {
render() {
return <div className="text-center">
<button type="button" className="btn btn-success btn-lg" style={{margin: '5px'}}
onClick={this.props.onClickClose}>
Close
</button>
<ExportEventsButton onClick={this.props.onClickExport}/>
</div>
}
}
EventsModalButtons.propTypes = {
onClickClose: PropTypes.func,
onClickExport: PropTypes.func
};

View File

@ -14,7 +14,7 @@ export default class EventsTimeline extends Component {
render() { render() {
return ( return (
<div> <div>
<Timeline> <Timeline style={{fontSize: '100%'}}>
{ {
this.props.events.map((event, index) => { this.props.events.map((event, index) => {
const event_time = new Date(event.timestamp['$date']).toString(); const event_time = new Date(event.timestamp['$date']).toString();
@ -22,7 +22,6 @@ export default class EventsTimeline extends Component {
key={index} key={index}
createdAt={event_time} createdAt={event_time}
title={event.title} title={event.title}
icon={<img src={eventTypeToIcon[event.event_type]} alt="icon" style={{width: '24px'}} />}> icon={<img src={eventTypeToIcon[event.event_type]} alt="icon" style={{width: '24px'}} />}>
{event.message} {event.message}
</TimelineEvent>) </TimelineEvent>)