Add "View Discussion" button to third column.

This commit is contained in:
John Preston
2024-12-11 12:48:26 +04:00
parent 65d6636a41
commit e92270a9ab
9 changed files with 65 additions and 17 deletions
@@ -967,6 +967,8 @@ private:
not_null<UserData*> user);
Ui::MultiSlideTracker fillChannelButtons(
not_null<ChannelData*> channel);
Ui::MultiSlideTracker fillDiscussionButtons(
not_null<ChannelData*> channel);
void addReportReaction(Ui::MultiSlideTracker &tracker);
void addReportReaction(
@@ -1915,7 +1917,11 @@ void DetailsFiller::setupMainButtons() {
return fillUserButtons(user);
});
} else if (const auto channel = _peer->asChannel()) {
if (!channel->isMegagroup()) {
if (channel->isMegagroup()) {
wrapButtons([=] {
return fillDiscussionButtons(channel);
});
} else {
wrapButtons([=] {
return fillChannelButtons(channel);
});
@@ -2080,6 +2086,37 @@ Ui::MultiSlideTracker DetailsFiller::fillChannelButtons(
return tracker;
}
Ui::MultiSlideTracker DetailsFiller::fillDiscussionButtons(
not_null<ChannelData*> channel) {
using namespace rpl::mappers;
Ui::MultiSlideTracker tracker;
auto window = _controller->parentController();
auto viewDiscussionVisible = rpl::combine(
_controller->wrapValue(),
window->dialogsEntryStateValue()
) | rpl::map([=](Wrap wrap, const Dialogs::EntryState &state) {
const auto history = state.key.history();
return (wrap == Wrap::Side)
&& (state.section == Dialogs::EntryState::Section::Replies)
&& history
&& (history->peer == channel);
});
auto viewDiscussion = [=] {
window->showPeerHistory(
channel,
Window::SectionShow::Way::Forward);
};
AddMainButton(
_wrap,
tr::lng_profile_view_discussion(),
std::move(viewDiscussionVisible),
std::move(viewDiscussion),
tracker);
return tracker;
}
object_ptr<Ui::RpWidget> DetailsFiller::fill() {
Expects(!_topic || !_topic->creating());