import Card from "./Card"; import TextInput from "./forms/TextInput"; import styled from "styled-components"; import { useState } from "react"; import { voucherLogin } from "../api/login"; import { APIError } from "../api/client"; import { setVoucherToken } from "../slices/authorization"; import { useSelector, useDispatch } from "react-redux"; import { RootState } from "../store"; import { useNavigate } from "react-router-dom"; import Button from "./forms/Button"; import { decodeJWT, isJWTExpired, maybeRefreshTask } from "../api/jwt"; const VoucherValidateContainer = styled.div` margin-bottom: 1rem; `; const VoucherValidator = () => { const [voucherCode, setVoucherCode] = useState(""); const [error, setError] = useState(null); const dispatch = useDispatch(); const navigate = useNavigate(); const voucherToken = useSelector((state: RootState) => state.authorization.voucherToken); let expired = false; if (voucherToken) { const parsed = decodeJWT(voucherToken); expired = isJWTExpired(parsed); } const validate = async () => { try { const voucherClaim = await voucherLogin(voucherCode); dispatch(setVoucherToken(voucherClaim.jwt)); setError(null); maybeRefreshTask(); } catch (e) { if (e instanceof APIError) { if (e.data?.detail) { setError(e.data.detail); } else { setError(e.message); } } else { setError("An unknown error occurred."); } } }; return (

Enter your voucher code to view information.

{(voucherToken && !expired) && ( <>

Voucher successfully validated!

)} {expired && (

Session expired

Your voucher session has expired. Please enter your voucher again.

)} {error && (

Error

{error}

)}
); }; export default VoucherValidator;