@apia/table2-controller 5.0.3 → 5.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -92,6 +92,7 @@ declare class TableController extends EventEmitter<TableEvents> implements ITabl
92
92
  shoutSelection(): void;
93
93
  toggleColumnVisibility(colName: string, isVisible?: boolean): void;
94
94
  toggleFiltersRowVisibility(): void;
95
+ setFiltersRowVisibility(hidden: boolean): void;
95
96
  /**
96
97
  * Toggles the selection state of a given row.
97
98
  *
@@ -115,7 +116,8 @@ declare class TableController extends EventEmitter<TableEvents> implements ITabl
115
116
  */
116
117
  getFocusedCell(): Cell<CellState<any>> | null;
117
118
  setFocusedCell(cell: Cell, doFocus?: boolean): void;
118
- setSelection(indices: number[]): void;
119
+ setSelection(indices: number[], fireEvent?: boolean): void;
120
+ setSelectionMultiple(value: boolean, fireEvent?: boolean): this;
119
121
  scrollRowIntoView(row: Row): void;
120
122
  /**
121
123
  * STATE
@@ -40,6 +40,7 @@ const _TableController = class _TableController extends EventEmitter {
40
40
  isEditionMode: computed,
41
41
  setState: action,
42
42
  setFocusedCell: action,
43
+ setSelectionMultiple: action,
43
44
  state: observable,
44
45
  toggleRowSelection: action,
45
46
  toggleEditionMode: action,
@@ -63,7 +64,7 @@ const _TableController = class _TableController extends EventEmitter {
63
64
  }
64
65
  this.setState("allowEdition", table.behavior.allowEdition);
65
66
  this.setState("allowSelection", table.behavior.allowSelection);
66
- this.setState("isSelectionMultiple", table.behavior.isMultipleSelection);
67
+ this.setSelectionMultiple(table.behavior.isMultipleSelection, false);
67
68
  this.setState("fetchRowExpand", !!table.behavior.fetchRowExpand);
68
69
  const columns = arrayOrArray(table.columns);
69
70
  this.build({
@@ -76,7 +77,7 @@ const _TableController = class _TableController extends EventEmitter {
76
77
  sortable: c.isSortable,
77
78
  isHidden: c.isHidden,
78
79
  properties: c,
79
- content: c.title,
80
+ content: c.title === "" ? c.name : c.title,
80
81
  className: c.className,
81
82
  sortState: c.sortType,
82
83
  showInAccordionTitle: c.showInAccordionTitle,
@@ -92,7 +93,7 @@ const _TableController = class _TableController extends EventEmitter {
92
93
  ...f,
93
94
  name: f.name,
94
95
  title: f.title,
95
- tooltip: "no tooltip",
96
+ tooltip: f.tooltip,
96
97
  type: f.type,
97
98
  isRequired: f.isRequired,
98
99
  properties: f,
@@ -146,7 +147,7 @@ const _TableController = class _TableController extends EventEmitter {
146
147
  domProperties: {
147
148
  onDoubleClick: (ev) => onDoubleClickEvent(ev),
148
149
  onClick: (ev) => onClickEvent(ev),
149
- className: row.isDisabled ? "locked non-selectable" : ""
150
+ className: row.className + (row.isDisabled ? "locked non-selectable" : "")
150
151
  },
151
152
  properties: row
152
153
  };
@@ -223,6 +224,9 @@ const _TableController = class _TableController extends EventEmitter {
223
224
  toggleFiltersRowVisibility() {
224
225
  this.head.getFiltersRow()?.setState("isHidden", !this.head.getFiltersRow()?.getState("isHidden"));
225
226
  }
227
+ setFiltersRowVisibility(hidden) {
228
+ this.head.getFiltersRow()?.setState("isHidden", hidden);
229
+ }
226
230
  /**
227
231
  * Toggles the selection state of a given row.
228
232
  *
@@ -236,18 +240,20 @@ const _TableController = class _TableController extends EventEmitter {
236
240
  * or deselected (`false`). If not provided, the selection state will be toggled.
237
241
  */
