From 0f7b95a70337daa7cc36f71f774fc4d5a8e0b47c Mon Sep 17 00:00:00 2001 From: ricardo Date: Tue, 5 May 2020 20:50:01 -0400 Subject: [PATCH 1/2] :zap: Improvements --- .../nodes/Mattermost/Mattermost.node.ts | 145 +++++++++++++++++- 1 file changed, 143 insertions(+), 2 deletions(-) diff --git a/packages/nodes-base/nodes/Mattermost/Mattermost.node.ts b/packages/nodes-base/nodes/Mattermost/Mattermost.node.ts index 9b3d3eba23..1824087db1 100644 --- a/packages/nodes-base/nodes/Mattermost/Mattermost.node.ts +++ b/packages/nodes-base/nodes/Mattermost/Mattermost.node.ts @@ -97,6 +97,11 @@ export class Mattermost implements INodeType { value: 'delete', description: 'Soft-deletes a channel', }, + { + name: 'Member', + value: 'member', + description: 'Get a page of members for a channel.', + }, { name: 'Restore', value: 'restore', @@ -262,6 +267,97 @@ export class Mattermost implements INodeType { description: 'The ID of the channel to soft-delete.', }, + // ---------------------------------- + // channel:member + // ---------------------------------- + { + displayName: 'Team ID', + name: 'teamId', + type: 'options', + typeOptions: { + loadOptionsMethod: 'getTeams', + }, + options: [], + default: '', + required: true, + displayOptions: { + show: { + operation: [ + 'member' + ], + resource: [ + 'channel', + ], + }, + }, + description: 'The Mattermost Team.', + }, + { + displayName: 'Channel ID', + name: 'channelId', + type: 'options', + typeOptions: { + loadOptionsMethod: 'getChannelsInTeam', + loadOptionsDependsOn: [ + 'teamId', + ], + }, + options: [], + default: '', + required: true, + displayOptions: { + show: { + operation: [ + 'member' + ], + resource: [ + 'channel', + ], + }, + }, + description: 'The Mattermost Team.', + }, + { + displayName: 'Return All', + name: 'returnAll', + type: 'boolean', + displayOptions: { + show: { + resource: [ + 'channel', + ], + operation: [ + 'member', + ], + }, + }, + default: true, + description: 'If all results should be returned or only up to a given limit.', + }, + { + displayName: 'Limit', + name: 'limit', + type: 'number', + displayOptions: { + show: { + resource: [ + 'channel', + ], + operation: [ + 'member', + ], + returnAll: [ + false, + ], + }, + }, + typeOptions: { + minValue: 1, + maxValue: 100, + }, + default: 100, + description: 'How many results to return.', + }, // ---------------------------------- // channel:restore @@ -1049,10 +1145,42 @@ export class Mattermost implements INodeType { return returnData; }, + // Get all the channels in a team + async getChannelsInTeam(this: ILoadOptionsFunctions): Promise { + const teamId = this.getCurrentNodeParameter('teamId'); + const endpoint = `users/me/teams/${teamId}/channels`; + const responseData = await apiRequest.call(this, 'GET', endpoint, {}); + if (responseData === undefined) { + throw new Error('No data got returned'); + } + + const returnData: INodePropertyOptions[] = []; + let name: string; + for (const data of responseData) { + if (data.delete_at !== 0) { + continue; + } + + const channelTypes: IDataObject = { + 'O': 'public', + 'P': 'private', + 'D': 'direct', + }; + + name = `${data.name} (${channelTypes[data.type as string]})`; + + returnData.push({ + name, + value: data.id, + }); + } + + return returnData; + }, async getTeams(this: ILoadOptionsFunctions): Promise { - const endpoint = 'teams'; + const endpoint = 'users/me/teams'; const responseData = await apiRequest.call(this, 'GET', endpoint, {}); if (responseData === undefined) { @@ -1156,6 +1284,19 @@ export class Mattermost implements INodeType { const channelId = this.getNodeParameter('channelId', i) as string; endpoint = `channels/${channelId}`; + } else if (operation === 'member') { + // ---------------------------------- + // channel:member + // ---------------------------------- + + requestMethod = 'GET'; + const channelId = this.getNodeParameter('channelId', i) as string; + const returnAll = this.getNodeParameter('returnAll', i) as boolean; + endpoint = `channels/${channelId}/members`; + if (returnAll === false) { + qs.per_page = this.getNodeParameter('limit', i) as number; + } + } else if (operation === 'restore') { // ---------------------------------- // channel:restore @@ -1353,7 +1494,7 @@ export class Mattermost implements INodeType { } if (returnAll === false) { - qs.limit = this.getNodeParameter('limit', i) as number; + qs.per_page = this.getNodeParameter('limit', i) as number; } endpoint = `/users`; From 0db2023027b05aa58c65ab222f6116408337914c Mon Sep 17 00:00:00 2001 From: Jan Oberhauser Date: Wed, 6 May 2020 10:29:09 +0200 Subject: [PATCH 2/2] :zap: Minor improvements to Mattermost-Node --- .../nodes/Mattermost/Mattermost.node.ts | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/packages/nodes-base/nodes/Mattermost/Mattermost.node.ts b/packages/nodes-base/nodes/Mattermost/Mattermost.node.ts index 1824087db1..cc03e53557 100644 --- a/packages/nodes-base/nodes/Mattermost/Mattermost.node.ts +++ b/packages/nodes-base/nodes/Mattermost/Mattermost.node.ts @@ -98,9 +98,9 @@ export class Mattermost implements INodeType { description: 'Soft-deletes a channel', }, { - name: 'Member', - value: 'member', - description: 'Get a page of members for a channel.', + name: 'Members', + value: 'members', + description: 'Returns the members of a channel.', }, { name: 'Restore', @@ -268,7 +268,7 @@ export class Mattermost implements INodeType { }, // ---------------------------------- - // channel:member + // channel:members // ---------------------------------- { displayName: 'Team ID', @@ -283,7 +283,7 @@ export class Mattermost implements INodeType { displayOptions: { show: { operation: [ - 'member' + 'members', ], resource: [ 'channel', @@ -308,7 +308,7 @@ export class Mattermost implements INodeType { displayOptions: { show: { operation: [ - 'member' + 'members', ], resource: [ 'channel', @@ -323,12 +323,12 @@ export class Mattermost implements INodeType { type: 'boolean', displayOptions: { show: { + operation: [ + 'members', + ], resource: [ 'channel', ], - operation: [ - 'member', - ], }, }, default: true, @@ -340,12 +340,12 @@ export class Mattermost implements INodeType { type: 'number', displayOptions: { show: { + operation: [ + 'members', + ], resource: [ 'channel', ], - operation: [ - 'member', - ], returnAll: [ false, ], @@ -1284,9 +1284,9 @@ export class Mattermost implements INodeType { const channelId = this.getNodeParameter('channelId', i) as string; endpoint = `channels/${channelId}`; - } else if (operation === 'member') { + } else if (operation === 'members') { // ---------------------------------- - // channel:member + // channel:members // ---------------------------------- requestMethod = 'GET';