Skip to content

Commit 58f135b

Browse files
committed
topics: Add topic list page
For the topic-list page app bar, we leave out the icon "chveron_down.svg" since it's related to a new design (#1039) we haven't implemented yet. This also why "TOPICS" is not aligned to the middle part of the app bar on the message-list page. We also leave out the new topic button and topic filtering, which are out-of-scope for #1158. The topic-list implementation is quite similar to parts of inbox page and message-list page. Therefore, we structure the code to make them look similar to compare for changes side-by-side to help with reviewing what has changed. Figma design: https://www.figma.com/design/1JTNtYo9memgW7vV6d0ygq/Zulip-Mobile?node-id=6819-35869&m=dev
1 parent 1be5307 commit 58f135b

14 files changed

+750
-8
lines changed

assets/l10n/app_en.arb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -713,6 +713,10 @@
713713
"@mainMenuMyProfile": {
714714
"description": "Label for main-menu button leading to the user's own profile."
715715
},
716+
"topicsButtonLabel": "TOPICS",
717+
"@topicsButtonLabel": {
718+
"description": "Label for message list button leading to topic-list page. (Use ALL CAPS for cased alphabets: Latin, Greek, Cyrillic, etc.)"
719+
},
716720
"channelFeedButtonTooltip": "Channel feed",
717721
"@channelFeedButtonTooltip": {
718722
"description": "Tooltip for button to navigate to a given channel's feed"

lib/generated/l10n/zulip_localizations.dart

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1064,6 +1064,12 @@ abstract class ZulipLocalizations {
10641064
/// **'My profile'**
10651065
String get mainMenuMyProfile;
10661066

1067+
/// Label for message list button leading to topic-list page. (Use ALL CAPS for cased alphabets: Latin, Greek, Cyrillic, etc.)
1068+
///
1069+
/// In en, this message translates to:
1070+
/// **'TOPICS'**
1071+
String get topicsButtonLabel;
1072+
10671073
/// Tooltip for button to navigate to a given channel's feed
10681074
///
10691075
/// In en, this message translates to:

lib/generated/l10n/zulip_localizations_ar.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -584,6 +584,9 @@ class ZulipLocalizationsAr extends ZulipLocalizations {
584584
@override
585585
String get mainMenuMyProfile => 'My profile';
586586

587+
@override
588+
String get topicsButtonLabel => 'TOPICS';
589+
587590
@override
588591
String get channelFeedButtonTooltip => 'Channel feed';
589592

lib/generated/l10n/zulip_localizations_en.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -584,6 +584,9 @@ class ZulipLocalizationsEn extends ZulipLocalizations {
584584
@override
585585
String get mainMenuMyProfile => 'My profile';
586586

587+
@override
588+
String get topicsButtonLabel => 'TOPICS';
589+
587590
@override
588591
String get channelFeedButtonTooltip => 'Channel feed';
589592

lib/generated/l10n/zulip_localizations_ja.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -584,6 +584,9 @@ class ZulipLocalizationsJa extends ZulipLocalizations {
584584
@override
585585
String get mainMenuMyProfile => 'My profile';
586586

587+
@override
588+
String get topicsButtonLabel => 'TOPICS';
589+
587590
@override
588591
String get channelFeedButtonTooltip => 'Channel feed';
589592

lib/generated/l10n/zulip_localizations_nb.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -584,6 +584,9 @@ class ZulipLocalizationsNb extends ZulipLocalizations {
584584
@override
585585
String get mainMenuMyProfile => 'My profile';
586586

587+
@override
588+
String get topicsButtonLabel => 'TOPICS';
589+
587590
@override
588591
String get channelFeedButtonTooltip => 'Channel feed';
589592

lib/generated/l10n/zulip_localizations_pl.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -593,6 +593,9 @@ class ZulipLocalizationsPl extends ZulipLocalizations {
593593
@override
594594
String get mainMenuMyProfile => 'Mój profil';
595595

596+
@override
597+
String get topicsButtonLabel => 'TOPICS';
598+
596599
@override
597600
String get channelFeedButtonTooltip => 'Strumień kanału';
598601

lib/generated/l10n/zulip_localizations_ru.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -597,6 +597,9 @@ class ZulipLocalizationsRu extends ZulipLocalizations {
597597
@override
598598
String get mainMenuMyProfile => 'Мой профиль';
599599

600+
@override
601+
String get topicsButtonLabel => 'TOPICS';
602+
600603
@override
601604
String get channelFeedButtonTooltip => 'Лента канала';
602605

lib/generated/l10n/zulip_localizations_sk.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -586,6 +586,9 @@ class ZulipLocalizationsSk extends ZulipLocalizations {
586586
@override
587587
String get mainMenuMyProfile => 'Môj profil';
588588

589+
@override
590+
String get topicsButtonLabel => 'TOPICS';
591+
589592
@override
590593
String get channelFeedButtonTooltip => 'Channel feed';
591594

lib/generated/l10n/zulip_localizations_uk.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -596,6 +596,9 @@ class ZulipLocalizationsUk extends ZulipLocalizations {
596596
@override
597597
String get mainMenuMyProfile => 'Мій профіль';
598598

599+
@override
600+
String get topicsButtonLabel => 'TOPICS';
601+
599602
@override
600603
String get channelFeedButtonTooltip => 'Стрічка каналу';
601604

lib/widgets/message_list.dart

Lines changed: 35 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import 'sticky_header.dart';
2424
import 'store.dart';
2525
import 'text.dart';
2626
import 'theme.dart';
27+
import 'topic_list.dart';
2728

2829
/// Message-list styles that differ between light and dark themes.
2930
class MessageListTheme extends ThemeExtension<MessageListTheme> {
@@ -220,14 +221,40 @@ class _MessageListPageState extends State<MessageListPage> implements MessageLis
220221
removeAppBarBottomBorder = true;
221222
}
222223

223-
List<Widget>? actions;
224-
if (narrow case TopicNarrow(:final streamId)) {
225-
(actions ??= []).add(IconButton(
226-
icon: const Icon(ZulipIcons.message_feed),
227-
tooltip: zulipLocalizations.channelFeedButtonTooltip,
228-
onPressed: () => Navigator.push(context,
229-
MessageListPage.buildRoute(context: context,
230-
narrow: ChannelNarrow(streamId)))));
224+
List<Widget> actions = [];
225+
switch (narrow) {
226+
case CombinedFeedNarrow():
227+
case MentionsNarrow():
228+
case StarredMessagesNarrow():
229+
case DmNarrow():
230+
break;
231+
case ChannelNarrow(:final streamId):
232+
final designVariables = DesignVariables.of(context);
233+
final zulipLocalizations = ZulipLocalizations.of(context);
234+
actions.add(GestureDetector(
235+
onTap: () {
236+
Navigator.of(context).push(TopicListPage.buildRoute(
237+
context: context, streamId: streamId));
238+
},
239+
behavior: HitTestBehavior.opaque,
240+
child: Padding(
241+
padding: EdgeInsetsDirectional.fromSTEB(4, 8, 12, 8),
242+
child: Center(child: Text(zulipLocalizations.topicsButtonLabel,
243+
style: TextStyle(
244+
color: designVariables.icon,
245+
fontSize: 18,
246+
height: 19 / 18,
247+
// This is equivalent to css `all-small-caps`, see:
248+
// https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant-caps#all-small-caps
249+
fontFeatures: const [FontFeature.enable('c2sc'), FontFeature.enable('smcp')],
250+
).merge(weightVariableTextStyle(context, wght: 600)))))));
251+
case TopicNarrow(:final streamId):
252+
actions.add(IconButton(
253+
icon: const Icon(ZulipIcons.message_feed),
254+
tooltip: zulipLocalizations.channelFeedButtonTooltip,
255+
onPressed: () => Navigator.push(context,
256+
MessageListPage.buildRoute(context: context,
257+
narrow: ChannelNarrow(streamId)))));
231258
}
232259

233260
// Insert a PageRoot here, to provide a context that can be used for

0 commit comments

Comments
 (0)