@apia/table2-controller 4.0.44 → 4.0.45
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 +11 -19
- package/dist/index.js +33 -78
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as react from 'react';
|
|
2
2
|
import { HTMLAttributes, FC, ReactNode, ThHTMLAttributes, FocusEvent } from 'react';
|
|
3
|
-
import {
|
|
3
|
+
import { EventEmitter, TLoadStructure } from '@apia/util';
|
|
4
4
|
|
|
5
5
|
type RowsGroupBaseState = ElementBaseState & {
|
|
6
6
|
rows: Row[];
|
|
@@ -85,7 +85,6 @@ declare class TableBody extends RowsGroup<TableBodyState> {
|
|
|
85
85
|
type ColumnState<T extends ColumnState<any> = ColumnState<any>> = CellState<T> & {
|
|
86
86
|
asAdditional?: boolean;
|
|
87
87
|
sortable?: boolean;
|
|
88
|
-
sortState?: TSortType;
|
|
89
88
|
};
|
|
90
89
|
declare class Column extends Cell<ColumnState> {
|
|
91
90
|
asAdditional(): boolean;
|
|
@@ -94,23 +93,21 @@ declare class Column extends Cell<ColumnState> {
|
|
|
94
93
|
* A visible column is that which is not additional nor hidden.
|
|
95
94
|
*/
|
|
96
95
|
isVisible(): boolean;
|
|
97
|
-
sort(order?: ColumnState['sortState']): void;
|
|
98
96
|
}
|
|
99
97
|
|
|
100
98
|
declare class Filters extends Row {
|
|
101
|
-
filters: Map<string, Filter
|
|
102
|
-
private buildFilterFromDefinition;
|
|
99
|
+
filters: Map<string, Filter>;
|
|
103
100
|
buildFilters(filters: Omit<FilterState, 'colName'>[]): boolean;
|
|
104
|
-
getAdditionalFilters(): Filter<
|
|
101
|
+
getAdditionalFilters(): Filter<string>[];
|
|
105
102
|
getCells(): Filter<string>[];
|
|
106
103
|
getContainer(): TableHead;
|
|
107
|
-
getFilter(name: string): Filter<
|
|
108
|
-
getFilters(): Filter<
|
|
109
|
-
getFiltersInTable(): Filter<
|
|
104
|
+
getFilter(name: string): Filter<string> | undefined;
|
|
105
|
+
getFilters(): Filter<string>[];
|
|
106
|
+
getFiltersInTable(): Filter<string>[];
|
|
110
107
|
}
|
|
111
108
|
|
|
112
109
|
type FilterRenderer = FC<{
|
|
113
|
-
cell: Filter
|
|
110
|
+
cell: Filter;
|
|
114
111
|
}>;
|
|
115
112
|
type FilterState<ValueType = string, T extends FilterState<any> = FilterState<ValueType, any>> = CellState<T> & {
|
|
116
113
|
asAdditional?: boolean;
|
|
@@ -197,7 +194,7 @@ type TableEvents = {
|
|
|
197
194
|
cell: Cell;
|
|
198
195
|
doFocus: boolean;
|
|
199
196
|
};
|
|
200
|
-
|
|
197
|
+
columnClick: Column;
|
|
201
198
|
editionMode: boolean;
|
|
202
199
|
filterChange: Filter<any>;
|
|
203
200
|
filterPressEnter: Filter<any>;
|
|
@@ -220,8 +217,8 @@ declare class TableController extends EventEmitter<TableEvents> {
|
|
|
220
217
|
fromGenericTable(table: TLoadStructure): void;
|
|
221
218
|
getColumn(name: string): Column | undefined;
|
|
222
219
|
getColumns(): Column[];
|
|
223
|
-
getFilter(name: string): Filter<
|
|
224
|
-
getFilters(): Filter<
|
|
220
|
+
getFilter(name: string): Filter<string> | undefined;
|
|
221
|
+
getFilters(): Filter<string>[];
|
|
225
222
|
getRowById(id: string | number): Row | undefined;
|
|
226
223
|
hasAdditionalContent(): true | ((row: Row) => Promise<false | ReactNode>) | undefined;
|
|
227
224
|
onRowExpand(row: Row): string | Promise<ReactNode> | undefined;
|
|
@@ -240,7 +237,6 @@ declare class TableController extends EventEmitter<TableEvents> {
|
|
|
240
237
|
getSelectedRows(): Row[];
|
|
241
238
|
isSelected(row: Row): boolean;
|
|
242
239
|
toggleColumnVisibility(colName: string, isVisible?: boolean): void;
|
|
243
|
-
toggleFiltersRowVisibility(): void;
|
|
244
240
|
/**
|
|
245
241
|
* Toggles the selection state of a given row.
|
|
246
242
|
*
|
|
@@ -304,7 +300,6 @@ declare class TableController extends EventEmitter<TableEvents> {
|
|
|
304
300
|
*/
|
|
305
301
|
setState(cb: (s: TableState) => TableState): this;
|
|
306
302
|
setState<K extends keyof TableState>(prop: K, value: TableState[K]): this;
|
|
307
|
-
sortColumn(col: Column, sortState?: TSortType): void;
|
|
308
303
|
/**
|
|
309
304
|
* PLUGINS
|
|
310
305
|
*/
|
|
@@ -427,8 +422,5 @@ declare class WaiAriaPlugin implements TablePlugin {
|
|
|
427
422
|
};
|
|
428
423
|
}
|
|
429
424
|
|
|
430
|
-
|
|
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 };
|
|
425
|
+
export { AdditionalCell, AdditionalRow, Cell, type CellState, Column, type ColumnState, Columns, 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 };
|
|
434
426
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { makeObservable, action, observable, computed } from 'mobx';
|
|
1
|
+
import { makeObservable, action, observable, computed, reaction } from 'mobx';
|
|
2
2
|
import { arrayOrArray, EventEmitter, useMount, scrollParentIntoElement, disableChildrenFocus, getFocusSelector } from '@apia/util';
|
|
3
3
|
import { useRef } from 'react';
|
|
4
4
|
|
|
@@ -266,7 +266,6 @@ class AdditionalCell extends Cell {
|
|
|
266
266
|
expanded: false,
|
|
267
267
|
colName: "__additional",
|
|
268
268
|
domProperties: {
|
|
269
|
-
className: "additionalColumn",
|
|
270
269
|
style: {
|
|
271
270
|
width: "50px"
|
|
272
271
|
}
|
|
@@ -408,10 +407,6 @@ class Column extends Cell {
|
|
|
408
407
|
isVisible() {
|
|
409
408
|
return !this.asAdditional() && !this.isHidden();
|
|
410
409
|
}
|
|
411
|
-
sort(order) {
|
|
412
|
-
order = order ?? (this.getState("sortState") === "ASC" ? "DESC" : "ASC");
|
|
413
|
-
this.setState("sortState", order);
|
|
414
|
-
}
|
|
415
410
|
}
|
|
416
411
|
|
|
417
412
|
var __defProp$4 = Object.defineProperty;
|
|
@@ -428,15 +423,15 @@ class Columns extends Row {
|
|
|
428
423
|
buildColumnsRow(columns) {
|
|
429
424
|
let i = 0;
|
|
430
425
|
for (const column of columns) {
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
this.
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
426
|
+
const headerCell = new Column(column);
|
|
427
|
+
this.columns.set(column.colName, headerCell);
|
|
428
|
+
if (headerCell.isVisible()) {
|
|
429
|
+
const currentCell = this.cells[i++];
|
|
430
|
+
if (!currentCell) {
|
|
431
|
+
this.addCell(headerCell);
|
|
432
|
+
} else {
|
|
433
|
+
currentCell.updateState(column);
|
|
434
|
+
}
|
|
440
435
|
}
|
|
441
436
|
}
|
|
442
437
|
}
|
|
@@ -460,6 +455,12 @@ class Filter extends Cell {
|
|
|
460
455
|
}
|
|
461
456
|
constructor(state) {
|
|
462
457
|
super(state);
|
|
458
|
+
reaction(
|
|
459
|
+
() => this.state.value,
|
|
460
|
+
() => {
|
|
461
|
+
console.log(this.state.value);
|
|
462
|
+
}
|
|
463
|
+
);
|
|
463
464
|
}
|
|
464
465
|
clear() {
|
|
465
466
|
this.setValue("");
|
|
@@ -488,30 +489,6 @@ class Filter extends Cell {
|
|
|
488
489
|
}
|
|
489
490
|
}
|
|
490
491
|
|
|
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
492
|
var __defProp$3 = Object.defineProperty;
|
|
516
493
|
var __defNormalProp$3 = (obj, key, value) => key in obj ? __defProp$3(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
517
494
|
var __publicField$3 = (obj, key, value) => {
|
|
@@ -523,24 +500,12 @@ class Filters extends Row {
|
|
|
523
500
|
super(...arguments);
|
|
524
501
|
__publicField$3(this, "filters", /* @__PURE__ */ new Map());
|
|
525
502
|
}
|
|
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
503
|
buildFilters(filters) {
|
|
504
|
+
this.filters.clear();
|
|
535
505
|
let hasFiltersInRow = false;
|
|
536
506
|
const columns = arrayOrArray(
|
|
537
507
|
this.getContainer().getHeaderRow()?.getShownColumns()
|
|
538
508
|
);
|
|
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
509
|
for (let i = 0; i < columns.length; i++) {
|
|
545
510
|
const column = columns[i];
|
|
546
511
|
const filter = filters.find(
|
|
@@ -548,7 +513,7 @@ class Filters extends Row {
|
|
|
548
513
|
);
|
|
549
514
|
if (filter) {
|
|
550
515
|
const currentFilterCell = this.getCellByIndex(i);
|
|
551
|
-
const filterCell =
|
|
516
|
+
const filterCell = new Filter({
|
|
552
517
|
...filter,
|
|
553
518
|
colName: filter.columnName
|
|
554
519
|
});
|
|
@@ -563,18 +528,17 @@ class Filters extends Row {
|
|
|
563
528
|
filter.added = true;
|
|
564
529
|
} else {
|
|
565
530
|
if (!this.getCellByIndex(i)) {
|
|
566
|
-
this.addCell(new
|
|
531
|
+
this.addCell(new Cell({ colName: column.getColumnName() }));
|
|
567
532
|
}
|
|
568
533
|
}
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
this.filters.set(filter.name, filterCell);
|
|
534
|
+
for (const filter2 of filters) {
|
|
535
|
+
if (!filter2.added) {
|
|
536
|
+
const filterCell = new Filter({
|
|
537
|
+
...filter2,
|
|
538
|
+
colName: filter2.columnName
|
|
539
|
+
});
|
|
540
|
+
this.filters.set(filter2.name, filterCell);
|
|
541
|
+
}
|
|
578
542
|
}
|
|
579
543
|
}
|
|
580
544
|
return hasFiltersInRow;
|
|
@@ -622,6 +586,7 @@ class TableHead extends RowsGroup {
|
|
|
622
586
|
return this.rows[1] instanceof Filters ? this.rows[1] : void 0;
|
|
623
587
|
}
|
|
624
588
|
build(data) {
|
|
589
|
+
this.state.rows = [];
|
|
625
590
|
if (data.columns.length) {
|
|
626
591
|
const currentHeaderRow = this.rows[0];
|
|
627
592
|
if (currentHeaderRow && !(currentHeaderRow instanceof Columns)) {
|
|
@@ -704,6 +669,7 @@ class TableController extends EventEmitter {
|
|
|
704
669
|
const columns = arrayOrArray(table.columns);
|
|
705
670
|
this.build({
|
|
706
671
|
columns: columns.map((c) => {
|
|
672
|
+
console.log({ c });
|
|
707
673
|
return {
|
|
708
674
|
colName: c.name,
|
|
709
675
|
asAdditional: c.showAsAdditional,
|
|
@@ -711,11 +677,11 @@ class TableController extends EventEmitter {
|
|
|
711
677
|
isHidden: c.isHidden,
|
|
712
678
|
properties: c,
|
|
713
679
|
content: c.title,
|
|
714
|
-
className: c.className
|
|
715
|
-
sortState: c.sortType
|
|
680
|
+
className: c.className
|
|
716
681
|
};
|
|
717
682
|
}),
|
|
718
683
|
filters: arrayOrArray(table.filters).map((f) => {
|
|
684
|
+
console.log({ f });
|
|
719
685
|
return {
|
|
720
686
|
name: f.name,
|
|
721
687
|
title: f.title,
|
|
@@ -730,6 +696,7 @@ class TableController extends EventEmitter {
|
|
|
730
696
|
};
|
|
731
697
|
}),
|
|
732
698
|
rows: arrayOrArray(table.rows).map((row) => {
|
|
699
|
+
console.log({ row });
|
|
733
700
|
const returnValue = {
|
|
734
701
|
id: row.id,
|
|
735
702
|
cells: arrayOrArray(row.cells).map((cell) => {
|
|
@@ -806,9 +773,6 @@ class TableController extends EventEmitter {
|
|
|
806
773
|
this.head.rows[0]?.cells?.find((c) => c.getState("colName") === colName)?.setState("isHidden", !isVisible);
|
|
807
774
|
}
|
|
808
775
|
}
|
|
809
|
-
toggleFiltersRowVisibility() {
|
|
810
|
-
this.head.getFiltersRow()?.setState("isHidden", !this.head.getFiltersRow()?.getState("isHidden"));
|
|
811
|
-
}
|
|
812
776
|
/**
|
|
813
777
|
* Toggles the selection state of a given row.
|
|
814
778
|
*
|
|
@@ -900,15 +864,6 @@ class TableController extends EventEmitter {
|
|
|
900
864
|
}
|
|
901
865
|
return this;
|
|
902
866
|
}
|
|
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);
|
|
911
|
-
}
|
|
912
867
|
/**
|
|
913
868
|
* PLUGINS
|
|
914
869
|
*/
|
|
@@ -1297,5 +1252,5 @@ class WaiAriaPlugin {
|
|
|
1297
1252
|
}
|
|
1298
1253
|
}
|
|
1299
1254
|
|
|
1300
|
-
export { AdditionalCell, AdditionalRow, Cell, Column, Columns,
|
|
1255
|
+
export { AdditionalCell, AdditionalRow, Cell, Column, Columns, Element, Filter, Filters, FocusControllerPlugin, Row, RowsGroup, TableBody, TableController, TableHead, WaiAriaPlugin, defaultPlugins };
|
|
1301
1256
|
//# 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/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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"}
|
|
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/head/Filter.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';\nimport { Row } from './Row';\n\nexport class AdditionalRow extends Row {\n constructor(id: string) {\n super(id);\n this.setState('isSelectable', false);\n }\n\n get cells(): Cell<CellState<any>>[] {\n return this.state.cells;\n }\n}\n","import { ReactNode } from 'react';\nimport { Cell, CellState } from './Cell';\n\nexport class AdditionalRowContent extends Cell<\n CellState & { expanded: boolean }\n> {\n constructor(content: ReactNode) {\n super({\n expanded: false,\n colName: '__additional',\n content,\n });\n }\n\n public getState<K extends keyof CellState | 'expanded'>(\n prop: K,\n ): (CellState & { expanded: boolean })[K] {\n if (prop === 'domProperties') {\n return {\n colSpan: this.table.head.getHeaderRow()?.getShownColumns().length || 0,\n } as any;\n }\n\n return super.getState(prop);\n }\n}\n","import { AdditionalRow } from './AdditionalRow';\nimport { AdditionalRowContent } from './AdditionalRowContent';\nimport { Cell, CellState } from './Cell';\n\nexport class AdditionalCell extends Cell<CellState & { expanded: boolean }> {\n constructor() {\n super({\n expanded: false,\n colName: '__additional',\n domProperties: {\n style: {\n width: '50px',\n },\n },\n });\n }\n\n async onToggle() {\n const currentIndex = this.getRow()!.getIndex()!;\n if (\n !(\n this.getTable().body.getRowByIndex(currentIndex + 1) instanceof\n AdditionalRow\n )\n ) {\n const res = await this.table.onRowExpand(this.getRow()!);\n\n if (res !== false) {\n const newRow = new AdditionalRow(\n `${this.getRow()?.getState('id')}__additional`,\n );\n\n this.getTable().body.insertAfter(this.getRow()!, newRow);\n\n newRow.addCell(new AdditionalRowContent(res));\n\n this.state.expanded = true;\n }\n } else {\n this.getTable()\n .body.getRowByIndex(currentIndex + 1)\n .remove();\n this.state.expanded = false;\n }\n }\n}\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 { Cell, CellState } from '../primitive/Cell';\n\nexport type ColumnState<T extends ColumnState<any> = ColumnState<any>> =\n CellState<T> & {\n asAdditional?: boolean;\n sortable?: boolean;\n };\n\nexport class Column extends Cell<ColumnState> {\n public asAdditional() {\n return !!this.state.asAdditional;\n }\n\n public isHidden() {\n return !!this.state.isHidden;\n }\n\n /**\n * A visible column is that which is not additional nor hidden.\n */\n public isVisible() {\n return !this.asAdditional() && !this.isHidden();\n }\n}\n","import { Row } from '../primitive/Row';\nimport { Column, ColumnState } from './Column';\n\nexport class Columns extends Row {\n columns: Map<string, Column> = new Map();\n\n buildColumnsRow(columns: ColumnState[]) {\n let i = 0;\n for (const column of columns) {\n const headerCell = new Column(column);\n this.columns.set(column.colName, headerCell);\n\n if (headerCell.isVisible()) {\n const currentCell = this.cells[i++];\n\n /**\n * We try to maximize rendering optimization here.\n *\n * If the cell already exists, we just update its state\n * in order to prevent dom rebuilding.\n */\n if (!currentCell) {\n this.addCell(headerCell);\n } else {\n currentCell.updateState(column);\n }\n }\n }\n }\n\n getColumn(name: string) {\n return this.getCellByColumnName(name) as Column;\n }\n\n getColumns() {\n return Array.from(this.columns.values());\n }\n\n getAdditionalColumns() {\n return this.getColumns().filter((c) => c.asAdditional());\n }\n\n getShownColumns() {\n return (this.cells ?? []) as Column[];\n }\n}\n","import { Cell, CellState } from '../primitive/Cell';\nimport { FC } from 'react';\nimport type { Filters } from './Filters';\nimport { TableEvents } from '../TableController';\nimport { reaction } from 'mobx';\n\nexport type FilterRenderer = FC<{ cell: Filter }>;\n\nexport type FilterState<\n ValueType = string,\n T extends FilterState<any> = FilterState<ValueType, any>,\n> = CellState<T> & {\n asAdditional?: boolean;\n name: string;\n columnName?: string;\n isRequired?: boolean;\n Renderer?: FilterRenderer;\n runAutomatically?: boolean;\n title: string;\n tooltip: string;\n value: ValueType;\n type:\n | 'DATE'\n | 'INPUT'\n | 'COMBO'\n | 'DATERANGE'\n | 'SIZE'\n | 'SIZERANGE'\n | 'DATEHOUR'\n | 'DATEHOURRANGE';\n};\n\nexport type FilterEvents = Pick<\n TableEvents,\n 'filterBlur' | 'filterChange' | 'filterPressEnter'\n>;\n\nexport class Filter<ValueType = string> extends Cell<FilterState<ValueType>> {\n public asAdditional() {\n return !!this.state.asAdditional || !this.getCorrespondingColumn();\n }\n\n constructor(state: FilterState<ValueType>) {\n super(state);\n\n reaction(\n () => this.state.value,\n () => {\n console.log(this.state.value);\n },\n );\n }\n\n clear() {\n this.setValue('' as ValueType);\n }\n\n getCorrespondingColumn() {\n return this.getRow()\n .getContainer()\n .getHeaderRow()\n ?.getShownColumns()\n .find((c) => c.getState('colName') === this.getState('colName'));\n }\n\n fire(ev: keyof FilterEvents) {\n this.table.emit(ev, this);\n }\n\n getRow() {\n return super.getRow() as Filters;\n }\n\n getValue() {\n return this.state.value;\n }\n\n hasValue() {\n return !!this.getValue();\n }\n\n setValue(val: ValueType) {\n this.state.value = val;\n this.table.emit('filterChange', this);\n }\n\n validate() {\n return this.state.isRequired ? this.hasValue() : true;\n }\n}\n","import { arrayOrArray } from '@apia/util';\nimport { Row } from '../primitive/Row';\nimport { Filter, FilterState } from './Filter';\nimport type { TableHead } from './TableHead';\nimport { Cell } from '../primitive/Cell';\n\nexport class Filters extends Row {\n filters: Map<string, Filter> = new Map();\n\n buildFilters(filters: Omit<FilterState, 'colName'>[]) {\n this.filters.clear();\n\n let hasFiltersInRow = false;\n\n const columns = arrayOrArray(\n this.getContainer().getHeaderRow()?.getShownColumns(),\n );\n for (let i = 0; i < columns.length; i++) {\n const column = columns[i];\n\n const filter = filters.find(\n (c) => c.columnName === column.getState('colName') && !c.asAdditional,\n );\n if (filter) {\n const currentFilterCell = this.getCellByIndex(i) as Filter;\n\n const filterCell = new Filter({\n ...filter,\n colName: filter.columnName!,\n });\n this.filters.set(filter.name, filterCell);\n\n if (!currentFilterCell) {\n this.addCell(filterCell);\n } else {\n const { value, ...filterState } = filter;\n currentFilterCell.updateState(filterState);\n }\n\n hasFiltersInRow = true;\n (filter as any).added = true;\n } else {\n if (!this.getCellByIndex(i)) {\n this.addCell(new Cell({ colName: column.getColumnName() }));\n }\n }\n for (const filter of filters) {\n if (!(filter as any).added) {\n const filterCell = new Filter({\n ...filter,\n colName: filter.columnName!,\n });\n this.filters.set(filter.name, filterCell);\n }\n }\n }\n\n return hasFiltersInRow;\n }\n\n getAdditionalFilters() {\n return this.getFilters().filter(\n (c) =>\n c.getState('asAdditional') ||\n this.getContainer()\n .getHeaderRow()\n ?.columns.get(c.getState('colName'))\n ?.asAdditional(),\n );\n }\n\n getCells() {\n return this.cells.map((c) => c as Filter);\n }\n\n getContainer() {\n return this.container as TableHead;\n }\n\n getFilter(name: string) {\n return this.filters.get(name);\n }\n\n getFilters() {\n return Array.from(this.filters.values());\n }\n\n getFiltersInTable() {\n return this.getFilters().filter((f) => {\n return !(\n f.getState('asAdditional') ||\n this.getContainer()\n .getHeaderRow()\n ?.columns.get(f.getState('colName'))\n ?.isVisible() === false\n );\n });\n }\n}\n","import { ColumnState } from './Column';\r\nimport { FilterState } from './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 this.state.rows = [];\r\n\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 { arrayOrArray, EventEmitter, TLoadStructure } 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 './head/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 columnClick: 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 console.log({ 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 };\r\n }),\r\n filters: arrayOrArray(table.filters).map((f) => {\r\n console.log({ 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 console.log({ 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 /**\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 /**\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","filter","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.
|
|
3
|
+
"version": "4.0.45",
|
|
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.
|
|
33
|
+
"@apia/util": "^4.0.45",
|
|
34
34
|
"mobx": "^6.13.7",
|
|
35
35
|
"mobx-react-lite": "^4.1.0"
|
|
36
36
|
},
|
|
37
|
-
"gitHead": "
|
|
37
|
+
"gitHead": "1b035d1b515ceb49207373a4fafcf0ff465bc439"
|
|
38
38
|
}
|