mirror of
https://github.com/gristlabs/grist-core.git
synced 2024-10-27 20:44:07 +00:00
(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:
parent
cedcdc6bff
commit
4401ec4d79
@ -73,7 +73,7 @@ export class CustomView extends Disposable {
|
|||||||
private _emptyWidgetPage: string;
|
private _emptyWidgetPage: string;
|
||||||
|
|
||||||
public create(gristDoc: GristDoc, viewSectionModel: ViewSectionRec) {
|
public create(gristDoc: GristDoc, viewSectionModel: ViewSectionRec) {
|
||||||
BaseView.call(this as any, gristDoc, viewSectionModel);
|
BaseView.call(this as any, gristDoc, viewSectionModel, { 'addNewRow': true });
|
||||||
|
|
||||||
this._customDef = this.viewSection.customDef;
|
this._customDef = this.viewSection.customDef;
|
||||||
|
|
||||||
|
@ -328,7 +328,7 @@ export class GristViewImpl implements GristView {
|
|||||||
// Hidden/Visible columns will eventually reflect what is available, but this operation
|
// Hidden/Visible columns will eventually reflect what is available, but this operation
|
||||||
// is not instant - and widget can receive rows with fields that are not in the mapping.
|
// is not instant - and widget can receive rows with fields that are not in the mapping.
|
||||||
const columns: ColumnRec[] = this._visibleColumns();
|
const columns: ColumnRec[] = this._visibleColumns();
|
||||||
const rowIds: number[] = this._baseView.sortedRows.getKoArray().peek() as number[];
|
const rowIds = this._baseView.sortedRows.getKoArray().peek().filter(id => id != 'new');
|
||||||
const data: BulkColValues = {};
|
const data: BulkColValues = {};
|
||||||
for (const column of columns) {
|
for (const column of columns) {
|
||||||
// Use the colId of the displayCol, which may be different in case of Reference columns.
|
// Use the colId of the displayCol, which may be different in case of Reference columns.
|
||||||
|
2
app/client/declarations.d.ts
vendored
2
app/client/declarations.d.ts
vendored
@ -63,7 +63,7 @@ declare module "app/client/components/BaseView" {
|
|||||||
public isTruncated: ko.Observable<boolean>;
|
public isTruncated: ko.Observable<boolean>;
|
||||||
public tableModel: DataTableModel;
|
public tableModel: DataTableModel;
|
||||||
|
|
||||||
constructor(gristDoc: GristDoc, viewSectionModel: any);
|
constructor(gristDoc: GristDoc, viewSectionModel: any, options?: {addNewRow?: boolean, isPreview?: boolean});
|
||||||
public setCursorPos(cursorPos: CursorPos): void;
|
public setCursorPos(cursorPos: CursorPos): void;
|
||||||
public createFilterMenu(ctl: IOpenController, filterInfo: FilterInfo, onClose?: () => void): HTMLElement;
|
public createFilterMenu(ctl: IOpenController, filterInfo: FilterInfo, onClose?: () => void): HTMLElement;
|
||||||
public buildTitleControls(): DomArg;
|
public buildTitleControls(): DomArg;
|
||||||
|
@ -310,12 +310,24 @@ export function mapColumnNamesBack(data: any, options: {
|
|||||||
*/
|
*/
|
||||||
export function onRecord(callback: (data: RowRecord | null, mappings: WidgetColumnMap | null) => unknown) {
|
export function onRecord(callback: (data: RowRecord | null, mappings: WidgetColumnMap | null) => unknown) {
|
||||||
on('message', async function(msg) {
|
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);
|
const rec = await docApi.fetchSelectedRecord(msg.rowId);
|
||||||
callback(rec, await getMappingsIfChanged(msg));
|
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
|
* For custom widgets, add a handler that will be called whenever the
|
||||||
* selected records change. Handler will be called with a list of records.
|
* selected records change. Handler will be called with a list of records.
|
||||||
|
Loading…
Reference in New Issue
Block a user