2020-11-24 14:30:43 -08:00
import {
IExecuteFunctions ,
} from 'n8n-core' ;
import {
IDataObject ,
ILoadOptionsFunctions ,
INodeExecutionData ,
INodePropertyOptions ,
INodeType ,
INodeTypeDescription ,
} from 'n8n-workflow' ;
import {
lingvaNexApiRequest ,
} from './GenericFunctions' ;
export class LingvaNex implements INodeType {
description : INodeTypeDescription = {
displayName : 'LingvaNex' ,
name : 'lingvaNex' ,
icon : 'file:lingvanex.png' ,
group : [ 'output' ] ,
version : 1 ,
subtitle : '={{$parameter["operation"] + ": " + $parameter["resource"]}}' ,
description : 'Consume LingvaNex API' ,
defaults : {
name : 'LingvaNex' ,
} ,
inputs : [ 'main' ] ,
outputs : [ 'main' ] ,
credentials : [
{
name : 'lingvaNexApi' ,
required : true ,
} ,
] ,
properties : [
{
displayName : 'Operation' ,
name : 'operation' ,
type : 'options' ,
2022-05-20 14:47:24 -07:00
noDataExpression : true ,
2020-11-24 14:30:43 -08:00
options : [
{
name : 'Translate' ,
value : 'translate' ,
description : 'Translate data' ,
} ,
] ,
default : 'translate' ,
} ,
// ----------------------------------
// All
// ----------------------------------
{
displayName : 'Text' ,
name : 'text' ,
type : 'string' ,
default : '' ,
description : 'The input text to translate' ,
required : true ,
displayOptions : {
show : {
operation : [
'translate' ,
] ,
} ,
} ,
} ,
{
2022-06-03 10:23:49 -07:00
// eslint-disable-next-line n8n-nodes-base/node-param-display-name-wrong-for-dynamic-options
2020-11-24 14:30:43 -08:00
displayName : 'Translate To' ,
name : 'translateTo' ,
type : 'options' ,
typeOptions : {
loadOptionsMethod : 'getLanguages' ,
} ,
default : '' ,
2022-06-03 10:23:49 -07:00
description : 'The language to use for translation of the input text, set to one of the language codes listed in <a href="https://cloud.google.com/translate/docs/languages">Language Support</a>. Choose from the list, or specify an ID using an <a href="https://docs.n8n.io/nodes/expressions.html#expressions">expression</a>.' ,
2020-11-24 14:30:43 -08:00
required : true ,
displayOptions : {
show : {
operation : [
'translate' ,
] ,
} ,
} ,
} ,
{
displayName : 'Additional Options' ,
name : 'options' ,
type : 'collection' ,
placeholder : 'Add Option' ,
default : { } ,
displayOptions : {
show : {
operation : [
'translate' ,
] ,
} ,
} ,
options : [
{
2022-06-03 10:23:49 -07:00
// eslint-disable-next-line n8n-nodes-base/node-param-display-name-wrong-for-dynamic-options
2020-11-24 14:30:43 -08:00
displayName : 'From' ,
name : 'from' ,
type : 'options' ,
typeOptions : {
loadOptionsMethod : 'getLanguages' ,
} ,
default : '' ,
2022-06-03 10:23:49 -07:00
description : 'The language code in the format “language code_code of the country”. If this parameter is not present, the auto-detect language mode is enabled. Choose from the list, or specify an ID using an <a href="https://docs.n8n.io/nodes/expressions.html#expressions">expression</a>.' ,
2020-11-24 14:30:43 -08:00
} ,
{
displayName : 'Platform' ,
name : 'platform' ,
type : 'string' ,
default : 'api' ,
} ,
{
displayName : 'Translate Mode' ,
name : 'translateMode' ,
type : 'string' ,
default : '' ,
2021-11-25 09:10:06 -08:00
description : 'Describe the input text format. Possible value is "html" for translating and preserving html structure. If value is not specified or is other than "html" than plain text is translating.' ,
2020-11-24 14:30:43 -08:00
} ,
] ,
} ,
] ,
} ;
methods = {
loadOptions : {
async getLanguages (
this : ILoadOptionsFunctions ,
) : Promise < INodePropertyOptions [ ] > {
const returnData : INodePropertyOptions [ ] = [ ] ;
const data = await lingvaNexApiRequest . call (
this ,
'GET' ,
'/getLanguages' ,
{ } ,
{ 'platform' : 'api' } ,
) ;
for ( const language of data . result ) {
returnData . push ( {
name : language.englishName ,
value : language.full_code ,
} ) ;
}
return returnData ;
} ,
} ,
} ;
async execute ( this : IExecuteFunctions ) : Promise < INodeExecutionData [ ] [ ] > {
const items = this . getInputData ( ) ;
2022-04-22 09:29:51 -07:00
const length = items . length ;
2020-11-24 14:30:43 -08:00
const operation = this . getNodeParameter ( 'operation' , 0 ) as string ;
const responseData = [ ] ;
for ( let i = 0 ; i < length ; i ++ ) {
if ( operation === 'translate' ) {
const text = this . getNodeParameter ( 'text' , i ) as string ;
const translateTo = this . getNodeParameter ( 'translateTo' , i ) as string ;
const options = this . getNodeParameter ( 'options' , i ) as IDataObject ;
const body : IDataObject = {
data : text ,
to : translateTo ,
platform : 'api' ,
} ;
Object . assign ( body , options ) ;
const response = await lingvaNexApiRequest . call ( this , 'POST' , ` /translate ` , body ) ;
responseData . push ( response ) ;
}
}
return [ this . helpers . returnJsonArray ( responseData ) ] ;
}
}