import * as _ from "lodash"; import * as React from "react"; // import { Button, ButtonType } from "../../components/Button"; import { Loading, LoadingType } from "../../components/Loading"; import { Modal, IModalProps } from "../../components/Modal"; import { Pin, PinType } from "../../components/Pin"; import { Reveal, RevealType } from "../../components/Reveal"; // import { Image } from "../../components/Image"; import { Link } from "../../components/Link"; interface IPrintPhotoProps { print: () => Promise; modal?: IModalProps; onClose?: () => void; onPrinted?: (error?: Error) => void; successText: string; } interface IPrintPhotoState { navigate: "loading" | "failed" | "success"; } const defaultPrintPhotoState: IPrintPhotoState = { navigate: "loading", }; export class PrintPhoto extends React.PureComponent { public state: IPrintPhotoState = defaultPrintPhotoState; constructor(props) { super(props); this.state.navigate = "loading"; } public componentDidUpdate(prevProps: IPrintPhotoProps) { // if opening if (!prevProps.modal.isOpen && this.props.modal.isOpen) { this.print() } } public render() { return ( (
{this.renderLoader(this.state.navigate === "loading")} {this.renderSuccess(this.state.navigate === "success")} {this.renderFailed(this.state.navigate === "failed")}
) ]}>
); } private renderLoader = (render: boolean) => { return ( ); } private renderSuccess = (active: boolean) => { return (
Printing completed
{this.props.successText}
); } private renderFailed = (active: boolean) => { return (
Apologies
Printing is currently unavailable. Please check back later.
); } private print = async () => { if (this.state.navigate !== "loading") { this.setState({ navigate: "loading", }); } try { await this.props.print(); this.props.onPrinted(); this.setState({ navigate: "success", }); } catch (e) { this.props.onPrinted(e); this.setState({ navigate: "failed", }); } } }