(core) Adding onNewRecord event for custom widgets

Summary:
New onNewRecord event in custom widgets that is triggered
when the user selects a blank row.

Together with this diff there is PR for grist-help https://github.com/gristlabs/grist-help/pull/150

Test Plan: added test case

Reviewers: cyprien

Reviewed By: cyprien

Differential Revision: https://phab.getgrist.com/D3375
This commit is contained in:
Jarosław Sadziński
2022-04-11 21:33:26 +02:00
parent cedcdc6bff
commit 4401ec4d79
4 changed files with 16 additions and 4 deletions

View File

@@ -310,12 +310,24 @@ export function mapColumnNamesBack(data: any, options: {
*/
export function onRecord(callback: (data: RowRecord | null, mappings: WidgetColumnMap | null) => unknown) {
on('message', async function(msg) {
if (!msg.tableId || !msg.rowId) { return; }
if (!msg.tableId || !msg.rowId || msg.rowId === 'new') { return; }
const rec = await docApi.fetchSelectedRecord(msg.rowId);
callback(rec, await getMappingsIfChanged(msg));
});
}
/**
* For custom widgets, add a handler that will be called whenever the
* new (blank) row is selected.
*/
export function onNewRecord(callback: () => unknown) {
on('message', async function(msg) {
if (msg.tableId && msg.rowId === 'new') {
callback();
}
});
}
/**
* For custom widgets, add a handler that will be called whenever the
* selected records change. Handler will be called with a list of records.