mirror of
https://github.com/gristlabs/grist-core.git
synced 2024-10-21 01:24:09 +00:00
93a2d26182
Summary: Adds a new test for formatting and fix several related bugs it uncovered: 1. When editing a number with "," decimal separator, ensure it opens in the editor with "," (rather than ".", the original bug motivating this). 2. When guessing number format, set maxDecimals when it's needed (otherwise, e.g. "$1.234", or "4.5%" weren't guessed as numeric) 3. When guessing number format, ignore whitespace when deciding if guessed format is correct (otherwise percents can't be guessed in locales which add "%" with a non-breaking space before it). Test Plan: Added a test case that exercises all fixed behaviors. Reviewers: paulfitz Reviewed By: paulfitz Subscribers: paulfitz Differential Revision: https://phab.getgrist.com/D4177
73 lines
3.3 KiB
TypeScript
73 lines
3.3 KiB
TypeScript
import {AttachmentsEditor} from 'app/client/widgets/AttachmentsEditor';
|
|
import {AttachmentsWidget} from 'app/client/widgets/AttachmentsWidget';
|
|
import CheckBoxEditor from 'app/client/widgets/CheckBoxEditor';
|
|
import ChoiceEditor from 'app/client/widgets/ChoiceEditor';
|
|
import {ChoiceListCell} from 'app/client/widgets/ChoiceListCell';
|
|
import {ChoiceListEditor} from 'app/client/widgets/ChoiceListEditor';
|
|
import {ChoiceTextBox} from 'app/client/widgets/ChoiceTextBox';
|
|
import DateEditor from 'app/client/widgets/DateEditor';
|
|
import DateTextBox from 'app/client/widgets/DateTextBox';
|
|
import DateTimeEditor from 'app/client/widgets/DateTimeEditor';
|
|
import DateTimeTextBox from 'app/client/widgets/DateTimeTextBox';
|
|
import {HyperLinkEditor} from 'app/client/widgets/HyperLinkEditor';
|
|
import {HyperLinkTextBox} from 'app/client/widgets/HyperLinkTextBox';
|
|
import {NewAbstractWidget} from 'app/client/widgets/NewAbstractWidget';
|
|
import {NewBaseEditor} from 'app/client/widgets/NewBaseEditor';
|
|
import {NTextBox} from 'app/client/widgets/NTextBox';
|
|
import {NTextEditor} from 'app/client/widgets/NTextEditor';
|
|
import {NumericEditor} from 'app/client/widgets/NumericEditor';
|
|
import {NumericTextBox} from 'app/client/widgets/NumericTextBox';
|
|
import {Reference} from 'app/client/widgets/Reference';
|
|
import {ReferenceEditor} from 'app/client/widgets/ReferenceEditor';
|
|
import {ReferenceList} from 'app/client/widgets/ReferenceList';
|
|
import {ReferenceListEditor} from 'app/client/widgets/ReferenceListEditor';
|
|
import {Spinner} from 'app/client/widgets/Spinner';
|
|
import {ToggleCheckBox, ToggleSwitch} from 'app/client/widgets/Toggle';
|
|
import {getWidgetConfiguration} from 'app/client/widgets/UserType';
|
|
import {GristType} from 'app/plugin/GristData';
|
|
|
|
/**
|
|
* Convert the name of a widget to its implementation.
|
|
*/
|
|
export const nameToWidget = {
|
|
'TextBox': NTextBox,
|
|
'TextEditor': NTextEditor,
|
|
'NumericTextBox': NumericTextBox,
|
|
'NumericEditor': NumericEditor,
|
|
'HyperLinkTextBox': HyperLinkTextBox,
|
|
'HyperLinkEditor': HyperLinkEditor,
|
|
'Spinner': Spinner,
|
|
'CheckBox': ToggleCheckBox,
|
|
'CheckBoxEditor': CheckBoxEditor,
|
|
'Reference': Reference,
|
|
'Switch': ToggleSwitch,
|
|
'ReferenceEditor': ReferenceEditor,
|
|
'ReferenceList': ReferenceList,
|
|
'ReferenceListEditor': ReferenceListEditor,
|
|
'ChoiceTextBox': ChoiceTextBox,
|
|
'ChoiceEditor': ChoiceEditor,
|
|
'ChoiceListCell': ChoiceListCell,
|
|
'ChoiceListEditor': ChoiceListEditor,
|
|
'DateTimeTextBox': DateTimeTextBox,
|
|
'DateTextBox': DateTextBox,
|
|
'DateEditor': DateEditor,
|
|
'AttachmentsWidget': AttachmentsWidget,
|
|
'AttachmentsEditor': AttachmentsEditor,
|
|
'DateTimeEditor': DateTimeEditor,
|
|
};
|
|
|
|
|
|
export interface WidgetConstructor {create: (...args: any[]) => NewAbstractWidget}
|
|
|
|
/** return a good class to instantiate for viewing a widget/type combination */
|
|
export function getWidgetConstructor(widget: string, type: string): WidgetConstructor {
|
|
const {config} = getWidgetConfiguration(widget, type as GristType);
|
|
return nameToWidget[config.cons as keyof typeof nameToWidget] as any;
|
|
}
|
|
|
|
/** return a good class to instantiate for editing a widget/type combination */
|
|
export function getEditorConstructor(widget: string, type: string): typeof NewBaseEditor {
|
|
const {config} = getWidgetConfiguration(widget, type as GristType);
|
|
return nameToWidget[config.editCons as keyof typeof nameToWidget] as any;
|
|
}
|