Moved out getting of phone pattern groups from PhoneInput fields.
This commit is contained in:
parent
d218b76efe
commit
77d1d9bd3a
10 changed files with 47 additions and 28 deletions
|
@ -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);
|
||||||
|
|
|
@ -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(),
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
||||||
|
|
|
@ -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(),
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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()) {
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in a new issue