2024-08-07 02:18:05 -07:00
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 :
2024-09-12 07:53:36 -07:00
'ID of the site containing the collection whose items to operate on. Choose from the list, or specify an ID using an <a href="https://docs.n8n.io/code/expressions/">expression</a>.' ,
2024-08-07 02:18:05 -07:00
} ,
{
displayName : 'Collection Name or ID' ,
name : 'collectionId' ,
type : 'options' ,
required : true ,
typeOptions : {
loadOptionsMethod : 'getCollections' ,
loadOptionsDependsOn : [ 'siteId' ] ,
} ,
default : '' ,
description :
2024-09-12 07:53:36 -07:00
'ID of the collection whose items to operate on. Choose from the list, or specify an ID using an <a href="https://docs.n8n.io/code/expressions/">expression</a>.' ,
2024-08-07 02:18:05 -07:00
} ,
{
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 < INodeExecutionData [ ] > {
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 ;
}