nodes/YouTrack/resources/workitem/add.ts (101 lines of code) (raw):
import type { INodeProperties } from 'n8n-workflow';
// Type definitions for work item add request body
interface WorkItemAddRequestBody {
duration: { minutes: number };
text?: string;
date?: number;
usesMarkdown?: boolean;
}
const DEFAULT_FIELDS = 'id,text,date,duration(minutes,presentation),author(login,name),creator(login,name)';
export const workItemAddDescription: INodeProperties[] = [
// WorkItem: Add - Duration (required)
{
displayName: 'Duration (Minutes)',
name: 'durationMinutes',
type: 'number',
required: true,
displayOptions: {
show: {
resource: ['workItem'],
operation: ['add'],
},
},
default: 60,
description: 'Duration of the work item in minutes',
routing: {
send: {
type: 'body',
property: 'duration.minutes',
},
},
},
// WorkItem: Add - Additional Options
{
displayName: 'Additional Options',
name: 'additionalOptions',
type: 'collection',
placeholder: 'Add Option',
default: {
fields: DEFAULT_FIELDS,
},
displayOptions: {
show: {
resource: ['workItem'],
operation: ['add'],
},
},
options: [
{
displayName: 'Description',
name: 'text',
type: 'string',
typeOptions: {
rows: 3,
},
default: '',
description: 'Work item description',
routing: {
send: {
type: 'body',
property: 'text',
},
},
},
{
displayName: 'Date',
name: 'date',
type: 'dateTime',
default: '',
description: 'Date and time when the work was done (Unix timestamp in milliseconds)',
routing: {
send: {
type: 'body',
property: 'date',
preSend: [
// Convert to milliseconds if needed
async function (this, requestOptions) {
const date = this.getNodeParameter('additionalOptions.date') as string;
if (date) {
const timestamp = new Date(date).getTime();
if (requestOptions.body && typeof requestOptions.body === 'object') {
(requestOptions.body as WorkItemAddRequestBody).date = timestamp;
}
}
return requestOptions;
},
],
},
},
},
{
displayName: 'Fields',
name: 'fields',
type: 'string',
default: DEFAULT_FIELDS,
description: 'Comma-separated list of fields to return in response',
routing: {
send: {
type: 'query',
property: 'fields',
},
},
},
],
},
];