frontend/app/Lightbox/LightboxAvailability.tsx (49 lines of code) (raw):
import React, {useEffect, useState} from "react";
import moment, {Moment} from "moment";
import {makeStyles, Typography} from "@material-ui/core";
import TimestampFormatter from "../common/TimestampFormatter";
import {RestoreStatus} from "../types";
interface LightboxAvailabilityProps {
maybeAvailableUntil?: string;
restoreStatus: RestoreStatus;
}
const useStyles = makeStyles({
runOnText: {
display: "inline"
},
});
const LightboxAvailability:React.FC<LightboxAvailabilityProps> = (props) => {
const [expiryDate, setExpiryDate] = useState<Moment|undefined>();
const classes = useStyles();
useEffect(()=>{
if(props.maybeAvailableUntil) {
try {
const parsedDate = moment(props.maybeAvailableUntil);
setExpiryDate(parsedDate);
} catch(err) {
console.error("Could not parse timestring ", props.maybeAvailableUntil, ": ", err);
}
} else {
setExpiryDate(undefined);
}
}, [props.maybeAvailableUntil]);
if(expiryDate) {
if(expiryDate.isBefore(moment())) {
return <Typography className={classes.runOnText}>Expired {expiryDate.fromNow(false)}</Typography>
} else {
return <Typography className={classes.runOnText}>Available for {expiryDate.fromNow(true)}</Typography>
}
} else {
switch(props.restoreStatus) {
case "RS_UNNEEDED":
return <Typography className={classes.runOnText}>Available indefinitely</Typography>
case "RS_ERROR":
return <Typography className={classes.runOnText}>Not available</Typography>
case "RS_EXPIRED":
return <Typography className={classes.runOnText}>Returned to archive</Typography>
default:
return <></>
}
}
}
export default LightboxAvailability;