75 lines
2.9 KiB
JavaScript
75 lines
2.9 KiB
JavaScript
import calendarStatus from '@/constants/calendar-status';
|
|
import { getDateFormat } from '@/helpers/date-helper';
|
|
|
|
function ToCalendarFileString(str, replacementArg = '<p>') {
|
|
return str.replace('\r\n', replacementArg);
|
|
}
|
|
|
|
export function getCalendarFile(calFile) {
|
|
const dateFormat = 'yyyyMMddTHHmmss';
|
|
const calEvent = [];
|
|
calEvent.push('BEGIN:VCALENDAR');
|
|
calEvent.push('VERSION:2.0');
|
|
calEvent.push('BEGIN:VEVENT');
|
|
calEvent.push(`DTSTAMP:${calFile.TimeStamp}`);
|
|
calEvent.push(`UID:${calFile.UniqueId}@safelite.com`);
|
|
calEvent.push('PRODID:noreply@safelite.com');
|
|
switch (calFile.Status) {
|
|
case calendarStatus.BUSY:
|
|
calEvent.push('X-MICROSOFT-CDO-BUSYSTATUS:BUSY');
|
|
break;
|
|
case calendarStatus.FREE:
|
|
calEvent.push('TRANSP:TRANSPARENT');
|
|
break;
|
|
case calendarStatus.TENTATIVE:
|
|
calEvent.push('STATUS:TENTATIVE');
|
|
break;
|
|
case calendarStatus.OUT_OF_THE_OFFICE:
|
|
calEvent.push('X-MICROSOFT-CDO-BUSYSTATUS:OOF');
|
|
break;
|
|
default:
|
|
// throw new Exception("Invalid CalendarStatus");
|
|
}
|
|
if (calFile.AllDayEvent) {
|
|
calEvent.push(`DTSTART;VALUE=DATE:${getDateFormat(calFile.StartDate, dateFormat)}`);
|
|
calEvent.push(`DTEND;;VALUE=DATE:${getDateFormat(calFile.EndDate, dateFormat)}`);
|
|
} else {
|
|
calEvent.push(`DTSTART:${getDateFormat(calFile.StartDate, dateFormat)}`);
|
|
calEvent.push(`DTEND:${getDateFormat(calFile.EndDate, dateFormat)}`);
|
|
}
|
|
|
|
calEvent.push(`SUMMARY:${ToCalendarFileString(calFile.Subject, ' ')}`);
|
|
if (calFile.Location != null && calFile.Location !== '') {
|
|
calEvent.push(`LOCATION:${ToCalendarFileString(calFile.Location, ' ')}`);
|
|
}
|
|
if (calFile.Body != null && calFile.Body !== '') {
|
|
if (calFile.IsHTML) {
|
|
calEvent.push(`DESCRIPTION:${ToCalendarFileString(calFile.Body)}`);
|
|
calEvent.push('X-ALT-DESC;FMTTYPE=text/html:'
|
|
+ '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">'
|
|
+ '<HTML><HEAD><TITLE></TITLE></HEAD><BODY>'
|
|
+ '<P DIR=LTR><SPAN LANG="en-us">'
|
|
+ `</SPAN>${
|
|
ToCalendarFileString(calFile.Body)
|
|
}</BODY></HTML>`);
|
|
} else {
|
|
calEvent.push(`DESCRIPTION:${ToCalendarFileString(calFile.Body)}`);
|
|
}
|
|
}
|
|
calEvent.push('END:VEVENT');
|
|
calEvent.push('END:VCALENDAR');
|
|
return calEvent.join('\r\n');
|
|
}
|
|
|
|
export function download(filename, fileBody) {
|
|
const element = document.createElement('a');
|
|
element.setAttribute('href', `data:text/plain;charset=utf-8,${encodeURIComponent(fileBody)}`);
|
|
element.setAttribute('download', filename);
|
|
|
|
element.style.display = 'none';
|
|
document.body.appendChild(element);
|
|
|
|
element.click();
|
|
|
|
document.body.removeChild(element);
|
|
}
|