implement receive modal
This commit is contained in:
parent
2273dd814f
commit
0f6f0da6d5
|
@ -10,6 +10,7 @@
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@noble/hashes": "^1.5.0",
|
"@noble/hashes": "^1.5.0",
|
||||||
"@react-native-async-storage/async-storage": "^2.0.0",
|
"@react-native-async-storage/async-storage": "^2.0.0",
|
||||||
|
"@react-native-clipboard/clipboard": "^1.14.2",
|
||||||
"@scure/bip39": "^1.4.0",
|
"@scure/bip39": "^1.4.0",
|
||||||
"bech32": "^2.0.0",
|
"bech32": "^2.0.0",
|
||||||
"react": "18.3.1",
|
"react": "18.3.1",
|
||||||
|
@ -3176,6 +3177,29 @@
|
||||||
"react-native": "^0.0.0-0 || >=0.65 <1.0"
|
"react-native": "^0.0.0-0 || >=0.65 <1.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/@react-native-clipboard/clipboard": {
|
||||||
|
"version": "1.14.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/@react-native-clipboard/clipboard/-/clipboard-1.14.2.tgz",
|
||||||
|
"integrity": "sha512-Mb58f3neB6sM9oOtKYVGLvN8KVByea67OA9ekJ0c9FwdH24INu8RJoA7/fq+PRk+7oxbeamAcEoQPRv0uwbbMw==",
|
||||||
|
"license": "MIT",
|
||||||
|
"workspaces": [
|
||||||
|
"example"
|
||||||
|
],
|
||||||
|
"peerDependencies": {
|
||||||
|
"react": ">= 16.9.0",
|
||||||
|
"react-native": ">= 0.61.5",
|
||||||
|
"react-native-macos": ">= 0.61.0",
|
||||||
|
"react-native-windows": ">= 0.61.0"
|
||||||
|
},
|
||||||
|
"peerDependenciesMeta": {
|
||||||
|
"react-native-macos": {
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"react-native-windows": {
|
||||||
|
"optional": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/@react-native-community/cli": {
|
"node_modules/@react-native-community/cli": {
|
||||||
"version": "14.1.0",
|
"version": "14.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/@react-native-community/cli/-/cli-14.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/@react-native-community/cli/-/cli-14.1.0.tgz",
|
||||||
|
|
|
@ -13,6 +13,7 @@
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@noble/hashes": "^1.5.0",
|
"@noble/hashes": "^1.5.0",
|
||||||
"@react-native-async-storage/async-storage": "^2.0.0",
|
"@react-native-async-storage/async-storage": "^2.0.0",
|
||||||
|
"@react-native-clipboard/clipboard": "^1.14.2",
|
||||||
"@scure/bip39": "^1.4.0",
|
"@scure/bip39": "^1.4.0",
|
||||||
"bech32": "^2.0.0",
|
"bech32": "^2.0.0",
|
||||||
"react": "18.3.1",
|
"react": "18.3.1",
|
||||||
|
|
|
@ -1,23 +1,33 @@
|
||||||
import React, {FC} from "react";
|
import React, {FC} from "react";
|
||||||
import {StyleSheet, View } from "react-native";
|
import {StyleSheet, View } from "react-native";
|
||||||
import Modal from "react-native-modal/dist/modal";
|
import Modal from "react-native-modal/dist/modal";
|
||||||
import Button from "./components/Button";
|
|
||||||
import QRCode from "react-qr-code";
|
import QRCode from "react-qr-code";
|
||||||
|
import Styles from "./Styles";
|
||||||
|
import IconButton from "./components/IconButton";
|
||||||
|
|
||||||
type ReceiveModalProps = {
|
type ReceiveModalProps = {
|
||||||
address: string;
|
address: string;
|
||||||
isVisible: boolean;
|
isVisible: boolean;
|
||||||
onChangeFunc: () => void;
|
onChangeFunc: () => void;
|
||||||
|
onCancelFunc: () => void;
|
||||||
};
|
};
|
||||||
|
|
||||||
const ReceiveModal: FC<ReceiveModalProps> = props => {
|
const ReceiveModal: FC<ReceiveModalProps> = props => {
|
||||||
const {address, isVisible, onChangeFunc} = props;
|
const {address, isVisible, onChangeFunc, onCancelFunc} = props;
|
||||||
|
|
||||||
|
const addressLabel = () => {
|
||||||
|
return address.substring(0, 5) + "\u2026" + address.substring(address.length - 5);
|
||||||
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Modal isVisible={isVisible} style={modalStyle.modalContainer}>
|
<Modal isVisible={isVisible} style={modalStyle.modalContainer} onBackdropPress={onCancelFunc}>
|
||||||
<View style={modalStyle.container}>
|
<View style={modalStyle.container}>
|
||||||
<QRCode value={address} />
|
<View>
|
||||||
<Button label="Cancel" disabled={false} onChangeFunc={() => onChangeFunc()}></Button>
|
<QRCode value={address} size={220} bgColor="#320430" fgColor="#F29AE9" />
|
||||||
|
</View>
|
||||||
|
<View style={Styles.footer}>
|
||||||
|
<IconButton label={addressLabel()} disabled={false} onChangeFunc={onChangeFunc} rotate="0deg" backgroundColor="white" labelColor="black" icon="content-copy"/>
|
||||||
|
</View>
|
||||||
</View>
|
</View>
|
||||||
</Modal>
|
</Modal>
|
||||||
)};
|
)};
|
||||||
|
@ -28,13 +38,13 @@ const modalStyle = StyleSheet.create({
|
||||||
margin: 0,
|
margin: 0,
|
||||||
},
|
},
|
||||||
container: {
|
container: {
|
||||||
height: 350,
|
height: 420,
|
||||||
padding: 40,
|
padding: 40,
|
||||||
alignItems: 'center',
|
alignItems: 'center',
|
||||||
borderTopLeftRadius: 10,
|
borderTopLeftRadius: 10,
|
||||||
borderTopRightRadius: 10,
|
borderTopRightRadius: 10,
|
||||||
borderColor: 'rgba(0, 0, 0, 0.1)',
|
borderColor: 'rgba(0, 0, 0, 0.1)',
|
||||||
backgroundColor: 'white'
|
backgroundColor: '#320430'
|
||||||
},
|
},
|
||||||
header: {
|
header: {
|
||||||
paddingTop: '7%',
|
paddingTop: '7%',
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
import {FC, useEffect, useRef, useState } from "react";
|
import {FC, useEffect, useRef, useState } from "react";
|
||||||
import { StyleSheet, Text, TouchableOpacity, View } from "react-native";
|
import { StyleSheet, Text, TouchableOpacity, View } from "react-native";
|
||||||
import Button from "../Button";
|
|
||||||
import { Camera, useCameraDevice, useCameraPermission, useCodeScanner } from "react-native-vision-camera";
|
import { Camera, useCameraDevice, useCameraPermission, useCodeScanner } from "react-native-vision-camera";
|
||||||
import { hexToBytes } from "@noble/hashes/utils";
|
import { hexToBytes } from "@noble/hashes/utils";
|
||||||
import { bech32 } from "bech32";
|
import { bech32 } from "bech32";
|
||||||
|
@ -12,6 +11,7 @@ import Styles from "../../Styles";
|
||||||
import Icon from 'react-native-vector-icons/MaterialCommunityIcons';
|
import Icon from 'react-native-vector-icons/MaterialCommunityIcons';
|
||||||
import SubMenuModal from "../SubMenuModal";
|
import SubMenuModal from "../SubMenuModal";
|
||||||
import IconButton from "../IconButton";
|
import IconButton from "../IconButton";
|
||||||
|
import Clipboard from "@react-native-clipboard/clipboard";
|
||||||
|
|
||||||
enum HomeSteps {
|
enum HomeSteps {
|
||||||
Home,
|
Home,
|
||||||
|
@ -90,6 +90,11 @@ const HomeScreen: FC<HomeScreenProps> = props => {
|
||||||
setMenuVisible(true);
|
setMenuVisible(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const copyAddressAndClose = () => {
|
||||||
|
Clipboard.setString(walletAddress());
|
||||||
|
setReceiveVisible(false);
|
||||||
|
}
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (!hasPermission) {
|
if (!hasPermission) {
|
||||||
if (!requestPermission()) {
|
if (!requestPermission()) {
|
||||||
|
@ -114,7 +119,7 @@ const HomeScreen: FC<HomeScreenProps> = props => {
|
||||||
<IconButton label="Scan" disabled={false} rotate="0deg" backgroundColor="#321504" labelColor="#FE740C" icon="line-scan" onChangeFunc={() => setStep(HomeSteps.ScanCode)}/>
|
<IconButton label="Scan" disabled={false} rotate="0deg" backgroundColor="#321504" labelColor="#FE740C" icon="line-scan" onChangeFunc={() => setStep(HomeSteps.ScanCode)}/>
|
||||||
</View>
|
</View>
|
||||||
</View>
|
</View>
|
||||||
<ReceiveModal address={walletAddress()} isVisible={receiveVisible} onChangeFunc={() => {setReceiveVisible(false)} } />
|
<ReceiveModal address={walletAddress()} isVisible={receiveVisible} onChangeFunc={copyAddressAndClose} onCancelFunc={() => setReceiveVisible(false)}/>
|
||||||
</View>
|
</View>
|
||||||
}
|
}
|
||||||
{step == HomeSteps.ScanCode &&
|
{step == HomeSteps.ScanCode &&
|
||||||
|
|
Loading…
Reference in New Issue