From 19a1230781e5e69fcd1e2b0112a1a49d00de9078 Mon Sep 17 00:00:00 2001 From: Isky Date: Sun, 7 Jul 2024 16:38:44 +0800 Subject: [PATCH] Restored comments, and added share feature --- components/ScannedDataBox.tsx | 35 ++++++++++++++++++++++++++-- screens/QRScannerScreen.tsx | 43 ++++++++++++++++++++++++++--------- 2 files changed, 65 insertions(+), 13 deletions(-) diff --git a/components/ScannedDataBox.tsx b/components/ScannedDataBox.tsx index 28ad862..07ada36 100644 --- a/components/ScannedDataBox.tsx +++ b/components/ScannedDataBox.tsx @@ -1,14 +1,16 @@ import React, { useEffect, useState } from 'react'; -import { View, Text, StyleSheet, Image, TouchableOpacity, Modal } from 'react-native'; +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; @@ -21,6 +23,7 @@ const ScannedDataBox: React.FC = ({ data, dataType, clearSc console.log("ScannedDataBox -> Data", data); console.log("DataType", dataType); + // Set scan result based on data useEffect(() => { // Assuming scanResult is directly related to data setScanResult({ @@ -28,8 +31,10 @@ const ScannedDataBox: React.FC = ({ data, dataType, clearSc 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'; @@ -43,6 +48,7 @@ const ScannedDataBox: React.FC = ({ data, dataType, clearSc } }; + // Determine the result color based on result text const getResultColor = () => { const result = getResultText(); if (result === 'DANGEROUS') { @@ -56,11 +62,26 @@ const ScannedDataBox: React.FC = ({ data, dataType, clearSc } }; + // 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} @@ -74,14 +95,20 @@ const ScannedDataBox: React.FC = ({ data, dataType, clearSc + + {/* 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 @@ -91,12 +118,16 @@ const ScannedDataBox: React.FC = ({ data, dataType, clearSc + + {/* More information button */} More Information setIsModalVisible(true)}> Security Headers + + {/* Modal for security headers */} { +interface QRScannerScreenProps { + clearScanData: () => void; +} + +// Main Function +const QRScannerScreen: React.FC = ({ clearScanData }) => { const navigation = useNavigation(); // call Navigation bar const [showSplash, setShowSplash] = useState(true); // call splash screen const dispatch = useDispatch(); @@ -20,45 +25,52 @@ const QRScannerScreen: React.FC = () => { const [dataType, setDataType] = useState(''); // State for data type const [enableTorch, setEnableTorch] = useState(false); // State for torch + // Request Camera Permission and initialize the app useEffect(() => { const initializeApp = async () => { const { status } = await Camera.requestCameraPermissionsAsync(); setHasPermission(status === 'granted'); setShowSplash(false); + console.log("Camera permissions initialized"); }; initializeApp(); }, []); + // Clear Scan Data const clearScanDataInternal = () => { setScannedData(''); setScanned(false); setDataType(''); + console.log("Scan data cleared"); }; + // Handle QR Code Payload const handlePayload = async (payload: string) => { setScanned(true); - console.log("Scanning Competed payload is :", payload); + console.log("Scanning Completed. Payload is:", payload); const type = await sendToAPIServer(payload); const qrCode = { data: payload, type, - bookmarked: false, scanResult: { secureConnection: true, // Placeholder, replace with actual logic virusTotalCheck: true, // Placeholder, replace with actual logic redirects: 0 // Placeholder, replace with actual logic - } + }, + bookmarked: false, // Add the bookmarked property }; setScannedData(payload); - console.log("handlePayload -> payload", payload); - console.log("handlePayload -> type", type); + console.log("Payload received:", payload); + console.log("Type received from server:", type); setDataType(type); - dispatch(addQRCode(qrCode)); + dispatch(addQRCode(qrCode)); // Dispatch action to save QR code data + console.log("QR code data added to history"); }; + // Send QR Code Data to Backend Server const sendToAPIServer = async (payload: string): Promise => { console.log('Sending QR code data to backend:', payload); @@ -78,17 +90,23 @@ const QRScannerScreen: React.FC = () => { } }; + // Toggle Torch (Flashlight) const toggleTorch = () => { setEnableTorch((prev) => !prev); + console.log("Torch toggled:", enableTorch ? "off" : "on"); }; + // Handle Test Scan const handleTestScan = () => { handlePayload('TEST123'); + console.log("Test scan executed"); }; + // Read QR Code from Image const readQRFromImage = async () => { clearScanDataInternal(); - console.log("readingQRFromImage"); + console.log("Reading QR code from image"); + const result = await ImagePicker.launchImageLibraryAsync({ mediaTypes: ImagePicker.MediaTypeOptions.Images, allowsEditing: false, // Don't ask user to crop images @@ -101,10 +119,11 @@ const QRScannerScreen: React.FC = () => { if (scannedResult && scannedResult[0] && scannedResult[0].data) { handlePayload(scannedResult[0].data); // Not sure why scannedResult.data is undefined but access as array work, KIV - console.log('readingQRFromImage -> scannedResult[0].data:', scannedResult[0].data); + console.log('QR code data from image:', scannedResult[0].data); } else { setScannedData("No QR Code Found"); setTimeout(() => setScannedData(""), 4000); + console.log("No QR code found in the selected image"); } } catch (error) { console.error('Error scanning QR code from image:', error); @@ -113,9 +132,11 @@ const QRScannerScreen: React.FC = () => { } }; + // Clear scan data when screen is focused useEffect(() => { const unsubscribe = navigation.addListener('focus', () => { clearScanDataInternal(); + console.log("Screen focused, scan data cleared"); }); return unsubscribe; }, [navigation]);