laconic-wallet/src/components/HDPath.tsx
Adwait Gharpure 8ed4c33beb
Refactor code for WalletConnect Integration (#59)
* Disconnect pairing request when app is reset

* Move files to respective folders

* Add comments to describe flow

* Add new line

* remove request session context

* Fix imports

* Move hook to folder

* Add undefined type

* Move types to src

* Move util functions to correct files

* Remove typeroots from tsconfig

---------

Co-authored-by: Adw8 <adwait@deepstacksoft.com>
2024-03-18 10:57:20 +05:30

98 lines
2.7 KiB
TypeScript

import React, { useState } from 'react';
import { ScrollView, View, Text } from 'react-native';
import { Button, TextInput } from 'react-native-paper';
import { addAccountFromHDPath } from '../utils/accounts';
import { Account, PathState } from '../types';
import styles from '../styles/stylesheet';
const HDPath = ({
pathCode,
updateAccounts,
updateIndex,
hideDialog,
}: {
pathCode: string;
updateIndex: (index: number) => void;
updateAccounts: (account: Account) => void;
hideDialog: () => void;
}) => {
const [isAccountCreating, setIsAccountCreating] = useState(false);
const [path, setPath] = useState<PathState>({
firstNumber: '',
secondNumber: '',
thirdNumber: '',
});
const handleChange = (key: keyof PathState, value: string) => {
if (key === 'secondNumber' && value !== '' && !['0', '1'].includes(value)) {
return;
}
setPath({
...path,
[key]: value.replace(/[^0-9]/g, ''),
});
};
const createFromHDPathHandler = async () => {
setIsAccountCreating(true);
const hdPath =
pathCode +
`${path.firstNumber}'/${path.secondNumber}/${path.thirdNumber}`;
try {
const newAccount = await addAccountFromHDPath(hdPath);
if (newAccount) {
updateAccounts(newAccount);
updateIndex(newAccount.counterId);
hideDialog();
}
} catch (error) {
console.error('Error creating account:', error);
} finally {
setIsAccountCreating(false);
}
};
return (
<ScrollView style={styles.HDcontainer}>
<View style={styles.HDrowContainer}>
<Text style={styles.HDtext}>{pathCode}</Text>
<TextInput
keyboardType="numeric"
mode="outlined"
onChangeText={text => handleChange('firstNumber', text)}
value={path.firstNumber}
style={styles.HDtextInput}
/>
<Text style={styles.HDtext}>'/</Text>
<TextInput
keyboardType="numeric"
mode="outlined"
onChangeText={text => handleChange('secondNumber', text)}
value={path.secondNumber}
style={styles.HDtextInput}
/>
<Text style={styles.HDtext}>/</Text>
<TextInput
keyboardType="numeric"
mode="outlined"
onChangeText={text => handleChange('thirdNumber', text)}
value={path.thirdNumber}
style={styles.HDtextInput}
/>
</View>
<View style={styles.HDbuttonContainer}>
<Button
mode="contained"
onPress={createFromHDPathHandler}
loading={isAccountCreating}>
{isAccountCreating ? 'Adding' : 'Add Account'}
</Button>
</View>
</ScrollView>
);
};
export default HDPath;