mirror of
https://github.com/AyuGram/AyuGramDesktop.git
synced 2025-06-05 06:33:57 +02:00
Added initial click handler to boosts list in boosts info.
This commit is contained in:
parent
01573af0de
commit
e9a8acdc54
3 changed files with 29 additions and 13 deletions
|
@ -9,7 +9,11 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||||
|
|
||||||
#include "api/api_premium.h"
|
#include "api/api_premium.h"
|
||||||
#include "api/api_statistics.h"
|
#include "api/api_statistics.h"
|
||||||
|
#include "boxes/gift_premium_box.h"
|
||||||
#include "boxes/peers/edit_peer_invite_link.h"
|
#include "boxes/peers/edit_peer_invite_link.h"
|
||||||
|
#include "data/data_peer.h"
|
||||||
|
#include "data/data_session.h"
|
||||||
|
#include "data/data_user.h"
|
||||||
#include "info/boosts/create_giveaway_box.h"
|
#include "info/boosts/create_giveaway_box.h"
|
||||||
#include "info/boosts/info_boosts_widget.h"
|
#include "info/boosts/info_boosts_widget.h"
|
||||||
#include "info/info_controller.h"
|
#include "info/info_controller.h"
|
||||||
|
@ -268,8 +272,20 @@ void InnerWidget::fill() {
|
||||||
::Settings::AddSkip(inner);
|
::Settings::AddSkip(inner);
|
||||||
|
|
||||||
if (status.firstSlice.total > 0) {
|
if (status.firstSlice.total > 0) {
|
||||||
|
auto boostClicked = [=](const Data::Boost &boost) {
|
||||||
|
if (!boost.giftCodeLink.slug.isEmpty()) {
|
||||||
|
ResolveGiftCode(_controller, boost.giftCodeLink.slug);
|
||||||
|
} else if (boost.userId) {
|
||||||
|
const auto user = _peer->owner().user(boost.userId);
|
||||||
|
crl::on_main(this, [=] {
|
||||||
|
_controller->showPeerInfo(user);
|
||||||
|
});
|
||||||
|
} else if (!boost.isUnclaimed) {
|
||||||
|
_show->showToast(tr::lng_boosts_list_pending_about(tr::now));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
::Settings::AddSkip(inner);
|
::Settings::AddSkip(inner);
|
||||||
using PeerPtr = not_null<PeerData*>;
|
|
||||||
const auto header = inner->add(
|
const auto header = inner->add(
|
||||||
object_ptr<Statistic::Header>(inner),
|
object_ptr<Statistic::Header>(inner),
|
||||||
st::statisticsLayerMargins
|
st::statisticsLayerMargins
|
||||||
|
@ -283,7 +299,7 @@ void InnerWidget::fill() {
|
||||||
Statistics::AddBoostsList(
|
Statistics::AddBoostsList(
|
||||||
status.firstSlice,
|
status.firstSlice,
|
||||||
inner,
|
inner,
|
||||||
[=](PeerPtr p) { _controller->showPeerInfo(p); },
|
std::move(boostClicked),
|
||||||
_peer,
|
_peer,
|
||||||
tr::lng_boosts_title());
|
tr::lng_boosts_title());
|
||||||
::Settings::AddSkip(inner);
|
::Settings::AddSkip(inner);
|
||||||
|
|
|
@ -31,6 +31,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||||
namespace Info::Statistics {
|
namespace Info::Statistics {
|
||||||
namespace {
|
namespace {
|
||||||
|
|
||||||
|
using BoostCallback = Fn<void(const Data::Boost &)>;
|
||||||
constexpr auto kColorIndexUnclaimed = int(3);
|
constexpr auto kColorIndexUnclaimed = int(3);
|
||||||
constexpr auto kColorIndexPending = int(4);
|
constexpr auto kColorIndexPending = int(4);
|
||||||
|
|
||||||
|
@ -104,7 +105,7 @@ struct MembersDescriptor final {
|
||||||
|
|
||||||
struct BoostsDescriptor final {
|
struct BoostsDescriptor final {
|
||||||
Data::BoostsListSlice firstSlice;
|
Data::BoostsListSlice firstSlice;
|
||||||
Fn<void(not_null<PeerData*>)> showPeerInfo;
|
BoostCallback boostClickedCallback;
|
||||||
not_null<PeerData*> peer;
|
not_null<PeerData*> peer;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -501,7 +502,7 @@ private:
|
||||||
void applySlice(const Data::BoostsListSlice &slice);
|
void applySlice(const Data::BoostsListSlice &slice);
|
||||||
|
|
||||||
const not_null<Main::Session*> _session;
|
const not_null<Main::Session*> _session;
|
||||||
Fn<void(not_null<PeerData*>)> _showPeerInfo;
|
BoostCallback _boostClickedCallback;
|
||||||
|
|
||||||
Api::Boosts _api;
|
Api::Boosts _api;
|
||||||
Data::BoostsListSlice _firstSlice;
|
Data::BoostsListSlice _firstSlice;
|
||||||
|
@ -516,7 +517,7 @@ private:
|
||||||
|
|
||||||
BoostsController::BoostsController(BoostsDescriptor d)
|
BoostsController::BoostsController(BoostsDescriptor d)
|
||||||
: _session(&d.peer->session())
|
: _session(&d.peer->session())
|
||||||
, _showPeerInfo(std::move(d.showPeerInfo))
|
, _boostClickedCallback(std::move(d.boostClickedCallback))
|
||||||
, _api(d.peer)
|
, _api(d.peer)
|
||||||
, _firstSlice(std::move(d.firstSlice)) {
|
, _firstSlice(std::move(d.firstSlice)) {
|
||||||
PeerListController::setStyleOverrides(&st::boostsListBox);
|
PeerListController::setStyleOverrides(&st::boostsListBox);
|
||||||
|
@ -566,11 +567,9 @@ void BoostsController::applySlice(const Data::BoostsListSlice &slice) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void BoostsController::rowClicked(not_null<PeerListRow*> row) {
|
void BoostsController::rowClicked(not_null<PeerListRow*> row) {
|
||||||
if (!row->special()) {
|
if (_boostClickedCallback) {
|
||||||
crl::on_main([=, peer = row->peer()] {
|
_boostClickedCallback(
|
||||||
_showPeerInfo(peer);
|
static_cast<const BoostRow*>(row.get())->boost());
|
||||||
});
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -677,7 +676,7 @@ void AddMembersList(
|
||||||
void AddBoostsList(
|
void AddBoostsList(
|
||||||
const Data::BoostsListSlice &firstSlice,
|
const Data::BoostsListSlice &firstSlice,
|
||||||
not_null<Ui::VerticalLayout*> container,
|
not_null<Ui::VerticalLayout*> container,
|
||||||
Fn<void(not_null<PeerData*>)> showPeerInfo,
|
BoostCallback boostClickedCallback,
|
||||||
not_null<PeerData*> peer,
|
not_null<PeerData*> peer,
|
||||||
rpl::producer<QString> title) {
|
rpl::producer<QString> title) {
|
||||||
const auto max = firstSlice.total;
|
const auto max = firstSlice.total;
|
||||||
|
@ -688,7 +687,7 @@ void AddBoostsList(
|
||||||
BoostsController controller;
|
BoostsController controller;
|
||||||
int limit = Api::Boosts::kFirstSlice;
|
int limit = Api::Boosts::kFirstSlice;
|
||||||
};
|
};
|
||||||
auto d = BoostsDescriptor{ firstSlice, std::move(showPeerInfo), peer };
|
auto d = BoostsDescriptor{ firstSlice, boostClickedCallback, peer };
|
||||||
const auto state = container->lifetime().make_state<State>(std::move(d));
|
const auto state = container->lifetime().make_state<State>(std::move(d));
|
||||||
|
|
||||||
state->delegate.setContent(container->add(
|
state->delegate.setContent(container->add(
|
||||||
|
|
|
@ -14,6 +14,7 @@ class VerticalLayout;
|
||||||
} // namespace Ui
|
} // namespace Ui
|
||||||
|
|
||||||
namespace Data {
|
namespace Data {
|
||||||
|
struct Boost;
|
||||||
struct BoostsListSlice;
|
struct BoostsListSlice;
|
||||||
struct PublicForwardsSlice;
|
struct PublicForwardsSlice;
|
||||||
struct SupergroupStatistics;
|
struct SupergroupStatistics;
|
||||||
|
@ -38,7 +39,7 @@ void AddMembersList(
|
||||||
void AddBoostsList(
|
void AddBoostsList(
|
||||||
const Data::BoostsListSlice &firstSlice,
|
const Data::BoostsListSlice &firstSlice,
|
||||||
not_null<Ui::VerticalLayout*> container,
|
not_null<Ui::VerticalLayout*> container,
|
||||||
Fn<void(not_null<PeerData*>)> showPeerInfo,
|
Fn<void(const Data::Boost &)> boostClickedCallback,
|
||||||
not_null<PeerData*> peer,
|
not_null<PeerData*> peer,
|
||||||
rpl::producer<QString> title);
|
rpl::producer<QString> title);
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue