Skip to content

Commit 2c8fce8

Browse files
author
verseles
committed
fix(sidebar): tighten recent session rows
1 parent ba81073 commit 2c8fce8

3 files changed

Lines changed: 55 additions & 8 deletions

File tree

lib/presentation/pages/chat_page/chat_page_scaffold.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -680,6 +680,7 @@ extension _ChatPageScaffold on _ChatPageState {
680680
);
681681
return SidebarSelectionIndicator(
682682
selected: isCurrentSession,
683+
padding: const EdgeInsetsDirectional.only(start: 3),
683684
child: SessionContextMenuRegion(
684685
session: session,
685686
actions: menuActions,
@@ -752,6 +753,7 @@ extension _ChatPageScaffold on _ChatPageState {
752753
session: session,
753754
actions: menuActions,
754755
surface: 'recent',
756+
compact: !isMobileLayout,
755757
iconColor: isCurrentSession
756758
? selectedForeground
757759
: colorScheme.onSurfaceVariant,

lib/presentation/widgets/session_context_menu.dart

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,18 +49,31 @@ class SessionContextMenuButton extends StatelessWidget {
4949
required this.actions,
5050
required this.surface,
5151
this.iconColor,
52+
this.compact = false,
5253
});
5354

5455
final ChatSession session;
5556
final SessionContextMenuActions actions;
5657
final String surface;
5758
final Color? iconColor;
59+
final bool compact;
5860

5961
@override
6062
Widget build(BuildContext context) {
6163
return PopupMenuButton<String>(
6264
tooltip: context.l10n.chatSessionActions,
63-
icon: Icon(Symbols.more_vert, color: iconColor),
65+
padding: compact ? EdgeInsets.zero : const EdgeInsets.all(8),
66+
icon: compact ? null : Icon(Symbols.more_vert, color: iconColor),
67+
child: compact
68+
? Semantics(
69+
button: true,
70+
label: context.l10n.chatSessionActions,
71+
child: SizedBox.square(
72+
dimension: 32,
73+
child: Icon(Symbols.more_vert, size: 20, color: iconColor),
74+
),
75+
)
76+
: null,
6477
onOpened: () =>
6578
logSessionContextMenuOpen(surface: surface, sessionId: session.id),
6679
onSelected: (value) => unawaited(

test/widget/chat_page_test.dart

Lines changed: 39 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2717,17 +2717,49 @@ void main() {
27172717
find.byKey(const ValueKey<String>('recent_session_tile_ses_recent')),
27182718
findsOneWidget,
27192719
);
2720-
expect(
2721-
find.descendant(
2722-
of: find.byKey(
2723-
const ValueKey<String>('recent_session_tile_ses_recent'),
2724-
),
2725-
matching: find.byType(SessionContextMenuButton),
2720+
final recentHeaderLeft = tester
2721+
.getTopLeft(find.text('Recent sessions'))
2722+
.dx;
2723+
final recentTitleLeft = tester
2724+
.getTopLeft(
2725+
find.byKey(
2726+
const ValueKey<String>('recent_session_title_ses_recent'),
2727+
),
2728+
)
2729+
.dx;
2730+
final recentTileHeight = tester
2731+
.getSize(
2732+
find.byKey(
2733+
const ValueKey<String>('recent_session_tile_ses_recent'),
2734+
),
2735+
)
2736+
.height;
2737+
final recentMenuButton = find.descendant(
2738+
of: find.byKey(
2739+
const ValueKey<String>('recent_session_tile_ses_recent'),
27262740
),
2727-
findsOneWidget,
2741+
matching: find.byType(SessionContextMenuButton),
27282742
);
2743+
2744+
expect(recentTitleLeft - recentHeaderLeft, greaterThanOrEqualTo(0));
2745+
expect(recentTitleLeft - recentHeaderLeft, lessThanOrEqualTo(6));
2746+
expect(recentTileHeight, lessThanOrEqualTo(50));
2747+
expect(recentMenuButton, findsOneWidget);
27292748
expect(find.text('Project A'), findsWidgets);
27302749

2750+
await tester.tap(recentMenuButton);
2751+
await tester.pumpAndSettle();
2752+
2753+
expect(find.text('Pin'), findsOneWidget);
2754+
expect(find.text('Rename'), findsOneWidget);
2755+
expect(find.text('Share'), findsOneWidget);
2756+
expect(find.text('Archive'), findsOneWidget);
2757+
expect(find.text('Fork'), findsOneWidget);
2758+
expect(find.text('Delete'), findsOneWidget);
2759+
2760+
await tester.tapAt(const Offset(10, 10));
2761+
await tester.pumpAndSettle();
2762+
27312763
await tester.tap(
27322764
find.byKey(const ValueKey<String>('recent_session_tile_ses_recent')),
27332765
buttons: kSecondaryMouseButton,

0 commit comments

Comments
 (0)