lbry-desktop/ui/modal/modalWalletUnlock/view.jsx

102 lines
2.9 KiB
React
Raw Normal View History

2018-07-18 21:48:30 +02:00
// @flow
import React from 'react';
2019-02-13 17:27:20 +01:00
import { Form, FormField } from 'component/common/form';
2018-07-18 21:48:30 +02:00
import { Modal } from 'modal/modal';
import Button from 'component/button';
2019-08-28 04:35:07 +02:00
import { getSavedPassword, setSavedPassword } from 'util/saved-passwords';
2018-07-18 21:48:30 +02:00
type Props = {
quit: () => void,
2019-01-19 19:54:06 +01:00
closeModal: () => void,
unlockWallet: (?string) => void,
2018-07-18 21:48:30 +02:00
walletUnlockSucceded: boolean,
2019-10-22 02:12:43 +02:00
shouldTryWithBlankPassword: boolean,
2018-07-18 21:48:30 +02:00
};
2019-03-18 06:09:50 +01:00
type State = {
password: string,
2019-08-20 14:29:59 +02:00
rememberPassword: boolean,
2019-03-18 06:09:50 +01:00
};
class ModalWalletUnlock extends React.PureComponent<Props, State> {
2018-07-18 21:48:30 +02:00
state = {
2019-03-18 06:09:50 +01:00
password: '',
2019-08-20 14:29:59 +02:00
rememberPassword: false,
2018-07-18 21:48:30 +02:00
};
2019-08-28 04:35:07 +02:00
componentDidMount() {
2019-10-22 02:12:43 +02:00
const { unlockWallet, shouldTryWithBlankPassword } = this.props;
2019-10-04 18:56:09 +02:00
2019-10-22 02:12:43 +02:00
getSavedPassword().then(p => {
if (p !== null) {
this.setState({ password: p, rememberPassword: true });
unlockWallet(p);
} else if (shouldTryWithBlankPassword) {
unlockWallet('');
}
});
2019-08-28 04:35:07 +02:00
}
2018-07-18 21:48:30 +02:00
componentDidUpdate() {
const { props } = this;
if (props.walletUnlockSucceded === true) {
setSavedPassword(this.state.password, this.state.rememberPassword);
2018-07-18 21:48:30 +02:00
props.closeModal();
}
}
2019-03-18 06:09:50 +01:00
onChangePassword(event: SyntheticInputEvent<*>) {
2018-07-18 21:48:30 +02:00
this.setState({ password: event.target.value });
}
2019-08-20 14:29:59 +02:00
onChangeRememberPassword(event: SyntheticInputEvent<>) {
this.setState({ rememberPassword: event.target.checked });
}
2018-07-18 21:48:30 +02:00
render() {
const { quit, unlockWallet, walletUnlockSucceded } = this.props;
2018-07-18 21:48:30 +02:00
2019-08-20 14:29:59 +02:00
const { password, rememberPassword } = this.state;
2018-07-18 21:48:30 +02:00
return (
<Modal
isOpen
2020-08-26 22:28:33 +02:00
title={__('Unlock wallet')}
contentLabel={__('Unlock wallet')}
2019-03-20 22:43:00 +01:00
type="confirm"
shouldCloseOnOverlayClick={false}
2018-07-18 21:48:30 +02:00
confirmButtonLabel={__('Unlock')}
abortButtonLabel={__('Exit')}
onConfirmed={() => unlockWallet(password)}
onAborted={quit}
>
<p>
{__('Your wallet has been encrypted with a local password. Please enter your wallet password to proceed.')}{' '}
<Button button="link" label={__('Learn more')} href="https://lbry.com/faq/wallet-encryption" />.
</p>
<Form className="section" onSubmit={() => unlockWallet(password)}>
2019-07-21 23:31:22 +02:00
<FormField
autoFocus
error={walletUnlockSucceded === false ? 'Incorrect Password' : false}
label={__('Wallet Password')}
type="password"
name="wallet-password"
onChange={event => this.onChangePassword(event)}
2019-08-20 14:29:59 +02:00
value={password || ''}
2019-07-21 23:31:22 +02:00
/>
2019-08-20 14:29:59 +02:00
<fieldset-section>
<FormField
label={__('Remember Password')}
type="checkbox"
name="wallet-remember-password"
onChange={event => this.onChangeRememberPassword(event)}
checked={rememberPassword}
/>
</fieldset-section>
2019-07-21 23:31:22 +02:00
</Form>
2018-07-18 21:48:30 +02:00
</Modal>
);
}
}
export default ModalWalletUnlock;