TF-2947 Update empty view also when no network connection
This commit is contained in:
committed by
Dat H. Pham
parent
b9b6d58b87
commit
a5a8d42763
@@ -50,6 +50,8 @@ import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/sear
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/search/email_sort_order_type.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/search/quick_search_filter.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/presentation/extensions/datetime_extension.dart';
|
||||
import 'package:tmail_ui_user/features/network_connection/presentation/network_connection_controller.dart'
|
||||
if (dart.library.html) 'package:tmail_ui_user/features/network_connection/presentation/web_network_connection_controller.dart';
|
||||
import 'package:tmail_ui_user/features/search/email/domain/state/refresh_changes_search_email_state.dart';
|
||||
import 'package:tmail_ui_user/features/search/email/domain/usecases/refresh_changes_search_email_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/search/email/presentation/model/search_more_state.dart';
|
||||
@@ -79,6 +81,8 @@ class SearchEmailController extends BaseController
|
||||
with EmailActionController,
|
||||
DateRangePickerMixin {
|
||||
|
||||
final networkConnectionController = Get.find<NetworkConnectionController>();
|
||||
|
||||
final QuickSearchEmailInteractor _quickSearchEmailInteractor;
|
||||
final SaveRecentSearchInteractor _saveRecentSearchInteractor;
|
||||
final GetAllRecentSearchLatestInteractor _getAllRecentSearchLatestInteractor;
|
||||
|
||||
@@ -469,6 +469,7 @@ class SearchEmailView extends GetWidget<SearchEmailController>
|
||||
(success) => success is! SearchingState
|
||||
? EmptyEmailsWidget(
|
||||
key: const Key('empty_search_email_view'),
|
||||
isNetworkConnectionAvailable: controller.networkConnectionController.isNetworkConnectionAvailable(),
|
||||
isSearchActive: true)
|
||||
: const SizedBox.shrink())
|
||||
);
|
||||
|
||||
@@ -698,6 +698,7 @@ class ThreadView extends GetWidget<ThreadController>
|
||||
} else {
|
||||
return EmptyEmailsWidget(
|
||||
key: const Key('empty_thread_view'),
|
||||
isNetworkConnectionAvailable: controller.networkConnectionController.isNetworkConnectionAvailable(),
|
||||
isSearchActive: controller.isSearchActive,
|
||||
isFilterMessageActive: controller.mailboxDashBoardController.filterMessageOption.value != FilterMessageOption.all,
|
||||
onCreateFiltersActionCallback: controller.goToCreateEmailRuleView
|
||||
|
||||
@@ -13,6 +13,7 @@ class EmptyEmailsWidget extends StatelessWidget {
|
||||
|
||||
final bool isSearchActive;
|
||||
final bool isFilterMessageActive;
|
||||
final bool isNetworkConnectionAvailable;
|
||||
final OnCreateFiltersActionCallback? onCreateFiltersActionCallback;
|
||||
|
||||
final _responsiveUtils = Get.find<ResponsiveUtils>();
|
||||
@@ -22,6 +23,7 @@ class EmptyEmailsWidget extends StatelessWidget {
|
||||
Key? key,
|
||||
this.isSearchActive = false,
|
||||
this.isFilterMessageActive = false,
|
||||
this.isNetworkConnectionAvailable = true,
|
||||
this.onCreateFiltersActionCallback,
|
||||
}) : super(key: key);
|
||||
|
||||
@@ -45,14 +47,10 @@ class EmptyEmailsWidget extends StatelessWidget {
|
||||
child: Text(
|
||||
key: const Key('empty_email_message'),
|
||||
_getMessageEmptyEmail(context),
|
||||
style: TextStyle(
|
||||
style: const TextStyle(
|
||||
color: EmptyEmailsWidgetStyles.labelTextColor,
|
||||
fontSize: _validateShowCreateRuleButton
|
||||
? EmptyEmailsWidgetStyles.createFilterLabelTextSize
|
||||
: EmptyEmailsWidgetStyles.labelTextSize,
|
||||
fontWeight: _validateShowCreateRuleButton
|
||||
? EmptyEmailsWidgetStyles.createFilterLabelFontWeight
|
||||
: EmptyEmailsWidgetStyles.labelFontWeight
|
||||
fontSize: EmptyEmailsWidgetStyles.createFilterLabelTextSize,
|
||||
fontWeight: EmptyEmailsWidgetStyles.createFilterLabelFontWeight
|
||||
),
|
||||
textAlign: TextAlign.center,
|
||||
),
|
||||
@@ -100,10 +98,14 @@ class EmptyEmailsWidget extends StatelessWidget {
|
||||
}
|
||||
}
|
||||
|
||||
bool get _validateShowCreateRuleButton =>
|
||||
!isFilterMessageActive && !isSearchActive && onCreateFiltersActionCallback != null;
|
||||
bool get _validateShowCreateRuleButton => isNetworkConnectionAvailable
|
||||
&& !isFilterMessageActive && !isSearchActive && onCreateFiltersActionCallback != null;
|
||||
|
||||
String _getMessageEmptyEmail(BuildContext context) {
|
||||
if (!isNetworkConnectionAvailable) {
|
||||
return AppLocalizations.of(context).no_internet_connection_try_again_later;
|
||||
}
|
||||
|
||||
if (isSearchActive) {
|
||||
return AppLocalizations.of(context).no_emails_matching_your_search;
|
||||
} else {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"@@last_modified": "2024-08-19T14:44:31.528161",
|
||||
"@@last_modified": "2024-08-20T10:36:35.487743",
|
||||
"initializing_data": "Initializing data...",
|
||||
"@initializing_data": {
|
||||
"type": "text",
|
||||
@@ -962,6 +962,12 @@
|
||||
"placeholders_order": [],
|
||||
"placeholders": {}
|
||||
},
|
||||
"no_internet_connection_try_again_later": "No internet connection, try again later.",
|
||||
"@no_internet_connection_try_again_later": {
|
||||
"type": "text",
|
||||
"placeholders_order": [],
|
||||
"placeholders": {}
|
||||
},
|
||||
"page_name": "Twake Mail",
|
||||
"@page_name": {
|
||||
"type": "text",
|
||||
@@ -2604,12 +2610,6 @@
|
||||
"placeholders_order": [],
|
||||
"placeholders": {}
|
||||
},
|
||||
"reduceSomeFiltersAndTryAgain": "Let's reduce some filters and try again",
|
||||
"@reduceSomeFiltersAndTryAgain": {
|
||||
"type": "text",
|
||||
"placeholders_order": [],
|
||||
"placeholders": {}
|
||||
},
|
||||
"sendMessageFailure": "Failure to send your message.",
|
||||
"@sendMessageFailure": {
|
||||
"type": "text",
|
||||
@@ -3126,18 +3126,6 @@
|
||||
"folderName": {}
|
||||
}
|
||||
},
|
||||
"folderCreatedTitle": "Your folder is just created",
|
||||
"@folderCreatedTitle": {
|
||||
"type": "text",
|
||||
"placeholders_order": [],
|
||||
"placeholders": {}
|
||||
},
|
||||
"folderCreatedMessage": "To begin using this folder, you should add some rules to organize all of your mail in your own way.",
|
||||
"@folderCreatedMessage": {
|
||||
"type": "text",
|
||||
"placeholders_order": [],
|
||||
"placeholders": {}
|
||||
},
|
||||
"createFilters": "Create filters",
|
||||
"@createFilters": {
|
||||
"type": "text",
|
||||
|
||||
@@ -998,6 +998,13 @@ class AppLocalizations {
|
||||
);
|
||||
}
|
||||
|
||||
String get no_internet_connection_try_again_later {
|
||||
return Intl.message(
|
||||
'No internet connection, try again later.',
|
||||
name: 'no_internet_connection_try_again_later'
|
||||
);
|
||||
}
|
||||
|
||||
String get page_name {
|
||||
return Intl.message(
|
||||
'Twake Mail',
|
||||
|
||||
@@ -111,5 +111,104 @@ void main() {
|
||||
emptyEmailMessageWidget.data,
|
||||
'No emails are matching your search');
|
||||
});
|
||||
|
||||
testWidgets(
|
||||
'should have message correctly and do not have CreateRuleFilter button\n'
|
||||
'when no network', (tester) async {
|
||||
final widget = makeTestableWidget(
|
||||
child: EmptyEmailsWidget(
|
||||
isNetworkConnectionAvailable: false,
|
||||
),
|
||||
);
|
||||
|
||||
await tester.pumpWidget(widget);
|
||||
|
||||
await tester.pumpAndSettle();
|
||||
|
||||
expect(
|
||||
find.byKey(const Key('create_filter_rule_button_within_empty_email')),
|
||||
findsNothing);
|
||||
|
||||
final emptyEmailMessageWidgetFinder = find.byKey(const Key('empty_email_message'));
|
||||
final emptyEmailMessageWidget = tester.widget<Text>(emptyEmailMessageWidgetFinder);
|
||||
expect(
|
||||
emptyEmailMessageWidget.data,
|
||||
'No internet connection, try again later.');
|
||||
});
|
||||
|
||||
testWidgets(
|
||||
'should have message correctly and do not have CreateRuleFilter button\n'
|
||||
'when no network, but search are still active', (tester) async {
|
||||
final widget = makeTestableWidget(
|
||||
child: EmptyEmailsWidget(
|
||||
isNetworkConnectionAvailable: false,
|
||||
isSearchActive: true,
|
||||
),
|
||||
);
|
||||
|
||||
await tester.pumpWidget(widget);
|
||||
|
||||
await tester.pumpAndSettle();
|
||||
|
||||
expect(
|
||||
find.byKey(const Key('create_filter_rule_button_within_empty_email')),
|
||||
findsNothing);
|
||||
|
||||
final emptyEmailMessageWidgetFinder = find.byKey(const Key('empty_email_message'));
|
||||
final emptyEmailMessageWidget = tester.widget<Text>(emptyEmailMessageWidgetFinder);
|
||||
expect(
|
||||
emptyEmailMessageWidget.data,
|
||||
'No internet connection, try again later.');
|
||||
});
|
||||
|
||||
testWidgets(
|
||||
'should have message correctly and do not have CreateRuleFilter button\n'
|
||||
'when no network, but filter are still active', (tester) async {
|
||||
final widget = makeTestableWidget(
|
||||
child: EmptyEmailsWidget(
|
||||
isNetworkConnectionAvailable: false,
|
||||
isFilterMessageActive: true,
|
||||
),
|
||||
);
|
||||
|
||||
await tester.pumpWidget(widget);
|
||||
|
||||
await tester.pumpAndSettle();
|
||||
|
||||
expect(
|
||||
find.byKey(const Key('create_filter_rule_button_within_empty_email')),
|
||||
findsNothing);
|
||||
|
||||
final emptyEmailMessageWidgetFinder = find.byKey(const Key('empty_email_message'));
|
||||
final emptyEmailMessageWidget = tester.widget<Text>(emptyEmailMessageWidgetFinder);
|
||||
expect(
|
||||
emptyEmailMessageWidget.data,
|
||||
'No internet connection, try again later.');
|
||||
});
|
||||
|
||||
testWidgets(
|
||||
'should have message correctly and do not have CreateRuleFilter button\n'
|
||||
'when no network, but filter and search are still active', (tester) async {
|
||||
final widget = makeTestableWidget(
|
||||
child: EmptyEmailsWidget(
|
||||
isNetworkConnectionAvailable: false,
|
||||
isFilterMessageActive: true,
|
||||
),
|
||||
);
|
||||
|
||||
await tester.pumpWidget(widget);
|
||||
|
||||
await tester.pumpAndSettle();
|
||||
|
||||
expect(
|
||||
find.byKey(const Key('create_filter_rule_button_within_empty_email')),
|
||||
findsNothing);
|
||||
|
||||
final emptyEmailMessageWidgetFinder = find.byKey(const Key('empty_email_message'));
|
||||
final emptyEmailMessageWidget = tester.widget<Text>(emptyEmailMessageWidgetFinder);
|
||||
expect(
|
||||
emptyEmailMessageWidget.data,
|
||||
'No internet connection, try again later.');
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user