import React, { useState, useRef, useEffect, useContext } from 'react';
import { Keyboard, KeyboardAvoidingView, Platform, StatusBar, StyleSheet, Text, TouchableOpacity, View } from 'react-native';
import LottieView from 'lottie-react-native';
import { Icon } from 'react-native-elements';
import { BlueButton, BlueListItem, BlueNavigationStyle, BlueSpacing20 } from '../../BlueComponents';
import { MultisigHDWallet } from '../../class';
import { useNavigation, useTheme } from '@react-navigation/native';
import loc from '../../loc';
import Modal from 'react-native-modal';
import { SafeAreaView } from 'react-native-safe-area-context';
import { BlueStorageContext } from '../../blue_modules/storage-context';
const WalletsAddMultisig = () => {
const { colors } = useTheme();
const { navigate } = useNavigation();
const loadingAnimation = useRef();
const [m, setM] = useState(2);
const [n, setN] = useState(3);
const [isModalVisible, setIsModalVisible] = useState(false);
const [format, setFormat] = useState(MultisigHDWallet.FORMAT_P2WSH);
const { isAdancedModeEnabled } = useContext(BlueStorageContext);
const [isAdvancedModeEnabledRender, setIsAdvancedModeEnabledRender] = useState(false);
const stylesHook = StyleSheet.create({
root: {
backgroundColor: colors.elevated,
justifyContent: 'space-between',
flex: 1,
},
textdesc: {
color: colors.alternativeTextColor,
},
whiteBackground: { backgroundColor: colors.background },
itemNameWrapper: { backgroundColor: colors.elevated },
nativeName: { color: colors.foregroundColor },
filteTextWrapper: { color: colors.foregroundColor, right: 0, position: 'absolute' },
modalContentShort: {
backgroundColor: colors.elevated,
},
textSubtitle: {
color: colors.alternativeTextColor,
},
selectedItem: {
backgroundColor: colors.buttonDisabledTextColor,
},
deSelectedItem: {
backgroundColor: 'transparent',
},
textHeader: {
color: colors.outputValue,
},
});
useEffect(() => {
isAdancedModeEnabled().then(setIsAdvancedModeEnabledRender);
// eslint-disable-next-line react-hooks/exhaustive-deps
}, []);
const onLetsStartPress = () => {
navigate('WalletsAddMultisigStep2', { m, n, format });
};
const setFormatP2wsh = () => setFormat(MultisigHDWallet.FORMAT_P2WSH);
const setFormatP2shP2wsh = () => setFormat(MultisigHDWallet.FORMAT_P2SH_P2WSH);
const setFormatP2sh = () => setFormat(MultisigHDWallet.FORMAT_P2SH);
const isP2wsh = () => format === MultisigHDWallet.FORMAT_P2WSH;
const isP2shP2wsh = () => format === MultisigHDWallet.FORMAT_P2SH_P2WSH;
const isP2sh = () => format === MultisigHDWallet.FORMAT_P2SH;
const increaseM = () => {
if (n === m) return;
if (m === 7) return;
setM(m + 1);
};
const decreaseM = () => {
if (m === 2) return;
setM(m - 1);
};
const increaseN = () => {
if (n === 7) return;
setN(n + 1);
};
const decreaseN = () => {
if (n === m) return;
setN(n - 1);
};
const renderModal = () => {
return (
{
Keyboard.dismiss();
setIsModalVisible(false);
}}
>
{loc.multisig.quorum_header}
{loc.multisig.required_keys_out_of_total}
{m}
{loc.multisig.of}
{n}
{loc.multisig.wallet_type}
);
};
const showAdvancedOptionsModal = () => {
setIsModalVisible(true);
};
const getCurrentlySelectedFormat = code => {
switch (code) {
case 'format':
return WalletsAddMultisig.getCurrentFormatReadable(format);
case 'quorum':
return loc.formatString(loc.multisig.quorum, { m, n });
default:
throw new Error('This should never happen');
}
};
return (
{loc.multisig.what_is_vault}
{loc.formatString(loc.multisig.what_is_vault_numberOfWallets, { m, n })}
{loc.multisig.what_is_vault_wallet}
{loc.multisig.needs}
{loc.formatString(loc.multisig.what_is_vault_description_number_of_vault_keys, { m })}
{loc.multisig.what_is_vault_description_to_spend}
{isAdvancedModeEnabledRender && (
)}
{renderModal()}
);
};
const styles = StyleSheet.create({
modalFlatList: { width: '100%' },
itemNameWrapper: { flexDirection: 'row', paddingTop: 20, paddingBottom: 0 },
textWrapper: { paddingLeft: 10, flex: 1, flexDirection: 'row' },
nativeName: { fontSize: 16 },
filteTextWrapper: { right: 0, position: 'absolute' },
filterText: { fontSize: 16, color: 'gray' },
advancedOptionsContainer: {},
bottomModal: {
justifyContent: 'flex-end',
margin: 0,
},
descriptionContainer: {
alignContent: 'center',
justifyContent: 'center',
flex: 0.8,
},
modalContentShort: {
padding: 24,
justifyContent: 'center',
borderTopLeftRadius: 16,
borderTopRightRadius: 16,
borderColor: 'rgba(0, 0, 0, 0.1)',
minHeight: 350,
},
formatSelectorTextWrapper: {
borderRadius: 6,
paddingVertical: 12,
paddingHorizontal: 8,
borderColor: 0,
},
borderRadius6: {
borderRadius: 6,
},
formatSelectorTextWrapperSelected: {
backgroundColor: '#EEF0F4',
borderRadius: 6,
paddingVertical: 12,
paddingHorizontal: 8,
borderColor: 0,
},
buttonContainer: {
width: 263,
alignSelf: 'center',
justifyContent: 'flex-end',
marginVertical: 24,
},
formatSelectorText: {
color: '#13244D',
fontSize: 16,
fontWeight: '500',
},
column: {
paddingRight: 20,
paddingLeft: 20,
},
chevron: {
paddingBottom: 10,
paddingTop: 10,
fontSize: 24,
},
columnOf: {
paddingRight: 20,
paddingLeft: 20,
justifyContent: 'center',
},
textdesc: {
fontWeight: '500',
alignSelf: 'center',
textAlign: 'center',
},
textdescBold: {
fontWeight: '700',
alignSelf: 'center',
textAlign: 'center',
},
textM: {
fontSize: 50,
fontWeight: '700',
},
textOf: {
fontSize: 30,
color: '#9AA0AA',
},
textHeader: {
fontSize: 18,
fontWeight: 'bold',
},
textSubtitle: {
fontSize: 13,
fontWeight: '500',
marginTop: 4,
},
imageWrapper: {
borderWidth: 0,
flexDirection: 'row',
height: 160,
},
rowCenter: {
flexDirection: 'row',
justifyContent: 'center',
paddingVertical: 40,
},
});
WalletsAddMultisig.getCurrentFormatReadable = f => {
switch (f) {
case MultisigHDWallet.FORMAT_P2WSH:
return loc.multisig.native_segwit_title;
case MultisigHDWallet.FORMAT_P2SH_P2WSH:
case MultisigHDWallet.FORMAT_P2SH_P2WSH_ALT:
return loc.multisig.wrapped_segwit_title;
case MultisigHDWallet.FORMAT_P2SH:
return loc.multisig.legacy_title;
default:
throw new Error('This should never happen');
}
};
WalletsAddMultisig.navigationOptions = () => ({
...BlueNavigationStyle(),
headerTitle: null,
});
export default WalletsAddMultisig;