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.
70 lines
2.3 KiB
70 lines
2.3 KiB
2 years ago
|
/*
|
||
|
* 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);
|
||
|
}
|
||
|
}
|