import { ChainUtils, RelationTypeEnum } from '@bit-ui-libs/common'; import { useQuery } from '@tanstack/react-query'; import moment from 'moment'; import { useCallback } from 'react'; import { Image, StyleProp, TextStyle, TouchableOpacity, View, ViewStyle } from 'react-native'; import { Icon, Loading, Text } from '../../../components'; import { tw } from '../../../core'; import { useChainService, useServicesStore } from '../../../stores'; import { useDeleteRefVdt } from '../hooks'; interface TokenImagesProps { eventId: string; isHeader?: boolean; showRemoveButton?: boolean; containerStyle?: StyleProp; headerStyle?: StyleProp; onPreview?: (eventId: string, index: number) => void; } interface VdtItem { tokenImage?: string; name: string; eventDate: string; eventId: string; qrCodeRefId: string; id: string; } export function TokenImages(props: TokenImagesProps) { const { eventId, showRemoveButton, containerStyle, isHeader, onPreview, headerStyle } = props; const chainService = useChainService(); const service = useServicesStore((s) => s); const { data: tokens, isLoading, refetch, } = useQuery({ queryKey: ['token-images-data', eventId], queryFn: async () => { const asset = await chainService.getDetailsByEvent(eventId); const vdtsData: VdtItem[] = []; const referenceVDT = asset.referenceVDT.filter((i) => i.relationType === RelationTypeEnum.ChildVdt); if (referenceVDT.length > 0) { for (const item of referenceVDT) { const qrChainService = service.chainToken[item.vdtType]; const asset = await qrChainService.assetByQr(item.qrCodeRefId); const tokenImage = asset.attachments?.[0]?.thumbUrl; const id = item.assetId ?? item.serviceId ?? ''; vdtsData.push({ tokenImage, name: asset.data ? ChainUtils.getName(asset.data) : '-', eventDate: moment(asset.eventDate).format('MM-DD-YYYY'), eventId: asset.id, qrCodeRefId: item.qrCodeRefId, id, }); } } return Promise.all(vdtsData); }, }); const { deleteRefVdt } = useDeleteRefVdt({ onSuccess: refetch }); const renderItem = useCallback( (item: VdtItem, i: number) => ( {item.name} {item.eventDate} onPreview?.(item.eventId, i)}> {showRemoveButton ? ( deleteRefVdt({ id: item.id, qrCodeRefId: item.qrCodeRefId })}> ) : null} ), [] ); const isHeaderShow = tokens && isHeader; return ( {!isLoading ? ( tokens ? ( {isHeaderShow ? Attachments : null} {tokens?.map(renderItem)} {tokens.length === 0 ? No reference VDTs attach : null} ) : undefined ) : ( Loading Reference VDTs... )} ); }