import type { IDataObject, INodeExecutionData, INodeProperties, IExecuteFunctions, } from 'n8n-workflow'; import { updateDisplayOptions, wrapData } from '../../../../../utils/utilities'; import { webflowApiRequest, webflowApiRequestAllItems } from '../../../GenericFunctions'; const properties: INodeProperties[] = [ { displayName: 'Site Name or ID', name: 'siteId', type: 'options', required: true, typeOptions: { loadOptionsMethod: 'getSites', }, default: '', description: 'ID of the site containing the collection whose items to operate on. Choose from the list, or specify an ID using an expression.', }, { displayName: 'Collection Name or ID', name: 'collectionId', type: 'options', required: true, typeOptions: { loadOptionsMethod: 'getCollections', loadOptionsDependsOn: ['siteId'], }, default: '', description: 'ID of the collection whose items to operate on. Choose from the list, or specify an ID using an expression.', }, { displayName: 'Return All', name: 'returnAll', type: 'boolean', default: false, description: 'Whether to return all results or only up to a given limit', }, { displayName: 'Limit', name: 'limit', type: 'number', typeOptions: { minValue: 1, maxValue: 100, }, displayOptions: { show: { returnAll: [false], }, }, default: 100, description: 'Max number of results to return', }, ]; const displayOptions = { show: { resource: ['item'], operation: ['getAll'], }, }; export const description = updateDisplayOptions(displayOptions, properties); export async function execute( this: IExecuteFunctions, items: INodeExecutionData[], ): Promise { const returnData: INodeExecutionData[] = []; let responseData; for (let i = 0; i < items.length; i++) { try { const returnAll = this.getNodeParameter('returnAll', i) as boolean; const collectionId = this.getNodeParameter('collectionId', i) as string; const qs: IDataObject = {}; if (returnAll) { responseData = await webflowApiRequestAllItems.call( this, 'GET', `/collections/${collectionId}/items`, {}, ); } else { qs.limit = this.getNodeParameter('limit', i); responseData = await webflowApiRequest.call( this, 'GET', `/collections/${collectionId}/items`, {}, qs, ); responseData = responseData.body.items; } const executionData = this.helpers.constructExecutionMetaData( wrapData(responseData as IDataObject[]), { itemData: { item: i } }, ); returnData.push(...executionData); } catch (error) { if (this.continueOnFail()) { returnData.push({ json: { message: error.message, error } }); continue; } throw error; } } return returnData; }