From 304d5932f76619f13cf82a4452e8fcbbc3185270 Mon Sep 17 00:00:00 2001 From: Isky Date: Sun, 7 Jul 2024 16:53:05 +0800 Subject: [PATCH] Addes Share functionality, Added SecureWebView for Open Button.Restored Comments for QRScannerScreen --- components/ScannedDataBox.tsx | 40 ++++++++++++++++++++++++++++++++++- components/SecureWebView.tsx | 21 ++++++++++++++++++ package-lock.json | 22 +++++++++++++++++++ package.json | 1 + 4 files changed, 83 insertions(+), 1 deletion(-) create mode 100644 components/SecureWebView.tsx diff --git a/components/ScannedDataBox.tsx b/components/ScannedDataBox.tsx index 07ada36..1889d6b 100644 --- a/components/ScannedDataBox.tsx +++ b/components/ScannedDataBox.tsx @@ -2,6 +2,7 @@ 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'; +import SecureWebView from './SecureWebView'; // Import the SecureWebView component // Define Props for ScannedDataBox component interface ScannedDataBoxProps { @@ -20,6 +21,8 @@ interface ScanResult { const ScannedDataBox: React.FC = ({ data, dataType, clearScanData }) => { const [scanResult, setScanResult] = useState(null); const [isModalVisible, setIsModalVisible] = useState(false); + const [isWebViewVisible, setIsWebViewVisible] = useState(false); // State to control WebView modal visibility + console.log("ScannedDataBox -> Data", data); console.log("DataType", dataType); @@ -74,6 +77,12 @@ const ScannedDataBox: React.FC = ({ data, dataType, clearSc } }; + // Handle opening the data in a sandboxed WebView + const handleOpen = () => { + setIsWebViewVisible(true); + console.log('Opening data in WebView:', data); + }; + return ( {/* Close button */} @@ -112,7 +121,7 @@ const ScannedDataBox: React.FC = ({ data, dataType, clearSc Share - + Open @@ -151,6 +160,21 @@ const ScannedDataBox: React.FC = ({ data, dataType, clearSc + + {/* Modal for SecureWebView */} + setIsWebViewVisible(false)} + > + + setIsWebViewVisible(false)}> + + + + + ); }; @@ -291,6 +315,20 @@ const styles = StyleSheet.create({ fontSize: 12, color: '#fff', }, + webViewContainer: { + flex: 1, + backgroundColor: 'rgba(0, 0, 0, 0.5)', + }, + webView: { + flex: 1, + marginTop: 40, + }, + closeWebViewButton: { + position: 'absolute', + top: 10, + right: 10, + zIndex: 1, + }, }); export default ScannedDataBox; diff --git a/components/SecureWebView.tsx b/components/SecureWebView.tsx new file mode 100644 index 0000000..c088be8 --- /dev/null +++ b/components/SecureWebView.tsx @@ -0,0 +1,21 @@ +import React from 'react'; +import { WebView } from 'react-native-webview'; + +// Define the SecureWebView component +const SecureWebView = ({ url }) => { + return ( + { + // Implement additional URL filtering logic here if needed + return true; // Return true to allow the URL to be loaded + }} + /> + ); +}; + +export default SecureWebView; diff --git a/package-lock.json b/package-lock.json index 033e309..3650bac 100644 --- a/package-lock.json +++ b/package-lock.json @@ -22,6 +22,7 @@ "react-native": "0.74.2", "react-native-qrcode-svg": "^6.3.1", "react-native-safe-area-context": "^4.10.4", + "react-native-webview": "^13.10.4", "react-redux": "^9.1.2", "redux": "^5.0.1" }, @@ -12270,6 +12271,27 @@ "react-native": "*" } }, + "node_modules/react-native-webview": { + "version": "13.10.4", + "resolved": "https://registry.npmjs.org/react-native-webview/-/react-native-webview-13.10.4.tgz", + "integrity": "sha512-kRn70M7vyBS3IDaX2KqyF66ovUkrBS6LiHOgrEmRdZFO0i3hYY0wldEv1fJuKvgQIPMfo7GtGAjozFrk2vQdBw==", + "dependencies": { + "escape-string-regexp": "2.0.0", + "invariant": "2.2.4" + }, + "peerDependencies": { + "react": "*", + "react-native": "*" + } + }, + "node_modules/react-native-webview/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "engines": { + "node": ">=8" + } + }, "node_modules/react-native/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", diff --git a/package.json b/package.json index f91cc43..5c27346 100644 --- a/package.json +++ b/package.json @@ -23,6 +23,7 @@ "react-native": "0.74.2", "react-native-qrcode-svg": "^6.3.1", "react-native-safe-area-context": "^4.10.4", + "react-native-webview": "^13.10.4", "react-redux": "^9.1.2", "redux": "^5.0.1" },