UNPKG

n8n-nodes-base

Version:

Base nodes of n8n

271 lines 9.2 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.description = exports.properties = void 0; exports.execute = execute; const luxon_1 = require("luxon"); const moment_timezone_1 = __importDefault(require("moment-timezone")); const n8n_workflow_1 = require("n8n-workflow"); const utilities_1 = require("../../../../../../utils/utilities"); const descriptions_1 = require("../../descriptions"); const transport_1 = require("../../transport"); exports.properties = [ descriptions_1.calendarRLC, { displayName: 'Title', name: 'subject', type: 'string', default: '', required: true, }, { displayName: 'Start', name: 'startDateTime', type: 'dateTime', default: luxon_1.DateTime.now().toISO(), required: true, }, { displayName: 'End', name: 'endDateTime', type: 'dateTime', required: true, default: luxon_1.DateTime.now().plus({ minutes: 30 }).toISO(), }, { displayName: 'Additional Fields', name: 'additionalFields', type: 'collection', placeholder: 'Add Field', default: {}, options: [ { // eslint-disable-next-line n8n-nodes-base/node-param-display-name-wrong-for-dynamic-multi-options displayName: 'Categories', name: 'categories', type: 'multiOptions', description: 'Choose from the list, or specify IDs using an <a href="https://docs.n8n.io/code/expressions/">expression</a>', typeOptions: { loadOptionsMethod: 'getCategoriesNames', }, default: [], }, { displayName: 'Description', name: 'body', type: 'string', typeOptions: { rows: 2, }, default: '', }, { displayName: 'Description Preview', name: 'bodyPreview', type: 'string', default: '', }, { displayName: 'Hide Attendees', name: 'hideAttendees', type: 'boolean', default: false, description: 'Whether to allow each attendee to only see themselves in the meeting request and meeting tracking list', }, { displayName: 'Importance', name: 'importance', type: 'options', options: [ { name: 'Low', value: 'low', }, { name: 'Normal', value: 'normal', }, { name: 'High', value: 'high', }, ], default: 'normal', }, { displayName: 'Is All Day', name: 'isAllDay', type: 'boolean', default: false, }, { displayName: 'Is Cancelled', name: 'isCancelled', type: 'boolean', default: false, }, { displayName: 'Is Draft', name: 'isDraft', type: 'boolean', default: false, }, { displayName: 'Is Online Meeting', name: 'isOnlineMeeting', type: 'boolean', default: false, }, { displayName: 'Sensitivity', name: 'sensitivity', type: 'options', default: 'normal', options: [ { name: 'Normal', value: 'normal', }, { name: 'Personal', value: 'personal', }, { name: 'Private', value: 'private', }, { name: 'Confidential', value: 'confidential', }, ], }, { displayName: 'Show As', name: 'showAs', type: 'options', default: 'free', options: [ { name: 'Busy', value: 'busy', }, { name: 'Free', value: 'free', }, { name: 'Oof', value: 'oof', }, { name: 'Tentative', value: 'tentative', }, { name: 'Working Elsewhere', value: 'workingElsewhere', }, ], }, { displayName: 'Timezone', name: 'timeZone', type: 'options', default: 'UTC', options: moment_timezone_1.default.tz.names().map((name) => ({ name, value: name, })), }, { displayName: 'Type', name: 'type', type: 'options', default: 'singleInstance', options: [ { name: 'Single Instance', value: 'singleInstance', }, { name: 'Occurrence', value: 'occurrence', }, { name: 'Exception', value: 'exception', }, { name: 'Series Master', value: 'seriesMaster', }, ], }, ], }, ]; const displayOptions = { show: { resource: ['event'], operation: ['create'], }, }; exports.description = (0, utilities_1.updateDisplayOptions)(displayOptions, exports.properties); async function execute(index) { let additionalFields = this.getNodeParameter('additionalFields', index); additionalFields = Object.keys(additionalFields).reduce((acc, key) => { if (additionalFields[key] !== '' || additionalFields[key] !== undefined) { acc[key] = additionalFields[key]; } return acc; }, {}); const calendarId = this.getNodeParameter('calendarId', index, '', { extractValue: true, }); if (calendarId === '') { throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'Calendar ID is required'); } const subject = this.getNodeParameter('subject', index); const endpoint = `/calendars/${calendarId}/events`; let timeZone = 'UTC'; if (additionalFields.timeZone) { timeZone = additionalFields.timeZone; delete additionalFields.timeZone; } if (additionalFields.body) { additionalFields.body = { content: additionalFields.body, contentType: 'html', }; } let startDateTime = this.getNodeParameter('startDateTime', index); let endDateTime = this.getNodeParameter('endDateTime', index); if (additionalFields.isAllDay) { startDateTime = luxon_1.DateTime.fromISO(startDateTime, { zone: timeZone }).toFormat('yyyy-MM-dd'); endDateTime = luxon_1.DateTime.fromISO(endDateTime, { zone: timeZone }).toFormat('yyyy-MM-dd'); const minimalWholeDayDuration = 24; const duration = luxon_1.DateTime.fromISO(startDateTime, { zone: timeZone }).diff(luxon_1.DateTime.fromISO(endDateTime, { zone: timeZone })).hours; if (duration < minimalWholeDayDuration) { endDateTime = luxon_1.DateTime.fromISO(startDateTime, { zone: timeZone }).plus({ hours: 24 }).toISO(); } } const body = { subject, start: { dateTime: startDateTime, timeZone, }, end: { dateTime: endDateTime, timeZone, }, ...additionalFields, }; const responseData = await transport_1.microsoftApiRequest.call(this, 'POST', endpoint, body); const executionData = this.helpers.constructExecutionMetaData(this.helpers.returnJsonArray(responseData), { itemData: { item: index } }); return executionData; } //# sourceMappingURL=create.operation.js.map