add new action "get many rows"

This commit is contained in:
Christoph Dyllick-Brenzinger 2023-12-15 15:03:22 +01:00
parent bda3edbfa9
commit 4f8be47b43
5 changed files with 123 additions and 2 deletions

View file

@ -1,7 +1,7 @@
import type { AllEntities, Entity, PropertiesOf } from 'n8n-workflow'; import type { AllEntities, Entity, PropertiesOf } from 'n8n-workflow';
type SeaTableMap = { type SeaTableMap = {
row: 'create' | 'get' | 'search' | 'update' | 'remove' | 'lock' | 'unlock'; row: 'create' | 'get' | 'search' | 'update' | 'remove' | 'lock' | 'unlock' | 'list';
base: 'snapshot' | 'metadata' | 'apiCall' | 'collaborator'; base: 'snapshot' | 'metadata' | 'apiCall' | 'collaborator';
link: 'add' | 'remove'; link: 'add' | 'remove';
asset: 'upload' | 'getPublicURL'; asset: 'upload' | 'getPublicURL';

View file

@ -1,5 +1,6 @@
import * as create from './create'; import * as create from './create';
import * as get from './get'; import * as get from './get';
import * as list from './list';
import * as search from './search'; import * as search from './search';
import * as update from './update'; import * as update from './update';
import * as remove from './remove'; import * as remove from './remove';
@ -7,7 +8,7 @@ import * as lock from './lock';
import * as unlock from './unlock'; import * as unlock from './unlock';
import type { INodeProperties } from 'n8n-workflow'; import type { INodeProperties } from 'n8n-workflow';
export { create, get, search, update, remove, lock, unlock }; export { create, get, search, update, remove, lock, unlock, list };
export const descriptions: INodeProperties[] = [ export const descriptions: INodeProperties[] = [
{ {
@ -33,6 +34,12 @@ export const descriptions: INodeProperties[] = [
description: 'Get the content of a row', description: 'Get the content of a row',
action: 'Get a row', action: 'Get a row',
}, },
{
name: 'Get Many',
value: 'list',
description: 'Get many rows from a table of view',
action: 'Get many rows',
},
{ {
name: 'Search', name: 'Search',
value: 'search', value: 'search',
@ -68,6 +75,7 @@ export const descriptions: INodeProperties[] = [
}, },
...create.description, ...create.description,
...get.description, ...get.description,
...list.description,
...search.description, ...search.description,
...update.description, ...update.description,
...remove.description, ...remove.description,

View file

@ -0,0 +1,55 @@
import type { RowProperties } from '../../Interfaces';
export const rowListDescription: RowProperties = [
{
displayName: 'Table Name',
name: 'tableName',
type: 'options',
placeholder: 'Select a table',
required: true,
typeOptions: {
loadOptionsMethod: 'getTableNames',
},
displayOptions: {
show: {
resource: ['row'],
operation: ['list'],
},
},
default: '',
description:
'The name of SeaTable table to access. Choose from the list, or specify a name using an <a href="https://docs.n8n.io/code-examples/expressions/">expression</a>.',
},
{
displayName: 'View Name or ID (optional)',
name: 'viewName',
type: 'options',
required: false,
displayOptions: {
show: {
resource: ['row'],
operation: ['list'],
},
},
typeOptions: {
loadOptionsDependsOn: ['tableName'],
loadOptionsMethod: 'getTableViews',
},
default: '',
description: 'The name of SeaTable view to access. Choose from the list, or specify ...',
},
{
displayName: 'Simplify output',
name: 'simple',
type: 'boolean',
displayOptions: {
show: {
resource: ['row'],
operation: ['list'],
},
},
default: true,
description:
'Simplified returns only the columns of your base. Non-simplified will return additional columns like _ctime (=creation time), _mtime (=modification time) etc.',
},
];

View file

@ -0,0 +1,54 @@
import type { IExecuteFunctions, IDataObject, INodeExecutionData } from 'n8n-workflow';
import type { IRow } from './../../Interfaces';
import {
seaTableApiRequest,
enrichColumns,
simplify_new,
getBaseCollaborators,
} from '../../../GenericFunctions';
export async function list(this: IExecuteFunctions, index: number): Promise<INodeExecutionData[]> {
// get parameters
const tableName = this.getNodeParameter('tableName', index) as string;
const viewName = this.getNodeParameter('viewName', index) as string;
const simple = this.getNodeParameter('simple', index) as boolean;
// get collaborators
const collaborators = await getBaseCollaborators.call(this);
// get rows
let requestMeta = await seaTableApiRequest.call(
this,
{},
'GET',
'/dtable-server/api/v1/dtables/{{dtable_uuid}}/metadata/',
);
let requestRows = await seaTableApiRequest.call(
this,
{},
'GET',
'/dtable-server/api/v1/dtables/{{dtable_uuid}}/rows/',
{},
{
table_name: tableName,
view_name: viewName,
limit: 1000,
},
);
let metadata =
requestMeta.metadata.tables.find((table: { name: string }) => table.name === tableName)
?.columns ?? [];
let rows = requestRows.rows as IRow[];
// hide columns like button
rows.map((row) => enrichColumns(row, metadata, collaborators));
// remove columns starting with _ if simple;
if (simple) {
rows.map((row) => simplify_new(row));
}
return this.helpers.returnJsonArray(rows as IDataObject[]);
}

View file

@ -0,0 +1,4 @@
import { list as execute } from './execute';
import { rowListDescription as description } from './description';
export { description, execute };