@ni/nimble-components 20.7.0 → 20.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/all-components-bundle.js +49 -9
- package/dist/all-components-bundle.js.map +1 -1
- package/dist/all-components-bundle.min.js +7 -4
- package/dist/all-components-bundle.min.js.map +1 -1
- package/dist/esm/table-column/date-text/testing/table-column-date-text.pageobject.d.ts +3 -9
- package/dist/esm/table-column/date-text/testing/table-column-date-text.pageobject.js +2 -24
- package/dist/esm/table-column/date-text/testing/table-column-date-text.pageobject.js.map +1 -1
- package/dist/esm/table-column/duration-text/cell-view/index.d.ts +16 -0
- package/dist/esm/table-column/duration-text/cell-view/index.js +28 -0
- package/dist/esm/table-column/duration-text/cell-view/index.js.map +1 -0
- package/dist/esm/table-column/duration-text/group-header-view/index.d.ts +17 -0
- package/dist/esm/table-column/duration-text/group-header-view/index.js +33 -0
- package/dist/esm/table-column/duration-text/group-header-view/index.js.map +1 -0
- package/dist/esm/table-column/duration-text/index.d.ts +24 -0
- package/dist/esm/table-column/duration-text/index.js +62 -0
- package/dist/esm/table-column/duration-text/index.js.map +1 -0
- package/dist/esm/table-column/duration-text/models/duration-formatter.d.ts +14 -0
- package/dist/esm/table-column/duration-text/models/duration-formatter.js +79 -0
- package/dist/esm/table-column/duration-text/models/duration-formatter.js.map +1 -0
- package/dist/esm/table-column/duration-text/testing/table-column-duration-text.pageobject.d.ts +8 -0
- package/dist/esm/table-column/duration-text/testing/table-column-duration-text.pageobject.js +14 -0
- package/dist/esm/table-column/duration-text/testing/table-column-duration-text.pageobject.js.map +1 -0
- package/dist/esm/table-column/number-text/index.d.ts +2 -0
- package/dist/esm/table-column/number-text/index.js +23 -3
- package/dist/esm/table-column/number-text/index.js.map +1 -1
- package/dist/esm/table-column/number-text/models/decimal-formatter.d.ts +1 -1
- package/dist/esm/table-column/number-text/models/decimal-formatter.js +4 -4
- package/dist/esm/table-column/number-text/models/decimal-formatter.js.map +1 -1
- package/dist/esm/table-column/number-text/models/table-column-number-text-validator.d.ts +3 -1
- package/dist/esm/table-column/number-text/models/table-column-number-text-validator.js +21 -1
- package/dist/esm/table-column/number-text/models/table-column-number-text-validator.js.map +1 -1
- package/dist/esm/table-column/testing/table-column-formatted-text.pageobject.d.ts +14 -0
- package/dist/esm/table-column/testing/table-column-formatted-text.pageobject.js +30 -0
- package/dist/esm/table-column/testing/table-column-formatted-text.pageobject.js.map +1 -0
- package/package.json +1 -1
|
@@ -1,14 +1,8 @@
|
|
|
1
|
-
import type { TablePageObject } from '../../../table/testing/table.pageobject';
|
|
2
1
|
import type { TableRecord } from '../../../table/types';
|
|
2
|
+
import { TableColumnFormattedTextPageObject } from '../../testing/table-column-formatted-text.pageobject';
|
|
3
3
|
/**
|
|
4
4
|
* Page object for date text table column.
|
|
5
5
|
*/
|
|
6
|
-
export declare class TableColumnDateTextPageObject<T extends TableRecord> {
|
|
7
|
-
|
|
8
|
-
private readonly narrowNonBreakingSpace;
|
|
9
|
-
constructor(tablePageObject: TablePageObject<T>);
|
|
10
|
-
getRenderedCellContent(rowIndex: number, columnIndex: number): string;
|
|
11
|
-
getRenderedGroupHeaderContent(groupRowIndex: number): string;
|
|
12
|
-
getCellTitle(rowIndex: number, columnIndex: number): string;
|
|
13
|
-
private verifyCellType;
|
|
6
|
+
export declare class TableColumnDateTextPageObject<T extends TableRecord> extends TableColumnFormattedTextPageObject<T> {
|
|
7
|
+
protected verifyCellType(rowIndex: number, columnIndex: number): void;
|
|
14
8
|
}
|
|
@@ -1,31 +1,9 @@
|
|
|
1
|
+
import { TableColumnFormattedTextPageObject } from '../../testing/table-column-formatted-text.pageobject';
|
|
1
2
|
import { TableColumnDateTextCellView } from '../cell-view';
|
|
2
3
|
/**
|
|
3
4
|
* Page object for date text table column.
|
|
4
5
|
*/
|
|
5
|
-
export class TableColumnDateTextPageObject {
|
|
6
|
-
constructor(tablePageObject) {
|
|
7
|
-
this.tablePageObject = tablePageObject;
|
|
8
|
-
// On Chrome, in a formatted date, the space before AM/PM is a narrow non-breaking space.
|
|
9
|
-
// For testing consistency across browsers, replace it with a regular space.
|
|
10
|
-
this.narrowNonBreakingSpace = '\u202f';
|
|
11
|
-
}
|
|
12
|
-
getRenderedCellContent(rowIndex, columnIndex) {
|
|
13
|
-
this.verifyCellType(rowIndex, columnIndex);
|
|
14
|
-
return this.tablePageObject
|
|
15
|
-
.getRenderedCellTextContent(rowIndex, columnIndex)
|
|
16
|
-
.replace(this.narrowNonBreakingSpace, ' ');
|
|
17
|
-
}
|
|
18
|
-
getRenderedGroupHeaderContent(groupRowIndex) {
|
|
19
|
-
return this.tablePageObject
|
|
20
|
-
.getRenderedGroupHeaderTextContent(groupRowIndex)
|
|
21
|
-
.replace(this.narrowNonBreakingSpace, ' ');
|
|
22
|
-
}
|
|
23
|
-
getCellTitle(rowIndex, columnIndex) {
|
|
24
|
-
this.verifyCellType(rowIndex, columnIndex);
|
|
25
|
-
return this.tablePageObject
|
|
26
|
-
.getCellTitle(rowIndex, columnIndex)
|
|
27
|
-
.replace(this.narrowNonBreakingSpace, ' ');
|
|
28
|
-
}
|
|
6
|
+
export class TableColumnDateTextPageObject extends TableColumnFormattedTextPageObject {
|
|
29
7
|
verifyCellType(rowIndex, columnIndex) {
|
|
30
8
|
const cell = this.tablePageObject.getRenderedCellView(rowIndex, columnIndex);
|
|
31
9
|
if (!(cell instanceof TableColumnDateTextCellView)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"table-column-date-text.pageobject.js","sourceRoot":"","sources":["../../../../../src/table-column/date-text/testing/table-column-date-text.pageobject.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"table-column-date-text.pageobject.js","sourceRoot":"","sources":["../../../../../src/table-column/date-text/testing/table-column-date-text.pageobject.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kCAAkC,EAAE,MAAM,sDAAsD,CAAC;AAC1G,OAAO,EAAE,2BAA2B,EAAE,MAAM,cAAc,CAAC;AAE3D;;GAEG;AACH,MAAM,OAAO,6BAEX,SAAQ,kCAAqC;IACxB,cAAc,CAC7B,QAAgB,EAChB,WAAmB;QAEnB,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,mBAAmB,CACjD,QAAQ,EACR,WAAW,CACd,CAAC;QACF,IAAI,CAAC,CAAC,IAAI,YAAY,2BAA2B,CAAC,EAAE;YAChD,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;SACxD;IACL,CAAC;CACJ"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { TableColumnDurationTextCellRecord, TableColumnDurationTextColumnConfig } from '..';
|
|
2
|
+
import { TableColumnTextCellViewBase } from '../../text-base/cell-view';
|
|
3
|
+
declare global {
|
|
4
|
+
interface HTMLElementTagNameMap {
|
|
5
|
+
'nimble-table-column-duration-text-cell-view': TableColumnDurationTextCellView;
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* A cell view for displaying duration fields as text
|
|
10
|
+
*/
|
|
11
|
+
export declare class TableColumnDurationTextCellView extends TableColumnTextCellViewBase<TableColumnDurationTextCellRecord, TableColumnDurationTextColumnConfig> {
|
|
12
|
+
private columnConfigChanged;
|
|
13
|
+
private cellRecordChanged;
|
|
14
|
+
private updateText;
|
|
15
|
+
}
|
|
16
|
+
export declare const tableColumnDurationTextCellViewTag: string;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { DesignSystem } from '@microsoft/fast-foundation';
|
|
2
|
+
import { template } from '../../text-base/cell-view/template';
|
|
3
|
+
import { styles } from '../../text-base/cell-view/styles';
|
|
4
|
+
import { TableColumnTextCellViewBase } from '../../text-base/cell-view';
|
|
5
|
+
/**
|
|
6
|
+
* A cell view for displaying duration fields as text
|
|
7
|
+
*/
|
|
8
|
+
export class TableColumnDurationTextCellView extends TableColumnTextCellViewBase {
|
|
9
|
+
columnConfigChanged() {
|
|
10
|
+
this.updateText();
|
|
11
|
+
}
|
|
12
|
+
cellRecordChanged() {
|
|
13
|
+
this.updateText();
|
|
14
|
+
}
|
|
15
|
+
updateText() {
|
|
16
|
+
this.text = this.columnConfig?.formatter.format(this.cellRecord?.value) ?? '';
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
const durationTextCellView = TableColumnDurationTextCellView.compose({
|
|
20
|
+
baseName: 'table-column-duration-text-cell-view',
|
|
21
|
+
template,
|
|
22
|
+
styles
|
|
23
|
+
});
|
|
24
|
+
DesignSystem.getOrCreate()
|
|
25
|
+
.withPrefix('nimble')
|
|
26
|
+
.register(durationTextCellView());
|
|
27
|
+
export const tableColumnDurationTextCellViewTag = DesignSystem.tagFor(TableColumnDurationTextCellView);
|
|
28
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/table-column/duration-text/cell-view/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAC;AAK9D,OAAO,EAAE,MAAM,EAAE,MAAM,kCAAkC,CAAC;AAC1D,OAAO,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AAQxE;;GAEG;AACH,MAAM,OAAO,+BAAgC,SAAQ,2BAGpD;IACW,mBAAmB;QACvB,IAAI,CAAC,UAAU,EAAE,CAAC;IACtB,CAAC;IAEO,iBAAiB;QACrB,IAAI,CAAC,UAAU,EAAE,CAAC;IACtB,CAAC;IAEO,UAAU;QACd,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,YAAY,EAAE,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC;IAClF,CAAC;CACJ;AAED,MAAM,oBAAoB,GAAG,+BAA+B,CAAC,OAAO,CAAC;IACjE,QAAQ,EAAE,sCAAsC;IAChD,QAAQ;IACR,MAAM;CACT,CAAC,CAAC;AACH,YAAY,CAAC,WAAW,EAAE;KACrB,UAAU,CAAC,QAAQ,CAAC;KACpB,QAAQ,CAAC,oBAAoB,EAAE,CAAC,CAAC;AACtC,MAAM,CAAC,MAAM,kCAAkC,GAAG,YAAY,CAAC,MAAM,CACjE,+BAA+B,CAClC,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { TableNumberFieldValue } from '../../../table/types';
|
|
2
|
+
import { TableColumnTextGroupHeaderViewBase } from '../../text-base/group-header-view';
|
|
3
|
+
import type { TableColumnDurationTextColumnConfig } from '..';
|
|
4
|
+
declare global {
|
|
5
|
+
interface HTMLElementTagNameMap {
|
|
6
|
+
'nimble-table-duration-text-group-header': TableColumnDurationTextGroupHeaderView;
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* The group header view for displaying duration fields as text.
|
|
11
|
+
*/
|
|
12
|
+
export declare class TableColumnDurationTextGroupHeaderView extends TableColumnTextGroupHeaderViewBase<TableNumberFieldValue, TableColumnDurationTextColumnConfig> {
|
|
13
|
+
private columnConfigChanged;
|
|
14
|
+
private groupHeaderValueChanged;
|
|
15
|
+
private updateText;
|
|
16
|
+
}
|
|
17
|
+
export declare const tableColumnDurationTextGroupHeaderViewTag: string;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { DesignSystem } from '@microsoft/fast-foundation';
|
|
2
|
+
import { TableColumnTextGroupHeaderViewBase } from '../../text-base/group-header-view';
|
|
3
|
+
import { template } from '../../text-base/group-header-view/template';
|
|
4
|
+
import { styles } from '../../text-base/group-header-view/styles';
|
|
5
|
+
/**
|
|
6
|
+
* The group header view for displaying duration fields as text.
|
|
7
|
+
*/
|
|
8
|
+
export class TableColumnDurationTextGroupHeaderView extends TableColumnTextGroupHeaderViewBase {
|
|
9
|
+
columnConfigChanged() {
|
|
10
|
+
this.updateText();
|
|
11
|
+
}
|
|
12
|
+
groupHeaderValueChanged() {
|
|
13
|
+
this.updateText();
|
|
14
|
+
}
|
|
15
|
+
updateText() {
|
|
16
|
+
if (this.columnConfig) {
|
|
17
|
+
this.text = this.columnConfig.formatter.format(this.groupHeaderValue);
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
this.text = '';
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
const tableColumnDurationTextGroupHeaderView = TableColumnDurationTextGroupHeaderView.compose({
|
|
25
|
+
baseName: 'table-column-duration-text-group-header-view',
|
|
26
|
+
template,
|
|
27
|
+
styles
|
|
28
|
+
});
|
|
29
|
+
DesignSystem.getOrCreate()
|
|
30
|
+
.withPrefix('nimble')
|
|
31
|
+
.register(tableColumnDurationTextGroupHeaderView());
|
|
32
|
+
export const tableColumnDurationTextGroupHeaderViewTag = DesignSystem.tagFor(TableColumnDurationTextGroupHeaderView);
|
|
33
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/table-column/duration-text/group-header-view/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE1D,OAAO,EAAE,kCAAkC,EAAE,MAAM,mCAAmC,CAAC;AACvF,OAAO,EAAE,QAAQ,EAAE,MAAM,4CAA4C,CAAC;AACtE,OAAO,EAAE,MAAM,EAAE,MAAM,0CAA0C,CAAC;AAQlE;;GAEG;AACH,MAAM,OAAO,sCAAuC,SAAQ,kCAG3D;IACW,mBAAmB;QACvB,IAAI,CAAC,UAAU,EAAE,CAAC;IACtB,CAAC;IAEO,uBAAuB;QAC3B,IAAI,CAAC,UAAU,EAAE,CAAC;IACtB,CAAC;IAEO,UAAU;QACd,IAAI,IAAI,CAAC,YAAY,EAAE;YACnB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,MAAM,CAC1C,IAAI,CAAC,gBAAgB,CACxB,CAAC;SACL;aAAM;YACH,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;SAClB;IACL,CAAC;CACJ;AAED,MAAM,sCAAsC,GAAG,sCAAsC,CAAC,OAAO,CAAC;IAC1F,QAAQ,EAAE,8CAA8C;IACxD,QAAQ;IACR,MAAM;CACT,CAAC,CAAC;AACH,YAAY,CAAC,WAAW,EAAE;KACrB,UAAU,CAAC,QAAQ,CAAC;KACpB,QAAQ,CAAC,sCAAsC,EAAE,CAAC,CAAC;AACxD,MAAM,CAAC,MAAM,yCAAyC,GAAG,YAAY,CAAC,MAAM,CACxE,sCAAsC,CACzC,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { TableNumberField } from '../../table/types';
|
|
2
|
+
import { TableColumnTextBase } from '../text-base';
|
|
3
|
+
import type { ColumnInternalsOptions } from '../base/models/column-internals';
|
|
4
|
+
import { DurationFormatter } from './models/duration-formatter';
|
|
5
|
+
export declare type TableColumnDurationTextCellRecord = TableNumberField<'value'>;
|
|
6
|
+
export interface TableColumnDurationTextColumnConfig {
|
|
7
|
+
formatter: DurationFormatter;
|
|
8
|
+
}
|
|
9
|
+
declare global {
|
|
10
|
+
interface HTMLElementTagNameMap {
|
|
11
|
+
'nimble-table-column-duration-text': TableColumnDurationText;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* The table column for displaying a duration value as text.
|
|
16
|
+
*/
|
|
17
|
+
export declare class TableColumnDurationText extends TableColumnTextBase {
|
|
18
|
+
private readonly langSubscriber;
|
|
19
|
+
connectedCallback(): void;
|
|
20
|
+
disconnectedCallback(): void;
|
|
21
|
+
protected getColumnInternalsOptions(): ColumnInternalsOptions;
|
|
22
|
+
private updateColumnConfig;
|
|
23
|
+
}
|
|
24
|
+
export declare const tableColumnDurationTextTag: string;
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { DesignSystem } from '@microsoft/fast-foundation';
|
|
2
|
+
import { styles } from '../base/styles';
|
|
3
|
+
import { template } from '../base/template';
|
|
4
|
+
import { TableColumnTextBase } from '../text-base';
|
|
5
|
+
import { TableColumnSortOperation } from '../base/types';
|
|
6
|
+
import { tableColumnDurationTextCellViewTag } from './cell-view';
|
|
7
|
+
import { lang } from '../../theme-provider';
|
|
8
|
+
import { DurationFormatter } from './models/duration-formatter';
|
|
9
|
+
import { tableColumnDurationTextGroupHeaderViewTag } from './group-header-view';
|
|
10
|
+
/**
|
|
11
|
+
* The table column for displaying a duration value as text.
|
|
12
|
+
*/
|
|
13
|
+
export class TableColumnDurationText extends TableColumnTextBase {
|
|
14
|
+
constructor() {
|
|
15
|
+
super(...arguments);
|
|
16
|
+
this.langSubscriber = {
|
|
17
|
+
handleChange: () => {
|
|
18
|
+
this.updateColumnConfig();
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
connectedCallback() {
|
|
23
|
+
super.connectedCallback();
|
|
24
|
+
lang.subscribe(this.langSubscriber, this);
|
|
25
|
+
this.updateColumnConfig();
|
|
26
|
+
}
|
|
27
|
+
disconnectedCallback() {
|
|
28
|
+
super.disconnectedCallback();
|
|
29
|
+
lang.unsubscribe(this.langSubscriber, this);
|
|
30
|
+
}
|
|
31
|
+
getColumnInternalsOptions() {
|
|
32
|
+
return {
|
|
33
|
+
cellRecordFieldNames: ['value'],
|
|
34
|
+
cellViewTag: tableColumnDurationTextCellViewTag,
|
|
35
|
+
groupHeaderViewTag: tableColumnDurationTextGroupHeaderViewTag,
|
|
36
|
+
delegatedEvents: [],
|
|
37
|
+
sortOperation: TableColumnSortOperation.basic
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
updateColumnConfig() {
|
|
41
|
+
const formatter = new DurationFormatter(lang.getValueFor(this));
|
|
42
|
+
if (formatter) {
|
|
43
|
+
const columnConfig = {
|
|
44
|
+
formatter
|
|
45
|
+
};
|
|
46
|
+
this.columnInternals.columnConfig = columnConfig;
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
this.columnInternals.columnConfig = undefined;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
const nimbleTableColumnDurationText = TableColumnDurationText.compose({
|
|
54
|
+
baseName: 'table-column-duration-text',
|
|
55
|
+
template,
|
|
56
|
+
styles
|
|
57
|
+
});
|
|
58
|
+
DesignSystem.getOrCreate()
|
|
59
|
+
.withPrefix('nimble')
|
|
60
|
+
.register(nimbleTableColumnDurationText());
|
|
61
|
+
export const tableColumnDurationTextTag = DesignSystem.tagFor(TableColumnDurationText);
|
|
62
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/table-column/duration-text/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,YAAY,EAEf,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,EAAE,kCAAkC,EAAE,MAAM,aAAa,CAAC;AAEjE,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,yCAAyC,EAAE,MAAM,qBAAqB,CAAC;AAahF;;GAEG;AACH,MAAM,OAAO,uBAAwB,SAAQ,mBAAmB;IAAhE;;QACqB,mBAAc,GAAuC;YAClE,YAAY,EAAE,GAAG,EAAE;gBACf,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC9B,CAAC;SACJ,CAAC;IAmCN,CAAC;IAjCmB,iBAAiB;QAC7B,KAAK,CAAC,iBAAiB,EAAE,CAAC;QAC1B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;QAC1C,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC9B,CAAC;IAEe,oBAAoB;QAChC,KAAK,CAAC,oBAAoB,EAAE,CAAC;QAC7B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;IAChD,CAAC;IAEkB,yBAAyB;QACxC,OAAO;YACH,oBAAoB,EAAE,CAAC,OAAO,CAAC;YAC/B,WAAW,EAAE,kCAAkC;YAC/C,kBAAkB,EAAE,yCAAyC;YAC7D,eAAe,EAAE,EAAE;YACnB,aAAa,EAAE,wBAAwB,CAAC,KAAK;SAChD,CAAC;IACN,CAAC;IAEO,kBAAkB;QACtB,MAAM,SAAS,GAAG,IAAI,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;QAEhE,IAAI,SAAS,EAAE;YACX,MAAM,YAAY,GAAwC;gBACtD,SAAS;aACZ,CAAC;YACF,IAAI,CAAC,eAAe,CAAC,YAAY,GAAG,YAAY,CAAC;SACpD;aAAM;YACH,IAAI,CAAC,eAAe,CAAC,YAAY,GAAG,SAAS,CAAC;SACjD;IACL,CAAC;CACJ;AAED,MAAM,6BAA6B,GAAG,uBAAuB,CAAC,OAAO,CAAC;IAClE,QAAQ,EAAE,4BAA4B;IACtC,QAAQ;IACR,MAAM;CACT,CAAC,CAAC;AAEH,YAAY,CAAC,WAAW,EAAE;KACrB,UAAU,CAAC,QAAQ,CAAC;KACpB,QAAQ,CAAC,6BAA6B,EAAE,CAAC,CAAC;AAC/C,MAAM,CAAC,MAAM,0BAA0B,GAAG,YAAY,CAAC,MAAM,CACzD,uBAAuB,CAC1B,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A class for formatting a numeric value in the unit of milliseconds into a display value representing its
|
|
3
|
+
* days, hours, minutes, and seconds.
|
|
4
|
+
*/
|
|
5
|
+
export declare class DurationFormatter {
|
|
6
|
+
private readonly lang;
|
|
7
|
+
private readonly daysFormatter;
|
|
8
|
+
private readonly hoursFormatter;
|
|
9
|
+
private readonly minutesFormatter;
|
|
10
|
+
private readonly secondsFormatter;
|
|
11
|
+
private readonly scientificSecondsFormatter;
|
|
12
|
+
constructor(lang: string);
|
|
13
|
+
format(milliseconds: number | null | undefined): string;
|
|
14
|
+
}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A class for formatting a numeric value in the unit of milliseconds into a display value representing its
|
|
3
|
+
* days, hours, minutes, and seconds.
|
|
4
|
+
*/
|
|
5
|
+
export class DurationFormatter {
|
|
6
|
+
constructor(lang) {
|
|
7
|
+
this.lang = lang;
|
|
8
|
+
this.daysFormatter = new Intl.NumberFormat(this.lang, {
|
|
9
|
+
style: 'unit',
|
|
10
|
+
unit: 'day'
|
|
11
|
+
});
|
|
12
|
+
this.hoursFormatter = new Intl.NumberFormat(this.lang, {
|
|
13
|
+
style: 'unit',
|
|
14
|
+
unit: 'hour'
|
|
15
|
+
});
|
|
16
|
+
this.minutesFormatter = new Intl.NumberFormat(this.lang, {
|
|
17
|
+
style: 'unit',
|
|
18
|
+
unit: 'minute'
|
|
19
|
+
});
|
|
20
|
+
this.secondsFormatter = new Intl.NumberFormat(this.lang, {
|
|
21
|
+
style: 'unit',
|
|
22
|
+
unit: 'second'
|
|
23
|
+
});
|
|
24
|
+
this.scientificSecondsFormatter = new Intl.NumberFormat(this.lang, {
|
|
25
|
+
style: 'unit',
|
|
26
|
+
unit: 'second',
|
|
27
|
+
notation: 'scientific',
|
|
28
|
+
maximumFractionDigits: 3
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
format(milliseconds) {
|
|
32
|
+
if (typeof milliseconds !== 'number'
|
|
33
|
+
|| milliseconds < 0
|
|
34
|
+
|| !Number.isFinite(milliseconds)) {
|
|
35
|
+
return '';
|
|
36
|
+
}
|
|
37
|
+
const result = [];
|
|
38
|
+
const millisecondsPerSecond = 1000;
|
|
39
|
+
const millisecondsPerMinute = millisecondsPerSecond * 60;
|
|
40
|
+
const millisecondsPerHour = millisecondsPerMinute * 60;
|
|
41
|
+
const millisecondsPerDay = millisecondsPerHour * 24;
|
|
42
|
+
const fractionalDays = milliseconds / millisecondsPerDay;
|
|
43
|
+
const maximumDays = 999;
|
|
44
|
+
let remainingTime = milliseconds;
|
|
45
|
+
const days = Math.floor(fractionalDays);
|
|
46
|
+
if (days <= maximumDays && days > 0) {
|
|
47
|
+
const formattedDays = this.daysFormatter.format(days);
|
|
48
|
+
result.push(formattedDays);
|
|
49
|
+
remainingTime -= days * millisecondsPerDay;
|
|
50
|
+
}
|
|
51
|
+
else if (days > maximumDays) {
|
|
52
|
+
return this.scientificSecondsFormatter.format(milliseconds / millisecondsPerSecond);
|
|
53
|
+
}
|
|
54
|
+
const hours = Math.floor((milliseconds / millisecondsPerHour) % 24);
|
|
55
|
+
remainingTime -= hours * millisecondsPerHour;
|
|
56
|
+
if (hours) {
|
|
57
|
+
const formattedHours = this.hoursFormatter.format(hours);
|
|
58
|
+
result.push(formattedHours);
|
|
59
|
+
}
|
|
60
|
+
const minutes = Math.floor((milliseconds / millisecondsPerMinute) % 60);
|
|
61
|
+
remainingTime -= minutes * millisecondsPerMinute;
|
|
62
|
+
if (minutes) {
|
|
63
|
+
const formattedMinutes = this.minutesFormatter.format(minutes);
|
|
64
|
+
result.push(formattedMinutes);
|
|
65
|
+
}
|
|
66
|
+
const valueInSeconds = remainingTime / millisecondsPerSecond;
|
|
67
|
+
// if -0, coerce to 0
|
|
68
|
+
const seconds = valueInSeconds === 0 ? 0 : valueInSeconds % 60;
|
|
69
|
+
if (milliseconds < 1 && valueInSeconds !== 0) {
|
|
70
|
+
return this.scientificSecondsFormatter.format(valueInSeconds);
|
|
71
|
+
}
|
|
72
|
+
if (seconds >= 0.0005 || (seconds === 0 && result.length === 0)) {
|
|
73
|
+
const formattedSeconds = this.secondsFormatter.format(seconds);
|
|
74
|
+
result.push(formattedSeconds);
|
|
75
|
+
}
|
|
76
|
+
return result.join(', ');
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=duration-formatter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"duration-formatter.js","sourceRoot":"","sources":["../../../../../src/table-column/duration-text/models/duration-formatter.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/table-column/duration-text/testing/table-column-duration-text.pageobject.d.ts
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { TableRecord } from '../../../table/types';
|
|
2
|
+
import { TableColumnFormattedTextPageObject } from '../../testing/table-column-formatted-text.pageobject';
|
|
3
|
+
/**
|
|
4
|
+
* Page object for duration text table column.
|
|
5
|
+
*/
|
|
6
|
+
export declare class TableColumnDurationTextPageObject<T extends TableRecord> extends TableColumnFormattedTextPageObject<T> {
|
|
7
|
+
protected verifyCellType(rowIndex: number, columnIndex: number): void;
|
|
8
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { TableColumnFormattedTextPageObject } from '../../testing/table-column-formatted-text.pageobject';
|
|
2
|
+
import { TableColumnDurationTextCellView } from '../cell-view';
|
|
3
|
+
/**
|
|
4
|
+
* Page object for duration text table column.
|
|
5
|
+
*/
|
|
6
|
+
export class TableColumnDurationTextPageObject extends TableColumnFormattedTextPageObject {
|
|
7
|
+
verifyCellType(rowIndex, columnIndex) {
|
|
8
|
+
const cell = this.tablePageObject.getRenderedCellView(rowIndex, columnIndex);
|
|
9
|
+
if (!(cell instanceof TableColumnDurationTextCellView)) {
|
|
10
|
+
throw new Error('Cell is not in a duration text column');
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=table-column-duration-text.pageobject.js.map
|
package/dist/esm/table-column/duration-text/testing/table-column-duration-text.pageobject.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table-column-duration-text.pageobject.js","sourceRoot":"","sources":["../../../../../src/table-column/duration-text/testing/table-column-duration-text.pageobject.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kCAAkC,EAAE,MAAM,sDAAsD,CAAC;AAC1G,OAAO,EAAE,+BAA+B,EAAE,MAAM,cAAc,CAAC;AAE/D;;GAEG;AACH,MAAM,OAAO,iCAEX,SAAQ,kCAAqC;IACxB,cAAc,CAC7B,QAAgB,EAChB,WAAmB;QAEnB,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,mBAAmB,CACjD,QAAQ,EACR,WAAW,CACd,CAAC;QACF,IAAI,CAAC,CAAC,IAAI,YAAY,+BAA+B,CAAC,EAAE;YACpD,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;SAC5D;IACL,CAAC;CACJ"}
|
|
@@ -25,6 +25,7 @@ export declare class TableColumnNumberText extends TableColumnTextBase {
|
|
|
25
25
|
format: NumberTextFormat;
|
|
26
26
|
alignment: NumberTextAlignment;
|
|
27
27
|
decimalDigits?: number;
|
|
28
|
+
decimalMaximumDigits?: number;
|
|
28
29
|
private readonly langSubscriber;
|
|
29
30
|
connectedCallback(): void;
|
|
30
31
|
disconnectedCallback(): void;
|
|
@@ -33,6 +34,7 @@ export declare class TableColumnNumberText extends TableColumnTextBase {
|
|
|
33
34
|
private formatChanged;
|
|
34
35
|
private alignmentChanged;
|
|
35
36
|
private decimalDigitsChanged;
|
|
37
|
+
private decimalMaximumDigitsChanged;
|
|
36
38
|
private updateColumnConfig;
|
|
37
39
|
private createFormatter;
|
|
38
40
|
private determineCellContentAlignment;
|
|
@@ -58,8 +58,13 @@ export class TableColumnNumberText extends TableColumnTextBase {
|
|
|
58
58
|
decimalDigitsChanged() {
|
|
59
59
|
this.updateColumnConfig();
|
|
60
60
|
}
|
|
61
|
+
decimalMaximumDigitsChanged() {
|
|
62
|
+
this.updateColumnConfig();
|
|
63
|
+
}
|
|
61
64
|
updateColumnConfig() {
|
|
62
65
|
this.validator.validateDecimalDigits(this.format, this.decimalDigits);
|
|
66
|
+
this.validator.validateDecimalMaximumDigits(this.format, this.decimalMaximumDigits);
|
|
67
|
+
this.validator.validateNoMutuallyExclusiveProperties(this.format, this.decimalDigits, this.decimalMaximumDigits);
|
|
63
68
|
if (this.validator.isValid()) {
|
|
64
69
|
const columnConfig = {
|
|
65
70
|
formatter: this.createFormatter(),
|
|
@@ -72,9 +77,17 @@ export class TableColumnNumberText extends TableColumnTextBase {
|
|
|
72
77
|
}
|
|
73
78
|
}
|
|
74
79
|
createFormatter() {
|
|
80
|
+
let minimumDigits;
|
|
81
|
+
let maximumDigits;
|
|
75
82
|
switch (this.format) {
|
|
76
83
|
case NumberTextFormat.decimal:
|
|
77
|
-
|
|
84
|
+
minimumDigits = typeof this.decimalMaximumDigits === 'number'
|
|
85
|
+
? 0
|
|
86
|
+
: this.decimalDigits ?? defaultDecimalDigits;
|
|
87
|
+
maximumDigits = this.decimalMaximumDigits
|
|
88
|
+
?? this.decimalDigits
|
|
89
|
+
?? defaultDecimalDigits;
|
|
90
|
+
return new DecimalFormatter(lang.getValueFor(this), minimumDigits, maximumDigits);
|
|
78
91
|
default:
|
|
79
92
|
return new DefaultFormatter(lang.getValueFor(this));
|
|
80
93
|
}
|
|
@@ -86,8 +99,9 @@ export class TableColumnNumberText extends TableColumnTextBase {
|
|
|
86
99
|
if (this.alignment === NumberTextAlignment.right) {
|
|
87
100
|
return TextCellViewBaseAlignment.right;
|
|
88
101
|
}
|
|
89
|
-
// Look at format to determine the default alignment
|
|
90
|
-
if (this.format === NumberTextFormat.decimal
|
|
102
|
+
// Look at format and decimal max digits to determine the default alignment
|
|
103
|
+
if (this.format === NumberTextFormat.decimal
|
|
104
|
+
&& typeof this.decimalMaximumDigits !== 'number') {
|
|
91
105
|
return TextCellViewBaseAlignment.right;
|
|
92
106
|
}
|
|
93
107
|
return TextCellViewBaseAlignment.left;
|
|
@@ -102,6 +116,12 @@ __decorate([
|
|
|
102
116
|
__decorate([
|
|
103
117
|
attr({ attribute: 'decimal-digits', converter: nullableNumberConverter })
|
|
104
118
|
], TableColumnNumberText.prototype, "decimalDigits", void 0);
|
|
119
|
+
__decorate([
|
|
120
|
+
attr({
|
|
121
|
+
attribute: 'decimal-maximum-digits',
|
|
122
|
+
converter: nullableNumberConverter
|
|
123
|
+
})
|
|
124
|
+
], TableColumnNumberText.prototype, "decimalMaximumDigits", void 0);
|
|
105
125
|
const nimbleTableColumnNumberText = TableColumnNumberText.compose({
|
|
106
126
|
baseName: 'table-column-number-text',
|
|
107
127
|
template,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/table-column/number-text/index.ts"],"names":[],"mappings":";AAAA,OAAO,EACH,YAAY,EAEf,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,IAAI,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AACxE,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,wBAAwB,EAAuB,MAAM,eAAe,CAAC;AAC9E,OAAO,EAAE,mCAAmC,EAAE,MAAM,qBAAqB,CAAC;AAC1E,OAAO,EAAE,gCAAgC,EAAE,MAAM,aAAa,CAAC;AAE/D,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAEhE,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,8BAA8B,EAAE,MAAM,6CAA6C,CAAC;AAC7F,OAAO,EAAE,yBAAyB,EAAE,MAAM,8BAA8B,CAAC;AACzE,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAc5C,MAAM,oBAAoB,GAAG,CAAC,CAAC;AAE/B;;GAEG;AACH,MAAM,OAAO,qBAAsB,SAAQ,mBAAmB;IAA9D;;QACI,gBAAgB;QACT,cAAS,GAAG,IAAI,8BAA8B,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/table-column/number-text/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,7 +5,7 @@ import { NumberFormatter } from './number-formatter';
|
|
|
5
5
|
export declare class DecimalFormatter extends NumberFormatter {
|
|
6
6
|
private readonly formatter;
|
|
7
7
|
private readonly tenPowDecimalDigits;
|
|
8
|
-
constructor(locale: string,
|
|
8
|
+
constructor(locale: string, minimumFractionDigits: number, maximumFractionDigits: number);
|
|
9
9
|
protected format(number: number): string;
|
|
10
10
|
private willRoundToZero;
|
|
11
11
|
}
|
|
@@ -3,14 +3,14 @@ import { NumberFormatter } from './number-formatter';
|
|
|
3
3
|
* The formatter for a number-text column whose format is configured to be 'decimal'.
|
|
4
4
|
*/
|
|
5
5
|
export class DecimalFormatter extends NumberFormatter {
|
|
6
|
-
constructor(locale,
|
|
6
|
+
constructor(locale, minimumFractionDigits, maximumFractionDigits) {
|
|
7
7
|
super();
|
|
8
8
|
this.formatter = new Intl.NumberFormat(locale, {
|
|
9
|
-
maximumFractionDigits
|
|
10
|
-
minimumFractionDigits
|
|
9
|
+
maximumFractionDigits,
|
|
10
|
+
minimumFractionDigits,
|
|
11
11
|
useGrouping: true
|
|
12
12
|
});
|
|
13
|
-
this.tenPowDecimalDigits = 10 **
|
|
13
|
+
this.tenPowDecimalDigits = 10 ** maximumFractionDigits;
|
|
14
14
|
}
|
|
15
15
|
format(number) {
|
|
16
16
|
// The NumberFormat option of `signDisplay: "negative"` is not supported in all browsers nimble supports.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decimal-formatter.js","sourceRoot":"","sources":["../../../../../src/table-column/number-text/models/decimal-formatter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD;;GAEG;AACH,MAAM,OAAO,gBAAiB,SAAQ,eAAe;IAIjD,
|
|
1
|
+
{"version":3,"file":"decimal-formatter.js","sourceRoot":"","sources":["../../../../../src/table-column/number-text/models/decimal-formatter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD;;GAEG;AACH,MAAM,OAAO,gBAAiB,SAAQ,eAAe;IAIjD,YACI,MAAc,EACd,qBAA6B,EAC7B,qBAA6B;QAE7B,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,SAAS,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;YAC3C,qBAAqB;YACrB,qBAAqB;YACrB,WAAW,EAAE,IAAI;SACpB,CAAC,CAAC;QACH,IAAI,CAAC,mBAAmB,GAAG,EAAE,IAAI,qBAAqB,CAAC;IAC3D,CAAC;IAES,MAAM,CAAC,MAAc;QAC3B,yGAAyG;QACzG,4GAA4G;QAC5G,MAAM,aAAa,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QAChE,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IAChD,CAAC;IAEO,eAAe,CAAC,MAAc;QAClC,0GAA0G;QAC1G,2GAA2G;QAC3G,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;IAC/D,CAAC;CACJ"}
|
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
import type { ColumnInternals } from '../../base/models/column-internals';
|
|
2
2
|
import { ColumnValidator } from '../../base/models/column-validator';
|
|
3
3
|
import { NumberTextFormat } from '../types';
|
|
4
|
-
declare const numberTextValidityFlagNames: readonly ["invalidDecimalDigits"];
|
|
4
|
+
declare const numberTextValidityFlagNames: readonly ["invalidDecimalDigits", "invalidDecimalMaximumDigits", "decimalDigitsMutuallyExclusiveWithDecimalMaximumDigits"];
|
|
5
5
|
/**
|
|
6
6
|
* Validator for TableColumnNumberText.
|
|
7
7
|
*/
|
|
8
8
|
export declare class TableColumnNumberTextValidator extends ColumnValidator<typeof numberTextValidityFlagNames> {
|
|
9
9
|
constructor(columnInternals: ColumnInternals<unknown>);
|
|
10
10
|
validateDecimalDigits(format: NumberTextFormat, decimalDigits: number | undefined): void;
|
|
11
|
+
validateDecimalMaximumDigits(format: NumberTextFormat, decimalMaximumDigits: number | undefined): void;
|
|
12
|
+
validateNoMutuallyExclusiveProperties(format: NumberTextFormat, decimalDigits: number | undefined, decimalMaximumDigits: number | undefined): void;
|
|
11
13
|
private isInvalidDecimalDigitsValue;
|
|
12
14
|
}
|
|
13
15
|
export {};
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import { ColumnValidator } from '../../base/models/column-validator';
|
|
2
2
|
import { NumberTextFormat } from '../types';
|
|
3
|
-
const numberTextValidityFlagNames = [
|
|
3
|
+
const numberTextValidityFlagNames = [
|
|
4
|
+
'invalidDecimalDigits',
|
|
5
|
+
'invalidDecimalMaximumDigits',
|
|
6
|
+
'decimalDigitsMutuallyExclusiveWithDecimalMaximumDigits'
|
|
7
|
+
];
|
|
4
8
|
// The maximum and minimum allowed configuration for 'maximumFractionDigits'
|
|
5
9
|
// and 'minimumFractionDigits' on the NumberFormat.
|
|
6
10
|
const minimumValidDecimalDigits = 0;
|
|
@@ -20,6 +24,22 @@ export class TableColumnNumberTextValidator extends ColumnValidator {
|
|
|
20
24
|
: false;
|
|
21
25
|
this.setConditionValue('invalidDecimalDigits', invalid);
|
|
22
26
|
}
|
|
27
|
+
validateDecimalMaximumDigits(format, decimalMaximumDigits) {
|
|
28
|
+
const shouldValidateDecimalDigitsValue = format === NumberTextFormat.decimal
|
|
29
|
+
&& typeof decimalMaximumDigits === 'number';
|
|
30
|
+
const invalid = shouldValidateDecimalDigitsValue
|
|
31
|
+
? this.isInvalidDecimalDigitsValue(decimalMaximumDigits)
|
|
32
|
+
: false;
|
|
33
|
+
this.setConditionValue('invalidDecimalMaximumDigits', invalid);
|
|
34
|
+
}
|
|
35
|
+
validateNoMutuallyExclusiveProperties(format, decimalDigits, decimalMaximumDigits) {
|
|
36
|
+
const shouldValidateMutuallyExclusiveProperties = format === NumberTextFormat.decimal;
|
|
37
|
+
const invalid = shouldValidateMutuallyExclusiveProperties
|
|
38
|
+
? typeof decimalDigits === 'number'
|
|
39
|
+
&& typeof decimalMaximumDigits === 'number'
|
|
40
|
+
: false;
|
|
41
|
+
this.setConditionValue('decimalDigitsMutuallyExclusiveWithDecimalMaximumDigits', invalid);
|
|
42
|
+
}
|
|
23
43
|
isInvalidDecimalDigitsValue(decimalDigits) {
|
|
24
44
|
return (decimalDigits < minimumValidDecimalDigits
|
|
25
45
|
|| decimalDigits > maximumValidDecimalDigits);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"table-column-number-text-validator.js","sourceRoot":"","sources":["../../../../../src/table-column/number-text/models/table-column-number-text-validator.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAE5C,MAAM,2BAA2B,GAAG,
|
|
1
|
+
{"version":3,"file":"table-column-number-text-validator.js","sourceRoot":"","sources":["../../../../../src/table-column/number-text/models/table-column-number-text-validator.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAE5C,MAAM,2BAA2B,GAAG;IAChC,sBAAsB;IACtB,6BAA6B;IAC7B,wDAAwD;CAClD,CAAC;AAEX,4EAA4E;AAC5E,mDAAmD;AACnD,MAAM,yBAAyB,GAAG,CAAC,CAAC;AACpC,MAAM,yBAAyB,GAAG,EAAE,CAAC;AAErC;;GAEG;AACH,MAAM,OAAO,8BAA+B,SAAQ,eAEnD;IACG,YAAmB,eAAyC;QACxD,KAAK,CAAC,eAAe,EAAE,2BAA2B,CAAC,CAAC;IACxD,CAAC;IAEM,qBAAqB,CACxB,MAAwB,EACxB,aAAiC;QAEjC,MAAM,gCAAgC,GAAG,MAAM,KAAK,gBAAgB,CAAC,OAAO;eACrE,OAAO,aAAa,KAAK,QAAQ,CAAC;QACzC,MAAM,OAAO,GAAG,gCAAgC;YAC5C,CAAC,CAAC,IAAI,CAAC,2BAA2B,CAAC,aAAa,CAAC;YACjD,CAAC,CAAC,KAAK,CAAC;QACZ,IAAI,CAAC,iBAAiB,CAAC,sBAAsB,EAAE,OAAO,CAAC,CAAC;IAC5D,CAAC;IAEM,4BAA4B,CAC/B,MAAwB,EACxB,oBAAwC;QAExC,MAAM,gCAAgC,GAAG,MAAM,KAAK,gBAAgB,CAAC,OAAO;eACrE,OAAO,oBAAoB,KAAK,QAAQ,CAAC;QAChD,MAAM,OAAO,GAAG,gCAAgC;YAC5C,CAAC,CAAC,IAAI,CAAC,2BAA2B,CAAC,oBAAoB,CAAC;YACxD,CAAC,CAAC,KAAK,CAAC;QACZ,IAAI,CAAC,iBAAiB,CAAC,6BAA6B,EAAE,OAAO,CAAC,CAAC;IACnE,CAAC;IAEM,qCAAqC,CACxC,MAAwB,EACxB,aAAiC,EACjC,oBAAwC;QAExC,MAAM,yCAAyC,GAAG,MAAM,KAAK,gBAAgB,CAAC,OAAO,CAAC;QACtF,MAAM,OAAO,GAAG,yCAAyC;YACrD,CAAC,CAAC,OAAO,aAAa,KAAK,QAAQ;mBAC9B,OAAO,oBAAoB,KAAK,QAAQ;YAC7C,CAAC,CAAC,KAAK,CAAC;QACZ,IAAI,CAAC,iBAAiB,CAClB,wDAAwD,EACxD,OAAO,CACV,CAAC;IACN,CAAC;IAEO,2BAA2B,CAAC,aAAqB;QACrD,OAAO,CACH,aAAa,GAAG,yBAAyB;eACtC,aAAa,GAAG,yBAAyB,CAC/C,CAAC;IACN,CAAC;CACJ"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { TablePageObject } from '../../table/testing/table.pageobject';
|
|
2
|
+
import type { TableRecord } from '../../table/types';
|
|
3
|
+
/**
|
|
4
|
+
* Page object for table columns that format their text for display.
|
|
5
|
+
*/
|
|
6
|
+
export declare abstract class TableColumnFormattedTextPageObject<T extends TableRecord> {
|
|
7
|
+
protected readonly tablePageObject: TablePageObject<T>;
|
|
8
|
+
private readonly spaceUnicodeCharsRegEx;
|
|
9
|
+
constructor(tablePageObject: TablePageObject<T>);
|
|
10
|
+
getRenderedCellContent(rowIndex: number, columnIndex: number): string;
|
|
11
|
+
getRenderedGroupHeaderContent(groupRowIndex: number): string;
|
|
12
|
+
getCellTitle(rowIndex: number, columnIndex: number): string;
|
|
13
|
+
protected abstract verifyCellType(rowIndex: number, columnIndex: number): void;
|
|
14
|
+
}
|