import * as _ from "lodash"; import * as React from "react"; import { Button, ButtonSize } 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 { PaymentForm } from "../../components/PaymentForm"; import { Link } from "../../components/Link"; import { Form } from "../../components/Form"; interface IPurchasePackageProps { purchaseWithToken: (token: string, email: string) => Promise; hasPurchasedPackage: (email: string) => Promise; image: string; modal?: IModalProps; onClose?: () => void; onPurchased?: (error?: Error) => void; purchaseText: string; } interface IPurchasePackageState { navigate: "payment" | "email" | "loading" | "failed" | "success"; /** * Has the entered email already purchased the package. Null * if unchecked. */ hasPurchasedPackage: null | "checking" | boolean; email?: string, } const defaultPurchasePackageState: IPurchasePackageState = { navigate: "payment", hasPurchasedPackage: null, email: null, }; export class PurchasePackage extends React.PureComponent { public state: IPurchasePackageState = defaultPurchasePackageState; public render() { return ( (
{this.renderLoader(this.state.navigate === "loading")} {this.renderSuccess(this.state.navigate === "success")} {this.renderFailed(this.state.navigate === "failed")} {this.renderPayment(this.state.navigate === "payment")} {this.renderEmail(this.state.navigate === "email")}
) ]}>
); } private renderPayment = (render: boolean) => { return (

Access these photos?

{this.state.hasPurchasedPackage === false ? "That email does not have access to these photos." : "Enter your payment information to get permanent access to view and download."}

{ this.purchase(token, email); }} {...this.state.email && { input: { placeholder: this.state.email, } }} /> { this.setState({ navigate: "email", }); return false; }} />
); } private renderLoader = (render: boolean) => { return ( ); } private renderSuccess = (active: boolean) => { return (
Success!
Feel free to browse your photos. You can access them anytime by returning to this URL and entering your email.
); } private renderFailed = (active: boolean) => { return (
{this.state.hasPurchasedPackage === false ? "That email does not have access to these photos." : "Payment failed!"}