Moved out getting of phone pattern groups from PhoneInput fields.

This commit is contained in:
23rd 2021-11-28 11:25:25 +03:00 committed by John Preston
parent d218b76efe
commit 77d1d9bd3a
10 changed files with 47 additions and 28 deletions

View File

@ -261,7 +261,8 @@ AddContactBox::AddContactBox(
st::defaultInputField,
tr::lng_contact_phone(),
Countries::ExtractPhoneCode(session->user()->phone()),
phone)
phone,
[](const QString &s) { return Countries::Groups(s); })
, _invertOrder(langFirstNameGoesSecond()) {
if (!phone.isEmpty()) {
_phone->setDisabled(true);

View File

@ -156,7 +156,8 @@ void ChangePhoneBox::EnterPhone::prepare() {
st::defaultInputField,
tr::lng_change_phone_new_title(),
Countries::ExtractPhoneCode(_controller->session().user()->phone()),
phoneValue);
phoneValue,
[](const QString &s) { return Countries::Groups(s); });
_phone->resize(
st::boxWidth - 2 * st::boxPadding.left(),

View File

@ -470,4 +470,12 @@ QString ExtractPhoneCode(const QString &phone) {
return Instance().format({ .phone = phone, .onlyCode = true }).code;
}
QVector<int> Groups(const QString &phone) {
return Instance().format({
.phone = phone,
.onlyGroups = true,
.incomplete = true,
}).groups;
}
} // namespace Countries

View File

@ -70,5 +70,6 @@ private:
CountriesInstance &Instance();
[[nodiscard]] QString ExtractPhoneCode(const QString &phone);
[[nodiscard]] QVector<int> Groups(const QString &phone);
} // namespace Countries

View File

@ -23,6 +23,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "ui/boxes/confirm_box.h"
#include "boxes/phone_banned_box.h"
#include "core/application.h"
#include "countries/countries_instance.h" // Countries::Groups
namespace Intro {
namespace details {
@ -44,7 +45,10 @@ PhoneWidget::PhoneWidget(
: Step(parent, account, data)
, _country(this, st::introCountry)
, _code(this, st::introCountryCode)
, _phone(this, st::introPhone)
, _phone(
this,
st::introPhone,
[](const QString &s) { return Countries::Groups(s); })
, _checkRequestTimer([=] { checkRequest(); }) {
_phone->frontBackspaceEvent(
) | rpl::start_with_next([=](not_null<QKeyEvent*> e) {

View File

@ -11,13 +11,6 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "intro/intro_step.h"
#include "base/timer.h"
namespace Ui {
class PhonePartInput;
class CountryCodeInput;
class RoundButton;
class FlatLabel;
} // namespace Ui
namespace Intro {
namespace details {

View File

@ -281,7 +281,8 @@ void PanelEditContact::setupControls(
std::move(fieldPlaceholder),
Countries::ExtractPhoneCode(
_controller->bot()->session().user()->phone()),
data);
data,
[](const QString &s) { return Countries::Groups(s); });
} else {
_field = Ui::CreateChild<Ui::MaskedInputField>(
wrap.data(),

View File

@ -407,7 +407,8 @@ struct SimpleFieldState {
st::paymentsField,
std::move(config.placeholder),
Countries::ExtractPhoneCode(config.defaultPhone),
Parse(config));
Parse(config),
[](const QString &s) { return Countries::Groups(s); });
case FieldType::Money:
return CreateMoneyField(
wrap,

View File

@ -96,8 +96,12 @@ void CountryCodeInput::correctValue(
}
}
PhonePartInput::PhonePartInput(QWidget *parent, const style::InputField &st)
: MaskedInputField(parent, st/*, tr::lng_phone_ph(tr::now)*/) {
PhonePartInput::PhonePartInput(
QWidget *parent,
const style::InputField &st,
PhonePartInput::GroupsCallback groupsCallback)
: MaskedInputField(parent, st/*, tr::lng_phone_ph(tr::now)*/)
, _groupsCallback(std::move(groupsCallback)) {
}
void PhonePartInput::paintAdditionalPlaceholder(Painter &p) {
@ -208,11 +212,7 @@ void PhonePartInput::addedToNumber(const QString &added) {
}
void PhonePartInput::chooseCode(const QString &code) {
_pattern = Countries::Instance().format({
.phone = code,
.onlyGroups = true,
.incomplete = true,
}).groups;
_pattern = _groupsCallback(code);
if (!_pattern.isEmpty() && _pattern.at(0) == code.size()) {
_pattern.pop_front();
} else {
@ -297,9 +297,11 @@ PhoneInput::PhoneInput(
const style::InputField &st,
rpl::producer<QString> placeholder,
const QString &defaultValue,
QString value)
QString value,
PhoneInput::GroupsCallback groupsCallback)
: MaskedInputField(parent, st, std::move(placeholder), value)
, _defaultValue(defaultValue) {
, _defaultValue(defaultValue)
, _groupsCallback(std::move(groupsCallback)) {
if (value.isEmpty()) {
clearText();
} else {
@ -344,11 +346,7 @@ void PhoneInput::correctValue(
int &nowCursor) {
auto digits = now;
digits.replace(QRegularExpression("[^\\d]"), QString());
_pattern = Countries::Instance().format({
.phone = digits,
.onlyGroups = true,
.incomplete = true,
}).groups;
_pattern = _groupsCallback(digits);
QString newPlaceholder;
if (_pattern.isEmpty()) {

View File

@ -42,7 +42,12 @@ private:
class PhonePartInput : public MaskedInputField {
public:
PhonePartInput(QWidget *parent, const style::InputField &st);
using GroupsCallback = Fn<QVector<int>(const QString &)>;
PhonePartInput(
QWidget *parent,
const style::InputField &st,
GroupsCallback groupsCallback);
[[nodiscard]] auto frontBackspaceEvent() const
-> rpl::producer<not_null<QKeyEvent*>> {
@ -66,6 +71,7 @@ private:
QVector<int> _pattern;
QString _additionalPlaceholder;
rpl::event_stream<not_null<QKeyEvent*>> _frontBackspaceEvent;
GroupsCallback _groupsCallback;
};
@ -95,12 +101,15 @@ private:
class PhoneInput : public MaskedInputField {
public:
using GroupsCallback = Fn<QVector<int>(const QString &)>;
PhoneInput(
QWidget *parent,
const style::InputField &st,
rpl::producer<QString> placeholder,
const QString &defaultValue,
QString value);
QString value,
GroupsCallback groupsCallback);
void clearText();
@ -119,6 +128,8 @@ private:
QVector<int> _pattern;
QString _additionalPlaceholder;
GroupsCallback _groupsCallback;
};
} // namespace Ui