mirror of
https://github.com/Abdulazizzn/n8n-enterprise-unlocked.git
synced 2025-12-16 17:46:45 +00:00
63 lines
1.6 KiB
TypeScript
63 lines
1.6 KiB
TypeScript
import {
|
|
DATA_TABLE_SYSTEM_COLUMNS,
|
|
type IDataObject,
|
|
type IDisplayOptions,
|
|
type IExecuteFunctions,
|
|
type INodeProperties,
|
|
} from 'n8n-workflow';
|
|
|
|
import { DATA_TABLE_ID_FIELD } from './fields';
|
|
import { dataObjectToApiInput } from './utils';
|
|
|
|
export function makeAddRow(operation: string, displayOptions: IDisplayOptions) {
|
|
return {
|
|
displayName: 'Columns',
|
|
name: 'columns',
|
|
type: 'resourceMapper',
|
|
default: {
|
|
mappingMode: 'defineBelow',
|
|
value: null,
|
|
},
|
|
noDataExpression: true,
|
|
required: true,
|
|
typeOptions: {
|
|
loadOptionsDependsOn: [`${DATA_TABLE_ID_FIELD}.value`],
|
|
resourceMapper: {
|
|
valuesLabel: `Values to ${operation}`,
|
|
resourceMapperMethod: 'getDataTables',
|
|
mode: 'add',
|
|
fieldWords: {
|
|
singular: 'column',
|
|
plural: 'columns',
|
|
},
|
|
addAllFields: true,
|
|
multiKeyMatch: true,
|
|
hideNoDataError: true,
|
|
},
|
|
},
|
|
displayOptions,
|
|
} satisfies INodeProperties;
|
|
}
|
|
|
|
export function getAddRow(ctx: IExecuteFunctions, index: number) {
|
|
const items = ctx.getInputData();
|
|
const dataMode = ctx.getNodeParameter('columns.mappingMode', index) as string;
|
|
|
|
let data: IDataObject;
|
|
|
|
if (dataMode === 'autoMapInputData') {
|
|
data = { ...items[index].json };
|
|
// We automatically remove our system columns for better UX when feeding data table outputs
|
|
// into another data table node
|
|
for (const systemColumn of DATA_TABLE_SYSTEM_COLUMNS) {
|
|
delete data[systemColumn];
|
|
}
|
|
} else {
|
|
const fields = ctx.getNodeParameter('columns.value', index, {}) as IDataObject;
|
|
|
|
data = fields;
|
|
}
|
|
|
|
return dataObjectToApiInput(data, ctx.getNode(), index);
|
|
}
|