Some cleanups for new AddressBook

This commit is contained in:
djmaze 2022-07-22 22:59:50 +02:00
parent c162a3acc6
commit 052f34a9f5
4 changed files with 43 additions and 72 deletions

View file

@ -15,7 +15,6 @@ export class ContactModel extends AbstractModel {
constructor() {
super();
this.properties = [];
this.jCard = new JCard();
this.addObservables({
@ -30,8 +29,7 @@ export class ContactModel extends AbstractModel {
surName: '', // LastName
middleName: '', // MiddleName
namePrefix: '', // NamePrefix
nameSuffix: '', // NameSuffix
nickname: null
nameSuffix: '' // NameSuffix
});
// this.email = koArrayWithDestroy();
this.email = ko.observableArray();
@ -43,6 +41,15 @@ export class ContactModel extends AbstractModel {
fullName: () => (this.givenName() + ' ' + this.surName()).trim(),
nickname: {
read: () => {
let prop = this.jCard.getOne('nickname');
return prop && prop.value;
},
write: value =>
value ? this.jCard.set('nickname', value/*, params, group*/) : this.jCard.remove('nickname')
},
display: () => {
let a = this.jCard.getOne('fn')?.value,
b = this.fullName(),
@ -85,17 +92,12 @@ export class ContactModel extends AbstractModel {
static reviveFromJson(json) {
const contact = super.reviveFromJson(json);
if (contact) {
let list = [];
let jCard = new JCard(json.jCard),
props = jCard.getOne('n')?.value;
props && props.forEach((value, index) =>
value && contact[nProps[index]](value)
);
props = jCard.getOne('nickname');
props && contact.nickname(props.value);
['email', 'tel', 'url'].forEach(field => {
props = jCard.get(field);
props && props.forEach(prop => {
@ -106,7 +108,6 @@ export class ContactModel extends AbstractModel {
});
});
contact.properties = list;
contact.jCard = jCard;
}
return contact;
@ -116,7 +117,7 @@ export class ContactModel extends AbstractModel {
* @returns {string}
*/
generateUid() {
return ''+this.id;
return '' + this.id;
}
addEmail() {
@ -160,8 +161,6 @@ export class ContactModel extends AbstractModel {
]/*, params, group*/);
// jCard.parseFullName({set:true});
this.nickname() ? jCard.set('nickname', this.nickname()/*, params, group*/) : jCard.remove('nickname');
['email', 'tel', 'url'].forEach(field => {
let values = this[field].map(item => item.value());
jCard.get(field).forEach(prop => {