Telegram Web K with changes to work inside I2P
https://web.telegram.i2p/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
69 lines
2.3 KiB
69 lines
2.3 KiB
/* |
|
* https://github.com/morethanwords/tweb |
|
* Copyright (C) 2019-2021 Eduard Kuzmenko |
|
* https://github.com/morethanwords/tweb/blob/master/LICENSE |
|
*/ |
|
|
|
import PopupElement from '.'; |
|
import placeCaretAtEnd from '../../helpers/dom/placeCaretAtEnd'; |
|
import {AccountPassword, AccountTmpPassword} from '../../layer'; |
|
import {InputState} from '../inputField'; |
|
import PasswordInputField from '../passwordInputField'; |
|
import {SettingSection} from '../sidebarLeft'; |
|
import {PaymentButton} from './payment'; |
|
|
|
export default class PopupPaymentCardConfirmation extends PopupElement<{ |
|
finish: (tmpPassword: AccountTmpPassword) => void |
|
}> { |
|
constructor(card: string, passwordState: AccountPassword) { |
|
super('popup-payment popup-payment-card-confirmation', { |
|
closable: true, |
|
overlayClosable: true, |
|
body: true, |
|
scrollable: true, |
|
title: 'Checkout.PasswordEntry.Title' |
|
}); |
|
|
|
const section = new SettingSection({noDelimiter: true, noShadow: true, caption: 'Checkout.PasswordEntry.Text', captionArgs: [card]}); |
|
const passwordInputField = new PasswordInputField({labelText: passwordState.hint}); |
|
section.content.append(passwordInputField.container); |
|
this.scrollable.append(section.container); |
|
|
|
const onInput = () => { |
|
payButton.disabled = !passwordInputField.value; |
|
passwordInputField.setState(InputState.Neutral); |
|
}; |
|
|
|
passwordInputField.input.addEventListener('input', onInput); |
|
|
|
const payButton = PaymentButton({ |
|
key: 'Checkout.PasswordEntry.Pay', |
|
onClick: async() => { |
|
try { |
|
const inputCheckPassword = await this.managers.passwordManager.getInputCheckPassword(passwordInputField.value, passwordState); |
|
const tmpPassword = await this.managers.apiManager.invokeApi('account.getTmpPassword', { |
|
password: inputCheckPassword, |
|
period: 60 |
|
}); |
|
|
|
this.dispatchEvent('finish', tmpPassword); |
|
this.hide(); |
|
} catch(err) { |
|
if((err as ApiError).type === 'PASSWORD_HASH_INVALID') { |
|
(err as ApiError).handled = true; |
|
passwordInputField.setError('PASSWORD_HASH_INVALID'); |
|
} |
|
|
|
throw err; |
|
} |
|
} |
|
}); |
|
this.body.append(this.btnConfirmOnEnter = payButton); |
|
|
|
onInput(); |
|
|
|
this.show(); |
|
|
|
placeCaretAtEnd(passwordInputField.input); |
|
} |
|
}
|
|
|