From 8e8c9ed7b757761c8aa156547d563463fa71de10 Mon Sep 17 00:00:00 2001 From: Nacho Facello Date: Thu, 7 Aug 2025 16:16:10 -0300 Subject: [PATCH] Add sync-table node --- node-red-grist/sync-table.html | 68 ++++++++++++++++++++++++++++++++++ node-red-grist/sync-table.js | 26 +++++++++++++ package.json | 1 + 3 files changed, 95 insertions(+) create mode 100644 node-red-grist/sync-table.html create mode 100644 node-red-grist/sync-table.js diff --git a/node-red-grist/sync-table.html b/node-red-grist/sync-table.html new file mode 100644 index 0000000..fc73753 --- /dev/null +++ b/node-red-grist/sync-table.html @@ -0,0 +1,68 @@ + + + + + \ No newline at end of file diff --git a/node-red-grist/sync-table.js b/node-red-grist/sync-table.js new file mode 100644 index 0000000..2ffdb7f --- /dev/null +++ b/node-red-grist/sync-table.js @@ -0,0 +1,26 @@ +const { GristDocAPI } = require('grist-api'); +const mustache = require('mustache'); + +module.exports = function (RED) { + function SyncTableNode(config) { + RED.nodes.createNode(this, config); + let node = this; + this.document = RED.nodes.getNode(config.document); + this.server = RED.nodes.getNode(config.server); + this.table = config.tableId; + this.primaryKey = config.primaryKey; + + node.on('input', async function (msg, send, done) { + const protocol = this.server.tlsEnabled === true ? "https" : "http"; + const url = protocol + "://" + this.server.hostname + ":" + this.server.port; + const api = new GristDocAPI(this.document.docid, { apiKey: this.server.apiKey, server: url }); + const data = Array.isArray(msg.payload) ? msg.payload : [msg.payload] + + api.syncTable(this.table, data, this.primaryKey).then(data => { + node.send({ ...msg, payload: data }) + }).catch(reason => done(reason, "Failed to perform grist request to " + url)); + + }); + } + RED.nodes.registerType("grist-add-records", SyncTableNode); +} \ No newline at end of file diff --git a/package.json b/package.json index b361a04..abace08 100644 --- a/package.json +++ b/package.json @@ -22,6 +22,7 @@ "grist-document-export": "node-red-grist/document-export.js", "grist-add-records": "node-red-grist/add-records.js", "grist-get-records": "node-red-grist/get-records.js", + "grist-sync-table": "node-red-grist/sync-table.js", "grist-update-records": "node-red-grist/update-records.js", "grist-document": "node-red-grist/document.js", "grist-server": "node-red-grist/server.js"