diff --git a/packages/nodes-base/nodes/SeaTable/SeaTableTrigger.node.ts b/packages/nodes-base/nodes/SeaTable/SeaTableTrigger.node.ts
index 41f497497f..b368dab462 100644
--- a/packages/nodes-base/nodes/SeaTable/SeaTableTrigger.node.ts
+++ b/packages/nodes-base/nodes/SeaTable/SeaTableTrigger.node.ts
@@ -81,10 +81,9 @@ export class SeaTableTrigger implements INodeType {
'The name of SeaTable table to access. Choose from the list, or specify an ID using an expression.',
},
{
- displayName: 'View Name or ID (optional)',
+ displayName: 'View Name or ID',
name: 'viewName',
type: 'options',
- required: false,
displayOptions: {
show: {
event: ['newRow', 'updatedRow'],
@@ -95,10 +94,11 @@ export class SeaTableTrigger implements INodeType {
loadOptionsMethod: 'getTableViews',
},
default: '',
- description: 'The name of SeaTable view to access. Choose from the list, or specify ...',
+ description:
+ 'The name of SeaTable view to access. Choose from the list, or specify an ID using an expression.',
},
{
- displayName: 'Signature column',
+ displayName: 'Signature Column Name or ID',
name: 'assetColumn',
type: 'options',
required: true,
@@ -112,15 +112,16 @@ export class SeaTableTrigger implements INodeType {
loadOptionsMethod: 'getSignatureColumns',
},
default: '',
- description: 'Select the digital-signature column that should be tracked.',
+ description:
+ 'Select the digital-signature column that should be tracked. Choose from the list, or specify an ID using an expression.',
},
{
- displayName: 'Simplify output',
+ displayName: 'Simplify',
name: 'simple',
type: 'boolean',
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.',
+ 'Whether to return a simplified version of the response instead of the raw data',
},
{
displayName: '"Fetch Test Event" returns max. three items of the last hour.',
@@ -137,8 +138,10 @@ export class SeaTableTrigger implements INodeType {
const webhookData = this.getWorkflowStaticData('node');
const event = this.getNodeParameter('event') as string;
const tableName = this.getNodeParameter('tableName') as string;
- const viewName = (event != 'newAsset' ? this.getNodeParameter('viewName') : '') as string;
- const assetColumn = (event == 'newAsset' ? this.getNodeParameter('assetColumn') : '') as string;
+ const viewName = (event !== 'newAsset' ? this.getNodeParameter('viewName') : '') as string;
+ const assetColumn = (
+ event === 'newAsset' ? this.getNodeParameter('assetColumn') : ''
+ ) as string;
const simple = this.getNodeParameter('simple') as boolean;
const ctx: ICtx = {};
@@ -149,24 +152,8 @@ export class SeaTableTrigger implements INodeType {
: (webhookData.lastTimeChecked as string);
const endDate = (webhookData.lastTimeChecked = moment().utc().format());
- // this is working, even if the columns _mtime and _ctime have other names. Only relevant for newRow / updatedRow.
const filterField = event === 'newRow' ? '_ctime' : '_mtime';
- // Difference between getRows and SqlQuery:
- // ====================
-
- // getRows (if view is selected)
- // getRows always gets up to 1.000 rows of the selected view.
- // getRows delivers only the rows, not the metadata
- // no possibility to filter for _ctime or _mtime with the API call.
- // Problems, not yet solved:
- // if a column is empty, the column is not returned!
- // view with more than 1.000 rows will not work!
-
- // SqlQuery (if no view is selected)
- // SqlQuery returns up to 1.000. WHERE by time and ORDER BY _ctime or _mtime is possible.
- // SqlQuery returns rows and metadata
-
let requestMeta: IGetMetadataResult;
let requestRows: IGetRowsResult;
let metadata: IDtableMetadataColumn[] = [];
@@ -176,7 +163,7 @@ export class SeaTableTrigger implements INodeType {
const limit = this.getMode() === 'manual' ? 3 : 1000;
// New Signature
- if (event == 'newAsset') {
+ if (event === 'newAsset') {
const endpoint = '/dtable-db/api/v1/query/{{dtable_uuid}}/';
sqlResult = await seaTableApiRequest.call(this, ctx, 'POST', endpoint, {
sql: `SELECT _id, _ctime, _mtime, \`${assetColumn}\` FROM ${tableName} WHERE \`${assetColumn}\` IS NOT NULL ORDER BY _mtime DESC LIMIT ${limit}`,
@@ -188,15 +175,13 @@ export class SeaTableTrigger implements INodeType {
const assetColumnType = columnType?.type || null;
// remove unwanted entries
- rows = sqlResult.results.filter(
- (obj) => new Date(obj['_mtime']) > new Date(startDate),
- ) as IRow[];
+ rows = sqlResult.results.filter((obj) => new Date(obj._mtime) > new Date(startDate));
// split the objects into new lines (not necessary for digital-sign)
const newRows: any = [];
for (const row of rows) {
if (assetColumnType === 'digital-sign') {
- let signature = (row[assetColumn] as IColumnDigitalSignature) || [];
+ const signature = (row[assetColumn] as IColumnDigitalSignature) || [];
if (signature.sign_time) {
if (new Date(signature.sign_time) > new Date(startDate)) {
newRows.push(signature);
@@ -223,26 +208,20 @@ export class SeaTableTrigger implements INodeType {
{
table_name: tableName,
view_name: viewName,
- limit: limit,
+ limit,
},
);
- // I need only metadata of the selected table.
metadata =
requestMeta.metadata.tables.find((table) => table.name === tableName)?.columns ?? [];
// remove unwanted rows that are too old (compare startDate with _ctime or _mtime)
if (this.getMode() === 'manual') {
- rows = requestRows.rows as IRow[];
+ rows = requestRows.rows;
} else {
- rows = requestRows.rows.filter(
- (obj) => new Date(obj[filterField]) > new Date(startDate),
- ) as IRow[];
+ rows = requestRows.rows.filter((obj) => new Date(obj[filterField]) > new Date(startDate));
}
- }
-
- // No view => use SQL-Query
- else {
+ } else {
const endpoint = '/dtable-db/api/v1/query/{{dtable_uuid}}/';
const sqlQuery = `SELECT * FROM \`${tableName}\` WHERE ${filterField} BETWEEN "${moment(
startDate,
@@ -254,20 +233,16 @@ export class SeaTableTrigger implements INodeType {
convert_keys: true,
});
metadata = sqlResult.metadata as IDtableMetadataColumn[];
- rows = sqlResult.results as IRow[];
+ rows = sqlResult.results;
}
- // =========================================
- // => now I have rows and metadata.
-
- // lets get the collaborators
- let collaboratorsResult: ICollaboratorsResult = await seaTableApiRequest.call(
+ const collaboratorsResult: ICollaboratorsResult = await seaTableApiRequest.call(
this,
ctx,
'GET',
'/dtable-server/api/v1/dtables/{{dtable_uuid}}/related-users/',
);
- let collaborators: ICollaborator[] = collaboratorsResult.user_list || [];
+ const collaborators: ICollaborator[] = collaboratorsResult.user_list || [];
if (Array.isArray(rows) && rows.length > 0) {
// remove columns starting with _ if simple;