n8n-nodes-base
Version:
Base nodes of n8n
108 lines • 4.57 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.description = void 0;
exports.execute = execute;
const utilities_1 = require("../../../../../utils/utilities");
const utils_1 = require("../../helpers/utils");
const transport_1 = require("../../transport");
const common_descriptions_1 = require("../common.descriptions");
const properties = [
{
displayName: 'Columns',
name: 'columns',
type: 'resourceMapper',
noDataExpression: true,
default: {
mappingMode: 'defineBelow',
value: null,
},
required: true,
typeOptions: {
loadOptionsDependsOn: ['table.value', 'base.value'],
resourceMapper: {
resourceMapperMethod: 'getColumnsWithRecordId',
mode: 'update',
fieldWords: {
singular: 'column',
plural: 'columns',
},
addAllFields: true,
multiKeyMatch: true,
},
},
},
...common_descriptions_1.insertUpdateOptions,
];
const displayOptions = {
show: {
resource: ['record'],
operation: ['update'],
},
};
exports.description = (0, utilities_1.updateDisplayOptions)(displayOptions, properties);
async function execute(items, base, table) {
const returnData = [];
const endpoint = `${base}/${table}`;
const dataMode = this.getNodeParameter('columns.mappingMode', 0);
const columnsToMatchOn = this.getNodeParameter('columns.matchingColumns', 0);
let tableData = [];
if (!columnsToMatchOn.includes('id')) {
const response = await transport_1.apiRequestAllItems.call(this, 'GET', endpoint, {}, { fields: columnsToMatchOn });
tableData = response.records;
}
for (let i = 0; i < items.length; i++) {
let recordId = '';
try {
const records = [];
const options = this.getNodeParameter('options', i, {});
const typecast = options.typecast ? true : false;
if (dataMode === 'autoMapInputData') {
if (columnsToMatchOn.includes('id')) {
const { id, ...fields } = items[i].json;
recordId = id;
records.push({
id: recordId,
fields: (0, utils_1.removeIgnored)(fields, options.ignoreFields),
});
}
else {
const matches = (0, utils_1.findMatches)(tableData, columnsToMatchOn, items[i].json, options.updateAllMatches);
for (const match of matches) {
const id = match.id;
const fields = items[i].json;
records.push({ id, fields: (0, utils_1.removeIgnored)(fields, options.ignoreFields) });
}
}
}
if (dataMode === 'defineBelow') {
const getNodeParameterOptions = typecast ? { skipValidation: true } : undefined;
if (columnsToMatchOn.includes('id')) {
const { id, ...fields } = this.getNodeParameter('columns.value', i, [], getNodeParameterOptions);
records.push({ id: id, fields });
}
else {
const fields = this.getNodeParameter('columns.value', i, [], getNodeParameterOptions);
const matches = (0, utils_1.findMatches)(tableData, columnsToMatchOn, fields, options.updateAllMatches);
for (const match of matches) {
const id = match.id;
records.push({ id, fields: (0, utils_1.removeIgnored)(fields, columnsToMatchOn) });
}
}
}
const body = { typecast };
const responseData = await transport_1.batchUpdate.call(this, endpoint, body, records);
const executionData = this.helpers.constructExecutionMetaData((0, utilities_1.wrapData)(responseData.records), { itemData: { item: i } });
returnData.push(...executionData);
}
catch (error) {
error = (0, utils_1.processAirtableError)(error, recordId, i);
if (this.continueOnFail()) {
returnData.push({ json: { message: error.message, error } });
continue;
}
throw error;
}
}
return returnData;
}
//# sourceMappingURL=update.operation.js.map