@apia/table 4.0.9 → 4.0.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -3,7 +3,7 @@ import React__default, { FunctionComponent, ReactNode, FC } from 'react';
3
3
  import { BoxProps } from '@apia/theme';
4
4
  import { IconType } from '@meronex/icons';
5
5
  import * as _apia_util from '@apia/util';
6
- import { TApiaFilter, TModify, TId } from '@apia/util';
6
+ import { TApiaFilter, TModify, TId, EventEmitter } from '@apia/util';
7
7
  import * as _reduxjs_toolkit from '@reduxjs/toolkit';
8
8
  import { PayloadAction } from '@reduxjs/toolkit';
9
9
  import * as immer_dist_internal from 'immer/dist/internal';
@@ -30,7 +30,7 @@ type TColoredElement = {
30
30
  * el servidor devuelve Up y Down para referirse
31
31
  * al orden actual de una columna.
32
32
  */
33
- type TResponsiveTableSortValue = null | 'A' | 'D' | 'Down' | 'Up';
33
+ type TResponsiveTableSortValue = null | 'A' | 'D' | 'Down' | 'Up' | 'Asc' | 'Des';
34
34
  /**
35
35
  * Cada vez que se hace click en el botón del
36
36
  * cabezal de una columna, si la columna tiene
@@ -667,10 +667,18 @@ declare const responsiveTableActions: _reduxjs_toolkit.CaseReducerActions<{
667
667
  * Esto permite una experiencia más fluida en el manejo del foco. Además, al no depender del estado para calcular las propiedades, se tiene un mayor control sobre qué elementos son afectados y de qué manera, permitiendo
668
668
  */
669
669
  declare class Controller2 {
670
+ #private;
670
671
  readonly tableName: string;
671
672
  constructor(tableName: string);
672
- protected events: Pick<TKeyHandlerProps, 'onRowClick' | 'onSelectRows' | 'onChangeSelection'>;
673
- setEvents(events: Pick<TKeyHandlerProps, 'onRowClick' | 'onSelectRows' | 'onChangeSelection'>): void;
673
+ events: EventEmitter<{
674
+ onRowClick: [row: {
675
+ index: number;
676
+ row: TResponsiveTableRow<Record<string, unknown>>;
677
+ }, focusedIndex: number];
678
+ onSelectRows: [newRows: TResponsiveTableRowsSelectionEvent, focusedIndex: number];
679
+ onChangeSelection: Parameters<NonNullable<TKeyHandlerProps['onChangeSelection']>>;
680
+ }>;
681
+ setResponsiveTableContextEvents(evs: Pick<TKeyHandlerProps, 'onRowClick' | 'onSelectRows' | 'onChangeSelection'>): void;
674
682
  private unsubscribe;
675
683
  private el;
676
684
  setRef: (el: HTMLElement) => void;
@@ -711,6 +719,12 @@ declare class Controller2 {
711
719
  }
712
720
  declare function makeController2(tableName: string): [Controller2, FC<TKeyHandlerProps>];
713
721
 
722
+ declare const RangeFilter: ({ filter, tableName, className, }: {
723
+ filter: TApiaFilter;
724
+ tableName?: string | undefined;
725
+ className?: string | undefined;
726
+ }) => React.JSX.Element;
727
+
714
728
  declare const TableContextReproducer: ({ children, tableName, }: {
715
729
  children: ReactNode;
716
730
  tableName: string;
@@ -798,5 +812,5 @@ declare const TableRenderer: React__default.MemoExoticComponent<({ variant }: {
798
812
  variant?: string | undefined;
799
813
  }) => React__default.JSX.Element>;
800
814
 
801
- export { AccordionCell, AccordionDocNameCellRenderer, AccordionElement, AccordionHTMLCellRenderer, AccordionRenderer, Additional, AdditionalColumnDefaultRenderer, Controller2, DefaultCellRenderer, DefaultRowRenderer, DocNameCellRenderer, HTMLCellRenderer, type IAccordionElement, IsLoadingRenderer, NoEllipsisCellRenderer, NoRegistersRenderer, Pagination, PriorityAccordionRenderer, PriorityRenderer, Responsive, ResponsiveTable, ResponsiveTableContext, RowStatesRenderer, Sort, StatusAccordionRenderer, StatusRenderer, type TAccordionCellRenderer, type TAccordionCellRendererProps, type TColoredElement, type TDocNameCellRenderer, type TDocNameCellRendererProps, type TResponsiveTableCell, type TResponsiveTableCellRenderer, type TResponsiveTableCellRendererProps, type TResponsiveTableColumn, type TResponsiveTableContext, type TResponsiveTableContextProps, type TResponsiveTableRow, type TResponsiveTableRowRenderer, type TResponsiveTableRowRendererProps, type TResponsiveTableRowState, type TResponsiveTableRowsSelectionEvent, type TResponsiveTableSortChangeEvent, type TResponsiveTableSortValue, type TResponsiveTableStoreProps, type TResponsiveTableWithRendererElement, TableContextReproducer, TableRenderer, defaultLabels, getPriorityHandler, getResponsiveTableContext, getStatusRendererClassName, makeAccordionAsyncRenderer, makeAsyncRenderer, makeController2, responsiveTableActions, responsiveTableStore, useResponsiveTable, useResponsiveTableContext };
815
+ export { AccordionCell, AccordionDocNameCellRenderer, AccordionElement, AccordionHTMLCellRenderer, AccordionRenderer, Additional, AdditionalColumnDefaultRenderer, Controller2, DefaultCellRenderer, DefaultRowRenderer, DocNameCellRenderer, HTMLCellRenderer, type IAccordionElement, IsLoadingRenderer, NoEllipsisCellRenderer, NoRegistersRenderer, Pagination, PriorityAccordionRenderer, PriorityRenderer, RangeFilter, Responsive, ResponsiveTable, ResponsiveTableContext, RowStatesRenderer, Sort, StatusAccordionRenderer, StatusRenderer, type TAccordionCellRenderer, type TAccordionCellRendererProps, type TColoredElement, type TDocNameCellRenderer, type TDocNameCellRendererProps, type TResponsiveTableCell, type TResponsiveTableCellRenderer, type TResponsiveTableCellRendererProps, type TResponsiveTableColumn, type TResponsiveTableContext, type TResponsiveTableContextProps, type TResponsiveTableRow, type TResponsiveTableRowRenderer, type TResponsiveTableRowRendererProps, type TResponsiveTableRowState, type TResponsiveTableRowsSelectionEvent, type TResponsiveTableSortChangeEvent, type TResponsiveTableSortValue, type TResponsiveTableStoreProps, type TResponsiveTableWithRendererElement, TableContextReproducer, TableRenderer, defaultLabels, getPriorityHandler, getResponsiveTableContext, getStatusRendererClassName, makeAccordionAsyncRenderer, makeAsyncRenderer, makeController2, responsiveTableActions, responsiveTableStore, useResponsiveTable, useResponsiveTableContext };
802
816
  //# sourceMappingURL=index.d.ts.map
package/dist/index.js CHANGED
@@ -3,8 +3,8 @@ import React, { useMemo, useRef, useState, memo, useEffect, useCallback, createR
3
3
  import { Box, getVariant, Input, Select, useBreakpointIndex, Label, Link, Spinner } from '@apia/theme';
4
4
  import { useMount, useUpdateEffect, useUnmount, useThrottleFn } from 'ahooks';
5
5
  import uniqueId from 'lodash-es/uniqueId';
6
- import { createSlice, injectReducers, shallowEqual as shallowEqual$1 } from '@apia/store';
7
- import { addBoundary, useLatest, useUpdateEffect as useUpdateEffect$1, getSpecificParent, isChild, autoDisconnectMutationObserver, getFocusSelector, cantFocusSelector, globalFocus, scrollParentIntoElement, customEvents, debugDispatcher, persistentStorage, EventEmitter, usePrevious, useIntermediateValue, getLabel, getDateFormat, formatMessage, noNaN, getIndex, downloadUrl, arrayOrArray, useMount as useMount$1 } from '@apia/util';
6
+ import { injectReducers, createSlice, shallowEqual as shallowEqual$1 } from '@apia/store';
7
+ import { addBoundary, useLatest, useUpdateEffect as useUpdateEffect$1, getSpecificParent, isChild, autoDisconnectMutationObserver, getFocusSelector, cantFocusSelector, globalFocus, scrollParentIntoElement, customEvents, persistentStorage, EventEmitter, debugDispatcher, usePrevious, useIntermediateValue, getLabel, formatMessage, getDateFormat, noNaN, getIndex, downloadUrl, arrayOrArray, useMount as useMount$1 } from '@apia/util';
8
8
  import { shallowEqual } from 'react-redux';
9
9
  import { useOtherTagButton, AutoEllipsis, ApiaFilter, IconButton, AccordionItem, Accordion, RequiredMark, ApiaUtil, SimpleButton } from '@apia/components';
10
10
  import { Icon } from '@apia/icons';
@@ -161,7 +161,6 @@ function willHandleKey(ev, state) {
161
161
  }
162
162
  function handleKey(state, { ev }) {
163
163
  const {
164
- altKey: isAltPressed,
165
164
  ctrlKey: isCtrlPressed,
166
165
  key,
167
166
  shiftKey: isShiftPressed
@@ -174,7 +173,6 @@ function handleKey(state, { ev }) {
174
173
  newFocusedRow,
175
174
  ...rest
176
175
  }) => setNewFocused(state, {
177
- altKey: isAltPressed,
178
176
  ctrlKey: isCtrlPressed,
179
177
  shiftKey: isShiftPressed,
180
178
  newFocusedColumn,
@@ -345,7 +343,6 @@ const responsiveTableSlice = createSlice({
345
343
  state[tableName] = { ...state[tableName], ...rest };
346
344
  if (handleFocus !== false) {
347
345
  setNewFocused(state[tableName], {
348
- altKey: false,
349
346
  ctrlKey: false,
350
347
  shiftKey: false,
351
348
  shouldSelectNewFocused: rest.isFocused ?? state[tableName].isFocused
@@ -379,7 +376,6 @@ const responsiveTableSlice = createSlice({
379
376
  ...payload.newRows
380
377
  );
381
378
  setNewFocused(state[payload.tableName], {
382
- altKey: false,
383
379
  ctrlKey: false,
384
380
  shiftKey: false,
385
381
  shouldSelectNewFocused: true,
@@ -395,7 +391,6 @@ const responsiveTableSlice = createSlice({
395
391
  (_, index) => !payload.rowIndices.includes(index)
396
392
  );
397
393
  setNewFocused(state[payload.tableName], {
398
- altKey: false,
399
394
  ctrlKey: false,
400
395
  shiftKey: false,
401
396
  shouldSelectNewFocused: true,
@@ -1188,10 +1183,12 @@ const NoMemoHeaderCell = ({
1188
1183
  const uniqueId = window.location.href.match(/busEntId=(\d+)/)?.[1] ?? window.location.href.match(/query=(\d+)/)?.[1] ?? "";
1189
1184
  const isGlobal = window.isGlobal ? "isGlobal" : "notGlobal";
1190
1185
  const actualName = name + uniqueId + String(isGlobal);
1191
- const column = useResponsiveTable((global) => {
1186
+ const columns = useResponsiveTable((global) => {
1192
1187
  const tableState = global.responsiveTableSlice[name];
1193
- return tableState?.columns[columnIndex];
1188
+ return tableState?.columns;
1194
1189
  }, shallowEqual);
1190
+ const column = columns[columnIndex];
1191
+ const additionalInfoColumns = columns.filter((c) => c.showAsAdditional);
1195
1192
  const storedWidth = persistentStorage[widthStorageName]?.[actualName]?.[column.name];
1196
1193
  const [width, setWidth] = React.useState(storedWidth ?? 200);
1197
1194
  const [isResize, setIsResize] = React.useState(storedWidth !== void 0);
@@ -1342,6 +1339,15 @@ const NoMemoHeaderCell = ({
1342
1339
  }
1343
1340
  };
1344
1341
  });
1342
+ additionalInfoColumns.forEach((c) => {
1343
+ persistentStorage[widthStorageName] = {
1344
+ ...persistentStorage[widthStorageName],
1345
+ [actualName]: {
1346
+ ...persistentStorage[widthStorageName]?.[actualName],
1347
+ [c.name]: 100
1348
+ }
1349
+ };
1350
+ });
1345
1351
  document.removeEventListener("mousemove", resize);
1346
1352
  document.removeEventListener("mouseup", unsuscribe);
1347
1353
  };
@@ -1404,9 +1410,9 @@ const NoMemoRangeFilter = ({
1404
1410
  const { onFilterBlur, onFilterChange, onFilterPressEnter } = useResponsiveTableContext(tableName);
1405
1411
  const filterLow = {
1406
1412
  ...filter,
1407
- changeFiltersTimestamp: filter.changeFiltersTimestamp,
1413
+ changeFiltersTimestamp: filter?.changeFiltersTimestamp,
1408
1414
  currentValue: filter.currentValue,
1409
- deleteFiltersTimestamp: filter.deleteFiltersTimestamp,
1415
+ deleteFiltersTimestamp: filter?.deleteFiltersTimestamp,
1410
1416
  id: filter.id,
1411
1417
  toolTip: filter.toolTip,
1412
1418
  type: "apiaNumber"
@@ -1415,13 +1421,13 @@ const NoMemoRangeFilter = ({
1415
1421
  const lastEmittedHigh = useRef(null);
1416
1422
  const lastEmittedLow = useRef(null);
1417
1423
  const lastEmittedMultiplier = useRef(1);
1418
- const previousChangeTimestamp = usePrevious(filter.changeFiltersTimestamp);
1419
- const previousDeleteTimestamp = usePrevious(filter.deleteFiltersTimestamp);
1420
- if (previousChangeTimestamp.current !== filter.changeFiltersTimestamp) {
1424
+ const previousChangeTimestamp = usePrevious(filter?.changeFiltersTimestamp);
1425
+ const previousDeleteTimestamp = usePrevious(filter?.deleteFiltersTimestamp);
1426
+ if (previousChangeTimestamp.current !== filter?.changeFiltersTimestamp) {
1421
1427
  lastEmittedLow.current = filterLow.currentValue;
1422
1428
  lastEmittedHigh.current = filterLow.filterToValue || "";
1423
1429
  }
1424
- if (previousDeleteTimestamp.current !== filter.deleteFiltersTimestamp) {
1430
+ if (previousDeleteTimestamp.current !== filter?.deleteFiltersTimestamp) {
1425
1431
  lastEmittedLow.current = "";
1426
1432
  lastEmittedHigh.current = "";
1427
1433
  }
@@ -2583,7 +2589,7 @@ const Responsive = React.memo(NoMemoResponsive);
2583
2589
  var __defProp$1 = Object.defineProperty;
2584
2590
  var __defNormalProp$1 = (obj, key, value) => key in obj ? __defProp$1(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
2585
2591
  var __publicField$1 = (obj, key, value) => {
2586
- __defNormalProp$1(obj, typeof key !== "symbol" ? key + "" : key, value);
2592
+ __defNormalProp$1(obj, key + "" , value);
2587
2593
  return value;
2588
2594
  };
2589
2595
  const maximizationPersist = {
@@ -3319,10 +3325,31 @@ var __publicField = (obj, key, value) => {
3319
3325
  __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
3320
3326
  return value;
3321
3327
  };
3328
+ var __accessCheck = (obj, member, msg) => {
3329
+ if (!member.has(obj))
3330
+ throw TypeError("Cannot " + msg);
3331
+ };
3332
+ var __privateGet = (obj, member, getter) => {
3333
+ __accessCheck(obj, member, "read from private field");
3334
+ return getter ? getter.call(obj) : member.get(obj);
3335
+ };
3336
+ var __privateAdd = (obj, member, value) => {
3337
+ if (member.has(obj))
3338
+ throw TypeError("Cannot add the same private member more than once");
3339
+ member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
3340
+ };
3341
+ var __privateSet = (obj, member, value, setter) => {
3342
+ __accessCheck(obj, member, "write to private field");
3343
+ member.set(obj, value);
3344
+ return value;
3345
+ };
3346
+ var _unsubscribe;
3322
3347
  class Controller2 {
3323
3348
  constructor(tableName) {
3324
3349
  this.tableName = tableName;
3325
- __publicField(this, "events", {});
3350
+ __publicField(this, "events", new EventEmitter());
3351
+ __privateAdd(this, _unsubscribe, () => {
3352
+ });
3326
3353
  __publicField(this, "unsubscribe", () => {
3327
3354
  });
3328
3355
  __publicField(this, "el", null);
@@ -3358,18 +3385,29 @@ class Controller2 {
3358
3385
  }, []);
3359
3386
  const rowIndex = noNaN(row?.dataset.rowindex || "a", -1);
3360
3387
  if (row && table && selectedRows.length > 0 && rowIndex >= 0) {
3361
- this.events.onSelectRows?.(
3388
+ this.events.emit("onSelectRows", [
3362
3389
  selectedRows,
3363
3390
  this.getState().focusedRow
3364
- );
3391
+ ]);
3365
3392
  }
3366
3393
  }
3367
3394
  });
3368
3395
  this.handleClickEvent = handleMouseDownEvent.bind(this);
3369
3396
  this.handleKeyDownEvent = handleKeyDownEvent.bind(this);
3370
3397
  }
3371
- setEvents(events) {
3372
- this.events = events;
3398
+ setResponsiveTableContextEvents(evs) {
3399
+ __privateGet(this, _unsubscribe).call(this);
3400
+ const u1 = this.events.on(
3401
+ "onChangeSelection",
3402
+ (a) => evs.onChangeSelection?.(...a)
3403
+ );
3404
+ const u2 = this.events.on("onRowClick", (a) => evs.onRowClick?.(...a));
3405
+ const u3 = this.events.on("onSelectRows", (a) => evs.onSelectRows?.(...a));
3406
+ __privateSet(this, _unsubscribe, () => {
3407
+ u1();
3408
+ u2();
3409
+ u3();
3410
+ });
3373
3411
  }
3374
3412
  /**
3375
3413
  * Returns a copy of the current state object
@@ -3385,12 +3423,12 @@ class Controller2 {
3385
3423
  }
3386
3424
  setState(state) {
3387
3425
  if (state.selectedRows && !shallowEqual$1(state.selectedRows, this.getState().selectedRows)) {
3388
- this.events.onChangeSelection?.(
3426
+ this.events.emit("onChangeSelection", [
3389
3427
  state.selectedRows.map((index) => ({
3390
3428
  index,
3391
3429
  row: this.getState().rows[index]
3392
3430
  }))
3393
- );
3431
+ ]);
3394
3432
  }
3395
3433
  if (state.scrollIntoViewRow !== void 0 && state.scrollIntoViewRow !== this.getState().scrollIntoViewRow) {
3396
3434
  const row = this.el?.querySelector(
@@ -3418,11 +3456,12 @@ class Controller2 {
3418
3456
  });
3419
3457
  }
3420
3458
  }
3459
+ _unsubscribe = new WeakMap();
3421
3460
  const Controller2Component = ({
3422
3461
  controller,
3423
3462
  ...props
3424
3463
  }) => {
3425
- controller.setEvents({
3464
+ controller.setResponsiveTableContextEvents({
3426
3465
  onChangeSelection: props.onChangeSelection,
3427
3466
  onSelectRows: props.onSelectRows,
3428
3467
  onRowClick: props.onRowClick
@@ -3828,5 +3867,5 @@ const NoMemoStatusAccordionRenderer = React.forwardRef(({ cell, column }, curren
3828
3867
  NoMemoStatusAccordionRenderer.displayName = "StatusAccordionRenderer";
3829
3868
  const StatusAccordionRenderer = NoMemoStatusAccordionRenderer;
3830
3869
 
3831
- export { AccordionCell, AccordionDocNameCellRenderer, AccordionElement, AccordionHTMLCellRenderer, AccordionRenderer, Additional, AdditionalColumnDefaultRenderer, Controller2, DefaultCellRenderer, DefaultRowRenderer, DocNameCellRenderer, HTMLCellRenderer, IsLoadingRenderer, NoEllipsisCellRenderer, NoRegistersRenderer, Pagination, PriorityAccordionRenderer, PriorityRenderer, Responsive, ResponsiveTable, ResponsiveTableContext, RowStatesRenderer, Sort, StatusAccordionRenderer, StatusRenderer, TableContextReproducer, TableRenderer, defaultLabels, getPriorityHandler, getResponsiveTableContext, getStatusRendererClassName, makeAccordionAsyncRenderer, makeAsyncRenderer, makeController2, responsiveTableActions, responsiveTableStore, useResponsiveTable, useResponsiveTableContext };
3870
+ export { AccordionCell, AccordionDocNameCellRenderer, AccordionElement, AccordionHTMLCellRenderer, AccordionRenderer, Additional, AdditionalColumnDefaultRenderer, Controller2, DefaultCellRenderer, DefaultRowRenderer, DocNameCellRenderer, HTMLCellRenderer, IsLoadingRenderer, NoEllipsisCellRenderer, NoRegistersRenderer, Pagination, PriorityAccordionRenderer, PriorityRenderer, RangeFilter, Responsive, ResponsiveTable, ResponsiveTableContext, RowStatesRenderer, Sort, StatusAccordionRenderer, StatusRenderer, TableContextReproducer, TableRenderer, defaultLabels, getPriorityHandler, getResponsiveTableContext, getStatusRendererClassName, makeAccordionAsyncRenderer, makeAsyncRenderer, makeController2, responsiveTableActions, responsiveTableStore, useResponsiveTable, useResponsiveTableContext };
3832
3871
  //# sourceMappingURL=index.js.map