@ni/nimble-components 18.5.7 → 18.5.8
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 +290 -35
- package/dist/all-components-bundle.js.map +1 -1
- package/dist/all-components-bundle.min.js +883 -843
- package/dist/all-components-bundle.min.js.map +1 -1
- package/dist/esm/table/components/cell/index.d.ts +1 -1
- package/dist/esm/table/components/cell/index.js.map +1 -1
- package/dist/esm/table/components/cell/template.d.ts +1 -1
- package/dist/esm/table/components/header/index.d.ts +6 -0
- package/dist/esm/table/components/header/index.js +32 -0
- package/dist/esm/table/components/header/index.js.map +1 -1
- package/dist/esm/table/components/header/styles.js +5 -0
- package/dist/esm/table/components/header/styles.js.map +1 -1
- package/dist/esm/table/components/header/template.js +15 -2
- package/dist/esm/table/components/header/template.js.map +1 -1
- package/dist/esm/table/components/row/index.d.ts +5 -1
- package/dist/esm/table/components/row/index.js.map +1 -1
- package/dist/esm/table/components/row/template.d.ts +1 -1
- package/dist/esm/table/index.d.ts +13 -2
- package/dist/esm/table/index.js +62 -30
- package/dist/esm/table/index.js.map +1 -1
- package/dist/esm/table/models/sort-operations.d.ts +7 -0
- package/dist/esm/table/models/sort-operations.js +36 -0
- package/dist/esm/table/models/sort-operations.js.map +1 -0
- package/dist/esm/table/models/table-validator.d.ts +2 -0
- package/dist/esm/table/models/table-validator.js +14 -1
- package/dist/esm/table/models/table-validator.js.map +1 -1
- package/dist/esm/table/template.js +6 -1
- package/dist/esm/table/template.js.map +1 -1
- package/dist/esm/table/types.d.ts +10 -17
- package/dist/esm/table/types.js +8 -1
- package/dist/esm/table/types.js.map +1 -1
- package/dist/esm/table-column/base/index.d.ts +23 -1
- package/dist/esm/table-column/base/index.js +25 -3
- package/dist/esm/table-column/base/index.js.map +1 -1
- package/dist/esm/table-column/base/types.d.ts +26 -0
- package/dist/esm/table-column/base/types.js +15 -0
- package/dist/esm/table-column/base/types.js.map +1 -0
- package/dist/esm/table-column/text/index.d.ts +7 -1
- package/dist/esm/table-column/text/index.js +4 -1
- package/dist/esm/table-column/text/index.js.map +1 -1
- package/dist/esm/table-column/text/template.d.ts +1 -1
- package/package.json +1 -1
- package/dist/esm/table/models/table-validator.spec.d.ts +0 -1
- package/dist/esm/table/models/table-validator.spec.js +0 -276
- package/dist/esm/table/models/table-validator.spec.js.map +0 -1
package/dist/esm/table/types.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/table/types.ts"],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/table/types.ts"],"names":[],"mappings":"AAyCA;;GAEG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACpC,IAAI,EAAE,SAAS;IACf,SAAS,EAAE,WAAW;IACtB,UAAU,EAAE,YAAY;CAClB,CAAC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { ElementStyles, ViewTemplate } from '@microsoft/fast-element';
|
|
2
2
|
import { FoundationElement } from '@microsoft/fast-foundation';
|
|
3
|
-
import
|
|
3
|
+
import { TableColumnSortDirection, TableFieldName } from '../../table/types';
|
|
4
|
+
import { TableCellRecord, TableCellState, TableColumnSortOperation } from './types';
|
|
4
5
|
/**
|
|
5
6
|
* The base class for table columns
|
|
6
7
|
*/
|
|
@@ -9,6 +10,8 @@ export declare abstract class TableColumn<TCellRecord extends TableCellRecord =
|
|
|
9
10
|
actionMenuSlot?: string;
|
|
10
11
|
actionMenuLabel?: string;
|
|
11
12
|
columnHidden: boolean;
|
|
13
|
+
sortIndex?: number | null;
|
|
14
|
+
sortDirection: TableColumnSortDirection;
|
|
12
15
|
/**
|
|
13
16
|
* @internal
|
|
14
17
|
*
|
|
@@ -41,6 +44,25 @@ export declare abstract class TableColumn<TCellRecord extends TableCellRecord =
|
|
|
41
44
|
* The relevant, static configuration a column requires its cellTemplate to have access to.
|
|
42
45
|
*/
|
|
43
46
|
columnConfig?: TColumnConfig;
|
|
47
|
+
/**
|
|
48
|
+
* @internal
|
|
49
|
+
*
|
|
50
|
+
* The name of the data field that will be used for operations on the table, such as sorting and grouping.
|
|
51
|
+
*/
|
|
52
|
+
operandDataRecordFieldName?: TableFieldName;
|
|
53
|
+
/**
|
|
54
|
+
* @internal
|
|
55
|
+
*
|
|
56
|
+
* The operation to use when sorting the table by this column.
|
|
57
|
+
*/
|
|
58
|
+
sortOperation: TableColumnSortOperation;
|
|
59
|
+
/**
|
|
60
|
+
* @internal
|
|
61
|
+
*
|
|
62
|
+
* Properties prefixed with `internal` are for internal table-use only.
|
|
63
|
+
*/
|
|
64
|
+
readonly internalUniqueId: string;
|
|
65
|
+
constructor();
|
|
44
66
|
/**
|
|
45
67
|
* @internal
|
|
46
68
|
*/
|
|
@@ -1,14 +1,17 @@
|
|
|
1
1
|
import { __decorate } from "tslib";
|
|
2
|
-
import { attr, observable } from '@microsoft/fast-element';
|
|
2
|
+
import { attr, nullableNumberConverter, observable } from '@microsoft/fast-element';
|
|
3
3
|
import { FoundationElement } from '@microsoft/fast-foundation';
|
|
4
4
|
import { uniqueId } from '@microsoft/fast-web-utilities';
|
|
5
|
+
import { TableColumnSortDirection } from '../../table/types';
|
|
6
|
+
import { TableColumnSortOperation } from './types';
|
|
5
7
|
/**
|
|
6
8
|
* The base class for table columns
|
|
7
9
|
*/
|
|
8
10
|
export class TableColumn extends FoundationElement {
|
|
9
11
|
constructor() {
|
|
10
|
-
super(
|
|
12
|
+
super();
|
|
11
13
|
this.columnHidden = false;
|
|
14
|
+
this.sortDirection = TableColumnSortDirection.none;
|
|
12
15
|
/**
|
|
13
16
|
* @internal
|
|
14
17
|
*
|
|
@@ -16,13 +19,20 @@ export class TableColumn extends FoundationElement {
|
|
|
16
19
|
* This array is parallel with the field names specified by `cellRecordFieldNames`.
|
|
17
20
|
*/
|
|
18
21
|
this.dataRecordFieldNames = [];
|
|
22
|
+
/**
|
|
23
|
+
* @internal
|
|
24
|
+
*
|
|
25
|
+
* The operation to use when sorting the table by this column.
|
|
26
|
+
*/
|
|
27
|
+
this.sortOperation = TableColumnSortOperation.basic;
|
|
28
|
+
this.internalUniqueId = uniqueId('table-column-slot');
|
|
19
29
|
}
|
|
20
30
|
/**
|
|
21
31
|
* @internal
|
|
22
32
|
*/
|
|
23
33
|
connectedCallback() {
|
|
24
34
|
super.connectedCallback();
|
|
25
|
-
this.setAttribute('slot',
|
|
35
|
+
this.setAttribute('slot', this.internalUniqueId);
|
|
26
36
|
}
|
|
27
37
|
}
|
|
28
38
|
__decorate([
|
|
@@ -37,10 +47,22 @@ __decorate([
|
|
|
37
47
|
__decorate([
|
|
38
48
|
attr({ attribute: 'column-hidden', mode: 'boolean' })
|
|
39
49
|
], TableColumn.prototype, "columnHidden", void 0);
|
|
50
|
+
__decorate([
|
|
51
|
+
attr({ attribute: 'sort-index', converter: nullableNumberConverter })
|
|
52
|
+
], TableColumn.prototype, "sortIndex", void 0);
|
|
53
|
+
__decorate([
|
|
54
|
+
attr({ attribute: 'sort-direction' })
|
|
55
|
+
], TableColumn.prototype, "sortDirection", void 0);
|
|
40
56
|
__decorate([
|
|
41
57
|
observable
|
|
42
58
|
], TableColumn.prototype, "dataRecordFieldNames", void 0);
|
|
43
59
|
__decorate([
|
|
44
60
|
observable
|
|
45
61
|
], TableColumn.prototype, "columnConfig", void 0);
|
|
62
|
+
__decorate([
|
|
63
|
+
observable
|
|
64
|
+
], TableColumn.prototype, "operandDataRecordFieldName", void 0);
|
|
65
|
+
__decorate([
|
|
66
|
+
observable
|
|
67
|
+
], TableColumn.prototype, "sortOperation", void 0);
|
|
46
68
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/table-column/base/index.ts"],"names":[],"mappings":";AAAA,OAAO,EACH,IAAI,EAEJ,UAAU,EAEb,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/table-column/base/index.ts"],"names":[],"mappings":";AAAA,OAAO,EACH,IAAI,EAEJ,uBAAuB,EACvB,UAAU,EAEb,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AACzD,OAAO,EAAE,wBAAwB,EAAkB,MAAM,mBAAmB,CAAC;AAC7E,OAAO,EAGH,wBAAwB,EAC3B,MAAM,SAAS,CAAC;AAEjB;;GAEG;AACH,MAAM,OAAgB,WAGpB,SAAQ,iBAAiB;IAkFvB;QACI,KAAK,EAAE,CAAC;QAxEL,iBAAY,GAAG,KAAK,CAAC;QAMrB,kBAAa,GAA6B,wBAAwB,CAAC,IAAI,CAAC;QAyB/E;;;;;WAKG;QAEI,yBAAoB,GAA4C,EAAE,CAAC;QAkB1E;;;;WAIG;QAEI,kBAAa,GAA6B,wBAAwB,CAAC,KAAK,CAAC;QAW5E,IAAI,CAAC,gBAAgB,GAAG,QAAQ,CAAC,mBAAmB,CAAC,CAAC;IAC1D,CAAC;IAED;;OAEG;IACa,iBAAiB;QAC7B,KAAK,CAAC,iBAAiB,EAAE,CAAC;QAE1B,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;IACrD,CAAC;CACJ;AA7FG;IADC,IAAI,CAAC,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC;6CACR;AAGzB;IADC,IAAI,CAAC,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC;mDACT;AAG/B;IADC,IAAI,CAAC,EAAE,SAAS,EAAE,mBAAmB,EAAE,CAAC;oDACT;AAGhC;IADC,IAAI,CAAC,EAAE,SAAS,EAAE,eAAe,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;iDAC1B;AAG5B;IADC,IAAI,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,uBAAuB,EAAE,CAAC;8CACrC;AAGjC;IADC,IAAI,CAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC;kDACyC;AAgC/E;IADC,UAAU;yDAC+D;AAQ1E;IADC,UAAU;iDACyB;AAQpC;IADC,UAAU;+DACwC;AAQnD;IADC,UAAU;kDACqE"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { TableRecord } from '../../table/types';
|
|
2
|
+
/**
|
|
3
|
+
* An object whose fields are defined by a particular TableColumn, which is used by the column's
|
|
4
|
+
* cellTemplate implementation.
|
|
5
|
+
*/
|
|
6
|
+
export interface TableCellRecord extends TableRecord {
|
|
7
|
+
}
|
|
8
|
+
export interface TableCellState<TCellRecord extends TableCellRecord = TableCellRecord, TColumnConfig = unknown> {
|
|
9
|
+
cellRecord: TCellRecord;
|
|
10
|
+
columnConfig: TColumnConfig;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* The possible operations to use when sorting a table column.
|
|
14
|
+
*/
|
|
15
|
+
export declare const TableColumnSortOperation: {
|
|
16
|
+
/**
|
|
17
|
+
* Performs a sort using `===`, `<`, and `>` operators
|
|
18
|
+
*/
|
|
19
|
+
readonly basic: "basic";
|
|
20
|
+
/**
|
|
21
|
+
* Performs a locale-aware case-sensitive string sort on the columns.
|
|
22
|
+
* Only use this sort operation if the field is of type `string | undefined | null`.
|
|
23
|
+
*/
|
|
24
|
+
readonly localeAwareCaseSensitive: "localeAwareCaseSensitive";
|
|
25
|
+
};
|
|
26
|
+
export declare type TableColumnSortOperation = (typeof TableColumnSortOperation)[keyof typeof TableColumnSortOperation];
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The possible operations to use when sorting a table column.
|
|
3
|
+
*/
|
|
4
|
+
export const TableColumnSortOperation = {
|
|
5
|
+
/**
|
|
6
|
+
* Performs a sort using `===`, `<`, and `>` operators
|
|
7
|
+
*/
|
|
8
|
+
basic: 'basic',
|
|
9
|
+
/**
|
|
10
|
+
* Performs a locale-aware case-sensitive string sort on the columns.
|
|
11
|
+
* Only use this sort operation if the field is of type `string | undefined | null`.
|
|
12
|
+
*/
|
|
13
|
+
localeAwareCaseSensitive: 'localeAwareCaseSensitive'
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/table-column/base/types.ts"],"names":[],"mappings":"AAiBA;;GAEG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACpC;;OAEG;IACH,KAAK,EAAE,OAAO;IACd;;;OAGG;IACH,wBAAwB,EAAE,0BAA0B;CAC9C,CAAC"}
|
|
@@ -4,6 +4,11 @@ export declare type TableColumnTextCellRecord = TableStringField<'value'>;
|
|
|
4
4
|
export interface TableColumnTextColumnConfig {
|
|
5
5
|
placeholder: string;
|
|
6
6
|
}
|
|
7
|
+
declare global {
|
|
8
|
+
interface HTMLElementTagNameMap {
|
|
9
|
+
'nimble-table-column-text': TableColumnText;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
7
12
|
/**
|
|
8
13
|
* The table column for displaying strings.
|
|
9
14
|
*/
|
|
@@ -12,7 +17,8 @@ export declare class TableColumnText extends TableColumn<TableColumnTextCellReco
|
|
|
12
17
|
fieldName?: string;
|
|
13
18
|
placeholder?: string;
|
|
14
19
|
readonly cellStyles: import("@microsoft/fast-element").ElementStyles;
|
|
15
|
-
readonly cellTemplate: import("@microsoft/fast-element").ViewTemplate<import("
|
|
20
|
+
readonly cellTemplate: import("@microsoft/fast-element").ViewTemplate<import("../base/types").TableCellState<TableColumnTextCellRecord, TableColumnTextColumnConfig>, any>;
|
|
21
|
+
constructor();
|
|
16
22
|
protected fieldNameChanged(): void;
|
|
17
23
|
protected placeholderChanged(): void;
|
|
18
24
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { __decorate } from "tslib";
|
|
2
2
|
import { attr } from '@microsoft/fast-element';
|
|
3
3
|
import { DesignSystem } from '@microsoft/fast-foundation';
|
|
4
|
+
import { TableColumnSortOperation } from '../base/types';
|
|
4
5
|
import { TableColumn } from '../base';
|
|
5
6
|
import { styles } from '../base/styles';
|
|
6
7
|
import { template } from '../base/template';
|
|
@@ -11,13 +12,15 @@ import { cellTemplate } from './template';
|
|
|
11
12
|
*/
|
|
12
13
|
export class TableColumnText extends TableColumn {
|
|
13
14
|
constructor() {
|
|
14
|
-
super(
|
|
15
|
+
super();
|
|
15
16
|
this.cellRecordFieldNames = ['value'];
|
|
16
17
|
this.cellStyles = cellStyles;
|
|
17
18
|
this.cellTemplate = cellTemplate;
|
|
19
|
+
this.sortOperation = TableColumnSortOperation.localeAwareCaseSensitive;
|
|
18
20
|
}
|
|
19
21
|
fieldNameChanged() {
|
|
20
22
|
this.dataRecordFieldNames = [this.fieldName];
|
|
23
|
+
this.operandDataRecordFieldName = this.fieldName;
|
|
21
24
|
}
|
|
22
25
|
placeholderChanged() {
|
|
23
26
|
this.columnConfig = { placeholder: this.placeholder ?? '' };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/table-column/text/index.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE1D,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/table-column/text/index.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE1D,OAAO,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAa1C;;GAEG;AACH,MAAM,OAAO,eAAgB,SAAQ,WAGpC;IAaG;QACI,KAAK,EAAE,CAAC;QAbL,yBAAoB,GAAG,CAAC,OAAO,CAAU,CAAC;QAQjC,eAAU,GAAG,UAAU,CAAC;QAExB,iBAAY,GAAG,YAAY,CAAC;QAIxC,IAAI,CAAC,aAAa,GAAG,wBAAwB,CAAC,wBAAwB,CAAC;IAC3E,CAAC;IAES,gBAAgB;QACtB,IAAI,CAAC,oBAAoB,GAAG,CAAC,IAAI,CAAC,SAAS,CAAU,CAAC;QACtD,IAAI,CAAC,0BAA0B,GAAG,IAAI,CAAC,SAAS,CAAC;IACrD,CAAC;IAES,kBAAkB;QACxB,IAAI,CAAC,YAAY,GAAG,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,EAAE,EAAE,CAAC;IAChE,CAAC;CACJ;AAtBG;IADC,IAAI,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC;kDACR;AAG1B;IADC,IAAI;oDACuB;AAqBhC,MAAM,qBAAqB,GAAG,eAAe,CAAC,OAAO,CAAC;IAClD,QAAQ,EAAE,mBAAmB;IAC7B,QAAQ;IACR,MAAM;CACT,CAAC,CAAC;AAEH,YAAY,CAAC,WAAW,EAAE;KACrB,UAAU,CAAC,QAAQ,CAAC;KACpB,QAAQ,CAAC,qBAAqB,EAAE,CAAC,CAAC"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import type { TableColumnTextCellRecord, TableColumnTextColumnConfig } from '.';
|
|
2
|
-
import type { TableCellState } from '
|
|
2
|
+
import type { TableCellState } from '../base/types';
|
|
3
3
|
export declare const cellTemplate: import("@microsoft/fast-element").ViewTemplate<TableCellState<TableColumnTextCellRecord, TableColumnTextColumnConfig>, any>;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ni/nimble-components",
|
|
3
|
-
"version": "18.5.
|
|
3
|
+
"version": "18.5.8",
|
|
4
4
|
"description": "Styled web components for the NI Nimble Design System",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"build": "npm run generate-icons && npm run build-components && npm run bundle-components && npm run generate-scss && npm run build-storybook",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,276 +0,0 @@
|
|
|
1
|
-
import { TableValidator } from './table-validator';
|
|
2
|
-
import { getSpecTypeByNamedList } from '../../utilities/tests/parameterized';
|
|
3
|
-
describe('TableValidator', () => {
|
|
4
|
-
let validator;
|
|
5
|
-
beforeEach(() => {
|
|
6
|
-
validator = new TableValidator();
|
|
7
|
-
});
|
|
8
|
-
function getInvalidKeys(tableValidator) {
|
|
9
|
-
return Object.entries(tableValidator)
|
|
10
|
-
.filter(([_, value]) => value)
|
|
11
|
-
.map(([key, _]) => key);
|
|
12
|
-
}
|
|
13
|
-
describe('record ID validation', () => {
|
|
14
|
-
it('setting valid field for ID is valid', () => {
|
|
15
|
-
const data = [
|
|
16
|
-
{ stringField: 'value-1', numberField: 10 },
|
|
17
|
-
{ stringField: 'value-2', numberField: 11 }
|
|
18
|
-
];
|
|
19
|
-
const isValid = validator.validateRecordIds(data, 'stringField');
|
|
20
|
-
expect(isValid).toBeTrue();
|
|
21
|
-
expect(validator.isValid()).toBeTrue();
|
|
22
|
-
expect(getInvalidKeys(validator)).toEqual([]);
|
|
23
|
-
});
|
|
24
|
-
it('setting `undefined` field for ID is valid', () => {
|
|
25
|
-
const data = [
|
|
26
|
-
{ stringField: 'value-1', numberField: 10 },
|
|
27
|
-
{ stringField: 'value-2', numberField: 11 }
|
|
28
|
-
];
|
|
29
|
-
const isValid = validator.validateRecordIds(data, undefined);
|
|
30
|
-
expect(isValid).toBeTrue();
|
|
31
|
-
expect(validator.isValid()).toBeTrue();
|
|
32
|
-
expect(getInvalidKeys(validator)).toEqual([]);
|
|
33
|
-
});
|
|
34
|
-
it('setting data with duplicate IDs is invalid', () => {
|
|
35
|
-
const data = [
|
|
36
|
-
{ stringField: 'value-1', numberField: 10 },
|
|
37
|
-
{ stringField: 'value-1', numberField: 11 }
|
|
38
|
-
];
|
|
39
|
-
const isValid = validator.validateRecordIds(data, 'stringField');
|
|
40
|
-
expect(isValid).toBeFalse();
|
|
41
|
-
expect(validator.isValid()).toBeFalse();
|
|
42
|
-
expect(getInvalidKeys(validator)).toEqual(jasmine.arrayWithExactContents(['duplicateRecordId']));
|
|
43
|
-
});
|
|
44
|
-
it('setting data with invalid ID value type is invalid', () => {
|
|
45
|
-
const data = [
|
|
46
|
-
{ stringField: 'value-1', numberField: 10 },
|
|
47
|
-
{ stringField: 'value-2', numberField: 11 }
|
|
48
|
-
];
|
|
49
|
-
const isValid = validator.validateRecordIds(data, 'numberField');
|
|
50
|
-
expect(isValid).toBeFalse();
|
|
51
|
-
expect(validator.isValid()).toBeFalse();
|
|
52
|
-
expect(getInvalidKeys(validator)).toEqual(jasmine.arrayWithExactContents(['invalidRecordId']));
|
|
53
|
-
});
|
|
54
|
-
it('setting data with empty ID value is valid', () => {
|
|
55
|
-
const data = [
|
|
56
|
-
{ stringField: 'value-1', numberField: 10 },
|
|
57
|
-
{ stringField: '', numberField: 11 }
|
|
58
|
-
];
|
|
59
|
-
const isValid = validator.validateRecordIds(data, 'stringField');
|
|
60
|
-
expect(isValid).toBeTrue();
|
|
61
|
-
expect(validator.isValid()).toBeTrue();
|
|
62
|
-
expect(getInvalidKeys(validator)).toEqual([]);
|
|
63
|
-
});
|
|
64
|
-
it('setting data with undefined ID value is invalid', () => {
|
|
65
|
-
const data = [
|
|
66
|
-
{ stringField: 'value-1', numberField: 10 },
|
|
67
|
-
{ stringField: undefined, numberField: 11 }
|
|
68
|
-
];
|
|
69
|
-
const isValid = validator.validateRecordIds(data, 'stringField');
|
|
70
|
-
expect(isValid).toBeFalse();
|
|
71
|
-
expect(validator.isValid()).toBeFalse();
|
|
72
|
-
expect(getInvalidKeys(validator)).toEqual(jasmine.arrayWithExactContents(['invalidRecordId']));
|
|
73
|
-
});
|
|
74
|
-
it('setting data with null ID value is invalid', () => {
|
|
75
|
-
const data = [
|
|
76
|
-
{ stringField: 'value-1', numberField: 10 },
|
|
77
|
-
{ stringField: undefined, numberField: 11 }
|
|
78
|
-
];
|
|
79
|
-
const isValid = validator.validateRecordIds(data, 'stringField');
|
|
80
|
-
expect(isValid).toBeFalse();
|
|
81
|
-
expect(validator.isValid()).toBeFalse();
|
|
82
|
-
expect(getInvalidKeys(validator)).toEqual(jasmine.arrayWithExactContents(['invalidRecordId']));
|
|
83
|
-
});
|
|
84
|
-
it('setting data with missing IDs is invalid', () => {
|
|
85
|
-
const data = [
|
|
86
|
-
{ stringField: 'value-1', numberField: 10 },
|
|
87
|
-
{ stringField: 'value-2', numberField: 11 }
|
|
88
|
-
];
|
|
89
|
-
const isValid = validator.validateRecordIds(data, 'missingField');
|
|
90
|
-
expect(isValid).toBeFalse();
|
|
91
|
-
expect(validator.isValid()).toBeFalse();
|
|
92
|
-
expect(getInvalidKeys(validator)).toEqual(jasmine.arrayWithExactContents(['missingRecordId']));
|
|
93
|
-
});
|
|
94
|
-
it('multiple errors are reported during validation', () => {
|
|
95
|
-
const data = [
|
|
96
|
-
{ stringField: 'value-1', numberField: 10 },
|
|
97
|
-
{ stringField: 'value-2', numberField: 11 },
|
|
98
|
-
{ stringField: 'value-1', numberField: 12 },
|
|
99
|
-
{ numberField: 12 },
|
|
100
|
-
{ stringField: true, numberField: 12 }
|
|
101
|
-
];
|
|
102
|
-
const isValid = validator.validateRecordIds(data, 'stringField');
|
|
103
|
-
expect(isValid).toBeFalse();
|
|
104
|
-
expect(validator.isValid()).toBeFalse();
|
|
105
|
-
expect(getInvalidKeys(validator)).toEqual(jasmine.arrayWithExactContents([
|
|
106
|
-
'missingRecordId',
|
|
107
|
-
'duplicateRecordId',
|
|
108
|
-
'invalidRecordId'
|
|
109
|
-
]));
|
|
110
|
-
});
|
|
111
|
-
it('setting ID field name to undefined makes configuration valid', () => {
|
|
112
|
-
const data = [
|
|
113
|
-
{ stringField: 'value-1', numberField: 10 },
|
|
114
|
-
{ stringField: 'value-2', numberField: 11 }
|
|
115
|
-
];
|
|
116
|
-
let isValid = validator.validateRecordIds(data, 'missingField');
|
|
117
|
-
expect(isValid).toBeFalse();
|
|
118
|
-
expect(validator.isValid()).toBeFalse();
|
|
119
|
-
isValid = validator.validateRecordIds(data, undefined);
|
|
120
|
-
expect(isValid).toBeTrue();
|
|
121
|
-
expect(validator.isValid()).toBeTrue();
|
|
122
|
-
});
|
|
123
|
-
it('setting a valid ID field name makes an invalid configuration valid', () => {
|
|
124
|
-
const data = [
|
|
125
|
-
{ stringField: 'value-1', numberField: 10 },
|
|
126
|
-
{ stringField: 'value-2', numberField: 11 }
|
|
127
|
-
];
|
|
128
|
-
let isValid = validator.validateRecordIds(data, 'missingField');
|
|
129
|
-
expect(isValid).toBeFalse();
|
|
130
|
-
expect(validator.isValid()).toBeFalse();
|
|
131
|
-
isValid = validator.validateRecordIds(data, 'stringField');
|
|
132
|
-
expect(isValid).toBeTrue();
|
|
133
|
-
expect(validator.isValid()).toBeTrue();
|
|
134
|
-
});
|
|
135
|
-
it('setting invalid ID field name makes a valid configuration invalid', () => {
|
|
136
|
-
const data = [
|
|
137
|
-
{ stringField: 'value-1', numberField: 10 },
|
|
138
|
-
{ stringField: 'value-2', numberField: 11 }
|
|
139
|
-
];
|
|
140
|
-
let isValid = validator.validateRecordIds(data, 'stringField');
|
|
141
|
-
expect(isValid).toBeTrue();
|
|
142
|
-
expect(validator.isValid()).toBeTrue();
|
|
143
|
-
isValid = validator.validateRecordIds(data, 'missingField');
|
|
144
|
-
expect(isValid).toBeFalse();
|
|
145
|
-
expect(validator.isValid()).toBeFalse();
|
|
146
|
-
});
|
|
147
|
-
it('ID field name can be an empty string', () => {
|
|
148
|
-
const data = [
|
|
149
|
-
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
150
|
-
{ stringField: 'value-1', numberField: 10, '': 'empty-1' },
|
|
151
|
-
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
152
|
-
{ stringField: 'value-2', numberField: 11, '': 'empty-2' }
|
|
153
|
-
];
|
|
154
|
-
const isValid = validator.validateRecordIds(data, '');
|
|
155
|
-
expect(isValid).toBeTrue();
|
|
156
|
-
expect(validator.isValid()).toBeTrue();
|
|
157
|
-
expect(getInvalidKeys(validator)).toEqual([]);
|
|
158
|
-
});
|
|
159
|
-
it('validation occurs when ID field name is an empty string', () => {
|
|
160
|
-
const data = [
|
|
161
|
-
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
162
|
-
{ stringField: 'value-1', numberField: 10, '': 'empty-1' },
|
|
163
|
-
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
164
|
-
{ stringField: 'value-2', numberField: 11, '': 'empty-1' }
|
|
165
|
-
];
|
|
166
|
-
const isValid = validator.validateRecordIds(data, '');
|
|
167
|
-
expect(isValid).toBeFalse();
|
|
168
|
-
expect(validator.isValid()).toBeFalse();
|
|
169
|
-
expect(getInvalidKeys(validator)).toEqual(jasmine.arrayWithExactContents(['duplicateRecordId']));
|
|
170
|
-
});
|
|
171
|
-
});
|
|
172
|
-
describe('column ID validation', () => {
|
|
173
|
-
const columnConfigurations = [
|
|
174
|
-
{
|
|
175
|
-
columnIds: [undefined, ''],
|
|
176
|
-
isValid: true,
|
|
177
|
-
invalidKeys: [],
|
|
178
|
-
name: 'does not require column IDs'
|
|
179
|
-
},
|
|
180
|
-
{
|
|
181
|
-
columnIds: ['my-id', undefined, undefined],
|
|
182
|
-
isValid: false,
|
|
183
|
-
invalidKeys: ['missingColumnId'],
|
|
184
|
-
name: 'requires column IDs for all columns if a column ID is defined for at least one'
|
|
185
|
-
},
|
|
186
|
-
{
|
|
187
|
-
columnIds: ['my-id-1', 'my-id-2', 'my-id-3'],
|
|
188
|
-
isValid: true,
|
|
189
|
-
invalidKeys: [],
|
|
190
|
-
name: 'unique defined IDs are valid'
|
|
191
|
-
},
|
|
192
|
-
{
|
|
193
|
-
columnIds: ['my-id-1', 'my-id-2', 'my-id-2'],
|
|
194
|
-
isValid: false,
|
|
195
|
-
invalidKeys: ['duplicateColumnId'],
|
|
196
|
-
name: 'duplicate column IDs is invalid'
|
|
197
|
-
},
|
|
198
|
-
{
|
|
199
|
-
columnIds: ['my-id-1', 'my-id-2', 'my-id-2', undefined],
|
|
200
|
-
isValid: false,
|
|
201
|
-
invalidKeys: ['missingColumnId', 'duplicateColumnId'],
|
|
202
|
-
name: 'reports multiple column ID validation errors'
|
|
203
|
-
},
|
|
204
|
-
{
|
|
205
|
-
columnIds: ['my-id-1', ''],
|
|
206
|
-
isValid: false,
|
|
207
|
-
invalidKeys: ['missingColumnId'],
|
|
208
|
-
name: 'does not allow empty string as a defined column ID'
|
|
209
|
-
}
|
|
210
|
-
];
|
|
211
|
-
const focused = [];
|
|
212
|
-
const disabled = [];
|
|
213
|
-
for (const columnConfiguration of columnConfigurations) {
|
|
214
|
-
const specType = getSpecTypeByNamedList(columnConfiguration, focused, disabled);
|
|
215
|
-
specType(columnConfiguration.name, () => {
|
|
216
|
-
const tableValidator = new TableValidator();
|
|
217
|
-
const isValid = tableValidator.validateColumnIds(columnConfiguration.columnIds);
|
|
218
|
-
expect(isValid).toBe(columnConfiguration.isValid);
|
|
219
|
-
expect(tableValidator.isValid()).toBe(columnConfiguration.invalidKeys.length === 0);
|
|
220
|
-
expect(getInvalidKeys(tableValidator)).toEqual(jasmine.arrayWithExactContents(columnConfiguration.invalidKeys));
|
|
221
|
-
});
|
|
222
|
-
}
|
|
223
|
-
});
|
|
224
|
-
describe('validation checks do not reset unrelated state', () => {
|
|
225
|
-
it('invalid record IDs stay invalid when validating column IDs', () => {
|
|
226
|
-
const data = [
|
|
227
|
-
{ stringField: 'value-1', numberField: 10 },
|
|
228
|
-
{ stringField: 'value-2', numberField: 11 },
|
|
229
|
-
{ stringField: 'value-1', numberField: 12 },
|
|
230
|
-
{ numberField: 12 },
|
|
231
|
-
{ stringField: true, numberField: 12 }
|
|
232
|
-
];
|
|
233
|
-
const recordIdsAreValid = validator.validateRecordIds(data, 'stringField');
|
|
234
|
-
expect(recordIdsAreValid).toBeFalse();
|
|
235
|
-
expect(validator.isValid()).toBeFalse();
|
|
236
|
-
expect(getInvalidKeys(validator)).toEqual(jasmine.arrayWithExactContents([
|
|
237
|
-
'missingRecordId',
|
|
238
|
-
'duplicateRecordId',
|
|
239
|
-
'invalidRecordId'
|
|
240
|
-
]));
|
|
241
|
-
const columnIdsAreValid = validator.validateColumnIds([
|
|
242
|
-
'id-1',
|
|
243
|
-
'id-2',
|
|
244
|
-
'id-3'
|
|
245
|
-
]);
|
|
246
|
-
expect(columnIdsAreValid).toBeTrue();
|
|
247
|
-
expect(validator.isValid()).toBeFalse();
|
|
248
|
-
expect(getInvalidKeys(validator)).toEqual(jasmine.arrayWithExactContents([
|
|
249
|
-
'missingRecordId',
|
|
250
|
-
'duplicateRecordId',
|
|
251
|
-
'invalidRecordId'
|
|
252
|
-
]));
|
|
253
|
-
});
|
|
254
|
-
it('invalid column IDs stay invalid when validating record IDs', () => {
|
|
255
|
-
const columnIdsAreValid = validator.validateColumnIds([
|
|
256
|
-
'id-1',
|
|
257
|
-
'id-1',
|
|
258
|
-
undefined
|
|
259
|
-
]);
|
|
260
|
-
expect(columnIdsAreValid).toBeFalse();
|
|
261
|
-
expect(validator.isValid()).toBeFalse();
|
|
262
|
-
expect(getInvalidKeys(validator)).toEqual(jasmine.arrayWithExactContents([
|
|
263
|
-
'missingColumnId',
|
|
264
|
-
'duplicateColumnId'
|
|
265
|
-
]));
|
|
266
|
-
const recordIdsAreValid = validator.validateRecordIds([], undefined);
|
|
267
|
-
expect(recordIdsAreValid).toBeTrue();
|
|
268
|
-
expect(validator.isValid()).toBeFalse();
|
|
269
|
-
expect(getInvalidKeys(validator)).toEqual(jasmine.arrayWithExactContents([
|
|
270
|
-
'missingColumnId',
|
|
271
|
-
'duplicateColumnId'
|
|
272
|
-
]));
|
|
273
|
-
});
|
|
274
|
-
});
|
|
275
|
-
});
|
|
276
|
-
//# sourceMappingURL=table-validator.spec.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"table-validator.spec.js","sourceRoot":"","sources":["../../../../src/table/models/table-validator.spec.ts"],"names":[],"mappings":"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"}
|