import React, { useCallback, useEffect, useMemo, useState } from "react"; import { Flex, HStack, IconButton, Image, Input, Text, View, VStack, } from "native-base"; import type { ColorType } from "native-base/lib/typescript/components/types"; import type { ImageSourcePropType } from "react-native"; import { CloseMedium } from "../../../../icons/navigation"; import { addThousandSeparator, removeNonNumeric } from "../../../../utils"; export enum TransactionReviewCardType { red = "red", green = "green", blue = "blue", yellow = "yellow", } interface ITransactionReviewCard { variant: keyof typeof TransactionReviewCardType; name: string; accountNumber: string; avatar: ImageSourcePropType; bankIcon: ImageSourcePropType; showNominalField?: boolean; nominalValue?: string | number; onChangeNominal?: (text: string) => void; } export const TransactionReviewCard: React.FC = ( props ) => { const { variant, name, accountNumber, bankIcon, avatar, showNominalField, onChangeNominal, nominalValue, } = props; const [nominalString, setNominalString] = useState(""); const backgroundColor = useMemo(() => { switch (variant) { case TransactionReviewCardType.blue: return "sapphireBlue.Minus3"; case TransactionReviewCardType.red: return "crimsonRed.Minus3"; case TransactionReviewCardType.green: return "jadeGreen.Minus3"; default: return "goldenYellow.Minus3"; } }, [variant]); const onChangeText = useCallback( (text: string) => { const cleanText = removeNonNumeric(text); const value = addThousandSeparator(cleanText); onChangeNominal?.(cleanText); setNominalString(value); }, [onChangeNominal] ); useEffect(() => { onChangeText(`${nominalValue}`); }, [nominalValue, onChangeText]); const onRemoveNominalValue = useCallback(() => { setNominalString(""); onChangeNominal?.(""); }, [onChangeNominal]); return ( {name} {accountNumber} {/* */} {showNominalField && ( Nominal Rp } /> )} ); }; export default TransactionReviewCard;