diff --git a/packages/nodes-base/nodes/Reddit/MyAccountDescription.ts b/packages/nodes-base/nodes/Reddit/MyAccountDescription.ts
new file mode 100644
index 0000000000..02347dc0ae
--- /dev/null
+++ b/packages/nodes-base/nodes/Reddit/MyAccountDescription.ts
@@ -0,0 +1,52 @@
+import {
+ INodeProperties,
+} from 'n8n-workflow';
+
+export const myAccountOperations = [
+ {
+ displayName: 'Operation',
+ name: 'operation',
+ type: 'options',
+ displayOptions: {
+ show: {
+ resource: [
+ 'myAccount',
+ ],
+ },
+ },
+ options: [
+ {
+ name: 'Get identity',
+ value: 'getIdentity',
+ description: 'Return the identity of the logged-in user',
+ },
+ {
+ name: 'Get blocked users',
+ value: 'getBlockedUsers',
+ description: 'Return the identity of the logged-in user',
+ },
+ {
+ name: 'Get friends',
+ value: 'getFriends',
+ description: 'Return a list of friends for the logged-in user',
+ },
+ {
+ name: 'Get karma',
+ value: 'getKarma',
+ description: 'Return a breakdown of subreddit karma',
+ },
+ {
+ name: 'Get preferences',
+ value: 'getPrefs',
+ description: 'Return the preference settings of the logged-in user',
+ },
+ {
+ name: 'Get trophies',
+ value: 'getTrophies',
+ description: 'Return a list of trophies for the logged-in user',
+ },
+ ],
+ default: 'getIdentity',
+ description: 'Operation to perform',
+ },
+] as INodeProperties[];
diff --git a/packages/nodes-base/nodes/Reddit/Reddit.node.ts b/packages/nodes-base/nodes/Reddit/Reddit.node.ts
index 73d1e8d2d2..5ec5a12a69 100644
--- a/packages/nodes-base/nodes/Reddit/Reddit.node.ts
+++ b/packages/nodes-base/nodes/Reddit/Reddit.node.ts
@@ -14,6 +14,15 @@ import {
redditApiRequestAllItems,
} from './GenericFunctions';
+import {
+ myAccountOperations,
+} from './MyAccountDescription';
+
+import {
+ submissionFields,
+ submissionOperations,
+} from './SubmissionDescription';
+
export class Reddit implements INodeType {
description: INodeTypeDescription = {
displayName: 'Reddit',
@@ -36,9 +45,6 @@ export class Reddit implements INodeType {
},
],
properties: [
- // ----------------------------------
- // Resources
- // ----------------------------------
{
displayName: 'Resource',
name: 'resource',
@@ -57,223 +63,12 @@ export class Reddit implements INodeType {
description: 'Resource to consume',
},
- // ----------------------------------
- // My Account operations
- // ----------------------------------
- {
- displayName: 'Operation',
- name: 'operation',
- type: 'options',
- displayOptions: {
- show: {
- resource: [
- 'myAccount',
- ],
- },
- },
- options: [
- {
- name: 'Get identity',
- value: 'getIdentity',
- description: 'Return the identity of the logged-in user',
- },
- {
- name: 'Get blocked users',
- value: 'getBlockedUsers',
- description: 'Return the identity of the logged-in user',
- },
- {
- name: 'Get friends',
- value: 'getFriends',
- description: 'Return a list of friends for the logged-in user',
- },
- {
- name: 'Get karma',
- value: 'getKarma',
- description: 'Return a breakdown of subreddit karma',
- },
- {
- name: 'Get preferences',
- value: 'getPrefs',
- description: 'Return the preference settings of the logged-in user',
- },
- {
- name: 'Get trophies',
- value: 'getTrophies',
- description: 'Return a list of trophies for the logged-in user',
- },
- ],
- default: 'getIdentity',
- description: 'Operation to perform',
- },
+ // myAccount
+ ...myAccountOperations,
- // ----------------------------------
- // Submission operations
- // ----------------------------------
- {
- displayName: 'Operation',
- name: 'operation',
- type: 'options',
- displayOptions: {
- show: {
- resource: [
- 'submission',
- ],
- },
- },
- options: [
- {
- name: 'Post',
- value: 'post',
- description: 'Post a submission to a subreddit',
- },
- ],
- default: 'post',
- description: 'Operation to perform',
- },
- {
- displayName: 'Title',
- name: 'title',
- type: 'string',
- required: true,
- default: '',
- description: 'Title of the submission, up to 300 characters long',
- displayOptions: {
- show: {
- resource: [
- 'submission',
- ],
- operation: [
- 'post',
- ],
- },
- },
- },
- {
- displayName: 'Subreddit',
- name: 'subreddit',
- type: 'string',
- required: true,
- default: '',
- description: 'Subreddit to post the submission to',
- displayOptions: {
- show: {
- resource: [
- 'submission',
- ],
- operation: [
- 'post',
- ],
- },
- },
- },
- {
- displayName: 'Kind',
- name: 'kind',
- type: 'options',
- options: [
- {
- name: 'Text Post',
- value: 'self',
- },
- {
- name: 'Link Post',
- value: 'link',
- },
- {
- name: 'Image Post',
- value: 'image',
- },
- {
- name: 'Video Post',
- value: 'video',
- },
- {
- name: 'Video GIF Post',
- value: 'videogif',
- },
- ],
- default: 'text',
- description: 'The kind of the submission to be posted',
- displayOptions: {
- show: {
- resource: [
- 'submission',
- ],
- operation: [
- 'post',
- ],
- },
- },
- },
- {
- displayName: 'URL',
- name: 'url',
- type: 'string',
- required: true,
- default: '',
- description: 'URL of the content of the submission',
- displayOptions: {
- show: {
- resource: [
- 'submission',
- ],
- operation: [
- 'post',
- ],
- kind: [
- 'link',
- 'image',
- 'video',
- 'videogif',
- ],
- },
- },
- },
- {
- displayName: 'Text',
- name: 'text',
- type: 'string',
- required: true,
- default: '',
- description: 'Text content of the submission (Markdown supported)',
- displayOptions: {
- show: {
- resource: [
- 'submission',
- ],
- operation: [
- 'post',
- ],
- kind: [
- 'self',
- ],
- },
- },
- },
- {
- displayName: 'Resubmit',
- name: 'resubmit',
- type: 'boolean',
- default: false,
- description: 'If toggled on, the URL will be submitted even if
it was already submitted to the subreddit before.
Otherwise, a resubmission will trigger an error.',
- displayOptions: {
- show: {
- resource: [
- 'submission',
- ],
- operation: [
- 'post',
- ],
- kind: [
- 'link',
- 'image',
- 'video',
- 'videogif',
- ],
- },
- },
- },
+ // submission
+ ...submissionFields,
+ ...submissionOperations,
],
};
@@ -295,25 +90,17 @@ export class Reddit implements INodeType {
responseData = await redditApiRequest.call(this, 'GET', 'me');
responseData = responseData.features;
- } else if (operation === 'getBlockedUsers') {
+ } else {
- responseData = await redditApiRequest.call(this, 'GET', 'me/blocked');
+ const endpoints: {[key: string]: string} = {
+ getBlockedUsers: 'blocked',
+ getFriends: 'friends',
+ getKarma: 'karma',
+ getPrefs: 'prefs',
+ getTrophies: 'trophies',
+ };
- } else if (operation === 'getFriends') {
-
- responseData = await redditApiRequest.call(this, 'GET', 'me/friends');
-
- } else if (operation === 'getKarma') {
-
- responseData = await redditApiRequest.call(this, 'GET', 'me/karma');
-
- } else if (operation === 'getPrefs') {
-
- responseData = await redditApiRequest.call(this, 'GET', 'me/prefs');
-
- } else if (operation === 'getTrophies') {
-
- responseData = await redditApiRequest.call(this, 'GET', 'me/trophies');
+ responseData = await redditApiRequest.call(this, 'GET', `me/${endpoints[operation]}`);
}
@@ -350,4 +137,4 @@ export class Reddit implements INodeType {
return [this.helpers.returnJsonArray(returnData)];
}
-}
\ No newline at end of file
+}
diff --git a/packages/nodes-base/nodes/Reddit/SubmissionDescription.ts b/packages/nodes-base/nodes/Reddit/SubmissionDescription.ts
new file mode 100644
index 0000000000..52689e4625
--- /dev/null
+++ b/packages/nodes-base/nodes/Reddit/SubmissionDescription.ts
@@ -0,0 +1,173 @@
+import {
+ INodeProperties,
+} from 'n8n-workflow';
+
+export const submissionOperations = [
+ {
+ displayName: 'Operation',
+ name: 'operation',
+ type: 'options',
+ displayOptions: {
+ show: {
+ resource: [
+ 'submission',
+ ],
+ },
+ },
+ options: [
+ {
+ name: 'Post',
+ value: 'post',
+ description: 'Post a submission to a subreddit',
+ },
+ ],
+ default: 'post',
+ description: 'Operation to perform',
+ },
+] as INodeProperties[];
+
+export const submissionFields = [
+ {
+ displayName: 'Title',
+ name: 'title',
+ type: 'string',
+ required: true,
+ default: '',
+ description: 'Title of the submission, up to 300 characters long',
+ displayOptions: {
+ show: {
+ resource: [
+ 'submission',
+ ],
+ operation: [
+ 'post',
+ ],
+ },
+ },
+ },
+ {
+ displayName: 'Subreddit',
+ name: 'subreddit',
+ type: 'string',
+ required: true,
+ default: '',
+ description: 'Subreddit to post the submission to',
+ displayOptions: {
+ show: {
+ resource: [
+ 'submission',
+ ],
+ operation: [
+ 'post',
+ ],
+ },
+ },
+ },
+ {
+ displayName: 'Kind',
+ name: 'kind',
+ type: 'options',
+ options: [
+ {
+ name: 'Text Post',
+ value: 'self',
+ },
+ {
+ name: 'Link Post',
+ value: 'link',
+ },
+ {
+ name: 'Image Post',
+ value: 'image',
+ },
+ {
+ name: 'Video Post',
+ value: 'video',
+ },
+ {
+ name: 'Video GIF Post',
+ value: 'videogif',
+ },
+ ],
+ default: 'text',
+ description: 'The kind of the submission to be posted',
+ displayOptions: {
+ show: {
+ resource: [
+ 'submission',
+ ],
+ operation: [
+ 'post',
+ ],
+ },
+ },
+ },
+ {
+ displayName: 'URL',
+ name: 'url',
+ type: 'string',
+ required: true,
+ default: '',
+ description: 'URL of the content of the submission',
+ displayOptions: {
+ show: {
+ resource: [
+ 'submission',
+ ],
+ operation: [
+ 'post',
+ ],
+ kind: [
+ 'link',
+ 'image',
+ 'video',
+ 'videogif',
+ ],
+ },
+ },
+ },
+ {
+ displayName: 'Text',
+ name: 'text',
+ type: 'string',
+ required: true,
+ default: '',
+ description: 'Text content of the submission (Markdown supported)',
+ displayOptions: {
+ show: {
+ resource: [
+ 'submission',
+ ],
+ operation: [
+ 'post',
+ ],
+ kind: [
+ 'self',
+ ],
+ },
+ },
+ },
+ {
+ displayName: 'Resubmit',
+ name: 'resubmit',
+ type: 'boolean',
+ default: false,
+ description: 'If toggled on, the URL will be submitted even if
it was already submitted to the subreddit before.
Otherwise, a resubmission will trigger an error.',
+ displayOptions: {
+ show: {
+ resource: [
+ 'submission',
+ ],
+ operation: [
+ 'post',
+ ],
+ kind: [
+ 'link',
+ 'image',
+ 'video',
+ 'videogif',
+ ],
+ },
+ },
+ },
+] as INodeProperties[];