UNPKG

@genexus/web-standard-functions

Version:

GeneXus JavaScript standard functions library for web generators

71 lines 2.51 kB
import { addHours } from "../../../datetime/addHours"; import { GxGuid } from "../../../types/gxguid"; import { GxDatetime } from "../../../types/gxdatetime"; /** * Allows scheduling some task on the end user's calendar. Every parameter is optional except for `title` and `startDate`. * @param {string} title * @param {GxDatetime} startDate * @param {GxDatetime} endDate * @param {GxDatetime} startTime * @param {GxDatetime} endTime * @param {string} place */ export const schedule = (title, startDate, endDate, startTime, endTime, place) => { const sDateTime = getDateTime(startDate, startTime); const eDateTime = getDateTime(endDate, endTime, addHours(sDateTime, 1)); const calStr = createCalendarEvent(sDateTime, eDateTime, title, place); downloadCalendar(calStr); }; function convertDateTimeToString(dt) { // 20190814T160000Z return (dt.getUTCFullYear().toString() + stringFromTimeNumber(dt.getUTCMonth() + 1) + stringFromTimeNumber(dt.getUTCDate()) + "T" + stringFromTimeNumber(dt.getUTCHours()) + stringFromTimeNumber(dt.getUTCMinutes()) + stringFromTimeNumber(dt.getUTCSeconds()) + "Z"); } function stringFromTimeNumber(num) { return num.toString().padStart(2, "0"); } function getDateTime(datePart, timePart, defaultValue) { if (!datePart) { return defaultValue; } const result = datePart; if (timePart) { result.setHours(timePart.getHours()); result.setMinutes(timePart.getMinutes()); result.setSeconds(timePart.getSeconds()); } return result; } export const createCalendarEvent = (start, end, title, place) => `BEGIN:VCALENDAR VERSION:2.0 BEGIN:VEVENT UID:${getGUIDString()} SEQUENCE:0 DTSTAMP:${convertDateTimeToString(new GxDatetime())} DTSTART:${convertDateTimeToString(start)} DTEND:${convertDateTimeToString(end)} SUMMARY:${title} LOCATION:${place} END:VEVENT END:VCALENDAR`; function getGUIDString() { return GxGuid.newGuid().toString(); } function downloadCalendar(calendarStr) { const guidStr = getGUIDString(); const fileName = guidStr + ".ics"; const element = document.createElement("a"); element.setAttribute("href", "data:text/plain;charset=utf-8," + encodeURIComponent(calendarStr)); element.setAttribute("download", fileName); element.style.display = "none"; document.body.appendChild(element); element.click(); document.body.removeChild(element); } //# sourceMappingURL=schedule.js.map