blob: 01d4a02025abfb5cdac7f0b21e3a0f9c8683396e [file] [log] [blame]
Adrien Béraud0cb76c92021-04-07 19:59:08 -04001class Contact {
simon06527b02022-10-01 15:01:47 -04002 private readonly uri: string;
3 private displayName: string | undefined = undefined;
4 private registeredName: string | undefined = undefined;
5
6 constructor(uri: string) {
simond47ef9e2022-09-28 22:24:28 -04007 this.uri = uri;
simond47ef9e2022-09-28 22:24:28 -04008 }
Adrien Béraud0cb76c92021-04-07 19:59:08 -04009
simon06527b02022-10-01 15:01:47 -040010 static from(object: Contact) {
simond47ef9e2022-09-28 22:24:28 -040011 const contact = new Contact(object.uri);
12 if (object.registeredName) contact.setRegisteredName(object.registeredName);
13 return contact;
14 }
Adrien Béraud0cb76c92021-04-07 19:59:08 -040015
simond47ef9e2022-09-28 22:24:28 -040016 getUri() {
17 return this.uri;
18 }
Adrien Béraud0cb76c92021-04-07 19:59:08 -040019
simond47ef9e2022-09-28 22:24:28 -040020 getRegisteredName() {
21 return this.registeredName;
22 }
Adrien Béraud35e7d7c2021-04-13 03:28:39 -040023
simon06527b02022-10-01 15:01:47 -040024 setRegisteredName(name: string | undefined) {
simond47ef9e2022-09-28 22:24:28 -040025 this.registeredName = name;
26 }
Adrien Béraud0cb76c92021-04-07 19:59:08 -040027
simond47ef9e2022-09-28 22:24:28 -040028 isRegisteredNameResolved() {
29 return this.registeredName !== undefined;
30 }
Adrien Béraud0cb76c92021-04-07 19:59:08 -040031
simond47ef9e2022-09-28 22:24:28 -040032 getDisplayName() {
33 return this.getDisplayNameNoFallback() || this.getUri();
34 }
Adrien Béraud150b4782021-04-21 19:40:59 -040035
simond47ef9e2022-09-28 22:24:28 -040036 getDisplayNameNoFallback() {
37 return this.displayName || this.getRegisteredName();
38 }
Adrien Béraud150b4782021-04-21 19:40:59 -040039
simond47ef9e2022-09-28 22:24:28 -040040 async getObject() {
41 return {
42 uri: this.uri,
43 registeredName: await this.registeredName,
44 };
45 }
Adrien Béraud0cb76c92021-04-07 19:59:08 -040046}
47
simond47ef9e2022-09-28 22:24:28 -040048export default Contact;