import {DateTime} from 'luxon' import Link from 'next/link' import styles from './style.module.css' CheckoutComplete.getInitialProps = async function({ctx: {query: {session_id}, axios}}){ const {data: orders} = await axios.get('/api/orders') const mostRecentOrder = orders.sort(sortOrders)[0] return {order: mostRecentOrder} } export default function CheckoutComplete({order}){ const items = order.transactions.map(transaction => transaction.cart.items).flat() const latestTransaction = order.transactions.sort(sortTransactions)[0] let email = null const stripePayment = latestTransaction.payments.find(p => p.stripe !== null) if(stripePayment) email = stripePayment.stripe.receipt_email return ( <>

Order Complete

The following items:

{items.map(({uuid, count, item}) => ( ))}
{count}x {item.name}

Will be shipped to:

{order.address.name}

{order.address.street1}

{order.address.street2}

{order.address.city}, {order.address.state}, {order.address.zip}

{ email ? ( <>

Orders typically are shipped within 3-5 business days of purchase. You will receive an email with a tracking number when your order ships.

Your tracking number will be sent to: {email}

If you do not receive an email within 1 week, please contact us. In any correspondence please be sure to include your order number (#{order.number}).

) : (

Orders typically are shipped within 3-5 business days of purchase.

) } ) } function parsePaymentTime({payments}){ if(payments.length < 1) return null; let lastPaymentTime = DateTime.fromISO(payments[0].time) for(const payment of payments) { const current = DateTime.fromISO(payment.time) if(current.diff(lastPaymentTime).as('seconds') > 0) lastPaymentTime = current; } return lastPaymentTime } function sortTransactions(a,b){ const timeA = parsePaymentTime(a) const timeB = parsePaymentTime(b) return timeB.diff(timeA).as('seconds') } function sortOrders(a,b){ const timePaidA = parsePaymentTime(a.transactions.sort(sortTransactions)[0]) const timePaidB = parsePaymentTime(b.transactions.sort(sortTransactions)[0]) return timePaidB.diff(timePaidA).as('seconds') } function formatMoney(money){ if (money === undefined || money === null) return null; return '$' + (money / 100).toFixed(2) }