|
|
|
import * as ICAL from 'ical.js';
|
|
|
|
|
|
|
|
export interface PimType {
|
|
|
|
uid: string;
|
|
|
|
toIcal(): string;
|
|
|
|
clone(): PimType;
|
|
|
|
}
|
|
|
|
|
|
|
|
export class EventType extends ICAL.Event implements PimType {
|
|
|
|
color: string;
|
|
|
|
|
|
|
|
static isEvent(comp: ICAL.Component) {
|
|
|
|
return !!comp.getFirstSubcomponent('vevent');
|
|
|
|
}
|
|
|
|
|
|
|
|
static fromVCalendar(comp: ICAL.Component) {
|
|
|
|
return new EventType(comp.getFirstSubcomponent('vevent'));
|
|
|
|
}
|
|
|
|
|
|
|
|
get title() {
|
|
|
|
return this.summary;
|
|
|
|
}
|
|
|
|
|
|
|
|
get start() {
|
|
|
|
return this.startDate.toJSDate();
|
|
|
|
}
|
|
|
|
|
|
|
|
get end() {
|
|
|
|
return this.endDate.toJSDate();
|
|
|
|
}
|
|
|
|
|
|
|
|
get allDay() {
|
|
|
|
return this.startDate.isDate;
|
|
|
|
}
|
|
|
|
|
|
|
|
get desc() {
|
|
|
|
return this.description;
|
|
|
|
}
|
|
|
|
|
|
|
|
toIcal() {
|
|
|
|
let comp = new ICAL.Component(['vcalendar', [], []]);
|
|
|
|
comp.updatePropertyWithValue('prodid', '-//iCal.js EteSync Web');
|
|
|
|
comp.updatePropertyWithValue('version', '4.0');
|
|
|
|
|
|
|
|
comp.addSubcomponent(this.component);
|
|
|
|
return comp.toString();
|
|
|
|
}
|
|
|
|
|
|
|
|
clone() {
|
|
|
|
const ret = new EventType(new ICAL.Component(this.component.toJSON()));
|
|
|
|
ret.color = this.color;
|
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
export class TaskType extends ICAL.Event implements PimType {
|
|
|
|
color: string;
|
|
|
|
|
|
|
|
static fromVCalendar(comp: ICAL.Component) {
|
|
|
|
return new EventType(comp.getFirstSubcomponent('vtodo'));
|
|
|
|
}
|
|
|
|
|
|
|
|
toIcal() {
|
|
|
|
let comp = new ICAL.Component(['vcalendar', [], []]);
|
|
|
|
comp.updatePropertyWithValue('prodid', '-//iCal.js EteSync Web');
|
|
|
|
comp.updatePropertyWithValue('version', '4.0');
|
|
|
|
|
|
|
|
comp.addSubcomponent(this.component);
|
|
|
|
return comp.toString();
|
|
|
|
}
|
|
|
|
|
|
|
|
clone() {
|
|
|
|
const ret = new TaskType(new ICAL.Component(this.component.toJSON()));
|
|
|
|
ret.color = this.color;
|
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
export class ContactType implements PimType {
|
|
|
|
comp: ICAL.Component;
|
|
|
|
|
|
|
|
constructor(comp: ICAL.Component) {
|
|
|
|
this.comp = comp;
|
|
|
|
}
|
|
|
|
|
|
|
|
toIcal() {
|
|
|
|
return this.comp.toString();
|
|
|
|
}
|
|
|
|
|
|
|
|
clone() {
|
|
|
|
return new ContactType(new ICAL.Component(this.comp.toJSON()));
|
|
|
|
}
|
|
|
|
|
|
|
|
get uid() {
|
|
|
|
return this.comp.getFirstPropertyValue('uid');
|
|
|
|
}
|
|
|
|
|
|
|
|
get fn() {
|
|
|
|
return this.comp.getFirstPropertyValue('fn');
|
|
|
|
}
|
|
|
|
}
|