TF-3002 [WEB] Add delete button in search filters

This commit is contained in:
dab246
2024-09-12 21:31:44 +07:00
committed by Dat H. Pham
parent 8290025c14
commit e6eeabedee
9 changed files with 175 additions and 54 deletions
@@ -15,6 +15,7 @@ typedef OnSelectSearchFilterAction = Function(
BuildContext context,
QuickSearchFilter searchFilter,
{RelativeRect? buttonPosition});
typedef OnDeleteSearchFilterAction = Function(QuickSearchFilter searchFilter);
class SearchFilterButton extends StatelessWidget {
@@ -32,7 +33,9 @@ class SearchFilterButton extends StatelessWidget {
final UserName? userName;
final PresentationMailbox? mailbox;
final Color? backgroundColor;
final EdgeInsetsGeometry? buttonPadding;
final OnSelectSearchFilterAction? onSelectSearchFilterAction;
final OnDeleteSearchFilterAction? onDeleteSearchFilterAction;
const SearchFilterButton({
super.key,
@@ -48,7 +51,9 @@ class SearchFilterButton extends StatelessWidget {
this.userName,
this.mailbox,
this.backgroundColor,
this.buttonPadding,
this.onSelectSearchFilterAction,
this.onDeleteSearchFilterAction,
});
@override
@@ -69,8 +74,7 @@ class SearchFilterButton extends StatelessWidget {
decoration: BoxDecoration(
borderRadius: SearchFilterButtonStyle.borderRadius,
color: backgroundColor ?? searchFilter.getBackgroundColor(isFilterSelected: isSelected)),
padding: SearchFilterButtonStyle.buttonPadding,
height: SearchFilterButtonStyle.buttonSize,
padding: buttonPadding ?? SearchFilterButtonStyle.getButtonPadding(isSelected),
child: Row(
mainAxisSize: MainAxisSize.min,
children: [
@@ -104,9 +108,9 @@ class SearchFilterButton extends StatelessWidget {
icon: imagePaths.icDeleteSelection,
iconSize: SearchFilterButtonStyle.deleteIconSize,
iconColor: AppColor.colorTextBody,
padding: EdgeInsets.zero,
padding: const EdgeInsets.all(8),
backgroundColor: Colors.transparent,
margin: SearchFilterButtonStyle.elementPadding,
onTapActionCallback: () => onDeleteSearchFilterAction?.call(searchFilter),
),
]
)
@@ -70,16 +70,19 @@ class SearchInputFormWidget extends StatelessWidget with AppLoaderMixin {
QuickSearchFilter.last7Days,
QuickSearchFilter.fromMe,
],
actionButtonBuilder: (context, filterAction) {
actionButtonBuilder: (context, filterAction, suggestionsListState) {
if (filterAction is QuickSearchFilter) {
return buildListButtonForQuickSearchForm(context, filterAction);
return buildListButtonForQuickSearchForm(
context,
filterAction,
suggestionsListState);
} else {
return const SizedBox.shrink();
}
},
buttonActionCallback: (filterAction) {
if (filterAction is QuickSearchFilter) {
_dashBoardController.addFilterToSuggestionForm(filterAction);
_searchController.addQuickSearchFilterToSuggestionSearchView(filterAction);
}
},
listActionPadding: const EdgeInsets.only(left: 12, right: 12, top: 12, bottom: 6),
@@ -94,7 +97,7 @@ class SearchInputFormWidget extends StatelessWidget with AppLoaderMixin {
)
)
),
buttonShowAllResult: (context, keyword) {
buttonShowAllResult: (context, keyword, _) {
if (keyword is String) {
return _buildShowAllResultButton(context, keyword);
} else {
@@ -221,7 +224,11 @@ class SearchInputFormWidget extends StatelessWidget with AppLoaderMixin {
);
}
Widget buildListButtonForQuickSearchForm(BuildContext context, QuickSearchFilter searchFilter) {
Widget buildListButtonForQuickSearchForm(
BuildContext context,
QuickSearchFilter searchFilter,
SuggestionsListState suggestionsListState
) {
return Obx(() {
final isSelected = searchFilter.isApplied(_searchController.listFilterOnSuggestionForm);
@@ -230,6 +237,10 @@ class SearchInputFormWidget extends StatelessWidget with AppLoaderMixin {
imagePaths: _imagePaths,
isSelected: isSelected,
backgroundColor: searchFilter.getSuggestionBackgroundColor(isFilterSelected: isSelected),
onDeleteSearchFilterAction: (searchFilter) {
_searchController.deleteQuickSearchFilterFromSuggestionSearchView(searchFilter);
suggestionsListState.invalidateSuggestions();
},
);
});
}