/ packages / frontend / src / utils / helper.ts
helper.ts
 1  import { formatUnits } from "viem";
 2  
 3  import { KeycardRole, OrderState } from "../types.ts";
 4  
 5  export function multiplyAndFormatUnits(
 6    price: bigint,
 7    quantity: number,
 8    decimals: number,
 9  ) {
10    return formatUnits(BigInt(price) * BigInt(quantity), decimals);
11  }
12  
13  export function removeCachedKeycards() {
14    for (let i = 0; i < localStorage.length; i++) {
15      const key = localStorage.key(i);
16      if (key && key.includes("keycard")) {
17        const keycard = JSON.parse(localStorage.getItem(key)!);
18        if (keycard.role === KeycardRole.NEW_GUEST) {
19          localStorage.removeItem(key);
20          i--;
21        }
22      }
23    }
24  }
25  export function isValidEmail(email: string) {
26    const emailPattern = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
27    return emailPattern.test(email);
28  }
29  export function formatDate(ttl: number) {
30    return new Intl.DateTimeFormat("en-GB", {
31      year: "numeric",
32      month: "numeric",
33      day: "numeric",
34      hour: "2-digit",
35      minute: "2-digit",
36      //manually subtract 24 hours for now. We don't currently have data that tells us the last updated date/time.
37      //TTL is the last point in time you can make a purchase
38    }).format((ttl * 1000) - 86400000);
39  }
40  
41  export function OrderStateFromNumber(num: number) {
42    switch (num) {
43      case OrderState.Unspecified:
44        return `Unspecified`;
45      case OrderState.Open:
46        return `Open`;
47      case OrderState.Canceled:
48        return `Canceled`;
49      case OrderState.Committed:
50        return `Committed`;
51      case OrderState.PaymentChosen:
52        return `Payment Chosen`;
53      case OrderState.Unpaid:
54        return `Unpaid`;
55      case OrderState.Paid:
56        return `Paid`;
57      default:
58        throw new Error(`Invalid order state: ${num}`);
59    }
60  }