n8n/packages/nodes-base/nodes/Onfleet/descriptions/TeamDescription.ts
Ricardo Espinoza 401e626a64
Add Onfleet Node & Trigger (#2845)
* feat: added Onfleet nodes

Added Onfleet nodes for working with different endpoints like:
organizations, administrators, workers, hubs, teams, destinations, recipients,
containers and webhooks.

* style: fixed typos, arrays uniformity, unnecesary files

* refactor: changed add to create in comments and labels

* feat: added name field to onfleet trigger node

* feat: added team endpoints to onfleet node

Added team auto-dispatch and driver time estimate endpoints to Onfleet
node

* style: remove dots in descriptions and fixed some typos

* feat: added fixes according to comments made on the n8n PR

added new fixed collections, refactored the code according to comments
made on the n8n pr

* fix: fixed recipient and destination cretion

* docs: added docstrings for format some functions

added docstrings for new functions addded for formatting the destination
and recipient objects

* style: formatting the code according to n8n nodelinter

* fix: typos and better descriptions

* [INT-510] n8n: Address additional problems from n8n code review (#5)

* Fixed some error creating a worker, moving some fields under additional fields collection

* Fixed returned values for delete operations, making some changes for style code

* Added operational error since required property is not working for dateTime fields

*  Improvements to #2593

*  Improvements

* 🐛 Fix issue with wrong interface

*  Improvements

*  Improvements

*  Minor improvement

Co-authored-by: Santiago Botero Ruiz <santiago.botero@devsavant.ai>
Co-authored-by: ilsemaj <james.li.upenn@gmail.com>
Co-authored-by: Santiago Botero Ruiz <39206812+YokySantiago@users.noreply.github.com>
Co-authored-by: Jan Oberhauser <jan.oberhauser@gmail.com>
2022-02-28 09:48:17 +01:00

601 lines
11 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import {
INodeProperties
} from 'n8n-workflow';
export const teamOperations: INodeProperties[] = [
{
displayName: 'Operation',
name: 'operation',
type: 'options',
displayOptions: {
show: {
resource: [
'team',
],
},
},
options: [
{
name: 'Auto-Dispatch',
value: 'autoDispatch',
description: 'Automatically dispatch tasks assigned to a team to on-duty drivers',
},
{
name: 'Create',
value: 'create',
description: 'Create a new Onfleet team',
},
{
name: 'Delete',
value: 'delete',
description: 'Delete an Onfleet team',
},
{
name: 'Get',
value: 'get',
description: 'Get a specific Onfleet team',
},
{
name: 'Get All',
value: 'getAll',
description: 'Get all Onfleet teams',
},
{
name: 'Get Time Estimates',
value: 'getTimeEstimates',
description: 'Get estimated times for upcoming tasks for a team, returns a selected driver',
},
{
name: 'Update',
value: 'update',
description: 'Update an Onfleet team',
},
],
default: 'getAll',
},
];
const nameField = {
displayName: 'Name',
name: 'name',
type: 'string',
default: '',
description: 'A unique name for the team',
} as INodeProperties;
const workersField = {
displayName: 'Workers Names/IDs',
name: 'workers',
type: 'multiOptions',
typeOptions: {
loadOptionsMethod: 'getWorkers',
},
default: [],
description: 'A list of workers',
} as INodeProperties;
const managersField = {
displayName: 'Administrators Names/IDs',
name: 'managers',
type: 'multiOptions',
typeOptions: {
loadOptionsMethod: 'getAdmins',
},
default: [],
description: 'A list of managing administrators',
} as INodeProperties;
const hubField = {
displayName: 'Hub Name/ID',
name: 'hub',
type: 'options',
typeOptions: {
loadOptionsMethod: 'getHubs',
},
default: '',
description: 'The team\'s hub',
} as INodeProperties;
const enableSelfAssignmentField = {
displayName: 'Self Assignment',
name: 'enableSelfAssignment',
type: 'boolean',
default: false,
description: 'Whether or not to allow drivers to self-assign tasks that are in the Team\'s unassigned container',
} as INodeProperties;
const maxTasksPerRouteField = {
displayName: 'Max Number Of Tasks Per Route',
name: 'maxTasksPerRoute',
type: 'number',
default: 100,
typeOptions: {
maxValue: 200,
minValue: 1,
},
description: 'Total number of tasks allowed on a route',
} as INodeProperties;
const serviceTimeField = {
displayName: 'Service Time',
name: 'serviceTime',
type: 'number',
default: 2,
typeOptions: {
minValue: 0,
},
description: 'The default service time to apply in Minutes to the tasks when no task service time exists',
} as INodeProperties;
const routeEndField = {
displayName: 'Route End',
name: 'routeEnd',
type: 'options',
options: [
{
name: 'Teams Hub',
value: 'team_hub',
},
{
name: 'Worker Routing Address',
value: 'worker_routing_address',
},
{
name: 'Hub',
value: 'hub',
},
{
name: 'End Anywhere',
value: 'anywhere',
},
],
default: '',
description: 'Where the route will end',
} as INodeProperties;
const maxAllowedDelayField = {
displayName: 'Max Allowed Delay',
name: 'maxAllowedDelay',
type: 'number',
default: 10,
description: 'Max allowed time in minutes that a task can be late',
typeOptions: {
minValue: 1,
},
} as INodeProperties;
const longitudeDropOffField = {
displayName: 'Drop Off Longitude',
name: 'dropOffLongitude',
type: 'number',
typeOptions: {
numberPrecision: 14,
},
default: 0,
description: 'The longitude for drop off location',
} as INodeProperties;
const latitudeDropOffField = {
displayName: 'Drop Off Latitude',
name: 'dropOffLatitude',
type: 'number',
typeOptions: {
numberPrecision: 14,
},
default: 0,
description: 'The latitude for drop off location',
} as INodeProperties;
const longitudePickupField = {
displayName: 'Pick Up Longitude',
name: 'pickupLongitude',
type: 'number',
typeOptions: {
numberPrecision: 14,
},
default: 0,
description: 'The longitude for pickup location',
} as INodeProperties;
const latitudePickupField = {
displayName: 'Pick Up Latitude',
name: 'pickupLatitude',
type: 'number',
typeOptions: {
numberPrecision: 14,
},
default: 0,
description: 'The latitude for pickup location',
} as INodeProperties;
const pickupTimeField = {
displayName: 'Pick Up Time',
name: 'pickupTime',
type: 'dateTime',
default: '',
description: 'If the request includes pickupLocation, pickupTime must be present if the time is fewer than 3 hours in the future',
} as INodeProperties;
const restrictedVehicleTypesField = {
displayName: 'Restricted Vehicle Types',
name: 'restrictedVehicleTypes',
type: 'options',
options: [
{
name: 'Car',
value: 'CAR',
},
{
name: 'Motorcycle',
value: 'MOTORCYCLE',
},
{
name: 'Bicycle',
value: 'BICYCLE',
},
{
name: 'Truck',
value: 'TRUCK',
},
],
default: 'CAR',
description: 'Vehicle types to ignore in the query',
} as INodeProperties;
const serviceTimeEstimateField = {
displayName: 'Service Time',
name: 'serviceTime',
type: 'number',
default: 120,
typeOptions: {
minValue: 0,
},
description: 'The expected time a worker will take at the pickupLocation, dropoffLocation, or both (as applicable) Unit: seconds',
} as INodeProperties;
export const teamFields: INodeProperties[] = [
{
displayName: 'Team ID',
name: 'id',
type: 'string',
displayOptions: {
show: {
resource: [
'team',
],
operation: [
'get',
'update',
'delete',
'getTimeEstimates',
'autoDispatch',
],
},
},
default: '',
required: true,
description: 'The ID of the team object for lookup',
},
{
...nameField,
displayOptions: {
show: {
resource: [
'team',
],
operation: [
'create',
],
},
},
required: true,
},
{
...workersField,
displayOptions: {
show: {
resource: [
'team',
],
operation: [
'create',
],
},
},
required: true,
},
{
...managersField,
displayOptions: {
show: {
resource: [
'team',
],
operation: [
'create',
],
},
},
required: true,
},
{
displayName: 'Additional Fields',
name: 'additionalFields',
type: 'collection',
placeholder: 'Add Field',
default: {},
displayOptions: {
show: {
resource: [
'team',
],
operation: [
'create',
],
},
},
options: [
hubField,
enableSelfAssignmentField,
],
},
{
displayName: 'Return All',
name: 'returnAll',
type: 'boolean',
displayOptions: {
show: {
resource: [
'team',
],
operation: [
'getAll',
],
},
},
default: false,
description: 'If all results should be returned or only up to a given limit',
},
{
displayName: 'Limit',
name: 'limit',
type: 'number',
displayOptions: {
show: {
resource: [
'team',
],
operation: [
'getAll',
],
returnAll: [
false,
],
},
},
typeOptions: {
minValue: 1,
maxValue: 64,
},
default: 64,
description: 'How many results to return',
},
{
displayName: 'Update Fields',
name: 'updateFields',
type: 'collection',
placeholder: 'Add Field',
default: {},
displayOptions: {
show: {
resource: [
'team',
],
operation: [
'update',
],
},
},
options: [
managersField,
hubField,
nameField,
enableSelfAssignmentField,
workersField,
],
},
{
displayName: 'Additional Fields',
name: 'additionalFields',
type: 'collection',
placeholder: 'Add Field',
default: {},
displayOptions: {
show: {
resource: [
'team',
],
operation: [
'autoDispatch',
],
},
},
options: [
{
displayName: 'Ending Route',
name: 'endingRoute',
type: 'fixedCollection',
placeholder: 'Add Route',
default: {},
options: [
{
displayName: 'Ending Route Properties',
name: 'endingRouteProperties',
type: 'fixedCollection',
default: {},
values: [
{
...routeEndField,
required: true,
},
{
...hubField,
displayOptions: {
show: {
routeEnd: [
'hub',
],
},
},
required: false,
},
],
},
],
},
maxAllowedDelayField,
maxTasksPerRouteField,
{
displayName: 'Schedule Time Window',
name: 'scheduleTimeWindow',
type: 'fixedCollection',
placeholder: 'Add Time Window',
default: {},
options: [
{
displayName: 'Schedule Time Window Properties',
name: 'scheduleTimeWindowProperties',
type: 'fixedCollection',
default: {},
values: [
{
displayName: 'Start Time',
name: 'startTime',
type: 'dateTime',
default: '',
},
{
displayName: 'End Time',
name: 'endTime',
type: 'dateTime',
default: '',
},
],
},
],
},
serviceTimeField,
{
displayName: 'Task Time Window',
name: 'taskTimeWindow',
type: 'fixedCollection',
placeholder: 'Add Time Window',
default: {},
options: [
{
displayName: 'Task Time Window Properties',
name: 'taskTimeWindowProperties',
type: 'fixedCollection',
default: {},
values: [
{
displayName: 'Start Time',
name: 'startTime',
type: 'dateTime',
default: '',
},
{
displayName: 'End Time',
name: 'endTime',
type: 'dateTime',
default: '',
},
],
},
],
},
],
},
{
displayName: 'Filters',
name: 'filters',
type: 'collection',
placeholder: 'Add Field',
default: {},
displayOptions: {
show: {
resource: [
'team',
],
operation: [
'getTimeEstimates',
],
},
},
options: [
{
displayName: 'Drop Off',
name: 'dropOff',
type: 'fixedCollection',
placeholder: 'Add Drop Off',
default: {},
options: [
{
displayName: 'DropOff Properties',
name: 'dropOffProperties',
type: 'fixedCollection',
default: {},
values: [
{
...longitudeDropOffField,
required: true,
},
{
...latitudeDropOffField,
required: true,
},
],
},
],
},
{
displayName: 'Pick Up',
name: 'pickUp',
type: 'fixedCollection',
default: {},
placeholder: 'Add Pick Up',
options: [
{
displayName: 'Pick Up Properties',
name: 'pickUpProperties',
type: 'fixedCollection',
default: {},
values: [
{
...longitudePickupField,
required: true,
},
{
...latitudePickupField,
required: true,
},
{
...pickupTimeField,
required: false,
},
],
},
],
},
{
...restrictedVehicleTypesField,
required: false,
},
{
...serviceTimeEstimateField,
required: false,
},
],
},
];