import { Box, Typography, Container, Button, TextField, Collapse, Alert } from '@mui/material' import { GetServerSideProps, InferGetServerSidePropsType } from 'next' import { EventHandler, FormEvent, FormEventHandler, useEffect, useState } from 'react' import { checkAuthenticatedClient, redirectToLogin, sni } from 'solar-js-sdk' import ErrorIcon from '@mui/icons-material/Error' import PriceCheckIcon from '@mui/icons-material/PriceCheck' type SnOrder = any export const getServerSideProps = (async (context) => { const id = context.params!.id try { const { data: order } = await sni.get('/cgi/wa/orders/' + id) return { props: { order, title: `Order #${order.id}` } } } catch (err) { console.error(err) return { notFound: true, } } }) satisfies GetServerSideProps<{ order: SnOrder }> export default function Post({ order }: InferGetServerSidePropsType) { useEffect(() => { if (!checkAuthenticatedClient()) redirectToLogin() }, []) const [error, setError] = useState(null) const [password, setPassword] = useState('') const [busy, setBusy] = useState(false) const [paid, setPaid] = useState(false) const [canceled, setCanceled] = useState(false) useEffect(() => { if (order?.status === 1) { setPaid(true) } else if (order?.status === 2) { setCanceled(true) } }, [order]) async function confirmPayment() { try { setBusy(true) await sni.post('/cgi/wa/orders/' + order.id + '/pay', { wallet_password: password, }) setPaid(true) } catch (err: any) { setError(err.toString()) } finally { setBusy(false) } } return ( { evt.preventDefault() confirmPayment() }} > Order #{order.id.toString().padStart(8, '0')} {order.remark} {order.amount} SRC } severity="error"> {error} {paid || canceled ? ( canceled ? ( Canceled, you are not able to pay this order any more ) : ( Paid, you can return to the seller now ) ) : ( setPassword((evt.target as HTMLInputElement).value)} /> )} Powered by HyperNet.Wallet ) }