mirror of
https://github.com/BlueWallet/BlueWallet.git
synced 2025-02-22 06:52:41 +01:00
store version 1.2.0
This commit is contained in:
parent
65f1cf150d
commit
8646f1d06e
19 changed files with 212 additions and 141 deletions
|
@ -11,8 +11,16 @@ import {
|
|||
List,
|
||||
ListItem,
|
||||
} from 'react-native-elements';
|
||||
import { ActivityIndicator, ListView, View } from 'react-native';
|
||||
import { ActivityIndicator, ListView, View, Dimensions } from 'react-native';
|
||||
let BlueApp = require('./BlueApp');
|
||||
const { height, width } = Dimensions.get('window');
|
||||
const aspectRatio = height / width;
|
||||
let isIpad;
|
||||
if (aspectRatio > 1.6) {
|
||||
isIpad = false;
|
||||
} else {
|
||||
isIpad = true;
|
||||
}
|
||||
|
||||
export class BlueButton extends Component {
|
||||
render() {
|
||||
|
@ -104,7 +112,7 @@ export class BlueFormInputAddress extends Component {
|
|||
return (
|
||||
<FormInput
|
||||
{...this.props}
|
||||
inputStyle={{ color: 'white', fontSize: 12 }}
|
||||
inputStyle={{ color: 'white', fontSize: (isIpad && 10) || 12 }}
|
||||
containerStyle={{ borderBottomColor: 'white', borderBottomWidth: 0.5 }}
|
||||
/>
|
||||
);
|
||||
|
@ -132,6 +140,16 @@ export class BlueSpacing extends Component {
|
|||
);
|
||||
}
|
||||
}
|
||||
export class BlueSpacing40 extends Component {
|
||||
render() {
|
||||
return (
|
||||
<View
|
||||
{...this.props}
|
||||
style={{ height: 50, backgroundColor: BlueApp.settings.brandingColor }}
|
||||
/>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
export class BlueSpacing20 extends Component {
|
||||
render() {
|
||||
|
|
5
app.json
5
app.json
|
@ -7,13 +7,14 @@
|
|||
"ios"
|
||||
],
|
||||
"ios": {
|
||||
"buildNumber": 14,
|
||||
"buildNumber": "25",
|
||||
"supportsTablet": false,
|
||||
"isRemoteJSEnabled": false,
|
||||
"bundleIdentifier": "io.bluewallet.bluewallet",
|
||||
"infoPlist": {
|
||||
"NSLocationWhenInUseUsageDescription": "Discover local stores nearby that accept Bitcoin",
|
||||
"NSCameraUsageDescription": "Allow BlueWallet to scan QR codes",
|
||||
"ITSAppUsesNonExemptEncryption": true
|
||||
"ITSAppUsesNonExemptEncryption": false
|
||||
}
|
||||
},
|
||||
"name": "Blue Wallet",
|
||||
|
|
BIN
gif.gif
BIN
gif.gif
Binary file not shown.
Before Width: | Height: | Size: 160 KiB After Width: | Height: | Size: 726 KiB |
|
@ -1,5 +1,5 @@
|
|||
import React, { Component } from 'react';
|
||||
import { ScrollView, Linking } from 'react-native';
|
||||
import { ScrollView, Linking, Dimensions } from 'react-native';
|
||||
import Ionicons from 'react-native-vector-icons/Ionicons';
|
||||
import { Icon } from 'react-native-elements';
|
||||
import {
|
||||
|
@ -14,6 +14,7 @@ import {
|
|||
import PropTypes from 'prop-types';
|
||||
/** @type {AppStorage} */
|
||||
let BlueApp = require('../BlueApp');
|
||||
const { height } = Dimensions.get('window');
|
||||
|
||||
export default class About extends Component {
|
||||
static navigationOptions = {
|
||||
|
@ -58,21 +59,16 @@ export default class About extends Component {
|
|||
}
|
||||
centerComponent={{
|
||||
text: 'About',
|
||||
style: { color: '#fff', fontSize: 25 },
|
||||
style: { color: '#fff', fontSize: 23 },
|
||||
}}
|
||||
/>
|
||||
|
||||
<BlueCard>
|
||||
<ScrollView maxHeight={450}>
|
||||
<BlueText h1>About</BlueText>
|
||||
<BlueSpacing20 />
|
||||
|
||||
<ScrollView maxHeight={height - 150}>
|
||||
<BlueText h4>
|
||||
Blue Wallet is free and opensource Bitcoin wallet
|
||||
</BlueText>
|
||||
<BlueText>
|
||||
Warning: Alpha version, don't use to store large amouts!
|
||||
</BlueText>
|
||||
|
||||
<BlueButton
|
||||
icon={{ name: 'octoface', type: 'octicon' }}
|
||||
onPress={() => {
|
||||
|
|
|
@ -60,7 +60,7 @@ export default class PlausibleDeniability extends Component {
|
|||
}
|
||||
centerComponent={{
|
||||
text: 'Plausible Deniability',
|
||||
style: { color: '#fff', fontSize: 25 },
|
||||
style: { color: '#fff', fontSize: 23 },
|
||||
}}
|
||||
/>
|
||||
|
||||
|
|
|
@ -1,16 +1,25 @@
|
|||
import React, { Component } from 'react';
|
||||
import { TextInput } from 'react-native';
|
||||
import { Dimensions } from 'react-native';
|
||||
import Ionicons from 'react-native-vector-icons/Ionicons';
|
||||
import QRCode from 'react-native-qrcode';
|
||||
import {
|
||||
BlueLoading,
|
||||
BlueButton,
|
||||
BlueSpacing40,
|
||||
BlueFormInputAddress,
|
||||
SafeBlueArea,
|
||||
BlueCard,
|
||||
BlueSpacing,
|
||||
} from '../../BlueComponents';
|
||||
import PropTypes from 'prop-types';
|
||||
let BlueApp = require('../../BlueApp');
|
||||
const { height, width } = Dimensions.get('window');
|
||||
const aspectRatio = height / width;
|
||||
let isIpad;
|
||||
if (aspectRatio > 1.6) {
|
||||
isIpad = false;
|
||||
} else {
|
||||
isIpad = true;
|
||||
}
|
||||
|
||||
export default class ReceiveDetails extends Component {
|
||||
static navigationOptions = {
|
||||
|
@ -47,34 +56,27 @@ export default class ReceiveDetails extends Component {
|
|||
}
|
||||
|
||||
return (
|
||||
<SafeBlueArea
|
||||
forceInset={{ horizontal: 'always' }}
|
||||
style={{ flex: 1, paddingTop: 20 }}
|
||||
>
|
||||
<BlueSpacing />
|
||||
<SafeBlueArea style={{ flex: 1 }}>
|
||||
{(() => {
|
||||
if (isIpad) {
|
||||
return <BlueSpacing40 />;
|
||||
} else {
|
||||
return <BlueSpacing />;
|
||||
}
|
||||
})()}
|
||||
|
||||
<BlueCard
|
||||
title={'Share this address with payer'}
|
||||
style={{ alignItems: 'center', flex: 1 }}
|
||||
>
|
||||
<TextInput
|
||||
style={{ marginBottom: 20, color: 'white' }}
|
||||
editable
|
||||
value={this.state.address}
|
||||
/>
|
||||
<BlueFormInputAddress editable value={this.state.address} />
|
||||
<QRCode
|
||||
value={this.state.address}
|
||||
size={312}
|
||||
size={(isIpad && 250) || 312}
|
||||
bgColor="white"
|
||||
fgColor={BlueApp.settings.brandingColor}
|
||||
/>
|
||||
</BlueCard>
|
||||
|
||||
<BlueButton
|
||||
icon={{ name: 'arrow-left', type: 'octicon' }}
|
||||
backgroundColor={BlueApp.settings.brandingColor}
|
||||
onPress={() => this.props.navigation.goBack()}
|
||||
title="Go back"
|
||||
/>
|
||||
</SafeBlueArea>
|
||||
);
|
||||
}
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
/** @type {AppStorage} */
|
||||
import React, { Component } from 'react';
|
||||
import { ListView, Dimensions } from 'react-native';
|
||||
import Ionicons from 'react-native-vector-icons/Ionicons';
|
||||
import {
|
||||
BlueLoading,
|
||||
|
@ -11,6 +12,8 @@ import {
|
|||
import PropTypes from 'prop-types';
|
||||
let BlueApp = require('../../BlueApp');
|
||||
let EV = require('../../events');
|
||||
const { height } = Dimensions.get('window');
|
||||
let ds = new ListView.DataSource({ rowHasChanged: (r1, r2) => r1 !== r2 });
|
||||
|
||||
export default class ReceiveList extends Component {
|
||||
static navigationOptions = {
|
||||
|
@ -51,6 +54,7 @@ export default class ReceiveList extends Component {
|
|||
this.setState({
|
||||
isLoading: false,
|
||||
list: list,
|
||||
dataSource: ds.cloneWithRows(list),
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -64,29 +68,34 @@ export default class ReceiveList extends Component {
|
|||
return (
|
||||
<SafeBlueArea forceInset={{ horizontal: 'always' }} style={{ flex: 1 }}>
|
||||
<BlueHeader
|
||||
backgroundColor={BlueApp.settings.brandingColor}
|
||||
centerComponent={{
|
||||
text: 'Choose a wallet to receive',
|
||||
style: { color: '#fff', fontSize: 25 },
|
||||
text: 'Choose a wallet',
|
||||
style: { color: '#fff', fontSize: 23 },
|
||||
}}
|
||||
/>
|
||||
|
||||
<BlueCard containerStyle={{ padding: 0 }}>
|
||||
{this.state.list.map((item, i) => (
|
||||
<BlueListItem
|
||||
onPress={() => {
|
||||
navigate('ReceiveDetails', { address: item.title });
|
||||
}}
|
||||
key={i}
|
||||
title={item.title}
|
||||
subtitle={item.subtitle}
|
||||
leftIcon={{
|
||||
name: 'bitcoin',
|
||||
type: 'font-awesome',
|
||||
color: 'white',
|
||||
}}
|
||||
/>
|
||||
))}
|
||||
<ListView
|
||||
maxHeight={height - 200}
|
||||
enableEmptySections
|
||||
dataSource={this.state.dataSource}
|
||||
renderRow={item => {
|
||||
return (
|
||||
<BlueListItem
|
||||
title={item.title}
|
||||
subtitle={item.subtitle}
|
||||
onPress={() => {
|
||||
navigate('ReceiveDetails', { address: item.title });
|
||||
}}
|
||||
leftIcon={{
|
||||
name: 'bitcoin',
|
||||
type: 'font-awesome',
|
||||
color: 'white',
|
||||
}}
|
||||
/>
|
||||
);
|
||||
}}
|
||||
/>
|
||||
</BlueCard>
|
||||
</SafeBlueArea>
|
||||
);
|
||||
|
|
|
@ -150,7 +150,7 @@ export default class Selftest extends Component {
|
|||
backgroundColor={BlueApp.settings.brandingColor}
|
||||
centerComponent={{
|
||||
text: 'Self test',
|
||||
style: { color: '#fff', fontSize: 25 },
|
||||
style: { color: '#fff', fontSize: 23 },
|
||||
}}
|
||||
/>
|
||||
<BlueCard>
|
||||
|
|
|
@ -1,9 +1,10 @@
|
|||
import React, { Component } from 'react';
|
||||
import { ActivityIndicator, View } from 'react-native';
|
||||
import { ActivityIndicator, View, Dimensions } from 'react-native';
|
||||
import Ionicons from 'react-native-vector-icons/Ionicons';
|
||||
import { Text, FormValidationMessage } from 'react-native-elements';
|
||||
import {
|
||||
BlueSpacing20,
|
||||
BlueSpacing40,
|
||||
BlueButton,
|
||||
SafeBlueArea,
|
||||
BlueCard,
|
||||
|
@ -17,6 +18,14 @@ const bip21 = require('bip21');
|
|||
let EV = require('../../events');
|
||||
let BigNumber = require('bignumber.js');
|
||||
let BlueApp = require('../../BlueApp');
|
||||
const { height, width } = Dimensions.get('window');
|
||||
const aspectRatio = height / width;
|
||||
let isIpad;
|
||||
if (aspectRatio > 1.6) {
|
||||
isIpad = false;
|
||||
} else {
|
||||
isIpad = true;
|
||||
}
|
||||
|
||||
const btcAddressRx = /^[a-zA-Z0-9]{26,35}$/;
|
||||
|
||||
|
@ -170,7 +179,13 @@ export default class SendDetails extends Component {
|
|||
|
||||
return (
|
||||
<SafeBlueArea style={{ flex: 1, paddingTop: 20 }}>
|
||||
<BlueSpacing />
|
||||
{(() => {
|
||||
if (isIpad) {
|
||||
return <BlueSpacing40 />;
|
||||
} else {
|
||||
return <BlueSpacing />;
|
||||
}
|
||||
})()}
|
||||
<BlueCard
|
||||
title={'Create Transaction'}
|
||||
style={{ alignItems: 'center', flex: 1 }}
|
||||
|
@ -216,7 +231,7 @@ export default class SendDetails extends Component {
|
|||
|
||||
<FormValidationMessage>{this.state.errorMessage}</FormValidationMessage>
|
||||
|
||||
<View style={{ flex: 1, flexDirection: 'row', paddingTop: 20 }}>
|
||||
<View style={{ flex: 1, flexDirection: 'row' }}>
|
||||
<View style={{ flex: 0.33 }}>
|
||||
<BlueButton
|
||||
onPress={() => this.props.navigation.goBack()}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
import React, { Component } from 'react';
|
||||
import { ActivityIndicator, View } from 'react-native';
|
||||
import { Dimensions, ActivityIndicator, View, ListView } from 'react-native';
|
||||
import Ionicons from 'react-native-vector-icons/Ionicons';
|
||||
import {
|
||||
SafeBlueArea,
|
||||
|
@ -11,6 +11,8 @@ import PropTypes from 'prop-types';
|
|||
let EV = require('../../events');
|
||||
/** @type {AppStorage} */
|
||||
let BlueApp = require('../../BlueApp');
|
||||
const { height } = Dimensions.get('window');
|
||||
let ds = new ListView.DataSource({ rowHasChanged: (r1, r2) => r1 !== r2 });
|
||||
|
||||
export default class SendList extends Component {
|
||||
static navigationOptions = {
|
||||
|
@ -51,6 +53,7 @@ export default class SendList extends Component {
|
|||
this.setState({
|
||||
isLoading: false,
|
||||
list: list,
|
||||
dataSource: ds.cloneWithRows(list),
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -69,27 +72,33 @@ export default class SendList extends Component {
|
|||
<SafeBlueArea forceInset={{ horizontal: 'always' }} style={{ flex: 1 }}>
|
||||
<BlueHeader
|
||||
centerComponent={{
|
||||
text: 'Choose a wallet to send from',
|
||||
style: { color: '#fff', fontSize: 25 },
|
||||
text: 'Choose a wallet',
|
||||
style: { color: '#fff', fontSize: 23 },
|
||||
}}
|
||||
/>
|
||||
|
||||
<BlueCard containerStyle={{ padding: 0 }}>
|
||||
{this.state.list.map((item, i) => (
|
||||
<BlueListItem
|
||||
onPress={() => {
|
||||
navigate('SendDetails', { fromAddress: item.title });
|
||||
}}
|
||||
key={i}
|
||||
title={item.title}
|
||||
subtitle={item.subtitle}
|
||||
leftIcon={{
|
||||
name: 'bitcoin',
|
||||
type: 'font-awesome',
|
||||
color: 'white',
|
||||
}}
|
||||
/>
|
||||
))}
|
||||
<ListView
|
||||
maxHeight={height - 200}
|
||||
enableEmptySections
|
||||
dataSource={this.state.dataSource}
|
||||
renderRow={item => {
|
||||
return (
|
||||
<BlueListItem
|
||||
title={item.title}
|
||||
subtitle={item.subtitle}
|
||||
onPress={() => {
|
||||
navigate('SendDetails', { fromAddress: item.title });
|
||||
}}
|
||||
leftIcon={{
|
||||
name: 'bitcoin',
|
||||
type: 'font-awesome',
|
||||
color: 'white',
|
||||
}}
|
||||
/>
|
||||
);
|
||||
}}
|
||||
/>
|
||||
</BlueCard>
|
||||
</SafeBlueArea>
|
||||
);
|
||||
|
|
|
@ -8,10 +8,22 @@ import {
|
|||
TouchableOpacity,
|
||||
} from 'react-native';
|
||||
import { Camera, Permissions } from 'expo';
|
||||
import Ionicons from 'react-native-vector-icons/Ionicons';
|
||||
import PropTypes from 'prop-types';
|
||||
let EV = require('../../events');
|
||||
|
||||
export default class CameraExample extends React.Component {
|
||||
static navigationOptions = {
|
||||
tabBarLabel: 'Send',
|
||||
tabBarIcon: ({ tintColor, focused }) => (
|
||||
<Ionicons
|
||||
name={focused ? 'md-paper-plane' : 'md-paper-plane'}
|
||||
size={26}
|
||||
style={{ color: tintColor }}
|
||||
/>
|
||||
),
|
||||
};
|
||||
|
||||
state = {
|
||||
isLoading: false,
|
||||
hasCameraPermission: null,
|
||||
|
|
|
@ -61,7 +61,7 @@ export default class Settings extends Component {
|
|||
}
|
||||
centerComponent={{
|
||||
text: 'Settings',
|
||||
style: { color: '#fff', fontSize: 25 },
|
||||
style: { color: '#fff', fontSize: 23 },
|
||||
}}
|
||||
/>
|
||||
|
||||
|
|
|
@ -123,12 +123,6 @@ export default class TransactionsDetails extends Component {
|
|||
);
|
||||
}
|
||||
})()}
|
||||
|
||||
<BlueButton
|
||||
icon={{ name: 'arrow-left', type: 'octicon' }}
|
||||
onPress={() => this.props.navigation.goBack()}
|
||||
title="Go back"
|
||||
/>
|
||||
</SafeBlueArea>
|
||||
);
|
||||
}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
import React, { Component } from 'react';
|
||||
import { ListView } from 'react-native';
|
||||
import { ListView, Dimensions } from 'react-native';
|
||||
import Ionicons from 'react-native-vector-icons/Ionicons';
|
||||
import { Header, Icon } from 'react-native-elements';
|
||||
import {
|
||||
|
@ -14,6 +14,7 @@ import PropTypes from 'prop-types';
|
|||
let EV = require('../../events');
|
||||
/** @type {AppStorage} */
|
||||
let BlueApp = require('../../BlueApp');
|
||||
const { height } = Dimensions.get('window');
|
||||
|
||||
let ds = new ListView.DataSource({ rowHasChanged: (r1, r2) => r1 !== r2 });
|
||||
|
||||
|
@ -123,7 +124,7 @@ export default class TransactionsList extends Component {
|
|||
|
||||
<BlueList>
|
||||
<ListView
|
||||
style={{ height: 360 }}
|
||||
maxHeight={height - 300}
|
||||
enableEmptySections
|
||||
dataSource={this.state.dataSource}
|
||||
renderRow={rowData => {
|
||||
|
|
|
@ -95,14 +95,6 @@ export default class WalletsAdd extends Component {
|
|||
}}
|
||||
/>
|
||||
</BlueCard>
|
||||
|
||||
<BlueButton
|
||||
icon={{ name: 'arrow-left', type: 'octicon' }}
|
||||
title="Go Back"
|
||||
onPress={() => {
|
||||
this.props.navigation.goBack();
|
||||
}}
|
||||
/>
|
||||
</SafeBlueArea>
|
||||
);
|
||||
}
|
||||
|
|
|
@ -1,8 +1,9 @@
|
|||
import React, { Component } from 'react';
|
||||
import { ActivityIndicator, View } from 'react-native';
|
||||
import { Dimensions, ActivityIndicator, View } from 'react-native';
|
||||
import Ionicons from 'react-native-vector-icons/Ionicons';
|
||||
import {
|
||||
BlueSpacing,
|
||||
BlueSpacing40,
|
||||
BlueFormInput,
|
||||
BlueButton,
|
||||
SafeBlueArea,
|
||||
|
@ -15,6 +16,14 @@ import PropTypes from 'prop-types';
|
|||
let EV = require('../../events');
|
||||
/** @type {AppStorage} */
|
||||
let BlueApp = require('../../BlueApp');
|
||||
const { height, width } = Dimensions.get('window');
|
||||
const aspectRatio = height / width;
|
||||
let isIpad;
|
||||
if (aspectRatio > 1.6) {
|
||||
isIpad = false;
|
||||
} else {
|
||||
isIpad = true;
|
||||
}
|
||||
|
||||
export default class WalletDetails extends Component {
|
||||
static navigationOptions = {
|
||||
|
@ -65,15 +74,22 @@ export default class WalletDetails extends Component {
|
|||
render() {
|
||||
if (this.state.isLoading) {
|
||||
return (
|
||||
<View style={{ flex: 1, paddingTop: 20 }}>
|
||||
<View style={{ flex: 1 }}>
|
||||
<ActivityIndicator />
|
||||
</View>
|
||||
);
|
||||
}
|
||||
|
||||
return (
|
||||
<SafeBlueArea style={{ flex: 1, paddingTop: 20 }}>
|
||||
<BlueSpacing />
|
||||
<SafeBlueArea style={{ flex: 1 }}>
|
||||
{(() => {
|
||||
if (isIpad) {
|
||||
return <BlueSpacing40 />;
|
||||
} else {
|
||||
return <BlueSpacing />;
|
||||
}
|
||||
})()}
|
||||
|
||||
<BlueCard
|
||||
title={'Wallet Details'}
|
||||
style={{ alignItems: 'center', flex: 1 }}
|
||||
|
@ -103,24 +119,30 @@ export default class WalletDetails extends Component {
|
|||
if (this.state.confirmDelete) {
|
||||
return (
|
||||
<View style={{ alignItems: 'center' }}>
|
||||
<BlueText h4>Are you sure?</BlueText>
|
||||
<BlueButton
|
||||
icon={{ name: 'stop', type: 'octicon' }}
|
||||
onPress={async () => {
|
||||
BlueApp.deleteWallet(this.state.wallet);
|
||||
await BlueApp.saveToDisk();
|
||||
EV(EV.enum.TRANSACTIONS_COUNT_CHANGED);
|
||||
EV(EV.enum.WALLETS_COUNT_CHANGED);
|
||||
this.props.navigation.goBack();
|
||||
}}
|
||||
title="Yes, delete"
|
||||
/>
|
||||
<BlueButton
|
||||
onPress={async () => {
|
||||
this.setState({ confirmDelete: false });
|
||||
}}
|
||||
title="No, cancel"
|
||||
/>
|
||||
<BlueText>Are you sure?</BlueText>
|
||||
<View style={{ flex: 0, flexDirection: 'row' }}>
|
||||
<View style={{ flex: 0.5 }}>
|
||||
<BlueButton
|
||||
icon={{ name: 'stop', type: 'octicon' }}
|
||||
onPress={async () => {
|
||||
BlueApp.deleteWallet(this.state.wallet);
|
||||
await BlueApp.saveToDisk();
|
||||
EV(EV.enum.TRANSACTIONS_COUNT_CHANGED);
|
||||
EV(EV.enum.WALLETS_COUNT_CHANGED);
|
||||
this.props.navigation.goBack();
|
||||
}}
|
||||
title="Yes, delete"
|
||||
/>
|
||||
</View>
|
||||
<View style={{ flex: 0.5 }}>
|
||||
<BlueButton
|
||||
onPress={async () => {
|
||||
this.setState({ confirmDelete: false });
|
||||
}}
|
||||
title="No, cancel"
|
||||
/>
|
||||
</View>
|
||||
</View>
|
||||
</View>
|
||||
);
|
||||
} else {
|
||||
|
@ -133,25 +155,23 @@ export default class WalletDetails extends Component {
|
|||
}}
|
||||
title="Delete this wallet"
|
||||
/>
|
||||
<BlueButton
|
||||
onPress={() =>
|
||||
this.props.navigation.navigate('WalletExport', {
|
||||
address: this.state.wallet.getAddress(),
|
||||
})
|
||||
|
||||
{(() => {
|
||||
if (isIpad) {
|
||||
return <View />;
|
||||
} else {
|
||||
return (
|
||||
<BlueButton
|
||||
onPress={() =>
|
||||
this.props.navigation.navigate('WalletExport', {
|
||||
address: this.state.wallet.getAddress(),
|
||||
})
|
||||
}
|
||||
title="Export / backup"
|
||||
/>
|
||||
);
|
||||
}
|
||||
title="Export / backup"
|
||||
/>
|
||||
<BlueButton
|
||||
icon={{ name: 'arrow-left', type: 'octicon' }}
|
||||
onPress={async () => {
|
||||
if (this.state.labelChanged) {
|
||||
await BlueApp.saveToDisk();
|
||||
EV(EV.enum.WALLETS_COUNT_CHANGED); // TODO: some other event type?
|
||||
}
|
||||
this.props.navigation.goBack();
|
||||
}}
|
||||
title="Go back"
|
||||
/>
|
||||
})()}
|
||||
</View>
|
||||
);
|
||||
}
|
||||
|
|
|
@ -4,7 +4,6 @@ import Ionicons from 'react-native-vector-icons/Ionicons';
|
|||
import QRCode from 'react-native-qrcode';
|
||||
import {
|
||||
BlueSpacing,
|
||||
BlueButton,
|
||||
SafeBlueArea,
|
||||
BlueCard,
|
||||
BlueText,
|
||||
|
@ -86,12 +85,6 @@ export default class WalletExport extends Component {
|
|||
{this.state.wallet.getSecret()} [Wallet Import Format]
|
||||
</BlueText>
|
||||
</BlueCard>
|
||||
|
||||
<BlueButton
|
||||
icon={{ name: 'arrow-left', type: 'octicon' }}
|
||||
onPress={() => this.props.navigation.goBack()}
|
||||
title="Go back"
|
||||
/>
|
||||
</SafeBlueArea>
|
||||
);
|
||||
}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
import React, { Component } from 'react';
|
||||
import { ListView } from 'react-native';
|
||||
import { ListView, Dimensions } from 'react-native';
|
||||
import Ionicons from 'react-native-vector-icons/Ionicons';
|
||||
import {
|
||||
BlueLoading,
|
||||
|
@ -15,6 +15,14 @@ import PropTypes from 'prop-types';
|
|||
let EV = require('../../events');
|
||||
/** @type {AppStorage} */
|
||||
let BlueApp = require('../../BlueApp');
|
||||
const { height, width } = Dimensions.get('window');
|
||||
const aspectRatio = height / width;
|
||||
let isIpad;
|
||||
if (aspectRatio > 1.6) {
|
||||
isIpad = false;
|
||||
} else {
|
||||
isIpad = true;
|
||||
}
|
||||
|
||||
let ds = new ListView.DataSource({ rowHasChanged: (r1, r2) => r1 !== r2 });
|
||||
|
||||
|
@ -70,7 +78,7 @@ export default class WalletsList extends Component {
|
|||
<BlueHeader
|
||||
centerComponent={{
|
||||
text: 'Blue Wallet',
|
||||
style: { color: '#fff', fontSize: 25 },
|
||||
style: { color: '#fff', fontSize: 23 },
|
||||
}}
|
||||
/>
|
||||
<BlueCard title="My Bitcoin Wallets">
|
||||
|
@ -82,7 +90,7 @@ export default class WalletsList extends Component {
|
|||
<BlueList>
|
||||
<ListView
|
||||
enableEmptySections
|
||||
maxHeight={290}
|
||||
maxHeight={(isIpad && 60) || height - 390}
|
||||
dataSource={this.state.dataSource}
|
||||
renderRow={rowData => {
|
||||
return (
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
let fs = require('fs');
|
||||
var appjson = require('./app.json');
|
||||
appjson.expo.ios.buildNumber++;
|
||||
appjson.expo.ios.buildNumber = appjson.expo.ios.buildNumber + ''; // casting to string
|
||||
fs.writeFileSync('./app.json', JSON.stringify(appjson, null, 2));
|
||||
|
|
Loading…
Add table
Reference in a new issue