diff --git a/env.file b/env.file index a66dad48f..71638e979 100644 --- a/env.file +++ b/env.file @@ -1,3 +1,3 @@ -SERVER_URL=https://jmap.upn.integration-open-paas.org +SERVER_URL=http://localhost DOMAIN_REDIRECT_URL=http://localhost:3000 WEB_OIDC_CLIENT_ID=teammail-web \ No newline at end of file diff --git a/lib/features/login/domain/usecases/check_oidc_is_available_interactor.dart b/lib/features/login/domain/usecases/check_oidc_is_available_interactor.dart index 89872ec78..29797f37e 100644 --- a/lib/features/login/domain/usecases/check_oidc_is_available_interactor.dart +++ b/lib/features/login/domain/usecases/check_oidc_is_available_interactor.dart @@ -13,7 +13,7 @@ class CheckOIDCIsAvailableInteractor { try { final result = await _oidcRepository.checkOIDCIsAvailable(oidcRequest); log('CheckOIDCIsAvailableInteractor::execute(): result: $result'); - return Left(CheckOIDCIsAvailableFailure('aaaa')); + return Right(CheckOIDCIsAvailableSuccess(result)); } catch (e) { log('CheckOIDCIsAvailableInteractor::execute(): ERROR: $e'); return Left(CheckOIDCIsAvailableFailure(e)); diff --git a/lib/features/mailbox/presentation/model/mailbox_actions.dart b/lib/features/mailbox/presentation/model/mailbox_actions.dart index b42c1503a..ce89a1198 100644 --- a/lib/features/mailbox/presentation/model/mailbox_actions.dart +++ b/lib/features/mailbox/presentation/model/mailbox_actions.dart @@ -7,6 +7,7 @@ import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; enum MailboxActions { create, moveEmail, + select, delete, rename, move, @@ -21,6 +22,8 @@ extension MailboxActionsExtension on MailboxActions { return AppLocalizations.of(context).mailbox_location; case MailboxActions.moveEmail: return AppLocalizations.of(context).move_message; + case MailboxActions.select: + return AppLocalizations.of(context).selectMailbox; case MailboxActions.move: return AppLocalizations.of(context).allMailboxes; default: diff --git a/lib/features/mailbox_dashboard/presentation/controller/advanced_filter_controller.dart b/lib/features/mailbox_dashboard/presentation/controller/advanced_filter_controller.dart index 2fa72f0e6..e69e393f7 100644 --- a/lib/features/mailbox_dashboard/presentation/controller/advanced_filter_controller.dart +++ b/lib/features/mailbox_dashboard/presentation/controller/advanced_filter_controller.dart @@ -4,15 +4,18 @@ import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:model/mailbox/presentation_mailbox.dart'; import 'package:tmail_ui_user/features/base/base_controller.dart'; +import 'package:tmail_ui_user/features/destination_picker/presentation/model/destination_picker_arguments.dart'; +import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_actions.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/search_controller.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/search/email_receive_time_type.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/search/search_email_filter.dart'; +import 'package:tmail_ui_user/main/routes/app_routes.dart'; +import 'package:tmail_ui_user/main/routes/route_navigation.dart'; class AdvancedFilterController extends BaseController { final dateFilterSelectedFormAdvancedSearch = EmailReceiveTimeType.allTime.obs; - final mailboxFilterSelectedFormAdvancedSearch = Rxn(); final hasAttachment = false.obs; TextEditingController fromFilterInputController = TextEditingController(); @@ -34,34 +37,66 @@ class AdvancedFilterController extends BaseController { cleanSearchFilter() { _searchController.cleanSearchFilter(); + dateFilterSelectedFormAdvancedSearch.value = EmailReceiveTimeType.allTime; + fromFilterInputController.text = ''; + toFilterInputController.text = ''; + subjectFilterInputController.text = ''; + hasKeyWordFilterInputController.text = ''; + notKeyWordFilterInputController.text = ''; + dateFilterInputController.text = ''; + hasAttachment.value = false; + _searchController.isAdvancedSearchHasApply.isFalse; + _searchController.isAdvancedSearchViewOpen.toggle(); } void _updateFilterEmailFromAdvancedSearchView() { if (fromFilterInputController.text.isNotEmpty) { - _searchEmailFilter.from.add(fromFilterInputController.text); + _searchController.updateFilterEmail(from: fromFilterInputController.text.split(',').toSet()); } if (toFilterInputController.text.isNotEmpty) { - _searchEmailFilter.to.add(toFilterInputController.text); + _searchController.updateFilterEmail(to: toFilterInputController.text.split(',').toSet()); } - _searchController.searchEmailFilter.value = _searchEmailFilter.copyWith( + + _searchController.updateFilterEmail( subject: StringConvert.writeEmptyToNull(subjectFilterInputController.text), hasKeyword: Wrapped.value( StringConvert.writeEmptyToNull(hasKeyWordFilterInputController.text)), notKeyword: Wrapped.value( - StringConvert.writeNullToEmpty(notKeyWordFilterInputController.text)), - mailbox: mailboxFilterSelectedFormAdvancedSearch.value, + StringConvert.writeEmptyToNull(notKeyWordFilterInputController.text)), emailReceiveTimeType: dateFilterSelectedFormAdvancedSearch.value, hasAttachment: hasAttachment.value, ); } + Future selectedMailBox() async{ + final PresentationMailbox destinationMailbox = await push( + AppRoutes.DESTINATION_PICKER, + arguments: DestinationPickerArguments(_mailboxDashBoardController.accountId.value!, MailboxActions.moveEmail)); + _searchController.updateFilterEmail(mailbox: destinationMailbox); + mailBoxFilterInputController.text = StringConvert.writeNullToEmpty(destinationMailbox.name?.name); + } + applyAdvancedSearchFilter(BuildContext context){ _updateFilterEmailFromAdvancedSearchView(); _mailboxDashBoardController.searchEmail(context, StringConvert.writeNullToEmpty(_searchEmailFilter.text?.value)); + _searchController.isAdvancedSearchViewOpen.toggle(); + _searchController.isAdvancedSearchHasApply.value = _checkAdvancedSearchHasApply(); + } + + bool _checkAdvancedSearchHasApply() { + return fromFilterInputController.text.isNotEmpty || + toFilterInputController.text.isNotEmpty || + subjectFilterInputController.text.isNotEmpty || + hasKeyWordFilterInputController.text.isNotEmpty || + notKeyWordFilterInputController.text.isNotEmpty || + dateFilterInputController.text.isNotEmpty || + mailBoxFilterInputController.text.isNotEmpty || + hasAttachment.isFalse; } initSearchFilterField(BuildContext context) { - fromFilterInputController.text = StringConvert.writeNullToEmpty(_searchEmailFilter.from.firstOrNull); + _searchController.updateFilterEmail(mailbox: _mailboxDashBoardController.selectedMailbox.value); + fromFilterInputController.text = StringConvert.writeNullToEmpty(_searchController.searchEmailFilter.value.from.firstOrNull); toFilterInputController.text = StringConvert.writeNullToEmpty(_searchEmailFilter.to.firstOrNull); subjectFilterInputController.text = StringConvert.writeNullToEmpty(_searchEmailFilter.subject); hasKeyWordFilterInputController.text = StringConvert.writeNullToEmpty(_searchEmailFilter.hasKeyword); @@ -69,18 +104,15 @@ class AdvancedFilterController extends BaseController { dateFilterInputController.text = StringConvert.writeNullToEmpty(_searchEmailFilter.emailReceiveTimeType.getTitle(context)); mailBoxFilterInputController.text = StringConvert.writeNullToEmpty(_searchEmailFilter.mailbox?.name?.name); dateFilterSelectedFormAdvancedSearch.value = _searchEmailFilter.emailReceiveTimeType; - mailboxFilterSelectedFormAdvancedSearch.value = _searchEmailFilter.mailbox; hasAttachment.value = _searchEmailFilter.hasAttachment; } @override void onDone() { - // TODO: implement onDone } @override void onError(error) { - // TODO: implement onError } @override diff --git a/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart b/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart index 4274fcb40..14398d844 100644 --- a/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart +++ b/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart @@ -243,6 +243,7 @@ class MailboxDashBoardController extends ReloadableController { void setNewFirstSelectedMailbox(PresentationMailbox? newPresentationMailbox) { selectedMailbox.firstRebuild = true; selectedMailbox.value = newPresentationMailbox; + } void setSelectedEmail(PresentationEmail? newPresentationEmail) { diff --git a/lib/features/mailbox_dashboard/presentation/controller/search_controller.dart b/lib/features/mailbox_dashboard/presentation/controller/search_controller.dart index e62a3cf72..f2fe9321b 100644 --- a/lib/features/mailbox_dashboard/presentation/controller/search_controller.dart +++ b/lib/features/mailbox_dashboard/presentation/controller/search_controller.dart @@ -38,6 +38,7 @@ class SearchController extends BaseController { final accountId = Rxn(); final userProfile = Rxn(); final isAdvancedSearchViewOpen = false.obs; + final isAdvancedSearchHasApply = false.obs; final dateFilterSelectedFormAdvancedSearch = EmailReceiveTimeType.allTime.obs; final mailboxFilterSelectedFormAdvancedSearch = Rxn(); final hasAttachment = false.obs; @@ -144,11 +145,11 @@ class SearchController extends BaseController { searchFocus.addListener(() { final hasFocus = searchFocus.hasFocus; final query = searchEmailFilter.value.text?.value; - log('MailboxDashBoardController::_registerSearchFocusListener(): hasFocus: $hasFocus | query: $query'); - if (!hasFocus && (query == null || query.isEmpty)) { + log('SearchController::_registerSearchFocusListener(): hasFocus: $hasFocus | query: $query'); + if (!hasFocus && (query == null || query.isEmpty) && isAdvancedSearchHasApply.isFalse) { updateFilterEmail(text: SearchQuery.initial()); searchInputController.clear(); - cleanSearchFilter(); + cleanSearchFilter(); searchFocus.unfocus(); } }); @@ -165,7 +166,6 @@ class SearchController extends BaseController { searchState.value = searchState.value.disableSearchState(); updateFilterEmail(text: SearchQuery.initial()); searchInputController.clear(); - cleanSearchFilter(); searchFocus.unfocus(); } diff --git a/lib/features/mailbox_dashboard/presentation/mailbox_dashboard_view_web.dart b/lib/features/mailbox_dashboard/presentation/mailbox_dashboard_view_web.dart index 85d1fbae1..21c530db8 100644 --- a/lib/features/mailbox_dashboard/presentation/mailbox_dashboard_view_web.dart +++ b/lib/features/mailbox_dashboard/presentation/mailbox_dashboard_view_web.dart @@ -433,6 +433,7 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView { textFieldConfiguration: QuickSearchTextFieldConfiguration( controller: controller.searchController.searchInputController, autofocus: true, + enabled: controller.searchController.isAdvancedSearchViewOpen.isFalse, focusNode: controller.searchController.searchFocus, textInputAction: TextInputAction.done, onSubmitted: (keyword) { diff --git a/lib/features/mailbox_dashboard/presentation/widgets/advanced_search/advanced_search_filter_form.dart b/lib/features/mailbox_dashboard/presentation/widgets/advanced_search/advanced_search_filter_form.dart index f8ea6b238..89f6ac7c3 100644 --- a/lib/features/mailbox_dashboard/presentation/widgets/advanced_search/advanced_search_filter_form.dart +++ b/lib/features/mailbox_dashboard/presentation/widgets/advanced_search/advanced_search_filter_form.dart @@ -20,7 +20,6 @@ class AdvancedSearchInputForm extends GetWidget @override Widget build(BuildContext context) { - controller.initSearchFilterField(context); return Material( color: Colors.white, child: Column( @@ -55,6 +54,9 @@ class AdvancedSearchInputForm extends GetWidget context: context, advancedSearchFilterField: AdvancedSearchFilterField.mailBox, isSelectFormList: true, + onTap: () async { + await controller.selectedMailBox(); + } ), _buildFilterField( textEditingController: controller.dateFilterInputController, diff --git a/lib/features/mailbox_dashboard/presentation/widgets/advanced_search/advanced_search_filter_form_bottom_view.dart b/lib/features/mailbox_dashboard/presentation/widgets/advanced_search/advanced_search_filter_form_bottom_view.dart index 5678deb53..4402ca433 100644 --- a/lib/features/mailbox_dashboard/presentation/widgets/advanced_search/advanced_search_filter_form_bottom_view.dart +++ b/lib/features/mailbox_dashboard/presentation/widgets/advanced_search/advanced_search_filter_form_bottom_view.dart @@ -31,6 +31,7 @@ class AdvancedSearchFilterFormBottomView _buildButton( onAction: () { controller.cleanSearchFilter(); + popBack(); }, colorButton: AppColor.primaryColor.withOpacity(0.14), colorText: AppColor.primaryColor, diff --git a/lib/features/mailbox_dashboard/presentation/widgets/advanced_search/drop_down_button_filter_widget.dart b/lib/features/mailbox_dashboard/presentation/widgets/advanced_search/drop_down_button_filter_widget.dart index d7b40b6f1..4afffa262 100644 --- a/lib/features/mailbox_dashboard/presentation/widgets/advanced_search/drop_down_button_filter_widget.dart +++ b/lib/features/mailbox_dashboard/presentation/widgets/advanced_search/drop_down_button_filter_widget.dart @@ -25,16 +25,6 @@ class DateDropDownButton extends GetWidget { } } -class MailBoxDropDownButton extends StatelessWidget { - const MailBoxDropDownButton({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Container(); - } -} - - Widget _buildDropDownButton({ required List items, required T itemSelected, diff --git a/lib/features/mailbox_dashboard/presentation/widgets/advanced_search/icon_open_advanced_search_widget.dart b/lib/features/mailbox_dashboard/presentation/widgets/advanced_search/icon_open_advanced_search_widget.dart index 9dd9bf9fa..ad354f92a 100644 --- a/lib/features/mailbox_dashboard/presentation/widgets/advanced_search/icon_open_advanced_search_widget.dart +++ b/lib/features/mailbox_dashboard/presentation/widgets/advanced_search/icon_open_advanced_search_widget.dart @@ -4,6 +4,7 @@ import 'package:core/presentation/views/button/icon_button_web.dart'; import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; import 'package:get/get.dart'; +import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/advanced_filter_controller.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/search_controller.dart'; class IconOpenAdvancedSearchWidget extends StatelessWidget { @@ -13,7 +14,8 @@ class IconOpenAdvancedSearchWidget extends StatelessWidget { }) : super(key: key); final _imagePaths = Get.find(); - final controller = Get.find(); + final SearchController searchController = Get.find(); + final AdvancedFilterController advancedFilterController = Get.find(); final BuildContext _parentContext; @override @@ -23,13 +25,16 @@ class IconOpenAdvancedSearchWidget extends StatelessWidget { minSize: 0, iconPadding: const EdgeInsets.only(right: 8), icon: SvgPicture.asset(_imagePaths.icFilterAdvanced, - color: controller.isAdvancedSearchViewOpen.isTrue + color: searchController.isAdvancedSearchViewOpen.isTrue || searchController.isAdvancedSearchHasApply.isTrue ? AppColor.colorFilterMessageEnabled : AppColor.colorFilterMessageDisabled, width: 16, height: 16), onTap: () { - controller.showAdvancedFilterView(_parentContext); + if(searchController.isAdvancedSearchViewOpen.isFalse && searchController.isAdvancedSearchHasApply.isFalse){ + advancedFilterController.initSearchFilterField(context); + } + searchController.showAdvancedFilterView(_parentContext); }), ); } diff --git a/lib/features/thread/presentation/thread_controller.dart b/lib/features/thread/presentation/thread_controller.dart index 6dc5837ee..f4223fc50 100644 --- a/lib/features/thread/presentation/thread_controller.dart +++ b/lib/features/thread/presentation/thread_controller.dart @@ -820,7 +820,9 @@ class ThreadController extends BaseController { if (_accountId != null && searchQuery != null) { searchIsActive.value = true; - searchController.updateFilterEmail(mailbox: currentMailbox); + if(searchController.isAdvancedSearchHasApply.isFalse){ + searchController.updateFilterEmail(mailbox: currentMailbox); + } consumeState(_searchEmailInteractor.execute( _accountId!, diff --git a/lib/features/thread/presentation/thread_view.dart b/lib/features/thread/presentation/thread_view.dart index 797b5d459..0cfec9a98 100644 --- a/lib/features/thread/presentation/thread_view.dart +++ b/lib/features/thread/presentation/thread_view.dart @@ -200,6 +200,7 @@ class ThreadView extends GetWidget with AppLoaderMixin, textFieldConfiguration: QuickSearchTextFieldConfiguration( controller: controller.searchController.searchInputController, autofocus: true, + enabled: controller.searchController.isAdvancedSearchViewOpen.isFalse, focusNode: controller.searchController.searchFocus, textInputAction: TextInputAction.done, onSubmitted: (keyword) { diff --git a/lib/l10n/intl_messages.arb b/lib/l10n/intl_messages.arb index 3c9154991..abf722556 100644 --- a/lib/l10n/intl_messages.arb +++ b/lib/l10n/intl_messages.arb @@ -1,5 +1,5 @@ { - "@@last_modified": "2022-06-25T22:39:15.113430", + "@@last_modified": "2022-06-26T22:28:09.520951", "initializing_data": "Initializing data...", "@initializing_data": { "type": "text", @@ -1495,5 +1495,11 @@ "type": "text", "placeholders_order": [], "placeholders": {} + }, + "selectMailbox": "Select Mailbox", + "@selectMailbox": { + "type": "text", + "placeholders_order": [], + "placeholders": {} } } \ No newline at end of file diff --git a/lib/main/localizations/app_localizations.dart b/lib/main/localizations/app_localizations.dart index 389459f37..774c48910 100644 --- a/lib/main/localizations/app_localizations.dart +++ b/lib/main/localizations/app_localizations.dart @@ -1538,4 +1538,11 @@ class AppLocalizations { name: 'advancedSearch', ); } + + String get selectMailbox { + return Intl.message( + 'Select Mailbox', + name: 'selectMailbox', + ); + } } \ No newline at end of file