mirror of
https://github.com/n8n-io/n8n.git
synced 2024-11-10 06:34:05 -08:00
⚡ Add timezone support to date type field in Notion (#2082)
* Add timezone in date property on Notion Signed-off-by: 5pecia1 <pdpxpd@gmail.com> * ⚡ Improvements to #2036 * ⚡ Minor improvements Co-authored-by: 5pecia1 <pdpxpd@gmail.com> Co-authored-by: Jan Oberhauser <jan.oberhauser@gmail.com>
This commit is contained in:
parent
a6bdc0d0b2
commit
a9987cd541
|
@ -405,6 +405,23 @@ export const databasePageFields = [
|
|||
description: `
|
||||
An ISO 8601 formatted date, with optional time. Represents the end of a date range.`,
|
||||
},
|
||||
{
|
||||
displayName: 'Timezone',
|
||||
name: 'timezone',
|
||||
type: 'options',
|
||||
displayOptions: {
|
||||
show: {
|
||||
type: [
|
||||
'date',
|
||||
],
|
||||
},
|
||||
},
|
||||
typeOptions: {
|
||||
loadOptionsMethod: 'getTimezones',
|
||||
},
|
||||
default: 'default',
|
||||
description: 'Time zone to use. By default n8n timezone is used.',
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
|
@ -765,6 +782,23 @@ export const databasePageFields = [
|
|||
description: `
|
||||
An ISO 8601 formatted date, with optional time. Represents the end of a date range.`,
|
||||
},
|
||||
{
|
||||
displayName: 'Timezone',
|
||||
name: 'timezone',
|
||||
type: 'options',
|
||||
displayOptions: {
|
||||
show: {
|
||||
type: [
|
||||
'date',
|
||||
],
|
||||
},
|
||||
},
|
||||
typeOptions: {
|
||||
loadOptionsMethod: 'getTimezones',
|
||||
},
|
||||
default: 'default',
|
||||
description: 'Time zone to use. By default n8n timezone is used.',
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
|
|
|
@ -284,13 +284,22 @@ function getPropertyKeyValue(value: any, type: string, timezone: string) {
|
|||
break;
|
||||
case 'date':
|
||||
const format = getDateFormat(value.includeTime);
|
||||
const timezoneValue = (value.timezone === 'default') ? timezone : value.timezone;
|
||||
if (value.range === true) {
|
||||
result = {
|
||||
type: 'date', date: { start: moment.tz(value.dateStart, timezone).format(format), end: moment.tz(value.dateEnd, timezone).format(format) },
|
||||
type: 'date',
|
||||
date: {
|
||||
start: moment.tz(value.dateStart, timezoneValue).format(format),
|
||||
end: moment.tz(value.dateEnd, timezoneValue).format(format),
|
||||
},
|
||||
};
|
||||
} else {
|
||||
result = {
|
||||
type: 'date', date: { start: moment.tz(value.date, timezone).format(format), end: null },
|
||||
type: 'date',
|
||||
date: {
|
||||
start: moment.tz(value.date, timezoneValue).format(format),
|
||||
end: null,
|
||||
},
|
||||
};
|
||||
}
|
||||
break;
|
||||
|
@ -350,7 +359,7 @@ export function mapFilters(filters: IDataObject[], timezone: string) {
|
|||
} else if (key === 'date' && !['is_empty', 'is_not_empty'].includes(value.condition as string)) {
|
||||
valuePropertyName = (valuePropertyName !== undefined && !Object.keys(valuePropertyName).length) ? {} : moment.tz(value.date, timezone).utc().format();
|
||||
}
|
||||
|
||||
|
||||
return Object.assign(obj, {
|
||||
['property']: getNameAndType(value.key).name,
|
||||
[key]: { [`${value.condition}`]: valuePropertyName },
|
||||
|
|
|
@ -48,6 +48,8 @@ import {
|
|||
databasePageOperations,
|
||||
} from './DatabasePageDescription';
|
||||
|
||||
import * as moment from 'moment-timezone';
|
||||
|
||||
export class Notion implements INodeType {
|
||||
description: INodeTypeDescription = {
|
||||
displayName: 'Notion (Beta)',
|
||||
|
@ -266,6 +268,28 @@ export class Notion implements INodeType {
|
|||
const { properties } = await notionApiRequest.call(this, 'GET', `/databases/${databaseId}`);
|
||||
return (properties[name][type].options).map((option: IDataObject) => ({ name: option.name, value: option.id }));
|
||||
},
|
||||
|
||||
// Get all the timezones to display them to user so that he can
|
||||
// select them easily
|
||||
async getTimezones(
|
||||
this: ILoadOptionsFunctions,
|
||||
): Promise<INodePropertyOptions[]> {
|
||||
const returnData: INodePropertyOptions[] = [];
|
||||
for (const timezone of moment.tz.names()) {
|
||||
const timezoneName = timezone;
|
||||
const timezoneId = timezone;
|
||||
returnData.push({
|
||||
name: timezoneName,
|
||||
value: timezoneId,
|
||||
});
|
||||
}
|
||||
returnData.unshift({
|
||||
name: 'Default',
|
||||
value: 'default',
|
||||
description: 'Timezone set in n8n',
|
||||
});
|
||||
return returnData;
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in a new issue