mirror of
https://github.com/n8n-io/n8n.git
synced 2024-12-25 04:34:06 -08:00
145 lines
3 KiB
TypeScript
145 lines
3 KiB
TypeScript
import {
|
|
IDataObject,
|
|
IExecuteSingleFunctions,
|
|
IN8nHttpFullResponse,
|
|
INodeExecutionData,
|
|
INodeProperties,
|
|
jsonParse,
|
|
} from 'n8n-workflow';
|
|
|
|
export const questionsOperations: INodeProperties[] = [
|
|
{
|
|
displayName: 'Operation',
|
|
name: 'operation',
|
|
type: 'options',
|
|
noDataExpression: true,
|
|
displayOptions: {
|
|
show: {
|
|
resource: ['questions'],
|
|
},
|
|
},
|
|
options: [
|
|
{
|
|
name: 'Get',
|
|
value: 'get',
|
|
description: 'Get a specific question',
|
|
routing: {
|
|
request: {
|
|
method: 'GET',
|
|
url: '={{"/api/card/" + $parameter.questionId}}',
|
|
},
|
|
},
|
|
action: 'Get a questions',
|
|
},
|
|
{
|
|
name: 'Get Many',
|
|
value: 'getAll',
|
|
description: 'Get many questions',
|
|
routing: {
|
|
request: {
|
|
method: 'GET',
|
|
url: '/api/card/',
|
|
},
|
|
},
|
|
action: 'Get many questions',
|
|
},
|
|
{
|
|
name: 'Result Data',
|
|
value: 'resultData',
|
|
description: 'Return the result of the question to a specific file format',
|
|
routing: {
|
|
request: {
|
|
method: 'POST',
|
|
url: '={{"/api/card/" + $parameter.questionId + "/query/" + $parameter.format}}',
|
|
returnFullResponse: true,
|
|
encoding: 'arraybuffer',
|
|
},
|
|
output: {
|
|
postReceive: [
|
|
// @ts-ignore
|
|
async function (
|
|
this: IExecuteSingleFunctions,
|
|
_items: INodeExecutionData[],
|
|
response: IN8nHttpFullResponse,
|
|
): Promise<INodeExecutionData[]> {
|
|
const items = _items;
|
|
const result: INodeExecutionData[] = [];
|
|
for (let i = 0; i < items.length; i++) {
|
|
const newItem: INodeExecutionData = {
|
|
json: items[i].json,
|
|
binary: {},
|
|
};
|
|
|
|
if (items[i].binary !== undefined && newItem.binary) {
|
|
Object.assign(newItem.binary, items[i].binary);
|
|
}
|
|
items[i] = newItem;
|
|
if (this.getNode().parameters.format === 'json') {
|
|
items[i].json = jsonParse<IDataObject[]>(items[i].json as unknown as string)[0];
|
|
console.log(items[i].json);
|
|
delete items[i].binary;
|
|
} else {
|
|
items[i].binary!['data'] = await this.helpers.prepareBinaryData(
|
|
response.body as Buffer,
|
|
'data',
|
|
response.headers['content-type'],
|
|
);
|
|
}
|
|
result.push(items[i]);
|
|
}
|
|
return result;
|
|
},
|
|
],
|
|
},
|
|
},
|
|
action: 'Result Data a questions',
|
|
},
|
|
],
|
|
default: 'getAll',
|
|
},
|
|
];
|
|
|
|
export const questionsFields: INodeProperties[] = [
|
|
{
|
|
displayName: 'Question ID',
|
|
name: 'questionId',
|
|
type: 'string',
|
|
required: true,
|
|
placeholder: '0',
|
|
displayOptions: {
|
|
show: {
|
|
resource: ['questions'],
|
|
operation: ['get', 'resultData'],
|
|
},
|
|
},
|
|
default: '',
|
|
},
|
|
{
|
|
displayName: 'Format',
|
|
name: 'format',
|
|
type: 'options',
|
|
required: true,
|
|
options: [
|
|
{
|
|
name: 'CSV',
|
|
value: 'csv',
|
|
},
|
|
{
|
|
name: 'JSON',
|
|
value: 'json',
|
|
},
|
|
{
|
|
name: 'XLSX',
|
|
value: 'xlsx',
|
|
},
|
|
],
|
|
default: 'csv',
|
|
displayOptions: {
|
|
show: {
|
|
resource: ['questions'],
|
|
operation: ['resultData'],
|
|
},
|
|
},
|
|
},
|
|
];
|