frontend/app/Lightbox/RestoreStatusComponent.jsx (66 lines of code) (raw):
import React from 'react';
import PropTypes from 'prop-types';
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'
import TimestampFormatter from "../common/TimestampFormatter";
import axios from 'axios';
import {
AccessTime,
CheckCircle,
DirectionsRun,
RemoveShoppingCart,
RemoveShoppingCartRounded,
WarningRounded
} from "@material-ui/icons";
import {Tooltip} from "@material-ui/core";
class RestoreStatusComponent extends React.Component {
static propTypes = {
status: PropTypes.string.isRequired,
startTime: PropTypes.string.isRequired,
completed: PropTypes.string.isRequired,
expires: PropTypes.string.isRequired,
hidden: PropTypes.bool
};
/**
* val RS_UNNEEDED,RS_ALREADY,RS_PENDING,RS_UNDERWAY,RS_SUCCESS,RS_ERROR,RS_EXPIRED=Value
*/
statusIcon(){
switch(this.props.status){
case "RS_PENDING":
return <Tooltip title="Pending"><AccessTime/></Tooltip>;
case "RS_UNDERWAY":
return <Tooltip title="Running"><DirectionsRun style={{color: "blue"}}/></Tooltip>;
case "RS_SUCCESS":
case "RS_ALREADY":
return <Tooltip title="Available"><CheckCircle style={{color:"green"}}/></Tooltip>;
case "RS_ERROR":
return <Tooltip title="Error"><WarningRounded style={{color:"red"}}/></Tooltip>;
case "RS_EXPIRED":
return <Tooltip title="Expired"><RemoveShoppingCartRounded/></Tooltip>;
default:
return <span data-tip={this.props.status}>{this.props.status}</span>;
}
}
timeDisplay(){
switch(this.props.status){
case "RS_PENDING":
case "RS_UNDERWAY":
return <TimestampFormatter relative={true} value={this.props.startTime}/>;
case "RS_SUCCESS":
case "RS_ALREADY":
return <TimestampFormatter relative={true} value={this.props.completed}/>;
case "RS_ERROR":
return <TimestampFormatter relative={true} value={this.props.completed ? this.props.completed : this.props.startTime}/>;
default:
return <span/>;
}
}
isCompleted(){
return this.props.status==="RS_SUCCESS" || this.props.status==="RS_ALREADY"
}
render(){
return <div style={{display: this.props.hidden ? "none" : "block"}} className="centered">
<p>{this.statusIcon()} since {this.timeDisplay()}</p>
</div>
}
}
export default RestoreStatusComponent;