import { INodeProperties, } from 'n8n-workflow'; import { getConditions, getSearchFilters, } from './GenericFunctions'; import { blocks, text, } from './Blocks'; import { filters, } from './Filters'; export const databasePageOperations = [ { displayName: 'Operation', name: 'operation', type: 'options', displayOptions: { show: { version: [ 2, ], resource: [ 'databasePage', ], }, }, options: [ { name: 'Create', value: 'create', description: 'Create a pages in a database', }, { name: 'Get', value: 'get', description: 'Get a page in a database', }, { name: 'Get All', value: 'getAll', description: 'Get all pages in a database', }, { name: 'Update', value: 'update', description: 'Update pages in a database', }, ], default: 'create', }, { displayName: 'Operation', name: 'operation', type: 'options', displayOptions: { show: { version: [ 1, ], resource: [ 'databasePage', ], }, }, options: [ { name: 'Create', value: 'create', description: 'Create a pages in a database', }, { name: 'Get All', value: 'getAll', description: 'Get all pages in a database', }, { name: 'Update', value: 'update', description: 'Update pages in a database', }, ], default: 'create', }, ] as INodeProperties[]; export const databasePageFields = [ /* -------------------------------------------------------------------------- */ /* databasePage:create */ /* -------------------------------------------------------------------------- */ { displayName: 'Database Name or ID', name: 'databaseId', type: 'options', default: '', typeOptions: { loadOptionsMethod: 'getDatabases', }, required: true, displayOptions: { show: { resource: [ 'databasePage', ], operation: [ 'create', ], }, }, description: `The Database Page URL from Notion's 'copy link' functionality (or just the ID contained within the URL)`, }, { displayName: 'Title', name: 'title', type: 'string', default: '', displayOptions: { show: { version: [ 2, ], resource: [ 'databasePage', ], operation: [ 'create', ], }, }, description: 'Page title. Appears at the top of the page and can be found via Quick Find.', }, { displayName: 'Simplify Output', name: 'simple', type: 'boolean', displayOptions: { show: { resource: [ 'databasePage', ], operation: [ 'create', ], }, }, default: true, description: 'Whether to return a simplified version of the response instead of the raw data', }, { displayName: 'Properties', name: 'propertiesUi', type: 'fixedCollection', typeOptions: { multipleValues: true, }, displayOptions: { show: { resource: [ 'databasePage', ], operation: [ 'create', ], }, }, default: {}, placeholder: 'Add Property', options: [ { name: 'propertyValues', displayName: 'Property', values: [ { displayName: 'Key', name: 'key', type: 'options', typeOptions: { loadOptionsMethod: 'getDatabaseProperties', loadOptionsDependsOn: [ 'databaseId', ], }, default: '', }, { displayName: 'Type', name: 'type', type: 'hidden', default: '={{$parameter["&key"].split("|")[1]}}', }, { displayName: 'Title', name: 'title', type: 'string', displayOptions: { show: { type: [ 'title', ], }, }, default: '', }, { displayName: 'Rich Text', name: 'richText', type: 'boolean', displayOptions: { show: { type: [ 'rich_text', ], }, }, default: false, }, { displayName: 'Text', name: 'textContent', type: 'string', displayOptions: { show: { type: [ 'rich_text', ], richText: [ false, ], }, }, default: '', }, ...text({ show: { type: [ 'rich_text', ], richText: [ true, ], }, }), { displayName: 'Phone Number', name: 'phoneValue', type: 'string', displayOptions: { show: { type: [ 'phone_number', ], }, }, default: '', description: 'Phone number. No structure is enforced.', }, { displayName: 'Options', name: 'multiSelectValue', type: 'multiOptions', typeOptions: { loadOptionsMethod: 'getPropertySelectValues', }, displayOptions: { show: { type: [ 'multi_select', ], }, }, default: [], description: 'Name of the options you want to set. Multiples can be defined separated by comma', }, { displayName: 'Option', name: 'selectValue', type: 'options', typeOptions: { loadOptionsMethod: 'getPropertySelectValues', }, displayOptions: { show: { type: [ 'select', ], }, }, default: '', description: `Name of the option you want to set`, }, { displayName: 'Email', name: 'emailValue', type: 'string', displayOptions: { show: { type: [ 'email', ], }, }, default: '', description: 'Email address', }, { displayName: 'URL', name: 'urlValue', type: 'string', displayOptions: { show: { type: [ 'url', ], }, }, default: '', description: 'Web address', }, { displayName: 'User IDs', name: 'peopleValue', type: 'multiOptions', typeOptions: { loadOptionsMethod: 'getUsers', }, displayOptions: { show: { type: [ 'people', ], }, }, default: [], description: 'List of users. Multiples can be defined separated by comma.', }, { displayName: 'Relation IDs', name: 'relationValue', type: 'string', typeOptions: { multipleValues: true, }, displayOptions: { show: { type: [ 'relation', ], }, }, default: [], description: 'List of databases that belong to another database. Multiples can be defined separated by comma.', }, { displayName: 'Checked', name: 'checkboxValue', displayOptions: { show: { type: [ 'checkbox', ], }, }, type: 'boolean', default: false, description: 'Whether or not the checkbox is checked. true represents checked. false represents unchecked.', }, { displayName: 'Number', name: 'numberValue', displayOptions: { show: { type: [ 'number', ], }, }, type: 'number', default: 0, description: 'Number value', }, { displayName: 'Range', name: 'range', displayOptions: { show: { type: [ 'date', ], }, }, type: 'boolean', default: false, description: 'Weather or not you want to define a date range', }, { displayName: 'Include Time', name: 'includeTime', displayOptions: { show: { type: [ 'date', ], }, }, type: 'boolean', default: true, description: 'Weather or not to include the time in the date', }, { displayName: 'Date', name: 'date', displayOptions: { show: { range: [ false, ], type: [ 'date', ], }, }, type: 'dateTime', default: '', description: 'An ISO 8601 format date, with optional time', }, { displayName: 'Date Start', name: 'dateStart', displayOptions: { show: { range: [ true, ], type: [ 'date', ], }, }, type: 'dateTime', default: '', description: 'An ISO 8601 format date, with optional time', }, { displayName: 'Date End', name: 'dateEnd', displayOptions: { show: { range: [ true, ], type: [ 'date', ], }, }, type: 'dateTime', default: '', 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.', }, { displayName: 'File URLs', name: 'fileUrls', placeholder: 'Add File', type: 'fixedCollection', typeOptions: { multipleValues: true, sortable: true, }, displayOptions: { show: { '/version': [ 2, ], type: [ 'files', ], }, }, default: {}, options: [ { name: 'fileUrl', displayName: 'File', values: [ { displayName: 'Name', name: 'name', type: 'string', default: '', }, { displayName: 'File URL', name: 'url', type: 'string', default: '', description: 'Link to externally hosted file', }, ], }, ], }, ], }, ], }, ...blocks('databasePage', 'create'), /* -------------------------------------------------------------------------- */ /* databasePage:update */ /* -------------------------------------------------------------------------- */ { displayName: 'Database Page Link or ID', name: 'pageId', type: 'string', default: '', required: true, displayOptions: { show: { resource: [ 'databasePage', ], operation: [ 'update', ], }, }, description: `The Database Page URL from Notion's 'copy link' functionality (or just the ID contained within the URL)`, }, { displayName: 'Simplify Output', name: 'simple', type: 'boolean', displayOptions: { show: { resource: [ 'databasePage', ], operation: [ 'update', ], }, }, default: true, description: 'Whether to return a simplified version of the response instead of the raw data', }, { displayName: 'Properties', name: 'propertiesUi', type: 'fixedCollection', typeOptions: { multipleValues: true, }, displayOptions: { show: { resource: [ 'databasePage', ], operation: [ 'update', ], }, }, default: {}, placeholder: 'Add Property', options: [ { name: 'propertyValues', displayName: 'Property', values: [ { displayName: 'Key', name: 'key', type: 'options', typeOptions: { loadOptionsMethod: 'getDatabaseIdFromPage', loadOptionsDependsOn: [ 'pageId', ], }, default: '', }, { displayName: 'Type', name: 'type', type: 'hidden', default: '={{$parameter["&key"].split("|")[1]}}', }, { displayName: 'Title', name: 'title', type: 'string', displayOptions: { show: { type: [ 'title', ], }, }, default: '', }, { displayName: 'Rich Text', name: 'richText', type: 'boolean', displayOptions: { show: { type: [ 'rich_text', ], }, }, default: false, }, { displayName: 'Text', name: 'textContent', type: 'string', displayOptions: { show: { type: [ 'rich_text', ], richText: [ false, ], }, }, default: '', }, ...text({ show: { type: [ 'rich_text', ], richText: [ true, ], }, }), { displayName: 'Phone Number', name: 'phoneValue', type: 'string', displayOptions: { show: { type: [ 'phone_number', ], }, }, default: '', description: 'Phone number. No structure is enforced.', }, { displayName: 'Options', name: 'multiSelectValue', type: 'multiOptions', typeOptions: { loadOptionsMethod: 'getDatabaseOptionsFromPage', }, displayOptions: { show: { type: [ 'multi_select', ], }, }, default: [], }, { displayName: 'Option', name: 'selectValue', type: 'options', typeOptions: { loadOptionsMethod: 'getDatabaseOptionsFromPage', }, displayOptions: { show: { type: [ 'select', ], }, }, default: '', }, { displayName: 'Email', name: 'emailValue', type: 'string', displayOptions: { show: { type: [ 'email', ], }, }, default: '', }, { displayName: 'URL', name: 'urlValue', type: 'string', displayOptions: { show: { type: [ 'url', ], }, }, default: '', description: 'Web address', }, { displayName: 'User IDs', name: 'peopleValue', type: 'multiOptions', typeOptions: { loadOptionsMethod: 'getUsers', }, displayOptions: { show: { type: [ 'people', ], }, }, default: [], description: 'List of users. Multiples can be defined separated by comma.', }, { displayName: 'Relation IDs', name: 'relationValue', type: 'string', typeOptions: { multipleValues: true, }, displayOptions: { show: { type: [ 'relation', ], }, }, default: [], description: 'List of databases that belong to another database. Multiples can be defined separated by comma.', }, { displayName: 'Checked', name: 'checkboxValue', displayOptions: { show: { type: [ 'checkbox', ], }, }, type: 'boolean', default: false, description: 'Whether or not the checkbox is checked. true represents checked. false represents unchecked.', }, { displayName: 'Number', name: 'numberValue', displayOptions: { show: { type: [ 'number', ], }, }, type: 'number', default: 0, description: 'Number value', }, { displayName: 'Range', name: 'range', displayOptions: { show: { type: [ 'date', ], }, }, type: 'boolean', default: false, description: 'Weather or not you want to define a date range', }, { displayName: 'Include Time', name: 'includeTime', displayOptions: { show: { type: [ 'date', ], }, }, type: 'boolean', default: true, description: 'Weather or not to include the time in the date', }, { displayName: 'Date', name: 'date', displayOptions: { show: { range: [ false, ], type: [ 'date', ], }, }, type: 'dateTime', default: '', description: 'An ISO 8601 format date, with optional time', }, { displayName: 'Date Start', name: 'dateStart', displayOptions: { show: { range: [ true, ], type: [ 'date', ], }, }, type: 'dateTime', default: '', description: 'An ISO 8601 format date, with optional time', }, { displayName: 'Date End', name: 'dateEnd', displayOptions: { show: { range: [ true, ], type: [ 'date', ], }, }, type: 'dateTime', default: '', 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.', }, { displayName: 'File URLs', name: 'fileUrls', placeholder: 'Add File', type: 'fixedCollection', typeOptions: { multipleValues: true, sortable: true, }, displayOptions: { show: { '/version': [ 2, ], type: [ 'files', ], }, }, default: {}, options: [ { name: 'fileUrl', displayName: 'File', values: [ { displayName: 'Name', name: 'name', type: 'string', default: '', }, { displayName: 'File URL', name: 'url', type: 'string', default: '', description: 'Link to externally hosted file', }, ], }, ], }, ], }, ], }, /* -------------------------------------------------------------------------- */ /* databasePage:get */ /* -------------------------------------------------------------------------- */ { displayName: 'Database Page Link or ID', name: 'pageId', type: 'string', default: '', required: true, displayOptions: { show: { version: [ 2, ], resource: [ 'databasePage', ], operation: [ 'get', ], }, }, description: `The Database Page URL from Notion's 'copy link' functionality (or just the ID contained within the URL)`, }, { displayName: 'Simplify Output', name: 'simple', type: 'boolean', displayOptions: { show: { version: [ 2, ], resource: [ 'databasePage', ], operation: [ 'get', ], }, }, default: true, description: 'Whether to return a simplified version of the response instead of the raw data', }, /* -------------------------------------------------------------------------- */ /* databasePage:getAll */ /* -------------------------------------------------------------------------- */ { displayName: 'Database Name or ID', name: 'databaseId', type: 'options', typeOptions: { loadOptionsMethod: 'getDatabases', }, default: '', required: true, displayOptions: { show: { resource: [ 'databasePage', ], operation: [ 'getAll', ], }, }, }, { displayName: 'Return All', name: 'returnAll', type: 'boolean', displayOptions: { show: { resource: [ 'databasePage', ], operation: [ 'getAll', ], }, }, default: false, description: 'Whether to return all results or only up to a given limit', }, { displayName: 'Limit', name: 'limit', type: 'number', displayOptions: { show: { resource: [ 'databasePage', ], operation: [ 'getAll', ], returnAll: [ false, ], }, }, typeOptions: { minValue: 1, maxValue: 100, }, default: 50, description: 'How many results to return', }, { displayName: 'Simplify Output', name: 'simple', type: 'boolean', displayOptions: { show: { resource: [ 'databasePage', ], operation: [ 'getAll', ], }, }, default: true, description: 'Whether to return a simplified version of the response instead of the raw data', }, ...getSearchFilters('databasePage'), { displayName: 'Options', name: 'options', type: 'collection', displayOptions: { show: { operation: [ 'getAll', ], resource: [ 'databasePage', ], }, }, default: {}, placeholder: 'Add Field', options: [ { displayName: 'Download Files', name: 'downloadFiles', type: 'boolean', displayOptions: { show: { '/version': [ 2, ], '/resource': [ 'databasePage', ], '/operation': [ 'getAll', ], }, }, default: false, description: 'If a database field contains a file, whether to download it', }, { displayName: 'Filters', name: 'filter', placeholder: 'Add Filter', type: 'fixedCollection', typeOptions: { multipleValues: false, }, displayOptions: { show: { '/version': [ 1, ], }, }, default: {}, options: [ { displayName: 'Single Condition', name: 'singleCondition', values: [ ...filters(getConditions()), ], }, { displayName: 'Multiple Condition', name: 'multipleCondition', values: [ { displayName: 'Condition', name: 'condition', placeholder: 'Add Condition', type: 'fixedCollection', typeOptions: { multipleValues: true, }, default: {}, options: [ { displayName: 'OR', name: 'or', values: [ ...filters(getConditions()), ], }, { displayName: 'AND', name: 'and', values: [ ...filters(getConditions()), ], }, ], }, ], }, ], }, { displayName: 'Sort', name: 'sort', placeholder: 'Add Sort', type: 'fixedCollection', typeOptions: { multipleValues: true, }, default: {}, options: [ { displayName: 'Sort', name: 'sortValue', values: [ { displayName: 'Timestamp', name: 'timestamp', type: 'boolean', default: false, description: `Whether or not to use the record's timestamp to sort the response`, }, { displayName: 'Property Name', name: 'key', type: 'options', displayOptions: { show: { timestamp: [ false, ], }, }, typeOptions: { loadOptionsMethod: 'getFilterProperties', loadOptionsDependsOn: [ 'datatabaseId', ], }, default: '', description: 'The name of the property to filter by', }, { displayName: 'Property Name', name: 'key', type: 'options', options: [ { name: 'Created Time', value: 'created_time', }, { name: 'Last Edited Time', value: 'last_edited_time', }, ], displayOptions: { show: { timestamp: [ true, ], }, }, default: '', description: 'The name of the property to filter by', }, { displayName: 'Type', name: 'type', type: 'hidden', displayOptions: { show: { timestamp: [ true, ], }, }, default: '={{$parameter["&key"].split("|")[1]}}', }, { displayName: 'Direction', name: 'direction', type: 'options', options: [ { name: 'Ascending', value: 'ascending', }, { name: 'Descending', value: 'descending', }, ], default: '', description: 'The direction to sort', }, ], }, ], }, ], }, ] as INodeProperties[];