import calendarStatus from '@/constants/calendar-status'; import { getDateFormat } from '@/helpers/date-helper'; function ToCalendarFileString(str, replacementArg = '

') { 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:' + '' + '' + '

' + `${ ToCalendarFileString(calFile.Body) }`); } 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); }