diff --git a/packages/nodes-base/nodes/Odoo/GenericFunctions.ts b/packages/nodes-base/nodes/Odoo/GenericFunctions.ts index 5039fb8941..1e2acfcbe7 100644 --- a/packages/nodes-base/nodes/Odoo/GenericFunctions.ts +++ b/packages/nodes-base/nodes/Odoo/GenericFunctions.ts @@ -9,7 +9,7 @@ import type { import { NodeApiError, randomInt } from 'n8n-workflow'; const serviceJSONRPC = 'object'; -const methodJSONRPC = 'execute'; +const methodJSONRPC = 'execute_kw'; export const mapOperationToJSONRPC = { create: 'create', @@ -147,7 +147,7 @@ export async function odooGetModelFields( method: 'call', params: { service: serviceJSONRPC, - method: methodJSONRPC, + method: 'execute', args: [ db, userID, @@ -177,6 +177,7 @@ export async function odooCreate( operation: OdooCRUD, url: string, newItem: IDataObject, + context?: IDataObject, ) { try { const body = { @@ -191,7 +192,8 @@ export async function odooCreate( password, mapOdooResources[resource] || resource, mapOperationToJSONRPC[operation], - newItem || {}, + [newItem || {}], + { context: context || {} }, ], }, id: randomInt(100), @@ -214,6 +216,7 @@ export async function odooGet( url: string, itemsID: string, fieldsToReturn?: IDataObject[], + context?: IDataObject, ) { try { if (!/^\d+$/.test(itemsID) || !parseInt(itemsID, 10)) { @@ -235,7 +238,10 @@ export async function odooGet( mapOdooResources[resource] || resource, mapOperationToJSONRPC[operation], itemsID ? [+itemsID] : [], - fieldsToReturn || [], + { + fields: fieldsToReturn || [], + context: context || {}, + } ], }, id: randomInt(100), @@ -259,6 +265,7 @@ export async function odooGetAll( filters?: IOdooFilterOperations, fieldsToReturn?: IDataObject[], limit = 0, + context?: IDataObject, ) { try { const body = { @@ -273,10 +280,13 @@ export async function odooGetAll( password, mapOdooResources[resource] || resource, mapOperationToJSONRPC[operation], - (filters && processFilters(filters)) || [], - fieldsToReturn || [], - 0, // offset - limit, + [(filters && processFilters(filters)) || []], + { + fields: fieldsToReturn || [], + offset: 0, + limit: limit, + context: context || {}, + } ], }, id: randomInt(100), @@ -299,6 +309,7 @@ export async function odooUpdate( url: string, itemsID: string, fieldsToUpdate: IDataObject, + context?: IDataObject, ) { try { if (!Object.keys(fieldsToUpdate).length) { @@ -325,8 +336,8 @@ export async function odooUpdate( password, mapOdooResources[resource] || resource, mapOperationToJSONRPC[operation], - itemsID ? [+itemsID] : [], - fieldsToUpdate, + [itemsID ? [+itemsID] : [], fieldsToUpdate], + { context: context || {} }, ], }, id: randomInt(100), @@ -348,6 +359,7 @@ export async function odooDelete( operation: OdooCRUD, url: string, itemsID: string, + context?: IDataObject, ) { if (!/^\d+$/.test(itemsID) || !parseInt(itemsID, 10)) { throw new NodeApiError(this.getNode(), { @@ -369,6 +381,7 @@ export async function odooDelete( mapOdooResources[resource] || resource, mapOperationToJSONRPC[operation], itemsID ? [+itemsID] : [], + { context: context || {} }, ], }, id: randomInt(100), diff --git a/packages/nodes-base/nodes/Odoo/Odoo.node.ts b/packages/nodes-base/nodes/Odoo/Odoo.node.ts index d507d756fc..6e580ccdee 100644 --- a/packages/nodes-base/nodes/Odoo/Odoo.node.ts +++ b/packages/nodes-base/nodes/Odoo/Odoo.node.ts @@ -222,6 +222,36 @@ export class Odoo implements INodeType { return options.sort((a, b) => a.name?.localeCompare(b.name) || 0) as INodePropertyOptions[]; }, + async getSupportedLanguages(this: ILoadOptionsFunctions): Promise { + const credentials = await this.getCredentials('odooApi'); + const url = credentials.url as string; + const username = credentials.username as string; + const password = credentials.password as string; + const db = odooGetDBName(credentials.db as string, url); + const userID = await odooGetUserID.call(this, db, username, password, url); + + const body = { + jsonrpc: '2.0', + method: 'call', + params: { + service: 'object', + method: 'execute', + args: [db, userID, password, 'res.lang', 'search_read', [], ['code', 'name']], + }, + id: randomInt(100), + }; + + const response = (await odooJSONRPCRequest.call(this, body, url)) as IDataObject[]; + + const options = Object.values(response).map(lang => ({ + name: lang.name as string, + value: lang.code as string + })); + + return options.sort((a, b) => + a.name?.localeCompare(b.name) || 0 + ) as INodePropertyOptions[]; + } }, credentialTest: { async odooApiTest( @@ -326,6 +356,10 @@ export class Odoo implements INodeType { name, ...additionalFields, }; + const options = this.getNodeParameter('options', i); + const language = options.language as string; + const context = language ? { lang: language } : {}; + responseData = await odooCreate.call( this, db, @@ -335,11 +369,16 @@ export class Odoo implements INodeType { operation, url, fields, + context, ); } if (operation === 'delete') { const contactId = this.getNodeParameter('contactId', i) as string; + const options = this.getNodeParameter('options', i); + const language = options.language as string; + const context = language ? { lang: language } : {}; + responseData = await odooDelete.call( this, db, @@ -349,6 +388,7 @@ export class Odoo implements INodeType { operation, url, contactId, + context, ); } @@ -356,6 +396,9 @@ export class Odoo implements INodeType { const contactId = this.getNodeParameter('contactId', i) as string; const options = this.getNodeParameter('options', i); const fields = (options.fieldsList as IDataObject[]) || []; + const language = options.language as string; + const context = language ? { lang: language } : {}; + responseData = await odooGet.call( this, db, @@ -366,6 +409,7 @@ export class Odoo implements INodeType { url, contactId, fields, + context, ); } @@ -373,6 +417,9 @@ export class Odoo implements INodeType { const returnAll = this.getNodeParameter('returnAll', i); const options = this.getNodeParameter('options', i); const fields = (options.fieldsList as IDataObject[]) || []; + const language = options.language as string; + const context = language ? { lang: language } : {}; + if (returnAll) { responseData = await odooGetAll.call( this, @@ -384,6 +431,8 @@ export class Odoo implements INodeType { url, undefined, fields, + undefined, + context, ); } else { const limit = this.getNodeParameter('limit', i); @@ -398,6 +447,7 @@ export class Odoo implements INodeType { undefined, // filters, only for custom resource fields, limit, + context, ); } } @@ -417,6 +467,10 @@ export class Odoo implements INodeType { delete updateFields.address; } + const options = this.getNodeParameter('options', i); + const language = options.language as string; + const context = language ? { lang: language } : {}; + responseData = await odooUpdate.call( this, db, @@ -427,6 +481,7 @@ export class Odoo implements INodeType { url, contactId, updateFields, + context, ); } } @@ -435,6 +490,10 @@ export class Odoo implements INodeType { const customResource = this.getNodeParameter('customResource', i) as string; if (operation === 'create') { const fields = this.getNodeParameter('fieldsToCreateOrUpdate', i) as IDataObject; + const options = this.getNodeParameter('options', i); + const language = options.language as string; + const context = language ? { lang: language } : {}; + responseData = await odooCreate.call( this, db, @@ -444,11 +503,16 @@ export class Odoo implements INodeType { operation, url, processNameValueFields(fields), + context, ); } if (operation === 'delete') { const customResourceId = this.getNodeParameter('customResourceId', i) as string; + const options = this.getNodeParameter('options', i); + const language = options.language as string; + const context = language ? { lang: language } : {}; + responseData = await odooDelete.call( this, db, @@ -458,6 +522,7 @@ export class Odoo implements INodeType { operation, url, customResourceId, + context, ); } @@ -465,6 +530,9 @@ export class Odoo implements INodeType { const customResourceId = this.getNodeParameter('customResourceId', i) as string; const options = this.getNodeParameter('options', i); const fields = (options.fieldsList as IDataObject[]) || []; + const language = options.language as string; + const context = language ? { lang: language } : {}; + responseData = await odooGet.call( this, db, @@ -475,14 +543,18 @@ export class Odoo implements INodeType { url, customResourceId, fields, + context, ); } if (operation === 'getAll') { const returnAll = this.getNodeParameter('returnAll', i); const options = this.getNodeParameter('options', i); - const fields = (options.fieldsList as IDataObject[]) || []; const filter = this.getNodeParameter('filterRequest', i) as IOdooFilterOperations; + const fields = (options.fieldsList as IDataObject[]) || []; + const language = options.language as string; + const context = language ? { lang: language } : {}; + if (returnAll) { responseData = await odooGetAll.call( this, @@ -494,6 +566,8 @@ export class Odoo implements INodeType { url, filter, fields, + undefined, + context, ); } else { const limit = this.getNodeParameter('limit', i); @@ -508,6 +582,7 @@ export class Odoo implements INodeType { filter, fields, limit, + context, ); } } @@ -515,6 +590,10 @@ export class Odoo implements INodeType { if (operation === 'update') { const customResourceId = this.getNodeParameter('customResourceId', i) as string; const fields = this.getNodeParameter('fieldsToCreateOrUpdate', i) as IDataObject; + const options = this.getNodeParameter('options', i); + const language = options.language as string; + const context = language ? { lang: language } : {}; + responseData = await odooUpdate.call( this, db, @@ -525,6 +604,7 @@ export class Odoo implements INodeType { url, customResourceId, processNameValueFields(fields), + context, ); } } @@ -536,7 +616,11 @@ export class Odoo implements INodeType { const fields: IDataObject = { memo, // ...additionalFields, - }; + }; + const options = this.getNodeParameter('options', i); + const language = options.language as string; + const context = language ? { lang: language } : {}; + responseData = await odooCreate.call( this, db, @@ -546,11 +630,16 @@ export class Odoo implements INodeType { operation, url, fields, + context, ); } if (operation === 'delete') { const noteId = this.getNodeParameter('noteId', i) as string; + const options = this.getNodeParameter('options', i); + const language = options.language as string; + const context = language ? { lang: language } : {}; + responseData = await odooDelete.call( this, db, @@ -560,6 +649,7 @@ export class Odoo implements INodeType { operation, url, noteId, + context, ); } @@ -567,6 +657,9 @@ export class Odoo implements INodeType { const noteId = this.getNodeParameter('noteId', i) as string; const options = this.getNodeParameter('options', i); const fields = (options.fieldsList as IDataObject[]) || []; + const language = options.language as string; + const context = language ? { lang: language } : {}; + responseData = await odooGet.call( this, db, @@ -577,6 +670,7 @@ export class Odoo implements INodeType { url, noteId, fields, + context, ); } @@ -584,6 +678,9 @@ export class Odoo implements INodeType { const returnAll = this.getNodeParameter('returnAll', i); const options = this.getNodeParameter('options', i); const fields = (options.fieldsList as IDataObject[]) || []; + const language = options.language as string; + const context = language ? { lang: language } : {}; + if (returnAll) { responseData = await odooGetAll.call( this, @@ -595,6 +692,8 @@ export class Odoo implements INodeType { url, undefined, fields, + undefined, + context, ); } else { const limit = this.getNodeParameter('limit', i); @@ -609,6 +708,7 @@ export class Odoo implements INodeType { undefined, // filters, only for custom resource fields, limit, + context, ); } } @@ -619,6 +719,10 @@ export class Odoo implements INodeType { const fields: IDataObject = { memo, }; + const options = this.getNodeParameter('options', i); + const language = options.language as string; + const context = language ? { lang: language } : {}; + responseData = await odooUpdate.call( this, db, @@ -629,6 +733,7 @@ export class Odoo implements INodeType { url, noteId, fields, + context, ); } } @@ -641,6 +746,9 @@ export class Odoo implements INodeType { name, ...additionalFields, }; + const options = this.getNodeParameter('options', i); + const language = options.language as string; + const context = language ? { lang: language } : {}; responseData = await odooCreate.call( this, @@ -651,11 +759,16 @@ export class Odoo implements INodeType { operation, url, fields, + context, ); } if (operation === 'delete') { const opportunityId = this.getNodeParameter('opportunityId', i) as string; + const options = this.getNodeParameter('options', i); + const language = options.language as string; + const context = language ? { lang: language } : {}; + responseData = await odooDelete.call( this, db, @@ -665,6 +778,7 @@ export class Odoo implements INodeType { operation, url, opportunityId, + context, ); } @@ -672,6 +786,9 @@ export class Odoo implements INodeType { const opportunityId = this.getNodeParameter('opportunityId', i) as string; const options = this.getNodeParameter('options', i); const fields = (options.fieldsList as IDataObject[]) || []; + const language = options.language as string; + const context = language ? { lang: language } : {}; + responseData = await odooGet.call( this, db, @@ -682,6 +799,7 @@ export class Odoo implements INodeType { url, opportunityId, fields, + context, ); } @@ -689,6 +807,9 @@ export class Odoo implements INodeType { const returnAll = this.getNodeParameter('returnAll', i); const options = this.getNodeParameter('options', i); const fields = (options.fieldsList as IDataObject[]) || []; + const language = options.language as string; + const context = language ? { lang: language } : {}; + if (returnAll) { responseData = await odooGetAll.call( this, @@ -700,6 +821,8 @@ export class Odoo implements INodeType { url, undefined, fields, + undefined, + context, ); } else { const limit = this.getNodeParameter('limit', i); @@ -714,6 +837,7 @@ export class Odoo implements INodeType { undefined, // filters, only for custom resource fields, limit, + context, ); } } @@ -721,6 +845,10 @@ export class Odoo implements INodeType { if (operation === 'update') { const opportunityId = this.getNodeParameter('opportunityId', i) as string; const updateFields = this.getNodeParameter('updateFields', i); + const options = this.getNodeParameter('options', i); + const language = options.language as string; + const context = language ? { lang: language } : {}; + responseData = await odooUpdate.call( this, db, @@ -731,6 +859,7 @@ export class Odoo implements INodeType { url, opportunityId, updateFields, + context, ); } } diff --git a/packages/nodes-base/nodes/Odoo/descriptions/ContactDescription.ts b/packages/nodes-base/nodes/Odoo/descriptions/ContactDescription.ts index b78287ecaf..c03187cd24 100644 --- a/packages/nodes-base/nodes/Odoo/descriptions/ContactDescription.ts +++ b/packages/nodes-base/nodes/Odoo/descriptions/ContactDescription.ts @@ -186,6 +186,31 @@ export const contactDescription: INodeProperties[] = [ }, ], }, + { + displayName: 'Options', + name: 'options', + type: 'collection', + default: {}, + placeholder: 'Add option', + displayOptions: { + show: { + operation: ['create'], + resource: ['contact'], + }, + }, + options: [ + { + displayName: 'Language', + name: 'language', + type: 'options', + description: 'Choose from the list', + default: '', + typeOptions: { + loadOptionsMethod: 'getSupportedLanguages', + }, + }, + ], + }, /* -------------------------------------------------------------------------- */ /* contact:get */ @@ -245,7 +270,7 @@ export const contactDescription: INodeProperties[] = [ name: 'options', type: 'collection', default: {}, - placeholder: 'Add Field', + placeholder: 'Add option', displayOptions: { show: { operation: ['getAll', 'get'], @@ -264,6 +289,16 @@ export const contactDescription: INodeProperties[] = [ loadOptionsMethod: 'getModelFields', }, }, + { + displayName: 'Language', + name: 'language', + type: 'options', + description: 'Choose from the list', + default: '', + typeOptions: { + loadOptionsMethod: 'getSupportedLanguages', + }, + }, ], }, @@ -411,4 +446,58 @@ export const contactDescription: INodeProperties[] = [ }, ], }, + { + displayName: 'Options', + name: 'options', + type: 'collection', + default: {}, + placeholder: 'Add option', + displayOptions: { + show: { + operation: ['update'], + resource: ['contact'], + }, + }, + options: [ + { + displayName: 'Language', + name: 'language', + type: 'options', + description: 'Choose from the list', + default: '', + typeOptions: { + loadOptionsMethod: 'getSupportedLanguages', + }, + }, + ], + }, + + /* -------------------------------------------------------------------------- */ + /* contact:delete */ + /* -------------------------------------------------------------------------- */ + { + displayName: 'Options', + name: 'options', + type: 'collection', + default: {}, + placeholder: 'Add option', + displayOptions: { + show: { + operation: ['delete'], + resource: ['contact'], + }, + }, + options: [ + { + displayName: 'Language', + name: 'language', + type: 'options', + description: 'Choose from the list', + default: '', + typeOptions: { + loadOptionsMethod: 'getSupportedLanguages', + }, + }, + ], + }, ]; diff --git a/packages/nodes-base/nodes/Odoo/descriptions/CustomResourceDescription.ts b/packages/nodes-base/nodes/Odoo/descriptions/CustomResourceDescription.ts index 67552c19d9..25227537e7 100644 --- a/packages/nodes-base/nodes/Odoo/descriptions/CustomResourceDescription.ts +++ b/packages/nodes-base/nodes/Odoo/descriptions/CustomResourceDescription.ts @@ -109,6 +109,31 @@ export const customResourceDescription: INodeProperties[] = [ }, ], }, + { + displayName: 'Options', + name: 'options', + type: 'collection', + default: {}, + placeholder: 'Add option', + displayOptions: { + show: { + operation: ['create'], + resource: ['custom'], + }, + }, + options: [ + { + displayName: 'Language', + name: 'language', + type: 'options', + description: 'Choose from the list', + default: '', + typeOptions: { + loadOptionsMethod: 'getSupportedLanguages', + }, + }, + ], + }, /* -------------------------------------------------------------------------- */ /* custom:get */ @@ -166,7 +191,7 @@ export const customResourceDescription: INodeProperties[] = [ name: 'options', type: 'collection', default: {}, - placeholder: 'Add Field', + placeholder: 'Add option', displayOptions: { show: { operation: ['getAll', 'get'], @@ -186,6 +211,16 @@ export const customResourceDescription: INodeProperties[] = [ loadOptionsDependsOn: ['customResource'], }, }, + { + displayName: 'Language', + name: 'language', + type: 'options', + description: 'Choose from the list', + default: '', + typeOptions: { + loadOptionsMethod: 'getSupportedLanguages', + }, + }, ], }, { @@ -282,6 +317,7 @@ export const customResourceDescription: INodeProperties[] = [ }, ], }, + /* -------------------------------------------------------------------------- */ /* custom:update */ /* -------------------------------------------------------------------------- */ @@ -341,4 +377,58 @@ export const customResourceDescription: INodeProperties[] = [ }, ], }, + { + displayName: 'Options', + name: 'options', + type: 'collection', + default: {}, + placeholder: 'Add option', + displayOptions: { + show: { + operation: ['update'], + resource: ['custom'], + }, + }, + options: [ + { + displayName: 'Language', + name: 'language', + type: 'options', + description: 'Choose from the list', + default: '', + typeOptions: { + loadOptionsMethod: 'getSupportedLanguages', + }, + }, + ], + }, + + /* -------------------------------------------------------------------------- */ + /* custom:delete */ + /* -------------------------------------------------------------------------- */ + { + displayName: 'Options', + name: 'options', + type: 'collection', + default: {}, + placeholder: 'Add option', + displayOptions: { + show: { + operation: ['delete'], + resource: ['custom'], + }, + }, + options: [ + { + displayName: 'Language', + name: 'language', + type: 'options', + description: 'Choose from the list', + default: '', + typeOptions: { + loadOptionsMethod: 'getSupportedLanguages', + }, + }, + ], + }, ]; diff --git a/packages/nodes-base/nodes/Odoo/descriptions/NoteDescription.ts b/packages/nodes-base/nodes/Odoo/descriptions/NoteDescription.ts index 0cd8f81e7f..e0588318b7 100644 --- a/packages/nodes-base/nodes/Odoo/descriptions/NoteDescription.ts +++ b/packages/nodes-base/nodes/Odoo/descriptions/NoteDescription.ts @@ -89,6 +89,31 @@ export const noteDescription: INodeProperties[] = [ // }, // ], // }, + { + displayName: 'Options', + name: 'options', + type: 'collection', + default: {}, + placeholder: 'Add option', + displayOptions: { + show: { + operation: ['create'], + resource: ['note'], + }, + }, + options: [ + { + displayName: 'Language', + name: 'language', + type: 'options', + description: 'Choose from the list', + default: '', + typeOptions: { + loadOptionsMethod: 'getSupportedLanguages', + }, + }, + ], + }, /* -------------------------------------------------------------------------- */ /* note:get */ @@ -147,7 +172,7 @@ export const noteDescription: INodeProperties[] = [ name: 'options', type: 'collection', default: {}, - placeholder: 'Add Field', + placeholder: 'Add option', displayOptions: { show: { operation: ['getAll', 'get'], @@ -166,8 +191,19 @@ export const noteDescription: INodeProperties[] = [ loadOptionsMethod: 'getModelFields', }, }, + { + displayName: 'Language', + name: 'language', + type: 'options', + description: 'Choose from the list', + default: '', + typeOptions: { + loadOptionsMethod: 'getSupportedLanguages', + }, + }, ], }, + /* -------------------------------------------------------------------------- */ /* note:update */ /* -------------------------------------------------------------------------- */ @@ -228,4 +264,58 @@ export const noteDescription: INodeProperties[] = [ // }, // ], // }, + { + displayName: 'Options', + name: 'options', + type: 'collection', + default: {}, + placeholder: 'Add option', + displayOptions: { + show: { + operation: ['update'], + resource: ['note'], + }, + }, + options: [ + { + displayName: 'Language', + name: 'language', + type: 'options', + description: 'Choose from the list', + default: '', + typeOptions: { + loadOptionsMethod: 'getSupportedLanguages', + }, + }, + ], + }, + + /* -------------------------------------------------------------------------- */ + /* note:delete */ + /* -------------------------------------------------------------------------- */ + { + displayName: 'Options', + name: 'options', + type: 'collection', + default: {}, + placeholder: 'Add option', + displayOptions: { + show: { + operation: ['delete'], + resource: ['note'], + }, + }, + options: [ + { + displayName: 'Language', + name: 'language', + type: 'options', + description: 'Choose from the list', + default: '', + typeOptions: { + loadOptionsMethod: 'getSupportedLanguages', + }, + }, + ], + }, ]; diff --git a/packages/nodes-base/nodes/Odoo/descriptions/OpportunityDescription.ts b/packages/nodes-base/nodes/Odoo/descriptions/OpportunityDescription.ts index a6d62f7b13..77db9831ca 100644 --- a/packages/nodes-base/nodes/Odoo/descriptions/OpportunityDescription.ts +++ b/packages/nodes-base/nodes/Odoo/descriptions/OpportunityDescription.ts @@ -140,6 +140,31 @@ export const opportunityDescription: INodeProperties[] = [ }, ], }, + { + displayName: 'Options', + name: 'options', + type: 'collection', + default: {}, + placeholder: 'Add option', + displayOptions: { + show: { + operation: ['create'], + resource: ['opportunity'], + }, + }, + options: [ + { + displayName: 'Language', + name: 'language', + type: 'options', + description: 'Choose from the list', + default: '', + typeOptions: { + loadOptionsMethod: 'getSupportedLanguages', + }, + }, + ], + }, /* -------------------------------------------------------------------------- */ /* opportunity:get */ @@ -198,7 +223,7 @@ export const opportunityDescription: INodeProperties[] = [ name: 'options', type: 'collection', default: {}, - placeholder: 'Add Field', + placeholder: 'Add option', displayOptions: { show: { operation: ['getAll', 'get'], @@ -217,8 +242,19 @@ export const opportunityDescription: INodeProperties[] = [ loadOptionsMethod: 'getModelFields', }, }, + { + displayName: 'Language', + name: 'language', + type: 'options', + description: 'Choose from the list', + default: '', + typeOptions: { + loadOptionsMethod: 'getSupportedLanguages', + }, + }, ], }, + /* -------------------------------------------------------------------------- */ /* opportunity:update */ /* -------------------------------------------------------------------------- */ @@ -316,4 +352,58 @@ export const opportunityDescription: INodeProperties[] = [ }, ], }, + { + displayName: 'Options', + name: 'options', + type: 'collection', + default: {}, + placeholder: 'Add option', + displayOptions: { + show: { + operation: ['update'], + resource: ['opportunity'], + }, + }, + options: [ + { + displayName: 'Language', + name: 'language', + type: 'options', + description: 'Choose from the list', + default: '', + typeOptions: { + loadOptionsMethod: 'getSupportedLanguages', + }, + }, + ], + }, + + /* -------------------------------------------------------------------------- */ + /* opportunity:delete */ + /* -------------------------------------------------------------------------- */ + { + displayName: 'Options', + name: 'options', + type: 'collection', + default: {}, + placeholder: 'Add option', + displayOptions: { + show: { + operation: ['delete'], + resource: ['opportunity'], + }, + }, + options: [ + { + displayName: 'Language', + name: 'language', + type: 'options', + description: 'Choose from the list', + default: '', + typeOptions: { + loadOptionsMethod: 'getSupportedLanguages', + }, + }, + ], + }, ];