TF-4082 Setup text formatting menu state from user's preferences in composer

This commit is contained in:
dab246
2025-10-02 15:44:22 +07:00
committed by Dat H. Pham
parent 620d155dc3
commit 2e54493a69
17 changed files with 220 additions and 56 deletions
@@ -2,6 +2,7 @@ import 'package:collection/collection.dart';
import 'package:equatable/equatable.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/spam_report_config.dart';
import 'package:tmail_ui_user/features/manage_account/domain/model/preferences/text_formatting_menu_config.dart';
import 'package:tmail_ui_user/features/manage_account/domain/model/preferences/thread_detail_config.dart';
class PreferencesSetting with EquatableMixin {
@@ -13,6 +14,7 @@ class PreferencesSetting with EquatableMixin {
return PreferencesSetting([
ThreadDetailConfig.initial(),
SpamReportConfig.initial(),
TextFormattingMenuConfig.initial(),
]);
}
@@ -36,6 +38,16 @@ class PreferencesSetting with EquatableMixin {
}
}
TextFormattingMenuConfig get textFormattingMenuConfig {
final formatConfig = configs
.firstWhereOrNull((config) => config is TextFormattingMenuConfig);
if (formatConfig != null) {
return formatConfig as TextFormattingMenuConfig;
} else {
return TextFormattingMenuConfig.initial();
}
}
@override
List<Object?> get props => [configs];
}
@@ -14,12 +14,7 @@ class SpamReportConfig extends PreferencesConfig {
this.lastTimeDismissedMilliseconds = 0,
});
factory SpamReportConfig.initial() {
return SpamReportConfig(
isEnabled: true,
lastTimeDismissedMilliseconds: 0,
);
}
factory SpamReportConfig.initial() => SpamReportConfig();
factory SpamReportConfig.fromJson(Map<String, dynamic> json) =>
_$SpamReportConfigFromJson(json);
@@ -0,0 +1,30 @@
import 'package:json_annotation/json_annotation.dart';
import 'package:tmail_ui_user/features/manage_account/domain/model/preferences/preferences_config.dart';
part 'text_formatting_menu_config.g.dart';
@JsonSerializable()
class TextFormattingMenuConfig extends PreferencesConfig {
final bool isDisplayed;
TextFormattingMenuConfig({this.isDisplayed = false});
factory TextFormattingMenuConfig.initial() => TextFormattingMenuConfig();
factory TextFormattingMenuConfig.fromJson(Map<String, dynamic> json) =>
_$TextFormattingMenuConfigFromJson(json);
@override
Map<String, dynamic> toJson() => _$TextFormattingMenuConfigToJson(this);
@override
List<Object> get props => [isDisplayed];
}
extension TextFormattingMenuConfigExtension on TextFormattingMenuConfig {
TextFormattingMenuConfig copyWith({bool? isDisplayed}) {
return TextFormattingMenuConfig(
isDisplayed: isDisplayed ?? this.isDisplayed,
);
}
}
@@ -9,11 +9,7 @@ class ThreadDetailConfig extends PreferencesConfig {
ThreadDetailConfig({this.isEnabled = false});
factory ThreadDetailConfig.initial() {
return ThreadDetailConfig(
isEnabled: false,
);
}
factory ThreadDetailConfig.initial() => ThreadDetailConfig();
factory ThreadDetailConfig.fromJson(Map<String, dynamic> json) =>
_$ThreadDetailConfigFromJson(json);