TF-4229 Add quick search label filter button in dashboard view

This commit is contained in:
dab246
2026-01-05 12:20:34 +07:00
committed by Dat H. Pham
parent a35b263dca
commit cc508c210a
10 changed files with 125 additions and 38 deletions
@@ -28,6 +28,7 @@ mixin PopupContextMenuActionMixin {
required OnContextMenuActionClick onContextMenuActionClick,
Key? key,
bool useGroupedActions = false,
double? maxHeight,
}) async {
return await showModalBottomSheet(
context: context,
@@ -42,6 +43,9 @@ mixin PopupContextMenuActionMixin {
),
backgroundColor: Colors.white,
barrierColor: Colors.black.withValues(alpha: 0.2),
constraints: BoxConstraints(
maxHeight: maxHeight ?? double.infinity,
),
builder: (_) {
return PointerInterceptor(
child: Container(
@@ -63,6 +67,7 @@ mixin PopupContextMenuActionMixin {
BuildContext context,
RelativeRect position,
List<PopupMenuEntry> popupMenuItems,
{double? maxHeight}
) async {
return await showMenu(
context: context,
@@ -74,7 +79,11 @@ mixin PopupContextMenuActionMixin {
shape: const RoundedRectangleBorder(
borderRadius: BorderRadius.all(Radius.circular(6)),
),
constraints: const BoxConstraints(maxWidth: 300, minWidth: 178),
constraints: BoxConstraints(
maxWidth: 300,
minWidth: 178,
maxHeight: maxHeight ?? double.infinity,
),
items: popupMenuItems,
);
}
@@ -46,6 +46,7 @@ class _PopupMenuItemActionWidgetState extends State<PopupMenuItemActionWidget> {
Widget? iconWidget;
Widget? selectedIconWidget;
bool isSelected = false;
bool isArrangeRTL = true;
if (widget.menuAction is PopupMenuItemActionRequiredIcon) {
final specificMenuAction =
@@ -75,6 +76,7 @@ class _PopupMenuItemActionWidgetState extends State<PopupMenuItemActionWidget> {
);
isSelected =
specificMenuAction.selectedAction == widget.menuAction.action;
isArrangeRTL = specificMenuAction.isArrangeRTL;
} else if (widget.menuAction is PopupMenuItemActionRequiredFull) {
final specificMenuAction =
widget.menuAction as PopupMenuItemActionRequiredFull;
@@ -100,6 +102,7 @@ class _PopupMenuItemActionWidgetState extends State<PopupMenuItemActionWidget> {
);
isSelected =
specificMenuAction.selectedAction == widget.menuAction.action;
isArrangeRTL = specificMenuAction.isArrangeRTL;
} else if (widget.menuAction
is PopupMenuItemActionRequiredIconWithMultipleSelected) {
final specificMenuAction = widget.menuAction
@@ -126,6 +129,7 @@ class _PopupMenuItemActionWidgetState extends State<PopupMenuItemActionWidget> {
);
isSelected =
specificMenuAction.selectedActions.contains(widget.menuAction.action);
isArrangeRTL = specificMenuAction.isArrangeRTL;
}
if (widget.menuAction is PopupMenuItemEmailAction &&
@@ -217,6 +221,11 @@ class _PopupMenuItemActionWidgetState extends State<PopupMenuItemActionWidget> {
child: Row(
children: [
if (iconWidget != null) iconWidget,
if (!isArrangeRTL && selectedIconWidget != null)
Padding(
padding: const EdgeInsetsDirectional.only(end: 16),
child: selectedIconWidget,
),
Expanded(
child: Text(
widget.menuAction.actionName,
@@ -227,7 +236,7 @@ class _PopupMenuItemActionWidgetState extends State<PopupMenuItemActionWidget> {
overflow: TextOverflow.ellipsis,
),
),
if (isSelected && selectedIconWidget != null)
if (isArrangeRTL && isSelected && selectedIconWidget != null)
selectedIconWidget,
],
),