<ScrollView showsHorizontalScrollIndicator={false} contentContainerStyle={{ width: '100%' }}>
{filterHistory === {} ? ( purchasedCards.length > 0 && purchasedCards.map( ( cardDetail, cardDetailIndex ) => {
let dail = cardDetail.categoryId === 2 ? 'Dail *200*xxxxxxxxxxxxx#' : cardDetail.categoryId === 1 ? 'Dail *14*xxxxxxxxxxxxxx#' : 'Redeem the code'
return (
<View style={styles.afterPurchaseHeaderCard} key={cardDetailIndex} >
<Text style={styles.afterPurchaseHeaderCardDate}>{moment( cardDetail.updatedDate ).format( 'DD/MM/YY hh:mm:ss' )}</Text>
<View style={styles.afterPurchaseHeaderCardDetail1View}>
<Text style={styles.afterPurchaseHeaderCardDetail1ViewText}>{cardDetail.cardName}</Text>
<MaterialCommunityIcon style={styles.homeIcon} name={'arrow-right-thick'} color={c.secondaryColor} size={26} />
<Text style={styles.afterPurchaseHeaderCardDetail1ViewText}>{cardDetail.price}</Text>
</View>
<View style={styles.afterPurchaseHeaderCardDetail2View} ref={( ref ) => ( viewRef.current[ `${cardDetailIndex}` ] = ref )}>
<View style={styles.afterPurchaseHeaderCardDetail2VInfo}>
<Text style={styles.afterPurchaseHeaderCardDetail2VInfoTextName}>Transaction ID</Text>
<Text style={styles.afterPurchaseHeaderCardDetail2VInfoTextValue}>{cardDetail.transactionId + 1000000}</Text>
</View>
<View style={styles.afterPurchaseHeaderCardDetail2VInfo}>
<Text style={styles.afterPurchaseHeaderCardDetail2VInfoTextName}>Serial Number</Text>
<Text style={styles.afterPurchaseHeaderCardDetail2VInfoTextValue}>{cardDetail.serial}</Text>
</View>
<View style={styles.afterPurchaseHeaderCardDetail2VInfo}>
<Text style={styles.afterPurchaseHeaderCardDetail2VInfoTextName}>Secret Code</Text>
<Text style={styles.afterPurchaseHeaderCardDetail2VInfoTextValue}>{cardDetail.code}</Text>
</View>
<View style={styles.afterPurchaseHeaderCardDetail2VInfo}>
<Text style={styles.afterPurchaseHeaderCardDetail2VInfoTextName}>Expiry Date</Text>
<Text style={styles.afterPurchaseHeaderCardDetail2VInfoTextValue}>{cardDetail.expiryDate}</Text>
</View>
</View>
<View style={styles.afterPurchaseHeaderCardBtns}>
<TouchableOpacity style={styles.afterPurchaseHeaderCardBtn} onPress={() => Print( cardDetail.cardName, cardDetail.transactionId, cardDetail.updatedDate, cardDetail.expiryDate, cardDetail.serial, cardDetail.code, dail )} >
<MaterialCommunityIcon style={styles.homeIcon} name={'printer'} color={c.secondaryColor} size={26} />
</TouchableOpacity>
<TouchableOpacity style={styles.afterPurchaseHeaderCardBtn} onPress={() => {
setShowToastAlert( true );
setToastAlertStatus( true );
setToastAlertMessage( 'Secret Code Copied' );
Clipboard.setString(
'Transation Id: ' + ( cardDetail.transactionId + 1000000 ) + '\n' +
"-----------------------------" + '\n' +
'Name: ' + cardDetail.cardName + '\n' +
"-----------------------------" + '\n' +
'Serial Nb: ' + cardDetail.serial + '\n' +
"-----------------------------" + '\n' +
'Code: ' + cardDetail.code + '\n' +
"-----------------------------" + '\n' +
'Expiry Date: ' + cardDetail.expiryDate );
}} >
<MaterialCommunityIcon style={styles.homeIcon} name={'content-copy'} color={c.secondaryColor} size={26} />
</TouchableOpacity>
<TouchableOpacity style={styles.afterPurchaseHeaderCardBtn} onPress={() => shareViewAsImage( `${cardDetailIndex}` )} >
<MaterialCommunityIcon style={styles.homeIcon} name={'share'} color={c.secondaryColor} size={26} />
</TouchableOpacity>
</View>
</View>
)
} ) ) : ( filterHistory.length > 0 && filterHistory.map( ( cardDetail, cardDetailIndex ) => {
let dail = cardDetail.categoryId === 2 ? 'Dail *200*xxxxxxxxxxxxx#' : cardDetail.categoryId === 1 ? 'Dail *14*xxxxxxxxxxxxxx#' : 'Redeem the code'
return (
<View style={styles.afterPurchaseHeaderCard} key={cardDetailIndex} >
<Text style={styles.afterPurchaseHeaderCardDate}>{moment( cardDetail.updatedDate ).format( 'DD/MM/YY hh:mm:ss' )}</Text>
<View style={styles.afterPurchaseHeaderCardDetail1View}>
<Text style={styles.afterPurchaseHeaderCardDetail1ViewText}>{cardDetail.cardName}</Text>
<MaterialCommunityIcon style={styles.homeIcon} name={'arrow-right-thick'} color={c.secondaryColor} size={26} />
<Text style={styles.afterPurchaseHeaderCardDetail1ViewText}>{cardDetail.price}</Text>
</View>
<View style={styles.afterPurchaseHeaderCardDetail2View} ref={( ref ) => ( viewRef.current[ `${cardDetailIndex}` ] = ref )} >
<View style={styles.afterPurchaseHeaderCardDetail2VInfo}>
<Text style={styles.afterPurchaseHeaderCardDetail2VInfoTextName}>Transaction ID</Text>
<Text style={styles.afterPurchaseHeaderCardDetail2VInfoTextValue}>{cardDetail.transactionId + 1000000}</Text>
</View>
<View style={styles.afterPurchaseHeaderCardDetail2VInfo}>
<Text style={styles.afterPurchaseHeaderCardDetail2VInfoTextName}>Serial Number</Text>
<Text style={styles.afterPurchaseHeaderCardDetail2VInfoTextValue}>{cardDetail.serial}</Text>
</View>
<View style={styles.afterPurchaseHeaderCardDetail2VInfo}>
<Text style={styles.afterPurchaseHeaderCardDetail2VInfoTextName}>Secret Code</Text>
<Text style={styles.afterPurchaseHeaderCardDetail2VInfoTextValue}>{cardDetail.code}</Text>
</View>
<View style={styles.afterPurchaseHeaderCardDetail2VInfo}>
<Text style={styles.afterPurchaseHeaderCardDetail2VInfoTextName}>Expiry Date</Text>
<Text style={styles.afterPurchaseHeaderCardDetail2VInfoTextValue}>{cardDetail.expiryDate}</Text>
</View>
</View>
<View style={styles.afterPurchaseHeaderCardBtns}>
<TouchableOpacity style={styles.afterPurchaseHeaderCardBtn} onPress={() => Print( cardDetail.cardName, cardDetail.transactionId, cardDetail.updatedDate, cardDetail.expiryDate, cardDetail.serial, cardDetail.code, dail )} >
<MaterialCommunityIcon style={styles.homeIcon} name={'printer'} color={c.secondaryColor} size={26} />
</TouchableOpacity>
<TouchableOpacity style={styles.afterPurchaseHeaderCardBtn} onPress={() => {
setShowToastAlert( true );
setToastAlertStatus( true );
setToastAlertMessage( 'Secret Code Copied' );
Clipboard.setString(
'Transation Id: ' + ( cardDetail.transactionId + 1000000 ) + '\n' +
"-----------------------------" + '\n' +
'Name: ' + cardDetail.cardName + '\n' +
"-----------------------------" + '\n' +
'Serial Nb: ' + cardDetail.serial + '\n' +
"-----------------------------" + '\n' +
'Code: ' + cardDetail.code + '\n' +
"-----------------------------" + '\n' +
'Expiry Date: ' + cardDetail.expiryDate );
}} >
<MaterialCommunityIcon style={styles.homeIcon} name={'content-copy'} color={c.secondaryColor} size={26} />
</TouchableOpacity>
<TouchableOpacity style={styles.afterPurchaseHeaderCardBtn} onPress={() => shareViewAsImage( `${cardDetailIndex}` )} >
<MaterialCommunityIcon style={styles.homeIcon} name={'share'} color={c.secondaryColor} size={26} />
</TouchableOpacity>
</View>
</View>
const viewRef = useRef( {} );
const shareViewAsImage = async ( id ) => {
try {
// Capture the view and get the URI
const uri = await captureRef( viewRef.current[ id ], {
format: 'jpg',
quality: 1,
} );
// Define the cropping coordinates, width, and height
// Now you can proceed to share the cropped image
const shareOptions = {
title: 'Share via',
url: uri, // Use the croppedImage URI for sharing
social: Share.Social.WHATSAPP,
};
await Share.shareSingle( shareOptions );
} catch ( error ) {
console.log( 'Error sharing:', error );
setShowToastAlert( true );
setToastAlertStatus( false );
setToastAlertMessage( 'Error with sharing' );
}
};
I tried using the function with ref={( ref ) => ( viewRef.current[ ${cardDetailIndex}
] = ref )} used at the View with style name 'afterPurchaseHeaderCard' and it worked fine giving me the whole view as a picture to save but when I go to use it inside in the View with style name afterPurchaseHeaderCardDetail2View it gives me this error [Error: Failed to capture view snapshot].
Anybody can help me solve this issue?