n8n/packages/nodes-base/nodes/CrowdDev/descriptions/activityFields.ts
2023-07-03 08:31:06 +01:00

187 lines
4.1 KiB
TypeScript

import type { INodeProperties } from 'n8n-workflow';
import { activityPresend } from '../GenericFunctions';
import { emailsField } from './shared';
import { getAdditionalOptions, mapWith, showFor } from './utils';
const displayOpts = showFor(['activity']);
const displayFor = {
resource: displayOpts(),
createWithMember: displayOpts(['createWithMember']),
createForMember: displayOpts(['createForMember']),
};
const activityOperations: INodeProperties = {
displayName: 'Operation',
name: 'operation',
type: 'options',
displayOptions: displayFor.resource.displayOptions,
noDataExpression: true,
default: 'createWithMember',
options: [
{
name: 'Create or Update with a Member',
value: 'createWithMember',
description: 'Create or update an activity with a member',
action: 'Create or update an activity with a member',
routing: {
send: { preSend: [activityPresend] },
request: {
method: 'POST',
url: '/activity/with-member',
},
},
},
{
name: 'Create',
value: 'createForMember',
description: 'Create an activity for a member',
action: 'Create an activity for a member',
routing: {
send: { preSend: [activityPresend] },
request: {
method: 'POST',
url: '/activity',
},
},
},
],
};
const createWithMemberFields: INodeProperties[] = [
{
displayName: 'Username',
name: 'username',
type: 'fixedCollection',
typeOptions: {
multipleValues: true,
},
required: true,
default: {},
options: [
{
displayName: 'Item Choice',
name: 'itemChoice',
values: [
{
displayName: 'Platform',
description: 'Platform name (e.g twitter, github, etc)',
name: 'key',
type: 'string',
required: true,
default: '',
},
{
displayName: 'Username',
description: 'Username at the specified Platform',
name: 'value',
type: 'string',
required: true,
default: '',
},
],
},
],
},
{
displayName: 'displayName',
name: 'displayName',
description: 'UI friendly name of the member',
type: 'string',
default: '',
},
emailsField,
{
displayName: 'Joined At',
name: 'joinedAt',
description: 'Date of joining the community',
type: 'dateTime',
default: '',
},
];
const memberIdField: INodeProperties = {
displayName: 'Member',
name: 'member',
description: 'The ID of the member that performed the activity',
type: 'string',
required: true,
default: '',
};
const createCommonFields: INodeProperties[] = [
{
displayName: 'Type',
name: 'type',
description: 'Type of activity',
type: 'string',
required: true,
default: '',
},
{
displayName: 'Timestamp',
name: 'timestamp',
description: 'Date and time when the activity took place',
type: 'dateTime',
required: true,
default: '',
},
{
displayName: 'Platform',
name: 'platform',
description: 'Platform on which the activity took place',
type: 'string',
required: true,
default: '',
},
{
displayName: 'Source ID',
name: 'sourceId',
description: 'The ID of the activity in the platform (e.g. the ID of the message in Discord)',
type: 'string',
required: true,
default: '',
},
];
const additionalOptions: INodeProperties[] = [
{
displayName: 'Title',
name: 'title',
description: 'Title of the activity',
type: 'string',
default: '',
},
{
displayName: 'Body',
name: 'body',
description: 'Body of the activity',
type: 'string',
default: '',
},
{
displayName: 'Channel',
name: 'channel',
description: 'Channel of the activity',
type: 'string',
default: '',
},
{
displayName: 'Source Parent ID',
name: 'sourceParentId',
description:
'The ID of the parent activity in the platform (e.g. the ID of the parent message in Discord)',
type: 'string',
default: '',
},
];
const activityFields: INodeProperties[] = [
...createWithMemberFields.map(mapWith(displayFor.createWithMember)),
Object.assign({}, memberIdField, displayFor.createForMember),
...createCommonFields.map(mapWith(displayFor.resource)),
Object.assign({}, getAdditionalOptions(additionalOptions), displayFor.resource),
];
export { activityOperations, activityFields };