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:
@@ -5,6 +5,7 @@
|
||||
*/
|
||||
import * as commands from 'app/client/components/commands';
|
||||
import {GristDoc} from 'app/client/components/GristDoc';
|
||||
import {FocusLayer} from 'app/client/lib/FocusLayer';
|
||||
import {makeT} from 'app/client/lib/localization';
|
||||
import {ColumnFilter, NEW_FILTER_JSON} from 'app/client/models/ColumnFilter';
|
||||
import {ColumnFilterMenuModel, IFilterCount} from 'app/client/models/ColumnFilterMenuModel';
|
||||
@@ -13,21 +14,30 @@ import {FilterInfo} from 'app/client/models/entities/ViewSectionRec';
|
||||
import {RowSource} from 'app/client/models/rowset';
|
||||
import {ColumnFilterFunc, SectionFilter} from 'app/client/models/SectionFilter';
|
||||
import {TableData} from 'app/client/models/TableData';
|
||||
import {ColumnFilterCalendarView} from 'app/client/ui/ColumnFilterCalendarView';
|
||||
import {relativeDatesControl} from 'app/client/ui/ColumnFilterMenuUtils';
|
||||
import {cssInput} from 'app/client/ui/cssInput';
|
||||
import {DateRangeOptions, IDateRangeOption} from 'app/client/ui/DateRangeOptions';
|
||||
import {cssPinButton} from 'app/client/ui/RightPanelStyles';
|
||||
import {basicButton, primaryButton, textButton} from 'app/client/ui2018/buttons';
|
||||
import {cssLabel as cssCheckboxLabel, cssCheckboxSquare, cssLabelText, Indeterminate, labeledTriStateSquareCheckbox
|
||||
} from 'app/client/ui2018/checkbox';
|
||||
import {cssLabel as cssCheckboxLabel, cssCheckboxSquare,
|
||||
cssLabelText, Indeterminate, labeledTriStateSquareCheckbox} from 'app/client/ui2018/checkbox';
|
||||
import {theme, vars} from 'app/client/ui2018/cssVars';
|
||||
import {icon} from 'app/client/ui2018/icons';
|
||||
import {cssOptionRowIcon, menu, menuCssClass, menuDivider, menuItem} from 'app/client/ui2018/menus';
|
||||
import {cssDeleteButton, cssDeleteIcon, cssToken as cssTokenTokenBase} from 'app/client/widgets/ChoiceListEditor';
|
||||
import {ChoiceOptions} from 'app/client/widgets/ChoiceTextBox';
|
||||
import {choiceToken} from 'app/client/widgets/ChoiceToken';
|
||||
import {CellValue} from 'app/common/DocActions';
|
||||
import {IRelativeDateSpec, isEquivalentFilter, isRelativeBound} from "app/common/FilterState";
|
||||
import {formatRelBounds} from "app/common/RelativeDates";
|
||||
import {
|
||||
Computed, dom, DomArg, DomElementArg, DomElementMethod, IDisposableOwner, input, makeTestId,
|
||||
Observable, styled
|
||||
} from 'grainjs';
|
||||
import {IRelativeDateSpec, isEquivalentFilter, isRelativeBound} from 'app/common/FilterState';
|
||||
import {extractTypeFromColType, isDateLikeType, isList, isNumberType, isRefListType} from 'app/common/gristTypes';
|
||||
import {formatRelBounds} from 'app/common/RelativeDates';
|
||||
import {createFormatter} from 'app/common/ValueFormatter';
|
||||
import {UIRowId} from 'app/plugin/GristAPI';
|
||||
import {decodeObject} from 'app/plugin/objtypes';
|
||||
import {Computed, dom, DomArg, DomElementArg, DomElementMethod, IDisposableOwner,
|
||||
input, makeTestId, Observable, styled} from 'grainjs';
|
||||
import {IOpenController, IPopupOptions, setPopupToCreateDom} from 'popweasel';
|
||||
import concat = require('lodash/concat');
|
||||
import identity = require('lodash/identity');
|
||||
import noop = require('lodash/noop');
|
||||
@@ -35,18 +45,6 @@ import partition = require('lodash/partition');
|
||||
import some = require('lodash/some');
|
||||
import tail = require('lodash/tail');
|
||||
import debounce = require('lodash/debounce');
|
||||
import {IOpenController, IPopupOptions, setPopupToCreateDom} from 'popweasel';
|
||||
import {decodeObject} from 'app/plugin/objtypes';
|
||||
import {extractTypeFromColType, isDateLikeType, isList, isNumberType, isRefListType} from 'app/common/gristTypes';
|
||||
import {choiceToken} from 'app/client/widgets/ChoiceToken';
|
||||
import {ChoiceOptions} from 'app/client/widgets/ChoiceTextBox';
|
||||
import {ColumnFilterCalendarView} from 'app/client/ui/ColumnFilterCalendarView';
|
||||
import {cssDeleteButton, cssDeleteIcon, cssToken as cssTokenTokenBase} from 'app/client/widgets/ChoiceListEditor';
|
||||
import {relativeDatesControl} from 'app/client/ui/ColumnFilterMenuUtils';
|
||||
import {FocusLayer} from 'app/client/lib/FocusLayer';
|
||||
import {DateRangeOptions, IDateRangeOption} from 'app/client/ui/DateRangeOptions';
|
||||
import {createFormatter} from 'app/common/ValueFormatter';
|
||||
import {UIRowId} from 'app/common/TableData';
|
||||
|
||||
const t = makeT('ColumnFilterMenu');
|
||||
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
import {CursorPos} from 'app/client/components/Cursor';
|
||||
import {makeT} from 'app/client/lib/localization';
|
||||
import { KoSaveableObservable } from 'app/client/models/modelUtil';
|
||||
import {KoSaveableObservable} from 'app/client/models/modelUtil';
|
||||
import {autoGrow} from 'app/client/ui/forms';
|
||||
import {textarea} from 'app/client/ui/inputs';
|
||||
import {cssLabel, cssRow} from 'app/client/ui/RightPanelStyles';
|
||||
import {testId, theme} from 'app/client/ui2018/cssVars';
|
||||
import {CursorPos} from 'app/plugin/GristAPI';
|
||||
import {dom, fromKo, MultiHolder, styled} from 'grainjs';
|
||||
|
||||
const t = makeT('DescriptionConfig');
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
import {makeT} from 'app/client/lib/localization';
|
||||
import {CursorPos} from 'app/client/components/Cursor';
|
||||
import {GristDoc} from 'app/client/components/GristDoc';
|
||||
import {BEHAVIOR, ColumnRec} from 'app/client/models/entities/ColumnRec';
|
||||
import {buildHighlightedCode, cssCodeBlock} from 'app/client/ui/CodeHighlight';
|
||||
@@ -16,6 +15,7 @@ import {selectMenu, selectOption, selectTitle} from 'app/client/ui2018/menus';
|
||||
import {createFormulaErrorObs, cssError} from 'app/client/widgets/FormulaEditor';
|
||||
import {sanitizeIdent} from 'app/common/gutil';
|
||||
import {Theme} from 'app/common/ThemePrefs';
|
||||
import {CursorPos} from 'app/plugin/GristAPI';
|
||||
import {bundleChanges, Computed, dom, DomContents, DomElementArg, fromKo, MultiHolder,
|
||||
Observable, styled} from 'grainjs';
|
||||
import * as ko from 'knockout';
|
||||
|
||||
@@ -127,7 +127,7 @@ function isValidLink(source: LinkNode, target: LinkNode) {
|
||||
}
|
||||
|
||||
// custom widget must allow select by
|
||||
if (!source.section.allowSelectBy.get()) {
|
||||
if (!source.section.allowSelectBy()) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user