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, st::defaultInputField,
tr::lng_contact_phone(), tr::lng_contact_phone(),
Countries::ExtractPhoneCode(session->user()->phone()), Countries::ExtractPhoneCode(session->user()->phone()),
phone) phone,
[](const QString &s) { return Countries::Groups(s); })
, _invertOrder(langFirstNameGoesSecond()) { , _invertOrder(langFirstNameGoesSecond()) {
if (!phone.isEmpty()) { if (!phone.isEmpty()) {
_phone->setDisabled(true); _phone->setDisabled(true);

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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