gristlabs_grist-core/app/client/widgets/Spinner.ts
Paul Fitzpatrick 1654a2681f (core) move client code to core
Summary:
This moves all client code to core, and makes minimal fix-ups to
get grist and grist-core to compile correctly.  The client works
in core, but I'm leaving clean-up around the build and bundles to
follow-up.

Test Plan: existing tests pass; server-dev bundle looks sane

Reviewers: dsagal

Reviewed By: dsagal

Differential Revision: https://phab.getgrist.com/D2627
2020-10-02 13:24:21 -04:00

33 lines
1.2 KiB
TypeScript

import * as kf from 'app/client/lib/koForm';
import {DataRowModel} from 'app/client/models/DataRowModel';
import {ViewFieldRec} from 'app/client/models/entities/ViewFieldRec';
import {NumericTextBox} from 'app/client/widgets/NumericTextBox';
import {buildNumberFormat} from 'app/common/NumberFormat';
import {dom} from 'grainjs';
import * as ko from 'knockout';
/**
* Spinner - A widget with a text field and spinner.
*/
export class Spinner extends NumericTextBox {
private _stepSize: ko.Computed<number>;
constructor(field: ViewFieldRec) {
super(field);
const resolved = this.autoDispose(ko.computed(() =>
buildNumberFormat({numMode: this.options().numMode}).resolvedOptions()));
this._stepSize = this.autoDispose(ko.computed(() => {
const extraScaling = (this.options().numMode === 'percent') ? 2 : 0;
return Math.pow(10, -(this.options().decimals || resolved().minimumFractionDigits) - extraScaling);
}));
}
public buildDom(row: DataRowModel) {
const value = row.cells[this.field.colId.peek()];
return dom.update(super.buildDom(row),
dom.cls('widget_spinner'),
kf.spinner(value, this._stepSize)
);
}
}