mirror of
https://github.com/BlueWallet/BlueWallet.git
synced 2025-01-19 05:45:15 +01:00
ADD: Long Press on Send. More optins to come
This commit is contained in:
parent
317ab2093d
commit
97e715019d
7
screen/ActionSheet.android.js
Normal file
7
screen/ActionSheet.android.js
Normal file
@ -0,0 +1,7 @@
|
||||
import { Alert } from 'react-native';
|
||||
|
||||
export default class ActionSheet {
|
||||
static showActionSheetWithOptions(options) {
|
||||
Alert.alert(options.title, options.message, options.buttons, { cancelable: true });
|
||||
}
|
||||
}
|
7
screen/ActionSheet.ios.js
Normal file
7
screen/ActionSheet.ios.js
Normal file
@ -0,0 +1,7 @@
|
||||
import { ActionSheetIOS } from 'react-native';
|
||||
|
||||
export default class ActionSheet {
|
||||
static showActionSheetWithOptions(options, completion) {
|
||||
ActionSheetIOS.showActionSheetWithOptions(options, completion);
|
||||
}
|
||||
}
|
@ -20,6 +20,7 @@ import {
|
||||
} from 'react-native';
|
||||
import PropTypes from 'prop-types';
|
||||
import { NavigationEvents } from 'react-navigation';
|
||||
import ImagePicker from 'react-native-image-picker';
|
||||
import {
|
||||
BlueSendButtonIcon,
|
||||
BlueListItem,
|
||||
@ -35,11 +36,13 @@ import Modal from 'react-native-modal';
|
||||
import NavigationService from '../../NavigationService';
|
||||
import HandoffSettings from '../../class/handoff';
|
||||
import Handoff from 'react-native-handoff';
|
||||
import ActionSheet from '../ActionSheet';
|
||||
/** @type {AppStorage} */
|
||||
let BlueApp = require('../../BlueApp');
|
||||
let loc = require('../../loc');
|
||||
let EV = require('../../events');
|
||||
let BlueElectrum = require('../../BlueElectrum');
|
||||
const LocalQRCode = require('@remobile/react-native-qrcode-local-image');
|
||||
|
||||
export default class WalletTransactions extends Component {
|
||||
static navigationOptions = ({ navigation }) => {
|
||||
@ -458,6 +461,85 @@ export default class WalletTransactions extends Component {
|
||||
);
|
||||
};
|
||||
|
||||
onBarCodeRead = ret => {
|
||||
if (!this.state.isLoading) {
|
||||
this.setState({ isLoading: true }, () => {
|
||||
this.setState({ isLoading: false });
|
||||
this.props.navigation.navigate(this.state.wallet.chain === Chain.ONCHAIN ? 'SendDetails' : 'ScanLndInvoice', {
|
||||
fromSecret: this.state.wallet.getSecret(),
|
||||
uri: ret.data ? ret.data : ret,
|
||||
fromWallet: this.state.wallet,
|
||||
});
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
choosePhoto = () => {
|
||||
ImagePicker.launchImageLibrary(
|
||||
{
|
||||
title: null,
|
||||
mediaType: 'photo',
|
||||
takePhotoButtonTitle: null,
|
||||
},
|
||||
response => {
|
||||
if (response.uri) {
|
||||
const uri = Platform.OS === 'ios' ? response.uri.toString().replace('file://', '') : response.path.toString();
|
||||
LocalQRCode.decode(uri, (error, result) => {
|
||||
if (!error) {
|
||||
this.onBarCodeRead({ data: result });
|
||||
} else {
|
||||
alert('The selected image does not contain a QR Code.');
|
||||
}
|
||||
});
|
||||
}
|
||||
},
|
||||
);
|
||||
};
|
||||
|
||||
sendButtonLongPress = () => {
|
||||
if (Platform.OS === 'ios') {
|
||||
ActionSheet.showActionSheetWithOptions(
|
||||
{ options: [loc.send.details.cancel, 'Choose Photo', 'Scan QR Code'], cancelButtonIndex: 0 },
|
||||
buttonIndex => {
|
||||
if (buttonIndex === 1) {
|
||||
this.choosePhoto();
|
||||
} else if (buttonIndex === 2) {
|
||||
this.props.navigation.navigate('ScanQRCode', {
|
||||
launchedBy: this.props.navigation.state.routeName,
|
||||
onBarScanned: this.onBarCodeRead,
|
||||
showFileImportButton: false,
|
||||
});
|
||||
}
|
||||
},
|
||||
);
|
||||
} else if (Platform.OS === 'android') {
|
||||
ActionSheet.showActionSheetWithOptions({
|
||||
title: '',
|
||||
message: '',
|
||||
buttons: [
|
||||
{
|
||||
text: loc.send.details.cancel,
|
||||
onPress: () => {},
|
||||
style: 'cancel',
|
||||
},
|
||||
{
|
||||
text: 'Choose Photo',
|
||||
onPress: this.choosePhoto,
|
||||
},
|
||||
{
|
||||
text: 'Scan QR Code',
|
||||
onPress: () =>
|
||||
this.props.navigation.navigate('ScanQRCode', {
|
||||
launchedBy: this.props.navigation.state.routeName,
|
||||
onBarScanned: this.onBarCodeRead,
|
||||
showFileImportButton: false,
|
||||
}),
|
||||
},
|
||||
],
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
render() {
|
||||
const { navigate } = this.props.navigation;
|
||||
return (
|
||||
@ -615,6 +697,7 @@ export default class WalletTransactions extends Component {
|
||||
) {
|
||||
return (
|
||||
<BlueSendButtonIcon
|
||||
onLongPress={this.sendButtonLongPress}
|
||||
onPress={() => {
|
||||
if (this.state.wallet.chain === Chain.OFFCHAIN) {
|
||||
navigate('ScanLndInvoice', { fromSecret: this.state.wallet.getSecret() });
|
||||
@ -696,5 +779,8 @@ WalletTransactions.propTypes = {
|
||||
goBack: PropTypes.func,
|
||||
getParam: PropTypes.func,
|
||||
setParams: PropTypes.func,
|
||||
state: PropTypes.shape({
|
||||
routeName: PropTypes.string,
|
||||
}),
|
||||
}),
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user