snappymail/dev/Model/Contact.js
2021-01-22 16:32:08 +01:00

125 lines
2.8 KiB
JavaScript

import { ContactPropertyModel } from 'Model/ContactProperty';
import { ContactPropertyType } from 'Common/Enums';
import { AbstractModel } from 'Knoin/AbstractModel';
export class ContactModel extends AbstractModel {
constructor() {
super();
this.id = 0;
this.display = '';
this.properties = [];
this.readOnly = false;
this.addObservables({
focused: false,
selected: false,
checked: false,
deleted: false
});
}
/**
* @returns {Array|null}
*/
getNameAndEmailHelper() {
let name = '',
email = '';
if (Array.isNotEmpty(this.properties)) {
this.properties.forEach(property => {
if (property) {
if (ContactPropertyType.FirstName === property.type()) {
name = (property.value() + ' ' + name).trim();
} else if (ContactPropertyType.LastName === property.type()) {
name = (name + ' ' + property.value()).trim();
} else if (!email && ContactPropertyType.Email === property.type()) {
email = property.value();
}
}
});
}
return email ? [email, name] : null;
}
/**
* @static
* @param {FetchJsonContact} json
* @returns {?ContactModel}
*/
static reviveFromJson(json) {
const contact = super.reviveFromJson(json);
if (contact) {
let list = [];
if (Array.isNotEmpty(json.properties)) {
json.properties.forEach(property => {
property = ContactPropertyModel.reviveFromJson(property);
property && list.push(property);
});
}
contact.properties = list;
contact.initDefaultProperties();
}
return contact;
}
initDefaultProperties() {
let list = this.properties;
list.sort((p1,p2) =>{
if (p2.type() == ContactPropertyType.FirstName) {
return 1;
}
if (p1.type() == ContactPropertyType.FirstName || p1.type() == ContactPropertyType.LastName) {
return -1;
}
if (p2.type() == ContactPropertyType.LastName) {
return 1;
}
return 0;
});
let found = list.find(prop => prop.type() == ContactPropertyType.LastName);
if (!found) {
found = new ContactPropertyModel(ContactPropertyType.LastName);
list.unshift(found);
}
found.placeholder('CONTACTS/PLACEHOLDER_ENTER_LAST_NAME');
found = list.find(prop => prop.type() == ContactPropertyType.FirstName);
if (!found) {
found = new ContactPropertyModel(ContactPropertyType.FirstName);
list.unshift(found);
}
found.placeholder('CONTACTS/PLACEHOLDER_ENTER_FIRST_NAME');
this.properties = list;
}
/**
* @returns {string}
*/
generateUid() {
return ''+this.id;
}
/**
* @return string
*/
lineAsCss() {
const result = [];
if (this.deleted()) {
result.push('deleted');
}
if (this.selected()) {
result.push('selected');
}
if (this.checked()) {
result.push('checked');
}
if (this.focused()) {
result.push('focused');
}
return result.join(' ');
}
}