@ni/nimble-components 17.0.0 → 17.0.2

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.
@@ -1,5 +1,5 @@
1
1
  import { FoundationElement } from '@microsoft/fast-foundation';
2
- import type { TableRecord } from './types';
2
+ import type { TableRecord, TableRowState, TableValidity } from './types';
3
3
  declare global {
4
4
  interface HTMLElementTagNameMap {
5
5
  'nimble-table': Table;
@@ -9,14 +9,25 @@ declare global {
9
9
  * A nimble-styled table.
10
10
  */
11
11
  export declare class Table<TData extends TableRecord = TableRecord> extends FoundationElement {
12
+ idFieldName?: string | null;
12
13
  data: TData[];
14
+ /**
15
+ * @internal
16
+ */
17
+ tableData: TableRowState<TData>[];
13
18
  columns: string[];
14
19
  columnHeaders: string[];
20
+ get validity(): TableValidity;
15
21
  private readonly table;
16
22
  private options;
17
23
  private readonly tableInitialized;
24
+ private readonly tableValidator;
18
25
  constructor();
26
+ idFieldNameChanged(_prev: string | undefined, _next: string | undefined): void;
19
27
  dataChanged(prev: TData[] | undefined, next: TData[] | undefined): void;
28
+ checkValidity(): boolean;
29
+ private trySetData;
30
+ private refreshRows;
20
31
  private updateTableOptions;
21
32
  private readonly update;
22
33
  private generateColumns;
@@ -1,7 +1,8 @@
1
1
  import { __decorate } from "tslib";
2
- import { observable } from '@microsoft/fast-element';
2
+ import { attr, observable } from '@microsoft/fast-element';
3
3
  import { DesignSystem, FoundationElement } from '@microsoft/fast-foundation';
4
4
  import { createTable as tanStackCreateTable, getCoreRowModel as tanStackGetCoreRowModel } from '@tanstack/table-core';
5
+ import { TableValidator } from './models/table-validator';
5
6
  import { styles } from './styles';
6
7
  import { template } from './template';
7
8
  /**
@@ -11,12 +12,17 @@ export class Table extends FoundationElement {
11
12
  constructor() {
12
13
  super();
13
14
  this.data = [];
15
+ /**
16
+ * @internal
17
+ */
18
+ this.tableData = [];
14
19
  // TODO: Temporarily expose the columns as a string array. This will ultimately be
15
20
  // column definitions provided by slotted elements.
16
21
  this.columns = [];
17
22
  // TODO: Temporarily expose the column headers as a string array.
18
23
  this.columnHeaders = [];
19
24
  this.tableInitialized = false;
25
+ this.tableValidator = new TableValidator();
20
26
  this.update = (state) => {
21
27
  this.table.setOptions(prev => ({
22
28
  ...prev,
@@ -34,6 +40,13 @@ export class Table extends FoundationElement {
34
40
  data: [],
35
41
  onStateChange: (_) => { },
36
42
  getCoreRowModel: tanStackGetCoreRowModel(),
43
+ getRowId: record => {
44
+ if (this.idFieldName) {
45
+ return record[this.idFieldName];
46
+ }
47
+ // Return a falsey value to use the default ID from TanStack.
48
+ return '';
49
+ },
37
50
  columns: [],
38
51
  state: {},
39
52
  renderFallbackValue: null,
@@ -42,18 +55,46 @@ export class Table extends FoundationElement {
42
55
  this.table = tanStackCreateTable(this.options);
43
56
  this.tableInitialized = true;
44
57
  }
58
+ get validity() {
59
+ return this.tableValidator.getValidity();
60
+ }
61
+ idFieldNameChanged(_prev, _next) {
62
+ // Force TanStack to detect a data update because a row's ID is only
63
+ // generated when creating a new row model.
64
+ this.trySetData([...this.data]);
65
+ }
45
66
  dataChanged(prev, next) {
46
67
  if ((!prev || prev.length === 0) && next && next.length > 0) {
47
68
  this.generateColumns();
48
69
  }
49
70
  // Ignore any updates that occur prior to the TanStack table being initialized.
50
71
  if (this.tableInitialized) {
51
- this.updateTableOptions({ data: this.data });
72
+ this.trySetData(this.data);
73
+ }
74
+ }
75
+ checkValidity() {
76
+ return this.tableValidator.isValid();
77
+ }
78
+ trySetData(newData) {
79
+ const areIdsValid = this.tableValidator.validateDataIds(newData, this.idFieldName);
80
+ if (areIdsValid) {
81
+ this.updateTableOptions({ data: newData });
52
82
  }
83
+ else {
84
+ this.updateTableOptions({ data: [] });
85
+ }
86
+ }
87
+ refreshRows() {
88
+ const rows = this.table.getRowModel().rows;
89
+ this.tableData = rows.map(row => {
90
+ const rowState = { data: row.original };
91
+ return rowState;
92
+ });
53
93
  }
54
94
  updateTableOptions(updatedOptions) {
55
95
  this.options = { ...this.options, ...updatedOptions };
56
96
  this.update(this.table.initialState);
97
+ this.refreshRows();
57
98
  }
58
99
  // Temporarily auto-detect the keys in TData to make columns.
59
100
  // TODO: Remove this logic when another way to specify columns is provided.
@@ -76,9 +117,15 @@ export class Table extends FoundationElement {
76
117
  this.columns = this.columnHeaders;
77
118
  }
78
119
  }
120
+ __decorate([
121
+ attr({ attribute: 'id-field-name' })
122
+ ], Table.prototype, "idFieldName", void 0);
79
123
  __decorate([
80
124
  observable
81
125
  ], Table.prototype, "data", void 0);
126
+ __decorate([
127
+ observable
128
+ ], Table.prototype, "tableData", void 0);
82
129
  __decorate([
83
130
  observable
84
131
  ], Table.prototype, "columns", void 0);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/table/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/table/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { TableRecord, TableValidity } from '../types';
2
+ /**
3
+ * Helper class for the nimble-table to validate that the table's configuration
4
+ * is valid and report which aspects of the configuration are valid or invalid.
5
+ */
6
+ export declare class TableValidator<TData extends TableRecord> {
7
+ private duplicateRowId;
8
+ private missingRowId;
9
+ private invalidRowId;
10
+ getValidity(): TableValidity;
11
+ isValid(): boolean;
12
+ validateDataIds(data: TData[], idFieldName: string | null | undefined): boolean;
13
+ }
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Helper class for the nimble-table to validate that the table's configuration
3
+ * is valid and report which aspects of the configuration are valid or invalid.
4
+ */
5
+ export class TableValidator {
6
+ constructor() {
7
+ this.duplicateRowId = false;
8
+ this.missingRowId = false;
9
+ this.invalidRowId = false;
10
+ }
11
+ getValidity() {
12
+ return {
13
+ duplicateRowId: this.duplicateRowId,
14
+ missingRowId: this.missingRowId,
15
+ invalidRowId: this.invalidRowId
16
+ };
17
+ }
18
+ isValid() {
19
+ return Object.values(this.getValidity()).every(x => x === false);
20
+ }
21
+ validateDataIds(data, idFieldName) {
22
+ // Start off by assuming all IDs are valid.
23
+ this.duplicateRowId = false;
24
+ this.missingRowId = false;
25
+ this.invalidRowId = false;
26
+ if (idFieldName == null) {
27
+ return true;
28
+ }
29
+ const ids = new Set();
30
+ for (const record of data) {
31
+ if (!Object.prototype.hasOwnProperty.call(record, idFieldName)) {
32
+ this.missingRowId = true;
33
+ continue;
34
+ }
35
+ const id = record[idFieldName];
36
+ if (typeof id !== 'string' || id === '') {
37
+ this.invalidRowId = true;
38
+ continue;
39
+ }
40
+ if (ids.has(id)) {
41
+ this.duplicateRowId = true;
42
+ }
43
+ ids.add(id);
44
+ }
45
+ return !this.missingRowId && !this.invalidRowId && !this.duplicateRowId;
46
+ }
47
+ }
48
+ //# sourceMappingURL=table-validator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table-validator.js","sourceRoot":"","sources":["../../../../src/table/models/table-validator.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,OAAO,cAAc;IAA3B;QACY,mBAAc,GAAG,KAAK,CAAC;QACvB,iBAAY,GAAG,KAAK,CAAC;QACrB,iBAAY,GAAG,KAAK,CAAC;IAgDjC,CAAC;IA9CU,WAAW;QACd,OAAO;YACH,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,YAAY,EAAE,IAAI,CAAC,YAAY;SAClC,CAAC;IACN,CAAC;IAEM,OAAO;QACV,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC;IACrE,CAAC;IAEM,eAAe,CAClB,IAAa,EACb,WAAsC;QAEtC,2CAA2C;QAC3C,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;QAC5B,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;QAC1B,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;QAE1B,IAAI,WAAW,IAAI,IAAI,EAAE;YACrB,OAAO,IAAI,CAAC;SACf;QAED,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAC;QAC9B,KAAK,MAAM,MAAM,IAAI,IAAI,EAAE;YACvB,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE;gBAC5D,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;gBACzB,SAAS;aACZ;YAED,MAAM,EAAE,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;YAC/B,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,EAAE,KAAK,EAAE,EAAE;gBACrC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;gBACzB,SAAS;aACZ;YAED,IAAI,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;gBACb,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;aAC9B;YACD,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;SACf;QAED,OAAO,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC;IAC5E,CAAC;CACJ"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,218 @@
1
+ import { TableValidator } from './table-validator';
2
+ describe('TableValidator', () => {
3
+ it('setting valid field for ID is valid', () => {
4
+ const data = [
5
+ { stringField: 'value-1', numberField: 10 },
6
+ { stringField: 'value-2', numberField: 11 }
7
+ ];
8
+ const validator = new TableValidator();
9
+ const isValid = validator.validateDataIds(data, 'stringField');
10
+ expect(isValid).toBeTrue();
11
+ expect(validator.isValid()).toBeTrue();
12
+ const validity = validator.getValidity();
13
+ expect(validity.duplicateRowId).toBeFalse();
14
+ expect(validity.invalidRowId).toBeFalse();
15
+ expect(validity.missingRowId).toBeFalse();
16
+ });
17
+ it('setting `undefined` field for ID is valid', () => {
18
+ const data = [
19
+ { stringField: 'value-1', numberField: 10 },
20
+ { stringField: 'value-2', numberField: 11 }
21
+ ];
22
+ const validator = new TableValidator();
23
+ const isValid = validator.validateDataIds(data, undefined);
24
+ expect(isValid).toBeTrue();
25
+ expect(validator.isValid()).toBeTrue();
26
+ const validity = validator.getValidity();
27
+ expect(validity.duplicateRowId).toBeFalse();
28
+ expect(validity.invalidRowId).toBeFalse();
29
+ expect(validity.missingRowId).toBeFalse();
30
+ });
31
+ it('setting `null` field for ID is valid', () => {
32
+ const data = [
33
+ { stringField: 'value-1', numberField: 10 },
34
+ { stringField: 'value-2', numberField: 11 }
35
+ ];
36
+ const validator = new TableValidator();
37
+ const isValid = validator.validateDataIds(data, null);
38
+ expect(isValid).toBeTrue();
39
+ expect(validator.isValid()).toBeTrue();
40
+ const validity = validator.getValidity();
41
+ expect(validity.duplicateRowId).toBeFalse();
42
+ expect(validity.invalidRowId).toBeFalse();
43
+ expect(validity.missingRowId).toBeFalse();
44
+ });
45
+ it('setting data with duplicate IDs is invalid', () => {
46
+ const data = [
47
+ { stringField: 'value-1', numberField: 10 },
48
+ { stringField: 'value-1', numberField: 11 }
49
+ ];
50
+ const validator = new TableValidator();
51
+ const isValid = validator.validateDataIds(data, 'stringField');
52
+ expect(isValid).toBeFalse();
53
+ expect(validator.isValid()).toBeFalse();
54
+ const validity = validator.getValidity();
55
+ expect(validity.duplicateRowId).toBeTrue();
56
+ expect(validity.invalidRowId).toBeFalse();
57
+ expect(validity.missingRowId).toBeFalse();
58
+ });
59
+ it('setting data with invalid ID value type is invalid', () => {
60
+ const data = [
61
+ { stringField: 'value-1', numberField: 10 },
62
+ { stringField: 'value-2', numberField: 11 }
63
+ ];
64
+ const validator = new TableValidator();
65
+ const isValid = validator.validateDataIds(data, 'numberField');
66
+ expect(isValid).toBeFalse();
67
+ expect(validator.isValid()).toBeFalse();
68
+ const validity = validator.getValidity();
69
+ expect(validity.duplicateRowId).toBeFalse();
70
+ expect(validity.invalidRowId).toBeTrue();
71
+ expect(validity.missingRowId).toBeFalse();
72
+ });
73
+ it('setting data with empty ID value is invalid', () => {
74
+ const data = [
75
+ { stringField: 'value-1', numberField: 10 },
76
+ { stringField: '', numberField: 11 }
77
+ ];
78
+ const validator = new TableValidator();
79
+ const isValid = validator.validateDataIds(data, 'stringField');
80
+ expect(isValid).toBeFalse();
81
+ expect(validator.isValid()).toBeFalse();
82
+ const validity = validator.getValidity();
83
+ expect(validity.duplicateRowId).toBeFalse();
84
+ expect(validity.invalidRowId).toBeTrue();
85
+ expect(validity.missingRowId).toBeFalse();
86
+ });
87
+ it('setting data with undefined ID value is invalid', () => {
88
+ const data = [
89
+ { stringField: 'value-1', numberField: 10 },
90
+ { stringField: undefined, numberField: 11 }
91
+ ];
92
+ const validator = new TableValidator();
93
+ const isValid = validator.validateDataIds(data, 'stringField');
94
+ expect(isValid).toBeFalse();
95
+ expect(validator.isValid()).toBeFalse();
96
+ const validity = validator.getValidity();
97
+ expect(validity.duplicateRowId).toBeFalse();
98
+ expect(validity.invalidRowId).toBeTrue();
99
+ expect(validity.missingRowId).toBeFalse();
100
+ });
101
+ it('setting data with null ID value is invalid', () => {
102
+ const data = [
103
+ { stringField: 'value-1', numberField: 10 },
104
+ { stringField: undefined, numberField: 11 }
105
+ ];
106
+ const validator = new TableValidator();
107
+ const isValid = validator.validateDataIds(data, 'stringField');
108
+ expect(isValid).toBeFalse();
109
+ expect(validator.isValid()).toBeFalse();
110
+ const validity = validator.getValidity();
111
+ expect(validity.duplicateRowId).toBeFalse();
112
+ expect(validity.invalidRowId).toBeTrue();
113
+ expect(validity.missingRowId).toBeFalse();
114
+ });
115
+ it('setting data with missing IDs is invalid', () => {
116
+ const data = [
117
+ { stringField: 'value-1', numberField: 10 },
118
+ { stringField: 'value-2', numberField: 11 }
119
+ ];
120
+ const validator = new TableValidator();
121
+ const isValid = validator.validateDataIds(data, 'missingField');
122
+ expect(isValid).toBeFalse();
123
+ expect(validator.isValid()).toBeFalse();
124
+ const validity = validator.getValidity();
125
+ expect(validity.duplicateRowId).toBeFalse();
126
+ expect(validity.invalidRowId).toBeFalse();
127
+ expect(validity.missingRowId).toBeTrue();
128
+ });
129
+ it('multiple errors are reported during validation', () => {
130
+ const data = [
131
+ { stringField: 'value-1', numberField: 10 },
132
+ { stringField: 'value-2', numberField: 11 },
133
+ { stringField: 'value-1', numberField: 12 },
134
+ { numberField: 12 },
135
+ { stringField: true, numberField: 12 }
136
+ ];
137
+ const validator = new TableValidator();
138
+ const isValid = validator.validateDataIds(data, 'stringField');
139
+ expect(isValid).toBeFalse();
140
+ expect(validator.isValid()).toBeFalse();
141
+ const validity = validator.getValidity();
142
+ expect(validity.duplicateRowId).toBeTrue();
143
+ expect(validity.invalidRowId).toBeTrue();
144
+ expect(validity.missingRowId).toBeTrue();
145
+ });
146
+ it('setting ID field name to undefined makes configuration valid', () => {
147
+ const data = [
148
+ { stringField: 'value-1', numberField: 10 },
149
+ { stringField: 'value-2', numberField: 11 }
150
+ ];
151
+ const validator = new TableValidator();
152
+ let isValid = validator.validateDataIds(data, 'missingField');
153
+ expect(isValid).toBeFalse();
154
+ expect(validator.isValid()).toBeFalse();
155
+ isValid = validator.validateDataIds(data, undefined);
156
+ expect(isValid).toBeTrue();
157
+ expect(validator.isValid()).toBeTrue();
158
+ });
159
+ it('setting a valid ID field name makes an invalid configuration valid', () => {
160
+ const data = [
161
+ { stringField: 'value-1', numberField: 10 },
162
+ { stringField: 'value-2', numberField: 11 }
163
+ ];
164
+ const validator = new TableValidator();
165
+ let isValid = validator.validateDataIds(data, 'missingField');
166
+ expect(isValid).toBeFalse();
167
+ expect(validator.isValid()).toBeFalse();
168
+ isValid = validator.validateDataIds(data, 'stringField');
169
+ expect(isValid).toBeTrue();
170
+ expect(validator.isValid()).toBeTrue();
171
+ });
172
+ it('setting invalid ID field name makes a valid configuration invalid', () => {
173
+ const data = [
174
+ { stringField: 'value-1', numberField: 10 },
175
+ { stringField: 'value-2', numberField: 11 }
176
+ ];
177
+ const validator = new TableValidator();
178
+ let isValid = validator.validateDataIds(data, 'stringField');
179
+ expect(isValid).toBeTrue();
180
+ expect(validator.isValid()).toBeTrue();
181
+ isValid = validator.validateDataIds(data, 'missingField');
182
+ expect(isValid).toBeFalse();
183
+ expect(validator.isValid()).toBeFalse();
184
+ });
185
+ it('ID field name can be an empty string', () => {
186
+ const data = [
187
+ // eslint-disable-next-line @typescript-eslint/naming-convention
188
+ { stringField: 'value-1', numberField: 10, '': 'empty-1' },
189
+ // eslint-disable-next-line @typescript-eslint/naming-convention
190
+ { stringField: 'value-2', numberField: 11, '': 'empty-2' }
191
+ ];
192
+ const validator = new TableValidator();
193
+ const isValid = validator.validateDataIds(data, '');
194
+ expect(isValid).toBeTrue();
195
+ expect(validator.isValid()).toBeTrue();
196
+ const validity = validator.getValidity();
197
+ expect(validity.duplicateRowId).toBeFalse();
198
+ expect(validity.invalidRowId).toBeFalse();
199
+ expect(validity.missingRowId).toBeFalse();
200
+ });
201
+ it('validation occurs when ID field name is an empty string', () => {
202
+ const data = [
203
+ // eslint-disable-next-line @typescript-eslint/naming-convention
204
+ { stringField: 'value-1', numberField: 10, '': 'empty-1' },
205
+ // eslint-disable-next-line @typescript-eslint/naming-convention
206
+ { stringField: 'value-2', numberField: 11, '': 'empty-1' }
207
+ ];
208
+ const validator = new TableValidator();
209
+ const isValid = validator.validateDataIds(data, '');
210
+ expect(isValid).toBeFalse();
211
+ expect(validator.isValid()).toBeFalse();
212
+ const validity = validator.getValidity();
213
+ expect(validity.duplicateRowId).toBeTrue();
214
+ expect(validity.invalidRowId).toBeFalse();
215
+ expect(validity.missingRowId).toBeFalse();
216
+ });
217
+ });
218
+ //# sourceMappingURL=table-validator.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table-validator.spec.js","sourceRoot":"","sources":["../../../../src/table/models/table-validator.spec.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,2 @@
1
1
  import type { Table } from '.';
2
- import type { TableRecord } from './types';
3
- export declare const template: import("@microsoft/fast-element").ViewTemplate<Table<TableRecord>, any>;
2
+ export declare const template: import("@microsoft/fast-element").ViewTemplate<Table<import("./types").TableRecord>, any>;
@@ -16,9 +16,9 @@ export const template = html `
16
16
  </div>
17
17
  </div>
18
18
  <div class="table-viewport" role="rowgroup">
19
- ${repeat(x => x.data, html `
19
+ ${repeat(x => x.tableData, html `
20
20
  <${DesignSystem.tagFor(TableRow)}
21
- :data="${x => x}"
21
+ :data="${x => x.data}"
22
22
  :columns="${(_, c) => c.parent.columns}"
23
23
  >
24
24
  </${DesignSystem.tagFor(TableRow)}>
@@ -1 +1 @@
1
- {"version":3,"file":"template.js","sourceRoot":"","sources":["../../../src/table/template.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAG1D,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,kBAAkB;AAClB,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,CAAO;;;;;sBAKb,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,EAAE,IAAI,CAAQ;2BACpC,YAAY,CAAC,MAAM,CAAC,WAAW,CAAC;8BAC7B,CAAC,CAAC,EAAE,CAAC,CAAC;4BACR,YAAY,CAAC,MAAM,CAAC,WAAW,CAAC;qBACvC,CAAC;;;;kBAIJ,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAa;uBAChC,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC;iCACnB,CAAC,CAAC,EAAE,CAAC,CAAC;oCACH,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAE,CAAC,CAAC,MAAgB,CAAC,OAAO;;wBAEjD,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC;iBACpC,CAAC;;;;CAIjB,CAAC"}
1
+ {"version":3,"file":"template.js","sourceRoot":"","sources":["../../../src/table/template.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAG1D,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,kBAAkB;AAClB,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,CAAO;;;;;sBAKb,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,EAAE,IAAI,CAAQ;2BACpC,YAAY,CAAC,MAAM,CAAC,WAAW,CAAC;8BAC7B,CAAC,CAAC,EAAE,CAAC,CAAC;4BACR,YAAY,CAAC,MAAM,CAAC,WAAW,CAAC;qBACvC,CAAC;;;;kBAIJ,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,EAAE,IAAI,CAAe;uBACvC,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC;iCACnB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI;oCACR,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAE,CAAC,CAAC,MAAgB,CAAC,OAAO;;wBAEjD,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC;iBACpC,CAAC;;;;CAIjB,CAAC"}
@@ -16,3 +16,11 @@ export declare type TableFieldValue = string | number | boolean | Date | null |
16
16
  export interface TableRecord {
17
17
  [key: TableFieldName]: TableFieldValue;
18
18
  }
19
+ export interface TableValidity {
20
+ readonly duplicateRowId: boolean;
21
+ readonly missingRowId: boolean;
22
+ readonly invalidRowId: boolean;
23
+ }
24
+ export interface TableRowState<TData extends TableRecord = TableRecord> {
25
+ data: TData;
26
+ }
@@ -14,19 +14,27 @@ export declare class WaferMap extends FoundationElement {
14
14
  maxCharacters: number;
15
15
  dieLabelsHidden: boolean;
16
16
  dieLabelsSuffix: string;
17
+ colorScaleMode: WaferMapColorScaleMode;
18
+ /**
19
+ * @internal
20
+ */
17
21
  readonly canvas: HTMLCanvasElement;
18
22
  /**
19
23
  * @internal
20
24
  */
21
- canvasSideLength: number | undefined;
22
- colorScaleMode: WaferMapColorScaleMode;
25
+ readonly zoomContainer: HTMLElement;
26
+ /**
27
+ * @internal
28
+ */
29
+ canvasSideLength?: number;
23
30
  highlightedValues: string[];
24
31
  dies: WaferMapDie[];
25
32
  colorScale: WaferMapColorScale;
26
33
  private renderQueued;
27
- private dataManager;
28
- private renderer;
29
- private resizeObserver;
34
+ private dataManager?;
35
+ private renderer?;
36
+ private resizeObserver?;
37
+ private zoomHandler?;
30
38
  connectedCallback(): void;
31
39
  disconnectedCallback(): void;
32
40
  /**
@@ -6,6 +6,7 @@ import { styles } from './styles';
6
6
  import { WaferMapColorScaleMode, WaferMapOrientation, WaferMapQuadrant } from './types';
7
7
  import { DataManager } from './modules/data-manager';
8
8
  import { RenderingModule } from './modules/rendering';
9
+ import { ZoomHandler } from './modules/zoom-handler';
9
10
  /**
10
11
  * A nimble-styled WaferMap
11
12
  */
@@ -37,10 +38,14 @@ export class WaferMap extends FoundationElement {
37
38
  this.canvasSideLength = Math.min(height, width);
38
39
  });
39
40
  this.resizeObserver.observe(this);
41
+ this.canvas.addEventListener('wheel', event => event.preventDefault(), {
42
+ passive: false
43
+ });
40
44
  this.queueRender();
41
45
  }
42
46
  disconnectedCallback() {
43
47
  super.disconnectedCallback();
48
+ this.canvas.removeEventListener('wheel', event => event.preventDefault());
44
49
  this.resizeObserver.unobserve(this);
45
50
  }
46
51
  /**
@@ -55,6 +60,8 @@ export class WaferMap extends FoundationElement {
55
60
  this.renderer?.clearCanvas(this.canvasSideLength, this.canvasSideLength);
56
61
  this.dataManager = new DataManager(this.dies, this.quadrant, { width: this.canvasSideLength, height: this.canvasSideLength }, this.colorScale, this.highlightedValues, this.colorScaleMode, this.dieLabelsHidden, this.dieLabelsSuffix, this.maxCharacters);
57
62
  this.renderer = new RenderingModule(this.dataManager, this.canvas);
63
+ this.zoomHandler = new ZoomHandler(this.canvas, this.zoomContainer, this.dataManager, this.renderer, this.canvasSideLength);
64
+ this.zoomHandler.attachZoomBehavior();
58
65
  this.renderer.drawWafer();
59
66
  }
60
67
  quadrantChanged() {
@@ -90,6 +97,7 @@ export class WaferMap extends FoundationElement {
90
97
  this.canvas.width = this.canvasSideLength;
91
98
  this.canvas.height = this.canvasSideLength;
92
99
  }
100
+ this.zoomHandler?.resetTransform();
93
101
  this.queueRender();
94
102
  }
95
103
  queueRender() {
@@ -129,13 +137,10 @@ __decorate([
129
137
  attr({
130
138
  attribute: 'color-scale-mode'
131
139
  })
132
- ], WaferMap.prototype, "canvas", void 0);
140
+ ], WaferMap.prototype, "colorScaleMode", void 0);
133
141
  __decorate([
134
142
  observable
135
143
  ], WaferMap.prototype, "canvasSideLength", void 0);
136
- __decorate([
137
- observable
138
- ], WaferMap.prototype, "colorScaleMode", void 0);
139
144
  __decorate([
140
145
  observable
141
146
  ], WaferMap.prototype, "highlightedValues", void 0);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/wafer-map/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/wafer-map/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import type { DataManager } from './data-manager';
2
+ import type { RenderingModule } from './rendering';
3
+ /**
4
+ * ZoomHandler deals with user interactions and events like zooming
5
+ */
6
+ export declare class ZoomHandler {
7
+ private readonly canvas;
8
+ private readonly zoomContainer;
9
+ private readonly dataManager;
10
+ private readonly renderingModule;
11
+ private readonly canvasLength;
12
+ private zoomTransform;
13
+ private readonly minScale;
14
+ private readonly minExtentPoint;
15
+ private readonly extentPadding;
16
+ private zoomBehavior;
17
+ constructor(canvas: HTMLCanvasElement, zoomContainer: HTMLElement, dataManager: DataManager, renderingModule: RenderingModule, canvasLength: number);
18
+ attachZoomBehavior(): void;
19
+ resetTransform(): void;
20
+ private createZoomBehavior;
21
+ private getZoomMax;
22
+ private clearCanvas;
23
+ private scaleCanvas;
24
+ }