import React, { useEffect, useState } from 'react'; import { View, Text, StyleSheet, Image, TouchableOpacity, Modal, Share } from 'react-native'; import QRCode from 'react-native-qrcode-svg'; import { Ionicons } from '@expo/vector-icons'; // Define Props for ScannedDataBox component interface ScannedDataBoxProps { data: string; dataType: string; clearScanData: () => void; } // Define ScanResult interface interface ScanResult { secureConnection: boolean; virusTotalCheck: boolean; redirects: number; } const ScannedDataBox: React.FC = ({ data, dataType, clearScanData }) => { const [scanResult, setScanResult] = useState(null); const [isModalVisible, setIsModalVisible] = useState(false); console.log("ScannedDataBox -> Data", data); console.log("DataType", dataType); // Set scan result based on data useEffect(() => { // Assuming scanResult is directly related to data setScanResult({ secureConnection: data.includes('https'), // Example logic virusTotalCheck: !data.includes('danger'), // Example logic redirects: data.includes('redirect') ? 1 : 0, // Example logic }); console.log("Scan result set:", scanResult); }, [data]); // Determine the result text based on scan result const getResultText = () => { if (!scanResult) { return 'UNKNOWN'; } if (!scanResult.secureConnection && !scanResult.virusTotalCheck) { return 'DANGEROUS'; } else if (scanResult.redirects > 0) { return 'WARNING'; } else { return 'SAFE'; } }; // Determine the result color based on result text const getResultColor = () => { const result = getResultText(); if (result === 'DANGEROUS') { return '#ff0000'; // Red } else if (result === 'WARNING') { return '#ffa500'; // Orange } else if (result === 'SAFE') { return '#44c167'; // Green } else { return '#000000'; // Black for unknown } }; // Handle sharing the data const handleShare = async () => { try { await Share.share({ message: data, }); console.log('Data shared:', data); } catch (error) { console.error('Error sharing the data:', error); } }; return ( {/* Close button */} {/* Display scanned data */} {data} {new Date().toLocaleString()} Result: {getResultText()} {/* Display data type */} Type: {dataType} {'\n'} {/* Display scan checks */} Checks Secure Connection: {scanResult?.secureConnection ? '✔️' : '✘'} Virus Total Check: {scanResult?.virusTotalCheck ? '✔️' : '✘'} Redirects: {scanResult ? scanResult.redirects : 'N/A'} {/* Action buttons */} Share Open {/* More information button */} More Information setIsModalVisible(true)}> Security Headers {/* Modal for security headers */} setIsModalVisible(false)} > Security Headers Name: Strict-Transport-Security Value: max-age=31536000; includeSubDomains Name: X-Frame-Options Value: DENY Name: X-Content-Type-Options Value: nosniff Name: Content-Security-Policy Value: default-src 'self' setIsModalVisible(false)}> Close ); }; const styles = StyleSheet.create({ row: { flexDirection: 'row', alignItems: 'center', }, scan_icon: { width: 37.5, height: 37.5, marginRight: 6, }, payload: { fontSize: 15, color: '#000', flex: 1, // Allow text to use available space }, dataBox: { padding: 15, backgroundColor: '#ffe6f0', borderRadius: 7.5, shadowColor: '#000', shadowOffset: { width: 0, height: 1.5 }, shadowOpacity: 0.15, shadowRadius: 3.75, elevation: 2.25, zIndex: 1, }, qrContainer: { alignItems: 'center', marginVertical: 7.5, }, blankLine: { height: 15, }, divider: { height: 0.75, backgroundColor: '#ddd', marginVertical: 7.5, alignSelf: 'stretch', }, timestampText: { fontSize: 9, color: '#000', marginBottom: 7.5, }, resultText: { fontSize: 12, marginBottom: 7.5, textAlign: 'center', }, typeText: { fontSize: 12, color: '#000', marginBottom: 7.5, }, checksText: { fontSize: 12, color: '#000', marginBottom: 3.75, }, iconContainer: { flexDirection: 'row', justifyContent: 'space-between', marginTop: 7.5, }, iconButton: { flexDirection: 'column', alignItems: 'center', flex: 1, }, iconText: { color: '#2196F3', marginTop: 3.75, textAlign: 'center', fontSize: 12, }, moreInfoText: { fontSize: 13.5, fontWeight: 'bold', color: '#000', marginVertical: 7.5, }, moreInfoButton: { flexDirection: 'row', alignItems: 'center', paddingVertical: 7.5, paddingHorizontal: 11.25, backgroundColor: '#ffe6f0', borderRadius: 7.5, marginTop: 7.5, }, moreInfoButtonText: { flex: 1, fontSize: 12, color: '#000', marginLeft: 7.5, }, closeButton: { position: 'absolute', top: 7.5, right: 7.5, }, modalContainer: { flex: 1, justifyContent: 'center', alignItems: 'center', backgroundColor: 'rgba(0, 0, 0, 0.5)', }, modalContent: { width: '80%', backgroundColor: 'white', borderRadius: 7.5, padding: 15, alignItems: 'center', }, modalTitle: { fontSize: 15, fontWeight: 'bold', marginBottom: 7.5, }, modalText: { fontSize: 12, marginBottom: 3.75, textAlign: 'left', width: '100%', }, closeModalButton: { marginTop: 15, paddingVertical: 7.5, paddingHorizontal: 15, backgroundColor: '#ff69b4', borderRadius: 3.75, }, closeModalButtonText: { fontSize: 12, color: '#fff', }, }); export default ScannedDataBox;