From 94206a13ebac3031522c01bb10561615fa8d08f9 Mon Sep 17 00:00:00 2001 From: marcosrdz Date: Wed, 9 Dec 2020 16:20:50 -0500 Subject: [PATCH 1/6] FIX: Was unable to import key on macOS --- screen/wallets/addMultisigStep2.js | 109 +++++++++++++++++++++++------ 1 file changed, 86 insertions(+), 23 deletions(-) diff --git a/screen/wallets/addMultisigStep2.js b/screen/wallets/addMultisigStep2.js index 80a73def7..ada43be13 100644 --- a/screen/wallets/addMultisigStep2.js +++ b/screen/wallets/addMultisigStep2.js @@ -38,11 +38,14 @@ import MultipleStepsListItem, { MultipleStepsListItemButtohType, MultipleStepsListItemDashType, } from '../../components/MultipleStepsListItem'; +import ActionSheet from '../ActionSheet'; import Clipboard from '@react-native-community/clipboard'; import showPopupMenu from 'react-native-popup-menu-android'; import ToolTip from 'react-native-tooltip'; import ReactNativeHapticFeedback from 'react-native-haptic-feedback'; import { BlueStorageContext } from '../../blue_modules/storage-context'; +import DocumentPicker from 'react-native-document-picker'; +import RNFS from 'react-native-fs'; const prompt = require('../../blue_modules/prompt'); const A = require('../../blue_modules/analytics'); @@ -315,7 +318,7 @@ const WalletsAddMultisigStep2 = () => { const onBarScanned = ret => { setIsProvideMnemonicsModalVisible(false); - navigation.dangerouslyGetParent().pop(); + if (!isDesktop) navigation.dangerouslyGetParent().pop(); if (!ret.data) ret = { data: ret }; if (ret.data.toUpperCase().startsWith('UR')) { alert('BC-UR not decoded. This should never happen'); @@ -393,29 +396,8 @@ const WalletsAddMultisigStep2 = () => { }; const scanOrOpenFile = () => { - setIsProvideMnemonicsModalVisible(false); if (isDesktop) { - ImagePicker.launchCamera( - { - 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) { - onBarScanned(result); - } else { - alert(loc.send.qr_error_no_qrcode); - } - }); - } else if (response.error) { - ScanQRCode.presentCameraNotAuthorizedAlert(response.error); - } - }, - ); + showActionSheet(); } else { navigation.navigate('ScanQRCodeRoot', { screen: 'ScanQRCode', @@ -427,6 +409,87 @@ const WalletsAddMultisigStep2 = () => { } }; + const takePhoto = () => { + ImagePicker.launchCamera( + { + 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) { + onBarScanned(result); + } else { + alert(loc.send.qr_error_no_qrcode); + } + }); + } else if (response.error) { + ScanQRCode.presentCameraNotAuthorizedAlert(response.error); + } + }, + ); + }; + + const 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) { + onBarScanned(result); + } else { + alert(loc.send.qr_error_no_qrcode); + } + }); + } + }, + ); + }; + + const showActionSheet = async () => { + if (Platform.OS === 'ios') { + const options = [loc._.cancel, 'Take Photo', loc.wallets.list_long_choose, loc.wallets.import_file]; + + ActionSheet.showActionSheetWithOptions({ options, cancelButtonIndex: 0 }, buttonIndex => { + if (buttonIndex === 1) { + takePhoto(); + } else if (buttonIndex === 2) { + choosePhoto(); + } else if (buttonIndex === 3) { + handleImportFileButtonPressed(); + } + }); + } + }; + + const handleImportFileButtonPressed = async () => { + try { + const res = await DocumentPicker.pick({ + type: [DocumentPicker.types.allFiles], + }); + + const file = await RNFS.readFile(res.uri); + if (file) { + onBarScanned(file); + } else { + throw new Error(); + } + } catch (err) { + if (!DocumentPicker.isCancel(err)) { + alert(loc.wallets.import_error); + } + } + }; + const _renderKeyItem = el => { const renderProvideKeyButtons = el.index === cosigners.length; const isChecked = el.index < cosigners.length; From d53db68f6c3d419131813e3f5739124fe795811f Mon Sep 17 00:00:00 2001 From: marcosrdz Date: Wed, 9 Dec 2020 16:34:48 -0500 Subject: [PATCH 2/6] FIX: Was unable to use PSBT Multisig on macOS --- screen/send/psbtMultisigQRCode.js | 110 ++++++++++++++++++++++++------ 1 file changed, 88 insertions(+), 22 deletions(-) diff --git a/screen/send/psbtMultisigQRCode.js b/screen/send/psbtMultisigQRCode.js index 21863ea0b..9d51fd5c4 100644 --- a/screen/send/psbtMultisigQRCode.js +++ b/screen/send/psbtMultisigQRCode.js @@ -7,9 +7,13 @@ import { SquareButton } from '../../components/SquareButton'; import { getSystemName } from 'react-native-device-info'; import loc from '../../loc'; import ImagePicker from 'react-native-image-picker'; -import ScanQRCode from './ScanQRCode'; import { useNavigation, useRoute, useTheme } from '@react-navigation/native'; +import RNFS from 'react-native-fs'; +import DocumentPicker from 'react-native-document-picker'; +import { presentCameraNotAuthorizedAlert } from '../../class/camera'; +import ActionSheet from '../ActionSheet'; const bitcoin = require('bitcoinjs-lib'); + const fs = require('../../blue_modules/fs'); const LocalQRCode = require('@remobile/react-native-qrcode-local-image'); const isDesktop = getSystemName() === 'Mac OS X'; @@ -41,35 +45,97 @@ const PsbtMultisigQRCode = () => { } else if (ret.data.indexOf('+') === -1 && ret.data.indexOf('=') === -1 && ret.data.indexOf('=') === -1) { // this looks like NOT base64, so maybe its transaction's hex // we dont support it in this flow + alert(loc.wallets.import_error); } else { // psbt base64? navigate('PsbtMultisig', { receivedPSBTBase64: ret.data }); } }; + const 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) { + onBarScanned(result); + } else { + alert(loc.send.qr_error_no_qrcode); + } + }); + } + }, + ); + }; + + const takePhoto = () => { + ImagePicker.launchCamera( + { + 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) { + onBarScanned(result); + } else { + alert(loc.send.qr_error_no_qrcode); + } + }); + } else if (response.error) { + presentCameraNotAuthorizedAlert(response.error); + } + }, + ); + }; + + const handleImportFileButtonPressed = async () => { + try { + const res = await DocumentPicker.pick({ + type: [DocumentPicker.types.allFiles], + }); + + const file = await RNFS.readFile(res.uri); + if (file) { + onBarScanned(file); + } else { + throw new Error(); + } + } catch (err) { + if (!DocumentPicker.isCancel(err)) { + alert(loc.wallets.import_error); + } + } + }; + + const showActionSheet = async () => { + if (Platform.OS === 'ios') { + const options = [loc._.cancel, 'Take Photo', loc.wallets.list_long_choose, loc.wallets.import_file]; + + ActionSheet.showActionSheetWithOptions({ options, cancelButtonIndex: 0 }, buttonIndex => { + if (buttonIndex === 1) { + takePhoto(); + } else if (buttonIndex === 2) { + choosePhoto(); + } else if (buttonIndex === 3) { + handleImportFileButtonPressed(); + } + }); + } + }; + const openScanner = () => { if (isDesktop) { - ImagePicker.launchCamera( - { - 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) { - onBarScanned(result); - } else { - alert(loc.send.qr_error_no_qrcode); - } - }); - } else if (response.error) { - ScanQRCode.presentCameraNotAuthorizedAlert(response.error); - } - }, - ); + showActionSheet(); } else { navigate('ScanQRCodeRoot', { screen: 'ScanQRCode', From 4ad774583231e1826efb1178b5bb3c99b6022f52 Mon Sep 17 00:00:00 2001 From: marcosrdz Date: Thu, 10 Dec 2020 22:16:59 -0500 Subject: [PATCH 3/6] REF: Reuse showFilePickerAndReadFile --- screen/send/psbtMultisigQRCode.js | 46 +++++++++--------------------- screen/wallets/addMultisigStep2.js | 44 ++++++++-------------------- 2 files changed, 25 insertions(+), 65 deletions(-) diff --git a/screen/send/psbtMultisigQRCode.js b/screen/send/psbtMultisigQRCode.js index 9d51fd5c4..ea89b774f 100644 --- a/screen/send/psbtMultisigQRCode.js +++ b/screen/send/psbtMultisigQRCode.js @@ -8,8 +8,6 @@ import { getSystemName } from 'react-native-device-info'; import loc from '../../loc'; import ImagePicker from 'react-native-image-picker'; import { useNavigation, useRoute, useTheme } from '@react-navigation/native'; -import RNFS from 'react-native-fs'; -import DocumentPicker from 'react-native-document-picker'; import { presentCameraNotAuthorizedAlert } from '../../class/camera'; import ActionSheet from '../ActionSheet'; const bitcoin = require('bitcoinjs-lib'); @@ -98,39 +96,21 @@ const PsbtMultisigQRCode = () => { ); }; - const handleImportFileButtonPressed = async () => { - try { - const res = await DocumentPicker.pick({ - type: [DocumentPicker.types.allFiles], - }); + const showActionSheet = () => { + const options = [loc._.cancel, loc.wallets.take_photo, loc.wallets.list_long_choose, loc.wallets.import_file]; - const file = await RNFS.readFile(res.uri); - if (file) { - onBarScanned(file); - } else { - throw new Error(); - } - } catch (err) { - if (!DocumentPicker.isCancel(err)) { - alert(loc.wallets.import_error); - } - } - }; - - const showActionSheet = async () => { - if (Platform.OS === 'ios') { - const options = [loc._.cancel, 'Take Photo', loc.wallets.list_long_choose, loc.wallets.import_file]; - - ActionSheet.showActionSheetWithOptions({ options, cancelButtonIndex: 0 }, buttonIndex => { - if (buttonIndex === 1) { - takePhoto(); - } else if (buttonIndex === 2) { - choosePhoto(); - } else if (buttonIndex === 3) { - handleImportFileButtonPressed(); + ActionSheet.showActionSheetWithOptions({ options, cancelButtonIndex: 0 }, async buttonIndex => { + if (buttonIndex === 1) { + takePhoto(); + } else if (buttonIndex === 2) { + choosePhoto(); + } else if (buttonIndex === 3) { + const { data } = await fs.showFilePickerAndReadFile(); + if (data) { + onBarScanned({ data }); } - }); - } + } + }); }; const openScanner = () => { diff --git a/screen/wallets/addMultisigStep2.js b/screen/wallets/addMultisigStep2.js index ada43be13..4393a5ba0 100644 --- a/screen/wallets/addMultisigStep2.js +++ b/screen/wallets/addMultisigStep2.js @@ -44,8 +44,6 @@ import showPopupMenu from 'react-native-popup-menu-android'; import ToolTip from 'react-native-tooltip'; import ReactNativeHapticFeedback from 'react-native-haptic-feedback'; import { BlueStorageContext } from '../../blue_modules/storage-context'; -import DocumentPicker from 'react-native-document-picker'; -import RNFS from 'react-native-fs'; const prompt = require('../../blue_modules/prompt'); const A = require('../../blue_modules/analytics'); @@ -455,39 +453,21 @@ const WalletsAddMultisigStep2 = () => { ); }; - const showActionSheet = async () => { - if (Platform.OS === 'ios') { - const options = [loc._.cancel, 'Take Photo', loc.wallets.list_long_choose, loc.wallets.import_file]; + const showActionSheet = () => { + const options = [loc._.cancel, loc.wallets.take_photo, loc.wallets.list_long_choose, loc.wallets.import_file]; - ActionSheet.showActionSheetWithOptions({ options, cancelButtonIndex: 0 }, buttonIndex => { - if (buttonIndex === 1) { - takePhoto(); - } else if (buttonIndex === 2) { - choosePhoto(); - } else if (buttonIndex === 3) { - handleImportFileButtonPressed(); + ActionSheet.showActionSheetWithOptions({ options, cancelButtonIndex: 0 }, async buttonIndex => { + if (buttonIndex === 1) { + takePhoto(); + } else if (buttonIndex === 2) { + choosePhoto(); + } else if (buttonIndex === 3) { + const { data } = await fs.showFilePickerAndReadFile(); + if (data) { + onBarScanned({ data }); } - }); - } - }; - - const handleImportFileButtonPressed = async () => { - try { - const res = await DocumentPicker.pick({ - type: [DocumentPicker.types.allFiles], - }); - - const file = await RNFS.readFile(res.uri); - if (file) { - onBarScanned(file); - } else { - throw new Error(); } - } catch (err) { - if (!DocumentPicker.isCancel(err)) { - alert(loc.wallets.import_error); - } - } + }); }; const _renderKeyItem = el => { From 79d993ac6bc07795c8340651a4fed7067f928ac2 Mon Sep 17 00:00:00 2001 From: marcosrdz Date: Thu, 10 Dec 2020 22:28:54 -0500 Subject: [PATCH 4/6] REF: Reuse fs --- blue_modules/fs.js | 54 +++++++++++++++++++++++++++++ screen/send/psbtMultisigQRCode.js | 55 ++---------------------------- screen/wallets/addMultisigStep2.js | 53 ++-------------------------- 3 files changed, 59 insertions(+), 103 deletions(-) diff --git a/blue_modules/fs.js b/blue_modules/fs.js index 148552966..bc5a3ba18 100644 --- a/blue_modules/fs.js +++ b/blue_modules/fs.js @@ -5,6 +5,8 @@ import Share from 'react-native-share'; import loc from '../loc'; import DocumentPicker from 'react-native-document-picker'; import isCatalyst from 'react-native-is-catalyst'; +import ImagePicker from 'react-native-image-picker'; +import { presentCameraNotAuthorizedAlert } from './class/camera'; const LocalQRCode = require('@remobile/react-native-qrcode-local-image'); const writeFileAndExport = async function (filename, contents) { @@ -92,6 +94,56 @@ const _readPsbtFileIntoBase64 = async function (uri) { } }; +const showImagePickerAndReadImage = () => { + return new Promise((resolve, reject) => + 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) { + resolve(result); + } else { + reject(new Error(loc.send.qr_error_no_qrcode)); + } + }); + } + }, + ), + ); +}; + +const takePhotoWithImagePickerAndReadPhoto = () => { + return new Promise((resolve, reject) => + ImagePicker.launchCamera( + { + 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) { + resolve(result); + } else { + reject(new Error(loc.send.qr_error_no_qrcode)); + } + }); + } else if (response.error) { + presentCameraNotAuthorizedAlert(response.error); + } + }, + ), + ); +}; + const showFilePickerAndReadFile = async function () { try { const res = await DocumentPicker.pick({ @@ -141,3 +193,5 @@ const showFilePickerAndReadFile = async function () { module.exports.writeFileAndExport = writeFileAndExport; module.exports.openSignedTransaction = openSignedTransaction; module.exports.showFilePickerAndReadFile = showFilePickerAndReadFile; +module.exports.showImagePickerAndReadImage = showImagePickerAndReadImage; +module.exports.takePhotoWithImagePickerAndReadPhoto = takePhotoWithImagePickerAndReadPhoto; diff --git a/screen/send/psbtMultisigQRCode.js b/screen/send/psbtMultisigQRCode.js index ea89b774f..4995fca31 100644 --- a/screen/send/psbtMultisigQRCode.js +++ b/screen/send/psbtMultisigQRCode.js @@ -1,19 +1,16 @@ /* global alert */ import React, { useState } from 'react'; -import { ActivityIndicator, Platform, ScrollView, StyleSheet, View } from 'react-native'; +import { ActivityIndicator, ScrollView, StyleSheet, View } from 'react-native'; import { BlueNavigationStyle, BlueSpacing20, SafeBlueArea } from '../../BlueComponents'; import { DynamicQRCode } from '../../components/DynamicQRCode'; import { SquareButton } from '../../components/SquareButton'; import { getSystemName } from 'react-native-device-info'; import loc from '../../loc'; -import ImagePicker from 'react-native-image-picker'; import { useNavigation, useRoute, useTheme } from '@react-navigation/native'; -import { presentCameraNotAuthorizedAlert } from '../../class/camera'; import ActionSheet from '../ActionSheet'; const bitcoin = require('bitcoinjs-lib'); const fs = require('../../blue_modules/fs'); -const LocalQRCode = require('@remobile/react-native-qrcode-local-image'); const isDesktop = getSystemName() === 'Mac OS X'; const PsbtMultisigQRCode = () => { @@ -50,60 +47,14 @@ const PsbtMultisigQRCode = () => { } }; - const 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) { - onBarScanned(result); - } else { - alert(loc.send.qr_error_no_qrcode); - } - }); - } - }, - ); - }; - - const takePhoto = () => { - ImagePicker.launchCamera( - { - 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) { - onBarScanned(result); - } else { - alert(loc.send.qr_error_no_qrcode); - } - }); - } else if (response.error) { - presentCameraNotAuthorizedAlert(response.error); - } - }, - ); - }; - const showActionSheet = () => { const options = [loc._.cancel, loc.wallets.take_photo, loc.wallets.list_long_choose, loc.wallets.import_file]; ActionSheet.showActionSheetWithOptions({ options, cancelButtonIndex: 0 }, async buttonIndex => { if (buttonIndex === 1) { - takePhoto(); + fs.takePhotoWithImagePickerAndReadPhoto.then(onBarScanned); } else if (buttonIndex === 2) { - choosePhoto(); + fs.showImagePickerAndReadImage(onBarScanned).catch(error => alert(error.message)); } else if (buttonIndex === 3) { const { data } = await fs.showFilePickerAndReadFile(); if (data) { diff --git a/screen/wallets/addMultisigStep2.js b/screen/wallets/addMultisigStep2.js index 4393a5ba0..80e84b64e 100644 --- a/screen/wallets/addMultisigStep2.js +++ b/screen/wallets/addMultisigStep2.js @@ -29,8 +29,6 @@ import { HDSegwitBech32Wallet, MultisigCosigner, MultisigHDWallet } from '../../ import { useNavigation, useRoute, useTheme } from '@react-navigation/native'; import loc from '../../loc'; import { getSystemName } from 'react-native-device-info'; -import ImagePicker from 'react-native-image-picker'; -import ScanQRCode from '../send/ScanQRCode'; import QRCode from 'react-native-qrcode-svg'; import { SquareButton } from '../../components/SquareButton'; import BottomModal from '../../components/BottomModal'; @@ -49,7 +47,6 @@ const prompt = require('../../blue_modules/prompt'); const A = require('../../blue_modules/analytics'); const fs = require('../../blue_modules/fs'); const isDesktop = getSystemName() === 'Mac OS X'; -const LocalQRCode = require('@remobile/react-native-qrcode-local-image'); const staticCache = {}; const WalletsAddMultisigStep2 = () => { @@ -407,60 +404,14 @@ const WalletsAddMultisigStep2 = () => { } }; - const takePhoto = () => { - ImagePicker.launchCamera( - { - 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) { - onBarScanned(result); - } else { - alert(loc.send.qr_error_no_qrcode); - } - }); - } else if (response.error) { - ScanQRCode.presentCameraNotAuthorizedAlert(response.error); - } - }, - ); - }; - - const 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) { - onBarScanned(result); - } else { - alert(loc.send.qr_error_no_qrcode); - } - }); - } - }, - ); - }; - const showActionSheet = () => { const options = [loc._.cancel, loc.wallets.take_photo, loc.wallets.list_long_choose, loc.wallets.import_file]; ActionSheet.showActionSheetWithOptions({ options, cancelButtonIndex: 0 }, async buttonIndex => { if (buttonIndex === 1) { - takePhoto(); + fs.takePhotoWithImagePickerAndReadPhoto.then(onBarScanned); } else if (buttonIndex === 2) { - choosePhoto(); + fs.showImagePickerAndReadImage(onBarScanned).catch(error => alert(error.message)); } else if (buttonIndex === 3) { const { data } = await fs.showFilePickerAndReadFile(); if (data) { From 376156a423ccfbce8e8c3f1ff4e9254bfb1dbed6 Mon Sep 17 00:00:00 2001 From: marcosrdz Date: Sat, 12 Dec 2020 13:07:00 -0500 Subject: [PATCH 5/6] Update fs.js --- blue_modules/fs.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/blue_modules/fs.js b/blue_modules/fs.js index 80b6bacd9..6447ae002 100644 --- a/blue_modules/fs.js +++ b/blue_modules/fs.js @@ -5,7 +5,7 @@ import Share from 'react-native-share'; import loc from '../loc'; import DocumentPicker from 'react-native-document-picker'; import isCatalyst from 'react-native-is-catalyst'; -import ImagePicker from 'react-native-image-picker'; +import { launchCamera, launchImageLibrary } from 'react-native-image-picker'; import { presentCameraNotAuthorizedAlert } from './class/camera'; const LocalQRCode = require('@remobile/react-native-qrcode-local-image'); @@ -96,7 +96,7 @@ const _readPsbtFileIntoBase64 = async function (uri) { const showImagePickerAndReadImage = () => { return new Promise((resolve, reject) => - ImagePicker.launchImageLibrary( + launchImageLibrary( { title: null, mediaType: 'photo', @@ -120,7 +120,7 @@ const showImagePickerAndReadImage = () => { const takePhotoWithImagePickerAndReadPhoto = () => { return new Promise((resolve, reject) => - ImagePicker.launchCamera( + launchCamera( { title: null, mediaType: 'photo', From af70ae3bc734bf73047489cbd51cdab6acf075a7 Mon Sep 17 00:00:00 2001 From: marcosrdz Date: Sat, 12 Dec 2020 13:29:34 -0500 Subject: [PATCH 6/6] Update fs.js --- blue_modules/fs.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/blue_modules/fs.js b/blue_modules/fs.js index 6447ae002..aa5cfd786 100644 --- a/blue_modules/fs.js +++ b/blue_modules/fs.js @@ -6,7 +6,7 @@ import loc from '../loc'; import DocumentPicker from 'react-native-document-picker'; import isCatalyst from 'react-native-is-catalyst'; import { launchCamera, launchImageLibrary } from 'react-native-image-picker'; -import { presentCameraNotAuthorizedAlert } from './class/camera'; +import { presentCameraNotAuthorizedAlert } from '../class/camera'; const LocalQRCode = require('@remobile/react-native-qrcode-local-image'); const writeFileAndExport = async function (filename, contents) {