add/update helpers
This commit is contained in:
parent
6984ca9be9
commit
ab0e286c21
2 changed files with 144 additions and 0 deletions
75
src/helpers/add-to-calendar-helper.js
Normal file
75
src/helpers/add-to-calendar-helper.js
Normal file
|
|
@ -0,0 +1,75 @@
|
|||
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);
|
||||
}
|
||||
|
|
@ -104,3 +104,72 @@ export function get12HourTimeFormat(time) {
|
|||
}
|
||||
return timeString.join(''); // return adjusted time or original string
|
||||
}
|
||||
|
||||
export function getDateFormat(date, format) {
|
||||
if (date instanceof Date !== true) return;
|
||||
const year = date.getFullYear();
|
||||
const month = (`0${date.getMonth() + 1}`).slice(-2);
|
||||
const day = (`0${date.getDate()}`).slice(-2);
|
||||
const hour = (`0${date.getHours()}`).slice(-2);
|
||||
const minute = (`0${date.getMinutes()}`).slice(-2);
|
||||
const second = (`0${date.getSeconds()}`).slice(-2);
|
||||
// eslint-disable-next-line consistent-return
|
||||
return format
|
||||
.replace('yyyy', year)
|
||||
.replace('MM', month)
|
||||
.replace('dd', day)
|
||||
.replace('hh', hour)
|
||||
.replace('HH', hour)
|
||||
.replace('mm', minute)
|
||||
.replace('ss', second);
|
||||
}
|
||||
|
||||
export function padTo2Digits(time) {
|
||||
// Use the built-in method toString() with a radix of 10 to convert the time value to a decimal string
|
||||
// eslint-disable-next-line no-param-reassign
|
||||
time = time.toString(10);
|
||||
// Use the conditional operator to check if the length of the string is less than 2
|
||||
return time.length < 2
|
||||
// If yes, prepend a '0' to the string and return it
|
||||
// If no, return the original string
|
||||
? `0${time}` : time;
|
||||
}
|
||||
|
||||
export function convertMsToTime(milliseconds) {
|
||||
let seconds = Math.floor(milliseconds / 1000);
|
||||
let minutes = Math.floor(seconds / 60);
|
||||
const hours = Math.floor(minutes / 60);
|
||||
|
||||
seconds %= 60;
|
||||
minutes %= 60;
|
||||
// commenting to get 24 time format
|
||||
// hours = hours % 24;
|
||||
|
||||
return `${padTo2Digits(hours)}${padTo2Digits(minutes)}`;
|
||||
}
|
||||
|
||||
export function calculateDuration(startDate, endDate) {
|
||||
if (startDate instanceof Date !== true) return;
|
||||
if (endDate instanceof Date !== true) return;
|
||||
// eslint-disable-next-line consistent-return
|
||||
return convertMsToTime(endDate - startDate);
|
||||
}
|
||||
|
||||
export function combineDateAndTime(date, time) {
|
||||
// Use the Date.parse() method to convert the date and time strings to a numeric value
|
||||
const timestamp = Date.parse(`${date}T${time}`);
|
||||
// Use the new Date() constructor to create a new date object from the numeric value
|
||||
const newDate = new Date(timestamp);
|
||||
// Return the new date object
|
||||
return newDate;
|
||||
}
|
||||
export function addMinutes(date, minutes) {
|
||||
return new Date(date.getTime() + minutes * 60000);
|
||||
}
|
||||
export function shortTimeString(date) {
|
||||
// Use a ternary operator to check if the input is a valid date object
|
||||
return date instanceof Date
|
||||
// Use the built-in method toLocaleTimeString() to get the short time string in the current locale
|
||||
// Return undefined if the input is not a valid date object
|
||||
? date.toLocaleTimeString('en-us', { hour: 'numeric', minute: 'numeric', hour12: true }) : undefined;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue