mirror of
https://github.com/gristlabs/grist-core.git
synced 2026-03-02 04:09:24 +00:00
(core) Cursor in custom widgets
Summary: Adding a new method `setCursorPos` in the widget API, and a new configuration option for the ready message `allowSelectBy` that exposes custom widgets in the `Select by` dropdown. With this, a custom widget can control the position of the linked widgets and is able to change the column in the creator panel. Test Plan: Added new test. Existing tests should pass. Reviewers: JakubSerafin Reviewed By: JakubSerafin Subscribers: JakubSerafin Differential Revision: https://phab.getgrist.com/D3993
This commit is contained in:
@@ -7,7 +7,7 @@ import {AccessLevel, isSatisfied} from 'app/common/CustomWidget';
|
||||
import {DisposableWithEvents} from 'app/common/DisposableWithEvents';
|
||||
import {BulkColValues, fromTableDataAction, RowRecord} from 'app/common/DocActions';
|
||||
import {extractInfoFromColType, reencodeAsAny} from 'app/common/gristTypes';
|
||||
import {AccessTokenOptions, CustomSectionAPI, GristDocAPI, GristView,
|
||||
import {AccessTokenOptions, CursorPos, CustomSectionAPI, GristDocAPI, GristView,
|
||||
InteractionOptionsRequest, WidgetAPI, WidgetColumnMap} from 'app/plugin/grist-plugin-api';
|
||||
import {MsgType, Rpc} from 'grain-rpc';
|
||||
import {Computed, Disposable, dom, Observable} from 'grainjs';
|
||||
@@ -380,12 +380,25 @@ export class GristViewImpl implements GristView {
|
||||
return data;
|
||||
}
|
||||
|
||||
/**
|
||||
* This is deprecated method to turn on cursor linking. Previously it was used
|
||||
* to create a custom row id filter. Now widgets can be treated as normal source of linking.
|
||||
* Now allowSelectBy should be set using the ready event.
|
||||
*/
|
||||
public async allowSelectBy(): Promise<void> {
|
||||
this._baseView.viewSection.allowSelectBy.set(true);
|
||||
this._baseView.viewSection.allowSelectBy(true);
|
||||
// This is to preserve a legacy behavior, where when allowSelectBy is called widget expected
|
||||
// that the filter was already applied to clear all rows.
|
||||
this._baseView.viewSection.selectedRows([]);
|
||||
}
|
||||
|
||||
public async setSelectedRows(rowIds: number[]): Promise<void> {
|
||||
this._baseView.viewSection.selectedRows.set(rowIds);
|
||||
public async setSelectedRows(rowIds: number[]|null): Promise<void> {
|
||||
this._baseView.viewSection.selectedRows(rowIds);
|
||||
}
|
||||
|
||||
public setCursorPos(cursorPos: CursorPos): Promise<void> {
|
||||
this._baseView.setCursorPos(cursorPos);
|
||||
return Promise.resolve();
|
||||
}
|
||||
|
||||
private _visibleColumns() {
|
||||
@@ -615,5 +628,8 @@ export class CustomSectionAPIImpl extends Disposable implements CustomSectionAPI
|
||||
} else {
|
||||
this._section.columnsToMap(null);
|
||||
}
|
||||
if (settings.allowSelectBy !== undefined) {
|
||||
this._section.allowSelectBy(settings.allowSelectBy);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user