diff --git a/model/lib/account/account_type.dart b/model/lib/account/account_type.dart new file mode 100644 index 000000000..bac6626b1 --- /dev/null +++ b/model/lib/account/account_type.dart @@ -0,0 +1,5 @@ + +enum AccountType { + oauth, + email +} \ No newline at end of file diff --git a/model/lib/account/presentation_account.dart b/model/lib/account/presentation_account.dart new file mode 100644 index 000000000..efc6d76dc --- /dev/null +++ b/model/lib/account/presentation_account.dart @@ -0,0 +1,15 @@ + +import 'package:equatable/equatable.dart'; +import 'package:model/account/account_type.dart'; +import 'package:model/email/presentation_email_address.dart'; + +class PresentationAccount with EquatableMixin { + final List emails; + final int preferredEmailIndex; + final AccountType type; + + PresentationAccount(this.emails, this.preferredEmailIndex, this.type); + + @override + List get props => [emails]; +} \ No newline at end of file diff --git a/model/lib/email/presentation_email_address.dart b/model/lib/email/presentation_email_address.dart new file mode 100644 index 000000000..19f68e3ea --- /dev/null +++ b/model/lib/email/presentation_email_address.dart @@ -0,0 +1,11 @@ + +import 'package:equatable/equatable.dart'; + +class PresentationEmailAddress with EquatableMixin { + final String email; + + PresentationEmailAddress(this.email); + + @override + List get props => [email]; +} \ No newline at end of file diff --git a/model/lib/model.dart b/model/lib/model.dart index 8e2ed3f9c..4543ef555 100644 --- a/model/lib/model.dart +++ b/model/lib/model.dart @@ -3,10 +3,13 @@ library model; // Account export 'account/user_name.dart'; export 'account/password.dart'; +export 'account/account_type.dart'; +export 'account/presentation_account.dart'; // User export 'user/user_id.dart'; -export 'user/user.dart'; +export 'user/user_profile.dart'; +export 'user/avatar_id.dart'; // Mailbox export 'mailbox/presentation_mailbox.dart'; @@ -16,6 +19,7 @@ export 'mailbox/expand_mode.dart'; // Email export 'email/presentation_email.dart'; export 'email/email_content.dart'; +export 'email/presentation_email_address.dart'; // Extensions export 'extensions/email_address_extension.dart'; diff --git a/model/lib/user/avatar_id.dart b/model/lib/user/avatar_id.dart new file mode 100644 index 000000000..2710f8aa8 --- /dev/null +++ b/model/lib/user/avatar_id.dart @@ -0,0 +1,15 @@ + +import 'package:equatable/equatable.dart'; + +class AvatarId with EquatableMixin { + final String id; + + AvatarId(this.id); + + factory AvatarId.initial() { + return AvatarId(''); + } + + @override + List get props => [id]; +} \ No newline at end of file diff --git a/model/lib/user/user.dart b/model/lib/user/user.dart deleted file mode 100644 index 9dbc8c9dc..000000000 --- a/model/lib/user/user.dart +++ /dev/null @@ -1,22 +0,0 @@ -import 'package:equatable/equatable.dart'; -import 'package:model/user/user_id.dart'; - -class User with EquatableMixin { - - final UserId userId; - final String firstName; - final String lastName; - - User( - this.userId, - this.firstName, - this.lastName, - ); - - @override - List get props => [ - userId, - firstName, - lastName, - ]; -} \ No newline at end of file diff --git a/model/lib/user/user_profile.dart b/model/lib/user/user_profile.dart new file mode 100644 index 000000000..5f3e4e36f --- /dev/null +++ b/model/lib/user/user_profile.dart @@ -0,0 +1,85 @@ +import 'package:equatable/equatable.dart'; +import 'package:model/account/account_type.dart'; +import 'package:model/account/presentation_account.dart'; +import 'package:model/user/avatar_id.dart'; +import 'package:model/user/user_id.dart'; + +class UserProfile with EquatableMixin { + + final UserId id; + final String firstName; + final String lastName; + final String jobTitle; + final String service; + final String buildingLocation; + final String officeLocation; + final String mainPhone; + final String description; + final AvatarId currentAvatar; + final List avatars; + final List accounts; + + UserProfile( + this.id, + this.firstName, + this.lastName, + this.jobTitle, + this.service, + this.buildingLocation, + this.officeLocation, + this.mainPhone, + this.description, + this.currentAvatar, + this.avatars, + this.accounts, + ); + + String? getEmailAddress() { + try { + final accountEmail = accounts.firstWhere((account) => account.type == AccountType.email); + if (accountEmail.emails.isNotEmpty) { + final preferredEmailIndex = accountEmail.preferredEmailIndex < 0 ? 0 : accountEmail.preferredEmailIndex; + return accountEmail.emails[preferredEmailIndex].email; + } + return ''; + } catch(e) { + return ''; + } + } + + String getFullName() => '$firstName $lastName'; + + String getNameDisplay() { + if (getFullName().trim().isEmpty) { + return getEmailAddress() != null ? getEmailAddress()! : ''; + } + return getFullName(); + } + + bool isUserEmpty() => getFullName().trim().isEmpty || getEmailAddress() == null || getEmailAddress()!.isEmpty; + + String getAvatarText() { + if (getFullName().trim().isNotEmpty) { + return getFullName().substring(0, 1).toUpperCase(); + } else if (getEmailAddress() != null && getEmailAddress()!.isNotEmpty) { + return getEmailAddress()![0].toUpperCase(); + } + return ''; + } + + @override + List get props => [ + id, + firstName, + lastName, + jobTitle, + service, + buildingLocation, + officeLocation, + mainPhone, + description, + currentAvatar, + avatars, + accounts, + ]; +} \ No newline at end of file