238
242
  toggleRowSelection(row, isSelected, fireEvent = true) {
239
- if (this.state.allowSelection) {
240
- isSelected = isSelected ?? !this.state.selection.has(row);
241
- if (isSelected) {
242
- if (row.getState("isSelectable") !== false) {
243
- this.state.selection.add(row);
244
- }
245
- } else {
246
- this.state.selection.delete(row);
247
- }
248
- if (fireEvent) {
249
- this.shoutSelection();
243
+ if (!this.state.allowSelection) {
244
+ return;
245
+ }
246
+ isSelected = isSelected ?? !this.state.selection.has(row);
247
+ if (isSelected && row.getState("isSelectable") !== false) {
248
+ if (!this.state.isSelectionMultiple) {
249
+ this.state.selection.clear();
250
250
  }
251
+ this.state.selection.add(row);
252
+ } else {
253
+ this.state.selection.delete(row);
254
+ }
255
+ if (fireEvent) {
256
+ this.shoutSelection();
251
257
  }
252
258
  }
253
259
  restoreFocus() {
@@ -285,14 +291,32 @@ const _TableController = class _TableController extends EventEmitter {
285
291
  this.state.focusedCell = cell;
286
292
  this.emit("cellFocus", { cell, doFocus });
287
293
  }
288
- setSelection(indices) {
294
+ setSelection(indices, fireEvent = false) {
289
295
  this.clearSelection();
290
- indices.forEach((index) => {
296
+ const effectiveIndices = this.state.isSelectionMultiple ? indices : indices.slice(0, 1);
297
+ effectiveIndices.forEach((index) => {
291
298
  const row = this.body.getRowByIndex(index);
292
299
  if (row) {
293
300
  this.toggleRowSelection(row, true, false);
294
301
  }
295
302
  });
303
+ if (fireEvent) {
304
+ this.shoutSelection();
305
+ }
306
+ }
307
+ setSelectionMultiple(value, fireEvent = true) {
308
+ this.state.isSelectionMultiple = value;
309
+ if (!value && this.state.selection.size > 1) {
310
+ const firstSelected = this.state.selection.values().next().value;
311
+ this.state.selection.clear();
312
+ if (firstSelected) {
313
+ this.state.selection.add(firstSelected);
314
+ }
315
+ if (fireEvent) {
316
+ this.shoutSelection();
317
+ }
318
+ }
319
+ return this;
296
320
  }
297
321
  scrollRowIntoView(row) {
298
322
  this.emit("scrollIntoRow", row);
@@ -311,6 +335,9 @@ const _TableController = class _TableController extends EventEmitter {
311
335
  setState(prop, value) {
312
336
  if (typeof prop === "function") {
313
337
  this.state = prop(this.state);
338
+ this.setSelectionMultiple(this.state.isSelectionMultiple);
339
+ } else if (prop === "isSelectionMultiple") {
340
+ this.setSelectionMultiple(value);
314
341
  } else {
315
342
  this.state[prop] = value;
316
343
  }
@@ -1 +1 @@
1
- {"version":3,"file":"TableController.js","sources":["../../src/data/TableController.ts"],"sourcesContent":["import {\r\n arrayOrArray,\r\n EventEmitter,\r\n ILabelsContainer,\r\n ITableController,\r\n TBasicAction,\r\n TLoadStructure,\r\n TSortType,\r\n} from '@apia/util';\r\nimport type { Cell } from './primitive/Cell';\r\nimport type { Row } from './primitive/Row';\r\nimport { TableBody, type TBuildBody } from './body/TableBody';\r\nimport { TableHead, type TBuildHead } from './head/TableHead';\r\nimport { action, computed, makeObservable, observable } from 'mobx';\r\nimport { defaultPlugins, type TablePlugin } from './plugins/TablePlugin';\r\nimport type { Column } from './head/Column';\r\nimport type { Filter } from './filter/Filter';\r\nimport type { MouseEventHandler, ReactNode } from 'react';\r\n\r\nexport type TableState = {\r\n allowEdition: boolean;\r\n allowResize: boolean;\r\n allowSelection: boolean;\r\n avoidExecuteFirstRefresh?: boolean;\r\n customLabel?: string;\r\n editionMode: boolean;\r\n fetchRowExpand: 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 registersToShow: number | null;\r\n tableName: string;\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 filterValueChange: 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 rowDblClick: {\r\n action: TBasicAction;\r\n ev: React.KeyboardEvent | React.MouseEvent;\r\n };\r\n\r\n rowClick: {\r\n action: TBasicAction;\r\n ev: React.KeyboardEvent | React.MouseEvent;\r\n };\r\n};\r\n\r\nexport type TTableEnvironment = {\r\n labels: ILabelsContainer['labels'];\r\n getDateFromString?: (str: string, timeFormat?: boolean) => Date | undefined;\r\n getStringFromDate?: (str: Date, timeFormat?: boolean) => string | undefined;\r\n};\r\n\r\nexport class TableController\r\n extends EventEmitter<TableEvents>\r\n implements ITableController\r\n{\r\n protected state: TableState = {\r\n allowEdition: true,\r\n allowResize: true,\r\n allowSelection: true,\r\n editionMode: false,\r\n fetchRowExpand: false,\r\n focusedCell: null,\r\n plugins: [],\r\n isSelectionMultiple: true,\r\n selection: new Set(),\r\n registersToShow: null,\r\n tableName: '',\r\n };\r\n\r\n constructor(\r\n public context: TTableEnvironment,\r\n props?: Partial<Omit<TableState, 'selection'>>,\r\n ) {\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 makeObservable<TableController, 'state'>(this, {\r\n build: action,\r\n clearSelection: action,\r\n fromGenericTable: action,\r\n isEditionMode: computed,\r\n setState: action,\r\n setFocusedCell: action,\r\n state: observable,\r\n toggleRowSelection: action,\r\n toggleEditionMode: action,\r\n head: observable,\r\n body: observable,\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 this.shoutSelection();\r\n }\r\n\r\n public fromGenericTable(\r\n table: TLoadStructure,\r\n context?: Required<\r\n Pick<TTableEnvironment, 'getDateFromString' | 'getStringFromDate'>\r\n >,\r\n ) {\r\n if (context) {\r\n Object.assign(this.context, context);\r\n }\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 this.setState('fetchRowExpand', !!table.behavior.fetchRowExpand);\r\n const columns = arrayOrArray(table.columns);\r\n\r\n this.build({\r\n columns: columns.map(({ attributes, ...c }) => {\r\n return {\r\n ...c,\r\n adjustWidthToTitle: c.adjustWidthToTitle,\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 showInAccordionTitle: c.showInAccordionTitle,\r\n domProperties: {\r\n style: {\r\n width: c.width,\r\n },\r\n },\r\n };\r\n }),\r\n filters: arrayOrArray(table.filters).map(({ attributes, ...f }) => {\r\n return {\r\n ...f,\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 showAsInteger: attributes?.showAsInteger === true,\r\n };\r\n }),\r\n rows: arrayOrArray(table.rows).map(({ attributes, ...row }) => {\r\n const onDoubleClickEvent: MouseEventHandler<HTMLTableRowElement> = (\r\n ev,\r\n ) => {\r\n if (\r\n ev.type === 'dblclick' &&\r\n row.action.actionSource === 'DOUBLE_CLICK'\r\n ) {\r\n this.emit('rowDblClick', {\r\n action: {\r\n ...row.action,\r\n action: attributes.openUrl as string,\r\n },\r\n ev: ev,\r\n });\r\n }\r\n };\r\n const onClickEvent: MouseEventHandler<HTMLTableRowElement> = (ev) => {\r\n if (ev.type === 'click' && row.action.actionSource === 'CLICK') {\r\n this.emit('rowClick', {\r\n action: {\r\n ...row.action,\r\n action: attributes.openUrl as string,\r\n },\r\n ev: ev,\r\n });\r\n }\r\n };\r\n\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 isHtml: cell.isHtml,\r\n documentUrl: cell.documentUrl,\r\n isDocument: cell.isDocument,\r\n Renderer: cell.Renderer,\r\n className: cell.className,\r\n };\r\n return returnValue;\r\n }),\r\n isExpandible: false,\r\n isSelectable: !row.isDisabled,\r\n isSelected: row.isSelected,\r\n isDisabled: row.isDisabled,\r\n domProperties: {\r\n onDoubleClick: (ev) => onDoubleClickEvent(ev),\r\n onClick: (ev) => onClickEvent(ev),\r\n className: '' + (row.isDisabled ? 'locked non-selectable' : ''),\r\n },\r\n properties: row,\r\n };\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.getColumns()?.getColumn(name);\r\n }\r\n\r\n public getColumns() {\r\n return [...(this.head.getColumns()?.columns.values() || [])];\r\n }\r\n\r\n public getFilter(name: string) {\r\n return this.head.getFilters()?.get(name);\r\n }\r\n\r\n public getFilters() {\r\n return [...(this.head.getFilters()?.getAll() || [])];\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) ||\r\n this.getState('onRowExpand') ||\r\n this.getState('fetchRowExpand')\r\n );\r\n }\r\n\r\n public static readonly RENDER_ADDITIONAL_CELLS_CONTENT = Object.freeze({});\r\n\r\n public async onRowExpand(row: Row) {\r\n const onExpand = this.getState('onRowExpand');\r\n if (onExpand) {\r\n return onExpand(row);\r\n }\r\n\r\n return TableController.RENDER_ADDITIONAL_CELLS_CONTENT;\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 changeAmountOfRegisters(amount: number) {\r\n this.state.registersToShow = amount;\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 shoutSelection() {\r\n this.emit('selectionChange', [...this.state.selection]);\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, fireEvent = true) {\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 if (fireEvent) {\r\n this.shoutSelection();\r\n }\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.shoutSelection();\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, false);\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"],"names":["returnValue"],"mappings":"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"}
1
+ {"version":3,"file":"TableController.js","sources":["../../src/data/TableController.ts"],"sourcesContent":["import {\r\n arrayOrArray,\r\n EventEmitter,\r\n ILabelsContainer,\r\n ITableController,\r\n TBasicAction,\r\n TLoadStructure,\r\n TSortType,\r\n} from '@apia/util';\r\nimport type { Cell } from './primitive/Cell';\r\nimport type { Row } from './primitive/Row';\r\nimport { TableBody, type TBuildBody } from './body/TableBody';\r\nimport { TableHead, type TBuildHead } from './head/TableHead';\r\nimport { action, computed, makeObservable, observable } from 'mobx';\r\nimport { defaultPlugins, type TablePlugin } from './plugins/TablePlugin';\r\nimport type { Column } from './head/Column';\r\nimport type { Filter } from './filter/Filter';\r\nimport type { MouseEventHandler, ReactNode } from 'react';\r\n\r\nexport type TableState = {\r\n allowEdition: boolean;\r\n allowResize: boolean;\r\n allowSelection: boolean;\r\n avoidExecuteFirstRefresh?: boolean;\r\n customLabel?: string;\r\n editionMode: boolean;\r\n fetchRowExpand: 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 registersToShow: number | null;\r\n tableName: string;\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 filterValueChange: 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 rowDblClick: {\r\n action: TBasicAction;\r\n ev: React.KeyboardEvent | React.MouseEvent;\r\n };\r\n\r\n rowClick: {\r\n action: TBasicAction;\r\n ev: React.KeyboardEvent | React.MouseEvent;\r\n };\r\n};\r\n\r\nexport type TTableEnvironment = {\r\n labels: ILabelsContainer['labels'];\r\n getDateFromString?: (str: string, timeFormat?: boolean) => Date | undefined;\r\n getStringFromDate?: (str: Date, timeFormat?: boolean) => string | undefined;\r\n};\r\n\r\nexport class TableController\r\n extends EventEmitter<TableEvents>\r\n implements ITableController\r\n{\r\n protected state: TableState = {\r\n allowEdition: true,\r\n allowResize: true,\r\n allowSelection: true,\r\n editionMode: false,\r\n fetchRowExpand: false,\r\n focusedCell: null,\r\n plugins: [],\r\n isSelectionMultiple: true,\r\n selection: new Set(),\r\n registersToShow: null,\r\n tableName: '',\r\n };\r\n\r\n constructor(\r\n public context: TTableEnvironment,\r\n props?: Partial<Omit<TableState, 'selection'>>,\r\n ) {\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 makeObservable<TableController, 'state'>(this, {\r\n build: action,\r\n clearSelection: action,\r\n fromGenericTable: action,\r\n isEditionMode: computed,\r\n setState: action,\r\n setFocusedCell: action,\r\n setSelectionMultiple: action,\r\n state: observable,\r\n toggleRowSelection: action,\r\n toggleEditionMode: action,\r\n head: observable,\r\n body: observable,\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 this.shoutSelection();\r\n }\r\n\r\n public fromGenericTable(\r\n table: TLoadStructure,\r\n context?: Required<\r\n Pick<TTableEnvironment, 'getDateFromString' | 'getStringFromDate'>\r\n >,\r\n ) {\r\n if (context) {\r\n Object.assign(this.context, context);\r\n }\r\n\r\n this.setState('allowEdition', table.behavior.allowEdition);\r\n this.setState('allowSelection', table.behavior.allowSelection);\r\n this.setSelectionMultiple(table.behavior.isMultipleSelection, false);\r\n this.setState('fetchRowExpand', !!table.behavior.fetchRowExpand);\r\n const columns = arrayOrArray(table.columns);\r\n\r\n this.build({\r\n columns: columns.map(({ attributes, ...c }) => {\r\n return {\r\n ...c,\r\n adjustWidthToTitle: c.adjustWidthToTitle,\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 === '' ? c.name : c.title,\r\n className: c.className,\r\n sortState: c.sortType,\r\n showInAccordionTitle: c.showInAccordionTitle,\r\n domProperties: {\r\n style: {\r\n width: c.width,\r\n },\r\n },\r\n };\r\n }),\r\n filters: arrayOrArray(table.filters).map(({ attributes, ...f }) => {\r\n return {\r\n ...f,\r\n name: f.name,\r\n title: f.title,\r\n tooltip: f.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 showAsInteger: attributes?.showAsInteger === true,\r\n };\r\n }),\r\n rows: arrayOrArray(table.rows).map(({ attributes, ...row }) => {\r\n const onDoubleClickEvent: MouseEventHandler<HTMLTableRowElement> = (\r\n ev,\r\n ) => {\r\n if (\r\n ev.type === 'dblclick' &&\r\n row.action.actionSource === 'DOUBLE_CLICK'\r\n ) {\r\n this.emit('rowDblClick', {\r\n action: {\r\n ...row.action,\r\n action: attributes.openUrl as string,\r\n },\r\n ev: ev,\r\n });\r\n }\r\n };\r\n const onClickEvent: MouseEventHandler<HTMLTableRowElement> = (ev) => {\r\n if (ev.type === 'click' && row.action.actionSource === 'CLICK') {\r\n this.emit('rowClick', {\r\n action: {\r\n ...row.action,\r\n action: attributes.openUrl as string,\r\n },\r\n ev: ev,\r\n });\r\n }\r\n };\r\n\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 isHtml: cell.isHtml,\r\n documentUrl: cell.documentUrl,\r\n isDocument: cell.isDocument,\r\n Renderer: cell.Renderer,\r\n className: cell.className,\r\n };\r\n return returnValue;\r\n }),\r\n isExpandible: false,\r\n isSelectable: !row.isDisabled,\r\n isSelected: row.isSelected,\r\n isDisabled: row.isDisabled,\r\n domProperties: {\r\n onDoubleClick: (ev) => onDoubleClickEvent(ev),\r\n onClick: (ev) => onClickEvent(ev),\r\n className:\r\n row.className + (row.isDisabled ? 'locked non-selectable' : ''),\r\n },\r\n properties: row,\r\n };\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.getColumns()?.getColumn(name);\r\n }\r\n\r\n public getColumns() {\r\n return [...(this.head.getColumns()?.columns.values() || [])];\r\n }\r\n\r\n public getFilter(name: string) {\r\n return this.head.getFilters()?.get(name);\r\n }\r\n\r\n public getFilters() {\r\n return [...(this.head.getFilters()?.getAll() || [])];\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) ||\r\n this.getState('onRowExpand') ||\r\n this.getState('fetchRowExpand')\r\n );\r\n }\r\n\r\n public static readonly RENDER_ADDITIONAL_CELLS_CONTENT = Object.freeze({});\r\n\r\n public async onRowExpand(row: Row) {\r\n const onExpand = this.getState('onRowExpand');\r\n if (onExpand) {\r\n return onExpand(row);\r\n }\r\n\r\n return TableController.RENDER_ADDITIONAL_CELLS_CONTENT;\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 changeAmountOfRegisters(amount: number) {\r\n this.state.registersToShow = amount;\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 shoutSelection() {\r\n this.emit('selectionChange', [...this.state.selection]);\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 public setFiltersRowVisibility(hidden: boolean) {\r\n this.head.getFiltersRow()?.setState('isHidden', hidden);\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, fireEvent = true) {\r\n if (!this.state.allowSelection) {\r\n return;\r\n }\r\n\r\n isSelected = isSelected ?? !this.state.selection.has(row);\r\n\r\n if (isSelected && row.getState('isSelectable') !== false) {\r\n if (!this.state.isSelectionMultiple) {\r\n this.state.selection.clear();\r\n }\r\n\r\n this.state.selection.add(row);\r\n } else {\r\n this.state.selection.delete(row);\r\n }\r\n\r\n if (fireEvent) {\r\n this.shoutSelection();\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.shoutSelection();\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[], fireEvent = false) {\r\n this.clearSelection();\r\n\r\n const effectiveIndices = this.state.isSelectionMultiple\r\n ? indices\r\n : indices.slice(0, 1);\r\n\r\n effectiveIndices.forEach((index) => {\r\n const row = this.body.getRowByIndex(index);\r\n if (row) {\r\n this.toggleRowSelection(row, true, false);\r\n }\r\n });\r\n\r\n if (fireEvent) {\r\n this.shoutSelection();\r\n }\r\n }\r\n\r\n public setSelectionMultiple(value: boolean, fireEvent = true) {\r\n this.state.isSelectionMultiple = value;\r\n\r\n if (!value && this.state.selection.size > 1) {\r\n const firstSelected = this.state.selection.values().next().value;\r\n\r\n this.state.selection.clear();\r\n if (firstSelected) {\r\n this.state.selection.add(firstSelected);\r\n }\r\n\r\n if (fireEvent) {\r\n this.shoutSelection();\r\n }\r\n }\r\n\r\n return this;\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 this.setSelectionMultiple(this.state.isSelectionMultiple);\r\n } else if (prop === 'isSelectionMultiple') {\r\n this.setSelectionMultiple(value as boolean);\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"],"names":["returnValue"],"mappings":"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"}
@@ -25,9 +25,7 @@ class TableBody extends RowsGroup {
25
25
  bodyRow.build(row);
26
26
  }
27
27
  this.rows.splice(data.rows.length);
28
- if (selection.length) {
29
- this.table.setSelection(selection);
30
- }
28
+ this.table.setSelection(selection);
31
29
  }
32
30
  }
33
31
 
@@ -1 +1 @@
1
- {"version":3,"file":"TableBody.js","sources":["../../../src/data/body/TableBody.ts"],"sourcesContent":["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\r\n const selection: number[] = [];\r\n\r\n for (const row of data.rows) {\r\n if (row.isSelected) {\r\n selection.push(i);\r\n }\r\n\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\r\n this.rows.splice(data.rows.length);\r\n\r\n if (selection.length) {\r\n this.table.setSelection(selection);\r\n }\r\n }\r\n}\r\n"],"names":[],"mappings":";;;;AAaO,MAAM,kBAAkB,SAAA,CAA0B;AAAA,EACvD,YAAY,KAAA,EAAwB;AAClC,IAAA,KAAA,CAAM,KAAA,EAAO,EAAE,IAAA,EAAM,IAAI,CAAA;AAAA;AAC3B,EAEA,MAAM,IAAA,EAAkB;AACtB,IAAA,IAAI,CAAA,GAAI,CAAA;AAER,IAAA,MAAM,YAAsB,EAAC;AAE7B,IAAA,KAAA,MAAW,GAAA,IAAO,KAAK,IAAA,EAAM;AAC3B,MAAA,IAAI,IAAI,UAAA,EAAY;AAClB,QAAA,SAAA,CAAU,KAAK,CAAC,CAAA;AAAA;AAGlB,MAAA,IAAI,UAAA,GAA8B,IAAA,CAAK,IAAA,CAAK,CAAA,EAAG,CAAA;AAC/C,MAAA,IAAI,sBAAsB,aAAA,EAAe;AACvC,QAAA,UAAA,CAAW,MAAA,EAAO;AAClB,QAAA,UAAA,GAAa,MAAA;AAAA;AAEf,MAAA,MAAM,OAAA,GAAU,UAAA,IAAc,IAAI,GAAA,CAAI,IAAI,EAAE,CAAA;AAE5C,MAAA,IAAI,CAAC,UAAA,EAAY;AACf,QAAA,IAAA,CAAK,OAAO,OAAO,CAAA;AAAA;AAErB,MAAA,OAAA,CAAQ,MAAM,GAAG,CAAA;AAAA;AAGnB,IAAA,IAAA,CAAK,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,IAAA,CAAK,MAAM,CAAA;AAEjC,IAAA,IAAI,UAAU,MAAA,EAAQ;AACpB,MAAA,IAAA,CAAK,KAAA,CAAM,aAAa,SAAS,CAAA;AAAA;AACnC;AAEJ;;;;"}
1
+ {"version":3,"file":"TableBody.js","sources":["../../../src/data/body/TableBody.ts"],"sourcesContent":["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\r\n const selection: number[] = [];\r\n\r\n for (const row of data.rows) {\r\n if (row.isSelected) {\r\n selection.push(i);\r\n }\r\n\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\r\n this.rows.splice(data.rows.length);\r\n\r\n this.table.setSelection(selection);\r\n }\r\n}\r\n"],"names":[],"mappings":";;;;AAaO,MAAM,kBAAkB,SAAA,CAA0B;AAAA,EACvD,YAAY,KAAA,EAAwB;AAClC,IAAA,KAAA,CAAM,KAAA,EAAO,EAAE,IAAA,EAAM,IAAI,CAAA;AAAA;AAC3B,EAEA,MAAM,IAAA,EAAkB;AACtB,IAAA,IAAI,CAAA,GAAI,CAAA;AAER,IAAA,MAAM,YAAsB,EAAC;AAE7B,IAAA,KAAA,MAAW,GAAA,IAAO,KAAK,IAAA,EAAM;AAC3B,MAAA,IAAI,IAAI,UAAA,EAAY;AAClB,QAAA,SAAA,CAAU,KAAK,CAAC,CAAA;AAAA;AAGlB,MAAA,IAAI,UAAA,GAA8B,IAAA,CAAK,IAAA,CAAK,CAAA,EAAG,CAAA;AAC/C,MAAA,IAAI,sBAAsB,aAAA,EAAe;AACvC,QAAA,UAAA,CAAW,MAAA,EAAO;AAClB,QAAA,UAAA,GAAa,MAAA;AAAA;AAEf,MAAA,MAAM,OAAA,GAAU,UAAA,IAAc,IAAI,GAAA,CAAI,IAAI,EAAE,CAAA;AAE5C,MAAA,IAAI,CAAC,UAAA,EAAY;AACf,QAAA,IAAA,CAAK,OAAO,OAAO,CAAA;AAAA;AAErB,MAAA,OAAA,CAAQ,MAAM,GAAG,CAAA;AAAA;AAGnB,IAAA,IAAA,CAAK,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,IAAA,CAAK,MAAM,CAAA;AAEjC,IAAA,IAAA,CAAK,KAAA,CAAM,aAAa,SAAS,CAAA;AAAA;AAErC;;;;"}
@@ -5,13 +5,15 @@ class ComboFilter extends Filter {
5
5
  constructor(state) {
6
6
  super(state);
7
7
  this.state = state;
8
+ if (this.state.sorted) {
9
+ arrayOrArray(state.options).sort(
10
+ (x, y) => x.label.localeCompare(y.label)
11
+ );
12
+ }
8
13
  this.state.options = state.options;
9
14
  if (!Array.isArray(state.options) || arrayOrArray(state.options)[0].label === "") {
10
15
  this.state.value = "";
11
16
  }
12
- this.state.sorted && arrayOrArray(this.getOptions()).sort(
13
- (x, y) => x.label.localeCompare(y.label)
14
- );
15
17
  }
16
18
  getOptions() {
17
19
  return this.state.options;
@@ -21,6 +23,11 @@ class ComboFilter extends Filter {
21
23
  if (!Array.isArray(options) || arrayOrArray(options)[0].label === "") {
22
24
  this.state.value = "";
23
25
  }
26
+ if (this.state.sorted) {
27
+ arrayOrArray(this.state.options).sort(
28
+ (x, y) => x.label.localeCompare(y.label)
29
+ );
30
+ }
24
31
  }
25
32
  getSelected() {
26
33
  const value = this.getValue();
@@ -1 +1 @@
1
- {"version":3,"file":"ComboFilter.js","sources":["../../../src/data/filter/ComboFilter.ts"],"sourcesContent":["import { Filter, FilterState } from './Filter';\r\nimport { arrayOrArray, TOption } from '@apia/util';\r\n\r\nexport type ComboFilterState<T> = FilterState<T> & {\r\n options: TOption[];\r\n sorted: boolean;\r\n};\r\n\r\nexport type ComboFilterValueType = string | null;\r\n\r\nexport class ComboFilter extends Filter<ComboFilterValueType> {\r\n constructor(protected state: ComboFilterState<ComboFilterValueType>) {\r\n super(state);\r\n this.state.options = state.options;\r\n if (\r\n !Array.isArray(state.options) ||\r\n arrayOrArray(state.options)[0].label === ''\r\n ) {\r\n this.state.value = '';\r\n }\r\n this.state.sorted &&\r\n arrayOrArray(this.getOptions()).sort((x, y) =>\r\n x.label.localeCompare(y.label),\r\n );\r\n }\r\n\r\n getOptions() {\r\n return this.state.options;\r\n }\r\n\r\n set options(options: TOption[]) {\r\n this.state.options = options;\r\n if (!Array.isArray(options) || arrayOrArray(options)[0].label === '') {\r\n this.state.value = '';\r\n }\r\n }\r\n\r\n getSelected() {\r\n const value = this.getValue();\r\n return value ? this.getOptions().find((x) => x.value === value)?.label : '';\r\n }\r\n}\r\n"],"names":[],"mappings":";;;AAUO,MAAM,oBAAoB,MAAA,CAA6B;AAAA,EAC5D,YAAsB,KAAA,EAA+C;AACnE,IAAA,KAAA,CAAM,KAAK,CAAA;AADS,IAAA,IAAA,CAAA,KAAA,GAAA,KAAA;AAEpB,IAAA,IAAA,CAAK,KAAA,CAAM,UAAU,KAAA,CAAM,OAAA;AAC3B,IAAA,IACE,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,OAAO,CAAA,IAC5B,YAAA,CAAa,KAAA,CAAM,OAAO,CAAA,CAAE,CAAC,CAAA,CAAE,UAAU,EAAA,EACzC;AACA,MAAA,IAAA,CAAK,MAAM,KAAA,GAAQ,EAAA;AAAA;AAErB,IAAA,IAAA,CAAK,MAAM,MAAA,IACT,YAAA,CAAa,IAAA,CAAK,UAAA,EAAY,CAAA,CAAE,IAAA;AAAA,MAAK,CAAC,CAAA,EAAG,CAAA,KACvC,EAAE,KAAA,CAAM,aAAA,CAAc,EAAE,KAAK;AAAA,KAC/B;AAAA;AACJ,EAEA,UAAA,GAAa;AACX,IAAA,OAAO,KAAK,KAAA,CAAM,OAAA;AAAA;AACpB,EAEA,IAAI,QAAQ,OAAA,EAAoB;AAC9B,IAAA,IAAA,CAAK,MAAM,OAAA,GAAU,OAAA;AACrB,IAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,OAAO,CAAA,IAAK,YAAA,CAAa,OAAO,CAAA,CAAE,CAAC,CAAA,CAAE,KAAA,KAAU,EAAA,EAAI;AACpE,MAAA,IAAA,CAAK,MAAM,KAAA,GAAQ,EAAA;AAAA;AACrB;AACF,EAEA,WAAA,GAAc;AACZ,IAAA,MAAM,KAAA,GAAQ,KAAK,QAAA,EAAS;AAC5B,IAAA,OAAO,KAAA,GAAQ,IAAA,CAAK,UAAA,EAAW,CAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,KAAA,KAAU,KAAK,CAAA,EAAG,KAAA,GAAQ,EAAA;AAAA;AAE7E;;;;"}
1
+ {"version":3,"file":"ComboFilter.js","sources":["../../../src/data/filter/ComboFilter.ts"],"sourcesContent":["import { Filter, FilterState } from './Filter';\r\nimport { arrayOrArray, TOption } from '@apia/util';\r\n\r\nexport type ComboFilterState<T> = FilterState<T> & {\r\n options: TOption[];\r\n sorted: boolean;\r\n};\r\n\r\nexport type ComboFilterValueType = string | null;\r\n\r\nexport class ComboFilter extends Filter<ComboFilterValueType> {\r\n constructor(protected state: ComboFilterState<ComboFilterValueType>) {\r\n super(state);\r\n if (this.state.sorted) {\r\n arrayOrArray(state.options).sort((x, y) =>\r\n x.label.localeCompare(y.label),\r\n );\r\n }\r\n this.state.options = state.options;\r\n\r\n if (\r\n !Array.isArray(state.options) ||\r\n arrayOrArray(state.options)[0].label === ''\r\n ) {\r\n this.state.value = '';\r\n }\r\n }\r\n\r\n getOptions() {\r\n return this.state.options;\r\n }\r\n\r\n set options(options: TOption[]) {\r\n this.state.options = options;\r\n if (!Array.isArray(options) || arrayOrArray(options)[0].label === '') {\r\n this.state.value = '';\r\n }\r\n if (this.state.sorted) {\r\n arrayOrArray(this.state.options).sort((x, y) =>\r\n x.label.localeCompare(y.label),\r\n );\r\n }\r\n }\r\n\r\n getSelected() {\r\n const value = this.getValue();\r\n return value ? this.getOptions().find((x) => x.value === value)?.label : '';\r\n }\r\n}\r\n"],"names":[],"mappings":";;;AAUO,MAAM,oBAAoB,MAAA,CAA6B;AAAA,EAC5D,YAAsB,KAAA,EAA+C;AACnE,IAAA,KAAA,CAAM,KAAK,CAAA;AADS,IAAA,IAAA,CAAA,KAAA,GAAA,KAAA;AAEpB,IAAA,IAAI,IAAA,CAAK,MAAM,MAAA,EAAQ;AACrB,MAAA,YAAA,CAAa,KAAA,CAAM,OAAO,CAAA,CAAE,IAAA;AAAA,QAAK,CAAC,CAAA,EAAG,CAAA,KACnC,EAAE,KAAA,CAAM,aAAA,CAAc,EAAE,KAAK;AAAA,OAC/B;AAAA;AAEF,IAAA,IAAA,CAAK,KAAA,CAAM,UAAU,KAAA,CAAM,OAAA;AAE3B,IAAA,IACE,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,OAAO,CAAA,IAC5B,YAAA,CAAa,KAAA,CAAM,OAAO,CAAA,CAAE,CAAC,CAAA,CAAE,UAAU,EAAA,EACzC;AACA,MAAA,IAAA,CAAK,MAAM,KAAA,GAAQ,EAAA;AAAA;AACrB;AACF,EAEA,UAAA,GAAa;AACX,IAAA,OAAO,KAAK,KAAA,CAAM,OAAA;AAAA;AACpB,EAEA,IAAI,QAAQ,OAAA,EAAoB;AAC9B,IAAA,IAAA,CAAK,MAAM,OAAA,GAAU,OAAA;AACrB,IAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,OAAO,CAAA,IAAK,YAAA,CAAa,OAAO,CAAA,CAAE,CAAC,CAAA,CAAE,KAAA,KAAU,EAAA,EAAI;AACpE,MAAA,IAAA,CAAK,MAAM,KAAA,GAAQ,EAAA;AAAA;AAErB,IAAA,IAAI,IAAA,CAAK,MAAM,MAAA,EAAQ;AACrB,MAAA,YAAA,CAAa,IAAA,CAAK,KAAA,CAAM,OAAO,CAAA,CAAE,IAAA;AAAA,QAAK,CAAC,CAAA,EAAG,CAAA,KACxC,EAAE,KAAA,CAAM,aAAA,CAAc,EAAE,KAAK;AAAA,OAC/B;AAAA;AACF;AACF,EAEA,WAAA,GAAc;AACZ,IAAA,MAAM,KAAA,GAAQ,KAAK,QAAA,EAAS;AAC5B,IAAA,OAAO,KAAA,GAAQ,IAAA,CAAK,UAAA,EAAW,CAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,KAAA,KAAU,KAAK,CAAA,EAAG,KAAA,GAAQ,EAAA;AAAA;AAE7E;;;;"}
@@ -44,7 +44,7 @@ declare class DateRangeFilter extends Filter<DateRangeFilterValueType> {
44
44
  getErrorFrom(): string;
45
45
  getErrorTo(): string;
46
46
  validateOrder(): boolean;
47
- validate(): boolean;
47
+ validate(showError?: boolean): boolean;
48
48
  getValueForSubmit(): string[];
49
49
  }
50
50
 
@@ -24,7 +24,7 @@ class DateRangeFilter extends Filter {
24
24
  });
25
25
  __publicField(this, "errorFromMessage", "");
26
26
  __publicField(this, "errorToMessage", "");
27
- if (state.initialValue) {
27
+ if (state.initialValue && !["[[, ], ]", "[, ]"].includes(state.initialValue)) {
28
28
  this.values[0] = state.initialValue;
29
29
  }
30
30
  if (state.initialValueFrom) {
@@ -59,17 +59,19 @@ class DateRangeFilter extends Filter {
59
59
  return !!this.values.find((c) => !!c);
60
60
  }
61
61
  clear(emitEvent = true) {
62
- this.setValueFrom("", emitEvent);
63
- this.setValueTo("", emitEvent);
64
- this.setPreset({
65
- chkFromStartOf: false,
66
- dateTo: { fixedValue: "" },
67
- dateFrom: {
68
- fixedValue: "",
69
- amountOf: 0,
70
- fromStartOfValue: ""
71
- }
72
- });
62
+ if (!this.state.readOnly) {
63
+ this.setValueFrom("", emitEvent);
64
+ this.setValueTo("", emitEvent);
65
+ this.setPreset({
66
+ chkFromStartOf: false,
67
+ dateTo: { fixedValue: "" },
68
+ dateFrom: {
69
+ fixedValue: "",
70
+ amountOf: 0,
71
+ fromStartOfValue: ""
72
+ }
73
+ });
74
+ }
73
75
  }
74
76
  setValueFrom(value, emitEvent = true) {
75
77
  this.values[0] = value;
@@ -111,6 +113,8 @@ class DateRangeFilter extends Filter {
111
113
  this.values[0] = valueFrom;
112
114
  this.values[1] = valueTo;
113
115
  this.setErrorMessage("");
116
+ this.setErrorFrom("");
117
+ this.setErrorTo("");
114
118
  this.preset = {
115
119
  chkFromStartOf: false,
116
120
  dateTo: { fixedValue: valueTo },
@@ -171,27 +175,33 @@ class DateRangeFilter extends Filter {
171
175
  }
172
176
  return true;
173
177
  }
174
- validate() {
178
+ validate(showError = true) {
175
179
  const from = this.getValueFrom();
176
180
  const to = this.getValueTo();
177
181
  if (this.state.isRequired && (!from || !to)) {
178
- this.errorMessage = getLabel("lblReq", {}, this.table.context).text;
182
+ if (showError) {
183
+ this.errorMessage = getLabel("lblReq", {}, this.table.context).text;
184
+ }
179
185
  return false;
180
186
  }
181
187
  if (this.state.isRequiredFrom && !from) {
182
- this.errorFromMessage = getLabel(
183
- "lblRequiredFrom",
184
- {},
185
- this.table.context
186
- ).text;
188
+ if (showError) {
189
+ this.errorFromMessage = getLabel(
190
+ "lblRequiredFrom",
191
+ {},
192
+ this.table.context
193
+ ).text;
194
+ }
187
195
  return false;
188
196
  }
189
197
  if (this.state.isRequiredTo && !to) {
190
- this.errorToMessage = getLabel(
191
- "lblRequiredTo",
192
- {},
193
- this.table.context
194
- ).text;
198
+ if (showError) {
199
+ this.errorToMessage = getLabel(
200
+ "lblRequiredTo",
201
+ {},
202
+ this.table.context
203
+ ).text;
204
+ }
195
205
  return false;
196
206
  }
197
207
  return this.validateOrder();
@@ -1 +1 @@
1
- {"version":3,"file":"DateRangeFilter.js","sources":["../../../src/data/filter/DateRangeFilter.ts"],"sourcesContent":["import { makeObservable, observable } from 'mobx';\r\nimport { Filter, FilterState } from './Filter';\r\nimport { getLabel } from '@apia/util';\r\n\r\nexport type DateRangeFilterState<T> = FilterState<T> & {\r\n isRequiredFrom: boolean;\r\n isRequiredTo: boolean;\r\n initialValueFrom?: string;\r\n initialValueTo?: string;\r\n initialValue?: string;\r\n initialPreset?: TDateInputProps;\r\n jsonValue?: string;\r\n};\r\n\r\nexport type DateRangeFilterValueType = string | null;\r\n\r\nexport type TDateInputProps = {\r\n dateFrom: {\r\n fromStartOfValue: string;\r\n amountOf: number;\r\n fixedValue: string;\r\n };\r\n dateTo: { fixedValue: string };\r\n chkFromStartOf: boolean;\r\n};\r\n\r\nexport class DateRangeFilter extends Filter<DateRangeFilterValueType> {\r\n protected values: [string, string] = ['', ''];\r\n protected preset: TDateInputProps = {\r\n chkFromStartOf: false,\r\n dateTo: { fixedValue: '' },\r\n dateFrom: {\r\n fixedValue: '',\r\n amountOf: 0,\r\n fromStartOfValue: '',\r\n },\r\n };\r\n errorFromMessage: string = '';\r\n errorToMessage: string = '';\r\n\r\n constructor(protected state: DateRangeFilterState<DateRangeFilterValueType>) {\r\n super(state);\r\n\r\n if (state.initialValue) {\r\n this.values[0] = state.initialValue;\r\n }\r\n if (state.initialValueFrom) {\r\n this.values[0] = state.initialValueFrom;\r\n }\r\n if (state.initialValueTo) {\r\n this.values[1] = state.initialValueTo;\r\n }\r\n if (state.initialPreset) {\r\n this.preset = state.initialPreset;\r\n } else {\r\n this.preset = {\r\n chkFromStartOf: false,\r\n dateTo: { fixedValue: this.values[1] },\r\n dateFrom: {\r\n fixedValue: this.values[0],\r\n amountOf: 0,\r\n fromStartOfValue: '',\r\n },\r\n };\r\n }\r\n if (state.jsonValue) {\r\n this.preset = JSON.parse(state.jsonValue) as TDateInputProps;\r\n }\r\n\r\n makeObservable<DateRangeFilter, 'values'>(this, {\r\n values: observable,\r\n errorFromMessage: observable,\r\n errorToMessage: observable,\r\n });\r\n }\r\n\r\n hasValue() {\r\n return !!this.values.find((c) => !!c);\r\n }\r\n\r\n clear(emitEvent = true) {\r\n this.setValueFrom('', emitEvent);\r\n this.setValueTo('', emitEvent);\r\n this.setPreset({\r\n chkFromStartOf: false,\r\n dateTo: { fixedValue: '' },\r\n dateFrom: {\r\n fixedValue: '',\r\n amountOf: 0,\r\n fromStartOfValue: '',\r\n },\r\n });\r\n }\r\n\r\n setValueFrom(value: string, emitEvent = true) {\r\n this.values[0] = value;\r\n this.setErrorMessage('');\r\n this.setErrorFrom('');\r\n\r\n this.preset = {\r\n chkFromStartOf: false,\r\n dateTo: { fixedValue: this.values[1] },\r\n dateFrom: {\r\n fixedValue: value,\r\n amountOf: this.preset.dateFrom.amountOf,\r\n fromStartOfValue: this.preset.dateFrom.fromStartOfValue,\r\n },\r\n };\r\n this.table.emit('filterValueChange', this);\r\n if (emitEvent) {\r\n this.table.emit('filterChange', this);\r\n }\r\n }\r\n\r\n setValueTo(value: string, emitEvent = true) {\r\n this.values[1] = value;\r\n this.setErrorMessage('');\r\n this.setErrorTo('');\r\n this.preset = {\r\n chkFromStartOf: false,\r\n dateTo: { fixedValue: value },\r\n dateFrom: {\r\n fixedValue: this.values[0],\r\n amountOf: this.preset.dateFrom.amountOf,\r\n fromStartOfValue: this.preset.dateFrom.fromStartOfValue,\r\n },\r\n };\r\n this.table.emit('filterValueChange', this);\r\n if (emitEvent) {\r\n this.table.emit('filterChange', this);\r\n }\r\n }\r\n\r\n setRangeValue(\r\n valueFrom: string,\r\n valueTo: string,\r\n emitEvent = true,\r\n preset?: TDateInputProps,\r\n ) {\r\n this.values[0] = valueFrom;\r\n this.values[1] = valueTo;\r\n this.setErrorMessage('');\r\n\r\n this.preset = {\r\n chkFromStartOf: false,\r\n dateTo: { fixedValue: valueTo },\r\n dateFrom: {\r\n fixedValue: valueFrom,\r\n amountOf: this.preset.dateFrom.amountOf,\r\n fromStartOfValue: this.preset.dateFrom.fromStartOfValue,\r\n },\r\n };\r\n this.table.emit('filterValueChange', this);\r\n if (preset) {\r\n this.preset = preset;\r\n }\r\n if (emitEvent) {\r\n this.table.emit('filterChange', this);\r\n }\r\n }\r\n\r\n getPreset() {\r\n return this.preset;\r\n }\r\n\r\n setPreset(preset: TDateInputProps) {\r\n this.preset = preset;\r\n }\r\n\r\n getValueFrom() {\r\n return this.values[0];\r\n }\r\n\r\n getValueTo() {\r\n return this.values[1];\r\n }\r\n getIsRequiredFrom() {\r\n return this.state.isRequiredFrom;\r\n }\r\n\r\n getIsRequiredTo() {\r\n return this.state.isRequiredTo;\r\n }\r\n\r\n setErrorFrom(error: string) {\r\n this.errorFromMessage = error;\r\n }\r\n\r\n setErrorTo(error: string) {\r\n this.errorToMessage = error;\r\n }\r\n getErrorFrom() {\r\n return this.errorFromMessage;\r\n }\r\n\r\n getErrorTo() {\r\n return this.errorToMessage;\r\n }\r\n\r\n validateOrder() {\r\n const from = this.getValueFrom();\r\n const to = this.getValueTo();\r\n if (\r\n this.table.context.getDateFromString!(from)! >\r\n this.table.context.getDateFromString!(to)!\r\n ) {\r\n this.errorMessage = getLabel(\r\n 'lblDateFromIsGreaterThanTo',\r\n {},\r\n this.table.context,\r\n ).text;\r\n\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n validate(): boolean {\r\n const from = this.getValueFrom();\r\n const to = this.getValueTo();\r\n\r\n if (this.state.isRequired && (!from || !to)) {\r\n this.errorMessage = getLabel('lblReq', {}, this.table.context).text;\r\n\r\n return false;\r\n }\r\n if (this.state.isRequiredFrom && !from) {\r\n this.errorFromMessage = getLabel(\r\n 'lblRequiredFrom',\r\n {},\r\n this.table.context,\r\n ).text;\r\n\r\n return false;\r\n }\r\n if (this.state.isRequiredTo && !to) {\r\n this.errorToMessage = getLabel(\r\n 'lblRequiredTo',\r\n {},\r\n this.table.context,\r\n ).text;\r\n\r\n return false;\r\n }\r\n\r\n return this.validateOrder();\r\n }\r\n\r\n getValueForSubmit() {\r\n return [\r\n this.preset.chkFromStartOf\r\n ? JSON.stringify(this.preset)\r\n : this.getValueFrom(),\r\n this.getValueTo(),\r\n ];\r\n }\r\n}\r\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"DateRangeFilter.js","sources":["../../../src/data/filter/DateRangeFilter.ts"],"sourcesContent":["import { makeObservable, observable } from 'mobx';\r\nimport { Filter, FilterState } from './Filter';\r\nimport { getLabel } from '@apia/util';\r\n\r\nexport type DateRangeFilterState<T> = FilterState<T> & {\r\n isRequiredFrom: boolean;\r\n isRequiredTo: boolean;\r\n initialValueFrom?: string;\r\n initialValueTo?: string;\r\n initialValue?: string;\r\n initialPreset?: TDateInputProps;\r\n jsonValue?: string;\r\n};\r\n\r\nexport type DateRangeFilterValueType = string | null;\r\n\r\nexport type TDateInputProps = {\r\n dateFrom: {\r\n fromStartOfValue: string;\r\n amountOf: number;\r\n fixedValue: string;\r\n };\r\n dateTo: { fixedValue: string };\r\n chkFromStartOf: boolean;\r\n};\r\n\r\nexport class DateRangeFilter extends Filter<DateRangeFilterValueType> {\r\n protected values: [string, string] = ['', ''];\r\n protected preset: TDateInputProps = {\r\n chkFromStartOf: false,\r\n dateTo: { fixedValue: '' },\r\n dateFrom: {\r\n fixedValue: '',\r\n amountOf: 0,\r\n fromStartOfValue: '',\r\n },\r\n };\r\n errorFromMessage: string = '';\r\n errorToMessage: string = '';\r\n\r\n constructor(protected state: DateRangeFilterState<DateRangeFilterValueType>) {\r\n super(state);\r\n\r\n if (\r\n state.initialValue &&\r\n !['[[, ], ]', '[, ]'].includes(state.initialValue)\r\n ) {\r\n this.values[0] = state.initialValue;\r\n }\r\n if (state.initialValueFrom) {\r\n this.values[0] = state.initialValueFrom;\r\n }\r\n if (state.initialValueTo) {\r\n this.values[1] = state.initialValueTo;\r\n }\r\n if (state.initialPreset) {\r\n this.preset = state.initialPreset;\r\n } else {\r\n this.preset = {\r\n chkFromStartOf: false,\r\n dateTo: { fixedValue: this.values[1] },\r\n dateFrom: {\r\n fixedValue: this.values[0],\r\n amountOf: 0,\r\n fromStartOfValue: '',\r\n },\r\n };\r\n }\r\n if (state.jsonValue) {\r\n this.preset = JSON.parse(state.jsonValue) as TDateInputProps;\r\n }\r\n\r\n makeObservable<DateRangeFilter, 'values'>(this, {\r\n values: observable,\r\n errorFromMessage: observable,\r\n errorToMessage: observable,\r\n });\r\n }\r\n\r\n hasValue() {\r\n return !!this.values.find((c) => !!c);\r\n }\r\n\r\n clear(emitEvent = true) {\r\n if (!this.state.readOnly) {\r\n this.setValueFrom('', emitEvent);\r\n this.setValueTo('', emitEvent);\r\n this.setPreset({\r\n chkFromStartOf: false,\r\n dateTo: { fixedValue: '' },\r\n dateFrom: {\r\n fixedValue: '',\r\n amountOf: 0,\r\n fromStartOfValue: '',\r\n },\r\n });\r\n }\r\n }\r\n\r\n setValueFrom(value: string, emitEvent = true) {\r\n this.values[0] = value;\r\n this.setErrorMessage('');\r\n this.setErrorFrom('');\r\n\r\n this.preset = {\r\n chkFromStartOf: false,\r\n dateTo: { fixedValue: this.values[1] },\r\n dateFrom: {\r\n fixedValue: value,\r\n amountOf: this.preset.dateFrom.amountOf,\r\n fromStartOfValue: this.preset.dateFrom.fromStartOfValue,\r\n },\r\n };\r\n this.table.emit('filterValueChange', this);\r\n if (emitEvent) {\r\n this.table.emit('filterChange', this);\r\n }\r\n }\r\n\r\n setValueTo(value: string, emitEvent = true) {\r\n this.values[1] = value;\r\n this.setErrorMessage('');\r\n this.setErrorTo('');\r\n this.preset = {\r\n chkFromStartOf: false,\r\n dateTo: { fixedValue: value },\r\n dateFrom: {\r\n fixedValue: this.values[0],\r\n amountOf: this.preset.dateFrom.amountOf,\r\n fromStartOfValue: this.preset.dateFrom.fromStartOfValue,\r\n },\r\n };\r\n this.table.emit('filterValueChange', this);\r\n if (emitEvent) {\r\n this.table.emit('filterChange', this);\r\n }\r\n }\r\n\r\n setRangeValue(\r\n valueFrom: string,\r\n valueTo: string,\r\n emitEvent = true,\r\n preset?: TDateInputProps,\r\n ) {\r\n this.values[0] = valueFrom;\r\n this.values[1] = valueTo;\r\n this.setErrorMessage('');\r\n this.setErrorFrom('');\r\n this.setErrorTo('');\r\n\r\n this.preset = {\r\n chkFromStartOf: false,\r\n dateTo: { fixedValue: valueTo },\r\n dateFrom: {\r\n fixedValue: valueFrom,\r\n amountOf: this.preset.dateFrom.amountOf,\r\n fromStartOfValue: this.preset.dateFrom.fromStartOfValue,\r\n },\r\n };\r\n this.table.emit('filterValueChange', this);\r\n if (preset) {\r\n this.preset = preset;\r\n }\r\n if (emitEvent) {\r\n this.table.emit('filterChange', this);\r\n }\r\n }\r\n\r\n getPreset() {\r\n return this.preset;\r\n }\r\n\r\n setPreset(preset: TDateInputProps) {\r\n this.preset = preset;\r\n }\r\n\r\n getValueFrom() {\r\n return this.values[0];\r\n }\r\n\r\n getValueTo() {\r\n return this.values[1];\r\n }\r\n getIsRequiredFrom() {\r\n return this.state.isRequiredFrom;\r\n }\r\n\r\n getIsRequiredTo() {\r\n return this.state.isRequiredTo;\r\n }\r\n\r\n setErrorFrom(error: string) {\r\n this.errorFromMessage = error;\r\n }\r\n\r\n setErrorTo(error: string) {\r\n this.errorToMessage = error;\r\n }\r\n getErrorFrom() {\r\n return this.errorFromMessage;\r\n }\r\n\r\n getErrorTo() {\r\n return this.errorToMessage;\r\n }\r\n\r\n validateOrder() {\r\n const from = this.getValueFrom();\r\n const to = this.getValueTo();\r\n if (\r\n this.table.context.getDateFromString!(from)! >\r\n this.table.context.getDateFromString!(to)!\r\n ) {\r\n this.errorMessage = getLabel(\r\n 'lblDateFromIsGreaterThanTo',\r\n {},\r\n this.table.context,\r\n ).text;\r\n\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n validate(showError = true): boolean {\r\n const from = this.getValueFrom();\r\n const to = this.getValueTo();\r\n\r\n if (this.state.isRequired && (!from || !to)) {\r\n if (showError) {\r\n this.errorMessage = getLabel('lblReq', {}, this.table.context).text;\r\n }\r\n return false;\r\n }\r\n if (this.state.isRequiredFrom && !from) {\r\n if (showError) {\r\n this.errorFromMessage = getLabel(\r\n 'lblRequiredFrom',\r\n {},\r\n this.table.context,\r\n ).text;\r\n }\r\n\r\n return false;\r\n }\r\n if (this.state.isRequiredTo && !to) {\r\n if (showError) {\r\n this.errorToMessage = getLabel(\r\n 'lblRequiredTo',\r\n {},\r\n this.table.context,\r\n ).text;\r\n }\r\n return false;\r\n }\r\n\r\n return this.validateOrder();\r\n }\r\n\r\n getValueForSubmit() {\r\n return [\r\n this.preset.chkFromStartOf\r\n ? JSON.stringify(this.preset)\r\n : this.getValueFrom(),\r\n this.getValueTo(),\r\n ];\r\n }\r\n}\r\n"],"names":[],"mappings":"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"}
@@ -16,6 +16,7 @@ type FilterState<ValueType = string, T extends FilterState<any> = FilterState<Va
16
16
  conditionValue?: string;
17
17
  hasEvents?: boolean;
18
18
  id?: string;
19
+ isHidden?: boolean;
19
20
  isRequired?: boolean;
20
21
  readOnly?: boolean;
21
22
  Renderer?: FilterRenderer;
@@ -42,7 +43,7 @@ declare class Filter<ValueType = string> extends Cell<FilterState<ValueType>> {
42
43
  setValue(val: ValueType, emitEvent?: boolean): void;
43
44
  setErrorMessage(error: string): void;
44
45
  getValueForSubmit(): any;
45
- validate(): boolean;
46
+ validate(showError?: boolean): boolean;
46
47
  }
47
48
 
48
49
  export { Filter, type FilterEvents, type FilterRenderer, type FilterState, type TFilterType, type TFilterValueType };
@@ -19,7 +19,9 @@ class Filter extends Cell {
19
19
  return !!this.state.asAdditional || !this.getCorrespondingColumn();
20
20
  }
21
21
  clear(emitEvent = true) {
22
- this.setValue("", emitEvent);
22
+ if (!this.state.readOnly) {
23
+ this.setValue("", emitEvent);
24
+ }
23
25
  }
24
26
  getCorrespondingColumn() {
25
27
  return this?.getRow()?.getContainer()?.getHeaderRow()?.getShownColumns().find((c) => c.getState("colName") === this.getState("colName"));
@@ -50,9 +52,9 @@ class Filter extends Cell {
50
52
  getValueForSubmit() {
51
53
  return this.getValue();
52
54
  }
53
- validate() {
55
+ validate(showError = true) {
54
56
  const isValid = this.state.isRequired ? this.hasValue() : true;
55
- if (!isValid) {
57
+ if (!isValid && showError) {
56
58
  this.errorMessage = getLabel("lblReq", {}, this.getTable().context).text;
57
59
  }
58
60
  return isValid;
@@ -1 +1 @@
1
- {"version":3,"file":"Filter.js","sources":["../../../src/data/filter/Filter.ts"],"sourcesContent":["import { Cell, type CellState } from '../primitive/Cell';\r\nimport type { FC } from 'react';\r\nimport type { Filters } from '../head/Filters';\r\nimport type { TableEvents } from '../TableController';\r\nimport { makeObservable, observable } from 'mobx';\r\nimport { getLabel } from '@apia/util';\r\n\r\nexport type FilterRenderer = FC<{ cell: Filter<any> }>;\r\n\r\nexport type TFilterValueType = 'NUMBER' | 'STRING';\r\n\r\nexport type TFilterType =\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\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 conditionValue?: string;\r\n hasEvents?: boolean;\r\n id?: string;\r\n isRequired?: boolean;\r\n readOnly?: boolean;\r\n Renderer?: FilterRenderer;\r\n runAutomatically?: boolean;\r\n showAsInteger?: boolean;\r\n title: string;\r\n tooltip: string;\r\n value: ValueType;\r\n valueType?: TFilterValueType;\r\n type: TFilterType;\r\n};\r\n\r\nexport type FilterEvents = Pick<\r\n TableEvents,\r\n 'filterBlur' | 'filterChange' | 'filterPressEnter' | 'filterValueChange'\r\n>;\r\n\r\nexport class Filter<ValueType = string> extends Cell<FilterState<ValueType>> {\r\n errorMessage: string = '';\r\n\r\n public asAdditional() {\r\n return !!this.state.asAdditional || !this.getCorrespondingColumn();\r\n }\r\n\r\n constructor(\r\n state: FilterState<ValueType>,\r\n private parse: ((v: ValueType) => ValueType) | undefined = undefined,\r\n ) {\r\n super(state);\r\n\r\n makeObservable(this, { errorMessage: observable });\r\n }\r\n\r\n clear(emitEvent = true) {\r\n this.setValue('' as ValueType, emitEvent);\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, emitEvent = true) {\r\n this.state.value = this.parse ? this.parse(val) : val;\r\n this.setErrorMessage('');\r\n\r\n this.table.emit('filterValueChange', this);\r\n if (emitEvent) {\r\n this.table.emit('filterChange', this);\r\n }\r\n }\r\n\r\n setErrorMessage(error: string) {\r\n this.errorMessage = error;\r\n }\r\n\r\n getValueForSubmit(): any {\r\n return this.getValue();\r\n }\r\n\r\n validate() {\r\n const isValid = this.state.isRequired ? this.hasValue() : true;\r\n\r\n if (!isValid) {\r\n this.errorMessage = getLabel('lblReq', {}, this.getTable().context).text;\r\n }\r\n\r\n return isValid;\r\n }\r\n}\r\n"],"names":[],"mappings":";;;;;;;;;;AAgDO,MAAM,eAAmC,IAAA,CAA6B;AAAA,EAO3E,WAAA,CACE,KAAA,EACQ,KAAA,GAAmD,MAAA,EAC3D;AACA,IAAA,KAAA,CAAM,KAAK,CAAA;AAFH,IAAA,IAAA,CAAA,KAAA,GAAA,KAAA;AARV,IAAA,aAAA,CAAA,IAAA,EAAA,cAAA,EAAuB,EAAA,CAAA;AAYrB,IAAA,cAAA,CAAe,IAAA,EAAM,EAAE,YAAA,EAAc,UAAA,EAAY,CAAA;AAAA;AACnD,EAXO,YAAA,GAAe;AACpB,IAAA,OAAO,CAAC,CAAC,IAAA,CAAK,MAAM,YAAA,IAAgB,CAAC,KAAK,sBAAA,EAAuB;AAAA;AACnE,EAWA,KAAA,CAAM,YAAY,IAAA,EAAM;AACtB,IAAA,IAAA,CAAK,QAAA,CAAS,IAAiB,SAAS,CAAA;AAAA;AAC1C,EAEA,sBAAA,GAAyB;AACvB,IAAA,OAAO,MAAM,MAAA,EAAO,EAChB,cAAa,EACb,YAAA,IACA,eAAA,EAAgB,CACjB,KAAK,CAAC,CAAA,KAAM,EAAE,QAAA,CAAS,SAAS,MAAM,IAAA,CAAK,QAAA,CAAS,SAAS,CAAC,CAAA;AAAA;AACnE,EAEA,KAAK,EAAA,EAAwB;AAC3B,IAAA,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,EAAA,EAAI,IAAI,CAAA;AAAA;AAC1B,EAEA,MAAA,GAAS;AACP,IAAA,OAAO,MAAM,MAAA,EAAO;AAAA;AACtB,EAEA,QAAA,GAAW;AACT,IAAA,OAAO,KAAK,KAAA,CAAM,KAAA;AAAA;AACpB,EAEA,QAAA,GAAW;AACT,IAAA,OAAO,CAAC,CAAC,IAAA,CAAK,QAAA,EAAS;AAAA;AACzB,EAEA,QAAA,CAAS,GAAA,EAAgB,SAAA,GAAY,IAAA,EAAM;AACzC,IAAA,IAAA,CAAK,MAAM,KAAA,GAAQ,IAAA,CAAK,QAAQ,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA,GAAI,GAAA;AAClD,IAAA,IAAA,CAAK,gBAAgB,EAAE,CAAA;AAEvB,IAAA,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,mBAAA,EAAqB,IAAI,CAAA;AACzC,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,cAAA,EAAgB,IAAI,CAAA;AAAA;AACtC;AACF,EAEA,gBAAgB,KAAA,EAAe;AAC7B,IAAA,IAAA,CAAK,YAAA,GAAe,KAAA;AAAA;AACtB,EAEA,iBAAA,GAAyB;AACvB,IAAA,OAAO,KAAK,QAAA,EAAS;AAAA;AACvB,EAEA,QAAA,GAAW;AACT,IAAA,MAAM,UAAU,IAAA,CAAK,KAAA,CAAM,UAAA,GAAa,IAAA,CAAK,UAAS,GAAI,IAAA;AAE1D,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,IAAA,CAAK,YAAA,GAAe,SAAS,QAAA,EAAU,IAAI,IAAA,CAAK,QAAA,EAAS,CAAE,OAAO,CAAA,CAAE,IAAA;AAAA;AAGtE,IAAA,OAAO,OAAA;AAAA;AAEX;;;;"}
1
+ {"version":3,"file":"Filter.js","sources":["../../../src/data/filter/Filter.ts"],"sourcesContent":["import { Cell, type CellState } from '../primitive/Cell';\r\nimport type { FC } from 'react';\r\nimport type { Filters } from '../head/Filters';\r\nimport type { TableEvents } from '../TableController';\r\nimport { makeObservable, observable } from 'mobx';\r\nimport { getLabel } from '@apia/util';\r\n\r\nexport type FilterRenderer = FC<{ cell: Filter<any> }>;\r\n\r\nexport type TFilterValueType = 'NUMBER' | 'STRING';\r\n\r\nexport type TFilterType =\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\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 conditionValue?: string;\r\n hasEvents?: boolean;\r\n id?: string;\r\n isHidden?: boolean;\r\n isRequired?: boolean;\r\n readOnly?: boolean;\r\n Renderer?: FilterRenderer;\r\n runAutomatically?: boolean;\r\n showAsInteger?: boolean;\r\n title: string;\r\n tooltip: string;\r\n value: ValueType;\r\n valueType?: TFilterValueType;\r\n type: TFilterType;\r\n};\r\n\r\nexport type FilterEvents = Pick<\r\n TableEvents,\r\n 'filterBlur' | 'filterChange' | 'filterPressEnter' | 'filterValueChange'\r\n>;\r\n\r\nexport class Filter<ValueType = string> extends Cell<FilterState<ValueType>> {\r\n errorMessage: string = '';\r\n\r\n public asAdditional() {\r\n return !!this.state.asAdditional || !this.getCorrespondingColumn();\r\n }\r\n\r\n constructor(\r\n state: FilterState<ValueType>,\r\n private parse: ((v: ValueType) => ValueType) | undefined = undefined,\r\n ) {\r\n super(state);\r\n\r\n makeObservable(this, { errorMessage: observable });\r\n }\r\n\r\n clear(emitEvent = true) {\r\n if (!this.state.readOnly) {\r\n this.setValue('' as ValueType, emitEvent);\r\n }\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, emitEvent = true) {\r\n this.state.value = this.parse ? this.parse(val) : val;\r\n this.setErrorMessage('');\r\n\r\n this.table.emit('filterValueChange', this);\r\n if (emitEvent) {\r\n this.table.emit('filterChange', this);\r\n }\r\n }\r\n\r\n setErrorMessage(error: string) {\r\n this.errorMessage = error;\r\n }\r\n\r\n getValueForSubmit(): any {\r\n return this.getValue();\r\n }\r\n\r\n validate(showError = true) {\r\n const isValid = this.state.isRequired ? this.hasValue() : true;\r\n\r\n if (!isValid && showError) {\r\n this.errorMessage = getLabel('lblReq', {}, this.getTable().context).text;\r\n }\r\n\r\n return isValid;\r\n }\r\n}\r\n"],"names":[],"mappings":";;;;;;;;;;AAiDO,MAAM,eAAmC,IAAA,CAA6B;AAAA,EAO3E,WAAA,CACE,KAAA,EACQ,KAAA,GAAmD,MAAA,EAC3D;AACA,IAAA,KAAA,CAAM,KAAK,CAAA;AAFH,IAAA,IAAA,CAAA,KAAA,GAAA,KAAA;AARV,IAAA,aAAA,CAAA,IAAA,EAAA,cAAA,EAAuB,EAAA,CAAA;AAYrB,IAAA,cAAA,CAAe,IAAA,EAAM,EAAE,YAAA,EAAc,UAAA,EAAY,CAAA;AAAA;AACnD,EAXO,YAAA,GAAe;AACpB,IAAA,OAAO,CAAC,CAAC,IAAA,CAAK,MAAM,YAAA,IAAgB,CAAC,KAAK,sBAAA,EAAuB;AAAA;AACnE,EAWA,KAAA,CAAM,YAAY,IAAA,EAAM;AACtB,IAAA,IAAI,CAAC,IAAA,CAAK,KAAA,CAAM,QAAA,EAAU;AACxB,MAAA,IAAA,CAAK,QAAA,CAAS,IAAiB,SAAS,CAAA;AAAA;AAC1C;AACF,EAEA,sBAAA,GAAyB;AACvB,IAAA,OAAO,MAAM,MAAA,EAAO,EAChB,cAAa,EACb,YAAA,IACA,eAAA,EAAgB,CACjB,KAAK,CAAC,CAAA,KAAM,EAAE,QAAA,CAAS,SAAS,MAAM,IAAA,CAAK,QAAA,CAAS,SAAS,CAAC,CAAA;AAAA;AACnE,EAEA,KAAK,EAAA,EAAwB;AAC3B,IAAA,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,EAAA,EAAI,IAAI,CAAA;AAAA;AAC1B,EAEA,MAAA,GAAS;AACP,IAAA,OAAO,MAAM,MAAA,EAAO;AAAA;AACtB,EAEA,QAAA,GAAW;AACT,IAAA,OAAO,KAAK,KAAA,CAAM,KAAA;AAAA;AACpB,EAEA,QAAA,GAAW;AACT,IAAA,OAAO,CAAC,CAAC,IAAA,CAAK,QAAA,EAAS;AAAA;AACzB,EAEA,QAAA,CAAS,GAAA,EAAgB,SAAA,GAAY,IAAA,EAAM;AACzC,IAAA,IAAA,CAAK,MAAM,KAAA,GAAQ,IAAA,CAAK,QAAQ,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA,GAAI,GAAA;AAClD,IAAA,IAAA,CAAK,gBAAgB,EAAE,CAAA;AAEvB,IAAA,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,mBAAA,EAAqB,IAAI,CAAA;AACzC,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,cAAA,EAAgB,IAAI,CAAA;AAAA;AACtC;AACF,EAEA,gBAAgB,KAAA,EAAe;AAC7B,IAAA,IAAA,CAAK,YAAA,GAAe,KAAA;AAAA;AACtB,EAEA,iBAAA,GAAyB;AACvB,IAAA,OAAO,KAAK,QAAA,EAAS;AAAA;AACvB,EAEA,QAAA,CAAS,YAAY,IAAA,EAAM;AACzB,IAAA,MAAM,UAAU,IAAA,CAAK,KAAA,CAAM,UAAA,GAAa,IAAA,CAAK,UAAS,GAAI,IAAA;AAE1D,IAAA,IAAI,CAAC,WAAW,SAAA,EAAW;AACzB,MAAA,IAAA,CAAK,YAAA,GAAe,SAAS,QAAA,EAAU,IAAI,IAAA,CAAK,QAAA,EAAS,CAAE,OAAO,CAAA,CAAE,IAAA;AAAA;AAGtE,IAAA,OAAO,OAAA;AAAA;AAEX;;;;"}
@@ -49,15 +49,14 @@ function useFocusByClick(controller) {
49
49
  if (rowElement instanceof HTMLTableRowElement) {
50
50
  const row = getRow(controller, rowElement);
51
51
  if (row?.getState("isSelectable")) {
52
- if (ev.shiftKey) {
53
- if (lastRow.current) {
54
- selectBetweenRows(controller, lastRow.current, rowElement);
55
- }
56
- } else if (ev.ctrlKey) {
57
- row?.toggleSelection();
52
+ const isMultiple = controller.getState("isSelectionMultiple");
53
+ if (isMultiple && ev.shiftKey && lastRow.current) {
54
+ selectBetweenRows(controller, lastRow.current, rowElement);
55
+ } else if (isMultiple && ev.ctrlKey) {
56
+ row.toggleSelection();
58
57
  } else {
59
58
  controller.clearSelection();
60
- row?.toggleSelection(true);
59
+ row.toggleSelection(true);
61
60
  }
62
61
  lastRow.current = rowElement;
63
62
  if (cellElement instanceof HTMLTableCellElement) {
@@ -1 +1 @@
1
- {"version":3,"file":"useFocusByClick.js","sources":["../../../../src/data/plugins/FocusControllerPlugin/useFocusByClick.ts"],"sourcesContent":["import type { MouseEvent } from 'react';\r\nimport { useRef } from 'react';\r\nimport type { Column, 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, false);\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, false);\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 controller.shoutSelection();\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 if (controller.isEditionMode) {\r\n return;\r\n }\r\n\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?.getState('isSelectable')) {\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('columnSort', cell as Column);\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"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useFocusByClick.js","sources":["../../../../src/data/plugins/FocusControllerPlugin/useFocusByClick.ts"],"sourcesContent":["import type { MouseEvent } from 'react';\r\nimport { useRef } from 'react';\r\nimport type { Column, 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, false);\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, false);\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 controller.shoutSelection();\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 if (controller.isEditionMode) {\r\n return;\r\n }\r\n\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?.getState('isSelectable')) {\r\n const isMultiple = controller.getState('isSelectionMultiple');\r\n\r\n if (isMultiple && ev.shiftKey && lastRow.current) {\r\n selectBetweenRows(controller, lastRow.current, rowElement);\r\n } else if (isMultiple && 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('columnSort', cell as Column);\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"],"names":[],"mappings":"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"}
@@ -82,7 +82,7 @@ function handleArrowKey(controller, ev) {
82
82
  if (nextFocusedCell !== cellElement && nextFocusedCell) {
83
83
  getRow(controller, rowElement).getCellByColumnName(nextFocusedCell.dataset.colname).focus();
84
84
  } else if (nextFocusedRow !== rowElement && nextFocusedRow) {
85
- if (ev.shiftKey) {
85
+ if (ev.shiftKey && controller.getState("isSelectionMultiple")) {
86
86
  selectBetweenRows(controller, rowElement, nextFocusedRow);
87
87
  } else {
88
88
  controller.clearSelection();
@@ -1 +1 @@
1
- {"version":3,"file":"useFocusByKey.js","sources":["../../../../src/data/plugins/FocusControllerPlugin/useFocusByKey.ts"],"sourcesContent":["import type { KeyboardEvent } from 'react';\r\nimport type { 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 (!ev.ctrlKey && ['Enter', 'Escape'].includes(ev.code)) {\r\n ev.preventDefault();\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 }\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"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useFocusByKey.js","sources":["../../../../src/data/plugins/FocusControllerPlugin/useFocusByKey.ts"],"sourcesContent":["import type { KeyboardEvent } from 'react';\r\nimport type { 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 && controller.getState('isSelectionMultiple')) {\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 (!ev.ctrlKey && ['Enter', 'Escape'].includes(ev.code)) {\r\n ev.preventDefault();\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 }\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"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { HTMLAttributes } from 'react';
1
+ import { ReactNode, HTMLAttributes } from 'react';
2
2
  import { Cell } from '../primitive/Cell.js';
3
3
  import { Row } from '../primitive/Row.js';
4
4
  import { TableController } from '../TableController.js';
@@ -18,6 +18,7 @@ interface TablePlugin {
18
18
  };
19
19
  onAddRow?: (controller: TableController, target: RowsGroup<any>, newRow: Row) => void;
20
20
  onResize?: (controller: TableController, colName: string, newSize: number) => void;
21
+ renderAfterRow?: (controller: TableController, row: Row, rowIndex: number) => ReactNode;
21
22
  /**
22
23
  * This hook is called when the table is renderized.
23
24
  * The elements returned by this hook will be added to the dom of the element.
@@ -1 +1 @@
1
- {"version":3,"file":"TablePlugin.js","sources":["../../../src/data/plugins/TablePlugin.tsx"],"sourcesContent":["import type { HTMLAttributes } from 'react';\r\nimport type { TableController, Row, Cell } from '..';\r\nimport type { Element } from '../primitive/Element';\r\nimport type { RowsGroup } from '../primitive/RowsGroup';\r\nimport { FocusControllerPlugin } from './FocusControllerPlugin';\r\nimport { WaiAriaPlugin } from './WaiAriaPlugin';\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"],"names":[],"mappings":";;;AA0CO,MAAM,iBAAiB,MAAM;AAAA,EAClC,IAAI,aAAA,EAAc;AAAA,EAClB,IAAI,qBAAA;AACN;;;;"}
1
+ {"version":3,"file":"TablePlugin.js","sources":["../../../src/data/plugins/TablePlugin.tsx"],"sourcesContent":["import type { HTMLAttributes, ReactNode } from 'react';\r\nimport type { TableController, Row, Cell } from '..';\r\nimport type { Element } from '../primitive/Element';\r\nimport type { RowsGroup } from '../primitive/RowsGroup';\r\nimport { FocusControllerPlugin } from './FocusControllerPlugin';\r\nimport { WaiAriaPlugin } from './WaiAriaPlugin';\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 renderAfterRow?: (\r\n controller: TableController,\r\n row: Row,\r\n rowIndex: number,\r\n ) => ReactNode;\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"],"names":[],"mappings":";;;AAgDO,MAAM,iBAAiB,MAAM;AAAA,EAClC,IAAI,aAAA,EAAc;AAAA,EAClB,IAAI,qBAAA;AACN;;;;"}
@@ -14,6 +14,7 @@ type CellState<T extends CellState<any> = CellState<any>> = {
14
14
  isDocument?: boolean;
15
15
  documentUrl?: string;
16
16
  tag?: 'td' | 'th;';
17
+ tooltip?: string;
17
18
  Renderer?: FC<{
18
19
  cell: Cell<T>;
19
20
  }>;
@@ -1 +1 @@
1
- {"version":3,"file":"Cell.js","sources":["../../../src/data/primitive/Cell.ts"],"sourcesContent":["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 allowResize?: boolean;\r\n isFocused?: boolean;\r\n isHidden?: boolean;\r\n isHtml?: boolean;\r\n isBold?: boolean;\r\n isDocument?: boolean;\r\n documentUrl?: string;\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"],"names":[],"mappings":";;;;;;;;AAuBO,MAAM,aAEH,OAAA,CAAe;AAAA,EAFlB,WAAA,GAAA;AAAA,IAAA,KAAA,CAAA,GAAA,SAAA,CAAA;AAGL,IAAA,aAAA,CAAA,IAAA,EAAU,WAAA,EAAwB,IAAA,CAAA;AAAA;AAAA,EAElC,aAAA,GAAgB;AACd,IAAA,OAAO,IAAA,CAAK,SAAS,SAAS,CAAA;AAAA;AAChC,EAEA,QAAA,GAAW;AACT,IAAA,OAAO,IAAA,CAAK,MAAA,EAAO,CAAG,YAAA,CAAa,IAAI,CAAA;AAAA;AACzC,EAEA,MAAA,GAAS;AACP,IAAA,OAAO,IAAA,CAAK,SAAA;AAAA;AACd,EAEA,OAAO,GAAA,EAAiB;AACtB,IAAA,IAAA,CAAK,SAAA,GAAY,GAAA;AACjB,IAAA,OAAO,IAAA;AAAA;AACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,KAAA,CAAM,UAAmB,IAAA,EAAM;AAC7B,IAAA,IAAA,CAAK,KAAA,CAAM,cAAA,CAAe,IAAA,EAAM,OAAO,CAAA;AAAA;AACzC,EAEA,YAAY,KAAA,EAAuB;AACjC,IAAA,IAAA,CAAK,QAAQ,EAAE,GAAG,IAAA,CAAK,KAAA,EAAO,GAAG,KAAA,EAAM;AAAA;AAE3C;;;;"}
1
+ {"version":3,"file":"Cell.js","sources":["../../../src/data/primitive/Cell.ts"],"sourcesContent":["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 allowResize?: boolean;\r\n isFocused?: boolean;\r\n isHidden?: boolean;\r\n isHtml?: boolean;\r\n isBold?: boolean;\r\n isDocument?: boolean;\r\n documentUrl?: string;\r\n tag?: 'td' | 'th;';\r\n tooltip?: string;\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"],"names":[],"mappings":";;;;;;;;AAwBO,MAAM,aAEH,OAAA,CAAe;AAAA,EAFlB,WAAA,GAAA;AAAA,IAAA,KAAA,CAAA,GAAA,SAAA,CAAA;AAGL,IAAA,aAAA,CAAA,IAAA,EAAU,WAAA,EAAwB,IAAA,CAAA;AAAA;AAAA,EAElC,aAAA,GAAgB;AACd,IAAA,OAAO,IAAA,CAAK,SAAS,SAAS,CAAA;AAAA;AAChC,EAEA,QAAA,GAAW;AACT,IAAA,OAAO,IAAA,CAAK,MAAA,EAAO,CAAG,YAAA,CAAa,IAAI,CAAA;AAAA;AACzC,EAEA,MAAA,GAAS;AACP,IAAA,OAAO,IAAA,CAAK,SAAA;AAAA;AACd,EAEA,OAAO,GAAA,EAAiB;AACtB,IAAA,IAAA,CAAK,SAAA,GAAY,GAAA;AACjB,IAAA,OAAO,IAAA;AAAA;AACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,KAAA,CAAM,UAAmB,IAAA,EAAM;AAC7B,IAAA,IAAA,CAAK,KAAA,CAAM,cAAA,CAAe,IAAA,EAAM,OAAO,CAAA;AAAA;AACzC,EAEA,YAAY,KAAA,EAAuB;AACjC,IAAA,IAAA,CAAK,QAAQ,EAAE,GAAG,IAAA,CAAK,KAAA,EAAO,GAAG,KAAA,EAAM;AAAA;AAE3C;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@apia/table2-controller",
3
- "version": "5.0.3",
3
+ "version": "5.2.0",
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": "^5.0.3",
33
+ "@apia/util": "^5.2.0",
34
34
  "mobx": "6.12.3",
35
35
  "mobx-react-lite": "3.4.3"
36
36
  },
37
- "gitHead": "f45775979bc2be3fdb389ab24155446758840c14"
37
+ "gitHead": "f3cb413783ab5cb9a35a7398003e6a5e27a8cbac"
38
38
  }