@apia/table2-controller 4.0.43 → 4.0.44

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/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import * as react from 'react';
2
- import { HTMLAttributes, ReactNode, FC, ThHTMLAttributes, FocusEvent } from 'react';
3
- import { EventEmitter } from '@apia/util';
2
+ import { HTMLAttributes, FC, ReactNode, ThHTMLAttributes, FocusEvent } from 'react';
3
+ import { TSortType, EventEmitter, TLoadStructure } from '@apia/util';
4
4
 
5
5
  type RowsGroupBaseState = ElementBaseState & {
6
6
  rows: Row[];
@@ -36,25 +36,29 @@ type RowProperties = {
36
36
  properties?: Record<string, unknown>;
37
37
  };
38
38
  type TBuildRow = Omit<RowProperties, 'cells'> & {
39
- cells: CellState[];
39
+ cells: (Omit<CellState, 'colName'> & {
40
+ colName?: string;
41
+ })[];
40
42
  };
41
43
  type RowState = Omit<RowProperties, 'isSelected'>;
42
44
  declare class Row extends Element<RowState> {
43
45
  protected properties?: Omit<RowProperties, "id"> | undefined;
44
46
  protected container: null | RowsGroup<RowsGroupBaseState>;
47
+ hiddenCells: Map<string, Cell>;
45
48
  addCell(cell: Cell): this;
46
49
  addCellAfter(anchor: Cell, newElement: Cell): void;
47
50
  addCellBefore(anchor: Cell, newElement: Cell): void;
48
51
  build(data: TBuildRow): void;
49
52
  constructor(id: string, properties?: Omit<RowProperties, "id"> | undefined);
50
- get cells(): Cell<CellState<any>>[];
53
+ get cells(): Cell[];
51
54
  get isSelected(): boolean;
52
55
  getCellByColumnName(colName: string): Cell<CellState<any>> | undefined;
53
56
  getCellByIndex(index: number): Cell<CellState<any>>;
54
57
  getCellIndex(cell: Cell): number;
55
58
  getContainer(): RowsGroup<RowsGroupBaseState> | null;
56
59
  getFollowingRow(): Row;
57
- get index(): number;
60
+ getHiddenCell(colName: string): Cell<CellState<any>> | undefined;
61
+ getIndex(): number;
58
62
  getPreviousRow(): Row;
59
63
  insertAfter(row: Row): void;
60
64
  insertBefore(row: Row): void;
@@ -78,13 +82,82 @@ declare class TableBody extends RowsGroup<TableBodyState> {
78
82
  build(data: TBuildBody): void;
79
83
  }
80
84
 
85
+ type ColumnState<T extends ColumnState<any> = ColumnState<any>> = CellState<T> & {
86
+ asAdditional?: boolean;
87
+ sortable?: boolean;
88
+ sortState?: TSortType;
89
+ };
90
+ declare class Column extends Cell<ColumnState> {
91
+ asAdditional(): boolean;
92
+ isHidden(): boolean;
93
+ /**
94
+ * A visible column is that which is not additional nor hidden.
95
+ */
96
+ isVisible(): boolean;
97
+ sort(order?: ColumnState['sortState']): void;
98
+ }
99
+
100
+ declare class Filters extends Row {
101
+ filters: Map<string, Filter<any>>;
102
+ private buildFilterFromDefinition;
103
+ buildFilters(filters: Omit<FilterState, 'colName'>[]): boolean;
104
+ getAdditionalFilters(): Filter<any>[];
105
+ getCells(): Filter<string>[];
106
+ getContainer(): TableHead;
107
+ getFilter(name: string): Filter<any> | undefined;
108
+ getFilters(): Filter<any>[];
109
+ getFiltersInTable(): Filter<any>[];
110
+ }
111
+
112
+ type FilterRenderer = FC<{
113
+ cell: Filter<any>;
114
+ }>;
115
+ type FilterState<ValueType = string, T extends FilterState<any> = FilterState<ValueType, any>> = CellState<T> & {
116
+ asAdditional?: boolean;
117
+ name: string;
118
+ columnName?: string;
119
+ isRequired?: boolean;
120
+ Renderer?: FilterRenderer;
121
+ runAutomatically?: boolean;
122
+ title: string;
123
+ tooltip: string;
124
+ value: ValueType;
125
+ type: 'DATE' | 'INPUT' | 'COMBO' | 'DATERANGE' | 'SIZE' | 'SIZERANGE' | 'DATEHOUR' | 'DATEHOURRANGE';
126
+ };
127
+ type FilterEvents = Pick<TableEvents, 'filterBlur' | 'filterChange' | 'filterPressEnter'>;
128
+ declare class Filter<ValueType = string> extends Cell<FilterState<ValueType>> {
129
+ asAdditional(): boolean;
130
+ constructor(state: FilterState<ValueType>);
131
+ clear(): void;
132
+ getCorrespondingColumn(): Column | undefined;
133
+ fire(ev: keyof FilterEvents): void;
134
+ getRow(): Filters;
135
+ getValue(): ValueType;
136
+ hasValue(): boolean;
137
+ setValue(val: ValueType): void;
138
+ validate(): boolean;
139
+ }
140
+
141
+ declare class Columns extends Row {
142
+ columns: Map<string, Column>;
143
+ buildColumnsRow(columns: ColumnState[]): void;
144
+ getColumn(name: string): Column;
145
+ getColumns(): Column[];
146
+ getAdditionalColumns(): Column[];
147
+ getShownColumns(): Column[];
148
+ }
149
+
81
150
  type TableHeadState = ElementBaseState & RowsGroupBaseState & {};
82
151
  type TBuildHead = {
83
- columns: CellState[];
84
- filters: any[];
152
+ columns: ColumnState[];
153
+ filters: Omit<FilterState, 'colName'>[];
85
154
  };
86
155
  declare class TableHead extends RowsGroup<TableHeadState> {
87
156
  constructor(table: TableController);
157
+ columnsRow: Columns | null;
158
+ filtersRow: Filters | null;
159
+ getHeaderRow(): Columns | undefined;
160
+ getFiltersRow(): Filters | undefined;
88
161
  build(data: TBuildHead): void;
89
162
  }
90
163
 
@@ -113,27 +186,30 @@ type TableState = {
113
186
  allowSelection: boolean;
114
187
  editionMode: boolean;
115
188
  focusedCell: Cell | null;
116
- hiddenColumns: Set<string>;
117
189
  isSelectionMultiple: boolean;
190
+ onRowExpand?: (row: Row) => Promise<false | ReactNode>;
118
191
  plugins: TablePlugin[];
119
192
  selection: Set<Row>;
120
193
  };
121
194
  type TBuildTable = TBuildHead & TBuildBody;
122
- declare class TableController extends EventEmitter<{
195
+ type TableEvents = {
123
196
  cellFocus: {
124
197
  cell: Cell;
125
198
  doFocus: boolean;
126
199
  };
127
- columnClick: Cell;
200
+ columnSort: Column;
128
201
  editionMode: boolean;
202
+ filterChange: Filter<any>;
203
+ filterPressEnter: Filter<any>;
204
+ filterBlur: Filter<any>;
129
205
  keyEnter: null;
130
206
  rowDelete: Row;
131
207
  scrollIntoRow: Row;
132
208
  selectionChange: Row[];
133
- }> {
209
+ };
210
+ declare class TableController extends EventEmitter<TableEvents> {
134
211
  protected state: TableState;
135
212
  constructor(props?: Partial<Omit<TableState, 'selection'>>);
136
- setHiddenColumns(cols: Set<string>): void;
137
213
  body: TableBody;
138
214
  head: TableHead;
139
215
  /**
@@ -141,7 +217,14 @@ declare class TableController extends EventEmitter<{
141
217
  * listeners and recreates the structure based on the passed data.
142
218
  */
143
219
  build(data: TBuildTable): void;
220
+ fromGenericTable(table: TLoadStructure): void;
221
+ getColumn(name: string): Column | undefined;
222
+ getColumns(): Column[];
223
+ getFilter(name: string): Filter<any> | undefined;
224
+ getFilters(): Filter<any>[];
144
225
  getRowById(id: string | number): Row | undefined;
226
+ hasAdditionalContent(): true | ((row: Row) => Promise<false | ReactNode>) | undefined;
227
+ onRowExpand(row: Row): string | Promise<ReactNode> | undefined;
145
228
  /**
146
229
  * EDITION MODE
147
230
  */
@@ -156,6 +239,8 @@ declare class TableController extends EventEmitter<{
156
239
  */
157
240
  getSelectedRows(): Row[];
158
241
  isSelected(row: Row): boolean;
242
+ toggleColumnVisibility(colName: string, isVisible?: boolean): void;
243
+ toggleFiltersRowVisibility(): void;
159
244
  /**
160
245
  * Toggles the selection state of a given row.
161
246
  *
@@ -219,8 +304,7 @@ declare class TableController extends EventEmitter<{
219
304
  */
220
305
  setState(cb: (s: TableState) => TableState): this;
221
306
  setState<K extends keyof TableState>(prop: K, value: TableState[K]): this;
222
- toggleColumnVisibility(columnName: string, isVisible?: boolean): void;
223
- isColumnVisible(columnName: string): boolean;
307
+ sortColumn(col: Column, sortState?: TSortType): void;
224
308
  /**
225
309
  * PLUGINS
226
310
  */
@@ -264,6 +348,7 @@ type CellState<T extends CellState<any> = CellState<any>> = {
264
348
  };
265
349
  declare class Cell<State extends CellState<any> = CellState<any>> extends Element<State> {
266
350
  protected parentRow: Row | null;
351
+ getColumnName(): State["colName"];
267
352
  getIndex(): number;
268
353
  getRow(): Row | null;
269
354
  setRow(row: Row | null): this;
@@ -276,6 +361,18 @@ declare class Cell<State extends CellState<any> = CellState<any>> extends Elemen
276
361
  updateState(state: Partial<State>): void;
277
362
  }
278
363
 
364
+ declare class AdditionalCell extends Cell<CellState & {
365
+ expanded: boolean;
366
+ }> {
367
+ constructor();
368
+ onToggle(): Promise<void>;
369
+ }
370
+
371
+ declare class AdditionalRow extends Row {
372
+ constructor(id: string);
373
+ get cells(): Cell<CellState<any>>[];
374
+ }
375
+
279
376
  declare class FocusControllerPlugin implements TablePlugin {
280
377
  rootElement: HTMLElement | null;
281
378
  scrollIntoView(rowId: string): void;
@@ -330,5 +427,8 @@ declare class WaiAriaPlugin implements TablePlugin {
330
427
  };
331
428
  }
332
429
 
333
- export { Cell, type CellState, Element, type ElementBaseState, FocusControllerPlugin, Row, type RowProperties, type RowState, RowsGroup, type RowsGroupBaseState, type TBuildBody, type TBuildHead, type TBuildRow, type TBuildTable, TableBody, type TableBodyState, TableController, TableHead, type TableHeadState, type TablePlugin, type TableState, WaiAriaPlugin, defaultPlugins };
430
+ declare class DateFilter extends Filter<number | null> {
431
+ }
432
+
433
+ export { AdditionalCell, AdditionalRow, Cell, type CellState, Column, type ColumnState, Columns, DateFilter, Element, type ElementBaseState, Filter, type FilterEvents, type FilterRenderer, type FilterState, Filters, FocusControllerPlugin, Row, type RowProperties, type RowState, RowsGroup, type RowsGroupBaseState, type TBuildBody, type TBuildHead, type TBuildRow, type TBuildTable, TableBody, type TableBodyState, TableController, type TableEvents, TableHead, type TableHeadState, type TablePlugin, type TableState, WaiAriaPlugin, defaultPlugins };
334
434
  //# sourceMappingURL=index.d.ts.map
package/dist/index.js CHANGED
@@ -1,18 +1,18 @@
1
1
  import { makeObservable, action, observable, computed } from 'mobx';
2
- import { EventEmitter, useMount, scrollParentIntoElement, disableChildrenFocus, getFocusSelector } from '@apia/util';
2
+ import { arrayOrArray, EventEmitter, useMount, scrollParentIntoElement, disableChildrenFocus, getFocusSelector } from '@apia/util';
3
3
  import { useRef } from 'react';
4
4
 
5
- var __defProp$4 = Object.defineProperty;
6
- var __defNormalProp$4 = (obj, key, value) => key in obj ? __defProp$4(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
7
- var __publicField$4 = (obj, key, value) => {
8
- __defNormalProp$4(obj, key + "" , value);
5
+ var __defProp$7 = Object.defineProperty;
6
+ var __defNormalProp$7 = (obj, key, value) => key in obj ? __defProp$7(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
7
+ var __publicField$7 = (obj, key, value) => {
8
+ __defNormalProp$7(obj, key + "" , value);
9
9
  return value;
10
10
  };
11
11
  const voidTable = {};
12
12
  class Element {
13
13
  constructor(state) {
14
14
  this.state = state;
15
- __publicField$4(this, "table", voidTable);
15
+ __publicField$7(this, "table", voidTable);
16
16
  makeObservable(this, {
17
17
  state: observable,
18
18
  setState: action
@@ -38,16 +38,19 @@ class Element {
38
38
  }
39
39
  }
40
40
 
41
- var __defProp$3 = Object.defineProperty;
42
- var __defNormalProp$3 = (obj, key, value) => key in obj ? __defProp$3(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
43
- var __publicField$3 = (obj, key, value) => {
44
- __defNormalProp$3(obj, key + "" , value);
41
+ var __defProp$6 = Object.defineProperty;
42
+ var __defNormalProp$6 = (obj, key, value) => key in obj ? __defProp$6(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
43
+ var __publicField$6 = (obj, key, value) => {
44
+ __defNormalProp$6(obj, key + "" , value);
45
45
  return value;
46
46
  };
47
47
  class Cell extends Element {
48
48
  constructor() {
49
49
  super(...arguments);
50
- __publicField$3(this, "parentRow", null);
50
+ __publicField$6(this, "parentRow", null);
51
+ }
52
+ getColumnName() {
53
+ return this.getState("colName");
51
54
  }
52
55
  getIndex() {
53
56
  return this.getRow().getCellIndex(this);
@@ -72,10 +75,10 @@ class Cell extends Element {
72
75
  }
73
76
  }
74
77
 
75
- var __defProp$2 = Object.defineProperty;
76
- var __defNormalProp$2 = (obj, key, value) => key in obj ? __defProp$2(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
77
- var __publicField$2 = (obj, key, value) => {
78
- __defNormalProp$2(obj, key + "" , value);
78
+ var __defProp$5 = Object.defineProperty;
79
+ var __defNormalProp$5 = (obj, key, value) => key in obj ? __defProp$5(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
80
+ var __publicField$5 = (obj, key, value) => {
81
+ __defNormalProp$5(obj, typeof key !== "symbol" ? key + "" : key, value);
79
82
  return value;
80
83
  };
81
84
  class Row extends Element {
@@ -83,10 +86,10 @@ class Row extends Element {
83
86
  const { cells, isSelected, ...state } = properties || {};
84
87
  super({ id, ...state, cells: cells || [] });
85
88
  this.properties = properties;
86
- __publicField$2(this, "container", {});
89
+ __publicField$5(this, "container", {});
90
+ __publicField$5(this, "hiddenCells", /* @__PURE__ */ new Map());
87
91
  makeObservable(this, {
88
- isSelected: computed,
89
- index: computed
92
+ isSelected: computed
90
93
  });
91
94
  }
92
95
  addCell(cell) {
@@ -109,13 +112,41 @@ class Row extends Element {
109
112
  }
110
113
  }
111
114
  build(data) {
112
- for (const cell of data.cells) {
113
- const cellInstance = new Cell(cell);
114
- this.addCell(cellInstance);
115
+ this.hiddenCells.clear();
116
+ for (let i = 0; i < data.cells.length; i++) {
117
+ const cell = data.cells[i];
118
+ const col = cell.colName ? this.table.head.getHeaderRow().getColumn(cell.colName) : this.table.head.getHeaderRow().getColumns()[i];
119
+ const cellInstance = new Cell({
120
+ ...cell,
121
+ colName: col?.getState("colName")
122
+ });
123
+ if (col?.isVisible()) {
124
+ const currentCell = this.state.cells[i - this.hiddenCells.size];
125
+ if (!currentCell) {
126
+ this.addCell(cellInstance);
127
+ } else {
128
+ currentCell.updateState({
129
+ ...cell,
130
+ colName: col?.getState("colName")
131
+ });
132
+ }
133
+ } else {
134
+ this.hiddenCells.set(col?.getColumnName(), cellInstance);
135
+ }
115
136
  }
137
+ this.cells.splice(data.cells.length - this.hiddenCells.size);
116
138
  }
117
139
  get cells() {
118
- return this.state.cells;
140
+ const hasAdditionalColumn = !!this.table.getState("onRowExpand") || (this.table.head.getFiltersRow()?.getFiltersInTable()?.length || 0) > 0;
141
+ let additionalCell = null;
142
+ if (hasAdditionalColumn) {
143
+ additionalCell = new AdditionalCell();
144
+ additionalCell.setRow(this);
145
+ additionalCell.setTable(this.table);
146
+ }
147
+ return [additionalCell, ...this.state.cells].filter(
148
+ (f) => Boolean(f)
149
+ );
119
150
  }
120
151
  get isSelected() {
121
152
  return this.table.isSelected(this);
@@ -139,7 +170,10 @@ class Row extends Element {
139
170
  );
140
171
  return containerRows[index + 1] || null;
141
172
  }
142
- get index() {
173
+ getHiddenCell(colName) {
174
+ return this.hiddenCells.get(colName);
175
+ }
176
+ getIndex() {
143
177
  return this.getContainer().getRowIndex(this);
144
178
  }
145
179
  getPreviousRow() {
@@ -198,6 +232,66 @@ class Row extends Element {
198
232
  }
199
233
  }
200
234
 
235
+ class AdditionalRow extends Row {
236
+ constructor(id) {
237
+ super(id);
238
+ this.setState("isSelectable", false);
239
+ }
240
+ get cells() {
241
+ return this.state.cells;
242
+ }
243
+ }
244
+
245
+ class AdditionalRowContent extends Cell {
246
+ constructor(content) {
247
+ super({
248
+ expanded: false,
249
+ colName: "__additional",
250
+ content
251
+ });
252
+ }
253
+ getState(prop) {
254
+ if (prop === "domProperties") {
255
+ return {
256
+ colSpan: this.table.head.getHeaderRow()?.getShownColumns().length || 0
257
+ };
258
+ }
259
+ return super.getState(prop);
260
+ }
261
+ }
262
+
263
+ class AdditionalCell extends Cell {
264
+ constructor() {
265
+ super({
266
+ expanded: false,
267
+ colName: "__additional",
268
+ domProperties: {
269
+ className: "additionalColumn",
270
+ style: {
271
+ width: "50px"
272
+ }
273
+ }
274
+ });
275
+ }
276
+ async onToggle() {
277
+ const currentIndex = this.getRow().getIndex();
278
+ if (!(this.getTable().body.getRowByIndex(currentIndex + 1) instanceof AdditionalRow)) {
279
+ const res = await this.table.onRowExpand(this.getRow());
280
+ if (res !== false) {
281
+ const newRow = new AdditionalRow(
282
+ `${this.getRow()?.getState("id")}__additional`
283
+ );
284
+ this.getTable().body.insertAfter(this.getRow(), newRow);
285
+ newRow.addCell(new AdditionalRowContent(res));
286
+ this.state.expanded = true;
287
+ }
288
+ } else {
289
+ this.getTable().body.getRowByIndex(currentIndex + 1).remove();
290
+ this.state.expanded = false;
291
+ }
292
+ }
293
+ }
294
+
201
295
  class RowsGroup extends Element {
202
296
  constructor(table, state) {
203
297
  super({ ...state, rows: [] });
@@ -284,48 +378,271 @@ class TableBody extends RowsGroup {
284
378
  super(table, { rows: [] });
285
379
  }
286
380
  build(data) {
381
+ let i = 0;
287
382
  for (const row of data.rows) {
288
- const bodyRow = new Row(row.id);
289
- this.addRow(bodyRow);
383
+ let currentRow = this.rows[i++];
384
+ if (currentRow instanceof AdditionalRow) {
385
+ currentRow.remove();
386
+ currentRow = void 0;
387
+ }
388
+ const bodyRow = currentRow ?? new Row(row.id);
389
+ if (!currentRow) {
390
+ this.addRow(bodyRow);
391
+ }
290
392
  bodyRow.build(row);
291
393
  }
394
+ this.rows.splice(data.rows.length);
395
+ }
396
+ }
397
+
398
+ class Column extends Cell {
399
+ asAdditional() {
400
+ return !!this.state.asAdditional;
401
+ }
402
+ isHidden() {
403
+ return !!this.state.isHidden;
404
+ }
405
+ /**
406
+ * A visible column is that which is not additional nor hidden.
407
+ */
408
+ isVisible() {
409
+ return !this.asAdditional() && !this.isHidden();
410
+ }
411
+ sort(order) {
412
+ order = order ?? (this.getState("sortState") === "ASC" ? "DESC" : "ASC");
413
+ this.setState("sortState", order);
292
414
  }
293
415
  }
294
416
 
417
+ var __defProp$4 = Object.defineProperty;
418
+ var __defNormalProp$4 = (obj, key, value) => key in obj ? __defProp$4(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
419
+ var __publicField$4 = (obj, key, value) => {
420
+ __defNormalProp$4(obj, key + "" , value);
421
+ return value;
422
+ };
423
+ class Columns extends Row {
424
+ constructor() {
425
+ super(...arguments);
426
+ __publicField$4(this, "columns", /* @__PURE__ */ new Map());
427
+ }
428
+ buildColumnsRow(columns) {
429
+ let i = 0;
430
+ for (const column of columns) {
431
+ if (!this.columns.has(column.colName)) {
432
+ this.columns.set(column.colName, new Column(column));
433
+ } else {
434
+ this.columns.get(column.colName)?.updateState(column);
435
+ }
436
+ const currentColumn = this.columns.get(column.colName);
437
+ if (currentColumn.isVisible()) {
438
+ this.state.cells[i++] = currentColumn;
439
+ this.attachCell(currentColumn);
440
+ }
441
+ }
442
+ }
443
+ getColumn(name) {
444
+ return this.getCellByColumnName(name);
445
+ }
446
+ getColumns() {
447
+ return Array.from(this.columns.values());
448
+ }
449
+ getAdditionalColumns() {
450
+ return this.getColumns().filter((c) => c.asAdditional());
451
+ }
452
+ getShownColumns() {
453
+ return this.cells ?? [];
454
+ }
455
+ }
456
+
457
+ class Filter extends Cell {
458
+ asAdditional() {
459
+ return !!this.state.asAdditional || !this.getCorrespondingColumn();
460
+ }
461
+ constructor(state) {
462
+ super(state);
463
+ }
464
+ clear() {
465
+ this.setValue("");
466
+ }
467
+ getCorrespondingColumn() {
468
+ return this.getRow().getContainer().getHeaderRow()?.getShownColumns().find((c) => c.getState("colName") === this.getState("colName"));
469
+ }
470
+ fire(ev) {
471
+ this.table.emit(ev, this);
472
+ }
473
+ getRow() {
474
+ return super.getRow();
475
+ }
476
+ getValue() {
477
+ return this.state.value;
478
+ }
479
+ hasValue() {
480
+ return !!this.getValue();
481
+ }
482
+ setValue(val) {
483
+ this.state.value = val;
484
+ this.table.emit("filterChange", this);
485
+ }
486
+ validate() {
487
+ return this.state.isRequired ? this.hasValue() : true;
488
+ }
489
+ }
490
+
491
+ class NullFilter extends Filter {
492
+ constructor(colName) {
493
+ super({ colName });
494
+ }
495
+ clear() {
496
+ }
497
+ fire(_) {
498
+ }
499
+ getValue() {
500
+ return void 0;
501
+ }
502
+ hasValue() {
503
+ return false;
504
+ }
505
+ setValue() {
506
+ }
507
+ validate() {
508
+ return true;
509
+ }
510
+ }
511
+
512
+ class DateFilter extends Filter {
513
+ }
514
+
515
+ var __defProp$3 = Object.defineProperty;
516
+ var __defNormalProp$3 = (obj, key, value) => key in obj ? __defProp$3(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
517
+ var __publicField$3 = (obj, key, value) => {
518
+ __defNormalProp$3(obj, key + "" , value);
519
+ return value;
520
+ };
521
+ class Filters extends Row {
522
+ constructor() {
523
+ super(...arguments);
524
+ __publicField$3(this, "filters", /* @__PURE__ */ new Map());
525
+ }
526
+ buildFilterFromDefinition(def) {
527
+ switch (def.type) {
528
+ case "DATE":
529
+ return new DateFilter(def);
530
+ default:
531
+ return new Filter(def);
532
+ }
533
+ }
534
+ buildFilters(filters) {
535
+ let hasFiltersInRow = false;
536
+ const columns = arrayOrArray(
537
+ this.getContainer().getHeaderRow()?.getShownColumns()
538
+ );
539
+ for (const stored of this.filters.values()) {
540
+ if (!filters.find((c) => c.name === stored.getState("name"))) {
541
+ this.filters.delete(stored.getState("name"));
542
+ }
543
+ }
544
+ for (let i = 0; i < columns.length; i++) {
545
+ const column = columns[i];
546
+ const filter = filters.find(
547
+ (c) => c.columnName === column.getState("colName") && !c.asAdditional
548
+ );
549
+ if (filter) {
550
+ const currentFilterCell = this.getCellByIndex(i);
551
+ const filterCell = currentFilterCell ?? this.buildFilterFromDefinition({
552
+ ...filter,
553
+ colName: filter.columnName
554
+ });
555
+ this.filters.set(filter.name, filterCell);
556
+ if (!currentFilterCell) {
557
+ this.addCell(filterCell);
558
+ } else {
559
+ const { value, ...filterState } = filter;
560
+ currentFilterCell.updateState(filterState);
561
+ }
562
+ hasFiltersInRow = true;
563
+ filter.added = true;
564
+ } else {
565
+ if (!this.getCellByIndex(i)) {
566
+ this.addCell(new NullFilter(column.getColumnName()));
567
+ }
568
+ }
569
+ }
570
+ for (const filter of filters) {
571
+ if (!filter.added) {
572
+ const filterCell = this.filters.get(filter.name) ?? this.buildFilterFromDefinition({
573
+ ...filter,
574
+ colName: filter.columnName
575
+ });
576
+ filterCell.setTable(this.table);
577
+ this.filters.set(filter.name, filterCell);
578
+ }
579
+ }
580
+ return hasFiltersInRow;
581
+ }
582
+ getAdditionalFilters() {
583
+ return this.getFilters().filter(
584
+ (c) => c.getState("asAdditional") || this.getContainer().getHeaderRow()?.columns.get(c.getState("colName"))?.asAdditional()
585
+ );
586
+ }
587
+ getCells() {
588
+ return this.cells.map((c) => c);
589
+ }
590
+ getContainer() {
591
+ return this.container;
592
+ }
593
+ getFilter(name) {
594
+ return this.filters.get(name);
595
+ }
596
+ getFilters() {
597
+ return Array.from(this.filters.values());
598
+ }
599
+ getFiltersInTable() {
600
+ return this.getFilters().filter((f) => {
601
+ return !(f.getState("asAdditional") || this.getContainer().getHeaderRow()?.columns.get(f.getState("colName"))?.isVisible() === false);
602
+ });
603
+ }
604
+ }
605
+
606
+ var __defProp$2 = Object.defineProperty;
607
+ var __defNormalProp$2 = (obj, key, value) => key in obj ? __defProp$2(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
608
+ var __publicField$2 = (obj, key, value) => {
609
+ __defNormalProp$2(obj, typeof key !== "symbol" ? key + "" : key, value);
610
+ return value;
611
+ };
295
612
  class TableHead extends RowsGroup {
296
613
  constructor(table) {
297
614
  super(table, { rows: [] });
615
+ __publicField$2(this, "columnsRow", null);
616
+ __publicField$2(this, "filtersRow", null);
617
+ }
618
+ getHeaderRow() {
619
+ return this.rows[0] instanceof Columns ? this.rows[0] : void 0;
620
+ }
621
+ getFiltersRow() {
622
+ return this.rows[1] instanceof Filters ? this.rows[1] : void 0;
298
623
  }
299
624
  build(data) {
300
- this.state.rows = [];
301
- const headerRow = new Row("header");
302
- this.addRow(headerRow);
303
- for (const column of data.columns) {
304
- const headerCell = new Cell(column);
305
- headerRow.addCell(headerCell);
625
+ if (data.columns.length) {
626
+ const currentHeaderRow = this.rows[0];
627
+ if (currentHeaderRow && !(currentHeaderRow instanceof Columns)) {
628
+ currentHeaderRow.remove();
629
+ }
630
+ this.columnsRow = currentHeaderRow ?? new Columns("header");
631
+ this.columnsRow.setTable(this.table);
632
+ this.columnsRow.setContainer(this);
633
+ if (!currentHeaderRow) {
634
+ this.addRow(this.columnsRow);
635
+ }
636
+ this.columnsRow.buildColumnsRow(data.columns);
306
637
  }
307
638
  if (data.filters.length) {
308
- const filtersRow = new Row("filters");
309
- filtersRow.setState((s) => ({
310
- ...s,
311
- domProperties: { ...s.domProperties, className: "filtersRow" }
312
- }));
313
- let hasFilter = false;
314
- for (const column of data.columns) {
315
- const filter = data.filters.find(
316
- (currentFilter) => currentFilter.getState("column") === column.colName
317
- );
318
- const headerCell = new Cell({
319
- colName: column.colName,
320
- Renderer: filter ? filter.Render : void 0
321
- });
322
- filtersRow.addCell(headerCell);
323
- if (filter) {
324
- hasFilter = true;
325
- }
326
- }
327
- if (hasFilter) {
328
- this.addRow(filtersRow);
639
+ const currentFiltersRow = this.getFiltersRow();
640
+ this.filtersRow = currentFiltersRow ?? new Filters("filters");
641
+ this.filtersRow.setTable(this.table);
642
+ this.filtersRow.setContainer(this);
643
+ const hasFilter = this.filtersRow.buildFilters(data.filters);
644
+ if (hasFilter && !currentFiltersRow) {
645
+ this.addRow(this.filtersRow);
329
646
  }
330
647
  }
331
648
  }
@@ -351,7 +668,6 @@ class TableController extends EventEmitter {
351
668
  allowSelection: true,
352
669
  editionMode: false,
353
670
  focusedCell: null,
354
- hiddenColumns: /* @__PURE__ */ new Set(),
355
671
  plugins: [],
356
672
  isSelectionMultiple: true,
357
673
  selection: /* @__PURE__ */ new Set()
@@ -372,18 +688,6 @@ class TableController extends EventEmitter {
372
688
  toggleEditionMode: action
373
689
  });
374
690
  }
375
- setHiddenColumns(cols) {
376
- this.state.hiddenColumns.forEach((c) => {
377
- if (!cols.has(c)) {
378
- this.state.hiddenColumns.delete(c);
379
- }
380
- });
381
- cols.forEach((c) => {
382
- if (!this.state.hiddenColumns.has(c)) {
383
- this.state.hiddenColumns.add(c);
384
- }
385
- });
386
- }
387
691
  /**
388
692
  * Clears all data in the table, except for the events
389
693
  * listeners and recreates the structure based on the passed data.
@@ -393,9 +697,80 @@ class TableController extends EventEmitter {
393
697
  this.body.build(data);
394
698
  this.restoreFocus();
395
699
  }
700
+ fromGenericTable(table) {
701
+ this.setState("allowEdition", table.behavior.allowEdition);
702
+ this.setState("allowSelection", table.behavior.allowSelection);
703
+ this.setState("isSelectionMultiple", table.behavior.isMultipleSelection);
704
+ const columns = arrayOrArray(table.columns);
705
+ this.build({
706
+ columns: columns.map((c) => {
707
+ return {
708
+ colName: c.name,
709
+ asAdditional: c.showAsAdditional,
710
+ sortable: c.isSortable,
711
+ isHidden: c.isHidden,
712
+ properties: c,
713
+ content: c.title,
714
+ className: c.className,
715
+ sortState: c.sortType
716
+ };
717
+ }),
718
+ filters: arrayOrArray(table.filters).map((f) => {
719
+ return {
720
+ name: f.name,
721
+ title: f.title,
722
+ tooltip: "no tooltip",
723
+ type: f.type,
724
+ isRequired: f.isRequired,
725
+ properties: f,
726
+ runAutomatically: f.runAutomatically,
727
+ columnName: f.columnName,
728
+ value: f.initialValue,
729
+ asAdditional: f.asAdditional
730
+ };
731
+ }),
732
+ rows: arrayOrArray(table.rows).map((row) => {
733
+ const returnValue = {
734
+ id: row.id,
735
+ cells: arrayOrArray(row.cells).map((cell) => {
736
+ const returnValue2 = {
737
+ content: cell.text
738
+ };
739
+ return returnValue2;
740
+ }),
741
+ isExpandible: false,
742
+ isSelectable: !row.isDisabled,
743
+ isSelected: row.isSelected,
744
+ domProperties: {},
745
+ properties: row
746
+ };
747
+ return returnValue;
748
+ })
749
+ });
750
+ }
751
+ getColumn(name) {
752
+ return this.head.getHeaderRow()?.getColumn(name);
753
+ }
754
+ getColumns() {
755
+ return this.head.getHeaderRow()?.getColumns() || [];
756
+ }
757
+ getFilter(name) {
758
+ return this.head.getFiltersRow()?.getFilter(name);
759
+ }
760
+ getFilters() {
761
+ return this.head.getFiltersRow()?.getFilters() || [];
762
+ }
396
763
  getRowById(id) {
397
764
  return this.head.getRowById(id) || this.body.getRowById(id);
398
765
  }
766
+ hasAdditionalContent() {
767
+ return !!this.head.getHeaderRow()?.getColumns().find((c) => c.asAdditional()) || this.getState("onRowExpand");
768
+ }
769
+ onRowExpand(row) {
770
+ return this.getState("onRowExpand")?.(row) || this.head.getHeaderRow()?.getAdditionalColumns().map(
771
+ (column) => `${column.getState("content")}: ${row.getHiddenCell(column.getColumnName())?.getState("content")}`
772
+ ).join(", ");
773
+ }
399
774
  /**
400
775
  * EDITION MODE
401
776
  */
@@ -423,6 +798,17 @@ class TableController extends EventEmitter {
423
798
  isSelected(row) {
424
799
  return this.state.selection.has(row);
425
800
  }
801
+ toggleColumnVisibility(colName, isVisible) {
802
+ isVisible = isVisible ?? this.head.getHeaderRow()?.getColumn(colName).getState("isHidden");
803
+ if (this.head.getHeaderRow()) {
804
+ this.head.getHeaderRow()?.getColumn(colName).setState("isHidden", isVisible);
805
+ } else {
806
+ this.head.rows[0]?.cells?.find((c) => c.getState("colName") === colName)?.setState("isHidden", !isVisible);
807
+ }
808
+ }
809
+ toggleFiltersRowVisibility() {
810
+ this.head.getFiltersRow()?.setState("isHidden", !this.head.getFiltersRow()?.getState("isHidden"));
811
+ }
426
812
  /**
427
813
  * Toggles the selection state of a given row.
428
814
  *
@@ -514,15 +900,14 @@ class TableController extends EventEmitter {
514
900
  }
515
901
  return this;
516
902
  }
517
- toggleColumnVisibility(columnName, isVisible) {
518
- if (isVisible !== false && this.state.hiddenColumns.has(columnName)) {
519
- this.state.hiddenColumns.delete(columnName);
520
- } else {
521
- this.state.hiddenColumns.add(columnName);
522
- }
523
- }
524
- isColumnVisible(columnName) {
525
- return !this.state.hiddenColumns.has(columnName);
903
+ sortColumn(col, sortState) {
904
+ this.getColumns().forEach((c) => {
905
+ if (c.getColumnName() !== col.getColumnName()) {
906
+ c.sort("NONE");
907
+ }
908
+ });
909
+ col.sort(sortState);
910
+ this.emit("columnSort", col);
526
911
  }
527
912
  /**
528
913
  * PLUGINS
@@ -912,5 +1297,5 @@ class WaiAriaPlugin {
912
1297
  }
913
1298
  }
914
1299
 
915
- export { Cell, Element, FocusControllerPlugin, Row, RowsGroup, TableBody, TableController, TableHead, WaiAriaPlugin, defaultPlugins };
1300
+ export { AdditionalCell, AdditionalRow, Cell, Column, Columns, DateFilter, Element, Filter, Filters, FocusControllerPlugin, Row, RowsGroup, TableBody, TableController, TableHead, WaiAriaPlugin, defaultPlugins };
916
1301
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/data/primitive/Element.ts","../src/data/Cell.ts","../src/data/Row.ts","../src/data/primitive/RowsGroup.ts","../src/data/TableBody.ts","../src/data/TableHead.ts","../src/data/plugins/TablePlugin.tsx","../src/data/TableController.ts","../src/data/plugins/FocusControllerPlugin/useFocusByClick.ts","../src/data/plugins/FocusControllerPlugin/useFocusByKey.ts","../src/data/plugins/FocusControllerPlugin/index.tsx","../src/data/plugins/WaiAriaPlugin.ts"],"sourcesContent":["import { action, makeObservable, observable } from 'mobx';\r\nimport type { TableController } from '../TableController';\r\n\r\nconst voidTable = {} as TableController;\r\n\r\nexport type ElementBaseState = {\r\n properties?: Record<string, unknown>;\r\n};\r\n\r\nexport abstract class Element<T extends ElementBaseState> {\r\n protected table: TableController = voidTable;\r\n\r\n constructor(protected state: T) {\r\n makeObservable<Element<T>, 'state'>(this, {\r\n state: observable,\r\n setState: action,\r\n });\r\n }\r\n\r\n public getTable() {\r\n return this.table;\r\n }\r\n\r\n public setTable(table: null | TableController) {\r\n this.table = table || voidTable;\r\n return this;\r\n }\r\n\r\n public getState<K extends keyof T>(prop: K) {\r\n return this.state[prop];\r\n }\r\n\r\n public setState(cb: (s: T) => T): this;\r\n public setState<K extends keyof T>(prop: K, value: T[K]): this;\r\n public setState<K extends keyof T>(prop: K | ((s: T) => T), value?: T[K]) {\r\n if (typeof prop === 'function') {\r\n this.state = prop(this.state);\r\n } else {\r\n this.state[prop] = value!;\r\n }\r\n return this;\r\n }\r\n}\r\n","import type { ThHTMLAttributes, ReactNode, FC } from 'react';\r\nimport { Element } from './primitive/Element';\r\nimport type { Row } from './Row';\r\n\r\nexport type CellState<T extends CellState<any> = CellState<any>> = {\r\n colName: string;\r\n\r\n content?: ReactNode;\r\n className?: string;\r\n isFocused?: boolean;\r\n isHidden?: boolean;\r\n tag?: 'td' | 'th;';\r\n\r\n Renderer?: FC<{ cell: Cell<T> }>;\r\n domProperties?: ThHTMLAttributes<HTMLTableCellElement>;\r\n properties?: Record<string, unknown>;\r\n};\r\n\r\nexport class Cell<\r\n State extends CellState<any> = CellState<any>,\r\n> extends Element<State> {\r\n protected parentRow: Row | null = null;\r\n\r\n getIndex() {\r\n return this.getRow()!.getCellIndex(this);\r\n }\r\n\r\n getRow() {\r\n return this.parentRow;\r\n }\r\n\r\n setRow(row: Row | null) {\r\n this.parentRow = row;\r\n return this;\r\n }\r\n\r\n /**\r\n *\r\n * @param doFocus - If true, the cell will be focused after being set as the focused cell.\r\n * If false, the cell will contain the tabIndex = 0 but will not be focused.\r\n */\r\n focus(doFocus: boolean = true) {\r\n this.table.setFocusedCell(this, doFocus);\r\n }\r\n\r\n updateState(state: Partial<State>) {\r\n this.state = { ...this.state, ...state };\r\n }\r\n}\r\n","import { Element } from './primitive/Element';\r\nimport { Cell, type CellState } from './Cell';\r\nimport { TableController } from './TableController';\r\nimport { computed, makeObservable } from 'mobx';\r\nimport type { RowsGroup, RowsGroupBaseState } from './primitive/RowsGroup';\r\nimport type { HTMLAttributes } from 'react';\r\n\r\nexport type RowProperties = {\r\n id: string;\r\n cells: Cell[];\r\n\r\n isExpandible?: boolean;\r\n isExpanded?: boolean;\r\n isHidden?: boolean;\r\n isSelectable?: boolean;\r\n isSelected?: boolean;\r\n\r\n domProperties?: HTMLAttributes<HTMLTableRowElement>;\r\n properties?: Record<string, unknown>;\r\n};\r\n\r\nexport type TBuildRow = Omit<RowProperties, 'cells'> & { cells: CellState[] };\r\n\r\nexport type RowState = Omit<RowProperties, 'isSelected'>;\r\n\r\nexport class Row extends Element<RowState> {\r\n protected container: null | RowsGroup<RowsGroupBaseState> =\r\n {} as RowsGroup<RowsGroupBaseState>;\r\n\r\n addCell(cell: Cell) {\r\n this.state.cells.push(cell);\r\n this.attachCell(cell);\r\n return this;\r\n }\r\n\r\n addCellAfter(anchor: Cell, newElement: Cell) {\r\n const index = this.state.cells.indexOf(anchor) + 1;\r\n\r\n if (index !== -1) {\r\n this.attachCell(newElement);\r\n this.state.cells.splice(index, 0, newElement);\r\n }\r\n }\r\n\r\n addCellBefore(anchor: Cell, newElement: Cell) {\r\n const index = this.state.cells.indexOf(anchor);\r\n\r\n if (index !== -1) {\r\n this.attachCell(newElement);\r\n this.state.cells.splice(index, 0, newElement);\r\n }\r\n }\r\n\r\n build(data: TBuildRow) {\r\n for (const cell of data.cells) {\r\n const cellInstance = new Cell(cell);\r\n this.addCell(cellInstance);\r\n }\r\n }\r\n\r\n constructor(\r\n id: string,\r\n protected properties?: Omit<RowProperties, 'id'>,\r\n ) {\r\n const { cells, isSelected, ...state } = properties || {};\r\n super({ id, ...state, cells: cells || [] });\r\n makeObservable(this, {\r\n isSelected: computed,\r\n index: computed,\r\n });\r\n }\r\n\r\n get cells() {\r\n return this.state.cells;\r\n }\r\n\r\n get isSelected() {\r\n return this.table.isSelected(this);\r\n }\r\n\r\n getCellByColumnName(colName: string) {\r\n return this.cells.find((c) => c.getState('colName') === colName);\r\n }\r\n\r\n getCellByIndex(index: number) {\r\n return this.cells[index];\r\n }\r\n\r\n getCellIndex(cell: Cell) {\r\n return this.cells.indexOf(cell);\r\n }\r\n\r\n getContainer() {\r\n return this.container;\r\n }\r\n\r\n getFollowingRow() {\r\n const containerRows = [...this.container!.getState('rows').values()];\r\n const index = containerRows.findIndex(\r\n (r) => r.getState('id') === this.state.id,\r\n );\r\n return containerRows[index + 1] || null;\r\n }\r\n\r\n get index() {\r\n return this.getContainer()!.getRowIndex(this);\r\n }\r\n\r\n getPreviousRow() {\r\n const containerRows = [...this.container!.getState('rows').values()];\r\n const index = containerRows.findIndex(\r\n (r) => r.getState('id') === this.state.id,\r\n );\r\n return containerRows[index - 1] || null;\r\n }\r\n\r\n insertAfter(row: Row) {\r\n this.getContainer()?.insertAfter(this, row);\r\n }\r\n\r\n insertBefore(row: Row) {\r\n this.getContainer()?.insertBefore(this, row);\r\n }\r\n\r\n remove() {\r\n this.getContainer()?.removeRow(this);\r\n }\r\n\r\n replaceCellOnIndex(index: number, newCell: Cell) {\r\n const current = this.cells[index];\r\n if (!current) {\r\n throw new Error('IndexOutOfBounds - The provided index is out of bounds');\r\n }\r\n\r\n this.cells[index] = newCell;\r\n this.attachCell(newCell);\r\n\r\n this.detachCell(current);\r\n }\r\n\r\n public scrollIntoView() {\r\n this.table.scrollRowIntoView(this);\r\n }\r\n\r\n public setContainer(container: null | RowsGroup<RowsGroupBaseState>) {\r\n this.container = container;\r\n return this;\r\n }\r\n\r\n public setTable(table: null | TableController) {\r\n super.setTable(table);\r\n\r\n this.state.cells.forEach((c) => c.setTable(table));\r\n\r\n if (table && this.properties?.isSelected) {\r\n table.toggleRowSelection(this, true);\r\n }\r\n\r\n return this;\r\n }\r\n\r\n public swap(withRow: Row) {\r\n this.getContainer()?.swapRows(this, withRow);\r\n }\r\n\r\n public toggleSelection(forceState?: boolean) {\r\n this.table.toggleRowSelection(this, forceState);\r\n }\r\n\r\n protected attachCell(cell: Cell) {\r\n cell.setTable(this.table);\r\n cell.setRow(this);\r\n }\r\n\r\n protected detachCell(cell: Cell) {\r\n cell.setTable(null);\r\n cell.setRow(null);\r\n }\r\n}\r\n","import { action, computed, makeObservable } from 'mobx';\r\nimport type { Row } from '../Row';\r\nimport type { TableController } from '../TableController';\r\nimport { Element, type ElementBaseState } from './Element';\r\nimport type { HTMLAttributes } from 'react';\r\n\r\nexport type RowsGroupBaseState = ElementBaseState & {\r\n rows: Row[];\r\n domProperties?: HTMLAttributes<HTMLTableSectionElement>;\r\n properties?: Record<string, unknown>;\r\n};\r\n\r\nexport class RowsGroup<U extends RowsGroupBaseState> extends Element<\r\n U & RowsGroupBaseState\r\n> {\r\n constructor(\r\n public table: TableController,\r\n state: U,\r\n ) {\r\n super({ ...state, rows: [] });\r\n makeObservable(this, { swapRows: action, rows: computed });\r\n }\r\n\r\n get rows() {\r\n return this.state.rows;\r\n }\r\n\r\n addRow(row: Row) {\r\n this.state.rows.push(row);\r\n row.setTable(this.table);\r\n row.setContainer(this);\r\n\r\n this.runAddRowPlugin(row);\r\n\r\n return this;\r\n }\r\n\r\n addRows(rows: Row[]) {\r\n rows.forEach(this.addRow.bind(this));\r\n return this;\r\n }\r\n\r\n clear() {\r\n this.state.rows.forEach((row) => {\r\n row.setContainer(null);\r\n row.setTable(null);\r\n });\r\n return this.rows.splice(0, this.rows.length);\r\n }\r\n\r\n getRowById(id: string | number) {\r\n return this.state.rows.find((c) => c.getState('id') === id);\r\n }\r\n\r\n getRowByIndex(index: number) {\r\n return this.state.rows[index];\r\n }\r\n\r\n getRowIndex(row: Row) {\r\n return this.state.rows.indexOf(row);\r\n }\r\n\r\n insertAfter(anchor: Row, newElement: Row) {\r\n if (anchor.getContainer() === this) {\r\n const index = this.state.rows.indexOf(anchor);\r\n this.state.rows.splice(index + 1, 0, newElement);\r\n newElement.setTable(this.table);\r\n newElement.setContainer(this);\r\n this.runAddRowPlugin(newElement);\r\n }\r\n }\r\n\r\n insertBefore(anchor: Row, newElement: Row) {\r\n if (anchor.getContainer() === this) {\r\n const index = this.state.rows.indexOf(anchor);\r\n this.state.rows.splice(index, 0, newElement);\r\n newElement.setTable(this.table);\r\n newElement.setContainer(this);\r\n this.runAddRowPlugin(newElement);\r\n }\r\n }\r\n\r\n removeRow(row: Row) {\r\n if (row.getContainer() === this) {\r\n row.setContainer(null);\r\n this.state.rows = this.state.rows.filter((r) => r !== row);\r\n this.table.removeRow(row);\r\n }\r\n }\r\n\r\n swapRows(a: Row, b: Row) {\r\n if (a?.getContainer() === this && b?.getContainer() === this) {\r\n const aIndex = this.state.rows.findIndex(\r\n (r) => r.getState?.('id') === a.getState?.('id'),\r\n );\r\n const bIndex = this.state.rows.findIndex(\r\n (r) => r.getState?.('id') === b.getState?.('id'),\r\n );\r\n if (aIndex !== -1 && bIndex !== -1) {\r\n this.state.rows[aIndex] = b;\r\n this.state.rows[bIndex] = a;\r\n }\r\n }\r\n }\r\n\r\n protected runAddRowPlugin(newRow: Row) {\r\n const plugins = this.getTable().getApplicablePlugins('onAddRow');\r\n plugins.forEach((c) => c(this, newRow));\r\n }\r\n}\r\n","import type { ElementBaseState } from './primitive/Element';\r\nimport { RowsGroup, type RowsGroupBaseState } from './primitive/RowsGroup';\r\nimport { Row, type TBuildRow } from './Row';\r\nimport type { TableController } from './TableController';\r\n\r\n// eslint-disable-next-line @typescript-eslint/ban-types\r\nexport type TableBodyState = ElementBaseState & RowsGroupBaseState & {};\r\n\r\nexport type TBuildBody = {\r\n rows: TBuildRow[];\r\n};\r\n\r\nexport class TableBody extends RowsGroup<TableBodyState> {\r\n constructor(table: TableController) {\r\n super(table, { rows: [] });\r\n }\r\n\r\n build(data: TBuildBody) {\r\n for (const row of data.rows) {\r\n const bodyRow = new Row(row.id);\r\n this.addRow(bodyRow);\r\n bodyRow.build(row);\r\n }\r\n }\r\n}\r\n","import { Cell, Row, type CellState } from '..';\r\nimport type { ElementBaseState } from './primitive/Element';\r\nimport { RowsGroup, type RowsGroupBaseState } from './primitive/RowsGroup';\r\nimport type { TableController } from './TableController';\r\n\r\n// eslint-disable-next-line @typescript-eslint/ban-types\r\nexport type TableHeadState = ElementBaseState & RowsGroupBaseState & {};\r\n\r\nexport type TBuildHead = {\r\n columns: CellState[];\r\n filters: any[];\r\n};\r\n\r\nexport class TableHead extends RowsGroup<TableHeadState> {\r\n constructor(table: TableController) {\r\n super(table, { rows: [] });\r\n }\r\n\r\n build(data: TBuildHead) {\r\n this.state.rows = [];\r\n\r\n /**\r\n * Generate main header row\r\n */\r\n const headerRow = new Row('header');\r\n this.addRow(headerRow);\r\n for (const column of data.columns) {\r\n const headerCell = new Cell(column);\r\n headerRow.addCell(headerCell);\r\n }\r\n\r\n /**\r\n * Generate filters row\r\n */\r\n if (data.filters.length) {\r\n const filtersRow = new Row('filters');\r\n filtersRow.setState((s) => ({\r\n ...s,\r\n domProperties: { ...s.domProperties, className: 'filtersRow' },\r\n }));\r\n let hasFilter = false;\r\n for (const column of data.columns) {\r\n const filter = data.filters.find(\r\n (currentFilter) =>\r\n currentFilter.getState('column') === column.colName,\r\n );\r\n const headerCell = new Cell({\r\n colName: column.colName,\r\n Renderer: filter ? filter.Render : undefined,\r\n });\r\n filtersRow.addCell(headerCell);\r\n if (filter) {\r\n hasFilter = true;\r\n }\r\n }\r\n if (hasFilter) {\r\n this.addRow(filtersRow);\r\n }\r\n }\r\n }\r\n}\r\n","import type { HTMLAttributes } from 'react';\r\nimport {\r\n FocusControllerPlugin,\r\n WaiAriaPlugin,\r\n type TableController,\r\n type Row,\r\n type Cell,\r\n} from '..';\r\nimport type { Element } from '../primitive/Element';\r\nimport { RowsGroup } from '../primitive/RowsGroup';\r\n\r\nexport type TDistinctorProperties = HTMLAttributes<HTMLElement>;\r\n\r\n/**\r\n * This class is the default way to customize the table behavior.\r\n */\r\nexport interface TablePlugin {\r\n getRenderers?: () => {\r\n cell?: React.FC<{\r\n cell: Cell;\r\n }>;\r\n };\r\n\r\n onAddRow?: (\r\n controller: TableController,\r\n target: RowsGroup<any>,\r\n newRow: Row,\r\n ) => void;\r\n\r\n onResize?: (\r\n controller: TableController,\r\n colName: string,\r\n newSize: number,\r\n ) => void;\r\n\r\n /**\r\n * This hook is called when the table is renderized.\r\n * The elements returned by this hook will be added to the dom of the element.\r\n */\r\n useElementDomProps?: (\r\n controller: TableController,\r\n _element: TableController | Element<any>,\r\n _context: any,\r\n ) => HTMLAttributes<HTMLElement>;\r\n}\r\n\r\nexport const defaultPlugins = () => [\r\n new WaiAriaPlugin(),\r\n new FocusControllerPlugin(),\r\n];\r\n","import { EventEmitter } from '@apia/util';\r\nimport { Cell } from './Cell';\r\nimport { Row } from './Row';\r\nimport { TableBody, TBuildBody } from './TableBody';\r\nimport { TableHead, type TBuildHead } from './TableHead';\r\nimport { action, computed, makeObservable, observable } from 'mobx';\r\nimport { defaultPlugins, TablePlugin } from './plugins/TablePlugin';\r\n\r\nexport type TableState = {\r\n allowEdition: boolean;\r\n allowResize: boolean;\r\n allowSelection: boolean;\r\n editionMode: boolean;\r\n focusedCell: Cell | null;\r\n hiddenColumns: Set<string>;\r\n isSelectionMultiple: boolean;\r\n plugins: TablePlugin[];\r\n selection: Set<Row>;\r\n};\r\n\r\nexport type TBuildTable = TBuildHead & TBuildBody;\r\n\r\nexport class TableController extends EventEmitter<{\r\n cellFocus: { cell: Cell; doFocus: boolean };\r\n columnClick: Cell;\r\n editionMode: boolean;\r\n keyEnter: null;\r\n rowDelete: Row;\r\n scrollIntoRow: Row;\r\n selectionChange: Row[];\r\n}> {\r\n protected state: TableState = {\r\n allowEdition: true,\r\n allowResize: true,\r\n allowSelection: true,\r\n editionMode: false,\r\n focusedCell: null,\r\n hiddenColumns: new Set(),\r\n plugins: [],\r\n isSelectionMultiple: true,\r\n selection: new Set(),\r\n };\r\n\r\n constructor(props?: Partial<Omit<TableState, 'selection'>>) {\r\n super();\r\n Object.assign(this.state, props || {});\r\n if (!props?.plugins) {\r\n this.state.plugins.push(...defaultPlugins());\r\n }\r\n\r\n makeObservable<TableController, 'state'>(this, {\r\n build: action,\r\n clearSelection: action,\r\n isEditionMode: computed,\r\n setFocusedCell: action,\r\n state: observable,\r\n toggleRowSelection: action,\r\n toggleEditionMode: action,\r\n });\r\n }\r\n\r\n public setHiddenColumns(cols: Set<string>) {\r\n this.state.hiddenColumns.forEach((c) => {\r\n if (!cols.has(c)) {\r\n this.state.hiddenColumns.delete(c);\r\n }\r\n });\r\n cols.forEach((c) => {\r\n if (!this.state.hiddenColumns.has(c)) {\r\n this.state.hiddenColumns.add(c);\r\n }\r\n });\r\n }\r\n\r\n public body = new TableBody(this);\r\n public head = new TableHead(this);\r\n\r\n /**\r\n * Clears all data in the table, except for the events\r\n * listeners and recreates the structure based on the passed data.\r\n */\r\n public build(data: TBuildTable) {\r\n this.head.build(data);\r\n this.body.build(data);\r\n\r\n this.restoreFocus();\r\n }\r\n\r\n public getRowById(id: string | number) {\r\n return this.head.getRowById(id) || this.body.getRowById(id);\r\n }\r\n\r\n /**\r\n * EDITION MODE\r\n */\r\n\r\n public get isEditionMode() {\r\n return this.state.editionMode;\r\n }\r\n\r\n toggleEditionMode(force?: boolean) {\r\n if (this.state.allowEdition) {\r\n this.state.editionMode = force ?? !this.state.editionMode;\r\n this.emit('editionMode', this.state.editionMode);\r\n }\r\n }\r\n\r\n /**\r\n * SELECTION\r\n */\r\n\r\n clearSelection() {\r\n this.state.selection.clear();\r\n }\r\n\r\n /**\r\n * Returns the selected rows.\r\n */\r\n public getSelectedRows() {\r\n return [...this.state.selection];\r\n }\r\n\r\n public isSelected(row: Row): boolean {\r\n return this.state.selection.has(row);\r\n }\r\n\r\n /**\r\n * Toggles the selection state of a given row.\r\n *\r\n * If the `isSelected` parameter is provided, it explicitly sets the selection\r\n * state of the row to the given value (`true` for selected, `false` for deselected).\r\n * If `isSelected` is not provided, the method will toggle the current selection state\r\n * of the row (i.e., select it if it's currently not selected, or deselect it if it is).\r\n *\r\n * @param row - The row to toggle selection for.\r\n * @param isSelected - Optional. A boolean indicating whether the row should be selected (`true`)\r\n * or deselected (`false`). If not provided, the selection state will be toggled.\r\n */\r\n public toggleRowSelection(row: Row, isSelected?: boolean) {\r\n if (this.state.allowSelection) {\r\n isSelected = isSelected ?? !this.state.selection.has(row);\r\n\r\n if (isSelected) {\r\n if (row.getState('isSelectable') !== false) {\r\n this.state.selection.add(row);\r\n }\r\n } else {\r\n this.state.selection.delete(row);\r\n }\r\n\r\n this.emit('selectionChange', [...this.state.selection.values()]);\r\n }\r\n }\r\n\r\n protected restoreFocus() {\r\n if (!this.state.focusedCell || this.state.focusedCell.getTable() !== this) {\r\n this.state.focusedCell =\r\n this.body.getState('rows').values().next().value?.cells[0] ||\r\n this.head.getState('rows').values().next().value?.cells[0] ||\r\n null;\r\n }\r\n if (this.state.focusedCell) {\r\n this.emit('cellFocus', { cell: this.state.focusedCell, doFocus: false });\r\n }\r\n }\r\n\r\n removeRow(row: Row) {\r\n if (row.getTable() === this) {\r\n row.setTable(null);\r\n\r\n this.head.removeRow(row);\r\n this.body.removeRow(row);\r\n\r\n if (this.state.selection.has(row)) {\r\n this.state.selection.delete(row);\r\n this.emit('selectionChange', [...this.state.selection.values()]);\r\n }\r\n\r\n if (this.state.focusedCell?.getRow() === row) {\r\n this.restoreFocus();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * FOCUS\r\n */\r\n\r\n /**\r\n * @returns The currently focused cell in the table.\r\n */\r\n public getFocusedCell() {\r\n return this.state.focusedCell;\r\n }\r\n\r\n public setFocusedCell(cell: Cell, doFocus: boolean = true) {\r\n this.state.focusedCell = cell;\r\n this.emit('cellFocus', { cell, doFocus });\r\n }\r\n\r\n public setSelection(indices: number[]) {\r\n this.clearSelection();\r\n indices.forEach((index) => {\r\n const row = this.body.getRowByIndex(index);\r\n if (row) {\r\n this.toggleRowSelection(row, true);\r\n }\r\n });\r\n }\r\n\r\n public scrollRowIntoView(row: Row) {\r\n this.emit('scrollIntoRow', row);\r\n }\r\n\r\n /**\r\n * STATE\r\n */\r\n\r\n /**\r\n * Returns the current state of the `TableController` instance.\r\n *\r\n * @param prop - The property of the state to retrieve.\r\n */\r\n public getState<K extends keyof TableState>(prop: K) {\r\n return this.state[prop];\r\n }\r\n\r\n /**\r\n * Updates the state of the `TableController` instance.\r\n *\r\n * This method provides two overloads:\r\n * 1. A callback function that takes the current state and returns a new state.\r\n * 2. A key-value pair where the key is a property of the state, and the value is the new value for that property.\r\n *\r\n * @param prop - Either a callback function to update the state or the key of the state property to update.\r\n * @param value - (Optional) The new value for the specified state property. This is required if `prop` is a key.\r\n *\r\n * @returns The `TableController` instance for method chaining.\r\n *\r\n * ### Usage:\r\n *\r\n * **Using a callback function:**\r\n * ```tsx\r\n * tableController.setState((state) => ({\r\n * ...state,\r\n * allowEdition: false,\r\n * }));\r\n * ```\r\n *\r\n * **Using a key-value pair:**\r\n * ```tsx\r\n * tableController.setState('allowEdition', false);\r\n * ```\r\n */\r\n public setState(cb: (s: TableState) => TableState): this;\r\n public setState<K extends keyof TableState>(\r\n prop: K,\r\n value: TableState[K],\r\n ): this;\r\n public setState<K extends keyof TableState>(\r\n prop: K | ((s: TableState) => TableState),\r\n value?: TableState[K],\r\n ) {\r\n if (typeof prop === 'function') {\r\n this.state = prop(this.state);\r\n } else {\r\n this.state[prop] = value!;\r\n }\r\n return this;\r\n }\r\n\r\n toggleColumnVisibility(columnName: string, isVisible?: boolean) {\r\n if (isVisible !== false && this.state.hiddenColumns.has(columnName)) {\r\n this.state.hiddenColumns.delete(columnName);\r\n } else {\r\n this.state.hiddenColumns.add(columnName);\r\n }\r\n }\r\n isColumnVisible(columnName: string) {\r\n return !this.state.hiddenColumns.has(columnName);\r\n }\r\n\r\n /**\r\n * PLUGINS\r\n */\r\n\r\n getPluginOfType<T extends TablePlugin>(\r\n clazz: new (...args: any[]) => T,\r\n ): T | undefined {\r\n return this.state.plugins.find((plugin) => plugin instanceof clazz) as\r\n | T\r\n | undefined;\r\n }\r\n\r\n /**\r\n * Sets the plugins for the table.\r\n */\r\n public setPlugins(cb: (currentPlugins: TablePlugin[]) => TablePlugin[]) {\r\n this.state.plugins = cb(this.state.plugins);\r\n }\r\n\r\n public getApplicablePlugins<K extends keyof TablePlugin>(\r\n method: K,\r\n ): ((\r\n ...args: Parameters<NonNullable<TablePlugin[K]>> extends [\r\n any,\r\n ...infer Rest,\r\n ]\r\n ? Rest\r\n : void[]\r\n ) => ReturnType<NonNullable<TablePlugin[K]>>)[] {\r\n return this.state.plugins\r\n .filter((c) => c[method] !== undefined)\r\n .map((c) => (c[method]! as any).bind(c, this)) as any;\r\n }\r\n}\r\n","import { MouseEvent, useRef } from 'react';\r\nimport { TableController } from '../..';\r\n\r\nexport function getRow(\r\n controller: TableController,\r\n rowElement: HTMLTableRowElement,\r\n) {\r\n const rowId = rowElement.dataset.rowid!;\r\n const row = controller.getRowById(rowId);\r\n return row;\r\n}\r\n\r\nexport function selectBetweenRows(\r\n controller: TableController,\r\n rowA: HTMLTableRowElement,\r\n rowB: HTMLTableRowElement,\r\n) {\r\n const relativePosition = rowA.compareDocumentPosition(rowB);\r\n let finished = false;\r\n if (relativePosition & Node.DOCUMENT_POSITION_FOLLOWING) {\r\n let current = rowA;\r\n if (rowA.closest('thead') && !rowB.closest('thead')) {\r\n current = rowA.closest('table')?.querySelector('tbody')\r\n ?.firstElementChild as HTMLTableRowElement;\r\n }\r\n while (!finished) {\r\n if (current) {\r\n getRow(controller, current)?.toggleSelection(true);\r\n finished = current === rowB;\r\n current = current.nextElementSibling as HTMLTableRowElement;\r\n } else {\r\n finished = true;\r\n }\r\n }\r\n } else if (relativePosition & Node.DOCUMENT_POSITION_PRECEDING) {\r\n let current = rowA;\r\n while (!finished) {\r\n if (current) {\r\n getRow(controller, current)?.toggleSelection(true);\r\n finished = current === rowB;\r\n current = current.previousElementSibling as HTMLTableRowElement;\r\n } else {\r\n finished = true;\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport function useFocusByClick(controller: TableController) {\r\n const lastRow = useRef<HTMLTableRowElement | null>(null);\r\n\r\n return (ev: MouseEvent) => {\r\n const { target } = ev;\r\n if (target instanceof HTMLElement) {\r\n const cellElement = target.closest('td[data-colname],th[data-colname]');\r\n const rowElement = target.closest('tr[data-rowid]');\r\n\r\n if (rowElement instanceof HTMLTableRowElement) {\r\n const row = getRow(controller, rowElement);\r\n\r\n if (row) {\r\n if (ev.shiftKey) {\r\n if (lastRow.current) {\r\n selectBetweenRows(controller, lastRow.current, rowElement);\r\n }\r\n } else if (ev.ctrlKey) {\r\n row?.toggleSelection();\r\n } else {\r\n controller.clearSelection();\r\n row?.toggleSelection(true);\r\n }\r\n\r\n lastRow.current = rowElement;\r\n\r\n if (cellElement instanceof HTMLTableCellElement) {\r\n const colName = cellElement.dataset.colname!;\r\n const cell = row?.getCellByColumnName(colName);\r\n\r\n if (cell) {\r\n if (target.closest('thead')) {\r\n controller.emit('columnClick', cell);\r\n }\r\n\r\n cell?.focus(true);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n };\r\n}\r\n","import { KeyboardEvent } from 'react';\r\nimport { TableController } from '../..';\r\nimport { getRow, selectBetweenRows } from './useFocusByClick';\r\n\r\nconst pageSize = 6;\r\n\r\nfunction handleArrowKey(controller: TableController, ev: KeyboardEvent) {\r\n const { target } = ev;\r\n if (target instanceof HTMLElement) {\r\n const cellElement = target.closest('td[data-colname],th[data-colname]');\r\n const rowElement = target.closest('tr[data-rowid]');\r\n\r\n if (rowElement instanceof HTMLTableRowElement) {\r\n if (cellElement instanceof HTMLTableCellElement) {\r\n const colName = cellElement.dataset.colname!;\r\n\r\n let nextFocusedRow: HTMLTableRowElement = rowElement;\r\n let nextFocusedCell: HTMLTableCellElement = cellElement;\r\n switch (ev.code) {\r\n case 'ArrowUp': {\r\n const test =\r\n rowElement?.previousElementSibling as HTMLTableRowElement;\r\n if (test) {\r\n nextFocusedRow = test;\r\n } else if (nextFocusedRow.closest('tbody')) {\r\n const thead = nextFocusedRow\r\n .closest<HTMLElement>('table')!\r\n .querySelector('thead');\r\n nextFocusedRow = thead!.lastElementChild! as HTMLTableRowElement;\r\n }\r\n break;\r\n }\r\n case 'ArrowDown': {\r\n const test = rowElement?.nextElementSibling as HTMLTableRowElement;\r\n if (test) {\r\n nextFocusedRow = test;\r\n } else if (nextFocusedRow.closest('thead')) {\r\n const tbody = nextFocusedRow\r\n .closest<HTMLElement>('table')!\r\n .querySelector('tbody');\r\n nextFocusedRow = tbody!.firstElementChild! as HTMLTableRowElement;\r\n }\r\n break;\r\n }\r\n case 'ArrowLeft':\r\n nextFocusedCell =\r\n cellElement.previousElementSibling as HTMLTableCellElement;\r\n break;\r\n case 'ArrowRight':\r\n nextFocusedCell =\r\n cellElement.nextElementSibling as HTMLTableCellElement;\r\n break;\r\n case 'PageUp': {\r\n let i = 0;\r\n do {\r\n const test = nextFocusedRow.previousElementSibling as HTMLElement;\r\n if (!test && nextFocusedRow.closest('tbody')) {\r\n const thead = nextFocusedRow\r\n .closest<HTMLElement>('table')!\r\n .querySelector('thead');\r\n nextFocusedRow = thead!\r\n .lastElementChild! as HTMLTableRowElement;\r\n } else if (test) {\r\n nextFocusedRow = test as HTMLTableRowElement;\r\n }\r\n } while (\r\n nextFocusedRow instanceof HTMLTableRowElement &&\r\n ++i < pageSize\r\n );\r\n break;\r\n }\r\n case 'PageDown': {\r\n let i = 0;\r\n\r\n do {\r\n const test = nextFocusedRow.nextElementSibling as HTMLElement;\r\n if (!test && nextFocusedRow.closest('thead')) {\r\n const tbody = nextFocusedRow\r\n .closest<HTMLElement>('table')!\r\n .querySelector('tbody');\r\n nextFocusedRow = tbody!\r\n .firstElementChild! as HTMLTableRowElement;\r\n } else if (test) {\r\n nextFocusedRow = test as HTMLTableRowElement;\r\n }\r\n } while (\r\n nextFocusedRow instanceof HTMLTableRowElement &&\r\n ++i < pageSize\r\n );\r\n break;\r\n }\r\n case 'Home': {\r\n if (ev.ctrlKey) {\r\n nextFocusedRow = rowElement\r\n .closest<HTMLElement>('table')\r\n ?.querySelector('thead tr') as HTMLTableRowElement;\r\n } else {\r\n nextFocusedCell =\r\n rowElement.firstElementChild as HTMLTableCellElement;\r\n }\r\n break;\r\n }\r\n case 'End':\r\n if (ev.ctrlKey) {\r\n nextFocusedRow = (\r\n rowElement\r\n .closest<HTMLElement>('table')!\r\n .querySelector('tbody') as HTMLElement\r\n ).lastElementChild as HTMLTableRowElement;\r\n } else {\r\n nextFocusedCell = rowElement.lastChild! as HTMLTableCellElement;\r\n }\r\n }\r\n\r\n if (nextFocusedCell !== cellElement && nextFocusedCell) {\r\n getRow(controller, rowElement)!\r\n .getCellByColumnName(nextFocusedCell.dataset.colname!)!\r\n .focus();\r\n } else if (nextFocusedRow !== rowElement && nextFocusedRow) {\r\n if (ev.shiftKey) {\r\n selectBetweenRows(controller, rowElement, nextFocusedRow);\r\n } else {\r\n controller.clearSelection();\r\n getRow(controller, nextFocusedRow)?.toggleSelection(true);\r\n }\r\n\r\n const cell =\r\n getRow(controller, nextFocusedRow)!.getCellByColumnName(colName) ||\r\n getRow(controller, nextFocusedRow)!.getCellByIndex(0);\r\n cell?.focus();\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport function useFocusByKey(controller: TableController) {\r\n return (ev: KeyboardEvent) => {\r\n if (controller.isEditionMode) {\r\n if (['Enter', 'Escape'].includes(ev.code)) {\r\n ev.preventDefault();\r\n }\r\n\r\n switch (ev.code) {\r\n case 'Enter':\r\n controller.emit('keyEnter', null);\r\n break;\r\n // eslint-disable-next-line no-fallthrough\r\n case 'Escape':\r\n controller.toggleEditionMode(false);\r\n }\r\n } else {\r\n if (\r\n [\r\n 'Escape',\r\n 'ArrowUp',\r\n 'ArrowDown',\r\n 'ArrowLeft',\r\n 'ArrowRight',\r\n 'PageUp',\r\n 'PageDown',\r\n 'Home',\r\n 'End',\r\n ].includes(ev.code) ||\r\n (ev.code === 'Enter' && controller.getState('allowEdition')) ||\r\n (ev.code === 'Space' && ev.ctrlKey)\r\n ) {\r\n ev.preventDefault();\r\n }\r\n switch (ev.code) {\r\n case 'Enter':\r\n controller.emit('keyEnter', null);\r\n controller.toggleEditionMode();\r\n break;\r\n case 'Space':\r\n {\r\n if (ev.ctrlKey) {\r\n const row = (ev.target as HTMLElement)?.closest('tr');\r\n if (row instanceof HTMLElement) {\r\n getRow(controller, row)!.toggleSelection();\r\n }\r\n }\r\n }\r\n break;\r\n case 'ArrowUp':\r\n case 'ArrowDown':\r\n case 'ArrowLeft':\r\n case 'ArrowRight':\r\n case 'Home':\r\n case 'End':\r\n case 'PageUp':\r\n case 'PageDown':\r\n handleArrowKey(controller, ev);\r\n break;\r\n }\r\n }\r\n };\r\n}\r\n","/* eslint-disable react-hooks/rules-of-hooks */\r\nimport {\r\n disableChildrenFocus,\r\n getFocusSelector,\r\n scrollParentIntoElement,\r\n useMount,\r\n} from '@apia/util';\r\nimport { FocusEvent, useRef } from 'react';\r\nimport { Element } from '../../primitive/Element';\r\nimport { TableController } from '../../TableController';\r\nimport type { TablePlugin } from '../TablePlugin';\r\nimport { useFocusByClick } from './useFocusByClick';\r\nimport { useFocusByKey } from './useFocusByKey';\r\nimport type { Cell } from '../../Cell';\r\n\r\nfunction getCellElement(focusControllerRef: HTMLElement, cell: Cell) {\r\n return focusControllerRef.querySelector<HTMLTableCellElement>(\r\n `tr[data-rowid=\"${cell.getRow()!.getState('id')}\"] td[data-colname=\"${cell.getState('colName')}\"], tr[data-rowid=\"${cell.getRow()!.getState('id')}\"] th[data-colname=\"${cell.getState('colName')}\"]`,\r\n );\r\n}\r\n\r\nfunction isVisible(el: HTMLElement | null) {\r\n if (!(el instanceof HTMLElement)) return false;\r\n\r\n // Traverse up the DOM tree\r\n while (el) {\r\n const style = getComputedStyle(el);\r\n\r\n if (\r\n style.display === 'none' ||\r\n style.visibility === 'hidden' ||\r\n style.opacity === '0'\r\n ) {\r\n return false;\r\n }\r\n\r\n el = el.parentElement;\r\n }\r\n\r\n return true;\r\n}\r\n\r\nfunction scrollIntoRow(row: HTMLTableCaptionElement) {\r\n if (row) {\r\n scrollParentIntoElement(row, 150, 0, 0);\r\n }\r\n}\r\n\r\nexport function restoreFocus(\r\n controller: TableController,\r\n tableElement: HTMLElement,\r\n doFocus: boolean,\r\n) {\r\n const cell = controller.getFocusedCell();\r\n\r\n if (cell) {\r\n const cellElement = getCellElement(tableElement, cell);\r\n\r\n if (cellElement) {\r\n disableChildrenFocus(tableElement);\r\n const widgets =\r\n cellElement.querySelectorAll<HTMLElement>(getFocusSelector());\r\n const widget = [...widgets].find((c) => isVisible(c));\r\n const focusableElement = widget || cellElement;\r\n\r\n focusableElement.setAttribute('tabindex', '0');\r\n restoreEditionMode(tableElement, cell.getTable().isEditionMode);\r\n if (doFocus) {\r\n focusableElement.focus();\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction restoreEditionMode(\r\n focusController: HTMLElement,\r\n editionMode: boolean,\r\n) {\r\n const focusable = focusController?.querySelector(\r\n '[tabindex=\"0\"]',\r\n ) as HTMLElement;\r\n const cell = focusable?.closest('td, th');\r\n if (cell instanceof HTMLElement) {\r\n const widgets = cell.querySelectorAll<HTMLElement>(getFocusSelector());\r\n widgets.forEach((widget) => {\r\n widget.setAttribute('tabindex', editionMode ? '0' : '-1');\r\n });\r\n const firstFocusable = [...widgets].find((c) => isVisible(c)) || cell;\r\n firstFocusable.setAttribute('tabindex', '0');\r\n }\r\n}\r\n\r\nexport class FocusControllerPlugin implements TablePlugin {\r\n rootElement: HTMLElement | null = null;\r\n\r\n scrollIntoView(rowId: string) {\r\n const row = this.rootElement?.querySelector(\r\n `tr[data-rowid=\"${rowId}\"]`,\r\n ) as HTMLTableRowElement;\r\n\r\n if (row) {\r\n scrollIntoRow(row);\r\n }\r\n }\r\n\r\n useElementDomProps(\r\n controller: TableController,\r\n element: TableController | Element<any>,\r\n _context: any,\r\n ) {\r\n if (element instanceof TableController) {\r\n const disconnect = useRef(() => {});\r\n\r\n useMount(() => {\r\n const uns1 = controller.on('cellFocus', (ev) => {\r\n if (this.rootElement) {\r\n restoreFocus(controller, this.rootElement, ev.doFocus);\r\n }\r\n });\r\n const uns2 = controller.on('editionMode', (editionMode) => {\r\n if (this.rootElement) {\r\n restoreEditionMode(this.rootElement!, editionMode);\r\n }\r\n });\r\n const uns3 = controller.on('scrollIntoRow', (row) => {\r\n this.scrollIntoView(row.getState('id'));\r\n });\r\n\r\n return () => {\r\n uns1();\r\n uns2();\r\n uns3();\r\n };\r\n });\r\n\r\n return {\r\n className: 'table__focus_controller',\r\n onClick: useFocusByClick(controller),\r\n onKeyDown: useFocusByKey(controller),\r\n onBlur: (ev: FocusEvent) => {\r\n if (\r\n ev.relatedTarget instanceof HTMLElement &&\r\n ev.relatedTarget.closest('.table__focus_controller') !==\r\n this.rootElement\r\n ) {\r\n controller.toggleEditionMode(false);\r\n }\r\n },\r\n ref: (el: HTMLElement | null) => {\r\n this.rootElement = el;\r\n if (el) {\r\n const observer = new MutationObserver(() => {\r\n restoreFocus(controller, this.rootElement!, false);\r\n });\r\n disconnect.current?.();\r\n observer.observe(el, { subtree: true, childList: true });\r\n disconnect.current = () => {\r\n observer.disconnect();\r\n };\r\n }\r\n },\r\n };\r\n }\r\n\r\n return {};\r\n }\r\n}\r\n","import { Cell } from '../Cell';\r\nimport type { Element } from '../primitive/Element';\r\nimport { Row } from '../Row';\r\nimport { TableController } from '../TableController';\r\nimport type { TablePlugin } from './TablePlugin';\r\n\r\nexport class WaiAriaPlugin implements TablePlugin {\r\n public useElementDomProps(\r\n controller: TableController,\r\n element: TableController | Element<any>,\r\n context: any,\r\n ) {\r\n if (element instanceof Row) {\r\n const base =\r\n element.getContainer() === controller.head\r\n ? 0\r\n : controller.head.rows.length;\r\n return {\r\n 'aria-selected': element.isSelected,\r\n 'aria-rowindex': context + base + 1,\r\n };\r\n } else if (element instanceof Cell) {\r\n return {\r\n 'aria-colindex': context + 1,\r\n };\r\n } else if (element instanceof TableController) {\r\n return {\r\n role: 'treegrid',\r\n 'aria-multiselectable':\r\n controller.getState('allowSelection') &&\r\n controller.getState('isSelectionMultiple')\r\n ? true\r\n : undefined,\r\n 'aria-colcount': controller.head.rows[0]?.cells.length || 0,\r\n 'aria-rowcount':\r\n controller.head.rows.length + controller.body.rows.length,\r\n };\r\n }\r\n\r\n return {};\r\n }\r\n}\r\n"],"names":["__publicField"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/data/primitive/Element.ts","../src/data/primitive/Cell.ts","../src/data/primitive/Row.ts","../src/data/primitive/AdditionalRow.ts","../src/data/primitive/AdditionalRowContent.ts","../src/data/primitive/AdditionalCell.ts","../src/data/primitive/RowsGroup.ts","../src/data/body/TableBody.ts","../src/data/head/Column.ts","../src/data/head/Columns.ts","../src/data/filter/Filter.ts","../src/data/head/NullFilter.ts","../src/data/filter/DateFilter.ts","../src/data/head/Filters.ts","../src/data/head/TableHead.ts","../src/data/plugins/TablePlugin.tsx","../src/data/TableController.ts","../src/data/plugins/FocusControllerPlugin/useFocusByClick.ts","../src/data/plugins/FocusControllerPlugin/useFocusByKey.ts","../src/data/plugins/FocusControllerPlugin/index.tsx","../src/data/plugins/WaiAriaPlugin.ts"],"sourcesContent":["import { action, makeObservable, observable } from 'mobx';\r\nimport type { TableController } from '../TableController';\r\n\r\nconst voidTable = {} as TableController;\r\n\r\nexport type ElementBaseState = {\r\n properties?: Record<string, unknown>;\r\n};\r\n\r\nexport abstract class Element<T extends ElementBaseState> {\r\n protected table: TableController = voidTable;\r\n\r\n constructor(protected state: T) {\r\n makeObservable<Element<T>, 'state'>(this, {\r\n state: observable,\r\n setState: action,\r\n });\r\n }\r\n\r\n public getTable() {\r\n return this.table;\r\n }\r\n\r\n public setTable(table: null | TableController) {\r\n this.table = table || voidTable;\r\n return this;\r\n }\r\n\r\n public getState<K extends keyof T>(prop: K) {\r\n return this.state[prop];\r\n }\r\n\r\n public setState(cb: (s: T) => T): this;\r\n public setState<K extends keyof T>(prop: K, value: T[K]): this;\r\n public setState<K extends keyof T>(prop: K | ((s: T) => T), value?: T[K]) {\r\n if (typeof prop === 'function') {\r\n this.state = prop(this.state);\r\n } else {\r\n this.state[prop] = value!;\r\n }\r\n return this;\r\n }\r\n}\r\n","import type { ThHTMLAttributes, ReactNode, FC } from 'react';\r\nimport { Element } from './Element';\r\nimport type { Row } from './Row';\r\n\r\nexport type CellState<T extends CellState<any> = CellState<any>> = {\r\n colName: string;\r\n\r\n content?: ReactNode;\r\n className?: string;\r\n isFocused?: boolean;\r\n isHidden?: boolean;\r\n tag?: 'td' | 'th;';\r\n\r\n Renderer?: FC<{ cell: Cell<T> }>;\r\n domProperties?: ThHTMLAttributes<HTMLTableCellElement>;\r\n properties?: Record<string, unknown>;\r\n};\r\n\r\nexport class Cell<\r\n State extends CellState<any> = CellState<any>,\r\n> extends Element<State> {\r\n protected parentRow: Row | null = null;\r\n\r\n getColumnName() {\r\n return this.getState('colName');\r\n }\r\n\r\n getIndex() {\r\n return this.getRow()!.getCellIndex(this);\r\n }\r\n\r\n getRow() {\r\n return this.parentRow;\r\n }\r\n\r\n setRow(row: Row | null) {\r\n this.parentRow = row;\r\n return this;\r\n }\r\n\r\n /**\r\n *\r\n * @param doFocus - If true, the cell will be focused after being set as the focused cell.\r\n * If false, the cell will contain the tabIndex = 0 but will not be focused.\r\n */\r\n focus(doFocus: boolean = true) {\r\n this.table.setFocusedCell(this, doFocus);\r\n }\r\n\r\n updateState(state: Partial<State>) {\r\n this.state = { ...this.state, ...state };\r\n }\r\n}\r\n","import { Element } from './Element';\r\nimport { Cell, type CellState } from './Cell';\r\nimport { TableController } from '../TableController';\r\nimport { computed, makeObservable } from 'mobx';\r\nimport type { RowsGroup, RowsGroupBaseState } from './RowsGroup';\r\nimport type { HTMLAttributes } from 'react';\r\nimport { AdditionalCell } from './AdditionalCell';\r\n\r\nexport type RowProperties = {\r\n id: string;\r\n cells: Cell[];\r\n\r\n isExpandible?: boolean;\r\n isExpanded?: boolean;\r\n isHidden?: boolean;\r\n isSelectable?: boolean;\r\n isSelected?: boolean;\r\n\r\n domProperties?: HTMLAttributes<HTMLTableRowElement>;\r\n properties?: Record<string, unknown>;\r\n};\r\n\r\nexport type TBuildRow = Omit<RowProperties, 'cells'> & {\r\n cells: (Omit<CellState, 'colName'> & { colName?: string })[];\r\n};\r\n\r\nexport type RowState = Omit<RowProperties, 'isSelected'>;\r\n\r\nexport class Row extends Element<RowState> {\r\n protected container: null | RowsGroup<RowsGroupBaseState> =\r\n {} as RowsGroup<RowsGroupBaseState>;\r\n\r\n hiddenCells: Map<string, Cell> = new Map();\r\n\r\n addCell(cell: Cell) {\r\n this.state.cells.push(cell);\r\n this.attachCell(cell);\r\n return this;\r\n }\r\n\r\n addCellAfter(anchor: Cell, newElement: Cell) {\r\n const index = this.state.cells.indexOf(anchor) + 1;\r\n\r\n if (index !== -1) {\r\n this.attachCell(newElement);\r\n this.state.cells.splice(index, 0, newElement);\r\n }\r\n }\r\n\r\n addCellBefore(anchor: Cell, newElement: Cell) {\r\n const index = this.state.cells.indexOf(anchor);\r\n\r\n if (index !== -1) {\r\n this.attachCell(newElement);\r\n this.state.cells.splice(index, 0, newElement);\r\n }\r\n }\r\n\r\n build(data: TBuildRow) {\r\n this.hiddenCells.clear();\r\n\r\n for (let i = 0; i < data.cells.length; i++) {\r\n const cell = data.cells[i];\r\n\r\n const col = cell.colName\r\n ? this.table.head.getHeaderRow()!.getColumn(cell.colName)!\r\n : this.table.head.getHeaderRow()!.getColumns()[i]!;\r\n\r\n const cellInstance = new Cell({\r\n ...cell,\r\n colName: col?.getState('colName'),\r\n });\r\n\r\n if (col?.isVisible()) {\r\n const currentCell = this.state.cells[i - this.hiddenCells.size];\r\n\r\n if (!currentCell) {\r\n this.addCell(cellInstance);\r\n } else {\r\n currentCell.updateState({\r\n ...cell,\r\n colName: col?.getState('colName'),\r\n });\r\n }\r\n } else {\r\n this.hiddenCells.set(col?.getColumnName(), cellInstance);\r\n }\r\n }\r\n this.cells.splice(data.cells.length - this.hiddenCells.size);\r\n }\r\n\r\n constructor(\r\n id: string,\r\n protected properties?: Omit<RowProperties, 'id'>,\r\n ) {\r\n const { cells, isSelected, ...state } = properties || {};\r\n super({ id, ...state, cells: cells || [] });\r\n makeObservable(this, {\r\n isSelected: computed,\r\n });\r\n }\r\n\r\n get cells(): Cell[] {\r\n const hasAdditionalColumn: boolean =\r\n !!this.table.getState('onRowExpand') ||\r\n (this.table.head.getFiltersRow()?.getFiltersInTable()?.length || 0) > 0;\r\n\r\n let additionalCell: Cell | null = null;\r\n if (hasAdditionalColumn) {\r\n additionalCell = new AdditionalCell();\r\n additionalCell.setRow(this);\r\n additionalCell.setTable(this.table);\r\n }\r\n\r\n return [additionalCell, ...this.state.cells].filter((f): f is Cell =>\r\n Boolean(f),\r\n );\r\n }\r\n\r\n get isSelected() {\r\n return this.table.isSelected(this);\r\n }\r\n\r\n getCellByColumnName(colName: string) {\r\n return this.cells.find((c) => c.getState('colName') === colName);\r\n }\r\n\r\n getCellByIndex(index: number) {\r\n return this.cells[index];\r\n }\r\n\r\n getCellIndex(cell: Cell) {\r\n return this.cells.indexOf(cell);\r\n }\r\n\r\n getContainer() {\r\n return this.container;\r\n }\r\n\r\n getFollowingRow() {\r\n const containerRows = [...this.container!.getState('rows').values()];\r\n const index = containerRows.findIndex(\r\n (r) => r.getState('id') === this.state.id,\r\n );\r\n return containerRows[index + 1] || null;\r\n }\r\n\r\n getHiddenCell(colName: string) {\r\n return this.hiddenCells.get(colName);\r\n }\r\n\r\n getIndex() {\r\n return this.getContainer()!.getRowIndex(this);\r\n }\r\n\r\n getPreviousRow() {\r\n const containerRows = [...this.container!.getState('rows').values()];\r\n const index = containerRows.findIndex(\r\n (r) => r.getState('id') === this.state.id,\r\n );\r\n return containerRows[index - 1] || null;\r\n }\r\n\r\n insertAfter(row: Row) {\r\n this.getContainer()?.insertAfter(this, row);\r\n }\r\n\r\n insertBefore(row: Row) {\r\n this.getContainer()?.insertBefore(this, row);\r\n }\r\n\r\n remove() {\r\n this.getContainer()?.removeRow(this);\r\n }\r\n\r\n replaceCellOnIndex(index: number, newCell: Cell) {\r\n const current = this.cells[index];\r\n if (!current) {\r\n throw new Error('IndexOutOfBounds - The provided index is out of bounds');\r\n }\r\n\r\n this.cells[index] = newCell;\r\n this.attachCell(newCell);\r\n\r\n this.detachCell(current);\r\n }\r\n\r\n public scrollIntoView() {\r\n this.table.scrollRowIntoView(this);\r\n }\r\n\r\n public setContainer(container: null | RowsGroup<RowsGroupBaseState>) {\r\n this.container = container;\r\n return this;\r\n }\r\n\r\n public setTable(table: null | TableController) {\r\n super.setTable(table);\r\n\r\n this.state.cells.forEach((c) => c.setTable(table));\r\n\r\n if (table && this.properties?.isSelected) {\r\n table.toggleRowSelection(this, true);\r\n }\r\n\r\n return this;\r\n }\r\n\r\n public swap(withRow: Row) {\r\n this.getContainer()?.swapRows(this, withRow);\r\n }\r\n\r\n public toggleSelection(forceState?: boolean) {\r\n this.table.toggleRowSelection(this, forceState);\r\n }\r\n\r\n protected attachCell(cell: Cell) {\r\n cell.setTable(this.table);\r\n cell.setRow(this);\r\n }\r\n\r\n protected detachCell(cell: Cell) {\r\n cell.setTable(null);\r\n cell.setRow(null);\r\n }\r\n}\r\n","import { Cell, CellState } from './Cell';\r\nimport { Row } from './Row';\r\n\r\nexport class AdditionalRow extends Row {\r\n constructor(id: string) {\r\n super(id);\r\n this.setState('isSelectable', false);\r\n }\r\n\r\n get cells(): Cell<CellState<any>>[] {\r\n return this.state.cells;\r\n }\r\n}\r\n","import { ReactNode } from 'react';\r\nimport { Cell, CellState } from './Cell';\r\n\r\nexport class AdditionalRowContent extends Cell<\r\n CellState & { expanded: boolean }\r\n> {\r\n constructor(content: ReactNode) {\r\n super({\r\n expanded: false,\r\n colName: '__additional',\r\n content,\r\n });\r\n }\r\n\r\n public getState<K extends keyof CellState | 'expanded'>(\r\n prop: K,\r\n ): (CellState & { expanded: boolean })[K] {\r\n if (prop === 'domProperties') {\r\n return {\r\n colSpan: this.table.head.getHeaderRow()?.getShownColumns().length || 0,\r\n } as any;\r\n }\r\n\r\n return super.getState(prop);\r\n }\r\n}\r\n","import { AdditionalRow } from './AdditionalRow';\r\nimport { AdditionalRowContent } from './AdditionalRowContent';\r\nimport { Cell, CellState } from './Cell';\r\n\r\nexport class AdditionalCell extends Cell<CellState & { expanded: boolean }> {\r\n constructor() {\r\n super({\r\n expanded: false,\r\n colName: '__additional',\r\n domProperties: {\r\n className: 'additionalColumn',\r\n style: {\r\n width: '50px',\r\n },\r\n },\r\n });\r\n }\r\n\r\n async onToggle() {\r\n const currentIndex = this.getRow()!.getIndex()!;\r\n if (\r\n !(\r\n this.getTable().body.getRowByIndex(currentIndex + 1) instanceof\r\n AdditionalRow\r\n )\r\n ) {\r\n const res = await this.table.onRowExpand(this.getRow()!);\r\n\r\n if (res !== false) {\r\n const newRow = new AdditionalRow(\r\n `${this.getRow()?.getState('id')}__additional`,\r\n );\r\n\r\n this.getTable().body.insertAfter(this.getRow()!, newRow);\r\n\r\n newRow.addCell(new AdditionalRowContent(res));\r\n\r\n this.state.expanded = true;\r\n }\r\n } else {\r\n this.getTable()\r\n .body.getRowByIndex(currentIndex + 1)\r\n .remove();\r\n this.state.expanded = false;\r\n }\r\n }\r\n}\r\n","import { action, computed, makeObservable } from 'mobx';\r\nimport type { Row } from './Row';\r\nimport type { TableController } from '../TableController';\r\nimport { Element, type ElementBaseState } from './Element';\r\nimport type { HTMLAttributes } from 'react';\r\n\r\nexport type RowsGroupBaseState = ElementBaseState & {\r\n rows: Row[];\r\n domProperties?: HTMLAttributes<HTMLTableSectionElement>;\r\n properties?: Record<string, unknown>;\r\n};\r\n\r\nexport class RowsGroup<U extends RowsGroupBaseState> extends Element<\r\n U & RowsGroupBaseState\r\n> {\r\n constructor(\r\n public table: TableController,\r\n state: U,\r\n ) {\r\n super({ ...state, rows: [] });\r\n makeObservable(this, { swapRows: action, rows: computed });\r\n }\r\n\r\n get rows() {\r\n return this.state.rows;\r\n }\r\n\r\n addRow(row: Row) {\r\n this.state.rows.push(row);\r\n row.setTable(this.table);\r\n row.setContainer(this);\r\n\r\n this.runAddRowPlugin(row);\r\n\r\n return this;\r\n }\r\n\r\n addRows(rows: Row[]) {\r\n rows.forEach(this.addRow.bind(this));\r\n return this;\r\n }\r\n\r\n clear() {\r\n this.state.rows.forEach((row) => {\r\n row.setContainer(null);\r\n row.setTable(null);\r\n });\r\n return this.rows.splice(0, this.rows.length);\r\n }\r\n\r\n getRowById(id: string | number) {\r\n return this.state.rows.find((c) => c.getState('id') === id);\r\n }\r\n\r\n getRowByIndex(index: number) {\r\n return this.state.rows[index];\r\n }\r\n\r\n getRowIndex(row: Row) {\r\n return this.state.rows.indexOf(row);\r\n }\r\n\r\n insertAfter(anchor: Row, newElement: Row) {\r\n if (anchor.getContainer() === this) {\r\n const index = this.state.rows.indexOf(anchor);\r\n this.state.rows.splice(index + 1, 0, newElement);\r\n newElement.setTable(this.table);\r\n newElement.setContainer(this);\r\n this.runAddRowPlugin(newElement);\r\n }\r\n }\r\n\r\n insertBefore(anchor: Row, newElement: Row) {\r\n if (anchor.getContainer() === this) {\r\n const index = this.state.rows.indexOf(anchor);\r\n this.state.rows.splice(index, 0, newElement);\r\n newElement.setTable(this.table);\r\n newElement.setContainer(this);\r\n this.runAddRowPlugin(newElement);\r\n }\r\n }\r\n\r\n removeRow(row: Row) {\r\n if (row.getContainer() === this) {\r\n row.setContainer(null);\r\n this.state.rows = this.state.rows.filter((r) => r !== row);\r\n this.table.removeRow(row);\r\n }\r\n }\r\n\r\n swapRows(a: Row, b: Row) {\r\n if (a?.getContainer() === this && b?.getContainer() === this) {\r\n const aIndex = this.state.rows.findIndex(\r\n (r) => r.getState?.('id') === a.getState?.('id'),\r\n );\r\n const bIndex = this.state.rows.findIndex(\r\n (r) => r.getState?.('id') === b.getState?.('id'),\r\n );\r\n if (aIndex !== -1 && bIndex !== -1) {\r\n this.state.rows[aIndex] = b;\r\n this.state.rows[bIndex] = a;\r\n }\r\n }\r\n }\r\n\r\n protected runAddRowPlugin(newRow: Row) {\r\n const plugins = this.getTable().getApplicablePlugins('onAddRow');\r\n plugins.forEach((c) => c(this, newRow));\r\n }\r\n}\r\n","import type { ElementBaseState } from '../primitive/Element';\r\nimport { RowsGroup, type RowsGroupBaseState } from '../primitive/RowsGroup';\r\nimport { Row, type TBuildRow } from '../primitive/Row';\r\nimport type { TableController } from '../TableController';\r\nimport { AdditionalRow } from '../primitive/AdditionalRow';\r\n\r\n// eslint-disable-next-line @typescript-eslint/ban-types\r\nexport type TableBodyState = ElementBaseState & RowsGroupBaseState & {};\r\n\r\nexport type TBuildBody = {\r\n rows: TBuildRow[];\r\n};\r\n\r\nexport class TableBody extends RowsGroup<TableBodyState> {\r\n constructor(table: TableController) {\r\n super(table, { rows: [] });\r\n }\r\n\r\n build(data: TBuildBody) {\r\n let i = 0;\r\n for (const row of data.rows) {\r\n let currentRow: Row | undefined = this.rows[i++];\r\n if (currentRow instanceof AdditionalRow) {\r\n currentRow.remove();\r\n currentRow = undefined;\r\n }\r\n const bodyRow = currentRow ?? new Row(row.id);\r\n\r\n if (!currentRow) {\r\n this.addRow(bodyRow);\r\n }\r\n bodyRow.build(row);\r\n }\r\n this.rows.splice(data.rows.length);\r\n }\r\n}\r\n","import { TSortType } from '@apia/util';\r\nimport { Cell, CellState } from '../primitive/Cell';\r\n\r\nexport type ColumnState<T extends ColumnState<any> = ColumnState<any>> =\r\n CellState<T> & {\r\n asAdditional?: boolean;\r\n sortable?: boolean;\r\n sortState?: TSortType;\r\n };\r\n\r\nexport class Column extends Cell<ColumnState> {\r\n public asAdditional() {\r\n return !!this.state.asAdditional;\r\n }\r\n\r\n public isHidden() {\r\n return !!this.state.isHidden;\r\n }\r\n\r\n /**\r\n * A visible column is that which is not additional nor hidden.\r\n */\r\n public isVisible() {\r\n return !this.asAdditional() && !this.isHidden();\r\n }\r\n\r\n public sort(order?: ColumnState['sortState']) {\r\n order = order ?? (this.getState('sortState') === 'ASC' ? 'DESC' : 'ASC');\r\n\r\n this.setState('sortState', order);\r\n }\r\n}\r\n","import { Row } from '../primitive/Row';\r\nimport { Column, ColumnState } from './Column';\r\n\r\nexport class Columns extends Row {\r\n columns: Map<string, Column> = new Map();\r\n\r\n buildColumnsRow(columns: ColumnState[]) {\r\n let i = 0;\r\n for (const column of columns) {\r\n if (!this.columns.has(column.colName)) {\r\n this.columns.set(column.colName, new Column(column));\r\n } else {\r\n this.columns.get(column.colName)?.updateState(column);\r\n }\r\n const currentColumn = this.columns.get(column.colName) as Column;\r\n\r\n if (currentColumn.isVisible()) {\r\n this.state.cells[i++] = currentColumn;\r\n this.attachCell(currentColumn);\r\n }\r\n }\r\n }\r\n\r\n getColumn(name: string) {\r\n return this.getCellByColumnName(name) as Column;\r\n }\r\n\r\n getColumns() {\r\n return Array.from(this.columns.values());\r\n }\r\n\r\n getAdditionalColumns() {\r\n return this.getColumns().filter((c) => c.asAdditional());\r\n }\r\n\r\n getShownColumns() {\r\n return (this.cells ?? []) as Column[];\r\n }\r\n}\r\n","import { Cell, CellState } from '../primitive/Cell';\r\nimport { FC } from 'react';\r\nimport type { Filters } from '../head/Filters';\r\nimport { TableEvents } from '../TableController';\r\n\r\nexport type FilterRenderer = FC<{ cell: Filter<any> }>;\r\n\r\nexport type FilterState<\r\n ValueType = string,\r\n T extends FilterState<any> = FilterState<ValueType, any>,\r\n> = CellState<T> & {\r\n asAdditional?: boolean;\r\n name: string;\r\n columnName?: string;\r\n isRequired?: boolean;\r\n Renderer?: FilterRenderer;\r\n runAutomatically?: boolean;\r\n title: string;\r\n tooltip: string;\r\n value: ValueType;\r\n type:\r\n | 'DATE'\r\n | 'INPUT'\r\n | 'COMBO'\r\n | 'DATERANGE'\r\n | 'SIZE'\r\n | 'SIZERANGE'\r\n | 'DATEHOUR'\r\n | 'DATEHOURRANGE';\r\n};\r\n\r\nexport type FilterEvents = Pick<\r\n TableEvents,\r\n 'filterBlur' | 'filterChange' | 'filterPressEnter'\r\n>;\r\n\r\nexport class Filter<ValueType = string> extends Cell<FilterState<ValueType>> {\r\n public asAdditional() {\r\n return !!this.state.asAdditional || !this.getCorrespondingColumn();\r\n }\r\n\r\n constructor(state: FilterState<ValueType>) {\r\n super(state);\r\n }\r\n\r\n clear() {\r\n this.setValue('' as ValueType);\r\n }\r\n\r\n getCorrespondingColumn() {\r\n return this.getRow()\r\n .getContainer()\r\n .getHeaderRow()\r\n ?.getShownColumns()\r\n .find((c) => c.getState('colName') === this.getState('colName'));\r\n }\r\n\r\n fire(ev: keyof FilterEvents) {\r\n this.table.emit(ev, this);\r\n }\r\n\r\n getRow() {\r\n return super.getRow() as Filters;\r\n }\r\n\r\n getValue() {\r\n return this.state.value;\r\n }\r\n\r\n hasValue() {\r\n return !!this.getValue();\r\n }\r\n\r\n setValue(val: ValueType) {\r\n this.state.value = val;\r\n this.table.emit('filterChange', this);\r\n }\r\n\r\n validate() {\r\n return this.state.isRequired ? this.hasValue() : true;\r\n }\r\n}\r\n","import { Filter, FilterEvents } from '../filter/Filter';\r\n\r\nexport class NullFilter extends Filter {\r\n constructor(colName: string) {\r\n super({ colName } as any);\r\n }\r\n\r\n clear() {}\r\n\r\n fire(_: keyof FilterEvents): void {}\r\n\r\n getValue() {\r\n return undefined as any;\r\n }\r\n\r\n hasValue() {\r\n return false;\r\n }\r\n\r\n setValue(): void {}\r\n\r\n validate() {\r\n return true;\r\n }\r\n}\r\n","import { Filter } from './Filter';\r\n\r\nexport class DateFilter extends Filter<number | null> {}\r\n","import { arrayOrArray } from '@apia/util';\r\nimport { Row } from '../primitive/Row';\r\nimport { Filter, FilterState } from '../filter/Filter';\r\nimport type { TableHead } from './TableHead';\r\nimport { NullFilter } from './NullFilter';\r\nimport { DateFilter } from '../filter/DateFilter';\r\n\r\nexport class Filters extends Row {\r\n filters: Map<string, Filter<any>> = new Map();\r\n\r\n private buildFilterFromDefinition(def: FilterState<any>) {\r\n switch (def.type) {\r\n case 'DATE':\r\n return new DateFilter(def);\r\n default:\r\n return new Filter(def);\r\n }\r\n }\r\n\r\n buildFilters(filters: Omit<FilterState, 'colName'>[]) {\r\n let hasFiltersInRow = false;\r\n\r\n const columns = arrayOrArray(\r\n this.getContainer().getHeaderRow()?.getShownColumns(),\r\n );\r\n\r\n for (const stored of this.filters.values()) {\r\n if (!filters.find((c) => c.name === stored.getState('name'))) {\r\n this.filters.delete(stored.getState('name'));\r\n }\r\n }\r\n\r\n for (let i = 0; i < columns.length; i++) {\r\n const column = columns[i];\r\n\r\n const filter = filters.find(\r\n (c) => c.columnName === column.getState('colName') && !c.asAdditional,\r\n );\r\n if (filter) {\r\n const currentFilterCell = this.getCellByIndex(i) as Filter;\r\n\r\n const filterCell =\r\n currentFilterCell ??\r\n this.buildFilterFromDefinition({\r\n ...filter,\r\n colName: filter.columnName!,\r\n });\r\n this.filters.set(filter.name, filterCell);\r\n\r\n if (!currentFilterCell) {\r\n this.addCell(filterCell);\r\n } else {\r\n const { value, ...filterState } = filter;\r\n currentFilterCell.updateState(filterState);\r\n }\r\n\r\n hasFiltersInRow = true;\r\n (filter as any).added = true;\r\n } else {\r\n if (!this.getCellByIndex(i)) {\r\n this.addCell(new NullFilter(column.getColumnName()));\r\n }\r\n }\r\n }\r\n\r\n for (const filter of filters) {\r\n if (!(filter as any).added) {\r\n const filterCell =\r\n this.filters.get(filter.name) ??\r\n this.buildFilterFromDefinition({\r\n ...filter,\r\n colName: filter.columnName!,\r\n });\r\n filterCell.setTable(this.table);\r\n this.filters.set(filter.name, filterCell);\r\n }\r\n }\r\n\r\n return hasFiltersInRow;\r\n }\r\n\r\n getAdditionalFilters() {\r\n return this.getFilters().filter(\r\n (c) =>\r\n c.getState('asAdditional') ||\r\n this.getContainer()\r\n .getHeaderRow()\r\n ?.columns.get(c.getState('colName'))\r\n ?.asAdditional(),\r\n );\r\n }\r\n\r\n getCells() {\r\n return this.cells.map((c) => c as Filter);\r\n }\r\n\r\n getContainer() {\r\n return this.container as TableHead;\r\n }\r\n\r\n getFilter(name: string) {\r\n return this.filters.get(name);\r\n }\r\n\r\n getFilters() {\r\n return Array.from(this.filters.values());\r\n }\r\n\r\n getFiltersInTable() {\r\n return this.getFilters().filter((f) => {\r\n return !(\r\n f.getState('asAdditional') ||\r\n this.getContainer()\r\n .getHeaderRow()\r\n ?.columns.get(f.getState('colName'))\r\n ?.isVisible() === false\r\n );\r\n });\r\n }\r\n}\r\n","import { ColumnState } from './Column';\r\nimport { FilterState } from '../filter/Filter';\r\nimport type { ElementBaseState } from '../primitive/Element';\r\nimport { RowsGroup, type RowsGroupBaseState } from '../primitive/RowsGroup';\r\nimport type { TableController } from '../TableController';\r\nimport { Columns } from './Columns';\r\nimport { Filters } from './Filters';\r\n\r\n// eslint-disable-next-line @typescript-eslint/ban-types\r\nexport type TableHeadState = ElementBaseState & RowsGroupBaseState & {};\r\n\r\nexport type TBuildHead = {\r\n columns: ColumnState[];\r\n filters: Omit<FilterState, 'colName'>[];\r\n};\r\n\r\nexport class TableHead extends RowsGroup<TableHeadState> {\r\n constructor(table: TableController) {\r\n super(table, { rows: [] });\r\n }\r\n\r\n columnsRow: Columns | null = null;\r\n filtersRow: Filters | null = null;\r\n\r\n getHeaderRow(): Columns | undefined {\r\n return this.rows[0] instanceof Columns ? this.rows[0] : undefined;\r\n }\r\n\r\n getFiltersRow(): Filters | undefined {\r\n return this.rows[1] instanceof Filters ? this.rows[1] : undefined;\r\n }\r\n\r\n build(data: TBuildHead) {\r\n if (data.columns.length) {\r\n /**\r\n * Generate main header row\r\n */\r\n\r\n const currentHeaderRow = this.rows[0];\r\n\r\n if (currentHeaderRow && !(currentHeaderRow instanceof Columns)) {\r\n currentHeaderRow.remove();\r\n }\r\n\r\n this.columnsRow = (currentHeaderRow ?? new Columns('header')) as Columns;\r\n this.columnsRow.setTable(this.table);\r\n this.columnsRow.setContainer(this);\r\n\r\n if (!currentHeaderRow) {\r\n this.addRow(this.columnsRow);\r\n }\r\n\r\n this.columnsRow.buildColumnsRow(data.columns);\r\n }\r\n\r\n if (data.filters.length) {\r\n /**\r\n * Generate filters row\r\n */\r\n\r\n const currentFiltersRow = this.getFiltersRow();\r\n this.filtersRow = currentFiltersRow ?? new Filters('filters');\r\n this.filtersRow.setTable(this.table);\r\n this.filtersRow.setContainer(this);\r\n\r\n const hasFilter = this.filtersRow.buildFilters(data.filters);\r\n if (hasFilter && !currentFiltersRow) {\r\n this.addRow(this.filtersRow);\r\n }\r\n }\r\n }\r\n}\r\n","import type { HTMLAttributes } from 'react';\r\nimport {\r\n FocusControllerPlugin,\r\n WaiAriaPlugin,\r\n type TableController,\r\n type Row,\r\n type Cell,\r\n} from '..';\r\nimport type { Element } from '../primitive/Element';\r\nimport { RowsGroup } from '../primitive/RowsGroup';\r\n\r\nexport type TDistinctorProperties = HTMLAttributes<HTMLElement>;\r\n\r\n/**\r\n * This class is the default way to customize the table behavior.\r\n */\r\nexport interface TablePlugin {\r\n getRenderers?: () => {\r\n cell?: React.FC<{\r\n cell: Cell;\r\n }>;\r\n };\r\n\r\n onAddRow?: (\r\n controller: TableController,\r\n target: RowsGroup<any>,\r\n newRow: Row,\r\n ) => void;\r\n\r\n onResize?: (\r\n controller: TableController,\r\n colName: string,\r\n newSize: number,\r\n ) => void;\r\n\r\n /**\r\n * This hook is called when the table is renderized.\r\n * The elements returned by this hook will be added to the dom of the element.\r\n */\r\n useElementDomProps?: (\r\n controller: TableController,\r\n _element: TableController | Element<any>,\r\n _context: any,\r\n ) => HTMLAttributes<HTMLElement>;\r\n}\r\n\r\nexport const defaultPlugins = () => [\r\n new WaiAriaPlugin(),\r\n new FocusControllerPlugin(),\r\n];\r\n","import {\r\n arrayOrArray,\r\n EventEmitter,\r\n TLoadStructure,\r\n TSortType,\r\n} from '@apia/util';\r\nimport { Cell } from './primitive/Cell';\r\nimport { Row } from './primitive/Row';\r\nimport { TableBody, TBuildBody } from './body/TableBody';\r\nimport { TableHead, type TBuildHead } from './head/TableHead';\r\nimport { action, computed, makeObservable, observable } from 'mobx';\r\nimport { defaultPlugins, TablePlugin } from './plugins/TablePlugin';\r\nimport type { Column } from './head/Column';\r\nimport type { Filter } from './filter/Filter';\r\nimport { ReactNode } from 'react';\r\n\r\nexport type TableState = {\r\n allowEdition: boolean;\r\n allowResize: boolean;\r\n allowSelection: boolean;\r\n editionMode: boolean;\r\n focusedCell: Cell | null;\r\n isSelectionMultiple: boolean;\r\n onRowExpand?: (row: Row) => Promise<false | ReactNode>;\r\n plugins: TablePlugin[];\r\n selection: Set<Row>;\r\n};\r\n\r\nexport type TBuildTable = TBuildHead & TBuildBody;\r\n\r\nexport type TableEvents = {\r\n cellFocus: { cell: Cell; doFocus: boolean };\r\n columnSort: Column;\r\n editionMode: boolean;\r\n filterChange: Filter<any>;\r\n filterPressEnter: Filter<any>;\r\n filterBlur: Filter<any>;\r\n keyEnter: null;\r\n rowDelete: Row;\r\n scrollIntoRow: Row;\r\n selectionChange: Row[];\r\n};\r\n\r\nexport class TableController extends EventEmitter<TableEvents> {\r\n protected state: TableState = {\r\n allowEdition: true,\r\n allowResize: true,\r\n allowSelection: true,\r\n editionMode: false,\r\n focusedCell: null,\r\n plugins: [],\r\n isSelectionMultiple: true,\r\n selection: new Set(),\r\n };\r\n\r\n constructor(props?: Partial<Omit<TableState, 'selection'>>) {\r\n super();\r\n Object.assign(this.state, props || {});\r\n if (!props?.plugins) {\r\n this.state.plugins.push(...defaultPlugins());\r\n }\r\n\r\n makeObservable<TableController, 'state'>(this, {\r\n build: action,\r\n clearSelection: action,\r\n isEditionMode: computed,\r\n setFocusedCell: action,\r\n state: observable,\r\n toggleRowSelection: action,\r\n toggleEditionMode: action,\r\n });\r\n }\r\n\r\n public body = new TableBody(this);\r\n public head = new TableHead(this);\r\n\r\n /**\r\n * Clears all data in the table, except for the events\r\n * listeners and recreates the structure based on the passed data.\r\n */\r\n public build(data: TBuildTable) {\r\n this.head.build(data);\r\n this.body.build(data);\r\n\r\n this.restoreFocus();\r\n }\r\n\r\n public fromGenericTable(table: TLoadStructure) {\r\n /**\r\n * Parse structure\r\n */\r\n this.setState('allowEdition', table.behavior.allowEdition);\r\n this.setState('allowSelection', table.behavior.allowSelection);\r\n this.setState('isSelectionMultiple', table.behavior.isMultipleSelection);\r\n\r\n const columns = arrayOrArray(table.columns);\r\n\r\n this.build({\r\n columns: columns.map((c) => {\r\n return {\r\n colName: c.name,\r\n asAdditional: c.showAsAdditional,\r\n sortable: c.isSortable,\r\n isHidden: c.isHidden,\r\n properties: c,\r\n content: c.title,\r\n className: c.className,\r\n sortState: c.sortType,\r\n };\r\n }),\r\n filters: arrayOrArray(table.filters).map((f) => {\r\n return {\r\n name: f.name,\r\n title: f.title,\r\n tooltip: 'no tooltip',\r\n type: f.type,\r\n isRequired: f.isRequired,\r\n properties: f,\r\n runAutomatically: f.runAutomatically,\r\n columnName: f.columnName,\r\n value: f.initialValue,\r\n asAdditional: f.asAdditional,\r\n };\r\n }),\r\n rows: arrayOrArray(table.rows).map((row) => {\r\n const returnValue: TBuildTable['rows'][0] = {\r\n id: row.id,\r\n cells: arrayOrArray(row.cells).map((cell) => {\r\n const returnValue: TBuildTable['rows'][0]['cells'][0] = {\r\n content: cell.text,\r\n };\r\n return returnValue;\r\n }),\r\n isExpandible: false,\r\n isSelectable: !row.isDisabled,\r\n isSelected: row.isSelected,\r\n domProperties: {},\r\n properties: row,\r\n };\r\n return returnValue;\r\n }),\r\n });\r\n }\r\n\r\n public getColumn(name: string) {\r\n return this.head.getHeaderRow()?.getColumn(name);\r\n }\r\n\r\n public getColumns() {\r\n return this.head.getHeaderRow()?.getColumns() || [];\r\n }\r\n\r\n public getFilter(name: string) {\r\n return this.head.getFiltersRow()?.getFilter(name);\r\n }\r\n\r\n public getFilters() {\r\n return this.head.getFiltersRow()?.getFilters() || [];\r\n }\r\n\r\n public getRowById(id: string | number) {\r\n return this.head.getRowById(id) || this.body.getRowById(id);\r\n }\r\n\r\n public hasAdditionalContent() {\r\n return (\r\n !!this.head\r\n .getHeaderRow()\r\n ?.getColumns()\r\n .find((c) => c.asAdditional()) || this.getState('onRowExpand')\r\n );\r\n }\r\n\r\n public onRowExpand(row: Row) {\r\n return (\r\n this.getState('onRowExpand')?.(row) ||\r\n this.head\r\n .getHeaderRow()\r\n ?.getAdditionalColumns()\r\n .map(\r\n (column) =>\r\n `${column.getState('content')}: ${row.getHiddenCell(column.getColumnName())?.getState('content')}`,\r\n )\r\n .join(', ')\r\n );\r\n }\r\n\r\n /**\r\n * EDITION MODE\r\n */\r\n\r\n public get isEditionMode() {\r\n return this.state.editionMode;\r\n }\r\n\r\n toggleEditionMode(force?: boolean) {\r\n if (this.state.allowEdition) {\r\n this.state.editionMode = force ?? !this.state.editionMode;\r\n this.emit('editionMode', this.state.editionMode);\r\n }\r\n }\r\n\r\n /**\r\n * SELECTION\r\n */\r\n\r\n clearSelection() {\r\n this.state.selection.clear();\r\n }\r\n\r\n /**\r\n * Returns the selected rows.\r\n */\r\n public getSelectedRows() {\r\n return [...this.state.selection];\r\n }\r\n\r\n public isSelected(row: Row): boolean {\r\n return this.state.selection.has(row);\r\n }\r\n\r\n public toggleColumnVisibility(colName: string, isVisible?: boolean) {\r\n isVisible =\r\n isVisible ??\r\n this.head.getHeaderRow()?.getColumn(colName).getState('isHidden');\r\n\r\n if (this.head.getHeaderRow()) {\r\n this.head\r\n .getHeaderRow()\r\n ?.getColumn(colName)\r\n .setState('isHidden', isVisible);\r\n } else {\r\n this.head.rows[0]?.cells\r\n ?.find((c) => c.getState('colName') === colName)\r\n ?.setState('isHidden', !isVisible);\r\n }\r\n }\r\n\r\n public toggleFiltersRowVisibility() {\r\n this.head\r\n .getFiltersRow()\r\n ?.setState('isHidden', !this.head.getFiltersRow()?.getState('isHidden'));\r\n }\r\n\r\n /**\r\n * Toggles the selection state of a given row.\r\n *\r\n * If the `isSelected` parameter is provided, it explicitly sets the selection\r\n * state of the row to the given value (`true` for selected, `false` for deselected).\r\n * If `isSelected` is not provided, the method will toggle the current selection state\r\n * of the row (i.e., select it if it's currently not selected, or deselect it if it is).\r\n *\r\n * @param row - The row to toggle selection for.\r\n * @param isSelected - Optional. A boolean indicating whether the row should be selected (`true`)\r\n * or deselected (`false`). If not provided, the selection state will be toggled.\r\n */\r\n public toggleRowSelection(row: Row, isSelected?: boolean) {\r\n if (this.state.allowSelection) {\r\n isSelected = isSelected ?? !this.state.selection.has(row);\r\n\r\n if (isSelected) {\r\n if (row.getState('isSelectable') !== false) {\r\n this.state.selection.add(row);\r\n }\r\n } else {\r\n this.state.selection.delete(row);\r\n }\r\n\r\n this.emit('selectionChange', [...this.state.selection.values()]);\r\n }\r\n }\r\n\r\n protected restoreFocus() {\r\n if (!this.state.focusedCell || this.state.focusedCell.getTable() !== this) {\r\n this.state.focusedCell =\r\n this.body.getState('rows').values().next().value?.cells[0] ||\r\n this.head.getState('rows').values().next().value?.cells[0] ||\r\n null;\r\n }\r\n if (this.state.focusedCell) {\r\n this.emit('cellFocus', { cell: this.state.focusedCell, doFocus: false });\r\n }\r\n }\r\n\r\n removeRow(row: Row) {\r\n if (row.getTable() === this) {\r\n row.setTable(null);\r\n\r\n this.head.removeRow(row);\r\n this.body.removeRow(row);\r\n\r\n if (this.state.selection.has(row)) {\r\n this.state.selection.delete(row);\r\n this.emit('selectionChange', [...this.state.selection.values()]);\r\n }\r\n\r\n if (this.state.focusedCell?.getRow() === row) {\r\n this.restoreFocus();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * FOCUS\r\n */\r\n\r\n /**\r\n * @returns The currently focused cell in the table.\r\n */\r\n public getFocusedCell() {\r\n return this.state.focusedCell;\r\n }\r\n\r\n public setFocusedCell(cell: Cell, doFocus: boolean = true) {\r\n this.state.focusedCell = cell;\r\n this.emit('cellFocus', { cell, doFocus });\r\n }\r\n\r\n public setSelection(indices: number[]) {\r\n this.clearSelection();\r\n indices.forEach((index) => {\r\n const row = this.body.getRowByIndex(index);\r\n if (row) {\r\n this.toggleRowSelection(row, true);\r\n }\r\n });\r\n }\r\n\r\n public scrollRowIntoView(row: Row) {\r\n this.emit('scrollIntoRow', row);\r\n }\r\n\r\n /**\r\n * STATE\r\n */\r\n\r\n /**\r\n * Returns the current state of the `TableController` instance.\r\n *\r\n * @param prop - The property of the state to retrieve.\r\n */\r\n public getState<K extends keyof TableState>(prop: K) {\r\n return this.state[prop];\r\n }\r\n\r\n /**\r\n * Updates the state of the `TableController` instance.\r\n *\r\n * This method provides two overloads:\r\n * 1. A callback function that takes the current state and returns a new state.\r\n * 2. A key-value pair where the key is a property of the state, and the value is the new value for that property.\r\n *\r\n * @param prop - Either a callback function to update the state or the key of the state property to update.\r\n * @param value - (Optional) The new value for the specified state property. This is required if `prop` is a key.\r\n *\r\n * @returns The `TableController` instance for method chaining.\r\n *\r\n * ### Usage:\r\n *\r\n * **Using a callback function:**\r\n * ```tsx\r\n * tableController.setState((state) => ({\r\n * ...state,\r\n * allowEdition: false,\r\n * }));\r\n * ```\r\n *\r\n * **Using a key-value pair:**\r\n * ```tsx\r\n * tableController.setState('allowEdition', false);\r\n * ```\r\n */\r\n public setState(cb: (s: TableState) => TableState): this;\r\n public setState<K extends keyof TableState>(\r\n prop: K,\r\n value: TableState[K],\r\n ): this;\r\n public setState<K extends keyof TableState>(\r\n prop: K | ((s: TableState) => TableState),\r\n value?: TableState[K],\r\n ) {\r\n if (typeof prop === 'function') {\r\n this.state = prop(this.state);\r\n } else {\r\n this.state[prop] = value!;\r\n }\r\n return this;\r\n }\r\n\r\n public sortColumn(col: Column, sortState?: TSortType) {\r\n this.getColumns().forEach((c) => {\r\n if (c.getColumnName() !== col.getColumnName()) {\r\n c.sort('NONE');\r\n }\r\n });\r\n col.sort(sortState);\r\n\r\n this.emit('columnSort', col);\r\n }\r\n\r\n /**\r\n * PLUGINS\r\n */\r\n\r\n getPluginOfType<T extends TablePlugin>(\r\n clazz: new (...args: any[]) => T,\r\n ): T | undefined {\r\n return this.state.plugins.find((plugin) => plugin instanceof clazz) as\r\n | T\r\n | undefined;\r\n }\r\n\r\n /**\r\n * Sets the plugins for the table.\r\n */\r\n public setPlugins(cb: (currentPlugins: TablePlugin[]) => TablePlugin[]) {\r\n this.state.plugins = cb(this.state.plugins);\r\n }\r\n\r\n public getApplicablePlugins<K extends keyof TablePlugin>(\r\n method: K,\r\n ): ((\r\n ...args: Parameters<NonNullable<TablePlugin[K]>> extends [\r\n any,\r\n ...infer Rest,\r\n ]\r\n ? Rest\r\n : void[]\r\n ) => ReturnType<NonNullable<TablePlugin[K]>>)[] {\r\n return this.state.plugins\r\n .filter((c) => c[method] !== undefined)\r\n .map((c) => (c[method]! as any).bind(c, this)) as any;\r\n }\r\n}\r\n","import { MouseEvent, useRef } from 'react';\r\nimport { TableController } from '../..';\r\n\r\nexport function getRow(\r\n controller: TableController,\r\n rowElement: HTMLTableRowElement,\r\n) {\r\n const rowId = rowElement.dataset.rowid!;\r\n const row = controller.getRowById(rowId);\r\n return row;\r\n}\r\n\r\nexport function selectBetweenRows(\r\n controller: TableController,\r\n rowA: HTMLTableRowElement,\r\n rowB: HTMLTableRowElement,\r\n) {\r\n const relativePosition = rowA.compareDocumentPosition(rowB);\r\n let finished = false;\r\n if (relativePosition & Node.DOCUMENT_POSITION_FOLLOWING) {\r\n let current = rowA;\r\n if (rowA.closest('thead') && !rowB.closest('thead')) {\r\n current = rowA.closest('table')?.querySelector('tbody')\r\n ?.firstElementChild as HTMLTableRowElement;\r\n }\r\n while (!finished) {\r\n if (current) {\r\n getRow(controller, current)?.toggleSelection(true);\r\n finished = current === rowB;\r\n current = current.nextElementSibling as HTMLTableRowElement;\r\n } else {\r\n finished = true;\r\n }\r\n }\r\n } else if (relativePosition & Node.DOCUMENT_POSITION_PRECEDING) {\r\n let current = rowA;\r\n while (!finished) {\r\n if (current) {\r\n getRow(controller, current)?.toggleSelection(true);\r\n finished = current === rowB;\r\n current = current.previousElementSibling as HTMLTableRowElement;\r\n } else {\r\n finished = true;\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport function useFocusByClick(controller: TableController) {\r\n const lastRow = useRef<HTMLTableRowElement | null>(null);\r\n\r\n return (ev: MouseEvent) => {\r\n const { target } = ev;\r\n if (target instanceof HTMLElement) {\r\n const cellElement = target.closest('td[data-colname],th[data-colname]');\r\n const rowElement = target.closest('tr[data-rowid]');\r\n\r\n if (rowElement instanceof HTMLTableRowElement) {\r\n const row = getRow(controller, rowElement);\r\n\r\n if (row) {\r\n if (ev.shiftKey) {\r\n if (lastRow.current) {\r\n selectBetweenRows(controller, lastRow.current, rowElement);\r\n }\r\n } else if (ev.ctrlKey) {\r\n row?.toggleSelection();\r\n } else {\r\n controller.clearSelection();\r\n row?.toggleSelection(true);\r\n }\r\n\r\n lastRow.current = rowElement;\r\n\r\n if (cellElement instanceof HTMLTableCellElement) {\r\n const colName = cellElement.dataset.colname!;\r\n const cell = row?.getCellByColumnName(colName);\r\n\r\n if (cell) {\r\n if (target.closest('thead')) {\r\n controller.emit('columnClick', cell);\r\n }\r\n\r\n cell?.focus(true);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n };\r\n}\r\n","import { KeyboardEvent } from 'react';\r\nimport { TableController } from '../..';\r\nimport { getRow, selectBetweenRows } from './useFocusByClick';\r\n\r\nconst pageSize = 6;\r\n\r\nfunction handleArrowKey(controller: TableController, ev: KeyboardEvent) {\r\n const { target } = ev;\r\n if (target instanceof HTMLElement) {\r\n const cellElement = target.closest('td[data-colname],th[data-colname]');\r\n const rowElement = target.closest('tr[data-rowid]');\r\n\r\n if (rowElement instanceof HTMLTableRowElement) {\r\n if (cellElement instanceof HTMLTableCellElement) {\r\n const colName = cellElement.dataset.colname!;\r\n\r\n let nextFocusedRow: HTMLTableRowElement = rowElement;\r\n let nextFocusedCell: HTMLTableCellElement = cellElement;\r\n switch (ev.code) {\r\n case 'ArrowUp': {\r\n const test =\r\n rowElement?.previousElementSibling as HTMLTableRowElement;\r\n if (test) {\r\n nextFocusedRow = test;\r\n } else if (nextFocusedRow.closest('tbody')) {\r\n const thead = nextFocusedRow\r\n .closest<HTMLElement>('table')!\r\n .querySelector('thead');\r\n nextFocusedRow = thead!.lastElementChild! as HTMLTableRowElement;\r\n }\r\n break;\r\n }\r\n case 'ArrowDown': {\r\n const test = rowElement?.nextElementSibling as HTMLTableRowElement;\r\n if (test) {\r\n nextFocusedRow = test;\r\n } else if (nextFocusedRow.closest('thead')) {\r\n const tbody = nextFocusedRow\r\n .closest<HTMLElement>('table')!\r\n .querySelector('tbody');\r\n nextFocusedRow = tbody!.firstElementChild! as HTMLTableRowElement;\r\n }\r\n break;\r\n }\r\n case 'ArrowLeft':\r\n nextFocusedCell =\r\n cellElement.previousElementSibling as HTMLTableCellElement;\r\n break;\r\n case 'ArrowRight':\r\n nextFocusedCell =\r\n cellElement.nextElementSibling as HTMLTableCellElement;\r\n break;\r\n case 'PageUp': {\r\n let i = 0;\r\n do {\r\n const test = nextFocusedRow.previousElementSibling as HTMLElement;\r\n if (!test && nextFocusedRow.closest('tbody')) {\r\n const thead = nextFocusedRow\r\n .closest<HTMLElement>('table')!\r\n .querySelector('thead');\r\n nextFocusedRow = thead!\r\n .lastElementChild! as HTMLTableRowElement;\r\n } else if (test) {\r\n nextFocusedRow = test as HTMLTableRowElement;\r\n }\r\n } while (\r\n nextFocusedRow instanceof HTMLTableRowElement &&\r\n ++i < pageSize\r\n );\r\n break;\r\n }\r\n case 'PageDown': {\r\n let i = 0;\r\n\r\n do {\r\n const test = nextFocusedRow.nextElementSibling as HTMLElement;\r\n if (!test && nextFocusedRow.closest('thead')) {\r\n const tbody = nextFocusedRow\r\n .closest<HTMLElement>('table')!\r\n .querySelector('tbody');\r\n nextFocusedRow = tbody!\r\n .firstElementChild! as HTMLTableRowElement;\r\n } else if (test) {\r\n nextFocusedRow = test as HTMLTableRowElement;\r\n }\r\n } while (\r\n nextFocusedRow instanceof HTMLTableRowElement &&\r\n ++i < pageSize\r\n );\r\n break;\r\n }\r\n case 'Home': {\r\n if (ev.ctrlKey) {\r\n nextFocusedRow = rowElement\r\n .closest<HTMLElement>('table')\r\n ?.querySelector('thead tr') as HTMLTableRowElement;\r\n } else {\r\n nextFocusedCell =\r\n rowElement.firstElementChild as HTMLTableCellElement;\r\n }\r\n break;\r\n }\r\n case 'End':\r\n if (ev.ctrlKey) {\r\n nextFocusedRow = (\r\n rowElement\r\n .closest<HTMLElement>('table')!\r\n .querySelector('tbody') as HTMLElement\r\n ).lastElementChild as HTMLTableRowElement;\r\n } else {\r\n nextFocusedCell = rowElement.lastChild! as HTMLTableCellElement;\r\n }\r\n }\r\n\r\n if (nextFocusedCell !== cellElement && nextFocusedCell) {\r\n getRow(controller, rowElement)!\r\n .getCellByColumnName(nextFocusedCell.dataset.colname!)!\r\n .focus();\r\n } else if (nextFocusedRow !== rowElement && nextFocusedRow) {\r\n if (ev.shiftKey) {\r\n selectBetweenRows(controller, rowElement, nextFocusedRow);\r\n } else {\r\n controller.clearSelection();\r\n getRow(controller, nextFocusedRow)?.toggleSelection(true);\r\n }\r\n\r\n const cell =\r\n getRow(controller, nextFocusedRow)!.getCellByColumnName(colName) ||\r\n getRow(controller, nextFocusedRow)!.getCellByIndex(0);\r\n cell?.focus();\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport function useFocusByKey(controller: TableController) {\r\n return (ev: KeyboardEvent) => {\r\n if (controller.isEditionMode) {\r\n if (['Enter', 'Escape'].includes(ev.code)) {\r\n ev.preventDefault();\r\n }\r\n\r\n switch (ev.code) {\r\n case 'Enter':\r\n controller.emit('keyEnter', null);\r\n break;\r\n // eslint-disable-next-line no-fallthrough\r\n case 'Escape':\r\n controller.toggleEditionMode(false);\r\n }\r\n } else {\r\n if (\r\n [\r\n 'Escape',\r\n 'ArrowUp',\r\n 'ArrowDown',\r\n 'ArrowLeft',\r\n 'ArrowRight',\r\n 'PageUp',\r\n 'PageDown',\r\n 'Home',\r\n 'End',\r\n ].includes(ev.code) ||\r\n (ev.code === 'Enter' && controller.getState('allowEdition')) ||\r\n (ev.code === 'Space' && ev.ctrlKey)\r\n ) {\r\n ev.preventDefault();\r\n }\r\n switch (ev.code) {\r\n case 'Enter':\r\n controller.emit('keyEnter', null);\r\n controller.toggleEditionMode();\r\n break;\r\n case 'Space':\r\n {\r\n if (ev.ctrlKey) {\r\n const row = (ev.target as HTMLElement)?.closest('tr');\r\n if (row instanceof HTMLElement) {\r\n getRow(controller, row)!.toggleSelection();\r\n }\r\n }\r\n }\r\n break;\r\n case 'ArrowUp':\r\n case 'ArrowDown':\r\n case 'ArrowLeft':\r\n case 'ArrowRight':\r\n case 'Home':\r\n case 'End':\r\n case 'PageUp':\r\n case 'PageDown':\r\n handleArrowKey(controller, ev);\r\n break;\r\n }\r\n }\r\n };\r\n}\r\n","/* eslint-disable react-hooks/rules-of-hooks */\r\nimport {\r\n disableChildrenFocus,\r\n getFocusSelector,\r\n scrollParentIntoElement,\r\n useMount,\r\n} from '@apia/util';\r\nimport { FocusEvent, useRef } from 'react';\r\nimport { Element } from '../../primitive/Element';\r\nimport { TableController } from '../../TableController';\r\nimport type { TablePlugin } from '../TablePlugin';\r\nimport { useFocusByClick } from './useFocusByClick';\r\nimport { useFocusByKey } from './useFocusByKey';\r\nimport type { Cell } from '../../primitive/Cell';\r\n\r\nfunction getCellElement(focusControllerRef: HTMLElement, cell: Cell) {\r\n return focusControllerRef.querySelector<HTMLTableCellElement>(\r\n `tr[data-rowid=\"${cell.getRow()!.getState('id')}\"] td[data-colname=\"${cell.getState('colName')}\"], tr[data-rowid=\"${cell.getRow()!.getState('id')}\"] th[data-colname=\"${cell.getState('colName')}\"]`,\r\n );\r\n}\r\n\r\nfunction isVisible(el: HTMLElement | null) {\r\n if (!(el instanceof HTMLElement)) return false;\r\n\r\n // Traverse up the DOM tree\r\n while (el) {\r\n const style = getComputedStyle(el);\r\n\r\n if (\r\n style.display === 'none' ||\r\n style.visibility === 'hidden' ||\r\n style.opacity === '0'\r\n ) {\r\n return false;\r\n }\r\n\r\n el = el.parentElement;\r\n }\r\n\r\n return true;\r\n}\r\n\r\nfunction scrollIntoRow(row: HTMLTableCaptionElement) {\r\n if (row) {\r\n scrollParentIntoElement(row, 150, 0, 0);\r\n }\r\n}\r\n\r\nexport function restoreFocus(\r\n controller: TableController,\r\n tableElement: HTMLElement,\r\n doFocus: boolean,\r\n) {\r\n const cell = controller.getFocusedCell();\r\n\r\n if (cell) {\r\n const cellElement = getCellElement(tableElement, cell);\r\n\r\n if (cellElement) {\r\n disableChildrenFocus(tableElement);\r\n const widgets =\r\n cellElement.querySelectorAll<HTMLElement>(getFocusSelector());\r\n const widget = [...widgets].find((c) => isVisible(c));\r\n const focusableElement = widget || cellElement;\r\n\r\n focusableElement.setAttribute('tabindex', '0');\r\n restoreEditionMode(tableElement, cell.getTable().isEditionMode);\r\n if (doFocus) {\r\n focusableElement.focus();\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction restoreEditionMode(\r\n focusController: HTMLElement,\r\n editionMode: boolean,\r\n) {\r\n const focusable = focusController?.querySelector(\r\n '[tabindex=\"0\"]',\r\n ) as HTMLElement;\r\n const cell = focusable?.closest('td, th');\r\n if (cell instanceof HTMLElement) {\r\n const widgets = cell.querySelectorAll<HTMLElement>(getFocusSelector());\r\n widgets.forEach((widget) => {\r\n widget.setAttribute('tabindex', editionMode ? '0' : '-1');\r\n });\r\n const firstFocusable = [...widgets].find((c) => isVisible(c)) || cell;\r\n firstFocusable.setAttribute('tabindex', '0');\r\n }\r\n}\r\n\r\nexport class FocusControllerPlugin implements TablePlugin {\r\n rootElement: HTMLElement | null = null;\r\n\r\n scrollIntoView(rowId: string) {\r\n const row = this.rootElement?.querySelector(\r\n `tr[data-rowid=\"${rowId}\"]`,\r\n ) as HTMLTableRowElement;\r\n\r\n if (row) {\r\n scrollIntoRow(row);\r\n }\r\n }\r\n\r\n useElementDomProps(\r\n controller: TableController,\r\n element: TableController | Element<any>,\r\n _context: any,\r\n ) {\r\n if (element instanceof TableController) {\r\n const disconnect = useRef(() => {});\r\n\r\n useMount(() => {\r\n const uns1 = controller.on('cellFocus', (ev) => {\r\n if (this.rootElement) {\r\n restoreFocus(controller, this.rootElement, ev.doFocus);\r\n }\r\n });\r\n const uns2 = controller.on('editionMode', (editionMode) => {\r\n if (this.rootElement) {\r\n restoreEditionMode(this.rootElement!, editionMode);\r\n }\r\n });\r\n const uns3 = controller.on('scrollIntoRow', (row) => {\r\n this.scrollIntoView(row.getState('id'));\r\n });\r\n\r\n return () => {\r\n uns1();\r\n uns2();\r\n uns3();\r\n };\r\n });\r\n\r\n return {\r\n className: 'table__focus_controller',\r\n onClick: useFocusByClick(controller),\r\n onKeyDown: useFocusByKey(controller),\r\n onBlur: (ev: FocusEvent) => {\r\n if (\r\n ev.relatedTarget instanceof HTMLElement &&\r\n ev.relatedTarget.closest('.table__focus_controller') !==\r\n this.rootElement\r\n ) {\r\n controller.toggleEditionMode(false);\r\n }\r\n },\r\n ref: (el: HTMLElement | null) => {\r\n this.rootElement = el;\r\n if (el) {\r\n const observer = new MutationObserver(() => {\r\n restoreFocus(controller, this.rootElement!, false);\r\n });\r\n disconnect.current?.();\r\n observer.observe(el, { subtree: true, childList: true });\r\n disconnect.current = () => {\r\n observer.disconnect();\r\n };\r\n }\r\n },\r\n };\r\n }\r\n\r\n return {};\r\n }\r\n}\r\n","import { Cell } from '../primitive/Cell';\r\nimport type { Element } from '../primitive/Element';\r\nimport { Row } from '../primitive/Row';\r\nimport { TableController } from '../TableController';\r\nimport type { TablePlugin } from './TablePlugin';\r\n\r\nexport class WaiAriaPlugin implements TablePlugin {\r\n public useElementDomProps(\r\n controller: TableController,\r\n element: TableController | Element<any>,\r\n context: any,\r\n ) {\r\n if (element instanceof Row) {\r\n const base =\r\n element.getContainer() === controller.head\r\n ? 0\r\n : controller.head.rows.length;\r\n return {\r\n 'aria-selected': element.isSelected,\r\n 'aria-rowindex': context + base + 1,\r\n };\r\n } else if (element instanceof Cell) {\r\n return {\r\n 'aria-colindex': context + 1,\r\n };\r\n } else if (element instanceof TableController) {\r\n return {\r\n role: 'treegrid',\r\n 'aria-multiselectable':\r\n controller.getState('allowSelection') &&\r\n controller.getState('isSelectionMultiple')\r\n ? true\r\n : undefined,\r\n 'aria-colcount': controller.head.rows[0]?.cells.length || 0,\r\n 'aria-rowcount':\r\n controller.head.rows.length + controller.body.rows.length,\r\n };\r\n }\r\n\r\n return {};\r\n }\r\n}\r\n"],"names":["__publicField","returnValue"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@apia/table2-controller",
3
- "version": "4.0.43",
3
+ "version": "4.0.44",
4
4
  "sideEffects": false,
5
5
  "author": "Alexis Leite <alexisleite@live.com>",
6
6
  "main": "dist/index.js",
@@ -30,9 +30,9 @@
30
30
  "registry": "https://registry.npmjs.org/"
31
31
  },
32
32
  "dependencies": {
33
- "@apia/util": "^4.0.43",
33
+ "@apia/util": "^4.0.44",
34
34
  "mobx": "^6.13.7",
35
35
  "mobx-react-lite": "^4.1.0"
36
36
  },
37
- "gitHead": "f4c40b69ba514626379ac45021c254ad661826f1"
37
+ "gitHead": "0822e3a7f4a7fa49b47087e8097caab678d36ef6"
38
38
  }