(core) add grist.selectedTable.create/update/destroy/upsert to custom widget api

Summary: This makes an equivalent of the /records REST endpoint available within custom widgets. For simple operations, it is compatible with https://github.com/airtable/airtable.js/. About half of the diff is refactoring code from DocApi that implements /records using applyUserActions, to make that code available in the plugin api.

Test Plan: added tests

Reviewers: alexmojaki

Reviewed By: alexmojaki

Differential Revision: https://phab.getgrist.com/D3320
This commit is contained in:
Paul Fitzpatrick
2022-03-15 10:35:15 -04:00
parent 02e69fb685
commit 98f64a8461
14 changed files with 405 additions and 152 deletions

View File

@@ -22,6 +22,10 @@ export const GristObjCode = t.enumtype({
export const CellValue = t.union("number", "string", "boolean", "null", t.tuple("GristObjCode", t.rest(t.array("unknown"))));
export const BulkColValues = t.iface([], {
[t.indexKey]: t.array("CellValue"),
});
export const RowRecord = t.iface([], {
"id": "number",
[t.indexKey]: "CellValue",
@@ -32,6 +36,7 @@ export const GristType = t.union(t.lit('Any'), t.lit('Attachments'), t.lit('Blob
const exportedTypeSuite: t.ITypeSuite = {
GristObjCode,
CellValue,
BulkColValues,
RowRecord,
GristType,
};