import { systemPreferences } from '@electron/remote'; import { Component } from 'react'; import { observer } from 'mobx-react'; import { defineMessages, injectIntl, WrappedComponentProps } from 'react-intl'; import { noop } from 'lodash'; import Form from '../../lib/Form'; import Input from '../ui/input/index'; import Button from '../ui/button'; import { H1 } from '../ui/headline'; import { isMac } from '../../environment'; const messages = defineMessages({ headline: { id: 'locked.headline', defaultMessage: 'Locked', }, touchId: { id: 'locked.touchId', defaultMessage: 'Unlock with Touch ID', }, passwordLabel: { id: 'locked.password.label', defaultMessage: 'Password', }, submitButtonLabel: { id: 'locked.submit.label', defaultMessage: 'Unlock', }, unlockWithPassword: { id: 'locked.unlockWithPassword', defaultMessage: 'Unlock with Password', }, invalidCredentials: { id: 'locked.invalidCredentials', defaultMessage: 'Password invalid', }, }); interface IProps extends WrappedComponentProps { onSubmit: (...args: any[]) => void; unlock: () => void; isSubmitting: boolean; useTouchIdToUnlock: boolean; error: boolean; } @observer class Locked extends Component { form: Form; constructor(props: IProps) { super(props); this.form = new Form({ fields: { password: { label: this.props.intl.formatMessage(messages.passwordLabel), value: '', type: 'password', }, }, }); } submit(e) { e.preventDefault(); this.form.submit({ onSuccess: form => { this.props.onSubmit(form.values()); }, onError: noop, }); } touchIdUnlock() { const { intl } = this.props; systemPreferences .promptTouchID(intl.formatMessage(messages.touchId)) .then(() => { this.props.unlock(); }); } render() { const { form } = this; const { isSubmitting, error, useTouchIdToUnlock, intl } = this.props; const touchIdEnabled = isMac ? useTouchIdToUnlock && systemPreferences.canPromptTouchID() : false; const submitButtonLabel = touchIdEnabled ? intl.formatMessage(messages.unlockWithPassword) : intl.formatMessage(messages.submitButtonLabel); return (
this.submit(e)}>

{intl.formatMessage(messages.headline)}

{touchIdEnabled && ( <>
); } } export default injectIntl(Locked);