Compare commits

..

No commits in common. "sync-table-node" and "main" have entirely different histories.

3 changed files with 0 additions and 94 deletions

View file

@ -1,68 +0,0 @@
<script type="text/javascript">
RED.nodes.registerType('grist-sync-table', {
category: 'grist',
color: '#00bb00',
defaults: {
server: { value: "", type: "grist-server", required: true },
document: { value: "", type: "grist-document", required: true },
tableId: { value: "", required: true },
primaryKey: { value: "", required: true },
},
inputs: 1,
outputs: 1,
icon: "font-awesome/fa-table",
label: function () {
return this.tableId ? `[Sync] ${this.tableId}` : "Sync table";
},
paletteLabel: "Sync table",
oneditprepare: function () {
}
});
</script>
<script type="text/html" data-template-name="grist-sync-table">
<div class="form-row">
<label for="node-input-document"><i class="fa fa-file-text"></i> Document</label>
<input type="text" id="node-input-document" placeholder="Document">
</div>
<div class="form-row">
<label for="node-input-server"><i class="fa fa-server"></i> Server</label>
<input type="text" id="node-input-server" placeholder="Server">
</div>
<div class="form-row">
<label for="node-input-tableId"><i class="fa fa-table"></i> Table Name</label>
<input type="text" id="node-input-tableId" placeholder="Table Name">
</div>
<div class="form-row">
<label for="node-input-tableId"><i class="fa fa-table"></i> Primary Key(s)</label>
<input type="text" id="node-input-primaryKey" placeholder="Primary Key">
</div>
</script>
<script type="text/html" data-help-name="grist-sync-table">
<p>Syncs records to a grist table.</p>
<h3>Inputs</h3>
<p>
<code>msg.payload</code> array of records (or a single record object) to sync.
</p>
<h3>Outputs</h3>
<p>
Array of records that have been synced (the same as payload received).
</p>
<h3>Attributes</h3>
<p></p>
<h3>Description</h3>
<p>
Syncs a set of records to a Grist table. It matches records based on the Primary Key
attribute, which must exist in all elements in payload. If the record exists, it is updated,
if it doesn't exist, it is created.
See https://www.npmjs.com/package/grist-api#synctabletablename-records-keycolids-filters for
technical details.
</p>
</script>

View file

@ -1,25 +0,0 @@
const { GristDocAPI } = require('grist-api');
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-sync-table", SyncTableNode);
}

View file

@ -22,7 +22,6 @@
"grist-document-export": "node-red-grist/document-export.js", "grist-document-export": "node-red-grist/document-export.js",
"grist-add-records": "node-red-grist/add-records.js", "grist-add-records": "node-red-grist/add-records.js",
"grist-get-records": "node-red-grist/get-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-update-records": "node-red-grist/update-records.js",
"grist-document": "node-red-grist/document.js", "grist-document": "node-red-grist/document.js",
"grist-server": "node-red-grist/server.js" "grist-server": "node-red-grist/server.js"