TF-4193 Show/Hide Label list when toggle label state in Setting
This commit is contained in:
@@ -9,6 +9,7 @@ import 'package:flutter/material.dart';
|
|||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
import 'package:jmap_dart_client/jmap/mail/calendar/calendar_event.dart';
|
import 'package:jmap_dart_client/jmap/mail/calendar/calendar_event.dart';
|
||||||
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
|
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
|
||||||
|
import 'package:labels/model/label.dart';
|
||||||
import 'package:model/email/email_action_type.dart';
|
import 'package:model/email/email_action_type.dart';
|
||||||
import 'package:model/email/presentation_email.dart';
|
import 'package:model/email/presentation_email.dart';
|
||||||
import 'package:model/extensions/list_email_address_extension.dart';
|
import 'package:model/extensions/list_email_address_extension.dart';
|
||||||
@@ -248,9 +249,22 @@ class EmailView extends GetWidget<SingleEmailController> {
|
|||||||
children: [
|
children: [
|
||||||
if (!isInsideThreadDetailView || isFirstEmailInThreadDetail)
|
if (!isInsideThreadDetailView || isFirstEmailInThreadDetail)
|
||||||
Obx(() {
|
Obx(() {
|
||||||
final allLabels =
|
final isLabelCapabilitySupported = controller
|
||||||
controller.mailboxDashBoardController.labelController.labels;
|
.mailboxDashBoardController.isLabelCapabilitySupported;
|
||||||
final emailLabels = presentationEmail.getLabelList(allLabels);
|
|
||||||
|
final labelController =
|
||||||
|
controller.mailboxDashBoardController.labelController;
|
||||||
|
|
||||||
|
final isLabelSettingEnabled =
|
||||||
|
labelController.isLabelSettingEnabled.isTrue;
|
||||||
|
|
||||||
|
List<Label>? emailLabels;
|
||||||
|
|
||||||
|
if (isLabelCapabilitySupported && isLabelSettingEnabled) {
|
||||||
|
emailLabels = presentationEmail.getLabelList(
|
||||||
|
labelController.labels,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
return EmailSubjectWidget(
|
return EmailSubjectWidget(
|
||||||
presentationEmail: presentationEmail.copyWith(
|
presentationEmail: presentationEmail.copyWith(
|
||||||
|
|||||||
@@ -18,6 +18,8 @@ import 'package:tmail_ui_user/features/labels/domain/usecases/create_new_label_i
|
|||||||
import 'package:tmail_ui_user/features/labels/domain/usecases/get_all_label_interactor.dart';
|
import 'package:tmail_ui_user/features/labels/domain/usecases/get_all_label_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/labels/presentation/label_interactor_bindings.dart';
|
import 'package:tmail_ui_user/features/labels/presentation/label_interactor_bindings.dart';
|
||||||
import 'package:tmail_ui_user/features/labels/presentation/widgets/create_new_label_modal.dart';
|
import 'package:tmail_ui_user/features/labels/presentation/widgets/create_new_label_modal.dart';
|
||||||
|
import 'package:tmail_ui_user/features/manage_account/domain/state/get_label_setting_state.dart';
|
||||||
|
import 'package:tmail_ui_user/features/manage_account/domain/usecases/get_label_setting_state_interactor.dart';
|
||||||
import 'package:tmail_ui_user/main/error/capability_validator.dart';
|
import 'package:tmail_ui_user/main/error/capability_validator.dart';
|
||||||
import 'package:tmail_ui_user/main/exceptions/logic_exception.dart';
|
import 'package:tmail_ui_user/main/exceptions/logic_exception.dart';
|
||||||
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
|
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
|
||||||
@@ -26,14 +28,31 @@ class LabelController extends BaseController {
|
|||||||
final labels = <Label>[].obs;
|
final labels = <Label>[].obs;
|
||||||
final labelListExpandMode = Rx(ExpandMode.EXPAND);
|
final labelListExpandMode = Rx(ExpandMode.EXPAND);
|
||||||
final isCreateNewLabelModalVisible = RxBool(false);
|
final isCreateNewLabelModalVisible = RxBool(false);
|
||||||
|
final isLabelSettingEnabled = RxBool(false);
|
||||||
|
|
||||||
GetAllLabelInteractor? _getAllLabelInteractor;
|
GetAllLabelInteractor? _getAllLabelInteractor;
|
||||||
CreateNewLabelInteractor? _createNewLabelInteractor;
|
CreateNewLabelInteractor? _createNewLabelInteractor;
|
||||||
|
GetLabelSettingStateInteractor? _getLabelSettingStateInteractor;
|
||||||
|
|
||||||
bool isLabelCapabilitySupported(Session session, AccountId accountId) {
|
bool isLabelCapabilitySupported(Session session, AccountId accountId) {
|
||||||
return LabelsConstants.labelsCapability.isSupported(session, accountId);
|
return LabelsConstants.labelsCapability.isSupported(session, accountId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void checkLabelSettingState(AccountId accountId) {
|
||||||
|
_getLabelSettingStateInteractor =
|
||||||
|
getBinding<GetLabelSettingStateInteractor>();
|
||||||
|
if (_getLabelSettingStateInteractor != null) {
|
||||||
|
consumeState(_getLabelSettingStateInteractor!.execute(accountId));
|
||||||
|
} else {
|
||||||
|
isLabelSettingEnabled.value = false;
|
||||||
|
_clearLabelData();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void _clearLabelData() {
|
||||||
|
labels.clear();
|
||||||
|
}
|
||||||
|
|
||||||
void injectLabelsBindings() {
|
void injectLabelsBindings() {
|
||||||
LabelInteractorBindings().dependencies();
|
LabelInteractorBindings().dependencies();
|
||||||
_getAllLabelInteractor = getBinding<GetAllLabelInteractor>();
|
_getAllLabelInteractor = getBinding<GetAllLabelInteractor>();
|
||||||
@@ -100,12 +119,23 @@ class LabelController extends BaseController {
|
|||||||
labels.sortByAlphabetically();
|
labels.sortByAlphabetically();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void _handleGetLabelSettingStateSuccess(bool isEnabled, AccountId accountId) {
|
||||||
|
isLabelSettingEnabled.value = isEnabled;
|
||||||
|
|
||||||
|
if (isEnabled) {
|
||||||
|
injectLabelsBindings();
|
||||||
|
getAllLabels(accountId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void handleSuccessViewState(Success success) {
|
void handleSuccessViewState(Success success) {
|
||||||
if (success is GetAllLabelSuccess) {
|
if (success is GetAllLabelSuccess) {
|
||||||
labels.value = success.labels..sortByAlphabetically();
|
labels.value = success.labels..sortByAlphabetically();
|
||||||
} else if (success is CreateNewLabelSuccess) {
|
} else if (success is CreateNewLabelSuccess) {
|
||||||
_handleCreateNewLabelSuccess(success);
|
_handleCreateNewLabelSuccess(success);
|
||||||
|
} else if (success is GetLabelSettingStateSuccess) {
|
||||||
|
_handleGetLabelSettingStateSuccess(success.isEnabled, success.accountId);
|
||||||
} else {
|
} else {
|
||||||
super.handleSuccessViewState(success);
|
super.handleSuccessViewState(success);
|
||||||
}
|
}
|
||||||
@@ -117,6 +147,9 @@ class LabelController extends BaseController {
|
|||||||
labels.value = [];
|
labels.value = [];
|
||||||
} else if (failure is CreateNewLabelFailure) {
|
} else if (failure is CreateNewLabelFailure) {
|
||||||
_handleCreateNewLabelFailure(failure);
|
_handleCreateNewLabelFailure(failure);
|
||||||
|
} else if (failure is GetLabelSettingStateFailure) {
|
||||||
|
isLabelSettingEnabled.value = false;
|
||||||
|
_clearLabelData();
|
||||||
} else {
|
} else {
|
||||||
super.handleFailureViewState(failure);
|
super.handleFailureViewState(failure);
|
||||||
}
|
}
|
||||||
@@ -126,6 +159,7 @@ class LabelController extends BaseController {
|
|||||||
void onClose() {
|
void onClose() {
|
||||||
_getAllLabelInteractor = null;
|
_getAllLabelInteractor = null;
|
||||||
_createNewLabelInteractor = null;
|
_createNewLabelInteractor = null;
|
||||||
|
_getLabelSettingStateInteractor = null;
|
||||||
super.onClose();
|
super.onClose();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -346,10 +346,18 @@ abstract class BaseMailboxView extends GetWidget<MailboxController>
|
|||||||
|
|
||||||
Widget buildLabelsBar(BuildContext context, bool isDesktop) {
|
Widget buildLabelsBar(BuildContext context, bool isDesktop) {
|
||||||
return Obx(() {
|
return Obx(() {
|
||||||
if (controller.mailboxDashBoardController.isLabelCapabilitySupported) {
|
final isLabelCapabilitySupported = controller
|
||||||
final labelController =
|
.mailboxDashBoardController
|
||||||
controller.mailboxDashBoardController.labelController;
|
.isLabelCapabilitySupported;
|
||||||
|
|
||||||
|
final labelController =
|
||||||
|
controller.mailboxDashBoardController.labelController;
|
||||||
|
|
||||||
|
final isLabelSettingEnabled = labelController
|
||||||
|
.isLabelSettingEnabled
|
||||||
|
.isTrue;
|
||||||
|
|
||||||
|
if (isLabelCapabilitySupported && isLabelSettingEnabled) {
|
||||||
final accountId = controller.accountId;
|
final accountId = controller.accountId;
|
||||||
final labelListExpandMode = labelController.labelListExpandMode.value;
|
final labelListExpandMode = labelController.labelListExpandMode.value;
|
||||||
final countLabels = labelController.labels.length;
|
final countLabels = labelController.labels.length;
|
||||||
@@ -376,10 +384,18 @@ abstract class BaseMailboxView extends GetWidget<MailboxController>
|
|||||||
|
|
||||||
Widget buildLabelsList(BuildContext context, bool isDesktop) {
|
Widget buildLabelsList(BuildContext context, bool isDesktop) {
|
||||||
return Obx(() {
|
return Obx(() {
|
||||||
if (controller.mailboxDashBoardController.isLabelCapabilitySupported) {
|
final isLabelCapabilitySupported = controller
|
||||||
final labelController =
|
.mailboxDashBoardController
|
||||||
controller.mailboxDashBoardController.labelController;
|
.isLabelCapabilitySupported;
|
||||||
|
|
||||||
|
final labelController =
|
||||||
|
controller.mailboxDashBoardController.labelController;
|
||||||
|
|
||||||
|
final isLabelSettingEnabled = labelController
|
||||||
|
.isLabelSettingEnabled
|
||||||
|
.isTrue;
|
||||||
|
|
||||||
|
if (isLabelCapabilitySupported && isLabelSettingEnabled) {
|
||||||
final labelListExpandMode = labelController.labelListExpandMode.value;
|
final labelListExpandMode = labelController.labelListExpandMode.value;
|
||||||
final labels = labelController.labels;
|
final labels = labelController.labels;
|
||||||
|
|
||||||
|
|||||||
+7
-2
@@ -909,8 +909,7 @@ class MailboxDashBoardController extends ReloadableController
|
|||||||
);
|
);
|
||||||
|
|
||||||
if (isLabelCapabilitySupported) {
|
if (isLabelCapabilitySupported) {
|
||||||
labelController.injectLabelsBindings();
|
labelController.checkLabelSettingState(currentAccountId);
|
||||||
labelController.getAllLabels(currentAccountId);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2087,6 +2086,9 @@ class MailboxDashBoardController extends ReloadableController
|
|||||||
getServerSetting();
|
getServerSetting();
|
||||||
spamReportController.getSpamReportStateAction();
|
spamReportController.getSpamReportStateAction();
|
||||||
loadAIScribeConfig();
|
loadAIScribeConfig();
|
||||||
|
if (isLabelCapabilitySupported && accountId.value != null) {
|
||||||
|
labelController.checkLabelSettingState(accountId.value!);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<List<PresentationEmail>> quickSearchEmails(String query) async {
|
Future<List<PresentationEmail>> quickSearchEmails(String query) async {
|
||||||
@@ -2164,6 +2166,9 @@ class MailboxDashBoardController extends ReloadableController
|
|||||||
getServerSetting();
|
getServerSetting();
|
||||||
spamReportController.getSpamReportStateAction();
|
spamReportController.getSpamReportStateAction();
|
||||||
loadAIScribeConfig();
|
loadAIScribeConfig();
|
||||||
|
if (isLabelCapabilitySupported && accountId.value != null) {
|
||||||
|
labelController.checkLabelSettingState(accountId.value!);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void _handleUpdateVacationSuccess(UpdateVacationSuccess success) {
|
void _handleUpdateVacationSuccess(UpdateVacationSuccess success) {
|
||||||
|
|||||||
@@ -16,4 +16,6 @@ abstract class ManageAccountDataSource {
|
|||||||
Future<bool> getLabelVisibility();
|
Future<bool> getLabelVisibility();
|
||||||
|
|
||||||
Future<void> saveLabelVisibility(bool visible);
|
Future<void> saveLabelVisibility(bool visible);
|
||||||
|
|
||||||
|
Future<bool> getLabelSettingState();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import 'package:tmail_ui_user/features/manage_account/data/local/language_cache_
|
|||||||
import 'package:tmail_ui_user/features/manage_account/data/local/preferences_setting_manager.dart';
|
import 'package:tmail_ui_user/features/manage_account/data/local/preferences_setting_manager.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/domain/model/preferences/ai_scribe_config.dart';
|
import 'package:tmail_ui_user/features/manage_account/domain/model/preferences/ai_scribe_config.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/data/local/setting_cache_manager.dart';
|
import 'package:tmail_ui_user/features/manage_account/data/local/setting_cache_manager.dart';
|
||||||
|
import 'package:tmail_ui_user/features/manage_account/domain/model/preferences/label_config.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/domain/model/preferences/preferences_config.dart';
|
import 'package:tmail_ui_user/features/manage_account/domain/model/preferences/preferences_config.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/domain/model/preferences/preferences_setting.dart';
|
import 'package:tmail_ui_user/features/manage_account/domain/model/preferences/preferences_setting.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/domain/model/preferences/spam_report_config.dart';
|
import 'package:tmail_ui_user/features/manage_account/domain/model/preferences/spam_report_config.dart';
|
||||||
@@ -52,6 +53,10 @@ class ManageAccountDataSourceImpl extends ManageAccountDataSource {
|
|||||||
await _preferencesSettingManager.updateAIScribe(
|
await _preferencesSettingManager.updateAIScribe(
|
||||||
preferencesConfig.isEnabled,
|
preferencesConfig.isEnabled,
|
||||||
);
|
);
|
||||||
|
} else if (preferencesConfig is LabelConfig) {
|
||||||
|
await _preferencesSettingManager.updateLabel(
|
||||||
|
preferencesConfig.isEnabled,
|
||||||
|
);
|
||||||
} else {
|
} else {
|
||||||
await _preferencesSettingManager.savePreferences(
|
await _preferencesSettingManager.savePreferences(
|
||||||
preferencesConfig,
|
preferencesConfig,
|
||||||
@@ -94,4 +99,15 @@ class ManageAccountDataSourceImpl extends ManageAccountDataSource {
|
|||||||
throw error;
|
throw error;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<bool> getLabelSettingState() {
|
||||||
|
return Future.sync(() async {
|
||||||
|
final labelConfig = await _preferencesSettingManager.getLabelConfig();
|
||||||
|
return labelConfig.isEnabled;
|
||||||
|
}).catchError((error, stackTrace) async {
|
||||||
|
await _exceptionThrower.throwException(error, stackTrace);
|
||||||
|
throw error;
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -65,7 +65,7 @@ class PreferencesSettingManager {
|
|||||||
return PreferencesSetting(listConfigs);
|
return PreferencesSetting(listConfigs);
|
||||||
}
|
}
|
||||||
|
|
||||||
String _getPreferencesConfig(PreferencesConfig config) {
|
String _getPreferencesConfigKey(PreferencesConfig config) {
|
||||||
if (config is ThreadDetailConfig) {
|
if (config is ThreadDetailConfig) {
|
||||||
return _preferencesSettingThreadKey;
|
return _preferencesSettingThreadKey;
|
||||||
} else if (config is SpamReportConfig) {
|
} else if (config is SpamReportConfig) {
|
||||||
@@ -83,7 +83,7 @@ class PreferencesSettingManager {
|
|||||||
|
|
||||||
Future<void> savePreferences(PreferencesConfig config) async {
|
Future<void> savePreferences(PreferencesConfig config) async {
|
||||||
await _sharedPreferences.setString(
|
await _sharedPreferences.setString(
|
||||||
_getPreferencesConfig(config),
|
_getPreferencesConfigKey(config),
|
||||||
jsonEncode(config.toJson()),
|
jsonEncode(config.toJson()),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -41,4 +41,9 @@ class ManageAccountRepositoryImpl extends ManageAccountRepository {
|
|||||||
Future<void> saveLabelVisibility(bool visible) {
|
Future<void> saveLabelVisibility(bool visible) {
|
||||||
return dataSource.saveLabelVisibility(visible);
|
return dataSource.saveLabelVisibility(visible);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<bool> getLabelSettingState() {
|
||||||
|
return dataSource.getLabelSettingState();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -16,4 +16,6 @@ abstract class ManageAccountRepository {
|
|||||||
Future<bool> getLabelVisibility();
|
Future<bool> getLabelVisibility();
|
||||||
|
|
||||||
Future<void> saveLabelVisibility(bool visible);
|
Future<void> saveLabelVisibility(bool visible);
|
||||||
|
|
||||||
|
Future<bool> getLabelSettingState();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,19 @@
|
|||||||
|
import 'package:core/presentation/state/failure.dart';
|
||||||
|
import 'package:core/presentation/state/success.dart';
|
||||||
|
import 'package:jmap_dart_client/jmap/account_id.dart';
|
||||||
|
|
||||||
|
class GettingLabelSettingState extends LoadingState {}
|
||||||
|
|
||||||
|
class GetLabelSettingStateSuccess extends UIState {
|
||||||
|
final bool isEnabled;
|
||||||
|
final AccountId accountId;
|
||||||
|
|
||||||
|
GetLabelSettingStateSuccess(this.isEnabled, this.accountId);
|
||||||
|
|
||||||
|
@override
|
||||||
|
List<Object> get props => [isEnabled, accountId];
|
||||||
|
}
|
||||||
|
|
||||||
|
class GetLabelSettingStateFailure extends FeatureFailure {
|
||||||
|
GetLabelSettingStateFailure(dynamic exception) : super(exception: exception);
|
||||||
|
}
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
import 'package:core/presentation/state/failure.dart';
|
||||||
|
import 'package:core/presentation/state/success.dart';
|
||||||
|
import 'package:dartz/dartz.dart';
|
||||||
|
import 'package:jmap_dart_client/jmap/account_id.dart';
|
||||||
|
import 'package:tmail_ui_user/features/manage_account/domain/repository/manage_account_repository.dart';
|
||||||
|
import 'package:tmail_ui_user/features/manage_account/domain/state/get_label_setting_state.dart';
|
||||||
|
|
||||||
|
class GetLabelSettingStateInteractor {
|
||||||
|
final ManageAccountRepository _manageAccountRepository;
|
||||||
|
|
||||||
|
GetLabelSettingStateInteractor(this._manageAccountRepository);
|
||||||
|
|
||||||
|
Stream<Either<Failure, Success>> execute(AccountId accountId) async* {
|
||||||
|
try {
|
||||||
|
yield Right(GettingLabelSettingState());
|
||||||
|
final isEnable = await _manageAccountRepository.getLabelSettingState();
|
||||||
|
yield Right(GetLabelSettingStateSuccess(isEnable, accountId));
|
||||||
|
} catch (e) {
|
||||||
|
yield Left(GetLabelSettingStateFailure(e));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -7,6 +7,7 @@ import 'package:tmail_ui_user/features/manage_account/data/local/preferences_set
|
|||||||
import 'package:tmail_ui_user/features/manage_account/data/local/setting_cache_manager.dart';
|
import 'package:tmail_ui_user/features/manage_account/data/local/setting_cache_manager.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/data/repository/manage_account_repository_impl.dart';
|
import 'package:tmail_ui_user/features/manage_account/data/repository/manage_account_repository_impl.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/domain/repository/manage_account_repository.dart';
|
import 'package:tmail_ui_user/features/manage_account/domain/repository/manage_account_repository.dart';
|
||||||
|
import 'package:tmail_ui_user/features/manage_account/domain/usecases/get_label_setting_state_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/domain/usecases/get_label_visibility_interactor.dart';
|
import 'package:tmail_ui_user/features/manage_account/domain/usecases/get_label_visibility_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/domain/usecases/save_label_visibility_interactor.dart';
|
import 'package:tmail_ui_user/features/manage_account/domain/usecases/save_label_visibility_interactor.dart';
|
||||||
import 'package:tmail_ui_user/main/exceptions/cache_exception_thrower.dart';
|
import 'package:tmail_ui_user/main/exceptions/cache_exception_thrower.dart';
|
||||||
@@ -39,6 +40,9 @@ class SettingInteractorBindings extends InteractorsBindings {
|
|||||||
Get.lazyPut(
|
Get.lazyPut(
|
||||||
() => GetLabelVisibilityInteractor(Get.find<ManageAccountRepository>()),
|
() => GetLabelVisibilityInteractor(Get.find<ManageAccountRepository>()),
|
||||||
);
|
);
|
||||||
|
Get.lazyPut(
|
||||||
|
() => GetLabelSettingStateInteractor(Get.find<ManageAccountRepository>()),
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ import 'package:tmail_ui_user/features/base/base_controller.dart';
|
|||||||
import 'package:tmail_ui_user/features/home/data/exceptions/session_exceptions.dart';
|
import 'package:tmail_ui_user/features/home/data/exceptions/session_exceptions.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/loader_status.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/loader_status.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/domain/model/preferences/ai_scribe_config.dart';
|
import 'package:tmail_ui_user/features/manage_account/domain/model/preferences/ai_scribe_config.dart';
|
||||||
|
import 'package:tmail_ui_user/features/manage_account/domain/model/preferences/label_config.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/domain/model/preferences/preferences_config.dart';
|
import 'package:tmail_ui_user/features/manage_account/domain/model/preferences/preferences_config.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/domain/model/preferences/preferences_setting.dart';
|
import 'package:tmail_ui_user/features/manage_account/domain/model/preferences/preferences_setting.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/domain/model/preferences/spam_report_config.dart';
|
import 'package:tmail_ui_user/features/manage_account/domain/model/preferences/spam_report_config.dart';
|
||||||
@@ -162,6 +163,9 @@ class PreferencesController extends BaseController {
|
|||||||
case PreferencesOptionType.aiScribe:
|
case PreferencesOptionType.aiScribe:
|
||||||
config = AIScribeConfig(isEnabled: !isEnabled);
|
config = AIScribeConfig(isEnabled: !isEnabled);
|
||||||
break;
|
break;
|
||||||
|
case PreferencesOptionType.label:
|
||||||
|
config = LabelConfig(isEnabled: !isEnabled);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ import 'package:flutter_svg/flutter_svg.dart';
|
|||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
import 'package:jmap_dart_client/jmap/mail/email/email_address.dart';
|
import 'package:jmap_dart_client/jmap/mail/email/email_address.dart';
|
||||||
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
|
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
|
||||||
|
import 'package:labels/model/label.dart';
|
||||||
import 'package:model/model.dart';
|
import 'package:model/model.dart';
|
||||||
import 'package:tmail_ui_user/features/base/mixin/app_loader_mixin.dart';
|
import 'package:tmail_ui_user/features/base/mixin/app_loader_mixin.dart';
|
||||||
import 'package:tmail_ui_user/features/base/widget/keyboard/keyboard_handler_wrapper.dart';
|
import 'package:tmail_ui_user/features/base/widget/keyboard/keyboard_handler_wrapper.dart';
|
||||||
@@ -732,9 +733,20 @@ class SearchEmailView extends GetWidget<SearchEmailController>
|
|||||||
|
|
||||||
final isAINeedsActionEnabled = dashboardController.isAINeedsActionEnabled;
|
final isAINeedsActionEnabled = dashboardController.isAINeedsActionEnabled;
|
||||||
|
|
||||||
final allLabels = dashboardController.labelController.labels;
|
final isLabelCapabilitySupported = dashboardController.isLabelCapabilitySupported;
|
||||||
|
|
||||||
final emailLabels = presentationEmail.getLabelList(allLabels);
|
final labelController = dashboardController.labelController;
|
||||||
|
|
||||||
|
final isLabelSettingEnabled =
|
||||||
|
labelController.isLabelSettingEnabled.isTrue;
|
||||||
|
|
||||||
|
List<Label>? emailLabels;
|
||||||
|
|
||||||
|
if (isLabelCapabilitySupported && isLabelSettingEnabled) {
|
||||||
|
emailLabels = presentationEmail.getLabelList(
|
||||||
|
labelController.labels,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
return EmailTileBuilder(
|
return EmailTileBuilder(
|
||||||
presentationEmail: presentationEmail,
|
presentationEmail: presentationEmail,
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import 'package:flutter_portal/flutter_portal.dart';
|
|||||||
import 'package:flutter_svg/flutter_svg.dart';
|
import 'package:flutter_svg/flutter_svg.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
|
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
|
||||||
|
import 'package:labels/model/label.dart';
|
||||||
import 'package:model/model.dart';
|
import 'package:model/model.dart';
|
||||||
import 'package:tmail_ui_user/features/base/mixin/app_loader_mixin.dart';
|
import 'package:tmail_ui_user/features/base/mixin/app_loader_mixin.dart';
|
||||||
import 'package:tmail_ui_user/features/base/mixin/popup_menu_widget_mixin.dart';
|
import 'package:tmail_ui_user/features/base/mixin/popup_menu_widget_mixin.dart';
|
||||||
@@ -623,9 +624,22 @@ class ThreadView extends GetWidget<ThreadController>
|
|||||||
direction,
|
direction,
|
||||||
),
|
),
|
||||||
child: Obx(() {
|
child: Obx(() {
|
||||||
final allLabels =
|
final isLabelCapabilitySupported = controller
|
||||||
controller.mailboxDashBoardController.labelController.labels;
|
.mailboxDashBoardController.isLabelCapabilitySupported;
|
||||||
final emailLabels = presentationEmail.getLabelList(allLabels);
|
|
||||||
|
final labelController =
|
||||||
|
controller.mailboxDashBoardController.labelController;
|
||||||
|
|
||||||
|
final isLabelSettingEnabled =
|
||||||
|
labelController.isLabelSettingEnabled.isTrue;
|
||||||
|
|
||||||
|
List<Label>? emailLabels;
|
||||||
|
|
||||||
|
if (isLabelCapabilitySupported && isLabelSettingEnabled) {
|
||||||
|
emailLabels = presentationEmail.getLabelList(
|
||||||
|
labelController.labels,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
return EmailTileBuilder(
|
return EmailTileBuilder(
|
||||||
key: Key('email_tile_builder_${presentationEmail.id?.asString}'),
|
key: Key('email_tile_builder_${presentationEmail.id?.asString}'),
|
||||||
|
|||||||
+4
-4
@@ -1,5 +1,6 @@
|
|||||||
import 'package:core/utils/platform_info.dart';
|
import 'package:core/utils/platform_info.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:labels/model/label.dart';
|
||||||
import 'package:model/email/email_in_thread_status.dart';
|
import 'package:model/email/email_in_thread_status.dart';
|
||||||
import 'package:model/extensions/presentation_email_extension.dart';
|
import 'package:model/extensions/presentation_email_extension.dart';
|
||||||
import 'package:tmail_ui_user/features/email/presentation/email_view.dart';
|
import 'package:tmail_ui_user/features/email/presentation/email_view.dart';
|
||||||
@@ -15,7 +16,7 @@ import 'package:tmail_ui_user/features/thread_detail/presentation/widgets/thread
|
|||||||
import 'package:tmail_ui_user/features/thread_detail/presentation/widgets/thread_detail_load_more_circle.dart';
|
import 'package:tmail_ui_user/features/thread_detail/presentation/widgets/thread_detail_load_more_circle.dart';
|
||||||
|
|
||||||
extension GetThreadDetailEmailViews on ThreadDetailController {
|
extension GetThreadDetailEmailViews on ThreadDetailController {
|
||||||
List<Widget> getThreadDetailEmailViews() {
|
List<Widget> getThreadDetailEmailViews({List<Label>? labels}) {
|
||||||
final loadMoreSegments = Map<LoadMoreIndex, LoadMoreCount>.from(this.loadMoreSegments);
|
final loadMoreSegments = Map<LoadMoreIndex, LoadMoreCount>.from(this.loadMoreSegments);
|
||||||
|
|
||||||
return emailIdsPresentation.entries.map((entry) {
|
return emailIdsPresentation.entries.map((entry) {
|
||||||
@@ -45,9 +46,8 @@ extension GetThreadDetailEmailViews on ThreadDetailController {
|
|||||||
final isFirstEmailInThreadDetail = indexOfEmailId == 0;
|
final isFirstEmailInThreadDetail = indexOfEmailId == 0;
|
||||||
|
|
||||||
if (presentationEmail.emailInThreadStatus == EmailInThreadStatus.collapsed) {
|
if (presentationEmail.emailInThreadStatus == EmailInThreadStatus.collapsed) {
|
||||||
final allLabels = mailboxDashBoardController.labelController.labels;
|
final emailLabels = labels?.isNotEmpty == true && isFirstEmailInThreadDetail
|
||||||
final emailLabels = isFirstEmailInThreadDetail
|
? emailIdsPresentation.values.last?.getLabelList(labels!)
|
||||||
? emailIdsPresentation.values.last?.getLabelList(allLabels)
|
|
||||||
: null;
|
: null;
|
||||||
|
|
||||||
return ThreadDetailCollapsedEmail(
|
return ThreadDetailCollapsedEmail(
|
||||||
|
|||||||
@@ -17,8 +17,8 @@ import 'package:tmail_ui_user/features/thread_detail/domain/state/get_thread_by_
|
|||||||
import 'package:tmail_ui_user/features/thread_detail/presentation/extension/close_thread_detail_action.dart';
|
import 'package:tmail_ui_user/features/thread_detail/presentation/extension/close_thread_detail_action.dart';
|
||||||
import 'package:tmail_ui_user/features/thread_detail/presentation/extension/get_thread_detail_action_status.dart';
|
import 'package:tmail_ui_user/features/thread_detail/presentation/extension/get_thread_detail_action_status.dart';
|
||||||
import 'package:tmail_ui_user/features/thread_detail/presentation/extension/get_thread_details_email_views.dart';
|
import 'package:tmail_ui_user/features/thread_detail/presentation/extension/get_thread_details_email_views.dart';
|
||||||
import 'package:tmail_ui_user/features/thread_detail/presentation/extension/on_thread_detail_action_click.dart';
|
|
||||||
import 'package:tmail_ui_user/features/thread_detail/presentation/extension/handle_mail_shortcut_actions_extension.dart';
|
import 'package:tmail_ui_user/features/thread_detail/presentation/extension/handle_mail_shortcut_actions_extension.dart';
|
||||||
|
import 'package:tmail_ui_user/features/thread_detail/presentation/extension/on_thread_detail_action_click.dart';
|
||||||
import 'package:tmail_ui_user/features/thread_detail/presentation/extension/on_thread_page_changed.dart';
|
import 'package:tmail_ui_user/features/thread_detail/presentation/extension/on_thread_page_changed.dart';
|
||||||
import 'package:tmail_ui_user/features/thread_detail/presentation/extension/parsing_email_opened_properties_extension.dart';
|
import 'package:tmail_ui_user/features/thread_detail/presentation/extension/parsing_email_opened_properties_extension.dart';
|
||||||
import 'package:tmail_ui_user/features/thread_detail/presentation/thread_detail_controller.dart';
|
import 'package:tmail_ui_user/features/thread_detail/presentation/thread_detail_controller.dart';
|
||||||
@@ -101,7 +101,18 @@ class ThreadDetailView extends GetWidget<ThreadDetailController> {
|
|||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
Obx(() {
|
Obx(() {
|
||||||
final threadChildren = controller.getThreadDetailEmailViews();
|
final isLabelCapabilitySupported = controller
|
||||||
|
.mailboxDashBoardController.isLabelCapabilitySupported;
|
||||||
|
|
||||||
|
final labelController =
|
||||||
|
controller.mailboxDashBoardController.labelController;
|
||||||
|
|
||||||
|
final isLabelSettingEnabled =
|
||||||
|
labelController.isLabelSettingEnabled.isTrue;
|
||||||
|
|
||||||
|
final threadChildren = isLabelCapabilitySupported && isLabelSettingEnabled
|
||||||
|
? controller.getThreadDetailEmailViews(labels: labelController.labels)
|
||||||
|
: controller.getThreadDetailEmailViews();
|
||||||
|
|
||||||
late Widget threadBody;
|
late Widget threadBody;
|
||||||
|
|
||||||
|
|||||||
+5
@@ -457,6 +457,7 @@ void main() {
|
|||||||
when(mailboxDashboardController.spamReportController.spamReportState).thenReturn(Rx(SpamReportState.disabled));
|
when(mailboxDashboardController.spamReportController.spamReportState).thenReturn(Rx(SpamReportState.disabled));
|
||||||
when(mailboxDashboardController.spamReportController.presentationSpamMailbox).thenReturn(Rxn(null));
|
when(mailboxDashboardController.spamReportController.presentationSpamMailbox).thenReturn(Rxn(null));
|
||||||
when(mailboxDashboardController.downloadController.listDownloadTaskState).thenReturn(RxList([]));
|
when(mailboxDashboardController.downloadController.listDownloadTaskState).thenReturn(RxList([]));
|
||||||
|
when(mailboxDashboardController.labelController.isLabelSettingEnabled).thenReturn(RxBool(false));
|
||||||
when(mailboxDashboardController.labelController.labels).thenReturn(RxList([]));
|
when(mailboxDashboardController.labelController.labels).thenReturn(RxList([]));
|
||||||
when(composerManager.composers).thenReturn(RxMap({}));
|
when(composerManager.composers).thenReturn(RxMap({}));
|
||||||
|
|
||||||
@@ -534,6 +535,7 @@ void main() {
|
|||||||
when(mailboxDashboardController.spamReportController.spamReportState).thenReturn(Rx(SpamReportState.disabled));
|
when(mailboxDashboardController.spamReportController.spamReportState).thenReturn(Rx(SpamReportState.disabled));
|
||||||
when(mailboxDashboardController.spamReportController.presentationSpamMailbox).thenReturn(Rxn(null));
|
when(mailboxDashboardController.spamReportController.presentationSpamMailbox).thenReturn(Rxn(null));
|
||||||
when(mailboxDashboardController.downloadController.listDownloadTaskState).thenReturn(RxList([]));
|
when(mailboxDashboardController.downloadController.listDownloadTaskState).thenReturn(RxList([]));
|
||||||
|
when(mailboxDashboardController.labelController.isLabelSettingEnabled).thenReturn(RxBool(false));
|
||||||
when(mailboxDashboardController.labelController.labels).thenReturn(RxList([]));
|
when(mailboxDashboardController.labelController.labels).thenReturn(RxList([]));
|
||||||
when(composerManager.composers).thenReturn(RxMap({}));
|
when(composerManager.composers).thenReturn(RxMap({}));
|
||||||
|
|
||||||
@@ -598,6 +600,7 @@ void main() {
|
|||||||
when(mailboxDashboardController.spamReportController.spamReportState).thenReturn(Rx(SpamReportState.disabled));
|
when(mailboxDashboardController.spamReportController.spamReportState).thenReturn(Rx(SpamReportState.disabled));
|
||||||
when(mailboxDashboardController.spamReportController.presentationSpamMailbox).thenReturn(Rxn(null));
|
when(mailboxDashboardController.spamReportController.presentationSpamMailbox).thenReturn(Rxn(null));
|
||||||
when(mailboxDashboardController.downloadController.listDownloadTaskState).thenReturn(RxList([]));
|
when(mailboxDashboardController.downloadController.listDownloadTaskState).thenReturn(RxList([]));
|
||||||
|
when(mailboxDashboardController.labelController.isLabelSettingEnabled).thenReturn(RxBool(false));
|
||||||
when(mailboxDashboardController.labelController.labels).thenReturn(RxList([]));
|
when(mailboxDashboardController.labelController.labels).thenReturn(RxList([]));
|
||||||
when(composerManager.composers).thenReturn(RxMap({}));
|
when(composerManager.composers).thenReturn(RxMap({}));
|
||||||
|
|
||||||
@@ -659,6 +662,7 @@ void main() {
|
|||||||
when(mailboxDashboardController.spamReportController.spamReportState).thenReturn(Rx(SpamReportState.disabled));
|
when(mailboxDashboardController.spamReportController.spamReportState).thenReturn(Rx(SpamReportState.disabled));
|
||||||
when(mailboxDashboardController.spamReportController.presentationSpamMailbox).thenReturn(Rxn(null));
|
when(mailboxDashboardController.spamReportController.presentationSpamMailbox).thenReturn(Rxn(null));
|
||||||
when(mailboxDashboardController.downloadController.listDownloadTaskState).thenReturn(RxList([]));
|
when(mailboxDashboardController.downloadController.listDownloadTaskState).thenReturn(RxList([]));
|
||||||
|
when(mailboxDashboardController.labelController.isLabelSettingEnabled).thenReturn(RxBool(false));
|
||||||
when(mailboxDashboardController.labelController.labels).thenReturn(RxList([]));
|
when(mailboxDashboardController.labelController.labels).thenReturn(RxList([]));
|
||||||
when(composerManager.composers).thenReturn(RxMap({}));
|
when(composerManager.composers).thenReturn(RxMap({}));
|
||||||
|
|
||||||
@@ -716,6 +720,7 @@ void main() {
|
|||||||
when(mailboxDashboardController.spamReportController.spamReportState).thenReturn(Rx(SpamReportState.disabled));
|
when(mailboxDashboardController.spamReportController.spamReportState).thenReturn(Rx(SpamReportState.disabled));
|
||||||
when(mailboxDashboardController.spamReportController.presentationSpamMailbox).thenReturn(Rxn(null));
|
when(mailboxDashboardController.spamReportController.presentationSpamMailbox).thenReturn(Rxn(null));
|
||||||
when(mailboxDashboardController.downloadController.listDownloadTaskState).thenReturn(RxList([]));
|
when(mailboxDashboardController.downloadController.listDownloadTaskState).thenReturn(RxList([]));
|
||||||
|
when(mailboxDashboardController.labelController.isLabelSettingEnabled).thenReturn(RxBool(false));
|
||||||
when(mailboxDashboardController.labelController.labels).thenReturn(RxList([]));
|
when(mailboxDashboardController.labelController.labels).thenReturn(RxList([]));
|
||||||
when(composerManager.composers).thenReturn(RxMap({}));
|
when(composerManager.composers).thenReturn(RxMap({}));
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user