Files
workavia-mail-front/lib/features/base/model/popup_menu_item_action.dart
T

109 lines
2.5 KiB
Dart

import 'package:core/presentation/extensions/color_extension.dart';
import 'package:equatable/equatable.dart';
import 'package:flutter/material.dart';
typedef OnPopupMenuActionClick = void Function(PopupMenuItemAction action);
typedef OnHoverShowSubmenu = void Function(GlobalKey key);
abstract class PopupMenuItemAction<T> with EquatableMixin {
final T action;
final String? key;
final int category;
final Widget? submenu;
PopupMenuItemAction(
this.action, {
this.key,
this.category = -1,
this.submenu,
});
@override
List<Object?> get props => [action, key, category, submenu];
String get actionName;
Color get actionNameColor => Colors.black;
EdgeInsetsGeometry get itemPadding =>
const EdgeInsets.symmetric(horizontal: 12);
void onClick(OnPopupMenuActionClick callback) => callback(this);
}
mixin OptionalPopupIcon {
String get actionIcon;
Color get actionIconColor => AppColor.steelGrayA540;
double get actionIconSize => 20.0;
}
mixin OptionalPopupSelectedIcon<T> {
String get selectedIcon;
Color get selectedIconColor => AppColor.primaryMain;
double get selectedIconSize => 16.0;
bool get isArrangeRTL => true;
}
mixin OptionalPopupHoverIcon {
String get hoverIcon;
Color get hoverIconColor => AppColor.steelGrayA540;
double get hoverIconSize => 16.0;
}
abstract class PopupMenuItemActionRequiredIcon<T> extends PopupMenuItemAction<T>
with OptionalPopupIcon, OptionalPopupHoverIcon {
PopupMenuItemActionRequiredIcon(
super.action, {
super.key,
super.category,
super.submenu,
});
}
abstract class PopupMenuItemActionRequiredSelectedIcon<T>
extends PopupMenuItemAction<T> with OptionalPopupSelectedIcon<T> {
final T? selectedAction;
PopupMenuItemActionRequiredSelectedIcon(
super.action,
this.selectedAction, {
super.key,
super.category,
super.submenu,
});
}
abstract class PopupMenuItemActionRequiredFull<T> extends PopupMenuItemAction<T>
with OptionalPopupIcon, OptionalPopupSelectedIcon<T> {
final T selectedAction;
PopupMenuItemActionRequiredFull(
super.action,
this.selectedAction, {
super.key,
super.category,
super.submenu,
});
}
abstract class PopupMenuItemActionRequiredIconWithMultipleSelected<T>
extends PopupMenuItemAction<T>
with OptionalPopupIcon, OptionalPopupSelectedIcon<T> {
final List<T> selectedActions;
PopupMenuItemActionRequiredIconWithMultipleSelected(
super.action,
this.selectedActions, {
super.key,
super.category,
super.submenu,
});
}