TF-4195 Add interactor/repository/datasource to feature add a Label to an email

This commit is contained in:
dab246
2025-12-12 01:32:51 +07:00
committed by Dat H. Pham
parent b6027e996d
commit 0d247b30d7
19 changed files with 215 additions and 49 deletions
@@ -0,0 +1,14 @@
import 'package:jmap_dart_client/jmap/mail/email/keyword_identifier.dart';
import 'package:json_annotation/json_annotation.dart';
class KeywordIdentifierNullableConverter
implements JsonConverter<KeyWordIdentifier?, String?> {
const KeywordIdentifierNullableConverter();
@override
KeyWordIdentifier? fromJson(String? json) =>
json != null ? KeyWordIdentifier(json) : null;
@override
String? toJson(KeyWordIdentifier? object) => object?.value;
}
+2 -1
View File
@@ -2,6 +2,7 @@ import 'package:core/presentation/extensions/color_extension.dart';
import 'package:core/presentation/extensions/hex_color_extension.dart';
import 'package:flutter/material.dart';
import 'package:jmap_dart_client/jmap/core/id.dart';
import 'package:jmap_dart_client/jmap/mail/email/keyword_identifier.dart';
import 'package:labels/model/hex_color.dart';
import 'package:labels/model/label.dart';
@@ -28,7 +29,7 @@ extension LabelExtension on Label {
Label copyWith({
Id? id,
String? keyword,
KeyWordIdentifier? keyword,
String? displayName,
HexColor? color,
}) {
+4 -1
View File
@@ -1,8 +1,10 @@
import 'package:equatable/equatable.dart';
import 'package:jmap_dart_client/http/converter/id_converter.dart';
import 'package:jmap_dart_client/jmap/core/id.dart';
import 'package:jmap_dart_client/jmap/mail/email/keyword_identifier.dart';
import 'package:json_annotation/json_annotation.dart';
import 'package:labels/converter/hex_color_nullable_converter.dart';
import 'package:labels/converter/keyword_identifier_nullable_converter.dart';
import 'package:labels/model/hex_color.dart';
part 'label.g.dart';
@@ -13,11 +15,12 @@ part 'label.g.dart';
converters: [
IdConverter(),
HexColorNullableConverter(),
KeywordIdentifierNullableConverter(),
],
)
class Label with EquatableMixin {
final Id? id;
final String? keyword;
final KeyWordIdentifier? keyword;
final String? displayName;
final HexColor? color;
@@ -3,6 +3,7 @@ import 'package:flutter_test/flutter_test.dart';
import 'package:http_mock_adapter/http_mock_adapter.dart';
import 'package:jmap_dart_client/jmap/account_id.dart';
import 'package:jmap_dart_client/jmap/core/id.dart';
import 'package:jmap_dart_client/jmap/mail/email/keyword_identifier.dart';
import 'package:labels/labels.dart';
import '../method_fixtures.dart';
@@ -41,13 +42,13 @@ void main() {
final labelA = Label(
id: Id('A'),
keyword: 'labelA',
keyword: KeyWordIdentifier('labelA'),
displayName: 'Label A',
color: HexColor('#111111'),
);
final labelB = Label(
id: Id('B'),
keyword: 'labelB',
keyword: KeyWordIdentifier('labelB'),
displayName: 'Label B',
color: HexColor('#222222'),
);