import {Text} from "react-native"; import React, {ReactNode, useMemo} from "react"; import {CreditCard, Gem, History, Joystick, LucideIcon, RailSymbol} from "lucide-react-native"; import TimeAgo from "./TimeAgo"; import {AMUICard, AMUICardActionProps, AMUICardDetail} from "./AMUICard"; import {AmusementICVendor, ICType} from "../lib/iccard"; import {AMCardData} from "../models/AMCardData"; export interface ICCardProps extends AMUICardActionProps { card: AMCardData, children?: ReactNode, showFullCardNumber?: boolean } export function ICCard(props: ICCardProps) { const displayedCardNumber = useMemo(() => props.showFullCardNumber ? props.card.code.match(/.{1,4}/g)?.join(" ") : `•••• ${props.card.code.substring(props.card.code.length - 4)}`, [props.showFullCardNumber, props.card.code]); return ( {displayedCardNumber} {props.card.lastUsed && ( )} {props.children} ); } function PhysicalICInfo(props: { card: AMCardData | null }) { if (props.card.physicalCardData?.cardType === ICType.Transport) { return ( Transport IC Card ) } if (props.card.physicalCardData?.cardVendor) { const [icon, color]: [LucideIcon, string] = props.card.isLimitedAimeCard ? [Gem, "crimson"] : [Joystick, "gray"]; return ( {React.createElement(icon, {size: 18, color})} {props.card.physicalCardData.isBootlegAmusementCard ? "Bootleg " : null}{ICVendorName(props.card.physicalCardData.cardVendor)} ); } return null; } function ICVendorName(vendor: AmusementICVendor): string { switch (vendor) { case AmusementICVendor.Sega: return "Aime Card"; case AmusementICVendor.Konami: return "e-Amusement Pass"; case AmusementICVendor.BandaiNamcoGames: case AmusementICVendor.BandaiNamcoEntertainment: return "Banapass"; case AmusementICVendor.Nesica: return "NESiCA Card"; default: return "Amusement IC Card"; } }