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 }