@apia/table 4.0.45 → 5.0.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.
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/package.json +7 -7
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/types.ts","../src/store/selection/getInitialState.ts","../src/store/selection/setNewFocused.ts","../src/store/selection/handleKey.ts","../src/store/selection/getReduxActions.ts","../src/controller2/getController2ReduxActions.ts","../src/store/index.ts","../src/ResponsiveTableContext.tsx","../src/store/selection/makeKeyHandler.tsx","../src/KeyHandler.tsx","../src/store/selection/useDomProps.ts","../src/HeaderCell.tsx","../src/renderers/RowStatesRenderer.tsx","../src/StateCell.tsx","../src/filters/RangeFilter.tsx","../src/FilterCell.tsx","../src/Header.tsx","../src/renderers/AdditionalColumnDefaultRenderer.tsx","../src/SeparatorCell.tsx","../src/renderers/DefaultRowRenderer.tsx","../src/renderers/DefaultCellRenderer.tsx","../src/Cell.tsx","../src/Row.tsx","../src/chanchullos/LoadingContext.tsx","../src/renderers/NoRegistersRenderer.tsx","../src/renderers/TableRenderer.tsx","../src/renderers/AccordionCell.tsx","../src/renderers/AccordionElement.tsx","../src/renderers/AccordionRenderer.tsx","../src/ResponsiveTable.tsx","../src/filters/Sort.tsx","../src/filters/InnerRender.tsx","../src/filters/Additional.tsx","../src/filters/Responsive.tsx","../src/pagination/useIsMaximized.tsx","../src/pagination/index.tsx","../src/filters/Grouped.tsx","../src/controller2/applySelectionAttributes.ts","../src/controller2/handleMouseDownEvent.ts","../src/controller2/applyFocusAttributes.ts","../src/controller2/handleKeyDownEvent.ts","../src/controller2/Controller2.tsx","../src/TableContextReproducer.tsx","../src/renderers/DocNameCellRenderer.tsx","../src/renderers/AccordionDocNameCellRenderer.tsx","../src/renderers/AccordionHTMLCellRenderer.tsx","../src/renderers/HTMLCellRenderer.tsx","../src/renderers/IsLoadingRenderer.tsx","../src/renderers/makeAccordionAsyncRenderer.tsx","../src/renderers/makeAsyncRenderer.tsx","../src/renderers/NoEllipsisCellRenderer.tsx","../src/renderers/PriorityRenderer.tsx","../src/renderers/PriorityAccordionRenderer.tsx","../src/renderers/StatusRenderer.tsx","../src/renderers/StatusAccordionRenderer.tsx"],"sourcesContent":["import { IconType } from '@meronex/icons';\r\nimport React, { FC, ReactNode } from 'react';\r\nimport { TApiaFilter, TModify } from '@apia/util';\r\nimport { TAccordionCellRenderer } from './renderers/AccordionCell';\r\nimport {\r\n ISelectableState,\r\n TBasicRow,\r\n TKeyHandlerProps,\r\n} from './store/selection/types';\r\n\r\nexport type TColoredElement = {\r\n background?: string;\r\n color?: string;\r\n};\r\n\r\n/**\r\n * Se encontró en algunos casos particulares que\r\n * el servidor devuelve Up y Down para referirse\r\n * al orden actual de una columna.\r\n */\r\nexport type TResponsiveTableSortValue =\r\n | null\r\n | 'A'\r\n | 'D'\r\n | 'Down'\r\n | 'Up'\r\n | 'Asc'\r\n | 'Des';\r\n\r\n/**\r\n * Cada vez que se hace click en el botón del\r\n * cabezal de una columna, si la columna tiene\r\n * habilitado el ordenamiento, se emite un\r\n * evento de este tipo, informando cuál columna\r\n * emitió el evento, y cuál es el nuevo sortValue.\r\n */\r\nexport type TResponsiveTableSortChangeEvent = {\r\n name: string;\r\n column: TResponsiveTableColumn;\r\n columnIndex: number;\r\n /**\r\n * Es el orden que la columna debería tener\r\n * si no hay ningún motivo para evitar que\r\n * la acción de ordenamiento se lleve a cabo.\r\n *\r\n * Es importante notar que el componente\r\n * responsiveTable no realiza ninguna acción\r\n * de ordenamiento por defecto, sino que es\r\n * quien la usa, quien debe realizar las\r\n * acciones correspondientes e informarlo a\r\n * la tabla actualizando los registros y el\r\n * estado de la columna correspondiente.\r\n */\r\n sortValue: TResponsiveTableSortValue;\r\n};\r\n\r\n/**\r\n * Cada celda admite un renderer, que recibe\r\n * propiedades personalizadas. Este tipo define\r\n * cuál es la forma de esas propiedades.\r\n */\r\nexport type TResponsiveTableCellRendererProps<\r\n RendererPropsType extends Partial<\r\n Record<keyof RendererPropsType, unknown>\r\n > = Record<string, unknown>,\r\n HTML = HTMLTableCellElement,\r\n> = {\r\n cell: TResponsiveTableCell<RendererPropsType>;\r\n column: TResponsiveTableColumn;\r\n row: TResponsiveTableRow;\r\n} & React.AllHTMLAttributes<HTML>;\r\n\r\nexport type TResponsiveTableCellRenderer<\r\n RendererPropsType extends Partial<\r\n Record<keyof RendererPropsType, unknown>\r\n > = Record<string, unknown>,\r\n> = React.FunctionComponent<\r\n TResponsiveTableCellRendererProps<RendererPropsType>\r\n>;\r\n\r\n/**\r\n * Algunos elementos de la tabla admiten un\r\n * Renderer personalizado. Dichos elementos\r\n * extienden este tipo.\r\n */\r\nexport type TResponsiveTableWithRendererElement<\r\n RendererPropsType extends Partial<\r\n Record<keyof RendererPropsType, unknown>\r\n > = Record<string, unknown>,\r\n> = {\r\n /**\r\n * Si se desea, el elemento admite un componente\r\n * personalizado para encargarse del renderizado\r\n * del mismo en el modo responsivo. De esta forma, se puede proveer\r\n * de comportamiento específico a cualquier\r\n * elemento de la tabla.\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n AccordionRenderer?: TAccordionCellRenderer<any>;\r\n /**\r\n * Son las propiedades que se desean pasar al\r\n * componente de renderizado personalizado que\r\n * se haya establecido.\r\n *\r\n * Estas props serán obviadas en caso de que\r\n * no haya componente de renderizado personalizado.\r\n */\r\n rendererProps?: RendererPropsType;\r\n /**\r\n * Si se desea, el elemento admite un componente\r\n * personalizado para encargarse del renderizado\r\n * del mismo. De esta forma, se puede proveer\r\n * de comportamiento específico a cualquier\r\n * elemento de la tabla.\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n Renderer?: TResponsiveTableCellRenderer<any>;\r\n};\r\n\r\nexport type TResponsiveTableCell<\r\n RendererPropsType extends Partial<\r\n Record<keyof RendererPropsType, unknown>\r\n > = Record<string, unknown>,\r\n> = {\r\n children?: ReactNode;\r\n} & TResponsiveTableWithRendererElement<RendererPropsType> &\r\n Partial<\r\n Pick<\r\n HTMLTableCellElement,\r\n 'ariaLabel' | 'className' | 'colSpan' | 'id' | 'rowSpan' | 'title'\r\n >\r\n > &\r\n TColoredElement;\r\n\r\n/**\r\n * Cada celda admite un renderer, que recibe\r\n * propiedades personalizadas. Este tipo define\r\n * cuál es la forma de esas propiedades.\r\n */\r\nexport type TResponsiveTableRowRendererProps<\r\n RendererPropsType extends Partial<\r\n Record<keyof RendererPropsType, unknown>\r\n > = Record<string, unknown>,\r\n> = {\r\n row: TResponsiveTableRow<RendererPropsType>;\r\n rowIndex: number;\r\n} & React.AllHTMLAttributes<HTMLTableRowElement>;\r\n\r\nexport type TResponsiveTableRowRenderer<\r\n RendererPropsType extends Partial<\r\n Record<keyof RendererPropsType, unknown>\r\n > = Record<string, unknown>,\r\n> = React.FunctionComponent<\r\n TResponsiveTableRowRendererProps<RendererPropsType>\r\n>;\r\n\r\nexport type TResponsiveTableRow<\r\n RendererPropsType extends Partial<\r\n Record<keyof RendererPropsType, unknown>\r\n > = Record<string, unknown>,\r\n> = TBasicRow &\r\n TColoredElement & {\r\n accordionButtonProps?: {\r\n rightButtons?: React.ReactNode;\r\n onUserPressEnter?: (ev: React.KeyboardEvent) => unknown;\r\n };\r\n cells: TResponsiveTableCell[];\r\n /**\r\n * Si se pasa en true, la fila se mostrará como un separador\r\n */\r\n separator?: boolean;\r\n initiallySelected?: boolean;\r\n\r\n renderer?: TResponsiveTableRowRenderer<RendererPropsType>;\r\n rendererProps?: RendererPropsType;\r\n /**\r\n * Permite pasar propiedades arbitrarias a un row y recuperarlas en los\r\n * eventos de onClick por ejemplo.\r\n */\r\n rowProps?: RendererPropsType;\r\n isHidden?: boolean;\r\n /**\r\n * Los estados de la fila agregan un ícono en la columna\r\n * especial que es la que se muestra a la izquierda y\r\n * contiene, cuando existe, el botón de más información.\r\n */\r\n states?: TResponsiveTableRowState[];\r\n } & Partial<\r\n Pick<\r\n HTMLTableCellElement,\r\n 'ariaLabel' | 'colSpan' | 'className' | 'rowSpan' | 'title'\r\n >\r\n >;\r\n\r\nexport type TResponsiveTableRowState = {\r\n /**\r\n * Es un className que se agregará al elemento <tr>\r\n */\r\n className?: string;\r\n Icon: IconType;\r\n color?: string;\r\n tooltip: string;\r\n};\r\n\r\nexport type TResponsiveTableColumn = TResponsiveTableWithRendererElement & {\r\n /** Con esta propiedad se puede pasar parámetros opcionales */\r\n additionalData?: Record<string, unknown>;\r\n autoAdjustWidth?: boolean;\r\n /**\r\n * Determina si la columna admite ordenamiento.\r\n */\r\n allowSorting?: boolean;\r\n children?: React.ReactNode;\r\n /**\r\n * Cuando la columna admite ordenamiento, muestra\r\n * una flecha indicando el orden actual. Esta\r\n * propiedad establece si la flecha apunta hacia\r\n * arriba, abajo, o si la flecha es un guión.\r\n */\r\n currentSorting?: TResponsiveTableSortValue;\r\n /** *\r\n * Valor para decirle al server cuál columna se está ordenando\r\n */\r\n dataSortBy?: string;\r\n hidden?: boolean;\r\n /**\r\n * Normalmente, todas las columnas se van a mostrar\r\n * como renglones en el acordión, cuando este es\r\n * expandido.\r\n *\r\n * Si este flag es pasado en true, la columna\r\n * correspondiente no se va a mostrar en modo\r\n * responsivo.\r\n */\r\n hideFromAccordion?: boolean;\r\n /**\r\n * Elemento id del dom.\r\n */\r\n id?: string;\r\n /**\r\n * Es el texto que se mostrará en el cabezal.\r\n */\r\n label: string;\r\n maxWidth?: number | string;\r\n minWidth?: number | string;\r\n /**\r\n * El nombre de la columna debe ser único, se utiliza\r\n * para realizar la asosiación entre las columnas\r\n * y los filtros, así como con los eventos de orden.\r\n */\r\n name: string;\r\n /**\r\n * Si se pasa required: true, se pone un asterisco\r\n * rojo en el cabezal de la columna para señalar que\r\n * la columna es requerida.\r\n */\r\n required?: boolean;\r\n /**\r\n * Algunas columnas podrán mostrarse mediante un botón\r\n * \"mostrar más\", para ello deberán ser marcadas con\r\n * esta prop en true.\r\n */\r\n showAsAdditional?: boolean;\r\n /**\r\n * Cuando no se pasa esta propiedad en ninguna columna,\r\n * la aplicación encuentra la primera fila sin celdas\r\n * vacías y la utiliza como título.\r\n *\r\n * En cambio, si al menos una columna tiene este flag\r\n * en true, el título de cada fila del acordión estará\r\n * compuesto por los valores de estas columnas.\r\n */\r\n showInAccordionTitle?: boolean;\r\n /**\r\n * Elemento title de html (El tooltip).\r\n */\r\n title?: string;\r\n width?: number | string;\r\n} & Partial<\r\n Pick<\r\n HTMLTableCellElement,\r\n 'ariaLabel' | 'className' | 'colSpan' | 'rowSpan'\r\n >\r\n >;\r\n\r\nexport type TResponsiveTableStoreProps = {\r\n /**\r\n * Habla sobre el orden de las filas en función de\r\n * las columnas. Esta propiedad habilita/deshabilita\r\n * el ordenado de las columnas al hacer click en los\r\n * cabezales.\r\n *\r\n * La tabla admite ordenamiento por defecto, a menos\r\n * que esta prop venga en false. En caso de que se\r\n * pase false no importa qué digan las columnas,\r\n * el ordenamiento no estará habilitado.\r\n */\r\n allowSorting?: boolean;\r\n\r\n // Composition\r\n columns: TResponsiveTableColumn[];\r\n filters?: TApiaFilter[];\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n rows: TResponsiveTableRow<any>[];\r\n\r\n /**\r\n * Por defecto, la tabla permitirá seleccionar\r\n * múltiples valores, a menos que esta prop venga\r\n * en false.\r\n */\r\n isMultiple?: boolean;\r\n\r\n label?: string;\r\n\r\n /**\r\n * Es normal que una tabla tenga paginación y que en cada página haya una\r\n * cantidad distinta de estados. Si se quiere mantener consistencia en el\r\n * tamaño de las páginas, es posible reservar un tamaño para una cantidad\r\n * definida de estados con este parámetro.\r\n */\r\n reserveColumnsForStates?: number;\r\n statesColumns?: TResponsiveTableRowState[];\r\n};\r\n\r\nexport type TResponsiveTableRowsSelectionEvent = {\r\n index: number;\r\n row: TResponsiveTableRow;\r\n}[];\r\n\r\nexport type TResponsiveTableContextProps = TResponsiveTableStoreProps &\r\n Pick<\r\n ISelectableState,\r\n 'allowRowsKeyboardSorting' | 'allowEdition' | 'allowSelection'\r\n > & {\r\n /**\r\n * Cuando se actualiza el array de rows de la tabla\r\n * desde las props del ResponsiveTableContext, se\r\n * reinicia el estado de selección de acuerdo a cómo\r\n * viene definido en el prop. **Si esta prop se pasa\r\n * en true**, este comportamiento es deshabilitado.\r\n */\r\n avoidReparseSelectionOnRowChange?: boolean;\r\n avoidAutoEllipsis?: boolean;\r\n children?: React.ReactNode;\r\n className?: string;\r\n /**\r\n * Permite redefinir el comportamiento de los breakpoints pasando un índice\r\n * personalizado. Cuando es pasado, deja de prestar atención al breakpoint\r\n * de la pantalla y comienza a prestar atención a este índice.\r\n */\r\n currentBreakPoint?: number;\r\n customLabels?: typeof defaultLabels;\r\n /**\r\n * Se puede utilizar este booleano para que la tabla\r\n * deshabilite las opciones de filtrado y ordenado mientras\r\n * se está ejecutando una acción ajax.\r\n */\r\n isLoading?: boolean;\r\n /**\r\n * La tabla debe tener un nombre único que será usado para\r\n * acceder a las propiedades de la misma en el store. En caso\r\n * de que no se pase ninguno, la tabla lo generará\r\n * automaticamente.\r\n */\r\n name?: string;\r\n\r\n // Filtering\r\n onFilterChange?: (ev: TApiaFilter) => void | Promise<boolean>;\r\n onFilterBlur?: (ev: TApiaFilter) => unknown;\r\n onFilterPressEnter?: (ev: TApiaFilter) => unknown;\r\n FiltersRenderer?: (id: string) => FC<{ filter: TApiaFilter }>;\r\n\r\n // Selection\r\n onChangeSelection?: (ev: TResponsiveTableRowsSelectionEvent) => unknown;\r\n /**\r\n * Este evento será llamado cada vez que el usuario esté\r\n * haciendo foco en la tabla, tenga una selección de\r\n * filas no vacía y presione la tecla Enter.\r\n */\r\n onSelectRows?: (\r\n ev: TResponsiveTableRowsSelectionEvent,\r\n focusedRowIndex: number,\r\n ) => unknown;\r\n /**\r\n * Este evento será llamado cada vez que el usuario haga click en una fila\r\n */\r\n onRowClick?: (\r\n ev: TResponsiveTableRowsSelectionEvent[0],\r\n focusedRowIndex: number,\r\n ) => unknown;\r\n\r\n // Sorting\r\n /**\r\n * Es llamado cada vez que el usuario hace click en el botón\r\n * del cabezal de la columna. **Importante:** la tabla no\r\n * realizará ninguna acción de ordenamiento, sino solamente\r\n * avisar de que el usuario desea que las filas sean ordenadas\r\n * por alguna columna en particular.\r\n */\r\n onSortChange?: (ev: TResponsiveTableSortChangeEvent) => unknown;\r\n /**\r\n * Si se pasa selectionHandler, la tabla no realizará ningún control de eventos de teclado o mouse.\r\n */\r\n SelectionHandler?: FC<TKeyHandlerProps>;\r\n showFilters?: boolean;\r\n variant?: string;\r\n forceAccordion?: boolean;\r\n };\r\n\r\n/**\r\n * Los callbacks del responsiveTable estarán\r\n * disponibles a través de un contexto, de\r\n * forma que cualquier elemento activo que\r\n * desee informar de un evento en particular\r\n * pueda hacerlo en forma sencilla.\r\n */\r\nexport type TResponsiveTableContext = TModify<\r\n Pick<\r\n TResponsiveTableContextProps,\r\n | 'avoidAutoEllipsis'\r\n | 'FiltersRenderer'\r\n | 'currentBreakPoint'\r\n | 'name'\r\n | 'onChangeSelection'\r\n | 'onFilterBlur'\r\n | 'onFilterChange'\r\n | 'onFilterPressEnter'\r\n | 'onSelectRows'\r\n | 'onRowClick'\r\n | 'onSortChange'\r\n | 'label'\r\n | 'SelectionHandler'\r\n | 'showFilters'\r\n | 'forceAccordion'\r\n >,\r\n { labels: typeof defaultLabels; name: string }\r\n>;\r\n\r\ndeclare global {\r\n interface Window {\r\n FINDER_NO_DATA: string;\r\n ORDER_ASC_LABEL: string;\r\n ORDER_DESC_LABEL: string;\r\n GNR_TOT_RECORDS: string;\r\n GNR_TOT_RECORDS_REACHED: string;\r\n QUERY_MORE_DATA: string;\r\n LBL_MAXIMIZE: string;\r\n LBL_MINIMIZE: string;\r\n BTN_FILE_INFO_TOOLTIP: string;\r\n NAV_FIRST_PAGE: string;\r\n NAV_PREVIOUS_PAGE: string;\r\n NAV_INPUT_LABEL: string;\r\n PAGE: string;\r\n NAV_NEXT_PAGE: string;\r\n NAV_LAST_PAGE: string;\r\n BTN_DELETE_FILTERS: string;\r\n NAV_REFRESH: string;\r\n }\r\n}\r\n\r\nexport const defaultLabels = {\r\n noRegisters: window.FINDER_NO_DATA,\r\n};\r\n","import { TApiaFilter } from '@apia/util';\r\nimport { ISelectableState, TBasicRow } from './types';\r\n\r\nexport function getInitialState<\r\n ColumnsType extends { name: string },\r\n RowsType extends TBasicRow | string,\r\n>(): ISelectableState<ColumnsType, TApiaFilter, RowsType> {\r\n return {\r\n allowEdition: false,\r\n allowSelection: true,\r\n columns: [],\r\n expandedRows: [],\r\n isEditionMode: false,\r\n isFocused: false,\r\n filters: [],\r\n focusedColumn: 0,\r\n focusedRow: 0,\r\n hasNonAdditionalFilters: false,\r\n isMultiple: true,\r\n nonAdditionalColumnsCount: 0,\r\n rows: [],\r\n statesColumns: [],\r\n selectedRows: [],\r\n };\r\n}\r\n","import { addBoundary } from '@apia/util';\r\nimport { Draft } from '@apia/store';\r\nimport { INewFocus, ISelectableState, TBasicRow } from './types';\r\n\r\n/**\r\n * Este método conoce las interfaces necesarias\r\n * para aplicar las restricciones correspondientes\r\n * a la hora de hacer foco en una fila, evitando\r\n * que se haga foco en filas inexistentes.\r\n */\r\nexport function addRowBoundary(newRow: number, state: ISelectableState) {\r\n const hasFiltersRow = !!state.filters.find(\r\n (current) =>\r\n !!state.columns.find((search) => search.name === current.column),\r\n );\r\n return addBoundary({\r\n number: newRow,\r\n min: hasFiltersRow ? -2 : -1,\r\n max: Math.max(0, state.rows.length - 1),\r\n });\r\n}\r\n/**\r\n * Este método conoce las interfaces necesarias\r\n * para aplicar las restricciones correspondientes\r\n * a la hora de hacer foco en una columna, evitando\r\n * que se haga foco en columnas inexistentes.\r\n */\r\nexport function addColumnBoundary(newColumn: number, state: ISelectableState) {\r\n return addBoundary({\r\n number: newColumn,\r\n min: 0,\r\n max:\r\n state.nonAdditionalColumnsCount +\r\n state.statesColumns +\r\n (state.hasNonAdditionalFilters ? 1 : 0),\r\n });\r\n}\r\n\r\nfunction isBasicRow(row: unknown): row is TBasicRow {\r\n return typeof row === 'object' && !!row && 'forbidSelection' in row;\r\n}\r\n\r\nfunction filterNonSellectableRows(\r\n state: Draft<ISelectableState>,\r\n newSelection: number[],\r\n) {\r\n let expandedRowsBefore = 0;\r\n return newSelection.filter((selectedRowIndex) => {\r\n const row = state.rows[selectedRowIndex + expandedRowsBefore];\r\n if (state.expandedRows.includes(selectedRowIndex)) expandedRowsBefore += 1;\r\n return !(isBasicRow(row) && row.forbidSelection);\r\n });\r\n}\r\n\r\n/**\r\n * Normalmente, este método será llamado desde un\r\n * action de Redux, para eso fue diseñado. Su\r\n * utilidad es la de tomar el estado y alterarlo\r\n * dependiendo de los parámetros pasados y la lógica\r\n * de selección de filas y columnas en una grilla,\r\n * devolviendo un estado coherente que represente\r\n * las acciones de un usuario en la grilla.\r\n */\r\nexport function setNewFocused(\r\n state: Draft<ISelectableState>,\r\n {\r\n /**\r\n * Propiedad proveniente del evento click o keydown.\r\n */\r\n ctrlKey,\r\n /**\r\n * Propiedad proveniente del evento click o keydown.\r\n */\r\n shiftKey,\r\n newFocusedColumn,\r\n newFocusedRow,\r\n /**\r\n * Con este método se puede seleccionar cuál celda\r\n * va a recibir el foco y la selección, o solamente\r\n * el foco si esta propiedad es pasada en false.\r\n */\r\n shouldSelectNewFocused,\r\n }: INewFocus,\r\n) {\r\n let actualNewFocusedRow =\r\n Math.round(\r\n addRowBoundary(newFocusedRow ?? state.focusedRow ?? 0, state) * 2,\r\n ) / 2;\r\n const actualNewFocusedColumn = addColumnBoundary(\r\n newFocusedColumn ?? state.focusedColumn,\r\n state,\r\n );\r\n\r\n state.focusedColumn = actualNewFocusedColumn;\r\n state.focusedRow = actualNewFocusedRow;\r\n state.isFocused = shouldSelectNewFocused ?? false;\r\n\r\n if (shouldSelectNewFocused === false || actualNewFocusedRow < 0) return;\r\n\r\n if (Math.round(actualNewFocusedRow) - actualNewFocusedRow !== 0)\r\n actualNewFocusedRow = Math.floor(actualNewFocusedRow);\r\n\r\n const isDeselectingWithCtrl =\r\n ctrlKey && state.selectedRows.includes(actualNewFocusedRow);\r\n\r\n if (state.allowSelection !== false)\r\n if (\r\n (!ctrlKey && !shiftKey) ||\r\n (state.isMultiple === false && !isDeselectingWithCtrl)\r\n )\r\n state.selectedRows = filterNonSellectableRows(state, [\r\n actualNewFocusedRow,\r\n ]);\r\n else if ((ctrlKey && state.isMultiple) || isDeselectingWithCtrl) {\r\n state.selectedRows = filterNonSellectableRows(\r\n state,\r\n state.selectedRows.includes(actualNewFocusedRow)\r\n ? state.selectedRows.filter(\r\n (current) => current !== actualNewFocusedRow,\r\n )\r\n : [...state.selectedRows, actualNewFocusedRow],\r\n );\r\n } else if (shiftKey && state.isMultiple) {\r\n const sortedSelectedRows = [...state.selectedRows].sort((a, b) => a - b);\r\n let minSelectedRow = sortedSelectedRows[0];\r\n let maxSelectedRow = sortedSelectedRows[sortedSelectedRows.length - 1];\r\n\r\n if (minSelectedRow === undefined) {\r\n state.selectedRows = filterNonSellectableRows(state, [\r\n actualNewFocusedRow,\r\n ]);\r\n return;\r\n }\r\n\r\n if (actualNewFocusedRow < minSelectedRow)\r\n minSelectedRow = actualNewFocusedRow;\r\n if (actualNewFocusedRow > maxSelectedRow)\r\n maxSelectedRow = actualNewFocusedRow;\r\n\r\n const newSelectedRows = filterNonSellectableRows(\r\n state,\r\n new Array(maxSelectedRow - minSelectedRow + 1)\r\n .fill('')\r\n .map((_, i) => i + (minSelectedRow ?? 0)),\r\n );\r\n\r\n state.selectedRows = filterNonSellectableRows(state, newSelectedRows);\r\n }\r\n}\r\n","import { Draft } from '@apia/store';\r\nimport React from 'react';\r\nimport { setNewFocused } from './setNewFocused';\r\nimport { THandleKey, INewFocus, ISelectableState } from './types';\r\n\r\n/**\r\n * Este método es de uso interno y normalmente\r\n * no será necesario fuera de este documento,\r\n * su utilidad es la de determinar si un evento\r\n * de teclado será controlado por el keyHandler.\r\n */\r\nexport function willHandleKey(\r\n ev: React.KeyboardEvent,\r\n state: ISelectableState,\r\n) {\r\n const actualKey = ev.key.toLowerCase();\r\n if (state.isEditionMode) return false;\r\n\r\n if (actualKey === ' ' && ev.ctrlKey) return true;\r\n if (actualKey === 'a' && ev.ctrlKey) return true;\r\n if (actualKey === 'm' && ev.ctrlKey) return true;\r\n if (state.draggingRow !== undefined) {\r\n return ['Escape', 'Enter'].includes(ev.key);\r\n }\r\n return [\r\n 'arrowup',\r\n 'arrowdown',\r\n 'arrowleft',\r\n 'arrowright',\r\n 'end',\r\n 'enter',\r\n 'home',\r\n 'pageup',\r\n 'pagedown',\r\n ].includes(ev.key.toLowerCase());\r\n}\r\n\r\n/**\r\n * Este método será llamado normalmente desde un action\r\n * de Redux. Su utilidad es la de evaluar qué tecla\r\n * se presionó y decidir qué alteración se debe producir\r\n * en base a eso.\r\n */\r\nexport function handleKey(state: Draft<ISelectableState>, { ev }: THandleKey) {\r\n const {\r\n altKey: isAltPressed,\r\n ctrlKey: isCtrlPressed,\r\n key,\r\n shiftKey: isShiftPressed,\r\n } = ev;\r\n if (willHandleKey(ev, state)) ev.preventDefault();\r\n const actualKey = key.toLowerCase();\r\n const setFocus = ({\r\n newFocusedColumn,\r\n newFocusedRow,\r\n ...rest\r\n }: Partial<INewFocus>) =>\r\n setNewFocused(state, {\r\n altKey: isAltPressed,\r\n ctrlKey: isCtrlPressed,\r\n shiftKey: isShiftPressed,\r\n newFocusedColumn,\r\n newFocusedRow,\r\n ...rest,\r\n });\r\n\r\n if (!state.isEditionMode) {\r\n if (\r\n actualKey === 'enter' &&\r\n (state.allowEdition === true || state.focusedRow < 0)\r\n )\r\n state.isEditionMode = true;\r\n else\r\n switch (actualKey) {\r\n case 'arrowup': {\r\n let sumRate = state.expandedRows.includes(state.focusedRow - 1)\r\n ? 0.6\r\n : 1;\r\n if (Math.round(state.focusedRow) - state.focusedRow !== 0)\r\n sumRate = 0.5;\r\n setFocus({\r\n newFocusedRow: state.focusedRow - sumRate,\r\n shouldSelectNewFocused: !isCtrlPressed,\r\n });\r\n break;\r\n }\r\n case 'arrowdown': {\r\n let sumRate = state.expandedRows.includes(state.focusedRow) ? 0.6 : 1;\r\n if (Math.round(state.focusedRow) - state.focusedRow !== 0)\r\n sumRate = 0.5;\r\n setFocus({\r\n newFocusedRow: state.focusedRow + sumRate,\r\n shouldSelectNewFocused: !isCtrlPressed,\r\n });\r\n break;\r\n }\r\n case 'arrowleft':\r\n case 'arrowright': {\r\n setFocus({\r\n newFocusedColumn:\r\n state.focusedColumn + (actualKey === 'arrowleft' ? -1 : 1),\r\n shouldSelectNewFocused: !isCtrlPressed,\r\n });\r\n break;\r\n }\r\n case 'home': {\r\n if (isCtrlPressed)\r\n setFocus({ newFocusedColumn: 0, newFocusedRow: 0, ctrlKey: false });\r\n else setFocus({ newFocusedColumn: 0 });\r\n break;\r\n }\r\n case 'end': {\r\n if (isCtrlPressed)\r\n setFocus({\r\n newFocusedRow: Number.POSITIVE_INFINITY,\r\n newFocusedColumn: Number.POSITIVE_INFINITY,\r\n ctrlKey: false,\r\n });\r\n else\r\n setFocus({\r\n newFocusedColumn: Number.POSITIVE_INFINITY,\r\n });\r\n break;\r\n }\r\n case 'pageup': {\r\n setFocus({\r\n newFocusedRow: state.focusedRow - 5,\r\n shouldSelectNewFocused: !isCtrlPressed,\r\n });\r\n break;\r\n }\r\n case 'pagedown': {\r\n setFocus({\r\n newFocusedRow: state.focusedRow + 5,\r\n shouldSelectNewFocused: !isCtrlPressed,\r\n });\r\n break;\r\n }\r\n case ' ': {\r\n if (isCtrlPressed)\r\n setFocus({\r\n newFocusedRow: state.focusedRow,\r\n });\r\n break;\r\n }\r\n case 'a': {\r\n if (isCtrlPressed && state.allowSelection)\r\n state.selectedRows = state.rows.map((_, i) => i);\r\n break;\r\n }\r\n default:\r\n break;\r\n }\r\n } else\r\n switch (actualKey) {\r\n case 'escape':\r\n case 'enter': {\r\n if (state.isEditionMode) state.isEditionMode = false;\r\n ev.stopPropagation();\r\n break;\r\n }\r\n default:\r\n break;\r\n }\r\n}\r\n","import type { Draft, PayloadAction } from '@apia/store';\r\nimport type { TRequireOnlyOne } from '@apia/util';\r\nimport { handleKey } from './handleKey';\r\nimport { setNewFocused } from './setNewFocused';\r\nimport { THandleKey, INewFocus, ISelectableState } from './types';\r\n\r\ntype TState = Draft<Record<string, ISelectableState>>;\r\n\r\nexport type TPayloadWithId<\r\n P = Record<string, unknown>,\r\n T extends string = string,\r\n M = never,\r\n E = never,\r\n> = PayloadAction<P & { id: string }, T, M, E>;\r\n\r\nexport type THandleKeyPayload = TPayloadWithId<THandleKey>;\r\nexport type TSelectionStateUpdatePayload = TPayloadWithId<\r\n Partial<ISelectableState>\r\n>;\r\nexport type TSetNewFocusedPayload = TPayloadWithId<INewFocus>;\r\nexport type TUpdateByClickPayload = TPayloadWithId<\r\n TRequireOnlyOne<{ ariaRowIndex: number; rowIndex: number }> &\r\n TRequireOnlyOne<{ ariaColIndex?: number; colIndex: number }> &\r\n Pick<INewFocus, 'altKey' | 'ctrlKey' | 'shiftKey' | 'isFocused'>\r\n>;\r\n\r\nexport function getReduxActions() {\r\n return {\r\n handleKey(state: TState, { payload }: THandleKeyPayload) {\r\n handleKey(state[payload.id], payload);\r\n },\r\n selectionStateUpdate(\r\n state: TState,\r\n { payload: { id, ...payload } }: TSelectionStateUpdatePayload,\r\n ) {\r\n state[id] = { ...state[id], ...payload };\r\n },\r\n setNewFocused(\r\n state: TState,\r\n { payload: { id, ...payload } }: TSetNewFocusedPayload,\r\n ) {\r\n setNewFocused(state[id], payload);\r\n },\r\n updateByClick(\r\n state: TState,\r\n {\r\n payload: {\r\n id,\r\n colIndex,\r\n rowIndex,\r\n ariaColIndex,\r\n ariaRowIndex,\r\n isFocused,\r\n ...payload\r\n },\r\n }: TUpdateByClickPayload,\r\n ) {\r\n const hasFiltersRow = state[id].hasNonAdditionalFilters;\r\n state[id].isEditionMode = false;\r\n\r\n const newFocusedColumn = colIndex ?? ariaColIndex ?? 1;\r\n const newFocusedRow =\r\n ariaRowIndex !== undefined\r\n ? ariaRowIndex\r\n : (rowIndex ?? 0) - (1 + (hasFiltersRow ? 2 : 1));\r\n\r\n setNewFocused(state[id], {\r\n ...payload,\r\n newFocusedColumn,\r\n newFocusedRow,\r\n });\r\n\r\n if (isFocused !== undefined) state[id].isFocused = isFocused;\r\n },\r\n };\r\n}\r\n","import { Draft, PayloadAction } from '@apia/store';\r\nimport { TResponsiveTableSlice, TResponsiveTableState } from '../store/types';\r\n\r\nexport type TPayloadWithId<\r\n P = Record<string, unknown>,\r\n T extends string = string,\r\n M = never,\r\n E = never,\r\n> = PayloadAction<P & { tableName: string }, T, M, E>;\r\n\r\nexport function getController2ReduxActions() {\r\n return {\r\n controller2UpdateSelectionState(\r\n state: Draft<TResponsiveTableSlice>,\r\n {\r\n payload: { tableName, ...payload },\r\n }: TPayloadWithId<Partial<TResponsiveTableState>>,\r\n ) {\r\n Object.assign(state[tableName], payload);\r\n },\r\n };\r\n}\r\n","/* eslint-disable @typescript-eslint/no-dynamic-delete */\r\nimport { createSlice, injectReducers } from '@apia/store';\r\nimport {\r\n TResponsiveTableAction,\r\n TResponsiveTableIndexColumns,\r\n TResponsiveTableSlice,\r\n TResponsiveTableState,\r\n} from './types';\r\nimport { getInitialState as selectionGetInitialState } from './selection/getInitialState';\r\nimport { setNewFocused } from './selection/setNewFocused';\r\nimport { TResponsiveTableRow } from '../types';\r\nimport { getReduxActions } from './selection/getReduxActions';\r\nimport { getController2ReduxActions } from '../controller2/getController2ReduxActions';\r\n\r\nfunction getInitialState(): TResponsiveTableState {\r\n const newState: TResponsiveTableState = {\r\n ...selectionGetInitialState(),\r\n allowSelection: true,\r\n allowSorting: true,\r\n filters: [],\r\n isLoading: false,\r\n isMultiple: true,\r\n accordionIndexColumns: {} as TResponsiveTableIndexColumns,\r\n expandedRows: [],\r\n };\r\n\r\n return newState;\r\n}\r\n\r\nconst responsiveTableSlice = createSlice({\r\n name: 'responsiveTableSlice',\r\n initialState: {} as TResponsiveTableSlice,\r\n reducers: {\r\n update(\r\n state,\r\n {\r\n payload: { tableName, handleFocus, ...rest },\r\n }: TResponsiveTableAction<\r\n Partial<TResponsiveTableState> & {\r\n isFocused?: boolean;\r\n handleFocus?: boolean;\r\n }\r\n >,\r\n ) {\r\n if (!state[tableName]) state[tableName] = getInitialState();\r\n state[tableName] = { ...state[tableName], ...rest };\r\n\r\n if (handleFocus !== false) {\r\n setNewFocused(state[tableName], {\r\n altKey: false,\r\n ctrlKey: false,\r\n shiftKey: false,\r\n shouldSelectNewFocused: rest.isFocused ?? state[tableName].isFocused,\r\n });\r\n }\r\n\r\n if (rest.columns) {\r\n state[tableName].nonAdditionalColumnsCount = rest.columns.filter(\r\n (current) => !current.showAsAdditional,\r\n ).length;\r\n }\r\n\r\n if (rest.filters) {\r\n state[tableName].hasNonAdditionalFilters =\r\n rest.filters.filter(\r\n (current) =>\r\n !current.asAdditional &&\r\n (rest.columns ?? state[tableName].columns)?.find(\r\n (search) => search.name === current.column,\r\n ),\r\n ).length > 0;\r\n }\r\n },\r\n addRows(\r\n state,\r\n { payload }: TResponsiveTableAction<{ newRows: TResponsiveTableRow[] }>,\r\n ) {\r\n if (!state[payload.tableName])\r\n state[payload.tableName] = getInitialState();\r\n state[payload.tableName].rows = state[payload.tableName].rows.concat(\r\n ...payload.newRows,\r\n );\r\n setNewFocused(state[payload.tableName], {\r\n altKey: false,\r\n ctrlKey: false,\r\n shiftKey: false,\r\n shouldSelectNewFocused: true,\r\n newFocusedRow: state[payload.tableName].rows.length,\r\n });\r\n },\r\n deleteRows(\r\n state,\r\n { payload }: TResponsiveTableAction<{ rowIndices: number[] }>,\r\n ) {\r\n const table = state[payload.tableName];\r\n const minIndex = payload.rowIndices.reduce((min, current) => {\r\n return current < min ? current : min;\r\n }, Infinity);\r\n table.rows = table.rows.filter(\r\n (_, index) => !payload.rowIndices.includes(index),\r\n );\r\n\r\n setNewFocused(state[payload.tableName], {\r\n altKey: false,\r\n ctrlKey: false,\r\n shiftKey: false,\r\n shouldSelectNewFocused: true,\r\n newFocusedRow: minIndex,\r\n });\r\n state[payload.tableName].isFocused = false;\r\n },\r\n destroy(state, { payload: { tableName } }: TResponsiveTableAction) {\r\n delete state[tableName];\r\n },\r\n swapFocusedRow(\r\n state,\r\n {\r\n payload: { newIndex, tableName },\r\n }: TResponsiveTableAction<{ newIndex: number }>,\r\n ) {\r\n const tableState = state[tableName];\r\n const focusedIndex = tableState.focusedRow;\r\n\r\n if (\r\n focusedIndex === undefined ||\r\n newIndex < 0 ||\r\n newIndex >= tableState.rows.length\r\n )\r\n return;\r\n\r\n if (focusedIndex === newIndex) {\r\n if (tableState.draggingRow === newIndex)\r\n tableState.draggingRow = undefined;\r\n else tableState.draggingRow = newIndex;\r\n return;\r\n }\r\n\r\n const isSelected = tableState.selectedRows.includes(focusedIndex);\r\n\r\n if (isSelected) {\r\n tableState.selectedRows = [\r\n ...tableState.selectedRows.filter(\r\n (current) => current !== focusedIndex,\r\n ),\r\n newIndex,\r\n ];\r\n }\r\n\r\n const aux = tableState.rows[newIndex];\r\n tableState.rows[newIndex] = tableState.rows[focusedIndex];\r\n tableState.rows[focusedIndex] = aux;\r\n\r\n tableState.focusedRow = newIndex;\r\n tableState.draggingRow = newIndex;\r\n },\r\n\r\n // Rows selection\r\n ...getReduxActions(),\r\n ...getController2ReduxActions(),\r\n },\r\n});\r\n\r\ntype TypedUseSelectorHook<TState> = <TSelected>(\r\n selector: (state: TState) => TSelected,\r\n equalityFn?: (a: TSelected, b: TSelected) => boolean,\r\n) => TSelected;\r\nconst { store: responsiveTableStore, useSelector } = injectReducers({\r\n responsiveTableSlice: responsiveTableSlice.reducer,\r\n});\r\n\r\nconst useResponsiveTable = useSelector as TypedUseSelectorHook<{\r\n responsiveTableSlice: TResponsiveTableSlice;\r\n}>;\r\nexport { responsiveTableStore };\r\nexport { useResponsiveTable };\r\n\r\nexport const responsiveTableActions = responsiveTableSlice.actions;\r\n","import { useMount, useUnmount, useUpdateEffect } from 'ahooks';\r\nimport uniqueId from 'lodash-es/uniqueId';\r\nimport React from 'react';\r\nimport { Box } from '@apia/theme';\r\nimport {\r\n defaultLabels,\r\n TResponsiveTableContext,\r\n TResponsiveTableContextProps,\r\n} from './types';\r\nimport { responsiveTableActions, responsiveTableStore } from './store';\r\nimport { ResponsiveTable } from './ResponsiveTable';\r\nimport { getVariant } from '@apia/theme';\r\n\r\nexport const ResponsiveTableReactContext =\r\n React.createContext<TResponsiveTableContext>({} as TResponsiveTableContext);\r\n\r\nconst tableContexts: Record<string, TResponsiveTableContext> = {};\r\n\r\nexport function getResponsiveTableContext(tableName: string) {\r\n return tableContexts[tableName];\r\n}\r\n\r\nexport function useResponsiveTableContext(tableName?: string) {\r\n const reactContext = React.useContext(ResponsiveTableReactContext);\r\n const context = tableName ? tableContexts[tableName] : reactContext;\r\n if (!context) throw new Error('There is no ResponsiveTableContext');\r\n return context;\r\n}\r\n\r\n/**\r\n * Este contexto busca facilitar la tarea de centralizar las\r\n * propiedades y callbacks asociados a la tabla, de forma de\r\n * evitar la necesidad de distribuir comportamientos.\r\n *\r\n * **MUY IMPORTANTE**\r\n * Asegurarse de memoizar las propiedades rows, filters y\r\n * columns, ya que en caso contrario eso va a disparar\r\n * actualizaciones en el responsiveTableStore cada vez que el padre del\r\n * contexto renderice.\r\n *\r\n */\r\nconst NoMemoResponsiveTableContext = ({\r\n allowEdition,\r\n allowRowsKeyboardSorting,\r\n avoidAutoEllipsis,\r\n allowSelection,\r\n allowSorting,\r\n avoidReparseSelectionOnRowChange,\r\n children = <ResponsiveTable />,\r\n className,\r\n currentBreakPoint,\r\n customLabels,\r\n columns,\r\n filters,\r\n FiltersRenderer,\r\n rows,\r\n label,\r\n isMultiple,\r\n isLoading,\r\n name,\r\n statesColumns,\r\n showFilters,\r\n forceAccordion,\r\n\r\n onChangeSelection,\r\n onFilterBlur,\r\n onFilterChange,\r\n onFilterPressEnter,\r\n onRowClick,\r\n onSelectRows,\r\n onSortChange,\r\n reserveColumnsForStates,\r\n SelectionHandler,\r\n variant,\r\n}: TResponsiveTableContextProps) => {\r\n const actualName = React.useMemo(\r\n () => name ?? uniqueId('responsiveTable'),\r\n [name],\r\n );\r\n const labels = React.useMemo(\r\n () => ({ ...defaultLabels, ...customLabels }),\r\n [customLabels],\r\n );\r\n const contextValue = React.useMemo<TResponsiveTableContext>(\r\n () => ({\r\n currentBreakPoint,\r\n label,\r\n labels,\r\n avoidAutoEllipsis,\r\n FiltersRenderer,\r\n name: actualName,\r\n onChangeSelection,\r\n onFilterBlur,\r\n onFilterChange,\r\n onFilterPressEnter,\r\n onRowClick,\r\n onSelectRows,\r\n onSortChange,\r\n SelectionHandler,\r\n statesColumns,\r\n isLoading,\r\n showFilters,\r\n forceAccordion,\r\n }),\r\n [\r\n currentBreakPoint,\r\n label,\r\n labels,\r\n avoidAutoEllipsis,\r\n FiltersRenderer,\r\n actualName,\r\n onChangeSelection,\r\n onFilterBlur,\r\n onFilterChange,\r\n onFilterPressEnter,\r\n onRowClick,\r\n onSelectRows,\r\n onSortChange,\r\n SelectionHandler,\r\n statesColumns,\r\n isLoading,\r\n showFilters,\r\n forceAccordion,\r\n ],\r\n );\r\n\r\n tableContexts[actualName] = contextValue;\r\n\r\n useMount(() => {\r\n responsiveTableStore.dispatch(\r\n responsiveTableActions.update({\r\n allowEdition,\r\n allowRowsKeyboardSorting,\r\n allowSelection,\r\n allowSorting,\r\n columns,\r\n filters: filters ?? [],\r\n rows,\r\n isMultiple,\r\n tableName: actualName,\r\n reserveColumnsForStates,\r\n handleFocus: !SelectionHandler,\r\n statesColumns,\r\n isLoading,\r\n }),\r\n );\r\n });\r\n\r\n useUpdateEffect(() => {\r\n responsiveTableStore.dispatch(\r\n responsiveTableActions.update({\r\n tableName: actualName,\r\n columns,\r\n handleFocus: !SelectionHandler,\r\n }),\r\n );\r\n }, [columns]);\r\n\r\n useUpdateEffect(() => {\r\n responsiveTableStore.dispatch(\r\n responsiveTableActions.update({\r\n tableName: actualName,\r\n rows,\r\n handleFocus: !SelectionHandler,\r\n }),\r\n );\r\n if (!SelectionHandler && avoidReparseSelectionOnRowChange !== true) {\r\n const selected = rows\r\n .map((current, i) => ({ ...current, i }))\r\n .filter((current) => current.initiallySelected);\r\n responsiveTableStore.dispatch(\r\n responsiveTableActions.update({\r\n tableName: actualName,\r\n selectedRows: selected.map((current) => current.i),\r\n }),\r\n );\r\n }\r\n }, [rows]);\r\n\r\n useUpdateEffect(() => {\r\n responsiveTableStore.dispatch(\r\n responsiveTableActions.update({\r\n tableName: actualName,\r\n filters,\r\n handleFocus: !SelectionHandler,\r\n }),\r\n );\r\n }, [filters]);\r\n\r\n useUpdateEffect(() => {\r\n responsiveTableStore.dispatch(\r\n responsiveTableActions.update({\r\n tableName: actualName,\r\n statesColumns,\r\n }),\r\n );\r\n }, [statesColumns]);\r\n\r\n useUpdateEffect(() => {\r\n responsiveTableStore.dispatch(\r\n responsiveTableActions.update({\r\n tableName: actualName,\r\n isLoading,\r\n }),\r\n );\r\n }, [isLoading]);\r\n\r\n useUnmount(() => {\r\n responsiveTableStore.dispatch(\r\n responsiveTableActions.destroy({ tableName: actualName }),\r\n );\r\n });\r\n\r\n return (\r\n <ResponsiveTableReactContext.Provider value={contextValue}>\r\n <Box\r\n id={name}\r\n className={`responsiveTableContext__wrapper ${className ?? ''}`}\r\n {...(variant ? getVariant(variant) : null)}\r\n >\r\n {children}\r\n </Box>\r\n </ResponsiveTableReactContext.Provider>\r\n );\r\n};\r\n\r\nexport const ResponsiveTableContext = React.memo(NoMemoResponsiveTableContext);\r\n","import React from 'react';\r\nimport { shallowEqual } from 'react-redux';\r\nimport { Box } from '@apia/theme';\r\nimport {\r\n autoDisconnectMutationObserver,\r\n customEvents,\r\n getFocusSelector,\r\n getSpecificParent,\r\n globalFocus,\r\n isChild,\r\n cantFocusSelector,\r\n scrollParentIntoElement,\r\n useLatest,\r\n useUpdateEffect,\r\n} from '@apia/util';\r\nimport { ThrottleOptions } from 'ahooks/lib/useThrottle/throttleOptions';\r\nimport { useThrottleFn } from 'ahooks';\r\nimport { TUpdateByClickPayload } from './getReduxActions';\r\nimport { willHandleKey } from './handleKey';\r\nimport {\r\n INewFocus,\r\n ISelectableState,\r\n THandleKey,\r\n TKeyHandlerProps,\r\n TUseDomProps,\r\n} from './types';\r\nimport {\r\n TResponsiveTableRow,\r\n TResponsiveTableRowsSelectionEvent,\r\n} from '../../types';\r\nimport { responsiveTableStore, useResponsiveTable } from '..';\r\n\r\nexport function shoutKeyhandlerLive(\r\n liveType: 'reset' | 'howToStartDrag' | 'howToEndDrag' | 'whichIsTheNewIndex',\r\n) {\r\n switch (liveType) {\r\n /* case 'howToEndDrag':\r\n AriaLiveEmitter.emit('live', {\r\n type: 'assertive',\r\n message: window.ARIA_HOW_TO_END_DRAG,\r\n });\r\n break;\r\n case 'whichIsTheNewIndex':\r\n AriaLiveEmitter.emit('live', {\r\n type: 'assertive',\r\n * message:\r\n * formatMessage(window.ARIA_HOW_TO_WHICH_IS_THE_NEW_POSITION, {\r\n TOK1: String(additionalData?.newIndex ?? 0),\r\n }),\r\n });\r\n break;\r\n case 'reset':\r\n AriaLiveEmitter.emit('live', {\r\n type: 'reset',\r\n message: '',\r\n });\r\n break;\r\n default:\r\n AriaLiveEmitter.emit('live', {\r\n type: 'assertive',\r\n message: window.ARIA_HOW_TO_START_DRAG,\r\n }); */\r\n default:\r\n }\r\n}\r\n\r\nlet scrollTimeout: number;\r\n/**\r\n * Devuelve un elemento KeyHandler que puede usarse como\r\n * en el ejemplo.\r\n *\r\n * Su función es la de manejar los eventos de teclado y\r\n * ejecutar las acciones necesarias en el estado de la\r\n * grilla de acuerdo a la funcionalidad estándar de\r\n * usabilidad de grillas.\r\n *\r\n * @example\r\n *\r\n <KeyHandler>\r\n <table ... />\r\n </KeyHandler>\r\n */\r\nexport function makeKeyHandler(\r\n actions: {\r\n handleKey: (payload: THandleKey & { id: string }) => {\r\n payload: THandleKey & { id: string };\r\n type: string;\r\n };\r\n selectionStateUpdate: (\r\n payload: Partial<ISelectableState> & { id: string },\r\n ) => {\r\n payload: Partial<ISelectableState> & { id: string };\r\n type: string;\r\n };\r\n setNewFocused: (payload: INewFocus & { id: string }) => {\r\n payload: INewFocus & { id: string };\r\n type: string;\r\n };\r\n swapFocusedRow?: (\r\n payload: {\r\n newIndex: number;\r\n } & {\r\n tableName: string;\r\n },\r\n ) => {\r\n payload: {\r\n newIndex: number;\r\n } & {\r\n tableName: string;\r\n };\r\n type: string;\r\n };\r\n updateByClick: (payload: TUpdateByClickPayload['payload']) => {\r\n payload: INewFocus & { id: string };\r\n type: string;\r\n };\r\n },\r\n id: string,\r\n config: { throttleOptions?: ThrottleOptions; stateSelector: TUseDomProps },\r\n) {\r\n return function KeyHandler({\r\n children,\r\n onChangeSelection,\r\n onRowClick: onClickRows,\r\n onSelectRows,\r\n ...props\r\n }: TKeyHandlerProps) {\r\n const { run: keyHandler } = useThrottleFn<\r\n React.KeyboardEventHandler<HTMLDivElement>\r\n >(\r\n (ev) => {\r\n if (!['shift', 'alt', 'control'].includes(ev.key.toLowerCase())) {\r\n responsiveTableStore.dispatch(actions.handleKey({ id, ev }));\r\n }\r\n },\r\n config?.throttleOptions ?? { wait: 100 },\r\n );\r\n\r\n const [ref, setRef] = React.useState<HTMLElement | null>(null);\r\n\r\n const selectedRows = useResponsiveTable(\r\n (global) => {\r\n const state = config.stateSelector(global);\r\n return (state?.selectedRows ?? []).map<\r\n TResponsiveTableRowsSelectionEvent[0]\r\n >((current) => ({\r\n index: current,\r\n row: state.rows[current] as TResponsiveTableRow,\r\n }));\r\n },\r\n (a, b) =>\r\n shallowEqual(\r\n a.map((current) => current.index),\r\n b.map((current) => current.index),\r\n ),\r\n );\r\n const selectedRowsRef = useLatest(selectedRows);\r\n const { allowKeyboardSorting, focusedCell, isEditionMode, isFocused } =\r\n useResponsiveTable((global) => {\r\n const state = config.stateSelector(global);\r\n return {\r\n focusedCell:\r\n state?.focusedRow !== undefined\r\n ? `${state?.focusedRow}_${state?.focusedColumn}`\r\n : undefined,\r\n isEditionMode: state?.isEditionMode,\r\n rows: state?.rows,\r\n isFocused: state?.isFocused,\r\n allowKeyboardSorting: state?.allowRowsKeyboardSorting,\r\n };\r\n }, shallowEqual);\r\n useUpdateEffect(() => {\r\n if (onChangeSelection) onChangeSelection(selectedRows);\r\n }, [onChangeSelection, selectedRows]);\r\n\r\n const handleClick = React.useCallback(\r\n (ev: MouseEvent | FocusEvent | Event) => {\r\n if ((ev.target as HTMLElement).closest('.moreInformationButton'))\r\n return;\r\n\r\n if ((ev as MouseEvent).shiftKey) {\r\n document.getSelection()?.removeAllRanges();\r\n }\r\n const parentRow = getSpecificParent(\r\n ev.target as HTMLElement,\r\n (current) => {\r\n if (current.tagName.toLowerCase() === 'table') return null;\r\n if (current.matches('tr')) {\r\n return true;\r\n }\r\n return false;\r\n },\r\n );\r\n const parentCell = getSpecificParent(\r\n ev.target as HTMLElement,\r\n (current) => {\r\n if (current.tagName.toLowerCase() === 'table') return null;\r\n if (current.matches('td,th')) {\r\n return true;\r\n }\r\n return false;\r\n },\r\n );\r\n if (parentCell && parentRow) {\r\n responsiveTableStore.dispatch(\r\n actions.updateByClick({\r\n altKey: (ev as MouseEvent).altKey,\r\n id,\r\n ctrlKey: (ev as MouseEvent).ctrlKey,\r\n ariaColIndex: Number(parentCell.getAttribute('aria-colindex')),\r\n rowIndex: Number(parentRow.getAttribute('data-focusindex')),\r\n shiftKey: (ev as MouseEvent).shiftKey,\r\n }),\r\n );\r\n if (onClickRows && ev.type === 'mousedown')\r\n onClickRows(\r\n selectedRowsRef.current?.[0],\r\n config.stateSelector(responsiveTableStore.getState()).focusedRow,\r\n );\r\n }\r\n },\r\n [onClickRows, selectedRowsRef],\r\n );\r\n const handleDoubleClick = React.useCallback(\r\n (ev: MouseEvent) => {\r\n if (\r\n isChild(\r\n ev.target as HTMLElement,\r\n (current) => current.tagName === 'THEAD',\r\n )\r\n )\r\n return;\r\n ev.preventDefault();\r\n if (onSelectRows)\r\n onSelectRows(\r\n selectedRowsRef.current,\r\n config.stateSelector(responsiveTableStore.getState()).focusedRow,\r\n );\r\n },\r\n [onSelectRows, selectedRowsRef],\r\n );\r\n\r\n const initialized = React.useRef(true);\r\n\r\n const running = React.useRef(false);\r\n const doFocusThings = React.useCallback(() => {\r\n if (!running.current) {\r\n running.current = true;\r\n if (focusedCell === undefined) {\r\n running.current = false;\r\n return () => {};\r\n }\r\n\r\n if (ref) {\r\n const disconnectObserver = autoDisconnectMutationObserver(\r\n ref,\r\n () => {\r\n scrollTimeout = setTimeout(() => {\r\n const focusedElement = ref.querySelector(\r\n '[data-focused=\"true\"]',\r\n );\r\n\r\n let tableCellElement: HTMLElement | null = null;\r\n let tableCellWidget: HTMLElement | null = null;\r\n\r\n if (\r\n ['td', 'th'].includes(\r\n focusedElement?.tagName.toLowerCase() ?? '',\r\n )\r\n ) {\r\n tableCellElement = focusedElement as HTMLElement;\r\n tableCellWidget = focusedElement?.querySelector(\r\n getFocusSelector(':not(.debug_info__button)'),\r\n ) as HTMLElement;\r\n }\r\n\r\n if (focusedElement?.tagName.toLowerCase() === 'tr') {\r\n tableCellElement = focusedElement.querySelector('td,th');\r\n tableCellWidget =\r\n (focusedElement.querySelector(\r\n getFocusSelector(':not(.debug_info__button)'),\r\n ) as HTMLElement) || tableCellElement;\r\n }\r\n\r\n if (tableCellWidget) {\r\n tableCellElement?.setAttribute('tabIndex', '-1');\r\n tableCellWidget.setAttribute('tabIndex', '0');\r\n } else tableCellElement?.setAttribute('tabIndex', '0');\r\n\r\n if (!isEditionMode) {\r\n const allFocusableElements = ref?.querySelectorAll(\r\n getFocusSelector(\r\n `${cantFocusSelector}:not([data-focused=\"true\"])`,\r\n ),\r\n );\r\n allFocusableElements?.forEach((current) => {\r\n if (current !== tableCellWidget) {\r\n current.setAttribute('tabIndex', '-1');\r\n }\r\n if (tableCellWidget?.tagName === 'BUTTON')\r\n tableCellWidget.setAttribute('role', 'gridcell');\r\n });\r\n } else {\r\n const focusableElements =\r\n tableCellElement?.querySelectorAll('[tabindex=\"-1\"]');\r\n\r\n focusableElements?.forEach((current) =>\r\n current.setAttribute('tabIndex', '0'),\r\n );\r\n }\r\n\r\n const focusElement = tableCellWidget ?? tableCellElement;\r\n const row = getSpecificParent(\r\n focusElement,\r\n (current) => current.tagName === 'TR',\r\n );\r\n\r\n if (\r\n focusElement &&\r\n initialized.current &&\r\n config.stateSelector(responsiveTableStore.getState())\r\n .isFocused\r\n ) {\r\n globalFocus.focus = focusElement;\r\n\r\n focusElement.focus();\r\n }\r\n\r\n if (row) {\r\n scrollParentIntoElement(row, 55, 2, 100, 'makeKeyHandler');\r\n }\r\n\r\n if (!initialized.current) {\r\n initialized.current = true;\r\n }\r\n }, 0) as unknown as number;\r\n },\r\n { timeout: 5000 },\r\n );\r\n\r\n running.current = false;\r\n return () => {\r\n disconnectObserver();\r\n clearTimeout(scrollTimeout);\r\n };\r\n }\r\n running.current = false;\r\n }\r\n return () => {};\r\n }, [focusedCell, ref, isEditionMode]);\r\n\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n React.useLayoutEffect(doFocusThings, [\r\n focusedCell,\r\n isFocused,\r\n isEditionMode,\r\n ]);\r\n React.useEffect(() => {\r\n function handleFocus(ev: FocusEvent) {\r\n const targetTable = getSpecificParent(\r\n ev.target as HTMLElement,\r\n (current) => current.tagName.toLowerCase() === 'table',\r\n );\r\n const relatedTargetTable = getSpecificParent(\r\n ev.relatedTarget as HTMLElement,\r\n (current) => current.tagName.toLowerCase() === 'table',\r\n );\r\n\r\n if (!relatedTargetTable || relatedTargetTable !== targetTable)\r\n handleClick(ev);\r\n }\r\n\r\n ref?.addEventListener('dblclick', handleDoubleClick);\r\n ref?.addEventListener('mousedown', handleClick);\r\n ref?.addEventListener('focusin', handleFocus);\r\n ref?.addEventListener(customEvents.focus, handleClick);\r\n return () => {\r\n ref?.removeEventListener('mousedown', handleClick);\r\n ref?.removeEventListener('dblclick', handleDoubleClick);\r\n ref?.removeEventListener('focusin', handleFocus);\r\n ref?.removeEventListener(customEvents.focus, handleClick);\r\n };\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [ref]);\r\n\r\n const isDragging = React.useRef(false);\r\n const isFocusedRef = React.useRef(false);\r\n\r\n return (\r\n <Box\r\n ref={setRef}\r\n {...props}\r\n className={`selection__keyHandler ${props.className ?? ''}`}\r\n onBlur={React.useCallback(\r\n (ev: React.FocusEvent) => {\r\n if (\r\n !ev.relatedTarget ||\r\n !getSpecificParent(\r\n ev.relatedTarget as HTMLElement,\r\n (current) => current === ref,\r\n )\r\n ) {\r\n responsiveTableStore.dispatch(\r\n actions.selectionStateUpdate({ id, isFocused: false }),\r\n );\r\n shoutKeyhandlerLive('reset');\r\n isFocusedRef.current = false;\r\n }\r\n },\r\n [ref],\r\n )}\r\n onFocus={React.useCallback(() => {\r\n if (!isFocusedRef.current) shoutKeyhandlerLive('howToStartDrag');\r\n isFocusedRef.current = true;\r\n }, [])}\r\n sx={React.useMemo(\r\n () => ({ overflow: 'auto', position: 'relative' }),\r\n [],\r\n )}\r\n onKeyDown={React.useCallback<\r\n React.KeyboardEventHandler<HTMLDivElement>\r\n >(\r\n (ev) => {\r\n const state = config.stateSelector(responsiveTableStore.getState());\r\n\r\n if (\r\n willHandleKey(\r\n ev,\r\n config.stateSelector(responsiveTableStore.getState()),\r\n )\r\n ) {\r\n ev.preventDefault();\r\n ev.stopPropagation();\r\n }\r\n if (\r\n actions.swapFocusedRow &&\r\n isDragging.current &&\r\n allowKeyboardSorting\r\n ) {\r\n if (\r\n (ev.key === 'Enter' || ev.key === 'Escape') &&\r\n isDragging.current\r\n ) {\r\n shoutKeyhandlerLive('howToStartDrag');\r\n isDragging.current = false;\r\n responsiveTableStore.dispatch(\r\n actions.swapFocusedRow({\r\n tableName: id,\r\n newIndex: state.focusedRow,\r\n }),\r\n );\r\n } else if (['ArrowDown', 'ArrowUp'].includes(ev.key)) {\r\n if (ev.key === 'ArrowDown') {\r\n responsiveTableStore.dispatch(\r\n actions.swapFocusedRow({\r\n tableName: id,\r\n newIndex: state.focusedRow + 1,\r\n }),\r\n );\r\n } else {\r\n responsiveTableStore.dispatch(\r\n actions.swapFocusedRow({\r\n tableName: id,\r\n newIndex: state.focusedRow - 1,\r\n }),\r\n );\r\n }\r\n }\r\n } else if (\r\n ev.key === 'm' &&\r\n ev.ctrlKey &&\r\n !isDragging.current &&\r\n state.focusedRow >= 0 &&\r\n actions.swapFocusedRow\r\n ) {\r\n isDragging.current = true;\r\n shoutKeyhandlerLive('howToEndDrag');\r\n responsiveTableStore.dispatch(\r\n actions.swapFocusedRow({\r\n tableName: id,\r\n newIndex: state.focusedRow,\r\n }),\r\n );\r\n } else {\r\n const currentSelectedRows = (state?.selectedRows ?? []).map<\r\n TResponsiveTableRowsSelectionEvent[0]\r\n >((current) => ({\r\n index: current,\r\n row: state.rows[current] as TResponsiveTableRow,\r\n }));\r\n if (props.onKeyDown) props.onKeyDown(ev);\r\n if (ev.key === 'Enter' && onSelectRows && state.focusedRow >= 0) {\r\n onSelectRows(currentSelectedRows, state.focusedRow);\r\n }\r\n keyHandler(ev);\r\n }\r\n },\r\n [allowKeyboardSorting, keyHandler, onSelectRows, props],\r\n )}\r\n >\r\n {children}\r\n </Box>\r\n );\r\n };\r\n}\r\n","import React from 'react';\r\nimport { BoxProps } from '@apia/theme';\r\nimport { useResponsiveTableContext } from './ResponsiveTableContext';\r\nimport { makeKeyHandler } from './store/selection/makeKeyHandler';\r\nimport { responsiveTableActions } from './store';\r\n\r\nexport interface IKeyHandler {\r\n children: React.ReactNode;\r\n}\r\n\r\nconst NoMemoKeyHandler = (props: BoxProps) => {\r\n const {\r\n name,\r\n onChangeSelection,\r\n onRowClick,\r\n onSelectRows,\r\n SelectionHandler,\r\n } = useResponsiveTableContext();\r\n\r\n const Handler = React.useMemo(\r\n () =>\r\n SelectionHandler ||\r\n makeKeyHandler(responsiveTableActions, name, {\r\n throttleOptions: { wait: 50 },\r\n stateSelector: (global) => global.responsiveTableSlice[name],\r\n }),\r\n [SelectionHandler, name],\r\n );\r\n\r\n return (\r\n <Handler\r\n onChangeSelection={onChangeSelection}\r\n onSelectRows={onSelectRows}\r\n onRowClick={onRowClick}\r\n {...props}\r\n />\r\n );\r\n};\r\n\r\nexport const KeyHandler = React.memo(NoMemoKeyHandler);\r\n","import { useMemo } from 'react';\r\nimport { shallowEqual } from 'react-redux';\r\nimport { addBoundary } from '@apia/util';\r\nimport { TDomProps, IRequiredDomProps, TUseDomProps } from './types';\r\nimport { responsiveTableStore, useResponsiveTable } from '..';\r\n\r\nexport function getDomStoreProps<ElementType extends keyof IRequiredDomProps>(\r\n element: ElementType,\r\n elementProps: IRequiredDomProps[typeof element],\r\n stateSelector: TUseDomProps,\r\n) {\r\n const globalState = responsiveTableStore.getState();\r\n const tableState = stateSelector(globalState);\r\n const hasNonAdditionalFilters = tableState?.hasNonAdditionalFilters;\r\n const startDataRowIndex = hasNonAdditionalFilters ? 2 : 1;\r\n\r\n const statesColumns = tableState?.statesColumns?.length ?? 0;\r\n\r\n let expandedBeforeThisRow = 0;\r\n\r\n if (element === 'tr')\r\n expandedBeforeThisRow = tableState?.expandedRows.filter(\r\n (current) => current < (elementProps as IRequiredDomProps['td']).rowIndex,\r\n ).length;\r\n\r\n let isFocused = false;\r\n let isSelected = false;\r\n switch (element) {\r\n case 'filterTd': {\r\n const castedProps = elementProps as IRequiredDomProps['filterTd'];\r\n isFocused =\r\n tableState?.focusedRow === 1 - startDataRowIndex &&\r\n addBoundary(tableState?.focusedColumn ?? 0, 0) - statesColumns ===\r\n castedProps.columnIndex + 1 + (hasNonAdditionalFilters ? 1 : 0);\r\n break;\r\n }\r\n case 'tr': {\r\n const castedProps = elementProps as IRequiredDomProps['tr'];\r\n isFocused = !tableState\r\n ? false\r\n : (tableState.focusedRow === castedProps.rowIndex &&\r\n tableState?.focusedColumn === 0) ||\r\n (Math.floor(tableState?.focusedRow) === castedProps.rowIndex &&\r\n Math.round(tableState?.focusedRow) - tableState.focusedRow !== 0 &&\r\n !!castedProps.isTheExpandedRow);\r\n isSelected =\r\n !castedProps.isTheExpandedRow &&\r\n tableState?.selectedRows.includes(castedProps.rowIndex);\r\n break;\r\n }\r\n case 'headerTr': {\r\n isFocused = !tableState\r\n ? false\r\n : tableState.focusedRow === 0 && tableState?.focusedColumn === 0;\r\n isSelected = false;\r\n break;\r\n }\r\n case 'stateCell': {\r\n const castedProps = elementProps as IRequiredDomProps['td'];\r\n isFocused =\r\n tableState?.focusedRow === castedProps.rowIndex &&\r\n (tableState?.focusedColumn ?? 0) ===\r\n castedProps.columnIndex + 1 + (hasNonAdditionalFilters ? 1 : 0);\r\n break;\r\n }\r\n case 'additionalTd': {\r\n const castedProps = elementProps as IRequiredDomProps['additionalTd'];\r\n isFocused =\r\n tableState?.focusedRow === castedProps.rowIndex &&\r\n (tableState?.focusedColumn ?? 0) === 1;\r\n break;\r\n }\r\n case 'td': {\r\n const castedProps = elementProps as IRequiredDomProps['td'];\r\n isFocused =\r\n tableState?.focusedRow === castedProps.rowIndex &&\r\n (tableState?.focusedColumn ?? 0) - statesColumns ===\r\n castedProps.columnIndex + 1 + (hasNonAdditionalFilters ? 1 : 0);\r\n break;\r\n }\r\n case 'headerStateCell': {\r\n const castedProps = elementProps as IRequiredDomProps['td'];\r\n isFocused =\r\n tableState?.focusedRow ===\r\n castedProps.rowIndex - 1 - startDataRowIndex &&\r\n addBoundary(tableState?.focusedColumn, 0) ===\r\n castedProps.columnIndex + 1 + (hasNonAdditionalFilters ? 1 : 0);\r\n break;\r\n }\r\n case 'th': {\r\n const castedProps = elementProps as IRequiredDomProps['th'];\r\n isFocused =\r\n tableState?.focusedRow === 0 - startDataRowIndex &&\r\n addBoundary((tableState?.focusedColumn ?? 0) - statesColumns, 0) ===\r\n castedProps.columnIndex + 1 + (hasNonAdditionalFilters ? 1 : 0);\r\n break;\r\n }\r\n case 'separator': {\r\n const castedProps = elementProps as IRequiredDomProps['separator'];\r\n isFocused = !tableState\r\n ? false\r\n : tableState.focusedRow === castedProps.rowIndex;\r\n break;\r\n }\r\n default:\r\n break;\r\n }\r\n\r\n return {\r\n columns: tableState?.columns ?? [],\r\n expandedBeforeThisRow,\r\n isEditionMode: tableState?.isEditionMode,\r\n hasNonAdditionalFilters,\r\n rowsLength: element === 'table' ? tableState?.rows.length : '',\r\n isSelected,\r\n isFocused,\r\n startDataRowIndex,\r\n statesColumns: tableState?.statesColumns,\r\n };\r\n}\r\n\r\nexport function getDomProps<ElementType extends keyof IRequiredDomProps>(\r\n state: ReturnType<typeof getDomStoreProps>,\r\n element: ElementType,\r\n elementProps: IRequiredDomProps[typeof element],\r\n): TDomProps {\r\n let returnObject: Omit<TDomProps, 'ref'> = {};\r\n\r\n switch (element) {\r\n case 'filterTd': {\r\n const castedProps = elementProps as IRequiredDomProps['filterTd'];\r\n returnObject = {\r\n 'aria-colindex':\r\n castedProps.columnIndex +\r\n 1 +\r\n (state.statesColumns?.length || 0) +\r\n (state.hasNonAdditionalFilters ? 1 : 0),\r\n 'data-editionmode': state.isEditionMode && state.isFocused,\r\n 'data-focused': state.isFocused,\r\n tabIndex: state.isFocused ? 0 : -1,\r\n 'data-rowindex': 2,\r\n };\r\n break;\r\n }\r\n case 'separator': {\r\n const castedProps = elementProps as IRequiredDomProps['separator'];\r\n returnObject = {\r\n 'aria-rowindex':\r\n castedProps.rowIndex +\r\n state.startDataRowIndex +\r\n 1 +\r\n state.expandedBeforeThisRow,\r\n 'data-focusindex': castedProps.rowIndex + state.startDataRowIndex + 1,\r\n 'aria-selected': state.isSelected,\r\n 'data-focused': state.isFocused,\r\n 'aria-expanded': false,\r\n };\r\n break;\r\n }\r\n case 'table': {\r\n returnObject = {\r\n role: 'treegrid',\r\n 'aria-colcount': state.columns.length,\r\n 'aria-rowcount': state.rowsLength,\r\n };\r\n break;\r\n }\r\n case 'tr': {\r\n const castedProps = elementProps as IRequiredDomProps['tr'];\r\n returnObject = {\r\n 'aria-rowindex':\r\n castedProps.rowIndex +\r\n state.startDataRowIndex +\r\n 1 +\r\n state.expandedBeforeThisRow +\r\n (castedProps.isTheExpandedRow ? 1 : 0),\r\n 'data-focusindex':\r\n castedProps.rowIndex +\r\n state.startDataRowIndex +\r\n 1 +\r\n (castedProps.isTheExpandedRow ? 0.5 : 0),\r\n 'data-rowindex': castedProps.rowIndex,\r\n 'aria-selected': state.isSelected,\r\n 'data-focused': state.isFocused,\r\n 'aria-expanded': castedProps.isThisRowExpanded,\r\n tabIndex: state.isFocused ? 0 : -1,\r\n };\r\n break;\r\n }\r\n case 'headerTr': {\r\n returnObject = {\r\n 'aria-rowindex': 1,\r\n 'data-focusindex': 1,\r\n 'data-rowindex': state.hasNonAdditionalFilters ? -2 : -1,\r\n 'aria-selected': false,\r\n 'data-focused': state.isFocused,\r\n 'aria-expanded': false,\r\n };\r\n break;\r\n }\r\n case 'td': {\r\n const castedProps = elementProps as IRequiredDomProps['td'];\r\n returnObject = {\r\n 'aria-colindex':\r\n castedProps.columnIndex +\r\n 1 +\r\n (state.statesColumns?.length ?? 0) +\r\n (state.hasNonAdditionalFilters ? 1 : 0),\r\n 'data-editionmode': state.isEditionMode && state.isFocused,\r\n 'data-focused': state.isFocused,\r\n tabIndex: state.isFocused ? 0 : -1,\r\n 'data-rowindex': castedProps.rowIndex + state.startDataRowIndex + 1,\r\n };\r\n break;\r\n }\r\n case 'additionalTd': {\r\n const castedProps = elementProps as IRequiredDomProps['td'];\r\n returnObject = {\r\n 'aria-colindex': 1,\r\n 'data-editionmode': state.isEditionMode && state.isFocused,\r\n 'data-focused': state.isFocused,\r\n tabIndex: state.isFocused ? 0 : -1,\r\n 'data-rowindex': castedProps.rowIndex + state.startDataRowIndex + 1,\r\n };\r\n break;\r\n }\r\n case 'stateCell': {\r\n const castedProps = elementProps as IRequiredDomProps['td'];\r\n returnObject = {\r\n 'aria-colindex':\r\n castedProps.columnIndex + 1 + (state.hasNonAdditionalFilters ? 1 : 0),\r\n 'data-editionmode': state.isEditionMode && state.isFocused,\r\n 'data-focused': state.isFocused,\r\n tabIndex: state.isFocused ? 0 : -1,\r\n 'data-rowindex': castedProps.rowIndex + state.startDataRowIndex + 1,\r\n };\r\n break;\r\n }\r\n case 'headerStateCell': {\r\n const castedProps = elementProps as IRequiredDomProps['td'];\r\n returnObject = {\r\n 'aria-colindex':\r\n castedProps.columnIndex + 1 + (state.hasNonAdditionalFilters ? 1 : 0),\r\n 'data-editionmode': state.isEditionMode && state.isFocused,\r\n 'data-focused': state.isFocused,\r\n tabIndex: state.isFocused ? 0 : -1,\r\n 'data-rowindex': castedProps.rowIndex,\r\n };\r\n break;\r\n }\r\n case 'th': {\r\n const castedProps = elementProps as IRequiredDomProps['th'];\r\n returnObject = {\r\n 'aria-colindex':\r\n castedProps.columnIndex +\r\n 1 +\r\n (state.statesColumns?.length ?? 0) +\r\n (state.hasNonAdditionalFilters ? 1 : 0),\r\n 'aria-sort': ['ascending', 'descending', undefined][\r\n ['Asc', 'Desc', null].findIndex(\r\n (current) =>\r\n current === state.columns[castedProps.columnIndex].currentSorting,\r\n )\r\n ] as 'none' | 'ascending' | 'descending' | 'other' | undefined,\r\n 'data-editionmode': state.isEditionMode && state.isFocused,\r\n 'data-focused': state.isFocused,\r\n tabIndex: state.isFocused ? 0 : -1,\r\n 'data-rowindex': 1,\r\n };\r\n break;\r\n }\r\n default:\r\n break;\r\n }\r\n\r\n return returnObject;\r\n}\r\n\r\n/**\r\n * Este hook extrae según el estado de la tabla actual\r\n * y el nombre del elemento al que se le desean calcular\r\n * los atributos que deben mostrarse en el dom para\r\n * cumplir con las reglas de accesibilidad.\r\n *\r\n * @param element Es el nombre del elemento\r\n *\r\n * @param elementProps Las propiedades necesarias que se\r\n * deben suministrar para lograr un cálculo apropiado de\r\n * las propiedades que deben mostrarse.\r\n *\r\n * @param stateSelector Es una función que acepta el estado\r\n * global de la aplicación y devuelve el estado de la tabla\r\n * actual. Este método es necesario ya que el useDomProps\r\n * no sabe contra qué slice va a trabajar.\r\n *\r\n * @returns un objeto que contiene las propiedades\r\n * del DOM que deben destructurarse en el elemento html.\r\n */\r\nexport function useDomProps<ElementType extends keyof IRequiredDomProps>(\r\n element: ElementType,\r\n elementProps: IRequiredDomProps[typeof element],\r\n stateSelector: TUseDomProps,\r\n): TDomProps {\r\n const state = useResponsiveTable(() => {\r\n return getDomStoreProps<ElementType>(element, elementProps, stateSelector);\r\n }, shallowEqual);\r\n\r\n return useMemo(() => {\r\n return getDomProps(state, element, elementProps);\r\n }, [element, elementProps, state]);\r\n}\r\n","/* eslint-disable @typescript-eslint/no-dynamic-delete */\r\nimport { FaSortUp, FaSortDown, FaSort } from '@meronex/icons/fa';\r\nimport React, { CSSProperties } from 'react';\r\nimport { shallowEqual } from 'react-redux';\r\nimport { Box } from '@apia/theme';\r\nimport {\r\n EventEmitter,\r\n TMap,\r\n debugDispatcher,\r\n getSpecificParent,\r\n isChild,\r\n persistentStorage,\r\n useLatest,\r\n} from '@apia/util';\r\nimport { AutoEllipsis, useOtherTagButton } from '@apia/components';\r\nimport { domPropsSelector } from './ResponsiveTable';\r\nimport { useResponsiveTableContext } from './ResponsiveTableContext';\r\nimport { TResponsiveTableSortValue } from './types';\r\nimport { useResponsiveTable } from './store';\r\nimport { useDomProps } from './store/selection/useDomProps';\r\n\r\ninterface IHeaderCell {\r\n /**\r\n * Para ordenar en Apia se usa un índice de columna, que se\r\n * corresponde con su posición en base 0, sin tomar en cuenta\r\n * las columnas adicionales.\r\n */\r\n apiaColumnIndex: number;\r\n columnIndex: number;\r\n inTableColumnIndex: number;\r\n}\r\n\r\nconst widthStorageName = 'tablesWidths';\r\n\r\n/**\r\n * Calcula el ancho de la columna dependiendo del valor establecido,\r\n * si el valor es numérico o un string que contiene un número sin\r\n * unidad, devuelve el doble de ese número para establecer una\r\n * relatividad con los tamaños de las columnas actuales en Apia.\r\n *\r\n * Es decir, como todo en Apia era más chico, los tamaños que se\r\n * establecían antes no quedan visualmente agradables con los\r\n * tamaños actuales, por eso se magnifican multiplicando por 2.\r\n */\r\nfunction getColumnWidth(width?: string | number) {\r\n if (typeof width === 'string') {\r\n if (width.match(/(%|px|vw|vh|vmin|vmax|cm|mm|in|pt|pc)/)) return width;\r\n if (width === '') return 'auto';\r\n const numberValue = Number.parseInt(width, 10);\r\n if (isNaN(numberValue)) return 'auto';\r\n return numberValue;\r\n }\r\n if (typeof width === 'number') return width;\r\n return width;\r\n}\r\ndebugDispatcher.on(\r\n 'cleanTableSizes',\r\n ([tableName]) => {\r\n const currentWidths = persistentStorage[widthStorageName] as TMap<unknown>;\r\n delete currentWidths[tableName as string];\r\n persistentStorage[widthStorageName] = currentWidths;\r\n },\r\n 'Se usa para borrar el estado de una tabla. Uso: dd.cleanTableSizes(\"TableName\")',\r\n);\r\nfunction makeColumnName(tableName: string, columnName: string): string {\r\n return `${tableName}${columnName}`;\r\n}\r\n\r\nconst thWidthEmitter = new (class ThWidthEmitter extends EventEmitter<{\r\n resize: { name: string; width: number };\r\n}> {})();\r\n\r\nconst NoMemoHeaderCell = ({\r\n apiaColumnIndex,\r\n columnIndex,\r\n inTableColumnIndex,\r\n}: IHeaderCell) => {\r\n const { name, onSortChange } = useResponsiveTableContext();\r\n const uniqueId =\r\n (window.location.href.match(/busEntId=(\\d+)/)?.[1] as string) ??\r\n (window.location.href.match(/query=(\\d+)/)?.[1] as string) ??\r\n '';\r\n const isGlobal = window.isGlobal ? 'isGlobal' : 'notGlobal';\r\n const actualName = name + uniqueId + String(isGlobal);\r\n const columns = useResponsiveTable((global) => {\r\n const tableState = global.responsiveTableSlice[name];\r\n return tableState?.columns;\r\n }, shallowEqual);\r\n const column = columns[columnIndex];\r\n const additionalInfoColumns = columns.filter((c) => c.showAsAdditional);\r\n\r\n const storedWidth = (\r\n (persistentStorage[widthStorageName] as TMap<unknown>)?.[\r\n actualName\r\n ] as TMap<unknown>\r\n )?.[column.name] as number;\r\n\r\n const [width, setWidth] = React.useState(storedWidth ?? column.width ?? 200);\r\n const [isResize, setIsResize] = React.useState(storedWidth !== undefined);\r\n\r\n React.useEffect(() => {\r\n return void thWidthEmitter.on('resize', (ev) => {\r\n if (ev.name === makeColumnName(actualName, column.name)) {\r\n setIsResize(true);\r\n setWidth(ev.width);\r\n }\r\n });\r\n }, [column.name, actualName]);\r\n\r\n const isFilterRequired = useResponsiveTable((global) => {\r\n const tableState = global.responsiveTableSlice[name];\r\n const columnFilter = tableState?.filters.find(\r\n (current) => current.column === column.title,\r\n );\r\n return columnFilter?.required;\r\n }, shallowEqual);\r\n\r\n const isSortingAllowed = useResponsiveTable((global) => {\r\n const tableState = global.responsiveTableSlice[name];\r\n return tableState?.allowSorting;\r\n });\r\n\r\n const isLoading = useResponsiveTable((global) => {\r\n const tableState = global.responsiveTableSlice[name];\r\n return tableState?.isLoading;\r\n });\r\n\r\n const domProps = useDomProps(\r\n 'th',\r\n {\r\n columnIndex: inTableColumnIndex,\r\n },\r\n domPropsSelector(name),\r\n );\r\n\r\n const sx: CSSProperties = React.useMemo(\r\n () =>\r\n !isResize\r\n ? {\r\n minWidth:\r\n columnIndex === columns.length - 1\r\n ? '100%'\r\n : getColumnWidth(column.minWidth ?? column.width),\r\n maxWidth:\r\n column.maxWidth !== undefined\r\n ? getColumnWidth(column.maxWidth)\r\n : undefined,\r\n width: getColumnWidth(column.width),\r\n position: 'relative',\r\n }\r\n : {\r\n width: `${width}px`,\r\n minWidth:\r\n columnIndex === columns.length - 1 ? '100%' : `${width}px`,\r\n position: 'relative',\r\n },\r\n [\r\n column.maxWidth,\r\n column.minWidth,\r\n column.width,\r\n columnIndex,\r\n columns.length,\r\n isResize,\r\n width,\r\n ],\r\n );\r\n\r\n const lastIsLoading = useLatest(isLoading);\r\n\r\n const buttonProps = useOtherTagButton(\r\n React.useMemo(\r\n () => ({\r\n className: 'headButton',\r\n onClick: (ev) => {\r\n if (lastIsLoading.current) return;\r\n if (\r\n isChild(ev.target as HTMLElement, (current) =>\r\n current.classList.contains('headButton__resizer'),\r\n )\r\n )\r\n return;\r\n\r\n if (\r\n onSortChange &&\r\n column.allowSorting !== false &&\r\n isSortingAllowed !== false\r\n )\r\n onSortChange({\r\n column,\r\n columnIndex: apiaColumnIndex,\r\n name: column.name,\r\n sortValue: ['Asc', 'Desc'][\r\n column.currentSorting !== 'A' ? 0 : 1\r\n ] as TResponsiveTableSortValue,\r\n });\r\n },\r\n }),\r\n [apiaColumnIndex, column, isSortingAllowed, lastIsLoading, onSortChange],\r\n ),\r\n );\r\n return (\r\n <Box\r\n as=\"th\"\r\n {...({ sx } as any)}\r\n data-columnname={column.name}\r\n title={column.title ?? column.label ?? column.name}\r\n {...buttonProps}\r\n {...domProps}\r\n role=\"rowheader\"\r\n className={`${\r\n isFilterRequired && window.SHOW_REQUIRED_POSITION\r\n ? 'requiredFilterColumn'\r\n : ''\r\n }`}\r\n ref={(el) => {\r\n if (!column?.autoAdjustWidth) return;\r\n if (\r\n el instanceof HTMLElement &&\r\n !el.dataset.resized &&\r\n storedWidth === undefined\r\n ) {\r\n const clone = el.cloneNode(true) as HTMLElement;\r\n const child = clone.querySelector(\r\n '.headButton__label',\r\n ) as HTMLElement;\r\n child.style.opacity = '0';\r\n document.body.append(child);\r\n child.style.position = 'fixed';\r\n child.style.maxWidth = '0';\r\n child.style.minWidth = '0';\r\n child.style.width = '0';\r\n child.style.overflow = 'auto';\r\n child.style.textWrap = 'nowrap';\r\n\r\n window.requestAnimationFrame(() => {\r\n const idealWidth = child.scrollWidth;\r\n const currentWidth = el\r\n .querySelector('.headButton__label')!\r\n .getBoundingClientRect().width;\r\n const elWidth = el.getBoundingClientRect().width;\r\n const diff = idealWidth - currentWidth;\r\n setWidth(elWidth + diff + 5);\r\n\r\n el.dataset.resized = 'true';\r\n });\r\n }\r\n }}\r\n >\r\n <Box as=\"span\" className=\"headButton__container\">\r\n <Box\r\n as=\"span\"\r\n className={`${\r\n isFilterRequired ? 'requiredFilter__Column' : ''\r\n } headButton__label`}\r\n >\r\n <AutoEllipsis\r\n overrideStyles={(el) => {\r\n const th = el.closest('th') as HTMLElement;\r\n return {\r\n width: `${Math.max(\r\n 100,\r\n Number.parseInt(window.getComputedStyle(th).width),\r\n )}px`,\r\n };\r\n }}\r\n >\r\n {column.label}\r\n </AutoEllipsis>\r\n </Box>\r\n <Box as=\"span\" className=\"headButton__sortIcon\">\r\n {column.allowSorting !== false && column.currentSorting === 'A' && (\r\n <FaSortUp />\r\n )}\r\n {column.allowSorting !== false && column.currentSorting === 'D' && (\r\n <FaSortDown />\r\n )}\r\n {column.allowSorting !== false && !column.currentSorting && (\r\n <FaSort />\r\n )}\r\n </Box>\r\n <Box\r\n // sx={{ display: 'none' }}\r\n className=\"headButton__resizer\"\r\n onMouseDown={(ev) => {\r\n if (!isResize) {\r\n const trElement = getSpecificParent(\r\n ev.target as HTMLElement,\r\n (current) => current.tagName === 'TR',\r\n );\r\n\r\n trElement?.querySelectorAll('th').forEach((current) => {\r\n thWidthEmitter.emit('resize', {\r\n name: makeColumnName(\r\n actualName,\r\n current.dataset.columnname as string,\r\n ),\r\n width: (current as HTMLElement).clientWidth,\r\n });\r\n });\r\n\r\n setIsResize(true);\r\n }\r\n\r\n const th = getSpecificParent(\r\n ev.target as HTMLElement,\r\n (current) => current.tagName === 'TH',\r\n );\r\n if (!th) throw new Error('There is no th');\r\n\r\n const initialX = ev.clientX;\r\n const initialWidth = th.clientWidth;\r\n\r\n const resize = (mousemoveEv: MouseEvent) => {\r\n const dif = mousemoveEv.clientX - initialX;\r\n\r\n setWidth(initialWidth + dif);\r\n };\r\n const unsuscribe = () => {\r\n const trElement = getSpecificParent(\r\n ev.target as HTMLElement,\r\n (current) => current.tagName === 'TR',\r\n );\r\n trElement?.querySelectorAll('th').forEach((current) => {\r\n persistentStorage[widthStorageName] = {\r\n ...(persistentStorage[widthStorageName] as TMap<unknown>),\r\n [actualName]: {\r\n ...((\r\n persistentStorage[widthStorageName] as TMap<unknown>\r\n )?.[actualName] as TMap<unknown>),\r\n [current.dataset.columnname as string]: (\r\n current as HTMLElement\r\n ).clientWidth,\r\n },\r\n };\r\n });\r\n //add additional info columns to map with an default with of 100\r\n additionalInfoColumns.forEach((c) => {\r\n persistentStorage[widthStorageName] = {\r\n ...(persistentStorage[widthStorageName] as TMap<unknown>),\r\n [actualName]: {\r\n ...((\r\n persistentStorage[widthStorageName] as TMap<unknown>\r\n )?.[actualName] as TMap<unknown>),\r\n [c.name]: 100,\r\n },\r\n };\r\n });\r\n document.removeEventListener('mousemove', resize);\r\n document.removeEventListener('mouseup', unsuscribe);\r\n };\r\n\r\n document.addEventListener('mousemove', resize);\r\n document.addEventListener('mouseup', unsuscribe);\r\n\r\n return false;\r\n }}\r\n />\r\n </Box>\r\n </Box>\r\n );\r\n};\r\n\r\nexport const HeaderCell = React.memo(NoMemoHeaderCell);\r\n","import React from 'react';\r\nimport { Box, getVariant } from '@apia/theme';\r\nimport { TResponsiveTableRowState } from '../types';\r\n\r\nconst NoMemoRowStatesRenderer = ({\r\n state,\r\n}: {\r\n state: TResponsiveTableRowState;\r\n}) => {\r\n const { Icon } = state;\r\n\r\n return (\r\n <Box\r\n sx={React.useMemo(\r\n () => ({\r\n '&, svg, path': {\r\n color: state.color ?? '',\r\n },\r\n }),\r\n [state.color],\r\n )}\r\n >\r\n <Icon\r\n {...getVariant('inherit')}\r\n title={state.tooltip}\r\n className={`${state.className ?? 'state'}_icon state_icon`}\r\n />\r\n </Box>\r\n );\r\n};\r\n\r\nexport const RowStatesRenderer = React.memo(NoMemoRowStatesRenderer);\r\n","import { domPropsSelector } from './ResponsiveTable';\r\nimport { RowStatesRenderer } from './renderers/RowStatesRenderer';\r\nimport { useResponsiveTableContext } from './ResponsiveTableContext';\r\nimport { useDomProps } from './store/selection/useDomProps';\r\nimport { TResponsiveTableRowState } from './types';\r\nimport { Box } from '@apia/theme';\r\n\r\ninterface IStateCell {\r\n index: number;\r\n isHeader?: boolean;\r\n rowIndex: number;\r\n state?: TResponsiveTableRowState;\r\n}\r\n\r\nexport const StateCell = ({ index, rowIndex, state, isHeader }: IStateCell) => {\r\n const { name } = useResponsiveTableContext();\r\n const domProps = useDomProps(\r\n isHeader ? 'headerStateCell' : 'stateCell',\r\n { columnIndex: index, rowIndex },\r\n domPropsSelector(name),\r\n );\r\n return (\r\n <Box as=\"td\" className=\"stateCell\" {...domProps}>\r\n {state?.Icon ? <RowStatesRenderer state={state} /> : ''}\r\n </Box>\r\n );\r\n};\r\n","import { Box, getVariant, Input, Select } from '@apia/theme';\r\nimport {\r\n TApiaFilter,\r\n TApiaFilterValue,\r\n useIntermediateValue,\r\n usePrevious,\r\n} from '@apia/util';\r\nimport { useResponsiveTableContext } from '../ResponsiveTableContext';\r\nimport { useRef } from 'react';\r\n\r\nconst units = ['B', 'KB', 'MB', 'GB'];\r\nconst NoMemoRangeFilter = ({\r\n filter,\r\n tableName,\r\n className,\r\n}: {\r\n filter: TApiaFilter;\r\n tableName?: string;\r\n className?: string;\r\n}) => {\r\n const { onFilterBlur, onFilterChange, onFilterPressEnter } =\r\n useResponsiveTableContext(tableName);\r\n const filterLow: TApiaFilter = {\r\n ...filter,\r\n changeFiltersTimestamp: filter?.changeFiltersTimestamp,\r\n currentValue: filter.currentValue,\r\n deleteFiltersTimestamp: filter?.deleteFiltersTimestamp,\r\n id: filter.id,\r\n toolTip: filter.toolTip,\r\n type: 'apiaNumber',\r\n };\r\n\r\n const multiplier = useRef(1);\r\n const lastEmittedHigh = useRef<TApiaFilterValue | null>(null);\r\n const lastEmittedLow = useRef<TApiaFilterValue | null>(null);\r\n const lastEmittedMultiplier = useRef(1);\r\n\r\n const previousChangeTimestamp = usePrevious(filter?.changeFiltersTimestamp);\r\n const previousDeleteTimestamp = usePrevious(filter?.deleteFiltersTimestamp);\r\n\r\n if (previousChangeTimestamp.current !== filter?.changeFiltersTimestamp) {\r\n lastEmittedLow.current = filterLow.currentValue;\r\n lastEmittedHigh.current = filterLow.filterToValue || '';\r\n }\r\n if (previousDeleteTimestamp.current !== filter?.deleteFiltersTimestamp) {\r\n lastEmittedLow.current = '';\r\n lastEmittedHigh.current = '';\r\n }\r\n\r\n const emitLow = (\r\n method: ((ev: TApiaFilter) => unknown) | undefined,\r\n currentValue: TApiaFilterValue,\r\n ) => {\r\n const numberValue = currentValue ?? '';\r\n\r\n if (\r\n lastEmittedLow.current === numberValue &&\r\n lastEmittedMultiplier.current === multiplier.current\r\n ) {\r\n return;\r\n }\r\n\r\n lastEmittedLow.current = numberValue;\r\n lastEmittedMultiplier.current = multiplier.current;\r\n const emitValue = numberValue;\r\n\r\n void method?.({\r\n ...filterLow,\r\n currentValue: emitValue,\r\n filterToValue: lastEmittedHigh.current ?? '',\r\n sizeMultiplier: multiplier.current,\r\n });\r\n };\r\n const emitHigh = (\r\n method: ((ev: TApiaFilter) => unknown) | undefined,\r\n currentValue: TApiaFilterValue,\r\n ) => {\r\n const numberValue = currentValue ?? '';\r\n\r\n if (\r\n lastEmittedHigh.current === numberValue &&\r\n lastEmittedMultiplier.current === multiplier.current\r\n ) {\r\n return;\r\n }\r\n\r\n lastEmittedHigh.current = numberValue;\r\n lastEmittedMultiplier.current = multiplier.current;\r\n const emitValue = numberValue;\r\n\r\n void method?.({\r\n ...filterLow,\r\n currentValue: lastEmittedLow.current ?? '',\r\n filterToValue: emitValue,\r\n sizeMultiplier: multiplier.current,\r\n });\r\n };\r\n\r\n const [lowValue, setLowValue] = useIntermediateValue(filterLow.currentValue);\r\n const [highValue, setHighValue] = useIntermediateValue(\r\n filterLow.filterToValue,\r\n );\r\n const [unit, setUnit] = useIntermediateValue(filterLow.sizeMultiplier);\r\n\r\n return (\r\n <Box\r\n className={`ApiaFilter__Range ${className || ''}`}\r\n {...getVariant('layout.common.filters.rangeFilter')}\r\n >\r\n <Box className=\"ApiaFilter__Range__Low\">\r\n <Input\r\n onChange={({ target: { value: currentValue } }) => {\r\n setLowValue(currentValue);\r\n emitLow(onFilterChange, currentValue);\r\n }}\r\n onBlur={({ target: { value: currentValue } }) => {\r\n emitLow(onFilterBlur, currentValue);\r\n }}\r\n onKeyDown={({ code, target }) => {\r\n if (code === 'Enter') {\r\n emitLow(onFilterPressEnter, (target as HTMLInputElement).value);\r\n }\r\n }}\r\n value={lowValue}\r\n />\r\n </Box>\r\n {' - '}\r\n <Box className=\"ApiaFilter__Range__High\">\r\n <Input\r\n onChange={({ target: { value: currentValue } }) => {\r\n setHighValue(currentValue);\r\n emitHigh(onFilterChange, currentValue);\r\n }}\r\n onBlur={({ target: { value: currentValue } }) => {\r\n emitHigh(onFilterBlur, currentValue);\r\n }}\r\n onKeyDown={({ code, target }) => {\r\n if (code === 'Enter') {\r\n emitHigh(onFilterPressEnter, (target as HTMLInputElement).value);\r\n }\r\n }}\r\n value={highValue}\r\n />\r\n </Box>\r\n {filter.isSize && (\r\n <Select\r\n className=\"ApiaFilter__Range__UnitSelector\"\r\n onChange={(ev) => {\r\n const unit = ev.target.value;\r\n const index = units.indexOf(unit);\r\n if (index !== -1) {\r\n multiplier.current = 2 ** (index * 10);\r\n setUnit(multiplier.current);\r\n /**\r\n * It's enough to fire event on low because it updates the multiplier in the original filter\r\n */\r\n emitLow(onFilterChange, lastEmittedLow.current ?? '');\r\n }\r\n }}\r\n value={units[Math.log2(unit || 1) / 10]}\r\n >\r\n {units.map((c) => (\r\n <option key={c} value={c}>\r\n {c}\r\n </option>\r\n ))}\r\n </Select>\r\n )}\r\n </Box>\r\n );\r\n};\r\n\r\nexport const RangeFilter = NoMemoRangeFilter;\r\n","import { Input } from '@apia/theme';\r\nimport React from 'react';\r\nimport { TApiaFilter, TApiaFilterValue } from '@apia/util';\r\nimport { ApiaFilter } from '@apia/components';\r\nimport { useResponsiveTableContext } from './ResponsiveTableContext';\r\nimport { domPropsSelector } from './ResponsiveTable';\r\nimport { RangeFilter } from './filters/RangeFilter';\r\nimport { useDomProps } from './store/selection/useDomProps';\r\nimport { TResponsiveTableContextProps } from './types';\r\n\r\ninterface IFilterCell {\r\n columnIndex: number;\r\n filter?: TApiaFilter;\r\n Renderer?: ReturnType<\r\n NonNullable<TResponsiveTableContextProps['FiltersRenderer']>\r\n >;\r\n}\r\n\r\nexport const FilterCell = ({ columnIndex, filter, Renderer }: IFilterCell) => {\r\n const { name, onFilterBlur, onFilterChange, onFilterPressEnter } =\r\n useResponsiveTableContext();\r\n const domProps = useDomProps(\r\n 'filterTd',\r\n {\r\n columnIndex,\r\n },\r\n domPropsSelector(name),\r\n );\r\n\r\n const handleOnBlur = React.useCallback(\r\n (currentValue: TApiaFilterValue) => {\r\n if (filter && onFilterBlur) onFilterBlur({ ...filter, currentValue });\r\n },\r\n [filter, onFilterBlur],\r\n );\r\n\r\n const handleOnChange = React.useCallback(\r\n (currentValue: TApiaFilterValue) => {\r\n if (filter && onFilterChange)\r\n return onFilterChange({ ...filter, currentValue });\r\n return true;\r\n },\r\n [filter, onFilterChange],\r\n );\r\n\r\n const handleOnPressEnter = React.useCallback(\r\n (currentValue: TApiaFilterValue) => {\r\n if (filter && onFilterPressEnter)\r\n onFilterPressEnter({ ...filter, currentValue });\r\n },\r\n [filter, onFilterPressEnter],\r\n );\r\n\r\n function findFilter() {\r\n if (filter?.isRange) {\r\n return <RangeFilter filter={filter} />;\r\n }\r\n if (filter && !(filter.asAdditional || !filter.column || filter.isRange)) {\r\n return (\r\n <ApiaFilter\r\n onBlur={handleOnBlur}\r\n onChange={handleOnChange}\r\n onPressEnter={handleOnPressEnter}\r\n filter={filter}\r\n />\r\n );\r\n }\r\n\r\n let label: string;\r\n if (filter && (filter.asAdditional || !filter.column || filter.isRange)) {\r\n label = window.LBL_ADDITIONAL_FILTER;\r\n } else {\r\n label = window.LBL_NO_COLUMN_FILTER;\r\n }\r\n\r\n return <Input aria-label={label} disabled />;\r\n }\r\n return (\r\n <td {...domProps}>\r\n {Renderer ? <Renderer filter={filter!} /> : findFilter()}\r\n </td>\r\n );\r\n};\r\n","import { useUpdateEffect } from 'ahooks';\r\nimport React, { useState } from 'react';\r\nimport {\r\n customEvents,\r\n getLabel,\r\n persistentStorage,\r\n TApiaFilter,\r\n} from '@apia/util';\r\nimport { shallowEqual } from '@apia/store';\r\nimport { useOtherTagButton } from '@apia/components';\r\nimport { Icon } from '@apia/icons';\r\nimport { HeaderCell } from './HeaderCell';\r\nimport { useResponsiveTableContext } from './ResponsiveTableContext';\r\nimport { useResponsiveTable } from './store';\r\nimport { StateCell } from './StateCell';\r\nimport { FilterCell } from './FilterCell';\r\nimport { useDomProps } from './store/selection/useDomProps';\r\nimport { domPropsSelector } from './ResponsiveTable';\r\nimport { ISelectableState } from './store/selection/types';\r\n\r\ndeclare global {\r\n interface Window {\r\n focusedRow: number;\r\n focusedColumn: number;\r\n hasNonAdditionalFilters: boolean;\r\n }\r\n}\r\n\r\nconst NoMemoHeader = () => {\r\n const { name, FiltersRenderer, showFilters } = useResponsiveTableContext();\r\n\r\n const columns = useResponsiveTable(\r\n (global) => global.responsiveTableSlice[name]?.columns,\r\n );\r\n const hasNonAdditionalFilters = useResponsiveTable(\r\n (global) => global.responsiveTableSlice[name]?.hasNonAdditionalFilters,\r\n );\r\n const focusedColumn = useResponsiveTable(\r\n (global) => global.responsiveTableSlice[name]?.focusedColumn,\r\n );\r\n const focusedRow = useResponsiveTable(\r\n (global) => global.responsiveTableSlice[name]?.focusedRow,\r\n );\r\n\r\n const statesColumns = useResponsiveTable((global) => {\r\n const state = global.responsiveTableSlice[name];\r\n\r\n return Array(\r\n Math.max(\r\n 0,\r\n state?.reserveColumnsForStates || 0,\r\n state?.statesColumns?.length || 0,\r\n ),\r\n )\r\n .fill(1)\r\n .map((_, index) => {\r\n const r: ISelectableState['statesColumns'][0] & { id: string } = {\r\n Icon: '',\r\n iconColor: 'transparent',\r\n id: String(index),\r\n tooltip: '',\r\n ...(state.statesColumns?.[index] as any),\r\n };\r\n return r;\r\n });\r\n });\r\n\r\n const filters = useResponsiveTable<\r\n {\r\n columnIndex: number;\r\n definition: TApiaFilter;\r\n }[]\r\n >(\r\n (global) => {\r\n const tableState = global.responsiveTableSlice[name];\r\n const returnObject = tableState?.filters\r\n ?.map((current) => ({\r\n columnIndex: tableState.columns.findIndex(\r\n (search) => search.name === current.column,\r\n ),\r\n definition: current,\r\n }))\r\n .filter((current) => current.columnIndex >= 0);\r\n\r\n return returnObject;\r\n },\r\n (a, b) => {\r\n return (\r\n a?.length === b?.length &&\r\n a?.reduce<boolean>((result, current, index) => {\r\n return (\r\n result && shallowEqual(current.definition, b[index].definition)\r\n );\r\n }, true)\r\n );\r\n },\r\n );\r\n\r\n const additionalColumns = React.useMemo(\r\n () =>\r\n columns?.reduce(\r\n (count, column) => count + (column.showAsAdditional ? 1 : 0),\r\n 0,\r\n ),\r\n [columns],\r\n );\r\n\r\n const [isFiltersRowVisible, setIsFiltersRowVisible] = React.useState<boolean>(\r\n showFilters ?? false,\r\n );\r\n React.useEffect(() => {\r\n persistentStorage.showResponsiveTableFilters = isFiltersRowVisible;\r\n }, [isFiltersRowVisible]);\r\n\r\n const buttonProps = useOtherTagButton(\r\n React.useMemo(\r\n () => ({\r\n className: 'additionalColumn',\r\n onClick: () => setIsFiltersRowVisible((current) => !current),\r\n }),\r\n [],\r\n ),\r\n );\r\n\r\n const [ref, setRef] = useState<HTMLTableRowElement | null>(null);\r\n\r\n useUpdateEffect(() => {\r\n const handleFocus = (ev: Event) => {\r\n ev.stopPropagation();\r\n setIsFiltersRowVisible(true);\r\n };\r\n ref?.addEventListener(customEvents.focus, handleFocus);\r\n return () => {\r\n ref?.removeEventListener(customEvents.focus, handleFocus);\r\n };\r\n }, [ref]);\r\n\r\n const domProps = useDomProps('headerTr', {}, domPropsSelector(name));\r\n\r\n return (\r\n <thead>\r\n <tr {...domProps}>\r\n {(additionalColumns > 0 || hasNonAdditionalFilters) && (\r\n <th\r\n aria-colindex={1}\r\n aria-rowindex={1}\r\n data-focused={\r\n focusedColumn === 1 &&\r\n focusedRow === -1 - (hasNonAdditionalFilters ? 1 : 0)\r\n }\r\n {...buttonProps}\r\n tabIndex={\r\n focusedColumn === 1 &&\r\n focusedRow === -1 - (hasNonAdditionalFilters ? 1 : 0)\r\n ? 0\r\n : -1\r\n }\r\n aria-label={\r\n isFiltersRowVisible\r\n ? getLabel('lblHideFilters').text\r\n : getLabel('lblShowFilters').text\r\n }\r\n role=\"rowheader\"\r\n >\r\n {hasNonAdditionalFilters ? (\r\n <Icon\r\n className=\"filterButton\"\r\n name=\"Filter\"\r\n title={\r\n isFiltersRowVisible\r\n ? getLabel('lblHideFilters').text\r\n : getLabel('lblShowFilters').text\r\n }\r\n aria-label={\r\n isFiltersRowVisible\r\n ? getLabel('lblHideFilters').text\r\n : getLabel('lblShowFilters').text\r\n }\r\n />\r\n ) : (\r\n <>\r\n <span style={{ display: 'none' }}>\r\n {isFiltersRowVisible\r\n ? getLabel('lblHideFilters').text\r\n : getLabel('lblShowFilters').text}\r\n </span>\r\n <span> </span>\r\n </>\r\n )}\r\n </th>\r\n )}\r\n {statesColumns.map(({ id, ...state }, i) => (\r\n <StateCell isHeader key={id} index={i} rowIndex={1} state={state} />\r\n ))}\r\n {columns\r\n ?.map((current, actualColumnIndex) => ({\r\n ...current,\r\n actualTableColumnIndex: actualColumnIndex,\r\n }))\r\n .filter((current) => !current.showAsAdditional)\r\n .map((current, columnIndex) => {\r\n if (current.hidden) return null;\r\n\r\n return (\r\n <HeaderCell\r\n apiaColumnIndex={current.actualTableColumnIndex}\r\n columnIndex={current.actualTableColumnIndex}\r\n inTableColumnIndex={columnIndex}\r\n key={current.name}\r\n />\r\n );\r\n })}\r\n </tr>\r\n {(filters?.length ?? 0) > 0 && (\r\n <tr\r\n aria-rowindex={2}\r\n data-rowindex={-1}\r\n ref={setRef}\r\n data-focusindex={2}\r\n className={`responsiveTable__filters__row ${\r\n isFiltersRowVisible ? '' : 'hidden'\r\n }`}\r\n >\r\n {(additionalColumns > 0 || hasNonAdditionalFilters) && (\r\n <td\r\n className=\"noFilter\"\r\n aria-colindex={1}\r\n aria-rowindex={2}\r\n tabIndex={focusedColumn === 1 && focusedRow === -1 ? 0 : -1}\r\n data-focused={focusedColumn === 1 && focusedRow === -1}\r\n >\r\n \r\n </td>\r\n )}\r\n {statesColumns.map(({ id }, i) => (\r\n <StateCell isHeader key={id} index={i} rowIndex={2} />\r\n ))}\r\n {columns\r\n ?.filter((current) => !current.showAsAdditional && !current.hidden)\r\n .map((current, columnIndex) => {\r\n const filter = filters.find(\r\n (search) => search.definition.column === current.name,\r\n );\r\n\r\n const RenderComponent = filter\r\n ? FiltersRenderer?.(String(filter.definition.id))\r\n : undefined;\r\n\r\n return current.showAsAdditional ? null : (\r\n <FilterCell\r\n key={current.name}\r\n columnIndex={columnIndex}\r\n filter={filter?.definition}\r\n Renderer={RenderComponent}\r\n />\r\n );\r\n })}\r\n </tr>\r\n )}\r\n </thead>\r\n );\r\n};\r\n\r\nexport const Header = React.memo(NoMemoHeader);\r\n","import React from 'react';\r\nimport { Box } from '@apia/theme';\r\nimport { TResponsiveTableCellRendererProps } from '../types';\r\n\r\nconst NoMemoAdditionalColumnDefaultRenderer = ({\r\n column,\r\n cell,\r\n}: TResponsiveTableCellRendererProps) => {\r\n return (\r\n <Box\r\n className={`${cell.className ?? ''} responsiveTable__additionalInfoItem`}\r\n id={cell.id}\r\n title={cell.title}\r\n >\r\n <Box as=\"strong\">{column.label ?? column.name}:</Box> {cell.children}\r\n </Box>\r\n );\r\n};\r\n\r\nexport const AdditionalColumnDefaultRenderer = React.memo(\r\n NoMemoAdditionalColumnDefaultRenderer,\r\n);\r\n","import { domPropsSelector } from './ResponsiveTable';\r\nimport { useResponsiveTableContext } from './ResponsiveTableContext';\r\nimport { useDomProps } from './store/selection/useDomProps';\r\n\r\nexport const SeparatorCell = ({\r\n colSpan,\r\n rowIndex,\r\n}: {\r\n colSpan: number;\r\n rowIndex: number;\r\n}) => {\r\n const { name } = useResponsiveTableContext();\r\n const domProps = useDomProps(\r\n 'separator',\r\n { rowIndex },\r\n domPropsSelector(name),\r\n );\r\n return (\r\n <td className=\"row__separator__cell\" colSpan={colSpan} {...domProps} />\r\n );\r\n};\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport React, { useMemo } from 'react';\r\nimport { Box } from '@apia/theme';\r\nimport {\r\n TResponsiveTableRowRenderer,\r\n TResponsiveTableRowRendererProps,\r\n} from '../types';\r\n\r\nconst NoMemoDefaultRowRenderer: TResponsiveTableRowRenderer = React.forwardRef<\r\n HTMLTableRowElement,\r\n TResponsiveTableRowRendererProps\r\n>(({ row, rowIndex, ...props }, currentRef) => (\r\n <Box\r\n as={'tr' as any}\r\n sx={useMemo(\r\n () => ({\r\n '&.colored, & > *': {\r\n color: row.color,\r\n background: row.background,\r\n },\r\n }),\r\n [row.background, row.color],\r\n )}\r\n ref={currentRef as React.RefObject<HTMLTableRowElement>}\r\n data-test-id={props.id}\r\n {...props}\r\n />\r\n));\r\n\r\nNoMemoDefaultRowRenderer.displayName = 'DefaultRowRenderer';\r\n\r\nexport const DefaultRowRenderer = NoMemoDefaultRowRenderer;\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport React, { useMemo } from 'react';\r\nimport { Box } from '@apia/theme';\r\nimport { TResponsiveTableCellRendererProps } from '../types';\r\nimport { AutoEllipsis } from '@apia/components';\r\nimport { useResponsiveTableContext } from '../ResponsiveTableContext';\r\n\r\nconst NoMemoDefaultCellRenderer = React.forwardRef<\r\n HTMLTableCellElement,\r\n TResponsiveTableCellRendererProps\r\n>(\r\n (\r\n {\r\n cell: { Renderer, rendererProps, AccordionRenderer, ariaLabel, ...cell },\r\n column,\r\n row,\r\n ...props\r\n },\r\n currentRef,\r\n ) => {\r\n const { avoidAutoEllipsis } = useResponsiveTableContext();\r\n return (\r\n <Box\r\n as={'td' as any}\r\n sx={useMemo(\r\n () => ({\r\n '&.colored': {\r\n background: cell.background,\r\n color: cell.color,\r\n fontWeight: 'bold',\r\n },\r\n }),\r\n [cell.background, cell.color],\r\n )}\r\n ref={currentRef as React.RefObject<HTMLTableCellElement>}\r\n {...props}\r\n {...cell}\r\n aria-label={ariaLabel as string}\r\n >\r\n {!avoidAutoEllipsis ? (\r\n <AutoEllipsis\r\n overrideStyles={(el) => {\r\n const td = el.closest('td') as HTMLElement;\r\n\r\n return {\r\n width: window.getComputedStyle(td).width,\r\n };\r\n }}\r\n >\r\n {props.children ?? cell.children}\r\n </AutoEllipsis>\r\n ) : (\r\n (props.children ?? cell.children)\r\n )}\r\n </Box>\r\n );\r\n },\r\n);\r\nNoMemoDefaultCellRenderer.displayName = 'DefaultCellRenderer';\r\nexport const DefaultCellRenderer = NoMemoDefaultCellRenderer;\r\n","import React, { FC } from 'react';\r\nimport { shallowEqual } from 'react-redux';\r\nimport { domPropsSelector } from './ResponsiveTable';\r\nimport { DefaultCellRenderer } from './renderers/DefaultCellRenderer';\r\nimport { useResponsiveTableContext } from './ResponsiveTableContext';\r\nimport { useDomProps } from './store/selection/useDomProps';\r\nimport { useResponsiveTable } from './store';\r\nimport { getFocusSelector } from '@apia/util';\r\n\r\ninterface ICell {\r\n columnIndex: number;\r\n inTableColumnIndex: number;\r\n rowIndex: number;\r\n}\r\n\r\nconst NoMemoCell: FC<ICell> = ({\r\n columnIndex,\r\n inTableColumnIndex,\r\n rowIndex,\r\n}) => {\r\n const { name } = useResponsiveTableContext();\r\n const domProps = useDomProps(\r\n 'td',\r\n { columnIndex: inTableColumnIndex, rowIndex },\r\n domPropsSelector(name),\r\n );\r\n\r\n const cell = useResponsiveTable((global) => {\r\n const tableState = global.responsiveTableSlice[name];\r\n\r\n return tableState?.rows[rowIndex]?.cells[columnIndex];\r\n }, shallowEqual);\r\n\r\n const column = useResponsiveTable((global) => {\r\n const tableState = global.responsiveTableSlice[name];\r\n return tableState?.columns[columnIndex];\r\n }, shallowEqual);\r\n\r\n const row = useResponsiveTable((global) => {\r\n const tableState = global.responsiveTableSlice[name];\r\n return tableState?.rows[rowIndex];\r\n }, shallowEqual);\r\n\r\n const Renderer = React.useMemo(\r\n () => cell?.Renderer ?? column.Renderer ?? DefaultCellRenderer,\r\n [cell?.Renderer, column.Renderer],\r\n );\r\n\r\n if (!Renderer || !cell)\r\n return row.separator ? <div className=\"separator\"></div> : null;\r\n\r\n return (\r\n <Renderer\r\n {...(domProps as Omit<React.HTMLProps<HTMLTableCellElement>, 'ref'>)}\r\n cell={cell}\r\n column={column}\r\n row={row}\r\n onFocus={(ev) => {\r\n if (ev.target instanceof HTMLElement) {\r\n const cell = ev.target.closest<HTMLElement>('td,th');\r\n if (ev.target === cell) {\r\n const widget = cell?.querySelector<HTMLElement>(getFocusSelector());\r\n if (cell && widget) {\r\n widget.focus();\r\n cell.tabIndex = -1;\r\n }\r\n }\r\n }\r\n }}\r\n />\r\n );\r\n};\r\n\r\nexport const Cell = React.memo(NoMemoCell);\r\n","import uniqueId from 'lodash-es/uniqueId';\r\nimport React, { useRef } from 'react';\r\nimport { shallowEqual } from 'react-redux';\r\nimport { MdKeyboardArrowRight, MdKeyboardArrowDown } from '@meronex/icons/md/';\r\nimport { Box } from '@apia/theme';\r\nimport { IconButton } from '@apia/components';\r\nimport { getVariant } from '@apia/theme';\r\nimport { domPropsSelector } from './ResponsiveTable';\r\nimport { TResponsiveTableCell, TResponsiveTableColumn } from './types';\r\nimport { AdditionalColumnDefaultRenderer } from './renderers/AdditionalColumnDefaultRenderer';\r\nimport { SeparatorCell } from './SeparatorCell';\r\nimport { DefaultRowRenderer } from './renderers/DefaultRowRenderer';\r\nimport { useResponsiveTableContext } from './ResponsiveTableContext';\r\nimport {\r\n responsiveTableActions,\r\n responsiveTableStore,\r\n useResponsiveTable,\r\n} from './store';\r\nimport { useDomProps } from './store/selection/useDomProps';\r\nimport { StateCell } from './StateCell';\r\nimport { Cell } from './Cell';\r\nimport { getLabel, scrollParentIntoElement } from '@apia/util';\r\n\r\ninterface IRow {\r\n rowIndex: number;\r\n}\r\n\r\ntype TAdditionalCell = {\r\n cell: TResponsiveTableCell;\r\n column: TResponsiveTableColumn;\r\n columnIndex: number;\r\n};\r\n\r\nconst NoMemoRow = ({ rowIndex }: IRow) => {\r\n const { name } = useResponsiveTableContext();\r\n\r\n const { columns, hasNonAdditionalFilters, isScrolledIntoView } =\r\n useResponsiveTable((global) => {\r\n const tableState = global.responsiveTableSlice[name];\r\n return {\r\n columns: tableState?.columns ?? [],\r\n hasNonAdditionalFilters: tableState?.hasNonAdditionalFilters,\r\n isScrolledIntoView: tableState.scrollIntoViewRow === rowIndex,\r\n };\r\n }, shallowEqual);\r\n const row = useResponsiveTable(\r\n (global) => global.responsiveTableSlice[name].rows[rowIndex],\r\n shallowEqual,\r\n );\r\n const additionalCells: TAdditionalCell[] = useResponsiveTable(\r\n (global) => {\r\n const tableState = global.responsiveTableSlice[name];\r\n return tableState.columns\r\n .map((current, index) =>\r\n current.showAsAdditional\r\n ? {\r\n index,\r\n column: current,\r\n }\r\n : null,\r\n )\r\n .filter(\r\n (\r\n current,\r\n ): current is {\r\n index: number;\r\n column: TResponsiveTableColumn;\r\n } => !!current,\r\n )\r\n .map((current) => {\r\n return {\r\n cell: tableState.rows[rowIndex]?.cells[current.index],\r\n column: current.column,\r\n columnIndex: current.index,\r\n };\r\n });\r\n },\r\n (currentValue, newValue) => {\r\n return currentValue.reduce<boolean>(\r\n (accumulatedBoolean, currentCell, cellIndex) => {\r\n return (\r\n accumulatedBoolean && shallowEqual(currentCell, newValue[cellIndex])\r\n );\r\n },\r\n true,\r\n );\r\n },\r\n );\r\n const { isDragging, isExpanded, shouldForbidSelection } = useResponsiveTable(\r\n (global) => {\r\n const tableState = global.responsiveTableSlice[name];\r\n return {\r\n isExpanded: tableState.expandedRows.includes(rowIndex),\r\n isDragging: tableState.draggingRow === rowIndex,\r\n shouldForbidSelection: tableState.rows[rowIndex]?.forbidSelection,\r\n };\r\n },\r\n shallowEqual,\r\n );\r\n\r\n const domProps = useDomProps(\r\n 'tr',\r\n {\r\n isThisRowExpanded: isExpanded,\r\n rowIndex,\r\n },\r\n domPropsSelector(name),\r\n );\r\n\r\n const expandedRowDomProps = useDomProps(\r\n 'tr',\r\n {\r\n isTheExpandedRow: true,\r\n rowIndex,\r\n },\r\n domPropsSelector(name),\r\n );\r\n\r\n const handleExpandedState = React.useCallback(\r\n (ev: boolean | React.MouseEvent) => {\r\n const willBeExpanded = typeof ev === 'boolean' ? ev : !isExpanded;\r\n if (!willBeExpanded)\r\n responsiveTableStore.dispatch(\r\n responsiveTableActions.update({\r\n tableName: name,\r\n expandedRows: responsiveTableStore\r\n .getState()\r\n .responsiveTableSlice[\r\n name\r\n ].expandedRows.filter((current) => current !== rowIndex),\r\n }),\r\n );\r\n else\r\n responsiveTableStore.dispatch(\r\n responsiveTableActions.update({\r\n tableName: name,\r\n expandedRows: [\r\n ...responsiveTableStore.getState().responsiveTableSlice[name]\r\n .expandedRows,\r\n rowIndex,\r\n ],\r\n }),\r\n );\r\n },\r\n [isExpanded, name, rowIndex],\r\n );\r\n\r\n const statesCount = useResponsiveTable((globalState) => {\r\n const state = globalState.responsiveTableSlice[name];\r\n return Math.max(\r\n state?.reserveColumnsForStates || 0,\r\n state?.statesColumns?.length ?? 0,\r\n 0,\r\n );\r\n }, shallowEqual);\r\n\r\n const states = React.useMemo(\r\n () => (row.states ?? []).map((current) => ({ ...current, id: uniqueId() })),\r\n [row.states],\r\n );\r\n\r\n const { ref, ...additionalCellDomProps } = useDomProps(\r\n 'additionalTd',\r\n { rowIndex },\r\n domPropsSelector(name),\r\n );\r\n\r\n const Renderer = React.useMemo(\r\n () => row.renderer ?? DefaultRowRenderer,\r\n [row.renderer],\r\n );\r\n\r\n const hasScrolled = useRef(false);\r\n\r\n return (\r\n <>\r\n <Renderer\r\n {...domProps}\r\n row={row}\r\n rowIndex={rowIndex}\r\n className={`responsiveTable__row ${row.isHidden ? 'hidden' : ''} ${\r\n domProps['aria-selected'] ? 'selected' : ''\r\n } ${shouldForbidSelection ? 'non-selectable' : ''} ${states\r\n .map((current) => current.className)\r\n .join(' ')} ${row.className ?? ''} ${\r\n row.separator ? 'row__separator' : ''\r\n } ${isDragging ? 'draggingRow' : ''}`}\r\n onKeyDown={React.useCallback(\r\n (ev: React.KeyboardEvent) => {\r\n if (ev.key.toLowerCase() === 'arrowleft' && ev.ctrlKey) {\r\n ev.preventDefault();\r\n ev.stopPropagation();\r\n handleExpandedState(false);\r\n }\r\n if (ev.key.toLowerCase() === 'arrowright' && ev.ctrlKey) {\r\n ev.preventDefault();\r\n ev.stopPropagation();\r\n handleExpandedState(true);\r\n }\r\n },\r\n [handleExpandedState],\r\n )}\r\n {...{\r\n ref: (el: HTMLElement) => {\r\n if (el && isScrolledIntoView && !hasScrolled.current) {\r\n hasScrolled.current = true;\r\n scrollParentIntoElement(el);\r\n }\r\n },\r\n }}\r\n >\r\n {row.separator ? (\r\n <SeparatorCell\r\n colSpan={\r\n (additionalCells.length > 0 || hasNonAdditionalFilters ? 1 : 0) +\r\n statesCount +\r\n columns.filter((current) => !current.showAsAdditional).length\r\n }\r\n rowIndex={rowIndex}\r\n />\r\n ) : (\r\n <>\r\n {(additionalCells.length > 0 || hasNonAdditionalFilters) && (\r\n <td className=\"additionalInfo__cell\" {...additionalCellDomProps}>\r\n {additionalCells.length > 0 && (\r\n <IconButton\r\n size={'Lg'}\r\n {...getVariant('icon-outline')}\r\n icon={\r\n isExpanded ? MdKeyboardArrowDown : MdKeyboardArrowRight\r\n }\r\n aria-label={\r\n isExpanded\r\n ? getLabel('lblCollapseRow').text\r\n : getLabel('lblExpandRow').text\r\n }\r\n className=\"moreInformationButton\"\r\n onClick={handleExpandedState}\r\n />\r\n )}\r\n </td>\r\n )}\r\n {Array(statesCount)\r\n .fill('')\r\n .map((_, i) => {\r\n return (\r\n <StateCell\r\n key={states[i]?.id ?? i}\r\n index={i}\r\n state={states[i]}\r\n rowIndex={rowIndex}\r\n />\r\n );\r\n })}\r\n {columns\r\n .map((current, actualColumnIndex) => ({\r\n ...current,\r\n actualColumnIndex,\r\n }))\r\n .filter((current) => !current.showAsAdditional)\r\n .map((current, inTableColumnIndex) => {\r\n if (current.hidden) return null;\r\n return (\r\n <Cell\r\n key={current.name}\r\n columnIndex={current.actualColumnIndex}\r\n rowIndex={rowIndex}\r\n inTableColumnIndex={inTableColumnIndex}\r\n />\r\n );\r\n })}\r\n </>\r\n )}\r\n </Renderer>\r\n {isExpanded && (\r\n <tr className=\"expandedRow\" {...expandedRowDomProps}>\r\n <td\r\n colSpan={\r\n columns.length - additionalCells.length + states.length + 1\r\n }\r\n >\r\n <Box className=\"responsiveTable__additionalInfoContainer\">\r\n {additionalCells.map((current) => {\r\n const { Renderer: ColumnRenderer } = current.column;\r\n if (ColumnRenderer)\r\n return (\r\n <ColumnRenderer\r\n key={current.column.name}\r\n cell={current.cell}\r\n column={current.column}\r\n row={row}\r\n />\r\n );\r\n return (\r\n <AdditionalColumnDefaultRenderer\r\n key={current.column.name}\r\n cell={current.cell}\r\n column={current.column}\r\n row={row}\r\n />\r\n );\r\n })}\r\n </Box>\r\n </td>\r\n </tr>\r\n )}\r\n </>\r\n );\r\n};\r\n\r\nexport const Row = React.memo(NoMemoRow);\r\n","import { createContext } from 'react';\r\n\r\n/**\r\n * Este contexto es necesario para resolver el problema de que no se muestra\r\n * la etiqueta correcta cuando la tabla está cargando.\r\n */\r\nexport const TableLoadingContext = createContext<{ current: boolean }>({\r\n current: true,\r\n});\r\n","import { Box } from '@apia/theme';\r\nimport { useResponsiveTableContext } from '../ResponsiveTableContext';\r\nimport { useContext } from 'react';\r\nimport { TableLoadingContext } from '../chanchullos/LoadingContext';\r\n\r\nexport const NoRegistersRenderer = () => {\r\n const { labels } = useResponsiveTableContext();\r\n const { current } = useContext(TableLoadingContext);\r\n\r\n return (\r\n <Box className=\"no__registers\">{current ? labels.noRegisters : ''}</Box>\r\n );\r\n};\r\n","import React from 'react';\r\nimport { shallowEqual } from 'react-redux';\r\nimport { Box } from '@apia/theme';\r\nimport { getVariant } from '@apia/theme';\r\nimport { Header } from '../Header';\r\nimport { useResponsiveTableContext } from '../ResponsiveTableContext';\r\nimport { Row } from '../Row';\r\nimport { NoRegistersRenderer } from './NoRegistersRenderer';\r\nimport { useDomProps } from '../store/selection/useDomProps';\r\nimport { useResponsiveTable } from '../store';\r\n\r\nconst NoMemoTableRenderer = ({ variant }: { variant?: string }) => {\r\n const { name, label, labels } = useResponsiveTableContext();\r\n const domProps = useDomProps(\r\n 'table',\r\n {},\r\n (global) => global.responsiveTableSlice[name],\r\n );\r\n\r\n const rows = useResponsiveTable((global) => {\r\n const tableState = global.responsiveTableSlice[name];\r\n return tableState?.rows?.map((current) => current.id);\r\n }, shallowEqual);\r\n\r\n const columnsCount = useResponsiveTable(\r\n (global) =>\r\n (global.responsiveTableSlice[name]?.nonAdditionalColumnsCount ?? 0) +\r\n (global.responsiveTableSlice[name]?.hasNonAdditionalFilters ? 1 : 0) +\r\n (global.responsiveTableSlice[name]?.statesColumns?.length ?? 0) +\r\n (global.responsiveTableSlice[name]?.columns.find(\r\n (current) => current.showAsAdditional,\r\n )\r\n ? 1\r\n : 0),\r\n );\r\n\r\n const rowsCount = useResponsiveTable(\r\n (global) => global.responsiveTableSlice[name]?.rows.length || 0,\r\n );\r\n\r\n return (\r\n <Box\r\n {...domProps}\r\n as=\"table\"\r\n className=\"responsiveTable__table\"\r\n {...getVariant(variant || 'layout.common.tables.primary')}\r\n aria-label={label}\r\n >\r\n <Header />\r\n <tbody>\r\n {rowsCount > 0 ? (\r\n rows?.map((row, index) => {\r\n return (\r\n <Row key={row ?? `${row as string}-${index}`} rowIndex={index} />\r\n );\r\n })\r\n ) : labels.noRegisters ? (\r\n <tr>\r\n <td colSpan={columnsCount}>\r\n <NoRegistersRenderer />\r\n </td>\r\n </tr>\r\n ) : null}\r\n </tbody>\r\n </Box>\r\n );\r\n};\r\n\r\nexport const TableRenderer = React.memo(NoMemoTableRenderer);\r\n","import { Box } from '@apia/theme';\r\nimport { FunctionComponent } from 'react';\r\nimport {\r\n TResponsiveTableCell,\r\n TResponsiveTableColumn,\r\n TResponsiveTableRow,\r\n} from '../types';\r\n\r\nexport type TAccordionCellRendererProps<CellProps = Record<string, unknown>> = {\r\n cell: TResponsiveTableCell<CellProps>;\r\n column: TResponsiveTableColumn;\r\n columnIndex: number;\r\n row: TResponsiveTableRow;\r\n rowIndex: number;\r\n};\r\n\r\nexport type TAccordionCellRenderer<CellProps = Record<string, unknown>> =\r\n FunctionComponent<TAccordionCellRendererProps<CellProps>>;\r\n\r\nconst NoMemoAccordionCell: TAccordionCellRenderer = ({ cell, column }) => {\r\n return (\r\n <Box\r\n key={column.name}\r\n className={`responsiveTable__accordionElement__column ${\r\n cell.className ?? ''\r\n }`}\r\n >\r\n <Box as=\"strong\">{column.label ?? column.name}: </Box>\r\n <Box as=\"span\" sx={{ color: cell.color, background: cell.background }}>\r\n {cell?.children}\r\n </Box>\r\n </Box>\r\n );\r\n};\r\n\r\nexport const AccordionCell = NoMemoAccordionCell;\r\n","import React, { memo, useMemo } from 'react';\r\nimport { shallowEqual } from 'react-redux';\r\nimport { useResponsiveTableContext } from '../ResponsiveTableContext';\r\nimport { TResponsiveTableRow } from '../types';\r\nimport { AccordionCell } from './AccordionCell';\r\nimport {\r\n responsiveTableActions,\r\n responsiveTableStore,\r\n useResponsiveTable,\r\n} from '../store';\r\nimport { AccordionItem, IAccordionItemButton } from '@apia/components';\r\n\r\nexport interface IAccordionElement {\r\n row: TResponsiveTableRow;\r\n rowIndex: number;\r\n}\r\n\r\nconst NoMemoAccordionElement = ({ row, rowIndex }: IAccordionElement) => {\r\n const { name } = useResponsiveTableContext();\r\n\r\n const indexColumns = useResponsiveTable((global) => {\r\n const tableState = global.responsiveTableSlice[name];\r\n return tableState?.accordionIndexColumns;\r\n }, shallowEqual);\r\n const columns = useResponsiveTable((global) => {\r\n const tableState = global.responsiveTableSlice[name];\r\n return tableState?.columns;\r\n }, shallowEqual);\r\n\r\n const title = React.useMemo(() => {\r\n if (row.title) return row.title;\r\n if (Array.isArray(indexColumns))\r\n return indexColumns\r\n .map(\r\n (current) =>\r\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\r\n row.cells[current.index].title ||\r\n (row.cells[current.index].children as string),\r\n )\r\n .join(' | ');\r\n return row.cells[0].title ?? (row.cells[0].children as string);\r\n }, [indexColumns, row.cells, row.title]);\r\n const isSelected = useResponsiveTable((global) =>\r\n global.responsiveTableSlice[name].allowSelection !== false\r\n ? global.responsiveTableSlice[name].selectedRows.includes(rowIndex)\r\n : undefined,\r\n );\r\n const isFocused = useResponsiveTable(\r\n (global) => global.responsiveTableSlice[name].focusedRow === rowIndex,\r\n );\r\n const buttonProps = useMemo<IAccordionItemButton>(\r\n () => ({\r\n title,\r\n ariaLabel: title,\r\n label: title,\r\n checked: isSelected,\r\n onChange: (isChecked: boolean) => {\r\n const isMultiple =\r\n responsiveTableStore.getState().responsiveTableSlice[name].isMultiple;\r\n responsiveTableStore.dispatch(\r\n responsiveTableActions.update({\r\n tableName: name,\r\n selectedRows: isMultiple\r\n ? isChecked\r\n ? [\r\n ...responsiveTableStore.getState().responsiveTableSlice[\r\n name\r\n ].selectedRows,\r\n rowIndex,\r\n ]\r\n : responsiveTableStore\r\n .getState()\r\n .responsiveTableSlice[\r\n name\r\n ].selectedRows.filter((current) => current !== rowIndex)\r\n : [rowIndex],\r\n }),\r\n );\r\n },\r\n tabIndex: isFocused ? 0 : -1,\r\n rightButtons: row.accordionButtonProps?.rightButtons,\r\n onUserPressEnter: row.accordionButtonProps?.onUserPressEnter,\r\n domButtonProps: {\r\n buttonSx: {\r\n '&.accordion__item__button .accordion__item__button__label': {\r\n color: row.color,\r\n },\r\n },\r\n },\r\n }),\r\n [\r\n isFocused,\r\n isSelected,\r\n name,\r\n row.accordionButtonProps?.onUserPressEnter,\r\n row.accordionButtonProps?.rightButtons,\r\n row.color,\r\n rowIndex,\r\n title,\r\n ],\r\n );\r\n\r\n if (!Array.isArray(indexColumns) || !columns) return null;\r\n\r\n return (\r\n <AccordionItem id={row.id} buttonProps={buttonProps}>\r\n {columns.map((currentColumn, columnIndex) => {\r\n const Renderer =\r\n row.cells[columnIndex].AccordionRenderer ??\r\n currentColumn.AccordionRenderer ??\r\n AccordionCell;\r\n\r\n return currentColumn.hideFromAccordion ||\r\n currentColumn.showAsAdditional ? null : (\r\n <Renderer\r\n cell={row.cells[columnIndex]}\r\n column={currentColumn}\r\n columnIndex={columnIndex}\r\n key={currentColumn.name}\r\n row={row}\r\n rowIndex={rowIndex}\r\n />\r\n );\r\n })}\r\n\r\n {columns\r\n .filter((current) => !!current.showAsAdditional)\r\n .map((currentColumn, columnIndex) => {\r\n const Renderer =\r\n row.cells[columnIndex].AccordionRenderer ??\r\n currentColumn.AccordionRenderer ??\r\n AccordionCell;\r\n\r\n return currentColumn.hideFromAccordion ? null : (\r\n <Renderer\r\n cell={row.cells[columnIndex]}\r\n column={currentColumn}\r\n columnIndex={columnIndex}\r\n key={currentColumn.name}\r\n row={row}\r\n rowIndex={rowIndex}\r\n />\r\n );\r\n })}\r\n </AccordionItem>\r\n );\r\n};\r\n\r\nexport const AccordionElement = memo(NoMemoAccordionElement);\r\n","import React from 'react';\r\nimport { shallowEqual } from 'react-redux';\r\nimport { useResponsiveTableContext } from '../ResponsiveTableContext';\r\nimport { TResponsiveTableColumn } from '../types';\r\nimport { AccordionElement } from './AccordionElement';\r\nimport { NoRegistersRenderer } from './NoRegistersRenderer';\r\nimport {\r\n responsiveTableActions,\r\n useResponsiveTable,\r\n responsiveTableStore,\r\n} from '../store';\r\nimport { TResponsiveTableIndexColumns } from '../store/types';\r\nimport { Accordion } from '@apia/components';\r\n\r\nconst NoMemoAccordionRenderer = () => {\r\n const { name } = useResponsiveTableContext();\r\n\r\n const { columns, rows } = useResponsiveTable((global) => {\r\n const tableState = global.responsiveTableSlice[name];\r\n return {\r\n columns: tableState?.columns,\r\n rows: tableState?.rows,\r\n };\r\n }, shallowEqual);\r\n\r\n React.useEffect(() => {\r\n /**\r\n * Método para seleccionar qué columnas se utilizarán\r\n * como cabezal en cada fila.\r\n *\r\n * - Si existe al menos una columna marcada con showInAccordionTitle,\r\n * todas las columnas que estén marcadas con esta propiedad serán\r\n * mostradas como parte del título.\r\n *\r\n * - Si no existe ninguna, se busca cuál es la primera columna\r\n * que no tiene ninguna entrada vacía y se utiliza como título\r\n * del acordión.\r\n *\r\n * - Si ninguna columna no tiene ninguna fila vacía, entonces se\r\n * utiliza la primera columna.\r\n */\r\n\r\n if (columns && rows) {\r\n /**\r\n * Buscar columnas marcadas\r\n */\r\n const markedAsTitleColumns: TResponsiveTableIndexColumns = [];\r\n columns.forEach((column, index) => {\r\n if (column.showInAccordionTitle)\r\n markedAsTitleColumns.push({ column, index });\r\n });\r\n if (markedAsTitleColumns.length > 0) {\r\n responsiveTableStore.dispatch(\r\n responsiveTableActions.update({\r\n tableName: name,\r\n accordionIndexColumns: markedAsTitleColumns,\r\n }),\r\n );\r\n } else {\r\n /**\r\n * No se encontró ninguna columna marcada, se busca la primera sin\r\n * entradas vacías.\r\n */\r\n const columnsLength = columns.length;\r\n let indexColumn: TResponsiveTableColumn | null = null;\r\n let currentIndex = 0;\r\n\r\n while (!indexColumn && currentIndex < columns.length) {\r\n let isAnyEmptyRow = false;\r\n // eslint-disable-next-line no-restricted-syntax\r\n for (const row of rows) {\r\n if (!row.cells[currentIndex].children) {\r\n isAnyEmptyRow = true;\r\n break;\r\n }\r\n }\r\n if (!isAnyEmptyRow && columns[currentIndex]) {\r\n indexColumn = columns[currentIndex];\r\n } else {\r\n currentIndex += 1;\r\n if (currentIndex === columnsLength) break;\r\n }\r\n }\r\n if (!indexColumn) {\r\n /**\r\n * No hay ninguna sin ninguna entrada vacía,\r\n * se usa la primera columna.\r\n */\r\n [indexColumn] = columns;\r\n currentIndex = 0;\r\n }\r\n responsiveTableStore.dispatch(\r\n responsiveTableActions.update({\r\n tableName: name,\r\n accordionIndexColumns: [\r\n { column: indexColumn, index: currentIndex },\r\n ],\r\n }),\r\n );\r\n }\r\n }\r\n }, [columns, name, rows]);\r\n\r\n return (\r\n <Accordion>\r\n {!rows || (rows.length === 0 && <NoRegistersRenderer />)}\r\n {rows?.map((current, rowIndex) => (\r\n <AccordionElement row={current} rowIndex={rowIndex} key={current.id} />\r\n ))}\r\n </Accordion>\r\n );\r\n};\r\n\r\nexport const AccordionRenderer = React.memo(NoMemoAccordionRenderer);\r\n","import React from 'react';\r\nimport { Box, BoxProps, useBreakpointIndex } from '@apia/theme';\r\nimport { getVariant } from '@apia/theme';\r\nimport { KeyHandler } from './KeyHandler';\r\nimport { TableRenderer } from './renderers/TableRenderer';\r\nimport { AccordionRenderer } from './renderers/AccordionRenderer';\r\nimport { TUseDomProps } from './store/selection/types';\r\nimport { responsiveTableStore } from './store';\r\nimport { useResponsiveTableContext } from './ResponsiveTableContext';\r\n\r\ntype TResponsiveTable = BoxProps;\r\n\r\n/**\r\n * Este objeto determina qué partes de la tabla deben\r\n * ser 'debugueadas'. Sobre todo para conocer el\r\n * impacto en el performance de la misma.\r\n */\r\nexport const rtDebug = {\r\n cell: false,\r\n context: false,\r\n filterCell: false,\r\n filters: {\r\n additional: false,\r\n grouped: false,\r\n inner: false,\r\n responsive: false,\r\n sort: false,\r\n },\r\n header: false,\r\n headerCell: false,\r\n index: false,\r\n keyHandler: false,\r\n row: false,\r\n tableRenderer: false,\r\n};\r\n\r\nexport const domPropsSelector: (name: string) => TUseDomProps =\r\n (name: string) =>\r\n (global: ReturnType<typeof responsiveTableStore.getState>) =>\r\n global.responsiveTableSlice[name];\r\n\r\n/**\r\n * El ResponsiveTable renderiza una tabla en base a la\r\n * información provista por ResponsiveTableContext, quien\r\n * debe ser ancestro de este elemento. La finalidad última\r\n * de este componente es lograr responsividad y performance.\r\n *\r\n * Las props pasadas sarán colocadas directamente en el\r\n * wrapper de la tabla. Con esta estructura se busca que\r\n * a la hora de dar estilos a este componente, se pueda pasar\r\n * un variant al Wrapper, sin afectar los estilos por defecto\r\n * de la tabla ni del acordión en modo responsivo. Esto no limita\r\n * en ningún concepto la posibilidad de cambiar el variant a\r\n * la tabla o al acordión, ya que eso puede hacerse desde un\r\n * variante personalizado con la estructura mostrada en el\r\n * ejemplo.\r\n *\r\n * Además, de esta manera es posible aplicar estilo a algunos\r\n * componentes nada más, sin la necesidad de cambiar el layout\r\n * que usa la tabla por defecto. Por ejemplo, con esta estructura\r\n * se puede utilizar un variant personalizado para definir\r\n * el ancho de las columnas de la tabla.\r\n *\r\n * @example\r\n * 'customVariant': {\r\n * '.responsiveTable__accordion': {\r\n * variant: 'layout.tables.otherAccordion'\r\n * }\r\n * '.responsiveTable__table': {\r\n * variant: 'layout.tables.otherTable'\r\n * }\r\n * }\r\n */\r\nconst NoMemoResponsiveTable = React.forwardRef<\r\n HTMLDivElement,\r\n TResponsiveTable\r\n>(({ className, variant, ...props }, ref) => {\r\n const breakpoint = useBreakpointIndex({ defaultIndex: 3 });\r\n const { currentBreakPoint, forceAccordion } = useResponsiveTableContext();\r\n\r\n const actualBreakpoint = currentBreakPoint ?? breakpoint;\r\n\r\n return (\r\n <Box\r\n {...props}\r\n {...getVariant('layout.common.tables.responsive')}\r\n className={`responsiveTable__wrapper ${className ?? ''}`}\r\n ref={ref}\r\n >\r\n {actualBreakpoint >= 3 && !forceAccordion ? (\r\n <KeyHandler>\r\n <TableRenderer variant={variant} />\r\n </KeyHandler>\r\n ) : (\r\n <AccordionRenderer />\r\n )}\r\n </Box>\r\n );\r\n});\r\n\r\nNoMemoResponsiveTable.displayName = 'ResponsiveTable';\r\n\r\nexport const ResponsiveTable = React.memo(NoMemoResponsiveTable);\r\n","import React from 'react';\r\nimport { shallowEqual } from 'react-redux';\r\nimport { Box, Label, Select } from '@apia/theme';\r\nimport { useResponsiveTableContext } from '../ResponsiveTableContext';\r\nimport { TResponsiveTableSortValue } from '../types';\r\nimport { useResponsiveTable } from '../store';\r\n\r\nconst NoMemoSort = ({ tableName }: { tableName?: string }) => {\r\n const { name, onSortChange } = useResponsiveTableContext(tableName);\r\n\r\n const columns = useResponsiveTable((global) => {\r\n return global.responsiveTableSlice[name]?.columns;\r\n }, shallowEqual);\r\n\r\n return (\r\n <>\r\n {columns?.map((column, columnIndex) => {\r\n return column.showAsAdditional ||\r\n column.allowSorting === false ? null : (\r\n <Label key={column.name}>\r\n <Box as=\"span\">{column.label ?? column.name}</Box>\r\n <Box>\r\n <Select\r\n value={\r\n column.currentSorting === null ? '' : column.currentSorting\r\n }\r\n onChange={(ev) => {\r\n if (onSortChange)\r\n onSortChange({\r\n columnIndex,\r\n column,\r\n name: column.name,\r\n sortValue:\r\n ev.target.value === ''\r\n ? null\r\n : (ev.target.value as TResponsiveTableSortValue),\r\n });\r\n }}\r\n >\r\n <option value=\"\" />\r\n <option value=\"A\">{window.ORDER_ASC_LABEL}</option>\r\n <option value=\"D\">{window.ORDER_DESC_LABEL}</option>\r\n </Select>\r\n </Box>\r\n </Label>\r\n );\r\n })}\r\n </>\r\n );\r\n};\r\n\r\nexport const Sort = React.memo(NoMemoSort);\r\n","/* eslint-disable @typescript-eslint/prefer-nullish-coalescing */\r\nimport dayjs from 'dayjs';\r\nimport React from 'react';\r\nimport { Box, Label } from '@apia/theme';\r\nimport customParseFormat from 'dayjs/plugin/customParseFormat';\r\nimport {\r\n TApiaFilter,\r\n TApiaFilterValue,\r\n formatMessage,\r\n getDateFormat,\r\n} from '@apia/util';\r\nimport { ApiaFilter, RequiredMark } from '@apia/components';\r\nimport { TResponsiveTableContextProps } from '../types';\r\nimport { useResponsiveTableContext } from '../ResponsiveTableContext';\r\nimport { RangeFilter } from './RangeFilter';\r\nimport { responsiveTableStore } from '../store';\r\n\r\ndayjs.extend(customParseFormat);\r\n\r\nconst dateFormat = getDateFormat();\r\n\r\nfunction controlDatesOrder(first: string, last: string) {\r\n if (!first || !last) return true;\r\n\r\n if (dayjs(last, dateFormat).isBefore(dayjs(first, dateFormat))) {\r\n return window.MSG_FEC_FIN_MAY_FEC_INI;\r\n }\r\n return true;\r\n}\r\n\r\nconst NoMemoInnerRender = React.forwardRef(\r\n (\r\n {\r\n filters,\r\n tableName,\r\n }: {\r\n filters: TResponsiveTableContextProps['filters'];\r\n isResponsive?: boolean;\r\n tableName?: string;\r\n },\r\n ref,\r\n ) => {\r\n const {\r\n onFilterBlur,\r\n onFilterChange,\r\n onFilterPressEnter,\r\n name,\r\n FiltersRenderer,\r\n } = useResponsiveTableContext(tableName);\r\n const [lastEmittedValue, setLastEmittedValue] =\r\n React.useState<TApiaFilterValue | null>(null);\r\n const [lastEmittedValueByPartner, setLastEmittedValueByPartner] =\r\n React.useState<TApiaFilterValue | null>(null);\r\n\r\n return (\r\n <Box ref={ref} className=\"filtersRender\">\r\n {filters?.map((filter, key) => {\r\n if (filter.hide) return null;\r\n\r\n const Renderer = FiltersRenderer?.(String(filter.id));\r\n\r\n const isDate = filter.type === 'D' || filter.type === 'date';\r\n const filterToId = filter.filterToId ?? `${filter.id}i`;\r\n const filterTo: TApiaFilter = {\r\n ...filter,\r\n hide: filter.filterToId === undefined,\r\n id: filterToId,\r\n currentValue: filter.filterToValue ?? '',\r\n required: false,\r\n };\r\n\r\n const column = responsiveTableStore\r\n .getState()\r\n .responsiveTableSlice[\r\n name\r\n ].columns.find((current) => current.name === filter.column);\r\n const filterTitle =\r\n filter.title ||\r\n column?.label ||\r\n column?.title ||\r\n column?.name ||\r\n 'noFilterNorColumnTitle';\r\n\r\n return (\r\n <React.Fragment key={filter.id ?? filter.column ?? key}>\r\n <Box\r\n className={\r\n filter.type === 'D' || filter.type === 'date'\r\n ? 'twoColumns'\r\n : ''\r\n }\r\n key={filter.id ?? filter.column ?? key}\r\n >\r\n <Label\r\n title={\r\n isDate ? window.LBL_DATE_FILTER_FROM_TOOLTIP : filterTitle\r\n }\r\n >\r\n {window.SHOW_REQUIRED_POSITION !== '0' && (\r\n <RequiredMark isRequired={filter.required} />\r\n )}\r\n {!filter?.avoidLabel && (\r\n <Box as=\"span\">\r\n {isDate && !filter.hideToFilter\r\n ? formatMessage(window.LBL_DATE_FILTER_FROM_TXT, {\r\n TOK1: filterTitle,\r\n })\r\n : filterTitle}\r\n </Box>\r\n )}\r\n {Renderer ? (\r\n <Renderer filter={filter} />\r\n ) : filter.isRange ? (\r\n <RangeFilter filter={filter} />\r\n ) : (\r\n <ApiaFilter\r\n filter={filter}\r\n onChange={(currentValue) => {\r\n const result = controlDatesOrder(\r\n currentValue as string,\r\n lastEmittedValueByPartner as string,\r\n );\r\n if (result === true) {\r\n setLastEmittedValue(currentValue);\r\n if (onFilterChange)\r\n void onFilterChange({ ...filter, currentValue });\r\n }\r\n return result;\r\n }}\r\n onBlur={(currentValue) => {\r\n if (onFilterBlur)\r\n void onFilterBlur({ ...filter, currentValue });\r\n }}\r\n onPressEnter={(currentValue) => {\r\n if (onFilterPressEnter)\r\n void onFilterPressEnter({\r\n ...filter,\r\n currentValue,\r\n });\r\n }}\r\n />\r\n )}\r\n {window.SHOW_REQUIRED_POSITION === '0' && (\r\n <RequiredMark isRequired={filter.required} />\r\n )}\r\n </Label>\r\n </Box>\r\n {isDate && !filter.hideToFilter && (\r\n <Box\r\n className={\r\n filter.type === 'D' || filter.type === 'date'\r\n ? 'twoColumns'\r\n : ''\r\n }\r\n >\r\n <Label title={window.LBL_DATE_FILTER_TO_TOOLTIP}>\r\n {!filter?.avoidLabel && (\r\n <Box as=\"span\">\r\n {formatMessage(window.LBL_DATE_FILTER_TO_TXT, {\r\n TOK1: filterTitle,\r\n })}\r\n </Box>\r\n )}\r\n <ApiaFilter\r\n filter={filterTo}\r\n onChange={(currentValue) => {\r\n const result = controlDatesOrder(\r\n lastEmittedValue as string,\r\n currentValue as string,\r\n );\r\n if (result === true) {\r\n setLastEmittedValueByPartner(currentValue);\r\n if (onFilterChange)\r\n void onFilterChange({\r\n ...filter,\r\n filterToId,\r\n filterToValue: currentValue,\r\n });\r\n }\r\n return result;\r\n }}\r\n onBlur={(currentValue) => {\r\n if (onFilterBlur)\r\n void onFilterBlur({\r\n ...filter,\r\n filterToId,\r\n filterToValue: currentValue,\r\n });\r\n }}\r\n onPressEnter={(currentValue) => {\r\n if (onFilterPressEnter)\r\n void onFilterPressEnter({\r\n ...filter,\r\n filterToId,\r\n filterToValue: currentValue,\r\n });\r\n }}\r\n />\r\n </Label>\r\n </Box>\r\n )}\r\n </React.Fragment>\r\n );\r\n })}\r\n </Box>\r\n );\r\n },\r\n);\r\n\r\nNoMemoInnerRender.displayName = 'FiltersInnerRender';\r\n\r\nexport const InnerRender = React.memo(NoMemoInnerRender);\r\n","import React from 'react';\r\nimport { shallowEqual } from 'react-redux';\r\nimport { useResponsiveTableContext } from '../ResponsiveTableContext';\r\nimport { InnerRender } from './InnerRender';\r\nimport { useResponsiveTable } from '../store';\r\n\r\nconst NoMemoAdditional = ({ tableName }: { tableName?: string }) => {\r\n const { name } = useResponsiveTableContext(tableName);\r\n\r\n const additionalFilters = useResponsiveTable((global) => {\r\n const state = global.responsiveTableSlice[name];\r\n return state?.filters.filter(\r\n (current) =>\r\n !current.group &&\r\n ((!current.isMeta &&\r\n !state?.columns.find(\r\n (search) => search.name === current.column && !current.asAdditional,\r\n )) ||\r\n state?.columns.find(\r\n (search) =>\r\n search.name === current.column && search.showAsAdditional,\r\n ) ||\r\n current.asAdditional),\r\n );\r\n }, shallowEqual);\r\n\r\n return <InnerRender tableName={tableName} filters={additionalFilters} />;\r\n};\r\n\r\nexport const Additional = React.memo(NoMemoAdditional);\r\n","import React from 'react';\r\nimport { shallowEqual } from 'react-redux';\r\nimport { useResponsiveTableContext } from '../ResponsiveTableContext';\r\nimport { InnerRender } from './InnerRender';\r\nimport { useResponsiveTable } from '../store';\r\n\r\nconst NoMemoResponsive = ({ tableName }: { tableName?: string }) => {\r\n const { name } = useResponsiveTableContext(tableName);\r\n\r\n const nonAdditionalFilters = useResponsiveTable((global) => {\r\n const state = global.responsiveTableSlice[name];\r\n return state?.filters.filter(\r\n (current) =>\r\n !current.isMeta &&\r\n state?.columns.find((search) => search.name === current.column),\r\n );\r\n }, shallowEqual);\r\n\r\n return (\r\n <InnerRender\r\n tableName={tableName}\r\n isResponsive\r\n filters={nonAdditionalFilters}\r\n />\r\n );\r\n};\r\n\r\nexport const Responsive = React.memo(NoMemoResponsive);\r\n","import { TMap, TId, EventEmitter, persistentStorage } from '@apia/util';\r\nimport React from 'react';\r\n\r\nexport type TElementSelector = string | (() => HTMLElement);\r\n\r\ntype TMaximizationComponent = {\r\n isMaximized: boolean;\r\n selector?: TElementSelector;\r\n};\r\n\r\ntype TMaximizationPersist = TMap<boolean>;\r\n\r\nconst maximizationPersist = {\r\n getState(id: TId) {\r\n const current = (persistentStorage.maximizationPersist ??\r\n {}) as TMaximizationPersist;\r\n return current[id];\r\n },\r\n setState(id: TId, isMaximized: boolean) {\r\n // if (!conf<boolean>('lists.persistMaximized', true, 'boolean')) return;\r\n const current = (persistentStorage.maximizationPersist ??\r\n {}) as TMaximizationPersist;\r\n current[id] = isMaximized;\r\n persistentStorage.maximizationPersist = current;\r\n },\r\n};\r\nclass Maximization extends EventEmitter<{\r\n toggle: { id: TId; isMaximized?: boolean };\r\n}> {\r\n components: TMap<TMaximizationComponent> = {};\r\n\r\n checkComponentExists(id: TId) {\r\n return this.components[id] === undefined;\r\n }\r\n\r\n emit<K extends 'toggle'>(\r\n eventName: K,\r\n params: {\r\n toggle: {\r\n id: TId;\r\n isMaximized?: boolean;\r\n };\r\n }[K],\r\n ): void {\r\n if (eventName === 'toggle') {\r\n const { id, isMaximized } = params;\r\n this.checkComponentExists(id);\r\n if (!this.components[id]) return;\r\n\r\n this.components[id].isMaximized =\r\n isMaximized ?? !this.components[id].isMaximized;\r\n\r\n maximizationPersist.setState(id, this.components[id].isMaximized);\r\n\r\n this.isMaximized(id);\r\n super.emit(eventName, {\r\n id,\r\n isMaximized: this.components[id].isMaximized,\r\n });\r\n }\r\n }\r\n\r\n isMaximized(id: TId) {\r\n this.checkComponentExists(id);\r\n const selector = this.components[id]?.selector;\r\n if (selector === undefined) return undefined;\r\n\r\n const content =\r\n typeof selector === 'string'\r\n ? (document.querySelector(selector) as HTMLElement)\r\n : selector?.();\r\n if (content)\r\n content.classList.toggle('maximized', this.components[id].isMaximized);\r\n return this.components[id]?.isMaximized;\r\n }\r\n\r\n registerMaximizableComponent(\r\n id: TId,\r\n selector?: TElementSelector,\r\n // isDefaultMaximized?: boolean,\r\n ) {\r\n this.components[id] = {\r\n selector: selector ?? this.components[id]?.selector,\r\n isMaximized: false,\r\n // isDefaultMaximized ??\r\n // (conf<boolean>('lists.persistMaximized', true, 'boolean')\r\n // ? maximizationPersist.getState(id)\r\n // : undefined) ??\r\n // isConfDefaultMaximized,\r\n };\r\n }\r\n\r\n toggleIsMaximized(id: TId, isMaximized?: boolean) {\r\n this.emit('toggle', { id, isMaximized });\r\n }\r\n}\r\nexport const maximizationController = new Maximization();\r\n\r\n/**\r\n *\r\n * @returns\r\n * **isMaximized**: boolean, indica si el listado está maximizado o no.\r\n *\r\n * **toggleIsMaximized**: (isMaximized?: boolean) => void, alterna el estado\r\n * entre true y false si isMaximized===undefined, o setea el estado pasado en\r\n * isMaximized en caso contrario.\r\n */\r\nexport default function useIsMaximized(id: TId) {\r\n React.useEffect(() => {\r\n maximizationController.registerMaximizableComponent(id);\r\n }, [id]);\r\n\r\n const [isInnerMaximized, innerSetIsMaximized] = React.useState(\r\n maximizationController.isMaximized(id) ?? false,\r\n );\r\n\r\n React.useEffect(() => {\r\n const handleToggle = ({\r\n id: eventId,\r\n isMaximized: eventIsMaximized,\r\n }: {\r\n id: TId;\r\n isMaximized?: boolean;\r\n }) => {\r\n if (id === eventId)\r\n innerSetIsMaximized((current) => eventIsMaximized ?? !current);\r\n };\r\n const unsuscribe1 = maximizationController.on('toggle', handleToggle);\r\n innerSetIsMaximized(\r\n maximizationController.components[id].isMaximized ?? false,\r\n );\r\n\r\n return () => {\r\n unsuscribe1();\r\n };\r\n }, [id]);\r\n\r\n return {\r\n isMaximized: isInnerMaximized,\r\n toggleIsMaximized: React.useCallback(\r\n (isMaximized?: boolean) => {\r\n maximizationController.emit('toggle', { id, isMaximized });\r\n },\r\n [id],\r\n ),\r\n };\r\n}\r\n","import React, { useState, useEffect, useCallback } from 'react';\r\nimport { Pagination as PG, IPagination } from '@apia/components';\r\nimport { useResponsiveTableContext } from '../ResponsiveTableContext';\r\nimport useIsMaximized from './useIsMaximized';\r\nimport { usePrevious } from '@apia/util';\r\n\r\nconst NoMemoPagination = ({\r\n listId: outerListId,\r\n onPageChange,\r\n ...props\r\n}: Omit<IPagination, 'isMaximized' | 'onMaximize'> & { listId: string }) => {\r\n const listId = useResponsiveTableContext().name;\r\n const { isMaximized, toggleIsMaximized } = useIsMaximized(\r\n outerListId ?? listId,\r\n );\r\n\r\n const numberCurrentPage = Number(props.currentPage);\r\n\r\n const [internCurrentPage, setCurrentPage] = useState<number>(\r\n numberCurrentPage ?? 1,\r\n );\r\n\r\n const [lastEmittedPage, setLastEmittedPage] = useState<number>(\r\n numberCurrentPage ?? 1,\r\n );\r\n\r\n const previousPage = usePrevious(props.currentPage);\r\n if (previousPage.current !== props.currentPage) {\r\n setLastEmittedPage(props.currentPage as any);\r\n }\r\n\r\n const setCurrentAndDispatch = useCallback(\r\n (page: number) => {\r\n if (page !== lastEmittedPage) {\r\n setCurrentPage(page);\r\n onPageChange?.(page);\r\n setLastEmittedPage(page);\r\n }\r\n },\r\n [lastEmittedPage, onPageChange],\r\n );\r\n\r\n useEffect(() => {\r\n setCurrentPage(numberCurrentPage);\r\n }, [numberCurrentPage]);\r\n\r\n return (\r\n <PG\r\n {...{ ...props, isMaximized, onMaximize: toggleIsMaximized }}\r\n currentPage={internCurrentPage}\r\n onPageChange={setCurrentAndDispatch}\r\n />\r\n );\r\n};\r\n\r\nexport const Pagination = React.memo(NoMemoPagination);\r\n","import React from 'react';\r\nimport { shallowEqual } from 'react-redux';\r\nimport { useResponsiveTableContext } from '../ResponsiveTableContext';\r\nimport { InnerRender } from './InnerRender';\r\nimport { useResponsiveTable } from '../store';\r\n\r\nconst NoMemoGrouped = ({\r\n group,\r\n tableName,\r\n}: {\r\n group: string;\r\n tableName?: string;\r\n}) => {\r\n const { name } = useResponsiveTableContext(tableName);\r\n\r\n const groupedFilters = useResponsiveTable((global) => {\r\n const state = global.responsiveTableSlice[name];\r\n return state?.filters.filter((current) => current.group === group);\r\n }, shallowEqual);\r\n\r\n return <InnerRender tableName={tableName} filters={groupedFilters} />;\r\n};\r\n\r\nexport const Grouped = React.memo(NoMemoGrouped);\r\n","import { getIndex } from '@apia/util';\r\nimport { getDomProps, getDomStoreProps } from '../store/selection/useDomProps';\r\nimport { TResponsiveTableState } from '../store/types';\r\nimport { IRequiredDomProps } from '../store/selection/types';\r\n\r\nfunction setAriaAttributes(\r\n element: HTMLElement,\r\n attribute: string,\r\n value: any,\r\n) {\r\n element.setAttribute(attribute, value as string);\r\n}\r\n\r\nfunction getRowDomProps(rowIndex: number, state: TResponsiveTableState) {\r\n const elementType: keyof IRequiredDomProps = getIndex(\r\n ['headerTr', 'filtersTr', 'tr'],\r\n [\r\n rowIndex == -2 || (!state.hasNonAdditionalFilters && rowIndex == -1),\r\n rowIndex == -1,\r\n true,\r\n ],\r\n );\r\n\r\n return getDomProps(\r\n getDomStoreProps(\r\n elementType,\r\n {\r\n rowIndex,\r\n },\r\n () => state,\r\n ),\r\n elementType,\r\n { rowIndex },\r\n );\r\n}\r\n\r\nfunction applyRowSelectionAttributes(\r\n row: HTMLElement,\r\n state: TResponsiveTableState,\r\n) {\r\n if (!(row instanceof HTMLElement)) return;\r\n\r\n const rowIndex = Number.parseInt(row.dataset.rowindex || 'a', 10);\r\n const props = getRowDomProps(rowIndex, state);\r\n\r\n Object.entries(props).forEach(([key, value]) => {\r\n let match: RegExpMatchArray | null;\r\n match = key.match(/aria-(\\w+)/);\r\n if (match) {\r\n setAriaAttributes(row, key, value);\r\n } else if ((match = key.match(/data-(\\w+)/))) {\r\n row.dataset[match[1]] = value as string;\r\n }\r\n });\r\n}\r\n\r\nexport function applySelectionAttributes(\r\n table: HTMLElement,\r\n _previousState: TResponsiveTableState,\r\n state: TResponsiveTableState,\r\n) {\r\n const previousSelectedRows = table.querySelectorAll<HTMLElement>(\r\n '[aria-selected=\"true\"]',\r\n );\r\n previousSelectedRows.forEach((c) => applyRowSelectionAttributes(c, state));\r\n\r\n if (state.selectedRows.length) {\r\n const newSelectedRows = table.querySelectorAll<HTMLElement>(\r\n state.selectedRows\r\n .map((index) => `tr[data-rowindex=\"${index}\"]`)\r\n .join(','),\r\n );\r\n newSelectedRows.forEach((c) => applyRowSelectionAttributes(c, state));\r\n }\r\n}\r\n","import { Controller2 } from './Controller2';\r\nimport { applySelectionAttributes } from './applySelectionAttributes';\r\n\r\nexport function handleMouseDownEvent(this: Controller2, ev: MouseEvent) {\r\n const target = ev.target;\r\n\r\n if (target instanceof HTMLElement) {\r\n const cell = target.closest('th,td');\r\n const row = target.closest('tr');\r\n const table = target.closest('table');\r\n\r\n if (cell && row && table) {\r\n const state = this.getState();\r\n\r\n const rowIndex = Number.parseInt(row.dataset.rowindex || 'a', 10);\r\n const colIndex = Number.parseInt(cell.ariaColIndex || 'a', 10);\r\n if (!isNaN(rowIndex) && !isNaN(colIndex)) {\r\n if ((!ev.ctrlKey && !ev.shiftKey) || state.isMultiple === false) {\r\n state.selectedRows = [rowIndex];\r\n } else if (ev.ctrlKey) {\r\n if (state.selectedRows.includes(rowIndex)) {\r\n state.selectedRows = state.selectedRows.filter(\r\n (c) => c !== rowIndex,\r\n );\r\n } else {\r\n state.selectedRows = [...state.selectedRows, rowIndex];\r\n }\r\n } else if (ev.shiftKey) {\r\n const previousFocused = this.getState().focusedRow;\r\n state.selectedRows = [...state.selectedRows];\r\n\r\n const min = Math.min(previousFocused, rowIndex);\r\n const max = Math.max(previousFocused, rowIndex);\r\n\r\n for (let i = min; i <= max; i++) {\r\n state.selectedRows.push(i);\r\n }\r\n }\r\n\r\n state.focusedColumn = colIndex;\r\n state.focusedRow = rowIndex;\r\n state.isFocused = true;\r\n\r\n applySelectionAttributes(table, this.getState(), state);\r\n this.setState(state);\r\n\r\n this.events.emit('onRowClick', [\r\n { row: state.rows[state.focusedRow], index: state.focusedRow },\r\n state.focusedRow,\r\n ]);\r\n } else {\r\n console.warn('Cannot parse rowIndex or colIndex');\r\n }\r\n } else {\r\n console.warn('Cannot find cell, row or table');\r\n }\r\n }\r\n}\r\n","import { getFocusSelector } from '@apia/util';\r\nimport { TResponsiveTableState } from '../store/types';\r\n\r\nexport function applyFocusAttributes(\r\n table: HTMLElement,\r\n _previousState: TResponsiveTableState,\r\n state: TResponsiveTableState,\r\n focus = state.isFocused,\r\n target?: HTMLElement,\r\n) {\r\n focus = focus && table.contains(document.activeElement);\r\n\r\n table.querySelectorAll<HTMLElement>(getFocusSelector()).forEach((e) => {\r\n e.tabIndex = -1;\r\n });\r\n\r\n if (state.focusedColumn === 0) {\r\n const focusedRow = table.querySelector<HTMLElement>(\r\n `tr[data-rowindex=\"${state.focusedRow}\"]`,\r\n );\r\n if (focusedRow) {\r\n focusedRow.tabIndex = 0;\r\n window.requestAnimationFrame(() => {\r\n if (focus) {\r\n focusedRow.focus();\r\n }\r\n });\r\n }\r\n } else {\r\n const focusedCell = table.querySelector(\r\n `tr[data-rowindex=\"${state.focusedRow}\"] td[aria-colindex=\"${state.focusedColumn}\"], tr[data-rowindex=\"${state.focusedRow}\"] th[aria-colindex=\"${state.focusedColumn}\"]`,\r\n );\r\n\r\n if (target) {\r\n target.focus();\r\n }\r\n\r\n if (focusedCell instanceof HTMLElement) {\r\n const widgets: HTMLElement[] = [];\r\n if (state.isEditionMode) {\r\n widgets.push(\r\n ...focusedCell.querySelectorAll<HTMLElement>(getFocusSelector()),\r\n );\r\n } else {\r\n const widget =\r\n focusedCell.querySelector<HTMLElement>(getFocusSelector());\r\n if (widget) {\r\n widgets.push(widget);\r\n }\r\n }\r\n if (widgets.length) {\r\n widgets.forEach((widget, i) => {\r\n widget.tabIndex = 0;\r\n if (i === 0)\r\n window.requestAnimationFrame(() => {\r\n if (!target && focus) {\r\n widget.focus();\r\n }\r\n });\r\n });\r\n } else {\r\n focusedCell.tabIndex = 0;\r\n window.requestAnimationFrame(() => {\r\n if (!target && focus) {\r\n focusedCell.focus();\r\n }\r\n });\r\n }\r\n }\r\n }\r\n}\r\n","import { addBoundary } from '@apia/util';\r\nimport { Controller2 } from './Controller2';\r\nimport { applySelectionAttributes } from './applySelectionAttributes';\r\nimport { applyFocusAttributes } from './applyFocusAttributes';\r\n\r\nexport function handleKeyDownEvent(this: Controller2, ev: KeyboardEvent) {\r\n const target = ev.target;\r\n const state = this.getState();\r\n\r\n if (target instanceof HTMLElement) {\r\n const table = target.closest('table');\r\n const row = target.closest('tr');\r\n const cell = target.closest('th,td');\r\n if (table && row) {\r\n if (state.isEditionMode) {\r\n if (ev.code === 'Escape' || ev.code === 'Enter') {\r\n state.isEditionMode = false;\r\n this.setState(state);\r\n applyFocusAttributes(table, this.getState(), state);\r\n }\r\n } else {\r\n const rowIndex = Number.parseInt(row.dataset.rowindex || 'a', 10);\r\n const colIndex = Number.parseInt(cell?.ariaColIndex || '0', 10);\r\n if (!isNaN(rowIndex) && !isNaN(colIndex)) {\r\n if (\r\n [\r\n 'ArrowDown',\r\n 'ArrowUp',\r\n 'ArrowLeft',\r\n 'ArrowRight',\r\n 'End',\r\n 'Enter',\r\n 'Home',\r\n 'PageUp',\r\n 'PageDown',\r\n ].includes(ev.code) ||\r\n (ev.code === 'Space' && ev.ctrlKey)\r\n ) {\r\n ev.preventDefault();\r\n let mustFocus = false;\r\n\r\n const maxColumnIndex =\r\n state.columns.length +\r\n Math.max(\r\n state.reserveColumnsForStates ?? 0,\r\n state.statesColumns?.length ?? 0,\r\n ) +\r\n (state.hasNonAdditionalFilters ? 1 : 0);\r\n\r\n switch (ev.code) {\r\n case 'Space':\r\n if (state.selectedRows.includes(rowIndex)) {\r\n state.selectedRows = state.selectedRows.filter(\r\n (c) => c !== rowIndex,\r\n );\r\n } else {\r\n state.selectedRows = [...state.selectedRows, rowIndex];\r\n }\r\n break;\r\n case 'ArrowDown':\r\n state.focusedRow = addBoundary(\r\n state.focusedRow + 1,\r\n state.hasNonAdditionalFilters ? -2 : -1,\r\n state.rows.length - 1,\r\n );\r\n mustFocus = true;\r\n if (ev.ctrlKey) {\r\n //\r\n } else if (ev.shiftKey && state.isMultiple !== false) {\r\n state.selectedRows = [\r\n ...state.selectedRows,\r\n state.focusedRow,\r\n ];\r\n } else {\r\n state.selectedRows = [state.focusedRow];\r\n }\r\n break;\r\n case 'ArrowUp':\r\n state.focusedRow = addBoundary(\r\n state.focusedRow - 1,\r\n state.hasNonAdditionalFilters ? -2 : -1,\r\n state.rows.length - 1,\r\n );\r\n mustFocus = true;\r\n if (ev.ctrlKey) {\r\n //\r\n } else if (ev.shiftKey && state.isMultiple !== false) {\r\n state.selectedRows = [\r\n ...state.selectedRows,\r\n state.focusedRow,\r\n ];\r\n } else {\r\n state.selectedRows = [state.focusedRow];\r\n }\r\n break;\r\n case 'ArrowLeft':\r\n state.focusedColumn = addBoundary(\r\n state.focusedColumn - 1,\r\n 0,\r\n maxColumnIndex,\r\n );\r\n mustFocus = true;\r\n break;\r\n case 'ArrowRight':\r\n state.focusedColumn = addBoundary(\r\n state.focusedColumn + 1,\r\n 0,\r\n maxColumnIndex,\r\n );\r\n mustFocus = true;\r\n break;\r\n case 'Home':\r\n mustFocus = true;\r\n /**\r\n \r\n * If focus is on a row, moves focus to the first row. If focus is in the first row, focus does not move.\r\n \r\n * If focus is on a cell, moves focus to the first cell in the row. If focus is in the first cell of the row, focus does not move.\r\n \r\n */\r\n if (state.focusedColumn === 0) {\r\n state.focusedRow = state.hasNonAdditionalFilters ? -2 : -1;\r\n if (ev.ctrlKey) {\r\n //\r\n } else if (ev.shiftKey && state.isMultiple !== false) {\r\n const max = Math.max(\r\n state.focusedRow,\r\n this.getState().focusedRow,\r\n );\r\n const min = Math.min(\r\n state.focusedRow,\r\n this.getState().focusedRow,\r\n );\r\n for (let i = min; i <= max; i++) {\r\n state.selectedRows.push(i);\r\n }\r\n } else {\r\n state.selectedRows = [state.focusedRow];\r\n }\r\n } else {\r\n state.focusedColumn = 1;\r\n }\r\n break;\r\n case 'End':\r\n mustFocus = true;\r\n if (state.focusedColumn === 0) {\r\n state.focusedRow = state.rows.length - 1;\r\n if (ev.ctrlKey) {\r\n //\r\n } else if (ev.shiftKey && state.isMultiple !== false) {\r\n const max = Math.max(\r\n state.focusedRow,\r\n this.getState().focusedRow,\r\n );\r\n const min = Math.min(\r\n state.focusedRow,\r\n this.getState().focusedRow,\r\n );\r\n for (let i = min; i <= max; i++) {\r\n state.selectedRows.push(i);\r\n }\r\n } else {\r\n state.selectedRows = [state.focusedRow];\r\n }\r\n } else {\r\n state.focusedColumn = maxColumnIndex;\r\n }\r\n break;\r\n case 'PageUp':\r\n mustFocus = true;\r\n state.focusedRow = addBoundary(\r\n state.focusedRow - 6,\r\n state.hasNonAdditionalFilters ? -2 : -1,\r\n state.rows.length - 1,\r\n );\r\n if (ev.ctrlKey) {\r\n //\r\n } else if (ev.shiftKey && state.isMultiple !== false) {\r\n const previousFocused = this.getState().focusedRow;\r\n state.selectedRows = [...state.selectedRows];\r\n\r\n const min = Math.min(previousFocused, state.focusedRow);\r\n const max = Math.max(previousFocused, state.focusedRow);\r\n\r\n for (let i = min; i <= max; i++) {\r\n state.selectedRows.push(i);\r\n }\r\n } else {\r\n state.selectedRows = [state.focusedRow];\r\n }\r\n break;\r\n case 'PageDown':\r\n mustFocus = true;\r\n state.focusedRow = addBoundary(\r\n state.focusedRow + 6,\r\n state.hasNonAdditionalFilters ? -2 : -1,\r\n state.rows.length - 1,\r\n );\r\n if (ev.ctrlKey) {\r\n //\r\n } else if (ev.shiftKey && state.isMultiple !== false) {\r\n const previousFocused = this.getState().focusedRow;\r\n state.selectedRows = [...state.selectedRows];\r\n\r\n const min = Math.min(previousFocused, state.focusedRow);\r\n const max = Math.max(previousFocused, state.focusedRow);\r\n\r\n for (let i = min; i <= max; i++) {\r\n state.selectedRows.push(i);\r\n }\r\n } else {\r\n state.selectedRows = [state.focusedRow];\r\n }\r\n break;\r\n case 'Enter': {\r\n mustFocus = true;\r\n state.isEditionMode = true;\r\n this.setState(state);\r\n\r\n if (state.focusedRow >= 0) {\r\n this.events.emit('onSelectRows', [\r\n this.getSelection().map((index) => ({\r\n index,\r\n row: this.getState().rows[index],\r\n })),\r\n state.focusedRow as number,\r\n ]);\r\n }\r\n return;\r\n }\r\n }\r\n\r\n state.isFocused = true;\r\n\r\n applySelectionAttributes(table, this.getState(), state);\r\n applyFocusAttributes(table, this.getState(), state, mustFocus);\r\n this.setState(state);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n}\r\n","import { Box } from '@apia/theme';\r\nimport { TKeyHandlerProps } from '../store/selection/types';\r\nimport { handleMouseDownEvent } from './handleMouseDownEvent';\r\nimport { handleKeyDownEvent } from './handleKeyDownEvent';\r\nimport {\r\n responsiveTableActions,\r\n responsiveTableStore,\r\n useResponsiveTable,\r\n} from '../store';\r\nimport { TResponsiveTableState } from '../store/types';\r\nimport { shallowEqual } from '@apia/store';\r\nimport { FC, useRef } from 'react';\r\nimport { applyFocusAttributes } from './applyFocusAttributes';\r\nimport { EventEmitter, noNaN } from '@apia/util';\r\n\r\n/**\r\n * Este controlador maneja la selección en una forma más directa que el anterior, manipulando los elementos del DOM directamente, y persistiendo en el store estas propiedades para garantizar la consistencia en los renderizados posteriores.\r\n *\r\n * 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\r\n */\r\nexport class Controller2 {\r\n constructor(public readonly tableName: string) {\r\n this.handleClickEvent = handleMouseDownEvent.bind(this);\r\n this.handleKeyDownEvent = handleKeyDownEvent.bind(this);\r\n }\r\n\r\n events = new EventEmitter<{\r\n onRowClick: Parameters<NonNullable<TKeyHandlerProps['onRowClick']>>;\r\n onSelectRows: Parameters<NonNullable<TKeyHandlerProps['onSelectRows']>>;\r\n onChangeSelection: Parameters<\r\n NonNullable<TKeyHandlerProps['onChangeSelection']>\r\n >;\r\n }>();\r\n\r\n #unsubscribe = () => {};\r\n setResponsiveTableContextEvents(\r\n evs: Pick<\r\n TKeyHandlerProps,\r\n 'onRowClick' | 'onSelectRows' | 'onChangeSelection'\r\n >,\r\n ) {\r\n this.#unsubscribe();\r\n const u1 = this.events.on('onChangeSelection', (a) =>\r\n evs.onChangeSelection?.(...a),\r\n );\r\n const u2 = this.events.on('onRowClick', (a) => evs.onRowClick?.(...a));\r\n const u3 = this.events.on('onSelectRows', (a) => evs.onSelectRows?.(...a));\r\n\r\n this.#unsubscribe = () => {\r\n u1();\r\n u2();\r\n u3();\r\n };\r\n }\r\n\r\n private unsubscribe = () => {};\r\n private el: HTMLElement | null = null;\r\n setRef = (el: HTMLElement) => {\r\n this.unsubscribe();\r\n this.el = el;\r\n if (el) {\r\n el.addEventListener('keydown', this.handleKeyDownEvent);\r\n el.addEventListener('mousedown', this.handleClickEvent);\r\n el.addEventListener('dblclick', this.handleDoubleClickEvent);\r\n\r\n this.unsubscribe = () => {\r\n el.removeEventListener('keydown', this.handleKeyDownEvent);\r\n el.removeEventListener('mousedown', this.handleClickEvent);\r\n el.removeEventListener('dblclick', this.handleDoubleClickEvent);\r\n };\r\n }\r\n };\r\n\r\n handleClickEvent: (ev: MouseEvent) => void;\r\n handleKeyDownEvent: (ev: KeyboardEvent) => void;\r\n handleDoubleClickEvent = (ev: MouseEvent) => {\r\n const target = ev.target;\r\n\r\n if (target instanceof HTMLElement) {\r\n const row = target.closest('tr');\r\n const table = target.closest('table');\r\n\r\n const selectedRows = this.getSelection().reduce<\r\n { index: number; row: any }[]\r\n >((acc, index) => {\r\n if (index >= 0) {\r\n acc.push({\r\n index,\r\n row: this.getState().rows[index],\r\n });\r\n }\r\n return acc;\r\n }, []);\r\n\r\n const rowIndex = noNaN(row?.dataset.rowindex || 'a', -1);\r\n\r\n if (row && table && selectedRows.length > 0 && rowIndex >= 0) {\r\n this.events.emit('onSelectRows', [\r\n selectedRows,\r\n this.getState().focusedRow as number,\r\n ]);\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * Returns a copy of the current state object\r\n */\r\n getState() {\r\n return {\r\n ...responsiveTableStore.getState().responsiveTableSlice[this.tableName],\r\n };\r\n }\r\n getSelection() {\r\n const selectedRows = new Set(this.getState().selectedRows);\r\n return [...selectedRows.values()];\r\n }\r\n setState(state: Partial<TResponsiveTableState>) {\r\n if (\r\n state.selectedRows &&\r\n !shallowEqual(state.selectedRows, this.getState().selectedRows)\r\n ) {\r\n this.events.emit('onChangeSelection', [\r\n state.selectedRows.map((index) => ({\r\n index,\r\n row: this.getState().rows[index],\r\n })),\r\n ]);\r\n }\r\n\r\n if (\r\n state.scrollIntoViewRow !== undefined &&\r\n state.scrollIntoViewRow !== this.getState().scrollIntoViewRow\r\n ) {\r\n const row = this.el?.querySelector<HTMLElement>(\r\n `tr[data-rowindex=\"${state.scrollIntoViewRow}\"]`,\r\n );\r\n if (row) {\r\n row.scrollIntoView({ block: 'nearest', inline: 'nearest' });\r\n }\r\n }\r\n\r\n responsiveTableStore.dispatch(\r\n responsiveTableActions.controller2UpdateSelectionState({\r\n tableName: this.tableName,\r\n ...state,\r\n }),\r\n );\r\n }\r\n\r\n updateSelectionState() {\r\n window.requestAnimationFrame(() => {\r\n if (this.el) {\r\n const table = this.el.querySelector<HTMLElement>('table');\r\n if (table) {\r\n applyFocusAttributes(table, this.getState(), this.getState());\r\n }\r\n }\r\n });\r\n }\r\n}\r\n\r\nconst Controller2Component = ({\r\n controller,\r\n ...props\r\n}: TKeyHandlerProps & { controller: Controller2 }) => {\r\n controller.setResponsiveTableContextEvents({\r\n onChangeSelection: props.onChangeSelection,\r\n onSelectRows: props.onSelectRows,\r\n onRowClick: props.onRowClick,\r\n });\r\n\r\n const previousColumns = useRef<any[]>([]);\r\n const previousRows = useRef<any[]>([]);\r\n const box = useRef<HTMLElement | null>(null);\r\n\r\n useResponsiveTable((state) => {\r\n if (\r\n !Object.is(\r\n state.responsiveTableSlice[controller.tableName]?.columns,\r\n previousColumns.current,\r\n )\r\n ) {\r\n previousColumns.current =\r\n state.responsiveTableSlice[controller.tableName]?.columns;\r\n controller.updateSelectionState();\r\n }\r\n if (\r\n !Object.is(\r\n state.responsiveTableSlice[controller.tableName]?.rows,\r\n previousRows.current,\r\n )\r\n ) {\r\n previousRows.current =\r\n state.responsiveTableSlice[controller.tableName]?.rows;\r\n controller.updateSelectionState();\r\n }\r\n });\r\n\r\n return (\r\n <Box\r\n {...props}\r\n ref={(el) => {\r\n controller.setRef(el);\r\n box.current = el;\r\n }}\r\n />\r\n );\r\n};\r\n\r\nexport function makeController2(\r\n tableName: string,\r\n): [Controller2, FC<TKeyHandlerProps>] {\r\n const controller = new Controller2(tableName);\r\n\r\n return [\r\n controller,\r\n (props: TKeyHandlerProps) => {\r\n return <Controller2Component {...props} controller={controller} />;\r\n },\r\n ];\r\n}\r\n","import { ReactNode } from 'react';\r\nimport {\r\n ResponsiveTableReactContext,\r\n useResponsiveTableContext,\r\n} from './ResponsiveTableContext';\r\n\r\nexport const TableContextReproducer = ({\r\n children,\r\n tableName,\r\n}: {\r\n children: ReactNode;\r\n tableName: string;\r\n}) => {\r\n const context = useResponsiveTableContext(tableName);\r\n\r\n return (\r\n <ResponsiveTableReactContext.Provider value={context}>\r\n {children}\r\n </ResponsiveTableReactContext.Provider>\r\n );\r\n};\r\n","import React from 'react';\r\nimport { Link } from '@apia/theme';\r\nimport { downloadUrl } from '@apia/util';\r\nimport { Icon } from '@apia/icons';\r\nimport {\r\n TResponsiveTableCellRenderer,\r\n TResponsiveTableCellRendererProps,\r\n} from '../types';\r\n\r\nexport type TDocNameCellRendererProps = {\r\n docName: string;\r\n docUrl: string;\r\n};\r\n\r\nexport type TDocNameCellRenderer =\r\n TResponsiveTableCellRendererProps<TDocNameCellRendererProps>;\r\n\r\nconst NoMemoDocNameCellRenderer: TResponsiveTableCellRenderer<TDocNameCellRendererProps> =\r\n React.forwardRef<HTMLTableCellElement, TDocNameCellRenderer>(\r\n (\r\n {\r\n cell: { children, Renderer, rendererProps, AccordionRenderer, ...cell },\r\n column,\r\n row,\r\n ...props\r\n },\r\n currentRef,\r\n ) => (\r\n <td\r\n ref={currentRef as React.RefObject<HTMLTableCellElement>}\r\n {...props}\r\n {...cell}\r\n >\r\n <Link\r\n className=\"cell__download__document\"\r\n title={rendererProps?.docName}\r\n href={rendererProps?.docUrl}\r\n onClick={(ev) => {\r\n ev.preventDefault();\r\n if (rendererProps?.docUrl) void downloadUrl(rendererProps?.docUrl);\r\n }}\r\n >\r\n <Icon title=\"\" name=\"Download\" />\r\n {rendererProps?.docName}\r\n </Link>\r\n </td>\r\n ),\r\n );\r\n\r\nNoMemoDocNameCellRenderer.displayName = 'DocNameCellRenderer';\r\n\r\nexport const DocNameCellRenderer = NoMemoDocNameCellRenderer;\r\n","import React from 'react';\r\nimport { Box, Link } from '@apia/theme';\r\nimport { downloadUrl } from '@apia/util';\r\nimport { Icon } from '@apia/icons';\r\nimport {\r\n TAccordionCellRenderer,\r\n TAccordionCellRendererProps,\r\n} from './AccordionCell';\r\n\r\nexport type TDocNameCellRendererProps = {\r\n docName: string;\r\n docUrl: string;\r\n};\r\n\r\nexport type TDocNameCellRenderer =\r\n TAccordionCellRendererProps<TDocNameCellRendererProps>;\r\n\r\nconst NoMemoAccordionDocNameCellRenderer: TAccordionCellRenderer<TDocNameCellRendererProps> =\r\n React.forwardRef<HTMLElement, TDocNameCellRenderer>(\r\n (\r\n {\r\n cell: { children, Renderer, rendererProps, AccordionRenderer, ...cell },\r\n column,\r\n },\r\n currentRef,\r\n ) => (\r\n <Box ref={currentRef as React.RefObject<HTMLElement>} {...cell}>\r\n <Box as=\"strong\">{column.label ?? column.name}: </Box>\r\n <Link\r\n className=\"cell__download__document\"\r\n title={rendererProps?.docName}\r\n href={rendererProps?.docUrl}\r\n onClick={(ev) => {\r\n ev.preventDefault();\r\n if (rendererProps?.docUrl) void downloadUrl(rendererProps?.docUrl);\r\n }}\r\n >\r\n <Icon title=\"\" name=\"Download\" />\r\n {rendererProps?.docName}\r\n </Link>\r\n </Box>\r\n ),\r\n );\r\n\r\nNoMemoAccordionDocNameCellRenderer.displayName = 'AccordionDocNameCellRenderer';\r\n\r\nexport const AccordionDocNameCellRenderer = NoMemoAccordionDocNameCellRenderer;\r\n","import React from 'react';\r\nimport { Box } from '@apia/theme';\r\nimport { TResponsiveTableCellRendererProps } from '../types';\r\nimport { TAccordionCellRenderer } from './AccordionCell';\r\n\r\nconst NoMemoAccordionHTMLCellRenderer: TAccordionCellRenderer<{\r\n html: string;\r\n}> = React.forwardRef<\r\n HTMLSpanElement,\r\n TResponsiveTableCellRendererProps<{ html: string }>\r\n>(\r\n (\r\n {\r\n cell: { children, Renderer, rendererProps, AccordionRenderer, ...cell },\r\n column,\r\n row,\r\n ...props\r\n },\r\n currentRef,\r\n ) => (\r\n <Box>\r\n {column.label.trim() !== '' && <Box as=\"strong\">{column.label}: </Box>}\r\n <Box\r\n ref={currentRef as React.RefObject<HTMLTableCellElement>}\r\n {...props}\r\n {...cell}\r\n className=\"accordion__cell__renderer\"\r\n dangerouslySetInnerHTML={{\r\n __html: String(rendererProps?.html ?? children ?? '').replaceAll(\r\n /<TOK(\\d+)/g,\r\n '<TOK$1',\r\n ),\r\n }}\r\n as=\"span\"\r\n />\r\n </Box>\r\n ),\r\n);\r\n\r\nNoMemoAccordionHTMLCellRenderer.displayName = 'AccordionHTMLCellRenderer';\r\n\r\nexport const AccordionHTMLCellRenderer = NoMemoAccordionHTMLCellRenderer;\r\n","import React from 'react';\r\nimport {\r\n TResponsiveTableCellRenderer,\r\n TResponsiveTableCellRendererProps,\r\n} from '../types';\r\n\r\nconst NoMemoHTMLCellRenderer: TResponsiveTableCellRenderer<{ html: string }> =\r\n React.forwardRef<\r\n HTMLTableCellElement,\r\n TResponsiveTableCellRendererProps<{ html: string }>\r\n >(\r\n (\r\n {\r\n cell: { children, Renderer, rendererProps, AccordionRenderer, ...cell },\r\n column,\r\n row,\r\n ...props\r\n },\r\n currentRef,\r\n ) => (\r\n <td\r\n ref={currentRef as React.RefObject<HTMLTableCellElement>}\r\n {...props}\r\n {...cell}\r\n dangerouslySetInnerHTML={{\r\n __html: String(rendererProps?.html ?? children ?? '').replaceAll(\r\n /<TOK(\\d+)/g,\r\n '<TOK$1',\r\n ),\r\n }}\r\n />\r\n ),\r\n );\r\n\r\nNoMemoHTMLCellRenderer.displayName = 'HTMLCellRenderer';\r\n\r\nexport const HTMLCellRenderer = NoMemoHTMLCellRenderer;\r\n","import { Box, Spinner } from '@apia/theme';\r\n\r\nexport const IsLoadingRenderer = () => {\r\n return (\r\n <Box className=\"responsiveTable__isLoading\">\r\n <Spinner />\r\n </Box>\r\n );\r\n};\r\n","import { forwardRef, useCallback, useState } from 'react';\r\nimport { Box } from '@apia/theme';\r\nimport { IconButton } from '@apia/components';\r\nimport { arrayOrArray } from '@apia/util';\r\nimport {\r\n TResponsiveTableRow,\r\n TResponsiveTableCellRenderer,\r\n TResponsiveTableCellRendererProps,\r\n} from '../types';\r\n\r\nexport function makeAccordionAsyncRenderer(\r\n additionalInfoGetter: (row: TResponsiveTableRow) => Promise<\r\n {\r\n label?: string;\r\n name: string;\r\n }[]\r\n >,\r\n) {\r\n const InnerRender: TResponsiveTableCellRenderer = forwardRef<\r\n HTMLElement,\r\n TResponsiveTableCellRendererProps\r\n >(({ row }, ref) => {\r\n const [moreInfo, setMoreInfo] = useState<\r\n | {\r\n label?: string;\r\n name: string;\r\n }[]\r\n | null\r\n >(null);\r\n const loadMore = useCallback(async () => {\r\n const result = await additionalInfoGetter(row);\r\n setMoreInfo(result);\r\n }, [row]);\r\n\r\n return (\r\n <>\r\n {moreInfo ? (\r\n <>\r\n <IconButton icon=\"Minus\" onClick={() => setMoreInfo(null)} />\r\n {arrayOrArray(moreInfo).map(\r\n (dataCell: { label?: string; name: string }) => {\r\n return (\r\n <Box key={dataCell.name} ref={ref} as=\"div\">\r\n <Box as=\"strong\">{dataCell.name}:</Box> {dataCell.label}\r\n </Box>\r\n );\r\n },\r\n )}\r\n </>\r\n ) : (\r\n <IconButton icon=\"Plus\" onClick={() => void loadMore()} />\r\n )}\r\n </>\r\n );\r\n });\r\n\r\n InnerRender.displayName = 'MakeAccordionAsyncRenderer';\r\n\r\n return InnerRender;\r\n}\r\n","import uniqueId from 'lodash-es/uniqueId';\r\nimport { forwardRef, useState } from 'react';\r\nimport { Box, Spinner } from '@apia/theme';\r\nimport { arrayOrArray, useMount } from '@apia/util';\r\nimport {\r\n TResponsiveTableRow,\r\n TResponsiveTableCellRenderer,\r\n TResponsiveTableCellRendererProps,\r\n} from '../types';\r\n\r\nexport function makeAsyncRenderer(\r\n additionalInfoGetter: (row: TResponsiveTableRow) => Promise<\r\n {\r\n label?: string;\r\n name: string;\r\n newline?: boolean;\r\n }[]\r\n >,\r\n) {\r\n const InnerRender: TResponsiveTableCellRenderer = forwardRef<\r\n HTMLElement,\r\n TResponsiveTableCellRendererProps\r\n >(({ row }, ref) => {\r\n const [moreInfo, setMoreInfo] = useState<\r\n | {\r\n label?: string;\r\n name: string;\r\n newline?: boolean;\r\n content?: string;\r\n }[]\r\n | null\r\n >(null);\r\n useMount(() => {\r\n void (async () => {\r\n const result = await additionalInfoGetter(row);\r\n setMoreInfo(result);\r\n })();\r\n });\r\n\r\n return (\r\n <>\r\n {moreInfo ? (\r\n arrayOrArray(moreInfo).map((dataCell) => {\r\n return (\r\n <Box\r\n key={`${dataCell.name}-${uniqueId()}`}\r\n ref={ref}\r\n className={`responsiveTable__additionalInfoItem ${\r\n dataCell.newline ? 'separator' : ''\r\n }`}\r\n >\r\n {dataCell.newline ? (\r\n <>\r\n <Box sx={{ height: '20px' }} as=\"strong\">\r\n {dataCell.name}:\r\n </Box>{' '}\r\n {dataCell.label ?? dataCell?.content}\r\n </>\r\n ) : (\r\n <>\r\n <Box as=\"strong\">{dataCell.name}:</Box>{' '}\r\n {dataCell.label ?? dataCell?.content}\r\n </>\r\n )}\r\n </Box>\r\n );\r\n })\r\n ) : (\r\n <Spinner size={15} />\r\n )}\r\n </>\r\n );\r\n });\r\n\r\n InnerRender.displayName = 'MakeAsyncRenderer';\r\n\r\n return InnerRender;\r\n}\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport React, { memo, useMemo } from 'react';\r\nimport { Box } from '@apia/theme';\r\nimport { TResponsiveTableCellRendererProps } from '../types';\r\n\r\nconst NoMemoNoEllipsisCellRenderer = React.forwardRef<\r\n HTMLTableCellElement,\r\n TResponsiveTableCellRendererProps\r\n>(\r\n (\r\n {\r\n cell: { Renderer, rendererProps, AccordionRenderer, ariaLabel, ...cell },\r\n column,\r\n row,\r\n ...props\r\n },\r\n currentRef,\r\n ) => (\r\n <Box\r\n as={'td' as any}\r\n sx={useMemo(\r\n () => ({\r\n '&.colored': {\r\n background: cell.background,\r\n color: cell.color,\r\n fontWeight: 'bold',\r\n },\r\n }),\r\n [cell.background, cell.color],\r\n )}\r\n ref={currentRef as React.RefObject<HTMLTableCellElement>}\r\n {...props}\r\n {...cell}\r\n aria-label={ariaLabel as string}\r\n >\r\n {props.children ?? cell.children}\r\n </Box>\r\n ),\r\n);\r\nNoMemoNoEllipsisCellRenderer.displayName = 'DefaultCellRenderer';\r\nexport const NoEllipsisCellRenderer = memo(NoMemoNoEllipsisCellRenderer);\r\n","import { FaSquare } from '@meronex/icons/fa';\r\nimport React from 'react';\r\nimport {\r\n TResponsiveTableCellRenderer,\r\n TResponsiveTableCellRendererProps,\r\n} from '../types';\r\n\r\nexport function getPriorityHandler(priority: string | undefined) {\r\n let prio;\r\n if (priority?.includes('priority0')) prio = 'priorityNone';\r\n if (priority?.includes('priority1')) prio = 'priorityLow';\r\n if (priority?.includes('priority2')) prio = 'priorityNormal';\r\n if (priority?.includes('priority3')) prio = 'priorityHigh';\r\n if (priority?.includes('priority4')) prio = 'priorityUrgent';\r\n return prio;\r\n}\r\nconst NoMemoPriorityRenderer: TResponsiveTableCellRenderer<{ src: string }> =\r\n React.forwardRef<\r\n HTMLTableCellElement,\r\n TResponsiveTableCellRendererProps<{ src: string }>\r\n >(\r\n (\r\n {\r\n cell: { children, Renderer, rendererProps, AccordionRenderer, ...cell },\r\n column,\r\n row,\r\n ...props\r\n },\r\n currentRef,\r\n ) => {\r\n const taskPriorityColor = getPriorityHandler(rendererProps?.src);\r\n return (\r\n <td\r\n {...props}\r\n {...cell}\r\n ref={currentRef}\r\n className=\"priority\"\r\n sx={{\r\n color: taskPriorityColor,\r\n }}\r\n >\r\n <FaSquare />\r\n </td>\r\n );\r\n },\r\n );\r\nNoMemoPriorityRenderer.displayName = 'PriorityRenderer';\r\nexport const PriorityRenderer = NoMemoPriorityRenderer;\r\n","import { FaSquare } from '@meronex/icons/fa';\r\nimport React from 'react';\r\nimport { Box } from '@apia/theme';\r\nimport {\r\n TAccordionCellRenderer,\r\n TAccordionCellRendererProps,\r\n} from './AccordionCell';\r\nimport { getPriorityHandler } from './PriorityRenderer';\r\n\r\nconst NoMemoPriorityAccordionRenderer: TAccordionCellRenderer =\r\n React.forwardRef<HTMLTableCellElement, TAccordionCellRendererProps>(\r\n ({ cell, column }, currentRef) => {\r\n const taskPriorityColor = getPriorityHandler(\r\n cell.rendererProps?.src as string,\r\n );\r\n const title = column.label ?? column.name;\r\n return (\r\n <Box ref={currentRef} className=\"priority_container\">\r\n {title && <Box as=\"strong\">{column.label ?? column.name}: </Box>}\r\n <Box\r\n as=\"span\"\r\n className=\"priority\"\r\n sx={{\r\n color: taskPriorityColor,\r\n }}\r\n >\r\n <FaSquare />\r\n </Box>\r\n </Box>\r\n );\r\n },\r\n );\r\n\r\nNoMemoPriorityAccordionRenderer.displayName = 'PriorityAccordionRenderer';\r\n\r\nexport const PriorityAccordionRenderer = NoMemoPriorityAccordionRenderer;\r\n","import dayjs from 'dayjs';\r\nimport React from 'react';\r\nimport { TDateFormat, getDateFormat } from '@apia/util';\r\nimport {\r\n TResponsiveTableCellRenderer,\r\n TResponsiveTableCellRendererProps,\r\n} from '../types';\r\n\r\nexport function getStatusRendererClassName(\r\n cellValue: string,\r\n columnName: string,\r\n) {\r\n if (cellValue === undefined) return '';\r\n\r\n const cellValueDate = cellValue.split(' ')[0];\r\n const cellValueHour = cellValue.split(' ')[1] ?? '00:00:00';\r\n\r\n const dateFormat: TDateFormat = getDateFormat();\r\n const currentDate = dayjs();\r\n const currentHour = Number(dayjs().format('HHmm'));\r\n const queriedDate = dayjs(cellValueDate, dateFormat);\r\n const queriedHour = Number(dayjs(cellValueHour, dateFormat));\r\n let statusClassName = '';\r\n\r\n if (currentDate >= queriedDate) {\r\n statusClassName = columnName;\r\n }\r\n if (!queriedHour) return statusClassName;\r\n\r\n if (currentDate <= queriedDate && currentHour < queriedHour) {\r\n statusClassName = columnName;\r\n }\r\n return statusClassName;\r\n}\r\n\r\nconst NoMemoStatusRenderer: TResponsiveTableCellRenderer<{ src: string }> =\r\n React.forwardRef<\r\n HTMLTableCellElement,\r\n TResponsiveTableCellRendererProps<{ src: string }>\r\n >(\r\n (\r\n {\r\n cell: { children, Renderer, rendererProps, AccordionRenderer, ...cell },\r\n column,\r\n row,\r\n ...props\r\n },\r\n currentRef,\r\n ) => {\r\n const taskStatusClassName = getStatusRendererClassName(\r\n children as string,\r\n column.name,\r\n );\r\n\r\n return (\r\n <td\r\n {...props}\r\n {...cell}\r\n ref={currentRef}\r\n className={taskStatusClassName}\r\n >\r\n {children}\r\n </td>\r\n );\r\n },\r\n );\r\n\r\nNoMemoStatusRenderer.displayName = 'StatusRenderer';\r\n\r\nexport const StatusRenderer = NoMemoStatusRenderer;\r\n","import React from 'react';\r\nimport { Box } from '@apia/theme';\r\nimport {\r\n TAccordionCellRenderer,\r\n TAccordionCellRendererProps,\r\n} from './AccordionCell';\r\nimport { getStatusRendererClassName } from './StatusRenderer';\r\n\r\nconst NoMemoStatusAccordionRenderer: TAccordionCellRenderer = React.forwardRef<\r\n HTMLTableCellElement,\r\n TAccordionCellRendererProps\r\n>(({ cell, column }, currentRef) => {\r\n const taskStatusClassName = getStatusRendererClassName(\r\n cell.children as string,\r\n column.name,\r\n );\r\n\r\n return (\r\n <Box ref={currentRef}>\r\n <Box as=\"strong\">{column.label ?? column.name}: </Box>\r\n <Box as=\"span\" className={taskStatusClassName}>\r\n {cell.children}\r\n </Box>\r\n </Box>\r\n );\r\n});\r\n\r\nNoMemoStatusAccordionRenderer.displayName = 'StatusAccordionRenderer';\r\n\r\nexport const StatusAccordionRenderer = NoMemoStatusAccordionRenderer;\r\n"],"names":["getInitialState","selectionGetInitialState","useUpdateEffect","unit","shallowEqual","cell","__publicField","PG","useMount"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/types.ts","../src/store/selection/getInitialState.ts","../src/store/selection/setNewFocused.ts","../src/store/selection/handleKey.ts","../src/store/selection/getReduxActions.ts","../src/controller2/getController2ReduxActions.ts","../src/store/index.ts","../src/ResponsiveTableContext.tsx","../src/store/selection/makeKeyHandler.tsx","../src/KeyHandler.tsx","../src/store/selection/useDomProps.ts","../src/HeaderCell.tsx","../src/renderers/RowStatesRenderer.tsx","../src/StateCell.tsx","../src/filters/RangeFilter.tsx","../src/FilterCell.tsx","../src/Header.tsx","../src/renderers/AdditionalColumnDefaultRenderer.tsx","../src/SeparatorCell.tsx","../src/renderers/DefaultRowRenderer.tsx","../src/renderers/DefaultCellRenderer.tsx","../src/Cell.tsx","../src/Row.tsx","../src/chanchullos/LoadingContext.tsx","../src/renderers/NoRegistersRenderer.tsx","../src/renderers/TableRenderer.tsx","../src/renderers/AccordionCell.tsx","../src/renderers/AccordionElement.tsx","../src/renderers/AccordionRenderer.tsx","../src/ResponsiveTable.tsx","../src/filters/Sort.tsx","../src/filters/InnerRender.tsx","../src/filters/Additional.tsx","../src/filters/Responsive.tsx","../src/pagination/useIsMaximized.tsx","../src/pagination/index.tsx","../src/filters/Grouped.tsx","../src/controller2/applySelectionAttributes.ts","../src/controller2/handleMouseDownEvent.ts","../src/controller2/applyFocusAttributes.ts","../src/controller2/handleKeyDownEvent.ts","../src/controller2/Controller2.tsx","../src/TableContextReproducer.tsx","../src/renderers/DocNameCellRenderer.tsx","../src/renderers/AccordionDocNameCellRenderer.tsx","../src/renderers/AccordionHTMLCellRenderer.tsx","../src/renderers/HTMLCellRenderer.tsx","../src/renderers/IsLoadingRenderer.tsx","../src/renderers/makeAccordionAsyncRenderer.tsx","../src/renderers/makeAsyncRenderer.tsx","../src/renderers/NoEllipsisCellRenderer.tsx","../src/renderers/PriorityRenderer.tsx","../src/renderers/PriorityAccordionRenderer.tsx","../src/renderers/StatusRenderer.tsx","../src/renderers/StatusAccordionRenderer.tsx"],"sourcesContent":["import { IconType } from '@meronex/icons';\r\nimport React, { FC, ReactNode } from 'react';\r\nimport { TApiaFilter, TModify } from '@apia/util';\r\nimport { TAccordionCellRenderer } from './renderers/AccordionCell';\r\nimport {\r\n ISelectableState,\r\n TBasicRow,\r\n TKeyHandlerProps,\r\n} from './store/selection/types';\r\n\r\nexport type TColoredElement = {\r\n background?: string;\r\n color?: string;\r\n};\r\n\r\n/**\r\n * Se encontró en algunos casos particulares que\r\n * el servidor devuelve Up y Down para referirse\r\n * al orden actual de una columna.\r\n */\r\nexport type TResponsiveTableSortValue =\r\n | null\r\n | 'A'\r\n | 'D'\r\n | 'Down'\r\n | 'Up'\r\n | 'Asc'\r\n | 'Des';\r\n\r\n/**\r\n * Cada vez que se hace click en el botón del\r\n * cabezal de una columna, si la columna tiene\r\n * habilitado el ordenamiento, se emite un\r\n * evento de este tipo, informando cuál columna\r\n * emitió el evento, y cuál es el nuevo sortValue.\r\n */\r\nexport type TResponsiveTableSortChangeEvent = {\r\n name: string;\r\n column: TResponsiveTableColumn;\r\n columnIndex: number;\r\n /**\r\n * Es el orden que la columna debería tener\r\n * si no hay ningún motivo para evitar que\r\n * la acción de ordenamiento se lleve a cabo.\r\n *\r\n * Es importante notar que el componente\r\n * responsiveTable no realiza ninguna acción\r\n * de ordenamiento por defecto, sino que es\r\n * quien la usa, quien debe realizar las\r\n * acciones correspondientes e informarlo a\r\n * la tabla actualizando los registros y el\r\n * estado de la columna correspondiente.\r\n */\r\n sortValue: TResponsiveTableSortValue;\r\n};\r\n\r\n/**\r\n * Cada celda admite un renderer, que recibe\r\n * propiedades personalizadas. Este tipo define\r\n * cuál es la forma de esas propiedades.\r\n */\r\nexport type TResponsiveTableCellRendererProps<\r\n RendererPropsType extends Partial<\r\n Record<keyof RendererPropsType, unknown>\r\n > = Record<string, unknown>,\r\n HTML = HTMLTableCellElement,\r\n> = {\r\n cell: TResponsiveTableCell<RendererPropsType>;\r\n column: TResponsiveTableColumn;\r\n row: TResponsiveTableRow;\r\n} & React.AllHTMLAttributes<HTML>;\r\n\r\nexport type TResponsiveTableCellRenderer<\r\n RendererPropsType extends Partial<\r\n Record<keyof RendererPropsType, unknown>\r\n > = Record<string, unknown>,\r\n> = React.FunctionComponent<\r\n TResponsiveTableCellRendererProps<RendererPropsType>\r\n>;\r\n\r\n/**\r\n * Algunos elementos de la tabla admiten un\r\n * Renderer personalizado. Dichos elementos\r\n * extienden este tipo.\r\n */\r\nexport type TResponsiveTableWithRendererElement<\r\n RendererPropsType extends Partial<\r\n Record<keyof RendererPropsType, unknown>\r\n > = Record<string, unknown>,\r\n> = {\r\n /**\r\n * Si se desea, el elemento admite un componente\r\n * personalizado para encargarse del renderizado\r\n * del mismo en el modo responsivo. De esta forma, se puede proveer\r\n * de comportamiento específico a cualquier\r\n * elemento de la tabla.\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n AccordionRenderer?: TAccordionCellRenderer<any>;\r\n /**\r\n * Son las propiedades que se desean pasar al\r\n * componente de renderizado personalizado que\r\n * se haya establecido.\r\n *\r\n * Estas props serán obviadas en caso de que\r\n * no haya componente de renderizado personalizado.\r\n */\r\n rendererProps?: RendererPropsType;\r\n /**\r\n * Si se desea, el elemento admite un componente\r\n * personalizado para encargarse del renderizado\r\n * del mismo. De esta forma, se puede proveer\r\n * de comportamiento específico a cualquier\r\n * elemento de la tabla.\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n Renderer?: TResponsiveTableCellRenderer<any>;\r\n};\r\n\r\nexport type TResponsiveTableCell<\r\n RendererPropsType extends Partial<\r\n Record<keyof RendererPropsType, unknown>\r\n > = Record<string, unknown>,\r\n> = {\r\n children?: ReactNode;\r\n} & TResponsiveTableWithRendererElement<RendererPropsType> &\r\n Partial<\r\n Pick<\r\n HTMLTableCellElement,\r\n 'ariaLabel' | 'className' | 'colSpan' | 'id' | 'rowSpan' | 'title'\r\n >\r\n > &\r\n TColoredElement;\r\n\r\n/**\r\n * Cada celda admite un renderer, que recibe\r\n * propiedades personalizadas. Este tipo define\r\n * cuál es la forma de esas propiedades.\r\n */\r\nexport type TResponsiveTableRowRendererProps<\r\n RendererPropsType extends Partial<\r\n Record<keyof RendererPropsType, unknown>\r\n > = Record<string, unknown>,\r\n> = {\r\n row: TResponsiveTableRow<RendererPropsType>;\r\n rowIndex: number;\r\n} & React.AllHTMLAttributes<HTMLTableRowElement>;\r\n\r\nexport type TResponsiveTableRowRenderer<\r\n RendererPropsType extends Partial<\r\n Record<keyof RendererPropsType, unknown>\r\n > = Record<string, unknown>,\r\n> = React.FunctionComponent<\r\n TResponsiveTableRowRendererProps<RendererPropsType>\r\n>;\r\n\r\nexport type TResponsiveTableRow<\r\n RendererPropsType extends Partial<\r\n Record<keyof RendererPropsType, unknown>\r\n > = Record<string, unknown>,\r\n> = TBasicRow &\r\n TColoredElement & {\r\n accordionButtonProps?: {\r\n rightButtons?: React.ReactNode;\r\n onUserPressEnter?: (ev: React.KeyboardEvent) => unknown;\r\n };\r\n cells: TResponsiveTableCell[];\r\n /**\r\n * Si se pasa en true, la fila se mostrará como un separador\r\n */\r\n separator?: boolean;\r\n initiallySelected?: boolean;\r\n\r\n renderer?: TResponsiveTableRowRenderer<RendererPropsType>;\r\n rendererProps?: RendererPropsType;\r\n /**\r\n * Permite pasar propiedades arbitrarias a un row y recuperarlas en los\r\n * eventos de onClick por ejemplo.\r\n */\r\n rowProps?: RendererPropsType;\r\n isHidden?: boolean;\r\n /**\r\n * Los estados de la fila agregan un ícono en la columna\r\n * especial que es la que se muestra a la izquierda y\r\n * contiene, cuando existe, el botón de más información.\r\n */\r\n states?: TResponsiveTableRowState[];\r\n } & Partial<\r\n Pick<\r\n HTMLTableCellElement,\r\n 'ariaLabel' | 'colSpan' | 'className' | 'rowSpan' | 'title'\r\n >\r\n >;\r\n\r\nexport type TResponsiveTableRowState = {\r\n /**\r\n * Es un className que se agregará al elemento <tr>\r\n */\r\n className?: string;\r\n Icon: IconType;\r\n color?: string;\r\n tooltip: string;\r\n};\r\n\r\nexport type TResponsiveTableColumn = TResponsiveTableWithRendererElement & {\r\n /** Con esta propiedad se puede pasar parámetros opcionales */\r\n additionalData?: Record<string, unknown>;\r\n autoAdjustWidth?: boolean;\r\n /**\r\n * Determina si la columna admite ordenamiento.\r\n */\r\n allowSorting?: boolean;\r\n children?: React.ReactNode;\r\n /**\r\n * Cuando la columna admite ordenamiento, muestra\r\n * una flecha indicando el orden actual. Esta\r\n * propiedad establece si la flecha apunta hacia\r\n * arriba, abajo, o si la flecha es un guión.\r\n */\r\n currentSorting?: TResponsiveTableSortValue;\r\n /** *\r\n * Valor para decirle al server cuál columna se está ordenando\r\n */\r\n dataSortBy?: string;\r\n hidden?: boolean;\r\n /**\r\n * Normalmente, todas las columnas se van a mostrar\r\n * como renglones en el acordión, cuando este es\r\n * expandido.\r\n *\r\n * Si este flag es pasado en true, la columna\r\n * correspondiente no se va a mostrar en modo\r\n * responsivo.\r\n */\r\n hideFromAccordion?: boolean;\r\n /**\r\n * Elemento id del dom.\r\n */\r\n id?: string;\r\n /**\r\n * Es el texto que se mostrará en el cabezal.\r\n */\r\n label: string;\r\n maxWidth?: number | string;\r\n minWidth?: number | string;\r\n /**\r\n * El nombre de la columna debe ser único, se utiliza\r\n * para realizar la asosiación entre las columnas\r\n * y los filtros, así como con los eventos de orden.\r\n */\r\n name: string;\r\n /**\r\n * Si se pasa required: true, se pone un asterisco\r\n * rojo en el cabezal de la columna para señalar que\r\n * la columna es requerida.\r\n */\r\n required?: boolean;\r\n /**\r\n * Algunas columnas podrán mostrarse mediante un botón\r\n * \"mostrar más\", para ello deberán ser marcadas con\r\n * esta prop en true.\r\n */\r\n showAsAdditional?: boolean;\r\n /**\r\n * Cuando no se pasa esta propiedad en ninguna columna,\r\n * la aplicación encuentra la primera fila sin celdas\r\n * vacías y la utiliza como título.\r\n *\r\n * En cambio, si al menos una columna tiene este flag\r\n * en true, el título de cada fila del acordión estará\r\n * compuesto por los valores de estas columnas.\r\n */\r\n showInAccordionTitle?: boolean;\r\n /**\r\n * Elemento title de html (El tooltip).\r\n */\r\n title?: string;\r\n width?: number | string;\r\n} & Partial<\r\n Pick<\r\n HTMLTableCellElement,\r\n 'ariaLabel' | 'className' | 'colSpan' | 'rowSpan'\r\n >\r\n >;\r\n\r\nexport type TResponsiveTableStoreProps = {\r\n /**\r\n * Habla sobre el orden de las filas en función de\r\n * las columnas. Esta propiedad habilita/deshabilita\r\n * el ordenado de las columnas al hacer click en los\r\n * cabezales.\r\n *\r\n * La tabla admite ordenamiento por defecto, a menos\r\n * que esta prop venga en false. En caso de que se\r\n * pase false no importa qué digan las columnas,\r\n * el ordenamiento no estará habilitado.\r\n */\r\n allowSorting?: boolean;\r\n\r\n // Composition\r\n columns: TResponsiveTableColumn[];\r\n filters?: TApiaFilter[];\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n rows: TResponsiveTableRow<any>[];\r\n\r\n /**\r\n * Por defecto, la tabla permitirá seleccionar\r\n * múltiples valores, a menos que esta prop venga\r\n * en false.\r\n */\r\n isMultiple?: boolean;\r\n\r\n label?: string;\r\n\r\n /**\r\n * Es normal que una tabla tenga paginación y que en cada página haya una\r\n * cantidad distinta de estados. Si se quiere mantener consistencia en el\r\n * tamaño de las páginas, es posible reservar un tamaño para una cantidad\r\n * definida de estados con este parámetro.\r\n */\r\n reserveColumnsForStates?: number;\r\n statesColumns?: TResponsiveTableRowState[];\r\n};\r\n\r\nexport type TResponsiveTableRowsSelectionEvent = {\r\n index: number;\r\n row: TResponsiveTableRow;\r\n}[];\r\n\r\nexport type TResponsiveTableContextProps = TResponsiveTableStoreProps &\r\n Pick<\r\n ISelectableState,\r\n 'allowRowsKeyboardSorting' | 'allowEdition' | 'allowSelection'\r\n > & {\r\n /**\r\n * Cuando se actualiza el array de rows de la tabla\r\n * desde las props del ResponsiveTableContext, se\r\n * reinicia el estado de selección de acuerdo a cómo\r\n * viene definido en el prop. **Si esta prop se pasa\r\n * en true**, este comportamiento es deshabilitado.\r\n */\r\n avoidReparseSelectionOnRowChange?: boolean;\r\n avoidAutoEllipsis?: boolean;\r\n children?: React.ReactNode;\r\n className?: string;\r\n /**\r\n * Permite redefinir el comportamiento de los breakpoints pasando un índice\r\n * personalizado. Cuando es pasado, deja de prestar atención al breakpoint\r\n * de la pantalla y comienza a prestar atención a este índice.\r\n */\r\n currentBreakPoint?: number;\r\n customLabels?: typeof defaultLabels;\r\n /**\r\n * Se puede utilizar este booleano para que la tabla\r\n * deshabilite las opciones de filtrado y ordenado mientras\r\n * se está ejecutando una acción ajax.\r\n */\r\n isLoading?: boolean;\r\n /**\r\n * La tabla debe tener un nombre único que será usado para\r\n * acceder a las propiedades de la misma en el store. En caso\r\n * de que no se pase ninguno, la tabla lo generará\r\n * automaticamente.\r\n */\r\n name?: string;\r\n\r\n // Filtering\r\n onFilterChange?: (ev: TApiaFilter) => void | Promise<boolean>;\r\n onFilterBlur?: (ev: TApiaFilter) => unknown;\r\n onFilterPressEnter?: (ev: TApiaFilter) => unknown;\r\n FiltersRenderer?: (id: string) => FC<{ filter: TApiaFilter }>;\r\n\r\n // Selection\r\n onChangeSelection?: (ev: TResponsiveTableRowsSelectionEvent) => unknown;\r\n /**\r\n * Este evento será llamado cada vez que el usuario esté\r\n * haciendo foco en la tabla, tenga una selección de\r\n * filas no vacía y presione la tecla Enter.\r\n */\r\n onSelectRows?: (\r\n ev: TResponsiveTableRowsSelectionEvent,\r\n focusedRowIndex: number,\r\n ) => unknown;\r\n /**\r\n * Este evento será llamado cada vez que el usuario haga click en una fila\r\n */\r\n onRowClick?: (\r\n ev: TResponsiveTableRowsSelectionEvent[0],\r\n focusedRowIndex: number,\r\n ) => unknown;\r\n\r\n // Sorting\r\n /**\r\n * Es llamado cada vez que el usuario hace click en el botón\r\n * del cabezal de la columna. **Importante:** la tabla no\r\n * realizará ninguna acción de ordenamiento, sino solamente\r\n * avisar de que el usuario desea que las filas sean ordenadas\r\n * por alguna columna en particular.\r\n */\r\n onSortChange?: (ev: TResponsiveTableSortChangeEvent) => unknown;\r\n /**\r\n * Si se pasa selectionHandler, la tabla no realizará ningún control de eventos de teclado o mouse.\r\n */\r\n SelectionHandler?: FC<TKeyHandlerProps>;\r\n showFilters?: boolean;\r\n variant?: string;\r\n forceAccordion?: boolean;\r\n };\r\n\r\n/**\r\n * Los callbacks del responsiveTable estarán\r\n * disponibles a través de un contexto, de\r\n * forma que cualquier elemento activo que\r\n * desee informar de un evento en particular\r\n * pueda hacerlo en forma sencilla.\r\n */\r\nexport type TResponsiveTableContext = TModify<\r\n Pick<\r\n TResponsiveTableContextProps,\r\n | 'avoidAutoEllipsis'\r\n | 'FiltersRenderer'\r\n | 'currentBreakPoint'\r\n | 'name'\r\n | 'onChangeSelection'\r\n | 'onFilterBlur'\r\n | 'onFilterChange'\r\n | 'onFilterPressEnter'\r\n | 'onSelectRows'\r\n | 'onRowClick'\r\n | 'onSortChange'\r\n | 'label'\r\n | 'SelectionHandler'\r\n | 'showFilters'\r\n | 'forceAccordion'\r\n >,\r\n { labels: typeof defaultLabels; name: string }\r\n>;\r\n\r\ndeclare global {\r\n interface Window {\r\n FINDER_NO_DATA: string;\r\n ORDER_ASC_LABEL: string;\r\n ORDER_DESC_LABEL: string;\r\n GNR_TOT_RECORDS: string;\r\n GNR_TOT_RECORDS_REACHED: string;\r\n QUERY_MORE_DATA: string;\r\n LBL_MAXIMIZE: string;\r\n LBL_MINIMIZE: string;\r\n BTN_FILE_INFO_TOOLTIP: string;\r\n NAV_FIRST_PAGE: string;\r\n NAV_PREVIOUS_PAGE: string;\r\n NAV_INPUT_LABEL: string;\r\n PAGE: string;\r\n NAV_NEXT_PAGE: string;\r\n NAV_LAST_PAGE: string;\r\n BTN_DELETE_FILTERS: string;\r\n NAV_REFRESH: string;\r\n }\r\n}\r\n\r\nexport const defaultLabels = {\r\n noRegisters: window.FINDER_NO_DATA,\r\n};\r\n","import { TApiaFilter } from '@apia/util';\r\nimport { ISelectableState, TBasicRow } from './types';\r\n\r\nexport function getInitialState<\r\n ColumnsType extends { name: string },\r\n RowsType extends TBasicRow | string,\r\n>(): ISelectableState<ColumnsType, TApiaFilter, RowsType> {\r\n return {\r\n allowEdition: false,\r\n allowSelection: true,\r\n columns: [],\r\n expandedRows: [],\r\n isEditionMode: false,\r\n isFocused: false,\r\n filters: [],\r\n focusedColumn: 0,\r\n focusedRow: 0,\r\n hasNonAdditionalFilters: false,\r\n isMultiple: true,\r\n nonAdditionalColumnsCount: 0,\r\n rows: [],\r\n statesColumns: [],\r\n selectedRows: [],\r\n };\r\n}\r\n","import { addBoundary } from '@apia/util';\r\nimport { Draft } from '@apia/store';\r\nimport { INewFocus, ISelectableState, TBasicRow } from './types';\r\n\r\n/**\r\n * Este método conoce las interfaces necesarias\r\n * para aplicar las restricciones correspondientes\r\n * a la hora de hacer foco en una fila, evitando\r\n * que se haga foco en filas inexistentes.\r\n */\r\nexport function addRowBoundary(newRow: number, state: ISelectableState) {\r\n const hasFiltersRow = !!state.filters.find(\r\n (current) =>\r\n !!state.columns.find((search) => search.name === current.column),\r\n );\r\n return addBoundary({\r\n number: newRow,\r\n min: hasFiltersRow ? -2 : -1,\r\n max: Math.max(0, state.rows.length - 1),\r\n });\r\n}\r\n/**\r\n * Este método conoce las interfaces necesarias\r\n * para aplicar las restricciones correspondientes\r\n * a la hora de hacer foco en una columna, evitando\r\n * que se haga foco en columnas inexistentes.\r\n */\r\nexport function addColumnBoundary(newColumn: number, state: ISelectableState) {\r\n return addBoundary({\r\n number: newColumn,\r\n min: 0,\r\n max:\r\n state.nonAdditionalColumnsCount +\r\n state.statesColumns +\r\n (state.hasNonAdditionalFilters ? 1 : 0),\r\n });\r\n}\r\n\r\nfunction isBasicRow(row: unknown): row is TBasicRow {\r\n return typeof row === 'object' && !!row && 'forbidSelection' in row;\r\n}\r\n\r\nfunction filterNonSellectableRows(\r\n state: Draft<ISelectableState>,\r\n newSelection: number[],\r\n) {\r\n let expandedRowsBefore = 0;\r\n return newSelection.filter((selectedRowIndex) => {\r\n const row = state.rows[selectedRowIndex + expandedRowsBefore];\r\n if (state.expandedRows.includes(selectedRowIndex)) expandedRowsBefore += 1;\r\n return !(isBasicRow(row) && row.forbidSelection);\r\n });\r\n}\r\n\r\n/**\r\n * Normalmente, este método será llamado desde un\r\n * action de Redux, para eso fue diseñado. Su\r\n * utilidad es la de tomar el estado y alterarlo\r\n * dependiendo de los parámetros pasados y la lógica\r\n * de selección de filas y columnas en una grilla,\r\n * devolviendo un estado coherente que represente\r\n * las acciones de un usuario en la grilla.\r\n */\r\nexport function setNewFocused(\r\n state: Draft<ISelectableState>,\r\n {\r\n /**\r\n * Propiedad proveniente del evento click o keydown.\r\n */\r\n ctrlKey,\r\n /**\r\n * Propiedad proveniente del evento click o keydown.\r\n */\r\n shiftKey,\r\n newFocusedColumn,\r\n newFocusedRow,\r\n /**\r\n * Con este método se puede seleccionar cuál celda\r\n * va a recibir el foco y la selección, o solamente\r\n * el foco si esta propiedad es pasada en false.\r\n */\r\n shouldSelectNewFocused,\r\n }: INewFocus,\r\n) {\r\n let actualNewFocusedRow =\r\n Math.round(\r\n addRowBoundary(newFocusedRow ?? state.focusedRow ?? 0, state) * 2,\r\n ) / 2;\r\n const actualNewFocusedColumn = addColumnBoundary(\r\n newFocusedColumn ?? state.focusedColumn,\r\n state,\r\n );\r\n\r\n state.focusedColumn = actualNewFocusedColumn;\r\n state.focusedRow = actualNewFocusedRow;\r\n state.isFocused = shouldSelectNewFocused ?? false;\r\n\r\n if (shouldSelectNewFocused === false || actualNewFocusedRow < 0) return;\r\n\r\n if (Math.round(actualNewFocusedRow) - actualNewFocusedRow !== 0)\r\n actualNewFocusedRow = Math.floor(actualNewFocusedRow);\r\n\r\n const isDeselectingWithCtrl =\r\n ctrlKey && state.selectedRows.includes(actualNewFocusedRow);\r\n\r\n if (state.allowSelection !== false)\r\n if (\r\n (!ctrlKey && !shiftKey) ||\r\n (state.isMultiple === false && !isDeselectingWithCtrl)\r\n )\r\n state.selectedRows = filterNonSellectableRows(state, [\r\n actualNewFocusedRow,\r\n ]);\r\n else if ((ctrlKey && state.isMultiple) || isDeselectingWithCtrl) {\r\n state.selectedRows = filterNonSellectableRows(\r\n state,\r\n state.selectedRows.includes(actualNewFocusedRow)\r\n ? state.selectedRows.filter(\r\n (current) => current !== actualNewFocusedRow,\r\n )\r\n : [...state.selectedRows, actualNewFocusedRow],\r\n );\r\n } else if (shiftKey && state.isMultiple) {\r\n const sortedSelectedRows = [...state.selectedRows].sort((a, b) => a - b);\r\n let minSelectedRow = sortedSelectedRows[0];\r\n let maxSelectedRow = sortedSelectedRows[sortedSelectedRows.length - 1];\r\n\r\n if (minSelectedRow === undefined) {\r\n state.selectedRows = filterNonSellectableRows(state, [\r\n actualNewFocusedRow,\r\n ]);\r\n return;\r\n }\r\n\r\n if (actualNewFocusedRow < minSelectedRow)\r\n minSelectedRow = actualNewFocusedRow;\r\n if (actualNewFocusedRow > maxSelectedRow)\r\n maxSelectedRow = actualNewFocusedRow;\r\n\r\n const newSelectedRows = filterNonSellectableRows(\r\n state,\r\n new Array(maxSelectedRow - minSelectedRow + 1)\r\n .fill('')\r\n .map((_, i) => i + (minSelectedRow ?? 0)),\r\n );\r\n\r\n state.selectedRows = filterNonSellectableRows(state, newSelectedRows);\r\n }\r\n}\r\n","import { Draft } from '@apia/store';\r\nimport React from 'react';\r\nimport { setNewFocused } from './setNewFocused';\r\nimport { THandleKey, INewFocus, ISelectableState } from './types';\r\n\r\n/**\r\n * Este método es de uso interno y normalmente\r\n * no será necesario fuera de este documento,\r\n * su utilidad es la de determinar si un evento\r\n * de teclado será controlado por el keyHandler.\r\n */\r\nexport function willHandleKey(\r\n ev: React.KeyboardEvent,\r\n state: ISelectableState,\r\n) {\r\n const actualKey = ev.key.toLowerCase();\r\n if (state.isEditionMode) return false;\r\n\r\n if (actualKey === ' ' && ev.ctrlKey) return true;\r\n if (actualKey === 'a' && ev.ctrlKey) return true;\r\n if (actualKey === 'm' && ev.ctrlKey) return true;\r\n if (state.draggingRow !== undefined) {\r\n return ['Escape', 'Enter'].includes(ev.key);\r\n }\r\n return [\r\n 'arrowup',\r\n 'arrowdown',\r\n 'arrowleft',\r\n 'arrowright',\r\n 'end',\r\n 'enter',\r\n 'home',\r\n 'pageup',\r\n 'pagedown',\r\n ].includes(ev.key.toLowerCase());\r\n}\r\n\r\n/**\r\n * Este método será llamado normalmente desde un action\r\n * de Redux. Su utilidad es la de evaluar qué tecla\r\n * se presionó y decidir qué alteración se debe producir\r\n * en base a eso.\r\n */\r\nexport function handleKey(state: Draft<ISelectableState>, { ev }: THandleKey) {\r\n const {\r\n altKey: isAltPressed,\r\n ctrlKey: isCtrlPressed,\r\n key,\r\n shiftKey: isShiftPressed,\r\n } = ev;\r\n if (willHandleKey(ev, state)) ev.preventDefault();\r\n const actualKey = key.toLowerCase();\r\n const setFocus = ({\r\n newFocusedColumn,\r\n newFocusedRow,\r\n ...rest\r\n }: Partial<INewFocus>) =>\r\n setNewFocused(state, {\r\n altKey: isAltPressed,\r\n ctrlKey: isCtrlPressed,\r\n shiftKey: isShiftPressed,\r\n newFocusedColumn,\r\n newFocusedRow,\r\n ...rest,\r\n });\r\n\r\n if (!state.isEditionMode) {\r\n if (\r\n actualKey === 'enter' &&\r\n (state.allowEdition === true || state.focusedRow < 0)\r\n )\r\n state.isEditionMode = true;\r\n else\r\n switch (actualKey) {\r\n case 'arrowup': {\r\n let sumRate = state.expandedRows.includes(state.focusedRow - 1)\r\n ? 0.6\r\n : 1;\r\n if (Math.round(state.focusedRow) - state.focusedRow !== 0)\r\n sumRate = 0.5;\r\n setFocus({\r\n newFocusedRow: state.focusedRow - sumRate,\r\n shouldSelectNewFocused: !isCtrlPressed,\r\n });\r\n break;\r\n }\r\n case 'arrowdown': {\r\n let sumRate = state.expandedRows.includes(state.focusedRow) ? 0.6 : 1;\r\n if (Math.round(state.focusedRow) - state.focusedRow !== 0)\r\n sumRate = 0.5;\r\n setFocus({\r\n newFocusedRow: state.focusedRow + sumRate,\r\n shouldSelectNewFocused: !isCtrlPressed,\r\n });\r\n break;\r\n }\r\n case 'arrowleft':\r\n case 'arrowright': {\r\n setFocus({\r\n newFocusedColumn:\r\n state.focusedColumn + (actualKey === 'arrowleft' ? -1 : 1),\r\n shouldSelectNewFocused: !isCtrlPressed,\r\n });\r\n break;\r\n }\r\n case 'home': {\r\n if (isCtrlPressed)\r\n setFocus({ newFocusedColumn: 0, newFocusedRow: 0, ctrlKey: false });\r\n else setFocus({ newFocusedColumn: 0 });\r\n break;\r\n }\r\n case 'end': {\r\n if (isCtrlPressed)\r\n setFocus({\r\n newFocusedRow: Number.POSITIVE_INFINITY,\r\n newFocusedColumn: Number.POSITIVE_INFINITY,\r\n ctrlKey: false,\r\n });\r\n else\r\n setFocus({\r\n newFocusedColumn: Number.POSITIVE_INFINITY,\r\n });\r\n break;\r\n }\r\n case 'pageup': {\r\n setFocus({\r\n newFocusedRow: state.focusedRow - 5,\r\n shouldSelectNewFocused: !isCtrlPressed,\r\n });\r\n break;\r\n }\r\n case 'pagedown': {\r\n setFocus({\r\n newFocusedRow: state.focusedRow + 5,\r\n shouldSelectNewFocused: !isCtrlPressed,\r\n });\r\n break;\r\n }\r\n case ' ': {\r\n if (isCtrlPressed)\r\n setFocus({\r\n newFocusedRow: state.focusedRow,\r\n });\r\n break;\r\n }\r\n case 'a': {\r\n if (isCtrlPressed && state.allowSelection)\r\n state.selectedRows = state.rows.map((_, i) => i);\r\n break;\r\n }\r\n default:\r\n break;\r\n }\r\n } else\r\n switch (actualKey) {\r\n case 'escape':\r\n case 'enter': {\r\n if (state.isEditionMode) state.isEditionMode = false;\r\n ev.stopPropagation();\r\n break;\r\n }\r\n default:\r\n break;\r\n }\r\n}\r\n","import type { Draft, PayloadAction } from '@apia/store';\r\nimport type { TRequireOnlyOne } from '@apia/util';\r\nimport { handleKey } from './handleKey';\r\nimport { setNewFocused } from './setNewFocused';\r\nimport { THandleKey, INewFocus, ISelectableState } from './types';\r\n\r\ntype TState = Draft<Record<string, ISelectableState>>;\r\n\r\nexport type TPayloadWithId<\r\n P = Record<string, unknown>,\r\n T extends string = string,\r\n M = never,\r\n E = never,\r\n> = PayloadAction<P & { id: string }, T, M, E>;\r\n\r\nexport type THandleKeyPayload = TPayloadWithId<THandleKey>;\r\nexport type TSelectionStateUpdatePayload = TPayloadWithId<\r\n Partial<ISelectableState>\r\n>;\r\nexport type TSetNewFocusedPayload = TPayloadWithId<INewFocus>;\r\nexport type TUpdateByClickPayload = TPayloadWithId<\r\n TRequireOnlyOne<{ ariaRowIndex: number; rowIndex: number }> &\r\n TRequireOnlyOne<{ ariaColIndex?: number; colIndex: number }> &\r\n Pick<INewFocus, 'altKey' | 'ctrlKey' | 'shiftKey' | 'isFocused'>\r\n>;\r\n\r\nexport function getReduxActions() {\r\n return {\r\n handleKey(state: TState, { payload }: THandleKeyPayload) {\r\n handleKey(state[payload.id], payload);\r\n },\r\n selectionStateUpdate(\r\n state: TState,\r\n { payload: { id, ...payload } }: TSelectionStateUpdatePayload,\r\n ) {\r\n state[id] = { ...state[id], ...payload };\r\n },\r\n setNewFocused(\r\n state: TState,\r\n { payload: { id, ...payload } }: TSetNewFocusedPayload,\r\n ) {\r\n setNewFocused(state[id], payload);\r\n },\r\n updateByClick(\r\n state: TState,\r\n {\r\n payload: {\r\n id,\r\n colIndex,\r\n rowIndex,\r\n ariaColIndex,\r\n ariaRowIndex,\r\n isFocused,\r\n ...payload\r\n },\r\n }: TUpdateByClickPayload,\r\n ) {\r\n const hasFiltersRow = state[id].hasNonAdditionalFilters;\r\n state[id].isEditionMode = false;\r\n\r\n const newFocusedColumn = colIndex ?? ariaColIndex ?? 1;\r\n const newFocusedRow =\r\n ariaRowIndex !== undefined\r\n ? ariaRowIndex\r\n : (rowIndex ?? 0) - (1 + (hasFiltersRow ? 2 : 1));\r\n\r\n setNewFocused(state[id], {\r\n ...payload,\r\n newFocusedColumn,\r\n newFocusedRow,\r\n });\r\n\r\n if (isFocused !== undefined) state[id].isFocused = isFocused;\r\n },\r\n };\r\n}\r\n","import { Draft, PayloadAction } from '@apia/store';\r\nimport { TResponsiveTableSlice, TResponsiveTableState } from '../store/types';\r\n\r\nexport type TPayloadWithId<\r\n P = Record<string, unknown>,\r\n T extends string = string,\r\n M = never,\r\n E = never,\r\n> = PayloadAction<P & { tableName: string }, T, M, E>;\r\n\r\nexport function getController2ReduxActions() {\r\n return {\r\n controller2UpdateSelectionState(\r\n state: Draft<TResponsiveTableSlice>,\r\n {\r\n payload: { tableName, ...payload },\r\n }: TPayloadWithId<Partial<TResponsiveTableState>>,\r\n ) {\r\n Object.assign(state[tableName], payload);\r\n },\r\n };\r\n}\r\n","/* eslint-disable @typescript-eslint/no-dynamic-delete */\r\nimport { createSlice, injectReducers } from '@apia/store';\r\nimport {\r\n TResponsiveTableAction,\r\n TResponsiveTableIndexColumns,\r\n TResponsiveTableSlice,\r\n TResponsiveTableState,\r\n} from './types';\r\nimport { getInitialState as selectionGetInitialState } from './selection/getInitialState';\r\nimport { setNewFocused } from './selection/setNewFocused';\r\nimport { TResponsiveTableRow } from '../types';\r\nimport { getReduxActions } from './selection/getReduxActions';\r\nimport { getController2ReduxActions } from '../controller2/getController2ReduxActions';\r\n\r\nfunction getInitialState(): TResponsiveTableState {\r\n const newState: TResponsiveTableState = {\r\n ...selectionGetInitialState(),\r\n allowSelection: true,\r\n allowSorting: true,\r\n filters: [],\r\n isLoading: false,\r\n isMultiple: true,\r\n accordionIndexColumns: {} as TResponsiveTableIndexColumns,\r\n expandedRows: [],\r\n };\r\n\r\n return newState;\r\n}\r\n\r\nconst responsiveTableSlice = createSlice({\r\n name: 'responsiveTableSlice',\r\n initialState: {} as TResponsiveTableSlice,\r\n reducers: {\r\n update(\r\n state,\r\n {\r\n payload: { tableName, handleFocus, ...rest },\r\n }: TResponsiveTableAction<\r\n Partial<TResponsiveTableState> & {\r\n isFocused?: boolean;\r\n handleFocus?: boolean;\r\n }\r\n >,\r\n ) {\r\n if (!state[tableName]) state[tableName] = getInitialState();\r\n state[tableName] = { ...state[tableName], ...rest };\r\n\r\n if (handleFocus !== false) {\r\n setNewFocused(state[tableName], {\r\n altKey: false,\r\n ctrlKey: false,\r\n shiftKey: false,\r\n shouldSelectNewFocused: rest.isFocused ?? state[tableName].isFocused,\r\n });\r\n }\r\n\r\n if (rest.columns) {\r\n state[tableName].nonAdditionalColumnsCount = rest.columns.filter(\r\n (current) => !current.showAsAdditional,\r\n ).length;\r\n }\r\n\r\n if (rest.filters) {\r\n state[tableName].hasNonAdditionalFilters =\r\n rest.filters.filter(\r\n (current) =>\r\n !current.asAdditional &&\r\n (rest.columns ?? state[tableName].columns)?.find(\r\n (search) => search.name === current.column,\r\n ),\r\n ).length > 0;\r\n }\r\n },\r\n addRows(\r\n state,\r\n { payload }: TResponsiveTableAction<{ newRows: TResponsiveTableRow[] }>,\r\n ) {\r\n if (!state[payload.tableName])\r\n state[payload.tableName] = getInitialState();\r\n state[payload.tableName].rows = state[payload.tableName].rows.concat(\r\n ...payload.newRows,\r\n );\r\n setNewFocused(state[payload.tableName], {\r\n altKey: false,\r\n ctrlKey: false,\r\n shiftKey: false,\r\n shouldSelectNewFocused: true,\r\n newFocusedRow: state[payload.tableName].rows.length,\r\n });\r\n },\r\n deleteRows(\r\n state,\r\n { payload }: TResponsiveTableAction<{ rowIndices: number[] }>,\r\n ) {\r\n const table = state[payload.tableName];\r\n const minIndex = payload.rowIndices.reduce((min, current) => {\r\n return current < min ? current : min;\r\n }, Infinity);\r\n table.rows = table.rows.filter(\r\n (_, index) => !payload.rowIndices.includes(index),\r\n );\r\n\r\n setNewFocused(state[payload.tableName], {\r\n altKey: false,\r\n ctrlKey: false,\r\n shiftKey: false,\r\n shouldSelectNewFocused: true,\r\n newFocusedRow: minIndex,\r\n });\r\n state[payload.tableName].isFocused = false;\r\n },\r\n destroy(state, { payload: { tableName } }: TResponsiveTableAction) {\r\n delete state[tableName];\r\n },\r\n swapFocusedRow(\r\n state,\r\n {\r\n payload: { newIndex, tableName },\r\n }: TResponsiveTableAction<{ newIndex: number }>,\r\n ) {\r\n const tableState = state[tableName];\r\n const focusedIndex = tableState.focusedRow;\r\n\r\n if (\r\n focusedIndex === undefined ||\r\n newIndex < 0 ||\r\n newIndex >= tableState.rows.length\r\n )\r\n return;\r\n\r\n if (focusedIndex === newIndex) {\r\n if (tableState.draggingRow === newIndex)\r\n tableState.draggingRow = undefined;\r\n else tableState.draggingRow = newIndex;\r\n return;\r\n }\r\n\r\n const isSelected = tableState.selectedRows.includes(focusedIndex);\r\n\r\n if (isSelected) {\r\n tableState.selectedRows = [\r\n ...tableState.selectedRows.filter(\r\n (current) => current !== focusedIndex,\r\n ),\r\n newIndex,\r\n ];\r\n }\r\n\r\n const aux = tableState.rows[newIndex];\r\n tableState.rows[newIndex] = tableState.rows[focusedIndex];\r\n tableState.rows[focusedIndex] = aux;\r\n\r\n tableState.focusedRow = newIndex;\r\n tableState.draggingRow = newIndex;\r\n },\r\n\r\n // Rows selection\r\n ...getReduxActions(),\r\n ...getController2ReduxActions(),\r\n },\r\n});\r\n\r\ntype TypedUseSelectorHook<TState> = <TSelected>(\r\n selector: (state: TState) => TSelected,\r\n equalityFn?: (a: TSelected, b: TSelected) => boolean,\r\n) => TSelected;\r\nconst { store: responsiveTableStore, useSelector } = injectReducers({\r\n responsiveTableSlice: responsiveTableSlice.reducer,\r\n});\r\n\r\nconst useResponsiveTable = useSelector as TypedUseSelectorHook<{\r\n responsiveTableSlice: TResponsiveTableSlice;\r\n}>;\r\nexport { responsiveTableStore };\r\nexport { useResponsiveTable };\r\n\r\nexport const responsiveTableActions = responsiveTableSlice.actions;\r\n","import { useMount, useUnmount, useUpdateEffect } from 'ahooks';\r\nimport uniqueId from 'lodash-es/uniqueId';\r\nimport React from 'react';\r\nimport { Box } from '@apia/theme';\r\nimport {\r\n defaultLabels,\r\n TResponsiveTableContext,\r\n TResponsiveTableContextProps,\r\n} from './types';\r\nimport { responsiveTableActions, responsiveTableStore } from './store';\r\nimport { ResponsiveTable } from './ResponsiveTable';\r\nimport { getVariant } from '@apia/theme';\r\n\r\nexport const ResponsiveTableReactContext =\r\n React.createContext<TResponsiveTableContext>({} as TResponsiveTableContext);\r\n\r\nconst tableContexts: Record<string, TResponsiveTableContext> = {};\r\n\r\nexport function getResponsiveTableContext(tableName: string) {\r\n return tableContexts[tableName];\r\n}\r\n\r\nexport function useResponsiveTableContext(tableName?: string) {\r\n const reactContext = React.useContext(ResponsiveTableReactContext);\r\n const context = tableName ? tableContexts[tableName] : reactContext;\r\n if (!context) throw new Error('There is no ResponsiveTableContext');\r\n return context;\r\n}\r\n\r\n/**\r\n * Este contexto busca facilitar la tarea de centralizar las\r\n * propiedades y callbacks asociados a la tabla, de forma de\r\n * evitar la necesidad de distribuir comportamientos.\r\n *\r\n * **MUY IMPORTANTE**\r\n * Asegurarse de memoizar las propiedades rows, filters y\r\n * columns, ya que en caso contrario eso va a disparar\r\n * actualizaciones en el responsiveTableStore cada vez que el padre del\r\n * contexto renderice.\r\n *\r\n */\r\nconst NoMemoResponsiveTableContext = ({\r\n allowEdition,\r\n allowRowsKeyboardSorting,\r\n avoidAutoEllipsis,\r\n allowSelection,\r\n allowSorting,\r\n avoidReparseSelectionOnRowChange,\r\n children = <ResponsiveTable />,\r\n className,\r\n currentBreakPoint,\r\n customLabels,\r\n columns,\r\n filters,\r\n FiltersRenderer,\r\n rows,\r\n label,\r\n isMultiple,\r\n isLoading,\r\n name,\r\n statesColumns,\r\n showFilters,\r\n forceAccordion,\r\n\r\n onChangeSelection,\r\n onFilterBlur,\r\n onFilterChange,\r\n onFilterPressEnter,\r\n onRowClick,\r\n onSelectRows,\r\n onSortChange,\r\n reserveColumnsForStates,\r\n SelectionHandler,\r\n variant,\r\n}: TResponsiveTableContextProps) => {\r\n const actualName = React.useMemo(\r\n () => name ?? uniqueId('responsiveTable'),\r\n [name],\r\n );\r\n const labels = React.useMemo(\r\n () => ({ ...defaultLabels, ...customLabels }),\r\n [customLabels],\r\n );\r\n const contextValue = React.useMemo<TResponsiveTableContext>(\r\n () => ({\r\n currentBreakPoint,\r\n label,\r\n labels,\r\n avoidAutoEllipsis,\r\n FiltersRenderer,\r\n name: actualName,\r\n onChangeSelection,\r\n onFilterBlur,\r\n onFilterChange,\r\n onFilterPressEnter,\r\n onRowClick,\r\n onSelectRows,\r\n onSortChange,\r\n SelectionHandler,\r\n statesColumns,\r\n isLoading,\r\n showFilters,\r\n forceAccordion,\r\n }),\r\n [\r\n currentBreakPoint,\r\n label,\r\n labels,\r\n avoidAutoEllipsis,\r\n FiltersRenderer,\r\n actualName,\r\n onChangeSelection,\r\n onFilterBlur,\r\n onFilterChange,\r\n onFilterPressEnter,\r\n onRowClick,\r\n onSelectRows,\r\n onSortChange,\r\n SelectionHandler,\r\n statesColumns,\r\n isLoading,\r\n showFilters,\r\n forceAccordion,\r\n ],\r\n );\r\n\r\n tableContexts[actualName] = contextValue;\r\n\r\n useMount(() => {\r\n responsiveTableStore.dispatch(\r\n responsiveTableActions.update({\r\n allowEdition,\r\n allowRowsKeyboardSorting,\r\n allowSelection,\r\n allowSorting,\r\n columns,\r\n filters: filters ?? [],\r\n rows,\r\n isMultiple,\r\n tableName: actualName,\r\n reserveColumnsForStates,\r\n handleFocus: !SelectionHandler,\r\n statesColumns,\r\n isLoading,\r\n }),\r\n );\r\n });\r\n\r\n useUpdateEffect(() => {\r\n responsiveTableStore.dispatch(\r\n responsiveTableActions.update({\r\n tableName: actualName,\r\n columns,\r\n handleFocus: !SelectionHandler,\r\n }),\r\n );\r\n }, [columns]);\r\n\r\n useUpdateEffect(() => {\r\n responsiveTableStore.dispatch(\r\n responsiveTableActions.update({\r\n tableName: actualName,\r\n rows,\r\n handleFocus: !SelectionHandler,\r\n }),\r\n );\r\n if (!SelectionHandler && avoidReparseSelectionOnRowChange !== true) {\r\n const selected = rows\r\n .map((current, i) => ({ ...current, i }))\r\n .filter((current) => current.initiallySelected);\r\n responsiveTableStore.dispatch(\r\n responsiveTableActions.update({\r\n tableName: actualName,\r\n selectedRows: selected.map((current) => current.i),\r\n }),\r\n );\r\n }\r\n }, [rows]);\r\n\r\n useUpdateEffect(() => {\r\n responsiveTableStore.dispatch(\r\n responsiveTableActions.update({\r\n tableName: actualName,\r\n filters,\r\n handleFocus: !SelectionHandler,\r\n }),\r\n );\r\n }, [filters]);\r\n\r\n useUpdateEffect(() => {\r\n responsiveTableStore.dispatch(\r\n responsiveTableActions.update({\r\n tableName: actualName,\r\n statesColumns,\r\n }),\r\n );\r\n }, [statesColumns]);\r\n\r\n useUpdateEffect(() => {\r\n responsiveTableStore.dispatch(\r\n responsiveTableActions.update({\r\n tableName: actualName,\r\n isLoading,\r\n }),\r\n );\r\n }, [isLoading]);\r\n\r\n useUnmount(() => {\r\n responsiveTableStore.dispatch(\r\n responsiveTableActions.destroy({ tableName: actualName }),\r\n );\r\n });\r\n\r\n return (\r\n <ResponsiveTableReactContext.Provider value={contextValue}>\r\n <Box\r\n id={name}\r\n className={`responsiveTableContext__wrapper ${className ?? ''}`}\r\n {...(variant ? getVariant(variant) : null)}\r\n >\r\n {children}\r\n </Box>\r\n </ResponsiveTableReactContext.Provider>\r\n );\r\n};\r\n\r\nexport const ResponsiveTableContext = React.memo(NoMemoResponsiveTableContext);\r\n","import React from 'react';\r\nimport { shallowEqual } from 'react-redux';\r\nimport { Box } from '@apia/theme';\r\nimport {\r\n autoDisconnectMutationObserver,\r\n customEvents,\r\n getFocusSelector,\r\n getSpecificParent,\r\n globalFocus,\r\n isChild,\r\n cantFocusSelector,\r\n scrollParentIntoElement,\r\n useLatest,\r\n useUpdateEffect,\r\n} from '@apia/util';\r\nimport { ThrottleOptions } from 'ahooks/lib/useThrottle/throttleOptions';\r\nimport { useThrottleFn } from 'ahooks';\r\nimport { TUpdateByClickPayload } from './getReduxActions';\r\nimport { willHandleKey } from './handleKey';\r\nimport {\r\n INewFocus,\r\n ISelectableState,\r\n THandleKey,\r\n TKeyHandlerProps,\r\n TUseDomProps,\r\n} from './types';\r\nimport {\r\n TResponsiveTableRow,\r\n TResponsiveTableRowsSelectionEvent,\r\n} from '../../types';\r\nimport { responsiveTableStore, useResponsiveTable } from '..';\r\n\r\nexport function shoutKeyhandlerLive(\r\n liveType: 'reset' | 'howToStartDrag' | 'howToEndDrag' | 'whichIsTheNewIndex',\r\n) {\r\n switch (liveType) {\r\n /* case 'howToEndDrag':\r\n AriaLiveEmitter.emit('live', {\r\n type: 'assertive',\r\n message: window.ARIA_HOW_TO_END_DRAG,\r\n });\r\n break;\r\n case 'whichIsTheNewIndex':\r\n AriaLiveEmitter.emit('live', {\r\n type: 'assertive',\r\n * message:\r\n * formatMessage(window.ARIA_HOW_TO_WHICH_IS_THE_NEW_POSITION, {\r\n TOK1: String(additionalData?.newIndex ?? 0),\r\n }),\r\n });\r\n break;\r\n case 'reset':\r\n AriaLiveEmitter.emit('live', {\r\n type: 'reset',\r\n message: '',\r\n });\r\n break;\r\n default:\r\n AriaLiveEmitter.emit('live', {\r\n type: 'assertive',\r\n message: window.ARIA_HOW_TO_START_DRAG,\r\n }); */\r\n default:\r\n }\r\n}\r\n\r\nlet scrollTimeout: number;\r\n/**\r\n * Devuelve un elemento KeyHandler que puede usarse como\r\n * en el ejemplo.\r\n *\r\n * Su función es la de manejar los eventos de teclado y\r\n * ejecutar las acciones necesarias en el estado de la\r\n * grilla de acuerdo a la funcionalidad estándar de\r\n * usabilidad de grillas.\r\n *\r\n * @example\r\n *\r\n <KeyHandler>\r\n <table ... />\r\n </KeyHandler>\r\n */\r\nexport function makeKeyHandler(\r\n actions: {\r\n handleKey: (payload: THandleKey & { id: string }) => {\r\n payload: THandleKey & { id: string };\r\n type: string;\r\n };\r\n selectionStateUpdate: (\r\n payload: Partial<ISelectableState> & { id: string },\r\n ) => {\r\n payload: Partial<ISelectableState> & { id: string };\r\n type: string;\r\n };\r\n setNewFocused: (payload: INewFocus & { id: string }) => {\r\n payload: INewFocus & { id: string };\r\n type: string;\r\n };\r\n swapFocusedRow?: (\r\n payload: {\r\n newIndex: number;\r\n } & {\r\n tableName: string;\r\n },\r\n ) => {\r\n payload: {\r\n newIndex: number;\r\n } & {\r\n tableName: string;\r\n };\r\n type: string;\r\n };\r\n updateByClick: (payload: TUpdateByClickPayload['payload']) => {\r\n payload: INewFocus & { id: string };\r\n type: string;\r\n };\r\n },\r\n id: string,\r\n config: { throttleOptions?: ThrottleOptions; stateSelector: TUseDomProps },\r\n) {\r\n return function KeyHandler({\r\n children,\r\n onChangeSelection,\r\n onRowClick: onClickRows,\r\n onSelectRows,\r\n ...props\r\n }: TKeyHandlerProps) {\r\n const { run: keyHandler } = useThrottleFn<\r\n React.KeyboardEventHandler<HTMLDivElement>\r\n >(\r\n (ev) => {\r\n if (!['shift', 'alt', 'control'].includes(ev.key.toLowerCase())) {\r\n responsiveTableStore.dispatch(actions.handleKey({ id, ev }));\r\n }\r\n },\r\n config?.throttleOptions ?? { wait: 100 },\r\n );\r\n\r\n const [ref, setRef] = React.useState<HTMLElement | null>(null);\r\n\r\n const selectedRows = useResponsiveTable(\r\n (global) => {\r\n const state = config.stateSelector(global);\r\n return (state?.selectedRows ?? []).map<\r\n TResponsiveTableRowsSelectionEvent[0]\r\n >((current) => ({\r\n index: current,\r\n row: state.rows[current] as TResponsiveTableRow,\r\n }));\r\n },\r\n (a, b) =>\r\n shallowEqual(\r\n a.map((current) => current.index),\r\n b.map((current) => current.index),\r\n ),\r\n );\r\n const selectedRowsRef = useLatest(selectedRows);\r\n const { allowKeyboardSorting, focusedCell, isEditionMode, isFocused } =\r\n useResponsiveTable((global) => {\r\n const state = config.stateSelector(global);\r\n return {\r\n focusedCell:\r\n state?.focusedRow !== undefined\r\n ? `${state?.focusedRow}_${state?.focusedColumn}`\r\n : undefined,\r\n isEditionMode: state?.isEditionMode,\r\n rows: state?.rows,\r\n isFocused: state?.isFocused,\r\n allowKeyboardSorting: state?.allowRowsKeyboardSorting,\r\n };\r\n }, shallowEqual);\r\n useUpdateEffect(() => {\r\n if (onChangeSelection) onChangeSelection(selectedRows);\r\n }, [onChangeSelection, selectedRows]);\r\n\r\n const handleClick = React.useCallback(\r\n (ev: MouseEvent | FocusEvent | Event) => {\r\n if ((ev.target as HTMLElement).closest('.moreInformationButton'))\r\n return;\r\n\r\n if ((ev as MouseEvent).shiftKey) {\r\n document.getSelection()?.removeAllRanges();\r\n }\r\n const parentRow = getSpecificParent(\r\n ev.target as HTMLElement,\r\n (current) => {\r\n if (current.tagName.toLowerCase() === 'table') return null;\r\n if (current.matches('tr')) {\r\n return true;\r\n }\r\n return false;\r\n },\r\n );\r\n const parentCell = getSpecificParent(\r\n ev.target as HTMLElement,\r\n (current) => {\r\n if (current.tagName.toLowerCase() === 'table') return null;\r\n if (current.matches('td,th')) {\r\n return true;\r\n }\r\n return false;\r\n },\r\n );\r\n if (parentCell && parentRow) {\r\n responsiveTableStore.dispatch(\r\n actions.updateByClick({\r\n altKey: (ev as MouseEvent).altKey,\r\n id,\r\n ctrlKey: (ev as MouseEvent).ctrlKey,\r\n ariaColIndex: Number(parentCell.getAttribute('aria-colindex')),\r\n rowIndex: Number(parentRow.getAttribute('data-focusindex')),\r\n shiftKey: (ev as MouseEvent).shiftKey,\r\n }),\r\n );\r\n if (onClickRows && ev.type === 'mousedown')\r\n onClickRows(\r\n selectedRowsRef.current?.[0],\r\n config.stateSelector(responsiveTableStore.getState()).focusedRow,\r\n );\r\n }\r\n },\r\n [onClickRows, selectedRowsRef],\r\n );\r\n const handleDoubleClick = React.useCallback(\r\n (ev: MouseEvent) => {\r\n if (\r\n isChild(\r\n ev.target as HTMLElement,\r\n (current) => current.tagName === 'THEAD',\r\n )\r\n )\r\n return;\r\n ev.preventDefault();\r\n if (onSelectRows)\r\n onSelectRows(\r\n selectedRowsRef.current,\r\n config.stateSelector(responsiveTableStore.getState()).focusedRow,\r\n );\r\n },\r\n [onSelectRows, selectedRowsRef],\r\n );\r\n\r\n const initialized = React.useRef(true);\r\n\r\n const running = React.useRef(false);\r\n const doFocusThings = React.useCallback(() => {\r\n if (!running.current) {\r\n running.current = true;\r\n if (focusedCell === undefined) {\r\n running.current = false;\r\n return () => {};\r\n }\r\n\r\n if (ref) {\r\n const disconnectObserver = autoDisconnectMutationObserver(\r\n ref,\r\n () => {\r\n scrollTimeout = setTimeout(() => {\r\n const focusedElement = ref.querySelector(\r\n '[data-focused=\"true\"]',\r\n );\r\n\r\n let tableCellElement: HTMLElement | null = null;\r\n let tableCellWidget: HTMLElement | null = null;\r\n\r\n if (\r\n ['td', 'th'].includes(\r\n focusedElement?.tagName.toLowerCase() ?? '',\r\n )\r\n ) {\r\n tableCellElement = focusedElement as HTMLElement;\r\n tableCellWidget = focusedElement?.querySelector(\r\n getFocusSelector(':not(.debug_info__button)'),\r\n ) as HTMLElement;\r\n }\r\n\r\n if (focusedElement?.tagName.toLowerCase() === 'tr') {\r\n tableCellElement = focusedElement.querySelector('td,th');\r\n tableCellWidget =\r\n (focusedElement.querySelector(\r\n getFocusSelector(':not(.debug_info__button)'),\r\n ) as HTMLElement) || tableCellElement;\r\n }\r\n\r\n if (tableCellWidget) {\r\n tableCellElement?.setAttribute('tabIndex', '-1');\r\n tableCellWidget.setAttribute('tabIndex', '0');\r\n } else tableCellElement?.setAttribute('tabIndex', '0');\r\n\r\n if (!isEditionMode) {\r\n const allFocusableElements = ref?.querySelectorAll(\r\n getFocusSelector(\r\n `${cantFocusSelector}:not([data-focused=\"true\"])`,\r\n ),\r\n );\r\n allFocusableElements?.forEach((current) => {\r\n if (current !== tableCellWidget) {\r\n current.setAttribute('tabIndex', '-1');\r\n }\r\n if (tableCellWidget?.tagName === 'BUTTON')\r\n tableCellWidget.setAttribute('role', 'gridcell');\r\n });\r\n } else {\r\n const focusableElements =\r\n tableCellElement?.querySelectorAll('[tabindex=\"-1\"]');\r\n\r\n focusableElements?.forEach((current) =>\r\n current.setAttribute('tabIndex', '0'),\r\n );\r\n }\r\n\r\n const focusElement = tableCellWidget ?? tableCellElement;\r\n const row = getSpecificParent(\r\n focusElement,\r\n (current) => current.tagName === 'TR',\r\n );\r\n\r\n if (\r\n focusElement &&\r\n initialized.current &&\r\n config.stateSelector(responsiveTableStore.getState())\r\n .isFocused\r\n ) {\r\n globalFocus.focus = focusElement;\r\n\r\n focusElement.focus();\r\n }\r\n\r\n if (row) {\r\n scrollParentIntoElement(row, 55, 2, 100, 'makeKeyHandler');\r\n }\r\n\r\n if (!initialized.current) {\r\n initialized.current = true;\r\n }\r\n }, 0) as unknown as number;\r\n },\r\n { timeout: 5000 },\r\n );\r\n\r\n running.current = false;\r\n return () => {\r\n disconnectObserver();\r\n clearTimeout(scrollTimeout);\r\n };\r\n }\r\n running.current = false;\r\n }\r\n return () => {};\r\n }, [focusedCell, ref, isEditionMode]);\r\n\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n React.useLayoutEffect(doFocusThings, [\r\n focusedCell,\r\n isFocused,\r\n isEditionMode,\r\n ]);\r\n React.useEffect(() => {\r\n function handleFocus(ev: FocusEvent) {\r\n const targetTable = getSpecificParent(\r\n ev.target as HTMLElement,\r\n (current) => current.tagName.toLowerCase() === 'table',\r\n );\r\n const relatedTargetTable = getSpecificParent(\r\n ev.relatedTarget as HTMLElement,\r\n (current) => current.tagName.toLowerCase() === 'table',\r\n );\r\n\r\n if (!relatedTargetTable || relatedTargetTable !== targetTable)\r\n handleClick(ev);\r\n }\r\n\r\n ref?.addEventListener('dblclick', handleDoubleClick);\r\n ref?.addEventListener('mousedown', handleClick);\r\n ref?.addEventListener('focusin', handleFocus);\r\n ref?.addEventListener(customEvents.focus, handleClick);\r\n return () => {\r\n ref?.removeEventListener('mousedown', handleClick);\r\n ref?.removeEventListener('dblclick', handleDoubleClick);\r\n ref?.removeEventListener('focusin', handleFocus);\r\n ref?.removeEventListener(customEvents.focus, handleClick);\r\n };\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [ref]);\r\n\r\n const isDragging = React.useRef(false);\r\n const isFocusedRef = React.useRef(false);\r\n\r\n return (\r\n <Box\r\n ref={setRef}\r\n {...props}\r\n className={`selection__keyHandler ${props.className ?? ''}`}\r\n onBlur={React.useCallback(\r\n (ev: React.FocusEvent) => {\r\n if (\r\n !ev.relatedTarget ||\r\n !getSpecificParent(\r\n ev.relatedTarget as HTMLElement,\r\n (current) => current === ref,\r\n )\r\n ) {\r\n responsiveTableStore.dispatch(\r\n actions.selectionStateUpdate({ id, isFocused: false }),\r\n );\r\n shoutKeyhandlerLive('reset');\r\n isFocusedRef.current = false;\r\n }\r\n },\r\n [ref],\r\n )}\r\n onFocus={React.useCallback(() => {\r\n if (!isFocusedRef.current) shoutKeyhandlerLive('howToStartDrag');\r\n isFocusedRef.current = true;\r\n }, [])}\r\n sx={React.useMemo(\r\n () => ({ overflow: 'auto', position: 'relative' }),\r\n [],\r\n )}\r\n onKeyDown={React.useCallback<\r\n React.KeyboardEventHandler<HTMLDivElement>\r\n >(\r\n (ev) => {\r\n const state = config.stateSelector(responsiveTableStore.getState());\r\n\r\n if (\r\n willHandleKey(\r\n ev,\r\n config.stateSelector(responsiveTableStore.getState()),\r\n )\r\n ) {\r\n ev.preventDefault();\r\n ev.stopPropagation();\r\n }\r\n if (\r\n actions.swapFocusedRow &&\r\n isDragging.current &&\r\n allowKeyboardSorting\r\n ) {\r\n if (\r\n (ev.key === 'Enter' || ev.key === 'Escape') &&\r\n isDragging.current\r\n ) {\r\n shoutKeyhandlerLive('howToStartDrag');\r\n isDragging.current = false;\r\n responsiveTableStore.dispatch(\r\n actions.swapFocusedRow({\r\n tableName: id,\r\n newIndex: state.focusedRow,\r\n }),\r\n );\r\n } else if (['ArrowDown', 'ArrowUp'].includes(ev.key)) {\r\n if (ev.key === 'ArrowDown') {\r\n responsiveTableStore.dispatch(\r\n actions.swapFocusedRow({\r\n tableName: id,\r\n newIndex: state.focusedRow + 1,\r\n }),\r\n );\r\n } else {\r\n responsiveTableStore.dispatch(\r\n actions.swapFocusedRow({\r\n tableName: id,\r\n newIndex: state.focusedRow - 1,\r\n }),\r\n );\r\n }\r\n }\r\n } else if (\r\n ev.key === 'm' &&\r\n ev.ctrlKey &&\r\n !isDragging.current &&\r\n state.focusedRow >= 0 &&\r\n actions.swapFocusedRow\r\n ) {\r\n isDragging.current = true;\r\n shoutKeyhandlerLive('howToEndDrag');\r\n responsiveTableStore.dispatch(\r\n actions.swapFocusedRow({\r\n tableName: id,\r\n newIndex: state.focusedRow,\r\n }),\r\n );\r\n } else {\r\n const currentSelectedRows = (state?.selectedRows ?? []).map<\r\n TResponsiveTableRowsSelectionEvent[0]\r\n >((current) => ({\r\n index: current,\r\n row: state.rows[current] as TResponsiveTableRow,\r\n }));\r\n if (props.onKeyDown) props.onKeyDown(ev);\r\n if (ev.key === 'Enter' && onSelectRows && state.focusedRow >= 0) {\r\n onSelectRows(currentSelectedRows, state.focusedRow);\r\n }\r\n keyHandler(ev);\r\n }\r\n },\r\n [allowKeyboardSorting, keyHandler, onSelectRows, props],\r\n )}\r\n >\r\n {children}\r\n </Box>\r\n );\r\n };\r\n}\r\n","import React from 'react';\r\nimport { BoxProps } from '@apia/theme';\r\nimport { useResponsiveTableContext } from './ResponsiveTableContext';\r\nimport { makeKeyHandler } from './store/selection/makeKeyHandler';\r\nimport { responsiveTableActions } from './store';\r\n\r\nexport interface IKeyHandler {\r\n children: React.ReactNode;\r\n}\r\n\r\nconst NoMemoKeyHandler = (props: BoxProps) => {\r\n const {\r\n name,\r\n onChangeSelection,\r\n onRowClick,\r\n onSelectRows,\r\n SelectionHandler,\r\n } = useResponsiveTableContext();\r\n\r\n const Handler = React.useMemo(\r\n () =>\r\n SelectionHandler ||\r\n makeKeyHandler(responsiveTableActions, name, {\r\n throttleOptions: { wait: 50 },\r\n stateSelector: (global) => global.responsiveTableSlice[name],\r\n }),\r\n [SelectionHandler, name],\r\n );\r\n\r\n return (\r\n <Handler\r\n onChangeSelection={onChangeSelection}\r\n onSelectRows={onSelectRows}\r\n onRowClick={onRowClick}\r\n {...props}\r\n />\r\n );\r\n};\r\n\r\nexport const KeyHandler = React.memo(NoMemoKeyHandler);\r\n","import { useMemo } from 'react';\r\nimport { shallowEqual } from 'react-redux';\r\nimport { addBoundary } from '@apia/util';\r\nimport { TDomProps, IRequiredDomProps, TUseDomProps } from './types';\r\nimport { responsiveTableStore, useResponsiveTable } from '..';\r\n\r\nexport function getDomStoreProps<ElementType extends keyof IRequiredDomProps>(\r\n element: ElementType,\r\n elementProps: IRequiredDomProps[typeof element],\r\n stateSelector: TUseDomProps,\r\n) {\r\n const globalState = responsiveTableStore.getState();\r\n const tableState = stateSelector(globalState);\r\n const hasNonAdditionalFilters = tableState?.hasNonAdditionalFilters;\r\n const startDataRowIndex = hasNonAdditionalFilters ? 2 : 1;\r\n\r\n const statesColumns = tableState?.statesColumns?.length ?? 0;\r\n\r\n let expandedBeforeThisRow = 0;\r\n\r\n if (element === 'tr')\r\n expandedBeforeThisRow = tableState?.expandedRows.filter(\r\n (current) => current < (elementProps as IRequiredDomProps['td']).rowIndex,\r\n ).length;\r\n\r\n let isFocused = false;\r\n let isSelected = false;\r\n switch (element) {\r\n case 'filterTd': {\r\n const castedProps = elementProps as IRequiredDomProps['filterTd'];\r\n isFocused =\r\n tableState?.focusedRow === 1 - startDataRowIndex &&\r\n addBoundary(tableState?.focusedColumn ?? 0, 0) - statesColumns ===\r\n castedProps.columnIndex + 1 + (hasNonAdditionalFilters ? 1 : 0);\r\n break;\r\n }\r\n case 'tr': {\r\n const castedProps = elementProps as IRequiredDomProps['tr'];\r\n isFocused = !tableState\r\n ? false\r\n : (tableState.focusedRow === castedProps.rowIndex &&\r\n tableState?.focusedColumn === 0) ||\r\n (Math.floor(tableState?.focusedRow) === castedProps.rowIndex &&\r\n Math.round(tableState?.focusedRow) - tableState.focusedRow !== 0 &&\r\n !!castedProps.isTheExpandedRow);\r\n isSelected =\r\n !castedProps.isTheExpandedRow &&\r\n tableState?.selectedRows.includes(castedProps.rowIndex);\r\n break;\r\n }\r\n case 'headerTr': {\r\n isFocused = !tableState\r\n ? false\r\n : tableState.focusedRow === 0 && tableState?.focusedColumn === 0;\r\n isSelected = false;\r\n break;\r\n }\r\n case 'stateCell': {\r\n const castedProps = elementProps as IRequiredDomProps['td'];\r\n isFocused =\r\n tableState?.focusedRow === castedProps.rowIndex &&\r\n (tableState?.focusedColumn ?? 0) ===\r\n castedProps.columnIndex + 1 + (hasNonAdditionalFilters ? 1 : 0);\r\n break;\r\n }\r\n case 'additionalTd': {\r\n const castedProps = elementProps as IRequiredDomProps['additionalTd'];\r\n isFocused =\r\n tableState?.focusedRow === castedProps.rowIndex &&\r\n (tableState?.focusedColumn ?? 0) === 1;\r\n break;\r\n }\r\n case 'td': {\r\n const castedProps = elementProps as IRequiredDomProps['td'];\r\n isFocused =\r\n tableState?.focusedRow === castedProps.rowIndex &&\r\n (tableState?.focusedColumn ?? 0) - statesColumns ===\r\n castedProps.columnIndex + 1 + (hasNonAdditionalFilters ? 1 : 0);\r\n break;\r\n }\r\n case 'headerStateCell': {\r\n const castedProps = elementProps as IRequiredDomProps['td'];\r\n isFocused =\r\n tableState?.focusedRow ===\r\n castedProps.rowIndex - 1 - startDataRowIndex &&\r\n addBoundary(tableState?.focusedColumn, 0) ===\r\n castedProps.columnIndex + 1 + (hasNonAdditionalFilters ? 1 : 0);\r\n break;\r\n }\r\n case 'th': {\r\n const castedProps = elementProps as IRequiredDomProps['th'];\r\n isFocused =\r\n tableState?.focusedRow === 0 - startDataRowIndex &&\r\n addBoundary((tableState?.focusedColumn ?? 0) - statesColumns, 0) ===\r\n castedProps.columnIndex + 1 + (hasNonAdditionalFilters ? 1 : 0);\r\n break;\r\n }\r\n case 'separator': {\r\n const castedProps = elementProps as IRequiredDomProps['separator'];\r\n isFocused = !tableState\r\n ? false\r\n : tableState.focusedRow === castedProps.rowIndex;\r\n break;\r\n }\r\n default:\r\n break;\r\n }\r\n\r\n return {\r\n columns: tableState?.columns ?? [],\r\n expandedBeforeThisRow,\r\n isEditionMode: tableState?.isEditionMode,\r\n hasNonAdditionalFilters,\r\n rowsLength: element === 'table' ? tableState?.rows.length : '',\r\n isSelected,\r\n isFocused,\r\n startDataRowIndex,\r\n statesColumns: tableState?.statesColumns,\r\n };\r\n}\r\n\r\nexport function getDomProps<ElementType extends keyof IRequiredDomProps>(\r\n state: ReturnType<typeof getDomStoreProps>,\r\n element: ElementType,\r\n elementProps: IRequiredDomProps[typeof element],\r\n): TDomProps {\r\n let returnObject: Omit<TDomProps, 'ref'> = {};\r\n\r\n switch (element) {\r\n case 'filterTd': {\r\n const castedProps = elementProps as IRequiredDomProps['filterTd'];\r\n returnObject = {\r\n 'aria-colindex':\r\n castedProps.columnIndex +\r\n 1 +\r\n (state.statesColumns?.length || 0) +\r\n (state.hasNonAdditionalFilters ? 1 : 0),\r\n 'data-editionmode': state.isEditionMode && state.isFocused,\r\n 'data-focused': state.isFocused,\r\n tabIndex: state.isFocused ? 0 : -1,\r\n 'data-rowindex': 2,\r\n };\r\n break;\r\n }\r\n case 'separator': {\r\n const castedProps = elementProps as IRequiredDomProps['separator'];\r\n returnObject = {\r\n 'aria-rowindex':\r\n castedProps.rowIndex +\r\n state.startDataRowIndex +\r\n 1 +\r\n state.expandedBeforeThisRow,\r\n 'data-focusindex': castedProps.rowIndex + state.startDataRowIndex + 1,\r\n 'aria-selected': state.isSelected,\r\n 'data-focused': state.isFocused,\r\n 'aria-expanded': false,\r\n };\r\n break;\r\n }\r\n case 'table': {\r\n returnObject = {\r\n role: 'treegrid',\r\n 'aria-colcount': state.columns.length,\r\n 'aria-rowcount': state.rowsLength,\r\n };\r\n break;\r\n }\r\n case 'tr': {\r\n const castedProps = elementProps as IRequiredDomProps['tr'];\r\n returnObject = {\r\n 'aria-rowindex':\r\n castedProps.rowIndex +\r\n state.startDataRowIndex +\r\n 1 +\r\n state.expandedBeforeThisRow +\r\n (castedProps.isTheExpandedRow ? 1 : 0),\r\n 'data-focusindex':\r\n castedProps.rowIndex +\r\n state.startDataRowIndex +\r\n 1 +\r\n (castedProps.isTheExpandedRow ? 0.5 : 0),\r\n 'data-rowindex': castedProps.rowIndex,\r\n 'aria-selected': state.isSelected,\r\n 'data-focused': state.isFocused,\r\n 'aria-expanded': castedProps.isThisRowExpanded,\r\n tabIndex: state.isFocused ? 0 : -1,\r\n };\r\n break;\r\n }\r\n case 'headerTr': {\r\n returnObject = {\r\n 'aria-rowindex': 1,\r\n 'data-focusindex': 1,\r\n 'data-rowindex': state.hasNonAdditionalFilters ? -2 : -1,\r\n 'aria-selected': false,\r\n 'data-focused': state.isFocused,\r\n 'aria-expanded': false,\r\n };\r\n break;\r\n }\r\n case 'td': {\r\n const castedProps = elementProps as IRequiredDomProps['td'];\r\n returnObject = {\r\n 'aria-colindex':\r\n castedProps.columnIndex +\r\n 1 +\r\n (state.statesColumns?.length ?? 0) +\r\n (state.hasNonAdditionalFilters ? 1 : 0),\r\n 'data-editionmode': state.isEditionMode && state.isFocused,\r\n 'data-focused': state.isFocused,\r\n tabIndex: state.isFocused ? 0 : -1,\r\n 'data-rowindex': castedProps.rowIndex + state.startDataRowIndex + 1,\r\n };\r\n break;\r\n }\r\n case 'additionalTd': {\r\n const castedProps = elementProps as IRequiredDomProps['td'];\r\n returnObject = {\r\n 'aria-colindex': 1,\r\n 'data-editionmode': state.isEditionMode && state.isFocused,\r\n 'data-focused': state.isFocused,\r\n tabIndex: state.isFocused ? 0 : -1,\r\n 'data-rowindex': castedProps.rowIndex + state.startDataRowIndex + 1,\r\n };\r\n break;\r\n }\r\n case 'stateCell': {\r\n const castedProps = elementProps as IRequiredDomProps['td'];\r\n returnObject = {\r\n 'aria-colindex':\r\n castedProps.columnIndex + 1 + (state.hasNonAdditionalFilters ? 1 : 0),\r\n 'data-editionmode': state.isEditionMode && state.isFocused,\r\n 'data-focused': state.isFocused,\r\n tabIndex: state.isFocused ? 0 : -1,\r\n 'data-rowindex': castedProps.rowIndex + state.startDataRowIndex + 1,\r\n };\r\n break;\r\n }\r\n case 'headerStateCell': {\r\n const castedProps = elementProps as IRequiredDomProps['td'];\r\n returnObject = {\r\n 'aria-colindex':\r\n castedProps.columnIndex + 1 + (state.hasNonAdditionalFilters ? 1 : 0),\r\n 'data-editionmode': state.isEditionMode && state.isFocused,\r\n 'data-focused': state.isFocused,\r\n tabIndex: state.isFocused ? 0 : -1,\r\n 'data-rowindex': castedProps.rowIndex,\r\n };\r\n break;\r\n }\r\n case 'th': {\r\n const castedProps = elementProps as IRequiredDomProps['th'];\r\n returnObject = {\r\n 'aria-colindex':\r\n castedProps.columnIndex +\r\n 1 +\r\n (state.statesColumns?.length ?? 0) +\r\n (state.hasNonAdditionalFilters ? 1 : 0),\r\n 'aria-sort': ['ascending', 'descending', undefined][\r\n ['Asc', 'Desc', null].findIndex(\r\n (current) =>\r\n current === state.columns[castedProps.columnIndex].currentSorting,\r\n )\r\n ] as 'none' | 'ascending' | 'descending' | 'other' | undefined,\r\n 'data-editionmode': state.isEditionMode && state.isFocused,\r\n 'data-focused': state.isFocused,\r\n tabIndex: state.isFocused ? 0 : -1,\r\n 'data-rowindex': 1,\r\n };\r\n break;\r\n }\r\n default:\r\n break;\r\n }\r\n\r\n return returnObject;\r\n}\r\n\r\n/**\r\n * Este hook extrae según el estado de la tabla actual\r\n * y el nombre del elemento al que se le desean calcular\r\n * los atributos que deben mostrarse en el dom para\r\n * cumplir con las reglas de accesibilidad.\r\n *\r\n * @param element Es el nombre del elemento\r\n *\r\n * @param elementProps Las propiedades necesarias que se\r\n * deben suministrar para lograr un cálculo apropiado de\r\n * las propiedades que deben mostrarse.\r\n *\r\n * @param stateSelector Es una función que acepta el estado\r\n * global de la aplicación y devuelve el estado de la tabla\r\n * actual. Este método es necesario ya que el useDomProps\r\n * no sabe contra qué slice va a trabajar.\r\n *\r\n * @returns un objeto que contiene las propiedades\r\n * del DOM que deben destructurarse en el elemento html.\r\n */\r\nexport function useDomProps<ElementType extends keyof IRequiredDomProps>(\r\n element: ElementType,\r\n elementProps: IRequiredDomProps[typeof element],\r\n stateSelector: TUseDomProps,\r\n): TDomProps {\r\n const state = useResponsiveTable(() => {\r\n return getDomStoreProps<ElementType>(element, elementProps, stateSelector);\r\n }, shallowEqual);\r\n\r\n return useMemo(() => {\r\n return getDomProps(state, element, elementProps);\r\n }, [element, elementProps, state]);\r\n}\r\n","/* eslint-disable @typescript-eslint/no-dynamic-delete */\r\nimport { FaSortUp, FaSortDown, FaSort } from '@meronex/icons/fa';\r\nimport React, { CSSProperties } from 'react';\r\nimport { shallowEqual } from 'react-redux';\r\nimport { Box } from '@apia/theme';\r\nimport {\r\n EventEmitter,\r\n TMap,\r\n debugDispatcher,\r\n getSpecificParent,\r\n isChild,\r\n persistentStorage,\r\n useLatest,\r\n} from '@apia/util';\r\nimport { AutoEllipsis, useOtherTagButton } from '@apia/components';\r\nimport { domPropsSelector } from './ResponsiveTable';\r\nimport { useResponsiveTableContext } from './ResponsiveTableContext';\r\nimport { TResponsiveTableSortValue } from './types';\r\nimport { useResponsiveTable } from './store';\r\nimport { useDomProps } from './store/selection/useDomProps';\r\n\r\ninterface IHeaderCell {\r\n /**\r\n * Para ordenar en Apia se usa un índice de columna, que se\r\n * corresponde con su posición en base 0, sin tomar en cuenta\r\n * las columnas adicionales.\r\n */\r\n apiaColumnIndex: number;\r\n columnIndex: number;\r\n inTableColumnIndex: number;\r\n}\r\n\r\nconst widthStorageName = 'tablesWidths';\r\n\r\n/**\r\n * Calcula el ancho de la columna dependiendo del valor establecido,\r\n * si el valor es numérico o un string que contiene un número sin\r\n * unidad, devuelve el doble de ese número para establecer una\r\n * relatividad con los tamaños de las columnas actuales en Apia.\r\n *\r\n * Es decir, como todo en Apia era más chico, los tamaños que se\r\n * establecían antes no quedan visualmente agradables con los\r\n * tamaños actuales, por eso se magnifican multiplicando por 2.\r\n */\r\nfunction getColumnWidth(width?: string | number) {\r\n if (typeof width === 'string') {\r\n if (width.match(/(%|px|vw|vh|vmin|vmax|cm|mm|in|pt|pc)/)) return width;\r\n if (width === '') return 'auto';\r\n const numberValue = Number.parseInt(width, 10);\r\n if (isNaN(numberValue)) return 'auto';\r\n return numberValue;\r\n }\r\n if (typeof width === 'number') return width;\r\n return width;\r\n}\r\ndebugDispatcher.on(\r\n 'cleanTableSizes',\r\n ([tableName]) => {\r\n const currentWidths = persistentStorage[widthStorageName] as TMap<unknown>;\r\n delete currentWidths[tableName as string];\r\n persistentStorage[widthStorageName] = currentWidths;\r\n },\r\n 'Se usa para borrar el estado de una tabla. Uso: dd.cleanTableSizes(\"TableName\")',\r\n);\r\nfunction makeColumnName(tableName: string, columnName: string): string {\r\n return `${tableName}${columnName}`;\r\n}\r\n\r\nconst thWidthEmitter = new (class ThWidthEmitter extends EventEmitter<{\r\n resize: { name: string; width: number };\r\n}> {})();\r\n\r\nconst NoMemoHeaderCell = ({\r\n apiaColumnIndex,\r\n columnIndex,\r\n inTableColumnIndex,\r\n}: IHeaderCell) => {\r\n const { name, onSortChange } = useResponsiveTableContext();\r\n const uniqueId =\r\n (window.location.href.match(/busEntId=(\\d+)/)?.[1] as string) ??\r\n (window.location.href.match(/query=(\\d+)/)?.[1] as string) ??\r\n '';\r\n const isGlobal = window.isGlobal ? 'isGlobal' : 'notGlobal';\r\n const actualName = name + uniqueId + String(isGlobal);\r\n const columns = useResponsiveTable((global) => {\r\n const tableState = global.responsiveTableSlice[name];\r\n return tableState?.columns;\r\n }, shallowEqual);\r\n const column = columns[columnIndex];\r\n const additionalInfoColumns = columns.filter((c) => c.showAsAdditional);\r\n\r\n const storedWidth = (\r\n (persistentStorage[widthStorageName] as TMap<unknown>)?.[\r\n actualName\r\n ] as TMap<unknown>\r\n )?.[column.name] as number;\r\n\r\n const [width, setWidth] = React.useState(storedWidth ?? column.width ?? 200);\r\n const [isResize, setIsResize] = React.useState(storedWidth !== undefined);\r\n\r\n React.useEffect(() => {\r\n return void thWidthEmitter.on('resize', (ev) => {\r\n if (ev.name === makeColumnName(actualName, column.name)) {\r\n setIsResize(true);\r\n setWidth(ev.width);\r\n }\r\n });\r\n }, [column.name, actualName]);\r\n\r\n const isFilterRequired = useResponsiveTable((global) => {\r\n const tableState = global.responsiveTableSlice[name];\r\n const columnFilter = tableState?.filters.find(\r\n (current) => current.column === column.title,\r\n );\r\n return columnFilter?.required;\r\n }, shallowEqual);\r\n\r\n const isSortingAllowed = useResponsiveTable((global) => {\r\n const tableState = global.responsiveTableSlice[name];\r\n return tableState?.allowSorting;\r\n });\r\n\r\n const isLoading = useResponsiveTable((global) => {\r\n const tableState = global.responsiveTableSlice[name];\r\n return tableState?.isLoading;\r\n });\r\n\r\n const domProps = useDomProps(\r\n 'th',\r\n {\r\n columnIndex: inTableColumnIndex,\r\n },\r\n domPropsSelector(name),\r\n );\r\n\r\n const sx: CSSProperties = React.useMemo(\r\n () =>\r\n !isResize\r\n ? {\r\n minWidth:\r\n columnIndex === columns.length - 1\r\n ? '100%'\r\n : getColumnWidth(column.minWidth ?? column.width),\r\n maxWidth:\r\n column.maxWidth !== undefined\r\n ? getColumnWidth(column.maxWidth)\r\n : undefined,\r\n width: getColumnWidth(column.width),\r\n position: 'relative',\r\n }\r\n : {\r\n width: `${width}px`,\r\n minWidth:\r\n columnIndex === columns.length - 1 ? '100%' : `${width}px`,\r\n position: 'relative',\r\n },\r\n [\r\n column.maxWidth,\r\n column.minWidth,\r\n column.width,\r\n columnIndex,\r\n columns.length,\r\n isResize,\r\n width,\r\n ],\r\n );\r\n\r\n const lastIsLoading = useLatest(isLoading);\r\n\r\n const buttonProps = useOtherTagButton(\r\n React.useMemo(\r\n () => ({\r\n className: 'headButton',\r\n onClick: (ev) => {\r\n if (lastIsLoading.current) return;\r\n if (\r\n isChild(ev.target as HTMLElement, (current) =>\r\n current.classList.contains('headButton__resizer'),\r\n )\r\n )\r\n return;\r\n\r\n if (\r\n onSortChange &&\r\n column.allowSorting !== false &&\r\n isSortingAllowed !== false\r\n )\r\n onSortChange({\r\n column,\r\n columnIndex: apiaColumnIndex,\r\n name: column.name,\r\n sortValue: ['Asc', 'Desc'][\r\n column.currentSorting !== 'A' ? 0 : 1\r\n ] as TResponsiveTableSortValue,\r\n });\r\n },\r\n }),\r\n [apiaColumnIndex, column, isSortingAllowed, lastIsLoading, onSortChange],\r\n ),\r\n );\r\n return (\r\n <Box\r\n as=\"th\"\r\n {...({ sx } as any)}\r\n data-columnname={column.name}\r\n title={column.title ?? column.label ?? column.name}\r\n {...buttonProps}\r\n {...domProps}\r\n role=\"rowheader\"\r\n className={`${\r\n isFilterRequired && window.SHOW_REQUIRED_POSITION\r\n ? 'requiredFilterColumn'\r\n : ''\r\n }`}\r\n ref={(el) => {\r\n if (!column?.autoAdjustWidth) return;\r\n if (\r\n el instanceof HTMLElement &&\r\n !el.dataset.resized &&\r\n storedWidth === undefined\r\n ) {\r\n const clone = el.cloneNode(true) as HTMLElement;\r\n const child = clone.querySelector(\r\n '.headButton__label',\r\n ) as HTMLElement;\r\n child.style.opacity = '0';\r\n document.body.append(child);\r\n child.style.position = 'fixed';\r\n child.style.maxWidth = '0';\r\n child.style.minWidth = '0';\r\n child.style.width = '0';\r\n child.style.overflow = 'auto';\r\n child.style.textWrap = 'nowrap';\r\n\r\n window.requestAnimationFrame(() => {\r\n const idealWidth = child.scrollWidth;\r\n const currentWidth = el\r\n .querySelector('.headButton__label')!\r\n .getBoundingClientRect().width;\r\n const elWidth = el.getBoundingClientRect().width;\r\n const diff = idealWidth - currentWidth;\r\n setWidth(elWidth + diff + 5);\r\n\r\n el.dataset.resized = 'true';\r\n });\r\n }\r\n }}\r\n >\r\n <Box as=\"span\" className=\"headButton__container\">\r\n <Box\r\n as=\"span\"\r\n className={`${\r\n isFilterRequired ? 'requiredFilter__Column' : ''\r\n } headButton__label`}\r\n >\r\n <AutoEllipsis\r\n overrideStyles={(el) => {\r\n const th = el.closest('th') as HTMLElement;\r\n return {\r\n width: `${Math.max(\r\n 100,\r\n Number.parseInt(window.getComputedStyle(th).width),\r\n )}px`,\r\n };\r\n }}\r\n >\r\n {column.label}\r\n </AutoEllipsis>\r\n </Box>\r\n <Box as=\"span\" className=\"headButton__sortIcon\">\r\n {column.allowSorting !== false && column.currentSorting === 'A' && (\r\n <FaSortUp />\r\n )}\r\n {column.allowSorting !== false && column.currentSorting === 'D' && (\r\n <FaSortDown />\r\n )}\r\n {column.allowSorting !== false && !column.currentSorting && (\r\n <FaSort />\r\n )}\r\n </Box>\r\n <Box\r\n // sx={{ display: 'none' }}\r\n className=\"headButton__resizer\"\r\n onMouseDown={(ev) => {\r\n if (!isResize) {\r\n const trElement = getSpecificParent(\r\n ev.target as HTMLElement,\r\n (current) => current.tagName === 'TR',\r\n );\r\n\r\n trElement?.querySelectorAll('th').forEach((current) => {\r\n thWidthEmitter.emit('resize', {\r\n name: makeColumnName(\r\n actualName,\r\n current.dataset.columnname as string,\r\n ),\r\n width: (current as HTMLElement).clientWidth,\r\n });\r\n });\r\n\r\n setIsResize(true);\r\n }\r\n\r\n const th = getSpecificParent(\r\n ev.target as HTMLElement,\r\n (current) => current.tagName === 'TH',\r\n );\r\n if (!th) throw new Error('There is no th');\r\n\r\n const initialX = ev.clientX;\r\n const initialWidth = th.clientWidth;\r\n\r\n const resize = (mousemoveEv: MouseEvent) => {\r\n const dif = mousemoveEv.clientX - initialX;\r\n\r\n setWidth(initialWidth + dif);\r\n };\r\n const unsuscribe = () => {\r\n const trElement = getSpecificParent(\r\n ev.target as HTMLElement,\r\n (current) => current.tagName === 'TR',\r\n );\r\n trElement?.querySelectorAll('th').forEach((current) => {\r\n persistentStorage[widthStorageName] = {\r\n ...(persistentStorage[widthStorageName] as TMap<unknown>),\r\n [actualName]: {\r\n ...((\r\n persistentStorage[widthStorageName] as TMap<unknown>\r\n )?.[actualName] as TMap<unknown>),\r\n [current.dataset.columnname as string]: (\r\n current as HTMLElement\r\n ).clientWidth,\r\n },\r\n };\r\n });\r\n //add additional info columns to map with an default with of 100\r\n additionalInfoColumns.forEach((c) => {\r\n persistentStorage[widthStorageName] = {\r\n ...(persistentStorage[widthStorageName] as TMap<unknown>),\r\n [actualName]: {\r\n ...((\r\n persistentStorage[widthStorageName] as TMap<unknown>\r\n )?.[actualName] as TMap<unknown>),\r\n [c.name]: 100,\r\n },\r\n };\r\n });\r\n document.removeEventListener('mousemove', resize);\r\n document.removeEventListener('mouseup', unsuscribe);\r\n };\r\n\r\n document.addEventListener('mousemove', resize);\r\n document.addEventListener('mouseup', unsuscribe);\r\n\r\n return false;\r\n }}\r\n />\r\n </Box>\r\n </Box>\r\n );\r\n};\r\n\r\nexport const HeaderCell = React.memo(NoMemoHeaderCell);\r\n","import React from 'react';\r\nimport { Box, getVariant } from '@apia/theme';\r\nimport { TResponsiveTableRowState } from '../types';\r\n\r\nconst NoMemoRowStatesRenderer = ({\r\n state,\r\n}: {\r\n state: TResponsiveTableRowState;\r\n}) => {\r\n const { Icon } = state;\r\n\r\n return (\r\n <Box\r\n sx={React.useMemo(\r\n () => ({\r\n '&, svg, path': {\r\n color: state.color ?? '',\r\n },\r\n }),\r\n [state.color],\r\n )}\r\n >\r\n <Icon\r\n {...getVariant('inherit')}\r\n title={state.tooltip}\r\n className={`${state.className ?? 'state'}_icon state_icon`}\r\n />\r\n </Box>\r\n );\r\n};\r\n\r\nexport const RowStatesRenderer = React.memo(NoMemoRowStatesRenderer);\r\n","import { domPropsSelector } from './ResponsiveTable';\r\nimport { RowStatesRenderer } from './renderers/RowStatesRenderer';\r\nimport { useResponsiveTableContext } from './ResponsiveTableContext';\r\nimport { useDomProps } from './store/selection/useDomProps';\r\nimport { TResponsiveTableRowState } from './types';\r\nimport { Box } from '@apia/theme';\r\n\r\ninterface IStateCell {\r\n index: number;\r\n isHeader?: boolean;\r\n rowIndex: number;\r\n state?: TResponsiveTableRowState;\r\n}\r\n\r\nexport const StateCell = ({ index, rowIndex, state, isHeader }: IStateCell) => {\r\n const { name } = useResponsiveTableContext();\r\n const domProps = useDomProps(\r\n isHeader ? 'headerStateCell' : 'stateCell',\r\n { columnIndex: index, rowIndex },\r\n domPropsSelector(name),\r\n );\r\n return (\r\n <Box as=\"td\" className=\"stateCell\" {...domProps}>\r\n {state?.Icon ? <RowStatesRenderer state={state} /> : ''}\r\n </Box>\r\n );\r\n};\r\n","import { Box, getVariant, Input, Select } from '@apia/theme';\r\nimport {\r\n TApiaFilter,\r\n TApiaFilterValue,\r\n useIntermediateValue,\r\n usePrevious,\r\n} from '@apia/util';\r\nimport { useResponsiveTableContext } from '../ResponsiveTableContext';\r\nimport { useRef } from 'react';\r\n\r\nconst units = ['B', 'KB', 'MB', 'GB'];\r\nconst NoMemoRangeFilter = ({\r\n filter,\r\n tableName,\r\n className,\r\n}: {\r\n filter: TApiaFilter;\r\n tableName?: string;\r\n className?: string;\r\n}) => {\r\n const { onFilterBlur, onFilterChange, onFilterPressEnter } =\r\n useResponsiveTableContext(tableName);\r\n const filterLow: TApiaFilter = {\r\n ...filter,\r\n changeFiltersTimestamp: filter?.changeFiltersTimestamp,\r\n currentValue: filter.currentValue,\r\n deleteFiltersTimestamp: filter?.deleteFiltersTimestamp,\r\n id: filter.id,\r\n toolTip: filter.toolTip,\r\n type: 'apiaNumber',\r\n };\r\n\r\n const multiplier = useRef(1);\r\n const lastEmittedHigh = useRef<TApiaFilterValue | null>(null);\r\n const lastEmittedLow = useRef<TApiaFilterValue | null>(null);\r\n const lastEmittedMultiplier = useRef(1);\r\n\r\n const previousChangeTimestamp = usePrevious(filter?.changeFiltersTimestamp);\r\n const previousDeleteTimestamp = usePrevious(filter?.deleteFiltersTimestamp);\r\n\r\n if (previousChangeTimestamp.current !== filter?.changeFiltersTimestamp) {\r\n lastEmittedLow.current = filterLow.currentValue;\r\n lastEmittedHigh.current = filterLow.filterToValue || '';\r\n }\r\n if (previousDeleteTimestamp.current !== filter?.deleteFiltersTimestamp) {\r\n lastEmittedLow.current = '';\r\n lastEmittedHigh.current = '';\r\n }\r\n\r\n const emitLow = (\r\n method: ((ev: TApiaFilter) => unknown) | undefined,\r\n currentValue: TApiaFilterValue,\r\n ) => {\r\n const numberValue = currentValue ?? '';\r\n\r\n if (\r\n lastEmittedLow.current === numberValue &&\r\n lastEmittedMultiplier.current === multiplier.current\r\n ) {\r\n return;\r\n }\r\n\r\n lastEmittedLow.current = numberValue;\r\n lastEmittedMultiplier.current = multiplier.current;\r\n const emitValue = numberValue;\r\n\r\n void method?.({\r\n ...filterLow,\r\n currentValue: emitValue,\r\n filterToValue: lastEmittedHigh.current ?? '',\r\n sizeMultiplier: multiplier.current,\r\n });\r\n };\r\n const emitHigh = (\r\n method: ((ev: TApiaFilter) => unknown) | undefined,\r\n currentValue: TApiaFilterValue,\r\n ) => {\r\n const numberValue = currentValue ?? '';\r\n\r\n if (\r\n lastEmittedHigh.current === numberValue &&\r\n lastEmittedMultiplier.current === multiplier.current\r\n ) {\r\n return;\r\n }\r\n\r\n lastEmittedHigh.current = numberValue;\r\n lastEmittedMultiplier.current = multiplier.current;\r\n const emitValue = numberValue;\r\n\r\n void method?.({\r\n ...filterLow,\r\n currentValue: lastEmittedLow.current ?? '',\r\n filterToValue: emitValue,\r\n sizeMultiplier: multiplier.current,\r\n });\r\n };\r\n\r\n const [lowValue, setLowValue] = useIntermediateValue(filterLow.currentValue);\r\n const [highValue, setHighValue] = useIntermediateValue(\r\n filterLow.filterToValue,\r\n );\r\n const [unit, setUnit] = useIntermediateValue(filterLow.sizeMultiplier);\r\n\r\n return (\r\n <Box\r\n className={`ApiaFilter__Range ${className || ''}`}\r\n {...getVariant('layout.common.filters.rangeFilter')}\r\n >\r\n <Box className=\"ApiaFilter__Range__Low\">\r\n <Input\r\n onChange={({ target: { value: currentValue } }) => {\r\n setLowValue(currentValue);\r\n emitLow(onFilterChange, currentValue);\r\n }}\r\n onBlur={({ target: { value: currentValue } }) => {\r\n emitLow(onFilterBlur, currentValue);\r\n }}\r\n onKeyDown={({ code, target }) => {\r\n if (code === 'Enter') {\r\n emitLow(onFilterPressEnter, (target as HTMLInputElement).value);\r\n }\r\n }}\r\n value={lowValue}\r\n />\r\n </Box>\r\n {' - '}\r\n <Box className=\"ApiaFilter__Range__High\">\r\n <Input\r\n onChange={({ target: { value: currentValue } }) => {\r\n setHighValue(currentValue);\r\n emitHigh(onFilterChange, currentValue);\r\n }}\r\n onBlur={({ target: { value: currentValue } }) => {\r\n emitHigh(onFilterBlur, currentValue);\r\n }}\r\n onKeyDown={({ code, target }) => {\r\n if (code === 'Enter') {\r\n emitHigh(onFilterPressEnter, (target as HTMLInputElement).value);\r\n }\r\n }}\r\n value={highValue}\r\n />\r\n </Box>\r\n {filter.isSize && (\r\n <Select\r\n className=\"ApiaFilter__Range__UnitSelector\"\r\n onChange={(ev) => {\r\n const unit = ev.target.value;\r\n const index = units.indexOf(unit);\r\n if (index !== -1) {\r\n multiplier.current = 2 ** (index * 10);\r\n setUnit(multiplier.current);\r\n /**\r\n * It's enough to fire event on low because it updates the multiplier in the original filter\r\n */\r\n emitLow(onFilterChange, lastEmittedLow.current ?? '');\r\n }\r\n }}\r\n value={units[Math.log2(unit || 1) / 10]}\r\n >\r\n {units.map((c) => (\r\n <option key={c} value={c}>\r\n {c}\r\n </option>\r\n ))}\r\n </Select>\r\n )}\r\n </Box>\r\n );\r\n};\r\n\r\nexport const RangeFilter = NoMemoRangeFilter;\r\n","import { Input } from '@apia/theme';\r\nimport React from 'react';\r\nimport { TApiaFilter, TApiaFilterValue } from '@apia/util';\r\nimport { ApiaFilter } from '@apia/components';\r\nimport { useResponsiveTableContext } from './ResponsiveTableContext';\r\nimport { domPropsSelector } from './ResponsiveTable';\r\nimport { RangeFilter } from './filters/RangeFilter';\r\nimport { useDomProps } from './store/selection/useDomProps';\r\nimport { TResponsiveTableContextProps } from './types';\r\n\r\ninterface IFilterCell {\r\n columnIndex: number;\r\n filter?: TApiaFilter;\r\n Renderer?: ReturnType<\r\n NonNullable<TResponsiveTableContextProps['FiltersRenderer']>\r\n >;\r\n}\r\n\r\nexport const FilterCell = ({ columnIndex, filter, Renderer }: IFilterCell) => {\r\n const { name, onFilterBlur, onFilterChange, onFilterPressEnter } =\r\n useResponsiveTableContext();\r\n const domProps = useDomProps(\r\n 'filterTd',\r\n {\r\n columnIndex,\r\n },\r\n domPropsSelector(name),\r\n );\r\n\r\n const handleOnBlur = React.useCallback(\r\n (currentValue: TApiaFilterValue) => {\r\n if (filter && onFilterBlur) onFilterBlur({ ...filter, currentValue });\r\n },\r\n [filter, onFilterBlur],\r\n );\r\n\r\n const handleOnChange = React.useCallback(\r\n (currentValue: TApiaFilterValue) => {\r\n if (filter && onFilterChange)\r\n return onFilterChange({ ...filter, currentValue });\r\n return true;\r\n },\r\n [filter, onFilterChange],\r\n );\r\n\r\n const handleOnPressEnter = React.useCallback(\r\n (currentValue: TApiaFilterValue) => {\r\n if (filter && onFilterPressEnter)\r\n onFilterPressEnter({ ...filter, currentValue });\r\n },\r\n [filter, onFilterPressEnter],\r\n );\r\n\r\n function findFilter() {\r\n if (filter?.isRange) {\r\n return <RangeFilter filter={filter} />;\r\n }\r\n if (filter && !(filter.asAdditional || !filter.column || filter.isRange)) {\r\n return (\r\n <ApiaFilter\r\n onBlur={handleOnBlur}\r\n onChange={handleOnChange}\r\n onPressEnter={handleOnPressEnter}\r\n filter={filter}\r\n />\r\n );\r\n }\r\n\r\n let label: string;\r\n if (filter && (filter.asAdditional || !filter.column || filter.isRange)) {\r\n label = window.LBL_ADDITIONAL_FILTER;\r\n } else {\r\n label = window.LBL_NO_COLUMN_FILTER;\r\n }\r\n\r\n return <Input aria-label={label} disabled />;\r\n }\r\n return (\r\n <td {...domProps}>\r\n {Renderer ? <Renderer filter={filter!} /> : findFilter()}\r\n </td>\r\n );\r\n};\r\n","import { useUpdateEffect } from 'ahooks';\r\nimport React, { useState } from 'react';\r\nimport {\r\n customEvents,\r\n getLabel,\r\n persistentStorage,\r\n TApiaFilter,\r\n} from '@apia/util';\r\nimport { shallowEqual } from '@apia/store';\r\nimport { useOtherTagButton } from '@apia/components';\r\nimport { Icon } from '@apia/icons';\r\nimport { HeaderCell } from './HeaderCell';\r\nimport { useResponsiveTableContext } from './ResponsiveTableContext';\r\nimport { useResponsiveTable } from './store';\r\nimport { StateCell } from './StateCell';\r\nimport { FilterCell } from './FilterCell';\r\nimport { useDomProps } from './store/selection/useDomProps';\r\nimport { domPropsSelector } from './ResponsiveTable';\r\nimport { ISelectableState } from './store/selection/types';\r\n\r\ndeclare global {\r\n interface Window {\r\n focusedRow: number;\r\n focusedColumn: number;\r\n hasNonAdditionalFilters: boolean;\r\n }\r\n}\r\n\r\nconst NoMemoHeader = () => {\r\n const { name, FiltersRenderer, showFilters } = useResponsiveTableContext();\r\n\r\n const columns = useResponsiveTable(\r\n (global) => global.responsiveTableSlice[name]?.columns,\r\n );\r\n const hasNonAdditionalFilters = useResponsiveTable(\r\n (global) => global.responsiveTableSlice[name]?.hasNonAdditionalFilters,\r\n );\r\n const focusedColumn = useResponsiveTable(\r\n (global) => global.responsiveTableSlice[name]?.focusedColumn,\r\n );\r\n const focusedRow = useResponsiveTable(\r\n (global) => global.responsiveTableSlice[name]?.focusedRow,\r\n );\r\n\r\n const statesColumns = useResponsiveTable((global) => {\r\n const state = global.responsiveTableSlice[name];\r\n\r\n return Array(\r\n Math.max(\r\n 0,\r\n state?.reserveColumnsForStates || 0,\r\n state?.statesColumns?.length || 0,\r\n ),\r\n )\r\n .fill(1)\r\n .map((_, index) => {\r\n const r: ISelectableState['statesColumns'][0] & { id: string } = {\r\n Icon: '',\r\n iconColor: 'transparent',\r\n id: String(index),\r\n tooltip: '',\r\n ...(state.statesColumns?.[index] as any),\r\n };\r\n return r;\r\n });\r\n });\r\n\r\n const filters = useResponsiveTable<\r\n {\r\n columnIndex: number;\r\n definition: TApiaFilter;\r\n }[]\r\n >(\r\n (global) => {\r\n const tableState = global.responsiveTableSlice[name];\r\n const returnObject = tableState?.filters\r\n ?.map((current) => ({\r\n columnIndex: tableState.columns.findIndex(\r\n (search) => search.name === current.column,\r\n ),\r\n definition: current,\r\n }))\r\n .filter((current) => current.columnIndex >= 0);\r\n\r\n return returnObject;\r\n },\r\n (a, b) => {\r\n return (\r\n a?.length === b?.length &&\r\n a?.reduce<boolean>((result, current, index) => {\r\n return (\r\n result && shallowEqual(current.definition, b[index].definition)\r\n );\r\n }, true)\r\n );\r\n },\r\n );\r\n\r\n const additionalColumns = React.useMemo(\r\n () =>\r\n columns?.reduce(\r\n (count, column) => count + (column.showAsAdditional ? 1 : 0),\r\n 0,\r\n ),\r\n [columns],\r\n );\r\n\r\n const [isFiltersRowVisible, setIsFiltersRowVisible] = React.useState<boolean>(\r\n showFilters ?? false,\r\n );\r\n React.useEffect(() => {\r\n persistentStorage.showResponsiveTableFilters = isFiltersRowVisible;\r\n }, [isFiltersRowVisible]);\r\n\r\n const buttonProps = useOtherTagButton(\r\n React.useMemo(\r\n () => ({\r\n className: 'additionalColumn',\r\n onClick: () => setIsFiltersRowVisible((current) => !current),\r\n }),\r\n [],\r\n ),\r\n );\r\n\r\n const [ref, setRef] = useState<HTMLTableRowElement | null>(null);\r\n\r\n useUpdateEffect(() => {\r\n const handleFocus = (ev: Event) => {\r\n ev.stopPropagation();\r\n setIsFiltersRowVisible(true);\r\n };\r\n ref?.addEventListener(customEvents.focus, handleFocus);\r\n return () => {\r\n ref?.removeEventListener(customEvents.focus, handleFocus);\r\n };\r\n }, [ref]);\r\n\r\n const domProps = useDomProps('headerTr', {}, domPropsSelector(name));\r\n\r\n return (\r\n <thead>\r\n <tr {...domProps}>\r\n {(additionalColumns > 0 || hasNonAdditionalFilters) && (\r\n <th\r\n aria-colindex={1}\r\n aria-rowindex={1}\r\n data-focused={\r\n focusedColumn === 1 &&\r\n focusedRow === -1 - (hasNonAdditionalFilters ? 1 : 0)\r\n }\r\n {...buttonProps}\r\n tabIndex={\r\n focusedColumn === 1 &&\r\n focusedRow === -1 - (hasNonAdditionalFilters ? 1 : 0)\r\n ? 0\r\n : -1\r\n }\r\n aria-label={\r\n isFiltersRowVisible\r\n ? getLabel('lblHideFilters').text\r\n : getLabel('lblShowFilters').text\r\n }\r\n role=\"rowheader\"\r\n >\r\n {hasNonAdditionalFilters ? (\r\n <Icon\r\n className=\"filterButton\"\r\n name=\"Filter\"\r\n title={\r\n isFiltersRowVisible\r\n ? getLabel('lblHideFilters').text\r\n : getLabel('lblShowFilters').text\r\n }\r\n aria-label={\r\n isFiltersRowVisible\r\n ? getLabel('lblHideFilters').text\r\n : getLabel('lblShowFilters').text\r\n }\r\n />\r\n ) : (\r\n <>\r\n <span style={{ display: 'none' }}>\r\n {isFiltersRowVisible\r\n ? getLabel('lblHideFilters').text\r\n : getLabel('lblShowFilters').text}\r\n </span>\r\n <span> </span>\r\n </>\r\n )}\r\n </th>\r\n )}\r\n {statesColumns.map(({ id, ...state }, i) => (\r\n <StateCell isHeader key={id} index={i} rowIndex={1} state={state} />\r\n ))}\r\n {columns\r\n ?.map((current, actualColumnIndex) => ({\r\n ...current,\r\n actualTableColumnIndex: actualColumnIndex,\r\n }))\r\n .filter((current) => !current.showAsAdditional)\r\n .map((current, columnIndex) => {\r\n if (current.hidden) return null;\r\n\r\n return (\r\n <HeaderCell\r\n apiaColumnIndex={current.actualTableColumnIndex}\r\n columnIndex={current.actualTableColumnIndex}\r\n inTableColumnIndex={columnIndex}\r\n key={current.name}\r\n />\r\n );\r\n })}\r\n </tr>\r\n {(filters?.length ?? 0) > 0 && (\r\n <tr\r\n aria-rowindex={2}\r\n data-rowindex={-1}\r\n ref={setRef}\r\n data-focusindex={2}\r\n className={`responsiveTable__filters__row ${\r\n isFiltersRowVisible ? '' : 'hidden'\r\n }`}\r\n >\r\n {(additionalColumns > 0 || hasNonAdditionalFilters) && (\r\n <td\r\n className=\"noFilter\"\r\n aria-colindex={1}\r\n aria-rowindex={2}\r\n tabIndex={focusedColumn === 1 && focusedRow === -1 ? 0 : -1}\r\n data-focused={focusedColumn === 1 && focusedRow === -1}\r\n >\r\n \r\n </td>\r\n )}\r\n {statesColumns.map(({ id }, i) => (\r\n <StateCell isHeader key={id} index={i} rowIndex={2} />\r\n ))}\r\n {columns\r\n ?.filter((current) => !current.showAsAdditional && !current.hidden)\r\n .map((current, columnIndex) => {\r\n const filter = filters.find(\r\n (search) => search.definition.column === current.name,\r\n );\r\n\r\n const RenderComponent = filter\r\n ? FiltersRenderer?.(String(filter.definition.id))\r\n : undefined;\r\n\r\n return current.showAsAdditional ? null : (\r\n <FilterCell\r\n key={current.name}\r\n columnIndex={columnIndex}\r\n filter={filter?.definition}\r\n Renderer={RenderComponent}\r\n />\r\n );\r\n })}\r\n </tr>\r\n )}\r\n </thead>\r\n );\r\n};\r\n\r\nexport const Header = React.memo(NoMemoHeader);\r\n","import React from 'react';\r\nimport { Box } from '@apia/theme';\r\nimport { TResponsiveTableCellRendererProps } from '../types';\r\n\r\nconst NoMemoAdditionalColumnDefaultRenderer = ({\r\n column,\r\n cell,\r\n}: TResponsiveTableCellRendererProps) => {\r\n return (\r\n <Box\r\n className={`${cell.className ?? ''} responsiveTable__additionalInfoItem`}\r\n id={cell.id}\r\n title={cell.title}\r\n >\r\n <Box as=\"strong\">{column.label ?? column.name}:</Box> {cell.children}\r\n </Box>\r\n );\r\n};\r\n\r\nexport const AdditionalColumnDefaultRenderer = React.memo(\r\n NoMemoAdditionalColumnDefaultRenderer,\r\n);\r\n","import { domPropsSelector } from './ResponsiveTable';\r\nimport { useResponsiveTableContext } from './ResponsiveTableContext';\r\nimport { useDomProps } from './store/selection/useDomProps';\r\n\r\nexport const SeparatorCell = ({\r\n colSpan,\r\n rowIndex,\r\n}: {\r\n colSpan: number;\r\n rowIndex: number;\r\n}) => {\r\n const { name } = useResponsiveTableContext();\r\n const domProps = useDomProps(\r\n 'separator',\r\n { rowIndex },\r\n domPropsSelector(name),\r\n );\r\n return (\r\n <td className=\"row__separator__cell\" colSpan={colSpan} {...domProps} />\r\n );\r\n};\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport React, { useMemo } from 'react';\r\nimport { Box } from '@apia/theme';\r\nimport {\r\n TResponsiveTableRowRenderer,\r\n TResponsiveTableRowRendererProps,\r\n} from '../types';\r\n\r\nconst NoMemoDefaultRowRenderer: TResponsiveTableRowRenderer = React.forwardRef<\r\n HTMLTableRowElement,\r\n TResponsiveTableRowRendererProps\r\n>(({ row, rowIndex, ...props }, currentRef) => (\r\n <Box\r\n as={'tr' as any}\r\n sx={useMemo(\r\n () => ({\r\n '&.colored, & > *': {\r\n color: row.color,\r\n background: row.background,\r\n },\r\n }),\r\n [row.background, row.color],\r\n )}\r\n ref={currentRef as React.RefObject<HTMLTableRowElement>}\r\n data-test-id={props.id}\r\n {...props}\r\n />\r\n));\r\n\r\nNoMemoDefaultRowRenderer.displayName = 'DefaultRowRenderer';\r\n\r\nexport const DefaultRowRenderer = NoMemoDefaultRowRenderer;\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport React, { useMemo } from 'react';\r\nimport { Box } from '@apia/theme';\r\nimport { TResponsiveTableCellRendererProps } from '../types';\r\nimport { AutoEllipsis } from '@apia/components';\r\nimport { useResponsiveTableContext } from '../ResponsiveTableContext';\r\n\r\nconst NoMemoDefaultCellRenderer = React.forwardRef<\r\n HTMLTableCellElement,\r\n TResponsiveTableCellRendererProps\r\n>(\r\n (\r\n {\r\n cell: { Renderer, rendererProps, AccordionRenderer, ariaLabel, ...cell },\r\n column,\r\n row,\r\n ...props\r\n },\r\n currentRef,\r\n ) => {\r\n const { avoidAutoEllipsis } = useResponsiveTableContext();\r\n return (\r\n <Box\r\n as={'td' as any}\r\n sx={useMemo(\r\n () => ({\r\n '&.colored': {\r\n background: cell.background,\r\n color: cell.color,\r\n fontWeight: 'bold',\r\n },\r\n }),\r\n [cell.background, cell.color],\r\n )}\r\n ref={currentRef as React.RefObject<HTMLTableCellElement>}\r\n {...props}\r\n {...cell}\r\n aria-label={ariaLabel as string}\r\n >\r\n {!avoidAutoEllipsis ? (\r\n <AutoEllipsis\r\n overrideStyles={(el) => {\r\n const td = el.closest('td') as HTMLElement;\r\n\r\n return {\r\n width: window.getComputedStyle(td).width,\r\n };\r\n }}\r\n >\r\n {props.children ?? cell.children}\r\n </AutoEllipsis>\r\n ) : (\r\n (props.children ?? cell.children)\r\n )}\r\n </Box>\r\n );\r\n },\r\n);\r\nNoMemoDefaultCellRenderer.displayName = 'DefaultCellRenderer';\r\nexport const DefaultCellRenderer = NoMemoDefaultCellRenderer;\r\n","import React, { FC } from 'react';\r\nimport { shallowEqual } from 'react-redux';\r\nimport { domPropsSelector } from './ResponsiveTable';\r\nimport { DefaultCellRenderer } from './renderers/DefaultCellRenderer';\r\nimport { useResponsiveTableContext } from './ResponsiveTableContext';\r\nimport { useDomProps } from './store/selection/useDomProps';\r\nimport { useResponsiveTable } from './store';\r\nimport { getFocusSelector } from '@apia/util';\r\n\r\ninterface ICell {\r\n columnIndex: number;\r\n inTableColumnIndex: number;\r\n rowIndex: number;\r\n}\r\n\r\nconst NoMemoCell: FC<ICell> = ({\r\n columnIndex,\r\n inTableColumnIndex,\r\n rowIndex,\r\n}) => {\r\n const { name } = useResponsiveTableContext();\r\n const domProps = useDomProps(\r\n 'td',\r\n { columnIndex: inTableColumnIndex, rowIndex },\r\n domPropsSelector(name),\r\n );\r\n\r\n const cell = useResponsiveTable((global) => {\r\n const tableState = global.responsiveTableSlice[name];\r\n\r\n return tableState?.rows[rowIndex]?.cells[columnIndex];\r\n }, shallowEqual);\r\n\r\n const column = useResponsiveTable((global) => {\r\n const tableState = global.responsiveTableSlice[name];\r\n return tableState?.columns[columnIndex];\r\n }, shallowEqual);\r\n\r\n const row = useResponsiveTable((global) => {\r\n const tableState = global.responsiveTableSlice[name];\r\n return tableState?.rows[rowIndex];\r\n }, shallowEqual);\r\n\r\n const Renderer = React.useMemo(\r\n () => cell?.Renderer ?? column.Renderer ?? DefaultCellRenderer,\r\n [cell?.Renderer, column.Renderer],\r\n );\r\n\r\n if (!Renderer || !cell)\r\n return row.separator ? <div className=\"separator\"></div> : null;\r\n\r\n return (\r\n <Renderer\r\n {...(domProps as Omit<React.HTMLProps<HTMLTableCellElement>, 'ref'>)}\r\n cell={cell}\r\n column={column}\r\n row={row}\r\n onFocus={(ev) => {\r\n if (ev.target instanceof HTMLElement) {\r\n const cell = ev.target.closest<HTMLElement>('td,th');\r\n if (ev.target === cell) {\r\n const widget = cell?.querySelector<HTMLElement>(getFocusSelector());\r\n if (cell && widget) {\r\n widget.focus();\r\n cell.tabIndex = -1;\r\n }\r\n }\r\n }\r\n }}\r\n />\r\n );\r\n};\r\n\r\nexport const Cell = React.memo(NoMemoCell);\r\n","import uniqueId from 'lodash-es/uniqueId';\r\nimport React, { useRef } from 'react';\r\nimport { shallowEqual } from 'react-redux';\r\nimport { MdKeyboardArrowRight, MdKeyboardArrowDown } from '@meronex/icons/md/';\r\nimport { Box } from '@apia/theme';\r\nimport { IconButton } from '@apia/components';\r\nimport { getVariant } from '@apia/theme';\r\nimport { domPropsSelector } from './ResponsiveTable';\r\nimport { TResponsiveTableCell, TResponsiveTableColumn } from './types';\r\nimport { AdditionalColumnDefaultRenderer } from './renderers/AdditionalColumnDefaultRenderer';\r\nimport { SeparatorCell } from './SeparatorCell';\r\nimport { DefaultRowRenderer } from './renderers/DefaultRowRenderer';\r\nimport { useResponsiveTableContext } from './ResponsiveTableContext';\r\nimport {\r\n responsiveTableActions,\r\n responsiveTableStore,\r\n useResponsiveTable,\r\n} from './store';\r\nimport { useDomProps } from './store/selection/useDomProps';\r\nimport { StateCell } from './StateCell';\r\nimport { Cell } from './Cell';\r\nimport { getLabel, scrollParentIntoElement } from '@apia/util';\r\n\r\ninterface IRow {\r\n rowIndex: number;\r\n}\r\n\r\ntype TAdditionalCell = {\r\n cell: TResponsiveTableCell;\r\n column: TResponsiveTableColumn;\r\n columnIndex: number;\r\n};\r\n\r\nconst NoMemoRow = ({ rowIndex }: IRow) => {\r\n const { name } = useResponsiveTableContext();\r\n\r\n const { columns, hasNonAdditionalFilters, isScrolledIntoView } =\r\n useResponsiveTable((global) => {\r\n const tableState = global.responsiveTableSlice[name];\r\n return {\r\n columns: tableState?.columns ?? [],\r\n hasNonAdditionalFilters: tableState?.hasNonAdditionalFilters,\r\n isScrolledIntoView: tableState.scrollIntoViewRow === rowIndex,\r\n };\r\n }, shallowEqual);\r\n const row = useResponsiveTable(\r\n (global) => global.responsiveTableSlice[name].rows[rowIndex],\r\n shallowEqual,\r\n );\r\n const additionalCells: TAdditionalCell[] = useResponsiveTable(\r\n (global) => {\r\n const tableState = global.responsiveTableSlice[name];\r\n return tableState.columns\r\n .map((current, index) =>\r\n current.showAsAdditional\r\n ? {\r\n index,\r\n column: current,\r\n }\r\n : null,\r\n )\r\n .filter(\r\n (\r\n current,\r\n ): current is {\r\n index: number;\r\n column: TResponsiveTableColumn;\r\n } => !!current,\r\n )\r\n .map((current) => {\r\n return {\r\n cell: tableState.rows[rowIndex]?.cells[current.index],\r\n column: current.column,\r\n columnIndex: current.index,\r\n };\r\n });\r\n },\r\n (currentValue, newValue) => {\r\n return currentValue.reduce<boolean>(\r\n (accumulatedBoolean, currentCell, cellIndex) => {\r\n return (\r\n accumulatedBoolean && shallowEqual(currentCell, newValue[cellIndex])\r\n );\r\n },\r\n true,\r\n );\r\n },\r\n );\r\n const { isDragging, isExpanded, shouldForbidSelection } = useResponsiveTable(\r\n (global) => {\r\n const tableState = global.responsiveTableSlice[name];\r\n return {\r\n isExpanded: tableState.expandedRows.includes(rowIndex),\r\n isDragging: tableState.draggingRow === rowIndex,\r\n shouldForbidSelection: tableState.rows[rowIndex]?.forbidSelection,\r\n };\r\n },\r\n shallowEqual,\r\n );\r\n\r\n const domProps = useDomProps(\r\n 'tr',\r\n {\r\n isThisRowExpanded: isExpanded,\r\n rowIndex,\r\n },\r\n domPropsSelector(name),\r\n );\r\n\r\n const expandedRowDomProps = useDomProps(\r\n 'tr',\r\n {\r\n isTheExpandedRow: true,\r\n rowIndex,\r\n },\r\n domPropsSelector(name),\r\n );\r\n\r\n const handleExpandedState = React.useCallback(\r\n (ev: boolean | React.MouseEvent) => {\r\n const willBeExpanded = typeof ev === 'boolean' ? ev : !isExpanded;\r\n if (!willBeExpanded)\r\n responsiveTableStore.dispatch(\r\n responsiveTableActions.update({\r\n tableName: name,\r\n expandedRows: responsiveTableStore\r\n .getState()\r\n .responsiveTableSlice[\r\n name\r\n ].expandedRows.filter((current) => current !== rowIndex),\r\n }),\r\n );\r\n else\r\n responsiveTableStore.dispatch(\r\n responsiveTableActions.update({\r\n tableName: name,\r\n expandedRows: [\r\n ...responsiveTableStore.getState().responsiveTableSlice[name]\r\n .expandedRows,\r\n rowIndex,\r\n ],\r\n }),\r\n );\r\n },\r\n [isExpanded, name, rowIndex],\r\n );\r\n\r\n const statesCount = useResponsiveTable((globalState) => {\r\n const state = globalState.responsiveTableSlice[name];\r\n return Math.max(\r\n state?.reserveColumnsForStates || 0,\r\n state?.statesColumns?.length ?? 0,\r\n 0,\r\n );\r\n }, shallowEqual);\r\n\r\n const states = React.useMemo(\r\n () => (row.states ?? []).map((current) => ({ ...current, id: uniqueId() })),\r\n [row.states],\r\n );\r\n\r\n const { ref, ...additionalCellDomProps } = useDomProps(\r\n 'additionalTd',\r\n { rowIndex },\r\n domPropsSelector(name),\r\n );\r\n\r\n const Renderer = React.useMemo(\r\n () => row.renderer ?? DefaultRowRenderer,\r\n [row.renderer],\r\n );\r\n\r\n const hasScrolled = useRef(false);\r\n\r\n return (\r\n <>\r\n <Renderer\r\n {...domProps}\r\n row={row}\r\n rowIndex={rowIndex}\r\n className={`responsiveTable__row ${row.isHidden ? 'hidden' : ''} ${\r\n domProps['aria-selected'] ? 'selected' : ''\r\n } ${shouldForbidSelection ? 'non-selectable' : ''} ${states\r\n .map((current) => current.className)\r\n .join(' ')} ${row.className ?? ''} ${\r\n row.separator ? 'row__separator' : ''\r\n } ${isDragging ? 'draggingRow' : ''}`}\r\n onKeyDown={React.useCallback(\r\n (ev: React.KeyboardEvent) => {\r\n if (ev.key.toLowerCase() === 'arrowleft' && ev.ctrlKey) {\r\n ev.preventDefault();\r\n ev.stopPropagation();\r\n handleExpandedState(false);\r\n }\r\n if (ev.key.toLowerCase() === 'arrowright' && ev.ctrlKey) {\r\n ev.preventDefault();\r\n ev.stopPropagation();\r\n handleExpandedState(true);\r\n }\r\n },\r\n [handleExpandedState],\r\n )}\r\n {...{\r\n ref: (el: HTMLElement) => {\r\n if (el && isScrolledIntoView && !hasScrolled.current) {\r\n hasScrolled.current = true;\r\n scrollParentIntoElement(el);\r\n }\r\n },\r\n }}\r\n >\r\n {row.separator ? (\r\n <SeparatorCell\r\n colSpan={\r\n (additionalCells.length > 0 || hasNonAdditionalFilters ? 1 : 0) +\r\n statesCount +\r\n columns.filter((current) => !current.showAsAdditional).length\r\n }\r\n rowIndex={rowIndex}\r\n />\r\n ) : (\r\n <>\r\n {(additionalCells.length > 0 || hasNonAdditionalFilters) && (\r\n <td className=\"additionalInfo__cell\" {...additionalCellDomProps}>\r\n {additionalCells.length > 0 && (\r\n <IconButton\r\n size={'Lg'}\r\n {...getVariant('icon-outline')}\r\n icon={\r\n isExpanded ? MdKeyboardArrowDown : MdKeyboardArrowRight\r\n }\r\n aria-label={\r\n isExpanded\r\n ? getLabel('lblCollapseRow').text\r\n : getLabel('lblExpandRow').text\r\n }\r\n className=\"moreInformationButton\"\r\n onClick={handleExpandedState}\r\n />\r\n )}\r\n </td>\r\n )}\r\n {Array(statesCount)\r\n .fill('')\r\n .map((_, i) => {\r\n return (\r\n <StateCell\r\n key={states[i]?.id ?? i}\r\n index={i}\r\n state={states[i]}\r\n rowIndex={rowIndex}\r\n />\r\n );\r\n })}\r\n {columns\r\n .map((current, actualColumnIndex) => ({\r\n ...current,\r\n actualColumnIndex,\r\n }))\r\n .filter((current) => !current.showAsAdditional)\r\n .map((current, inTableColumnIndex) => {\r\n if (current.hidden) return null;\r\n return (\r\n <Cell\r\n key={current.name}\r\n columnIndex={current.actualColumnIndex}\r\n rowIndex={rowIndex}\r\n inTableColumnIndex={inTableColumnIndex}\r\n />\r\n );\r\n })}\r\n </>\r\n )}\r\n </Renderer>\r\n {isExpanded && (\r\n <tr className=\"expandedRow\" {...expandedRowDomProps}>\r\n <td\r\n colSpan={\r\n columns.length - additionalCells.length + states.length + 1\r\n }\r\n >\r\n <Box className=\"responsiveTable__additionalInfoContainer\">\r\n {additionalCells.map((current) => {\r\n const { Renderer: ColumnRenderer } = current.column;\r\n if (ColumnRenderer)\r\n return (\r\n <ColumnRenderer\r\n key={current.column.name}\r\n cell={current.cell}\r\n column={current.column}\r\n row={row}\r\n />\r\n );\r\n return (\r\n <AdditionalColumnDefaultRenderer\r\n key={current.column.name}\r\n cell={current.cell}\r\n column={current.column}\r\n row={row}\r\n />\r\n );\r\n })}\r\n </Box>\r\n </td>\r\n </tr>\r\n )}\r\n </>\r\n );\r\n};\r\n\r\nexport const Row = React.memo(NoMemoRow);\r\n","import { createContext } from 'react';\r\n\r\n/**\r\n * Este contexto es necesario para resolver el problema de que no se muestra\r\n * la etiqueta correcta cuando la tabla está cargando.\r\n */\r\nexport const TableLoadingContext = createContext<{ current: boolean }>({\r\n current: true,\r\n});\r\n","import { Box } from '@apia/theme';\r\nimport { useResponsiveTableContext } from '../ResponsiveTableContext';\r\nimport { useContext } from 'react';\r\nimport { TableLoadingContext } from '../chanchullos/LoadingContext';\r\n\r\nexport const NoRegistersRenderer = () => {\r\n const { labels } = useResponsiveTableContext();\r\n const { current } = useContext(TableLoadingContext);\r\n\r\n return (\r\n <Box className=\"no__registers\">{current ? labels.noRegisters : ''}</Box>\r\n );\r\n};\r\n","import React from 'react';\r\nimport { shallowEqual } from 'react-redux';\r\nimport { Box } from '@apia/theme';\r\nimport { getVariant } from '@apia/theme';\r\nimport { Header } from '../Header';\r\nimport { useResponsiveTableContext } from '../ResponsiveTableContext';\r\nimport { Row } from '../Row';\r\nimport { NoRegistersRenderer } from './NoRegistersRenderer';\r\nimport { useDomProps } from '../store/selection/useDomProps';\r\nimport { useResponsiveTable } from '../store';\r\n\r\nconst NoMemoTableRenderer = ({ variant }: { variant?: string }) => {\r\n const { name, label, labels } = useResponsiveTableContext();\r\n const domProps = useDomProps(\r\n 'table',\r\n {},\r\n (global) => global.responsiveTableSlice[name],\r\n );\r\n\r\n const rows = useResponsiveTable((global) => {\r\n const tableState = global.responsiveTableSlice[name];\r\n return tableState?.rows?.map((current) => current.id);\r\n }, shallowEqual);\r\n\r\n const columnsCount = useResponsiveTable(\r\n (global) =>\r\n (global.responsiveTableSlice[name]?.nonAdditionalColumnsCount ?? 0) +\r\n (global.responsiveTableSlice[name]?.hasNonAdditionalFilters ? 1 : 0) +\r\n (global.responsiveTableSlice[name]?.statesColumns?.length ?? 0) +\r\n (global.responsiveTableSlice[name]?.columns.find(\r\n (current) => current.showAsAdditional,\r\n )\r\n ? 1\r\n : 0),\r\n );\r\n\r\n const rowsCount = useResponsiveTable(\r\n (global) => global.responsiveTableSlice[name]?.rows.length || 0,\r\n );\r\n\r\n return (\r\n <Box\r\n {...domProps}\r\n as=\"table\"\r\n className=\"responsiveTable__table\"\r\n {...getVariant(variant || 'layout.common.tables.primary')}\r\n aria-label={label}\r\n >\r\n <Header />\r\n <tbody>\r\n {rowsCount > 0 ? (\r\n rows?.map((row, index) => {\r\n return (\r\n <Row key={row ?? `${row as string}-${index}`} rowIndex={index} />\r\n );\r\n })\r\n ) : labels.noRegisters ? (\r\n <tr>\r\n <td colSpan={columnsCount}>\r\n <NoRegistersRenderer />\r\n </td>\r\n </tr>\r\n ) : null}\r\n </tbody>\r\n </Box>\r\n );\r\n};\r\n\r\nexport const TableRenderer = React.memo(NoMemoTableRenderer);\r\n","import { Box } from '@apia/theme';\r\nimport { FunctionComponent } from 'react';\r\nimport {\r\n TResponsiveTableCell,\r\n TResponsiveTableColumn,\r\n TResponsiveTableRow,\r\n} from '../types';\r\n\r\nexport type TAccordionCellRendererProps<CellProps = Record<string, unknown>> = {\r\n cell: TResponsiveTableCell<CellProps>;\r\n column: TResponsiveTableColumn;\r\n columnIndex: number;\r\n row: TResponsiveTableRow;\r\n rowIndex: number;\r\n};\r\n\r\nexport type TAccordionCellRenderer<CellProps = Record<string, unknown>> =\r\n FunctionComponent<TAccordionCellRendererProps<CellProps>>;\r\n\r\nconst NoMemoAccordionCell: TAccordionCellRenderer = ({ cell, column }) => {\r\n return (\r\n <Box\r\n key={column.name}\r\n className={`responsiveTable__accordionElement__column ${\r\n cell.className ?? ''\r\n }`}\r\n >\r\n <Box as=\"strong\">{column.label ?? column.name}: </Box>\r\n <Box as=\"span\" sx={{ color: cell.color, background: cell.background }}>\r\n {cell?.children}\r\n </Box>\r\n </Box>\r\n );\r\n};\r\n\r\nexport const AccordionCell = NoMemoAccordionCell;\r\n","import React, { memo, useMemo } from 'react';\r\nimport { shallowEqual } from 'react-redux';\r\nimport { useResponsiveTableContext } from '../ResponsiveTableContext';\r\nimport { TResponsiveTableRow } from '../types';\r\nimport { AccordionCell } from './AccordionCell';\r\nimport {\r\n responsiveTableActions,\r\n responsiveTableStore,\r\n useResponsiveTable,\r\n} from '../store';\r\nimport { AccordionItem, IAccordionItemButton } from '@apia/components';\r\n\r\nexport interface IAccordionElement {\r\n row: TResponsiveTableRow;\r\n rowIndex: number;\r\n}\r\n\r\nconst NoMemoAccordionElement = ({ row, rowIndex }: IAccordionElement) => {\r\n const { name } = useResponsiveTableContext();\r\n\r\n const indexColumns = useResponsiveTable((global) => {\r\n const tableState = global.responsiveTableSlice[name];\r\n return tableState?.accordionIndexColumns;\r\n }, shallowEqual);\r\n const columns = useResponsiveTable((global) => {\r\n const tableState = global.responsiveTableSlice[name];\r\n return tableState?.columns;\r\n }, shallowEqual);\r\n\r\n const title = React.useMemo(() => {\r\n if (row.title) return row.title;\r\n if (Array.isArray(indexColumns))\r\n return indexColumns\r\n .map(\r\n (current) =>\r\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\r\n row.cells[current.index].title ||\r\n (row.cells[current.index].children as string),\r\n )\r\n .join(' | ');\r\n return row.cells[0].title ?? (row.cells[0].children as string);\r\n }, [indexColumns, row.cells, row.title]);\r\n const isSelected = useResponsiveTable((global) =>\r\n global.responsiveTableSlice[name].allowSelection !== false\r\n ? global.responsiveTableSlice[name].selectedRows.includes(rowIndex)\r\n : undefined,\r\n );\r\n const isFocused = useResponsiveTable(\r\n (global) => global.responsiveTableSlice[name].focusedRow === rowIndex,\r\n );\r\n const buttonProps = useMemo<IAccordionItemButton>(\r\n () => ({\r\n title,\r\n ariaLabel: title,\r\n label: title,\r\n checked: isSelected,\r\n onChange: (isChecked: boolean) => {\r\n const isMultiple =\r\n responsiveTableStore.getState().responsiveTableSlice[name].isMultiple;\r\n responsiveTableStore.dispatch(\r\n responsiveTableActions.update({\r\n tableName: name,\r\n selectedRows: isMultiple\r\n ? isChecked\r\n ? [\r\n ...responsiveTableStore.getState().responsiveTableSlice[\r\n name\r\n ].selectedRows,\r\n rowIndex,\r\n ]\r\n : responsiveTableStore\r\n .getState()\r\n .responsiveTableSlice[\r\n name\r\n ].selectedRows.filter((current) => current !== rowIndex)\r\n : [rowIndex],\r\n }),\r\n );\r\n },\r\n tabIndex: isFocused ? 0 : -1,\r\n rightButtons: row.accordionButtonProps?.rightButtons,\r\n onUserPressEnter: row.accordionButtonProps?.onUserPressEnter,\r\n domButtonProps: {\r\n buttonSx: {\r\n '&.accordion__item__button .accordion__item__button__label': {\r\n color: row.color,\r\n },\r\n },\r\n },\r\n }),\r\n [\r\n isFocused,\r\n isSelected,\r\n name,\r\n row.accordionButtonProps?.onUserPressEnter,\r\n row.accordionButtonProps?.rightButtons,\r\n row.color,\r\n rowIndex,\r\n title,\r\n ],\r\n );\r\n\r\n if (!Array.isArray(indexColumns) || !columns) return null;\r\n\r\n return (\r\n <AccordionItem id={row.id} buttonProps={buttonProps}>\r\n {columns.map((currentColumn, columnIndex) => {\r\n const Renderer =\r\n row.cells[columnIndex].AccordionRenderer ??\r\n currentColumn.AccordionRenderer ??\r\n AccordionCell;\r\n\r\n return currentColumn.hideFromAccordion ||\r\n currentColumn.showAsAdditional ? null : (\r\n <Renderer\r\n cell={row.cells[columnIndex]}\r\n column={currentColumn}\r\n columnIndex={columnIndex}\r\n key={currentColumn.name}\r\n row={row}\r\n rowIndex={rowIndex}\r\n />\r\n );\r\n })}\r\n\r\n {columns\r\n .filter((current) => !!current.showAsAdditional)\r\n .map((currentColumn, columnIndex) => {\r\n const Renderer =\r\n row.cells[columnIndex].AccordionRenderer ??\r\n currentColumn.AccordionRenderer ??\r\n AccordionCell;\r\n\r\n return currentColumn.hideFromAccordion ? null : (\r\n <Renderer\r\n cell={row.cells[columnIndex]}\r\n column={currentColumn}\r\n columnIndex={columnIndex}\r\n key={currentColumn.name}\r\n row={row}\r\n rowIndex={rowIndex}\r\n />\r\n );\r\n })}\r\n </AccordionItem>\r\n );\r\n};\r\n\r\nexport const AccordionElement = memo(NoMemoAccordionElement);\r\n","import React from 'react';\r\nimport { shallowEqual } from 'react-redux';\r\nimport { useResponsiveTableContext } from '../ResponsiveTableContext';\r\nimport { TResponsiveTableColumn } from '../types';\r\nimport { AccordionElement } from './AccordionElement';\r\nimport { NoRegistersRenderer } from './NoRegistersRenderer';\r\nimport {\r\n responsiveTableActions,\r\n useResponsiveTable,\r\n responsiveTableStore,\r\n} from '../store';\r\nimport { TResponsiveTableIndexColumns } from '../store/types';\r\nimport { Accordion } from '@apia/components';\r\n\r\nconst NoMemoAccordionRenderer = () => {\r\n const { name } = useResponsiveTableContext();\r\n\r\n const { columns, rows } = useResponsiveTable((global) => {\r\n const tableState = global.responsiveTableSlice[name];\r\n return {\r\n columns: tableState?.columns,\r\n rows: tableState?.rows,\r\n };\r\n }, shallowEqual);\r\n\r\n React.useEffect(() => {\r\n /**\r\n * Método para seleccionar qué columnas se utilizarán\r\n * como cabezal en cada fila.\r\n *\r\n * - Si existe al menos una columna marcada con showInAccordionTitle,\r\n * todas las columnas que estén marcadas con esta propiedad serán\r\n * mostradas como parte del título.\r\n *\r\n * - Si no existe ninguna, se busca cuál es la primera columna\r\n * que no tiene ninguna entrada vacía y se utiliza como título\r\n * del acordión.\r\n *\r\n * - Si ninguna columna no tiene ninguna fila vacía, entonces se\r\n * utiliza la primera columna.\r\n */\r\n\r\n if (columns && rows) {\r\n /**\r\n * Buscar columnas marcadas\r\n */\r\n const markedAsTitleColumns: TResponsiveTableIndexColumns = [];\r\n columns.forEach((column, index) => {\r\n if (column.showInAccordionTitle)\r\n markedAsTitleColumns.push({ column, index });\r\n });\r\n if (markedAsTitleColumns.length > 0) {\r\n responsiveTableStore.dispatch(\r\n responsiveTableActions.update({\r\n tableName: name,\r\n accordionIndexColumns: markedAsTitleColumns,\r\n }),\r\n );\r\n } else {\r\n /**\r\n * No se encontró ninguna columna marcada, se busca la primera sin\r\n * entradas vacías.\r\n */\r\n const columnsLength = columns.length;\r\n let indexColumn: TResponsiveTableColumn | null = null;\r\n let currentIndex = 0;\r\n\r\n while (!indexColumn && currentIndex < columns.length) {\r\n let isAnyEmptyRow = false;\r\n // eslint-disable-next-line no-restricted-syntax\r\n for (const row of rows) {\r\n if (!row.cells[currentIndex].children) {\r\n isAnyEmptyRow = true;\r\n break;\r\n }\r\n }\r\n if (!isAnyEmptyRow && columns[currentIndex]) {\r\n indexColumn = columns[currentIndex];\r\n } else {\r\n currentIndex += 1;\r\n if (currentIndex === columnsLength) break;\r\n }\r\n }\r\n if (!indexColumn) {\r\n /**\r\n * No hay ninguna sin ninguna entrada vacía,\r\n * se usa la primera columna.\r\n */\r\n [indexColumn] = columns;\r\n currentIndex = 0;\r\n }\r\n responsiveTableStore.dispatch(\r\n responsiveTableActions.update({\r\n tableName: name,\r\n accordionIndexColumns: [\r\n { column: indexColumn, index: currentIndex },\r\n ],\r\n }),\r\n );\r\n }\r\n }\r\n }, [columns, name, rows]);\r\n\r\n return (\r\n <Accordion>\r\n {!rows || (rows.length === 0 && <NoRegistersRenderer />)}\r\n {rows?.map((current, rowIndex) => (\r\n <AccordionElement row={current} rowIndex={rowIndex} key={current.id} />\r\n ))}\r\n </Accordion>\r\n );\r\n};\r\n\r\nexport const AccordionRenderer = React.memo(NoMemoAccordionRenderer);\r\n","import React from 'react';\r\nimport { Box, BoxProps, useBreakpointIndex } from '@apia/theme';\r\nimport { getVariant } from '@apia/theme';\r\nimport { KeyHandler } from './KeyHandler';\r\nimport { TableRenderer } from './renderers/TableRenderer';\r\nimport { AccordionRenderer } from './renderers/AccordionRenderer';\r\nimport { TUseDomProps } from './store/selection/types';\r\nimport { responsiveTableStore } from './store';\r\nimport { useResponsiveTableContext } from './ResponsiveTableContext';\r\n\r\ntype TResponsiveTable = BoxProps;\r\n\r\n/**\r\n * Este objeto determina qué partes de la tabla deben\r\n * ser 'debugueadas'. Sobre todo para conocer el\r\n * impacto en el performance de la misma.\r\n */\r\nexport const rtDebug = {\r\n cell: false,\r\n context: false,\r\n filterCell: false,\r\n filters: {\r\n additional: false,\r\n grouped: false,\r\n inner: false,\r\n responsive: false,\r\n sort: false,\r\n },\r\n header: false,\r\n headerCell: false,\r\n index: false,\r\n keyHandler: false,\r\n row: false,\r\n tableRenderer: false,\r\n};\r\n\r\nexport const domPropsSelector: (name: string) => TUseDomProps =\r\n (name: string) =>\r\n (global: ReturnType<typeof responsiveTableStore.getState>) =>\r\n global.responsiveTableSlice[name];\r\n\r\n/**\r\n * El ResponsiveTable renderiza una tabla en base a la\r\n * información provista por ResponsiveTableContext, quien\r\n * debe ser ancestro de este elemento. La finalidad última\r\n * de este componente es lograr responsividad y performance.\r\n *\r\n * Las props pasadas sarán colocadas directamente en el\r\n * wrapper de la tabla. Con esta estructura se busca que\r\n * a la hora de dar estilos a este componente, se pueda pasar\r\n * un variant al Wrapper, sin afectar los estilos por defecto\r\n * de la tabla ni del acordión en modo responsivo. Esto no limita\r\n * en ningún concepto la posibilidad de cambiar el variant a\r\n * la tabla o al acordión, ya que eso puede hacerse desde un\r\n * variante personalizado con la estructura mostrada en el\r\n * ejemplo.\r\n *\r\n * Además, de esta manera es posible aplicar estilo a algunos\r\n * componentes nada más, sin la necesidad de cambiar el layout\r\n * que usa la tabla por defecto. Por ejemplo, con esta estructura\r\n * se puede utilizar un variant personalizado para definir\r\n * el ancho de las columnas de la tabla.\r\n *\r\n * @example\r\n * 'customVariant': {\r\n * '.responsiveTable__accordion': {\r\n * variant: 'layout.tables.otherAccordion'\r\n * }\r\n * '.responsiveTable__table': {\r\n * variant: 'layout.tables.otherTable'\r\n * }\r\n * }\r\n */\r\nconst NoMemoResponsiveTable = React.forwardRef<\r\n HTMLDivElement,\r\n TResponsiveTable\r\n>(({ className, variant, ...props }, ref) => {\r\n const breakpoint = useBreakpointIndex({ defaultIndex: 3 });\r\n const { currentBreakPoint, forceAccordion } = useResponsiveTableContext();\r\n\r\n const actualBreakpoint = currentBreakPoint ?? breakpoint;\r\n\r\n return (\r\n <Box\r\n {...props}\r\n {...getVariant('layout.common.tables.responsive')}\r\n className={`responsiveTable__wrapper ${className ?? ''}`}\r\n ref={ref}\r\n >\r\n {actualBreakpoint >= 3 && !forceAccordion ? (\r\n <KeyHandler>\r\n <TableRenderer variant={variant} />\r\n </KeyHandler>\r\n ) : (\r\n <AccordionRenderer />\r\n )}\r\n </Box>\r\n );\r\n});\r\n\r\nNoMemoResponsiveTable.displayName = 'ResponsiveTable';\r\n\r\nexport const ResponsiveTable = React.memo(NoMemoResponsiveTable);\r\n","import React from 'react';\r\nimport { shallowEqual } from 'react-redux';\r\nimport { Box, Label, Select } from '@apia/theme';\r\nimport { useResponsiveTableContext } from '../ResponsiveTableContext';\r\nimport { TResponsiveTableSortValue } from '../types';\r\nimport { useResponsiveTable } from '../store';\r\n\r\nconst NoMemoSort = ({ tableName }: { tableName?: string }) => {\r\n const { name, onSortChange } = useResponsiveTableContext(tableName);\r\n\r\n const columns = useResponsiveTable((global) => {\r\n return global.responsiveTableSlice[name]?.columns;\r\n }, shallowEqual);\r\n\r\n return (\r\n <>\r\n {columns?.map((column, columnIndex) => {\r\n return column.showAsAdditional ||\r\n column.allowSorting === false ? null : (\r\n <Label key={column.name}>\r\n <Box as=\"span\">{column.label ?? column.name}</Box>\r\n <Box>\r\n <Select\r\n value={\r\n column.currentSorting === null ? '' : column.currentSorting\r\n }\r\n onChange={(ev) => {\r\n if (onSortChange)\r\n onSortChange({\r\n columnIndex,\r\n column,\r\n name: column.name,\r\n sortValue:\r\n ev.target.value === ''\r\n ? null\r\n : (ev.target.value as TResponsiveTableSortValue),\r\n });\r\n }}\r\n >\r\n <option value=\"\" />\r\n <option value=\"A\">{window.ORDER_ASC_LABEL}</option>\r\n <option value=\"D\">{window.ORDER_DESC_LABEL}</option>\r\n </Select>\r\n </Box>\r\n </Label>\r\n );\r\n })}\r\n </>\r\n );\r\n};\r\n\r\nexport const Sort = React.memo(NoMemoSort);\r\n","/* eslint-disable @typescript-eslint/prefer-nullish-coalescing */\r\nimport dayjs from 'dayjs';\r\nimport React from 'react';\r\nimport { Box, Label } from '@apia/theme';\r\nimport customParseFormat from 'dayjs/plugin/customParseFormat';\r\nimport {\r\n TApiaFilter,\r\n TApiaFilterValue,\r\n formatMessage,\r\n getDateFormat,\r\n} from '@apia/util';\r\nimport { ApiaFilter, RequiredMark } from '@apia/components';\r\nimport { TResponsiveTableContextProps } from '../types';\r\nimport { useResponsiveTableContext } from '../ResponsiveTableContext';\r\nimport { RangeFilter } from './RangeFilter';\r\nimport { responsiveTableStore } from '../store';\r\n\r\ndayjs.extend(customParseFormat);\r\n\r\nconst dateFormat = getDateFormat();\r\n\r\nfunction controlDatesOrder(first: string, last: string) {\r\n if (!first || !last) return true;\r\n\r\n if (dayjs(last, dateFormat).isBefore(dayjs(first, dateFormat))) {\r\n return window.MSG_FEC_FIN_MAY_FEC_INI;\r\n }\r\n return true;\r\n}\r\n\r\nconst NoMemoInnerRender = React.forwardRef(\r\n (\r\n {\r\n filters,\r\n tableName,\r\n }: {\r\n filters: TResponsiveTableContextProps['filters'];\r\n isResponsive?: boolean;\r\n tableName?: string;\r\n },\r\n ref,\r\n ) => {\r\n const {\r\n onFilterBlur,\r\n onFilterChange,\r\n onFilterPressEnter,\r\n name,\r\n FiltersRenderer,\r\n } = useResponsiveTableContext(tableName);\r\n const [lastEmittedValue, setLastEmittedValue] =\r\n React.useState<TApiaFilterValue | null>(null);\r\n const [lastEmittedValueByPartner, setLastEmittedValueByPartner] =\r\n React.useState<TApiaFilterValue | null>(null);\r\n\r\n return (\r\n <Box ref={ref} className=\"filtersRender\">\r\n {filters?.map((filter, key) => {\r\n if (filter.hide) return null;\r\n\r\n const Renderer = FiltersRenderer?.(String(filter.id));\r\n\r\n const isDate = filter.type === 'D' || filter.type === 'date';\r\n const filterToId = filter.filterToId ?? `${filter.id}i`;\r\n const filterTo: TApiaFilter = {\r\n ...filter,\r\n hide: filter.filterToId === undefined,\r\n id: filterToId,\r\n currentValue: filter.filterToValue ?? '',\r\n required: false,\r\n };\r\n\r\n const column = responsiveTableStore\r\n .getState()\r\n .responsiveTableSlice[\r\n name\r\n ].columns.find((current) => current.name === filter.column);\r\n const filterTitle =\r\n filter.title ||\r\n column?.label ||\r\n column?.title ||\r\n column?.name ||\r\n 'noFilterNorColumnTitle';\r\n\r\n return (\r\n <React.Fragment key={filter.id ?? filter.column ?? key}>\r\n <Box\r\n className={\r\n filter.type === 'D' || filter.type === 'date'\r\n ? 'twoColumns'\r\n : ''\r\n }\r\n key={filter.id ?? filter.column ?? key}\r\n >\r\n <Label\r\n title={\r\n isDate ? window.LBL_DATE_FILTER_FROM_TOOLTIP : filterTitle\r\n }\r\n >\r\n {window.SHOW_REQUIRED_POSITION !== '0' && (\r\n <RequiredMark isRequired={filter.required} />\r\n )}\r\n {!filter?.avoidLabel && (\r\n <Box as=\"span\">\r\n {isDate && !filter.hideToFilter\r\n ? formatMessage(window.LBL_DATE_FILTER_FROM_TXT, {\r\n TOK1: filterTitle,\r\n })\r\n : filterTitle}\r\n </Box>\r\n )}\r\n {Renderer ? (\r\n <Renderer filter={filter} />\r\n ) : filter.isRange ? (\r\n <RangeFilter filter={filter} />\r\n ) : (\r\n <ApiaFilter\r\n filter={filter}\r\n onChange={(currentValue) => {\r\n const result = controlDatesOrder(\r\n currentValue as string,\r\n lastEmittedValueByPartner as string,\r\n );\r\n if (result === true) {\r\n setLastEmittedValue(currentValue);\r\n if (onFilterChange)\r\n void onFilterChange({ ...filter, currentValue });\r\n }\r\n return result;\r\n }}\r\n onBlur={(currentValue) => {\r\n if (onFilterBlur)\r\n void onFilterBlur({ ...filter, currentValue });\r\n }}\r\n onPressEnter={(currentValue) => {\r\n if (onFilterPressEnter)\r\n void onFilterPressEnter({\r\n ...filter,\r\n currentValue,\r\n });\r\n }}\r\n />\r\n )}\r\n {window.SHOW_REQUIRED_POSITION === '0' && (\r\n <RequiredMark isRequired={filter.required} />\r\n )}\r\n </Label>\r\n </Box>\r\n {isDate && !filter.hideToFilter && (\r\n <Box\r\n className={\r\n filter.type === 'D' || filter.type === 'date'\r\n ? 'twoColumns'\r\n : ''\r\n }\r\n >\r\n <Label title={window.LBL_DATE_FILTER_TO_TOOLTIP}>\r\n {!filter?.avoidLabel && (\r\n <Box as=\"span\">\r\n {formatMessage(window.LBL_DATE_FILTER_TO_TXT, {\r\n TOK1: filterTitle,\r\n })}\r\n </Box>\r\n )}\r\n <ApiaFilter\r\n filter={filterTo}\r\n onChange={(currentValue) => {\r\n const result = controlDatesOrder(\r\n lastEmittedValue as string,\r\n currentValue as string,\r\n );\r\n if (result === true) {\r\n setLastEmittedValueByPartner(currentValue);\r\n if (onFilterChange)\r\n void onFilterChange({\r\n ...filter,\r\n filterToId,\r\n filterToValue: currentValue,\r\n });\r\n }\r\n return result;\r\n }}\r\n onBlur={(currentValue) => {\r\n if (onFilterBlur)\r\n void onFilterBlur({\r\n ...filter,\r\n filterToId,\r\n filterToValue: currentValue,\r\n });\r\n }}\r\n onPressEnter={(currentValue) => {\r\n if (onFilterPressEnter)\r\n void onFilterPressEnter({\r\n ...filter,\r\n filterToId,\r\n filterToValue: currentValue,\r\n });\r\n }}\r\n />\r\n </Label>\r\n </Box>\r\n )}\r\n </React.Fragment>\r\n );\r\n })}\r\n </Box>\r\n );\r\n },\r\n);\r\n\r\nNoMemoInnerRender.displayName = 'FiltersInnerRender';\r\n\r\nexport const InnerRender = React.memo(NoMemoInnerRender);\r\n","import React from 'react';\r\nimport { shallowEqual } from 'react-redux';\r\nimport { useResponsiveTableContext } from '../ResponsiveTableContext';\r\nimport { InnerRender } from './InnerRender';\r\nimport { useResponsiveTable } from '../store';\r\n\r\nconst NoMemoAdditional = ({ tableName }: { tableName?: string }) => {\r\n const { name } = useResponsiveTableContext(tableName);\r\n\r\n const additionalFilters = useResponsiveTable((global) => {\r\n const state = global.responsiveTableSlice[name];\r\n return state?.filters.filter(\r\n (current) =>\r\n !current.group &&\r\n ((!current.isMeta &&\r\n !state?.columns.find(\r\n (search) => search.name === current.column && !current.asAdditional,\r\n )) ||\r\n state?.columns.find(\r\n (search) =>\r\n search.name === current.column && search.showAsAdditional,\r\n ) ||\r\n current.asAdditional),\r\n );\r\n }, shallowEqual);\r\n\r\n return <InnerRender tableName={tableName} filters={additionalFilters} />;\r\n};\r\n\r\nexport const Additional = React.memo(NoMemoAdditional);\r\n","import React from 'react';\r\nimport { shallowEqual } from 'react-redux';\r\nimport { useResponsiveTableContext } from '../ResponsiveTableContext';\r\nimport { InnerRender } from './InnerRender';\r\nimport { useResponsiveTable } from '../store';\r\n\r\nconst NoMemoResponsive = ({ tableName }: { tableName?: string }) => {\r\n const { name } = useResponsiveTableContext(tableName);\r\n\r\n const nonAdditionalFilters = useResponsiveTable((global) => {\r\n const state = global.responsiveTableSlice[name];\r\n return state?.filters.filter(\r\n (current) =>\r\n !current.isMeta &&\r\n state?.columns.find((search) => search.name === current.column),\r\n );\r\n }, shallowEqual);\r\n\r\n return (\r\n <InnerRender\r\n tableName={tableName}\r\n isResponsive\r\n filters={nonAdditionalFilters}\r\n />\r\n );\r\n};\r\n\r\nexport const Responsive = React.memo(NoMemoResponsive);\r\n","import { TMap, TId, EventEmitter, persistentStorage } from '@apia/util';\r\nimport React from 'react';\r\n\r\nexport type TElementSelector = string | (() => HTMLElement);\r\n\r\ntype TMaximizationComponent = {\r\n isMaximized: boolean;\r\n selector?: TElementSelector;\r\n};\r\n\r\ntype TMaximizationPersist = TMap<boolean>;\r\n\r\nconst maximizationPersist = {\r\n getState(id: TId) {\r\n const current = (persistentStorage.maximizationPersist ??\r\n {}) as TMaximizationPersist;\r\n return current[id];\r\n },\r\n setState(id: TId, isMaximized: boolean) {\r\n // if (!conf<boolean>('lists.persistMaximized', true, 'boolean')) return;\r\n const current = (persistentStorage.maximizationPersist ??\r\n {}) as TMaximizationPersist;\r\n current[id] = isMaximized;\r\n persistentStorage.maximizationPersist = current;\r\n },\r\n};\r\nclass Maximization extends EventEmitter<{\r\n toggle: { id: TId; isMaximized?: boolean };\r\n}> {\r\n components: TMap<TMaximizationComponent> = {};\r\n\r\n checkComponentExists(id: TId) {\r\n return this.components[id] === undefined;\r\n }\r\n\r\n emit<K extends 'toggle'>(\r\n eventName: K,\r\n params: {\r\n toggle: {\r\n id: TId;\r\n isMaximized?: boolean;\r\n };\r\n }[K],\r\n ): void {\r\n if (eventName === 'toggle') {\r\n const { id, isMaximized } = params;\r\n this.checkComponentExists(id);\r\n if (!this.components[id]) return;\r\n\r\n this.components[id].isMaximized =\r\n isMaximized ?? !this.components[id].isMaximized;\r\n\r\n maximizationPersist.setState(id, this.components[id].isMaximized);\r\n\r\n this.isMaximized(id);\r\n super.emit(eventName, {\r\n id,\r\n isMaximized: this.components[id].isMaximized,\r\n });\r\n }\r\n }\r\n\r\n isMaximized(id: TId) {\r\n this.checkComponentExists(id);\r\n const selector = this.components[id]?.selector;\r\n if (selector === undefined) return undefined;\r\n\r\n const content =\r\n typeof selector === 'string'\r\n ? (document.querySelector(selector) as HTMLElement)\r\n : selector?.();\r\n if (content)\r\n content.classList.toggle('maximized', this.components[id].isMaximized);\r\n return this.components[id]?.isMaximized;\r\n }\r\n\r\n registerMaximizableComponent(\r\n id: TId,\r\n selector?: TElementSelector,\r\n // isDefaultMaximized?: boolean,\r\n ) {\r\n this.components[id] = {\r\n selector: selector ?? this.components[id]?.selector,\r\n isMaximized: false,\r\n // isDefaultMaximized ??\r\n // (conf<boolean>('lists.persistMaximized', true, 'boolean')\r\n // ? maximizationPersist.getState(id)\r\n // : undefined) ??\r\n // isConfDefaultMaximized,\r\n };\r\n }\r\n\r\n toggleIsMaximized(id: TId, isMaximized?: boolean) {\r\n this.emit('toggle', { id, isMaximized });\r\n }\r\n}\r\nexport const maximizationController = new Maximization();\r\n\r\n/**\r\n *\r\n * @returns\r\n * **isMaximized**: boolean, indica si el listado está maximizado o no.\r\n *\r\n * **toggleIsMaximized**: (isMaximized?: boolean) => void, alterna el estado\r\n * entre true y false si isMaximized===undefined, o setea el estado pasado en\r\n * isMaximized en caso contrario.\r\n */\r\nexport default function useIsMaximized(id: TId) {\r\n React.useEffect(() => {\r\n maximizationController.registerMaximizableComponent(id);\r\n }, [id]);\r\n\r\n const [isInnerMaximized, innerSetIsMaximized] = React.useState(\r\n maximizationController.isMaximized(id) ?? false,\r\n );\r\n\r\n React.useEffect(() => {\r\n const handleToggle = ({\r\n id: eventId,\r\n isMaximized: eventIsMaximized,\r\n }: {\r\n id: TId;\r\n isMaximized?: boolean;\r\n }) => {\r\n if (id === eventId)\r\n innerSetIsMaximized((current) => eventIsMaximized ?? !current);\r\n };\r\n const unsuscribe1 = maximizationController.on('toggle', handleToggle);\r\n innerSetIsMaximized(\r\n maximizationController.components[id].isMaximized ?? false,\r\n );\r\n\r\n return () => {\r\n unsuscribe1();\r\n };\r\n }, [id]);\r\n\r\n return {\r\n isMaximized: isInnerMaximized,\r\n toggleIsMaximized: React.useCallback(\r\n (isMaximized?: boolean) => {\r\n maximizationController.emit('toggle', { id, isMaximized });\r\n },\r\n [id],\r\n ),\r\n };\r\n}\r\n","import React, { useState, useEffect, useCallback } from 'react';\r\nimport { Pagination as PG, IPagination } from '@apia/components';\r\nimport { useResponsiveTableContext } from '../ResponsiveTableContext';\r\nimport useIsMaximized from './useIsMaximized';\r\nimport { usePrevious } from '@apia/util';\r\n\r\nconst NoMemoPagination = ({\r\n listId: outerListId,\r\n onPageChange,\r\n ...props\r\n}: Omit<IPagination, 'isMaximized' | 'onMaximize'> & { listId: string }) => {\r\n const listId = useResponsiveTableContext().name;\r\n const { isMaximized, toggleIsMaximized } = useIsMaximized(\r\n outerListId ?? listId,\r\n );\r\n\r\n const numberCurrentPage = Number(props.currentPage);\r\n\r\n const [internCurrentPage, setCurrentPage] = useState<number>(\r\n numberCurrentPage ?? 1,\r\n );\r\n\r\n const [lastEmittedPage, setLastEmittedPage] = useState<number>(\r\n numberCurrentPage ?? 1,\r\n );\r\n\r\n const previousPage = usePrevious(props.currentPage);\r\n if (previousPage.current !== props.currentPage) {\r\n setLastEmittedPage(props.currentPage as any);\r\n }\r\n\r\n const setCurrentAndDispatch = useCallback(\r\n (page: number) => {\r\n if (page !== lastEmittedPage) {\r\n setCurrentPage(page);\r\n onPageChange?.(page);\r\n setLastEmittedPage(page);\r\n }\r\n },\r\n [lastEmittedPage, onPageChange],\r\n );\r\n\r\n useEffect(() => {\r\n setCurrentPage(numberCurrentPage);\r\n }, [numberCurrentPage]);\r\n\r\n return (\r\n <PG\r\n {...{ ...props, isMaximized, onMaximize: toggleIsMaximized }}\r\n currentPage={internCurrentPage}\r\n onPageChange={setCurrentAndDispatch}\r\n />\r\n );\r\n};\r\n\r\nexport const Pagination = React.memo(NoMemoPagination);\r\n","import React from 'react';\r\nimport { shallowEqual } from 'react-redux';\r\nimport { useResponsiveTableContext } from '../ResponsiveTableContext';\r\nimport { InnerRender } from './InnerRender';\r\nimport { useResponsiveTable } from '../store';\r\n\r\nconst NoMemoGrouped = ({\r\n group,\r\n tableName,\r\n}: {\r\n group: string;\r\n tableName?: string;\r\n}) => {\r\n const { name } = useResponsiveTableContext(tableName);\r\n\r\n const groupedFilters = useResponsiveTable((global) => {\r\n const state = global.responsiveTableSlice[name];\r\n return state?.filters.filter((current) => current.group === group);\r\n }, shallowEqual);\r\n\r\n return <InnerRender tableName={tableName} filters={groupedFilters} />;\r\n};\r\n\r\nexport const Grouped = React.memo(NoMemoGrouped);\r\n","import { getIndex } from '@apia/util';\r\nimport { getDomProps, getDomStoreProps } from '../store/selection/useDomProps';\r\nimport { TResponsiveTableState } from '../store/types';\r\nimport { IRequiredDomProps } from '../store/selection/types';\r\n\r\nfunction setAriaAttributes(\r\n element: HTMLElement,\r\n attribute: string,\r\n value: any,\r\n) {\r\n element.setAttribute(attribute, value as string);\r\n}\r\n\r\nfunction getRowDomProps(rowIndex: number, state: TResponsiveTableState) {\r\n const elementType: keyof IRequiredDomProps = getIndex(\r\n ['headerTr', 'filtersTr', 'tr'],\r\n [\r\n rowIndex == -2 || (!state.hasNonAdditionalFilters && rowIndex == -1),\r\n rowIndex == -1,\r\n true,\r\n ],\r\n );\r\n\r\n return getDomProps(\r\n getDomStoreProps(\r\n elementType,\r\n {\r\n rowIndex,\r\n },\r\n () => state,\r\n ),\r\n elementType,\r\n { rowIndex },\r\n );\r\n}\r\n\r\nfunction applyRowSelectionAttributes(\r\n row: HTMLElement,\r\n state: TResponsiveTableState,\r\n) {\r\n if (!(row instanceof HTMLElement)) return;\r\n\r\n const rowIndex = Number.parseInt(row.dataset.rowindex || 'a', 10);\r\n const props = getRowDomProps(rowIndex, state);\r\n\r\n Object.entries(props).forEach(([key, value]) => {\r\n let match: RegExpMatchArray | null;\r\n match = key.match(/aria-(\\w+)/);\r\n if (match) {\r\n setAriaAttributes(row, key, value);\r\n } else if ((match = key.match(/data-(\\w+)/))) {\r\n row.dataset[match[1]] = value as string;\r\n }\r\n });\r\n}\r\n\r\nexport function applySelectionAttributes(\r\n table: HTMLElement,\r\n _previousState: TResponsiveTableState,\r\n state: TResponsiveTableState,\r\n) {\r\n const previousSelectedRows = table.querySelectorAll<HTMLElement>(\r\n '[aria-selected=\"true\"]',\r\n );\r\n previousSelectedRows.forEach((c) => applyRowSelectionAttributes(c, state));\r\n\r\n if (state.selectedRows.length) {\r\n const newSelectedRows = table.querySelectorAll<HTMLElement>(\r\n state.selectedRows\r\n .map((index) => `tr[data-rowindex=\"${index}\"]`)\r\n .join(','),\r\n );\r\n newSelectedRows.forEach((c) => applyRowSelectionAttributes(c, state));\r\n }\r\n}\r\n","import { Controller2 } from './Controller2';\r\nimport { applySelectionAttributes } from './applySelectionAttributes';\r\n\r\nexport function handleMouseDownEvent(this: Controller2, ev: MouseEvent) {\r\n const target = ev.target;\r\n\r\n if (target instanceof HTMLElement) {\r\n const cell = target.closest('th,td');\r\n const row = target.closest('tr');\r\n const table = target.closest('table');\r\n\r\n if (cell && row && table) {\r\n const state = this.getState();\r\n\r\n const rowIndex = Number.parseInt(row.dataset.rowindex || 'a', 10);\r\n const colIndex = Number.parseInt(cell.ariaColIndex || 'a', 10);\r\n if (!isNaN(rowIndex) && !isNaN(colIndex)) {\r\n if ((!ev.ctrlKey && !ev.shiftKey) || state.isMultiple === false) {\r\n state.selectedRows = [rowIndex];\r\n } else if (ev.ctrlKey) {\r\n if (state.selectedRows.includes(rowIndex)) {\r\n state.selectedRows = state.selectedRows.filter(\r\n (c) => c !== rowIndex,\r\n );\r\n } else {\r\n state.selectedRows = [...state.selectedRows, rowIndex];\r\n }\r\n } else if (ev.shiftKey) {\r\n const previousFocused = this.getState().focusedRow;\r\n state.selectedRows = [...state.selectedRows];\r\n\r\n const min = Math.min(previousFocused, rowIndex);\r\n const max = Math.max(previousFocused, rowIndex);\r\n\r\n for (let i = min; i <= max; i++) {\r\n if (undefined === state.selectedRows.find((c) => c === i)) {\r\n state.selectedRows.push(i);\r\n }\r\n }\r\n }\r\n\r\n state.focusedColumn = colIndex;\r\n state.focusedRow = rowIndex;\r\n state.isFocused = true;\r\n\r\n applySelectionAttributes(table, this.getState(), state);\r\n this.setState(state);\r\n\r\n this.events.emit('onRowClick', [\r\n { row: state.rows[state.focusedRow], index: state.focusedRow },\r\n state.focusedRow,\r\n ]);\r\n } else {\r\n console.warn('Cannot parse rowIndex or colIndex');\r\n }\r\n } else {\r\n console.warn('Cannot find cell, row or table');\r\n }\r\n }\r\n}\r\n","import { getFocusSelector } from '@apia/util';\r\nimport { TResponsiveTableState } from '../store/types';\r\n\r\nexport function applyFocusAttributes(\r\n table: HTMLElement,\r\n _previousState: TResponsiveTableState,\r\n state: TResponsiveTableState,\r\n focus = state.isFocused,\r\n target?: HTMLElement,\r\n) {\r\n focus = focus && table.contains(document.activeElement);\r\n\r\n table.querySelectorAll<HTMLElement>(getFocusSelector()).forEach((e) => {\r\n e.tabIndex = -1;\r\n });\r\n\r\n if (state.focusedColumn === 0) {\r\n const focusedRow = table.querySelector<HTMLElement>(\r\n `tr[data-rowindex=\"${state.focusedRow}\"]`,\r\n );\r\n if (focusedRow) {\r\n focusedRow.tabIndex = 0;\r\n window.requestAnimationFrame(() => {\r\n if (focus) {\r\n focusedRow.focus();\r\n }\r\n });\r\n }\r\n } else {\r\n const focusedCell = table.querySelector(\r\n `tr[data-rowindex=\"${state.focusedRow}\"] td[aria-colindex=\"${state.focusedColumn}\"], tr[data-rowindex=\"${state.focusedRow}\"] th[aria-colindex=\"${state.focusedColumn}\"]`,\r\n );\r\n\r\n if (target) {\r\n target.focus();\r\n }\r\n\r\n if (focusedCell instanceof HTMLElement) {\r\n const widgets: HTMLElement[] = [];\r\n if (state.isEditionMode) {\r\n widgets.push(\r\n ...focusedCell.querySelectorAll<HTMLElement>(getFocusSelector()),\r\n );\r\n } else {\r\n const widget =\r\n focusedCell.querySelector<HTMLElement>(getFocusSelector());\r\n if (widget) {\r\n widgets.push(widget);\r\n }\r\n }\r\n if (widgets.length) {\r\n widgets.forEach((widget, i) => {\r\n widget.tabIndex = 0;\r\n if (i === 0)\r\n window.requestAnimationFrame(() => {\r\n if (!target && focus) {\r\n widget.focus();\r\n }\r\n });\r\n });\r\n } else {\r\n focusedCell.tabIndex = 0;\r\n window.requestAnimationFrame(() => {\r\n if (!target && focus) {\r\n focusedCell.focus();\r\n }\r\n });\r\n }\r\n }\r\n }\r\n}\r\n","import { addBoundary } from '@apia/util';\r\nimport { Controller2 } from './Controller2';\r\nimport { applySelectionAttributes } from './applySelectionAttributes';\r\nimport { applyFocusAttributes } from './applyFocusAttributes';\r\n\r\nexport function handleKeyDownEvent(this: Controller2, ev: KeyboardEvent) {\r\n const target = ev.target;\r\n const state = this.getState();\r\n\r\n if (target instanceof HTMLElement) {\r\n const table = target.closest('table');\r\n const row = target.closest('tr');\r\n const cell = target.closest('th,td');\r\n if (table && row) {\r\n if (state.isEditionMode) {\r\n if (ev.code === 'Escape' || ev.code === 'Enter') {\r\n state.isEditionMode = false;\r\n this.setState(state);\r\n applyFocusAttributes(table, this.getState(), state);\r\n }\r\n } else {\r\n const rowIndex = Number.parseInt(row.dataset.rowindex || 'a', 10);\r\n const colIndex = Number.parseInt(cell?.ariaColIndex || '0', 10);\r\n if (!isNaN(rowIndex) && !isNaN(colIndex)) {\r\n if (\r\n [\r\n 'ArrowDown',\r\n 'ArrowUp',\r\n 'ArrowLeft',\r\n 'ArrowRight',\r\n 'End',\r\n 'Enter',\r\n 'Home',\r\n 'PageUp',\r\n 'PageDown',\r\n ].includes(ev.code) ||\r\n (ev.code === 'Space' && ev.ctrlKey)\r\n ) {\r\n ev.preventDefault();\r\n let mustFocus = false;\r\n\r\n const maxColumnIndex =\r\n state.columns.length +\r\n Math.max(\r\n state.reserveColumnsForStates ?? 0,\r\n state.statesColumns?.length ?? 0,\r\n ) +\r\n (state.hasNonAdditionalFilters ? 1 : 0);\r\n\r\n switch (ev.code) {\r\n case 'Space':\r\n if (state.selectedRows.includes(rowIndex)) {\r\n state.selectedRows = state.selectedRows.filter(\r\n (c) => c !== rowIndex,\r\n );\r\n } else {\r\n state.selectedRows = [...state.selectedRows, rowIndex];\r\n }\r\n break;\r\n case 'ArrowDown':\r\n state.focusedRow = addBoundary(\r\n state.focusedRow + 1,\r\n state.hasNonAdditionalFilters ? -2 : -1,\r\n state.rows.length - 1,\r\n );\r\n mustFocus = true;\r\n if (ev.ctrlKey) {\r\n //\r\n } else if (ev.shiftKey && state.isMultiple !== false) {\r\n state.selectedRows = [\r\n ...state.selectedRows,\r\n state.focusedRow,\r\n ];\r\n } else {\r\n state.selectedRows = [state.focusedRow];\r\n }\r\n break;\r\n case 'ArrowUp':\r\n state.focusedRow = addBoundary(\r\n state.focusedRow - 1,\r\n state.hasNonAdditionalFilters ? -2 : -1,\r\n state.rows.length - 1,\r\n );\r\n mustFocus = true;\r\n if (ev.ctrlKey) {\r\n //\r\n } else if (ev.shiftKey && state.isMultiple !== false) {\r\n state.selectedRows = [\r\n ...state.selectedRows,\r\n state.focusedRow,\r\n ];\r\n } else {\r\n state.selectedRows = [state.focusedRow];\r\n }\r\n break;\r\n case 'ArrowLeft':\r\n state.focusedColumn = addBoundary(\r\n state.focusedColumn - 1,\r\n 0,\r\n maxColumnIndex,\r\n );\r\n mustFocus = true;\r\n break;\r\n case 'ArrowRight':\r\n state.focusedColumn = addBoundary(\r\n state.focusedColumn + 1,\r\n 0,\r\n maxColumnIndex,\r\n );\r\n mustFocus = true;\r\n break;\r\n case 'Home':\r\n mustFocus = true;\r\n /**\r\n \r\n * If focus is on a row, moves focus to the first row. If focus is in the first row, focus does not move.\r\n \r\n * If focus is on a cell, moves focus to the first cell in the row. If focus is in the first cell of the row, focus does not move.\r\n \r\n */\r\n if (state.focusedColumn === 0) {\r\n state.focusedRow = state.hasNonAdditionalFilters ? -2 : -1;\r\n if (ev.ctrlKey) {\r\n //\r\n } else if (ev.shiftKey && state.isMultiple !== false) {\r\n const max = Math.max(\r\n state.focusedRow,\r\n this.getState().focusedRow,\r\n );\r\n const min = Math.min(\r\n state.focusedRow,\r\n this.getState().focusedRow,\r\n );\r\n for (let i = min; i <= max; i++) {\r\n state.selectedRows.push(i);\r\n }\r\n } else {\r\n state.selectedRows = [state.focusedRow];\r\n }\r\n } else {\r\n state.focusedColumn = 1;\r\n }\r\n break;\r\n case 'End':\r\n mustFocus = true;\r\n if (state.focusedColumn === 0) {\r\n state.focusedRow = state.rows.length - 1;\r\n if (ev.ctrlKey) {\r\n //\r\n } else if (ev.shiftKey && state.isMultiple !== false) {\r\n const max = Math.max(\r\n state.focusedRow,\r\n this.getState().focusedRow,\r\n );\r\n const min = Math.min(\r\n state.focusedRow,\r\n this.getState().focusedRow,\r\n );\r\n for (let i = min; i <= max; i++) {\r\n state.selectedRows.push(i);\r\n }\r\n } else {\r\n state.selectedRows = [state.focusedRow];\r\n }\r\n } else {\r\n state.focusedColumn = maxColumnIndex;\r\n }\r\n break;\r\n case 'PageUp':\r\n mustFocus = true;\r\n state.focusedRow = addBoundary(\r\n state.focusedRow - 6,\r\n state.hasNonAdditionalFilters ? -2 : -1,\r\n state.rows.length - 1,\r\n );\r\n if (ev.ctrlKey) {\r\n //\r\n } else if (ev.shiftKey && state.isMultiple !== false) {\r\n const previousFocused = this.getState().focusedRow;\r\n state.selectedRows = [...state.selectedRows];\r\n\r\n const min = Math.min(previousFocused, state.focusedRow);\r\n const max = Math.max(previousFocused, state.focusedRow);\r\n\r\n for (let i = min; i <= max; i++) {\r\n state.selectedRows.push(i);\r\n }\r\n } else {\r\n state.selectedRows = [state.focusedRow];\r\n }\r\n break;\r\n case 'PageDown':\r\n mustFocus = true;\r\n state.focusedRow = addBoundary(\r\n state.focusedRow + 6,\r\n state.hasNonAdditionalFilters ? -2 : -1,\r\n state.rows.length - 1,\r\n );\r\n if (ev.ctrlKey) {\r\n //\r\n } else if (ev.shiftKey && state.isMultiple !== false) {\r\n const previousFocused = this.getState().focusedRow;\r\n state.selectedRows = [...state.selectedRows];\r\n\r\n const min = Math.min(previousFocused, state.focusedRow);\r\n const max = Math.max(previousFocused, state.focusedRow);\r\n\r\n for (let i = min; i <= max; i++) {\r\n state.selectedRows.push(i);\r\n }\r\n } else {\r\n state.selectedRows = [state.focusedRow];\r\n }\r\n break;\r\n case 'Enter': {\r\n mustFocus = true;\r\n state.isEditionMode = true;\r\n this.setState(state);\r\n\r\n if (state.focusedRow >= 0) {\r\n this.events.emit('onSelectRows', [\r\n this.getSelection().map((index) => ({\r\n index,\r\n row: this.getState().rows[index],\r\n })),\r\n state.focusedRow as number,\r\n ]);\r\n }\r\n return;\r\n }\r\n }\r\n\r\n state.isFocused = true;\r\n\r\n applySelectionAttributes(table, this.getState(), state);\r\n applyFocusAttributes(table, this.getState(), state, mustFocus);\r\n this.setState(state);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n}\r\n","import { Box } from '@apia/theme';\r\nimport { TKeyHandlerProps } from '../store/selection/types';\r\nimport { handleMouseDownEvent } from './handleMouseDownEvent';\r\nimport { handleKeyDownEvent } from './handleKeyDownEvent';\r\nimport {\r\n responsiveTableActions,\r\n responsiveTableStore,\r\n useResponsiveTable,\r\n} from '../store';\r\nimport { TResponsiveTableState } from '../store/types';\r\nimport { shallowEqual } from '@apia/store';\r\nimport { FC, useRef } from 'react';\r\nimport { applyFocusAttributes } from './applyFocusAttributes';\r\nimport { EventEmitter, noNaN } from '@apia/util';\r\n\r\n/**\r\n * Este controlador maneja la selección en una forma más directa que el anterior, manipulando los elementos del DOM directamente, y persistiendo en el store estas propiedades para garantizar la consistencia en los renderizados posteriores.\r\n *\r\n * 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\r\n */\r\nexport class Controller2 {\r\n constructor(public readonly tableName: string) {\r\n this.handleClickEvent = handleMouseDownEvent.bind(this);\r\n this.handleKeyDownEvent = handleKeyDownEvent.bind(this);\r\n }\r\n\r\n events = new EventEmitter<{\r\n onRowClick: Parameters<NonNullable<TKeyHandlerProps['onRowClick']>>;\r\n onSelectRows: Parameters<NonNullable<TKeyHandlerProps['onSelectRows']>>;\r\n onChangeSelection: Parameters<\r\n NonNullable<TKeyHandlerProps['onChangeSelection']>\r\n >;\r\n }>();\r\n\r\n #unsubscribe = () => {};\r\n setResponsiveTableContextEvents(\r\n evs: Pick<\r\n TKeyHandlerProps,\r\n 'onRowClick' | 'onSelectRows' | 'onChangeSelection'\r\n >,\r\n ) {\r\n this.#unsubscribe();\r\n const u1 = this.events.on('onChangeSelection', (a) =>\r\n evs.onChangeSelection?.(...a),\r\n );\r\n const u2 = this.events.on('onRowClick', (a) => evs.onRowClick?.(...a));\r\n const u3 = this.events.on('onSelectRows', (a) => evs.onSelectRows?.(...a));\r\n\r\n this.#unsubscribe = () => {\r\n u1();\r\n u2();\r\n u3();\r\n };\r\n }\r\n\r\n private unsubscribe = () => {};\r\n private el: HTMLElement | null = null;\r\n setRef = (el: HTMLElement) => {\r\n this.unsubscribe();\r\n this.el = el;\r\n if (el) {\r\n el.addEventListener('keydown', this.handleKeyDownEvent);\r\n el.addEventListener('mousedown', this.handleClickEvent);\r\n el.addEventListener('dblclick', this.handleDoubleClickEvent);\r\n\r\n this.unsubscribe = () => {\r\n el.removeEventListener('keydown', this.handleKeyDownEvent);\r\n el.removeEventListener('mousedown', this.handleClickEvent);\r\n el.removeEventListener('dblclick', this.handleDoubleClickEvent);\r\n };\r\n }\r\n };\r\n\r\n handleClickEvent: (ev: MouseEvent) => void;\r\n handleKeyDownEvent: (ev: KeyboardEvent) => void;\r\n handleDoubleClickEvent = (ev: MouseEvent) => {\r\n const target = ev.target;\r\n\r\n if (target instanceof HTMLElement) {\r\n const row = target.closest('tr');\r\n const table = target.closest('table');\r\n\r\n const selectedRows = this.getSelection().reduce<\r\n { index: number; row: any }[]\r\n >((acc, index) => {\r\n if (index >= 0) {\r\n acc.push({\r\n index,\r\n row: this.getState().rows[index],\r\n });\r\n }\r\n return acc;\r\n }, []);\r\n\r\n const rowIndex = noNaN(row?.dataset.rowindex || 'a', -1);\r\n\r\n if (row && table && selectedRows.length > 0 && rowIndex >= 0) {\r\n this.events.emit('onSelectRows', [\r\n selectedRows,\r\n this.getState().focusedRow as number,\r\n ]);\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * Returns a copy of the current state object\r\n */\r\n getState() {\r\n return {\r\n ...responsiveTableStore.getState().responsiveTableSlice[this.tableName],\r\n };\r\n }\r\n getSelection() {\r\n const selectedRows = new Set(this.getState().selectedRows);\r\n return [...selectedRows.values()];\r\n }\r\n setState(state: Partial<TResponsiveTableState>) {\r\n if (\r\n state.selectedRows &&\r\n !shallowEqual(state.selectedRows, this.getState().selectedRows)\r\n ) {\r\n this.events.emit('onChangeSelection', [\r\n state.selectedRows.map((index) => ({\r\n index,\r\n row: this.getState().rows[index],\r\n })),\r\n ]);\r\n }\r\n\r\n if (\r\n state.scrollIntoViewRow !== undefined &&\r\n state.scrollIntoViewRow !== this.getState().scrollIntoViewRow\r\n ) {\r\n const row = this.el?.querySelector<HTMLElement>(\r\n `tr[data-rowindex=\"${state.scrollIntoViewRow}\"]`,\r\n );\r\n if (row) {\r\n row.scrollIntoView({ block: 'nearest', inline: 'nearest' });\r\n }\r\n }\r\n\r\n responsiveTableStore.dispatch(\r\n responsiveTableActions.controller2UpdateSelectionState({\r\n tableName: this.tableName,\r\n ...state,\r\n }),\r\n );\r\n }\r\n\r\n updateSelectionState() {\r\n window.requestAnimationFrame(() => {\r\n if (this.el) {\r\n const table = this.el.querySelector<HTMLElement>('table');\r\n if (table) {\r\n applyFocusAttributes(table, this.getState(), this.getState());\r\n }\r\n }\r\n });\r\n }\r\n}\r\n\r\nconst Controller2Component = ({\r\n controller,\r\n ...props\r\n}: TKeyHandlerProps & { controller: Controller2 }) => {\r\n controller.setResponsiveTableContextEvents({\r\n onChangeSelection: props.onChangeSelection,\r\n onSelectRows: props.onSelectRows,\r\n onRowClick: props.onRowClick,\r\n });\r\n\r\n const previousColumns = useRef<any[]>([]);\r\n const previousRows = useRef<any[]>([]);\r\n const box = useRef<HTMLElement | null>(null);\r\n\r\n useResponsiveTable((state) => {\r\n if (\r\n !Object.is(\r\n state.responsiveTableSlice[controller.tableName]?.columns,\r\n previousColumns.current,\r\n )\r\n ) {\r\n previousColumns.current =\r\n state.responsiveTableSlice[controller.tableName]?.columns;\r\n controller.updateSelectionState();\r\n }\r\n if (\r\n !Object.is(\r\n state.responsiveTableSlice[controller.tableName]?.rows,\r\n previousRows.current,\r\n )\r\n ) {\r\n previousRows.current =\r\n state.responsiveTableSlice[controller.tableName]?.rows;\r\n controller.updateSelectionState();\r\n }\r\n });\r\n\r\n return (\r\n <Box\r\n {...props}\r\n ref={(el) => {\r\n controller.setRef(el);\r\n box.current = el;\r\n }}\r\n />\r\n );\r\n};\r\n\r\nexport function makeController2(\r\n tableName: string,\r\n): [Controller2, FC<TKeyHandlerProps>] {\r\n const controller = new Controller2(tableName);\r\n\r\n return [\r\n controller,\r\n (props: TKeyHandlerProps) => {\r\n return <Controller2Component {...props} controller={controller} />;\r\n },\r\n ];\r\n}\r\n","import { ReactNode } from 'react';\r\nimport {\r\n ResponsiveTableReactContext,\r\n useResponsiveTableContext,\r\n} from './ResponsiveTableContext';\r\n\r\nexport const TableContextReproducer = ({\r\n children,\r\n tableName,\r\n}: {\r\n children: ReactNode;\r\n tableName: string;\r\n}) => {\r\n const context = useResponsiveTableContext(tableName);\r\n\r\n return (\r\n <ResponsiveTableReactContext.Provider value={context}>\r\n {children}\r\n </ResponsiveTableReactContext.Provider>\r\n );\r\n};\r\n","import React from 'react';\r\nimport { Link } from '@apia/theme';\r\nimport { downloadUrl } from '@apia/util';\r\nimport { Icon } from '@apia/icons';\r\nimport {\r\n TResponsiveTableCellRenderer,\r\n TResponsiveTableCellRendererProps,\r\n} from '../types';\r\n\r\nexport type TDocNameCellRendererProps = {\r\n docName: string;\r\n docUrl: string;\r\n};\r\n\r\nexport type TDocNameCellRenderer =\r\n TResponsiveTableCellRendererProps<TDocNameCellRendererProps>;\r\n\r\nconst NoMemoDocNameCellRenderer: TResponsiveTableCellRenderer<TDocNameCellRendererProps> =\r\n React.forwardRef<HTMLTableCellElement, TDocNameCellRenderer>(\r\n (\r\n {\r\n cell: { children, Renderer, rendererProps, AccordionRenderer, ...cell },\r\n column,\r\n row,\r\n ...props\r\n },\r\n currentRef,\r\n ) => (\r\n <td\r\n ref={currentRef as React.RefObject<HTMLTableCellElement>}\r\n {...props}\r\n {...cell}\r\n >\r\n <Link\r\n className=\"cell__download__document\"\r\n title={rendererProps?.docName}\r\n href={rendererProps?.docUrl}\r\n onClick={(ev) => {\r\n ev.preventDefault();\r\n if (rendererProps?.docUrl) void downloadUrl(rendererProps?.docUrl);\r\n }}\r\n >\r\n <Icon title=\"\" name=\"Download\" />\r\n {rendererProps?.docName}\r\n </Link>\r\n </td>\r\n ),\r\n );\r\n\r\nNoMemoDocNameCellRenderer.displayName = 'DocNameCellRenderer';\r\n\r\nexport const DocNameCellRenderer = NoMemoDocNameCellRenderer;\r\n","import React from 'react';\r\nimport { Box, Link } from '@apia/theme';\r\nimport { downloadUrl } from '@apia/util';\r\nimport { Icon } from '@apia/icons';\r\nimport {\r\n TAccordionCellRenderer,\r\n TAccordionCellRendererProps,\r\n} from './AccordionCell';\r\n\r\nexport type TDocNameCellRendererProps = {\r\n docName: string;\r\n docUrl: string;\r\n};\r\n\r\nexport type TDocNameCellRenderer =\r\n TAccordionCellRendererProps<TDocNameCellRendererProps>;\r\n\r\nconst NoMemoAccordionDocNameCellRenderer: TAccordionCellRenderer<TDocNameCellRendererProps> =\r\n React.forwardRef<HTMLElement, TDocNameCellRenderer>(\r\n (\r\n {\r\n cell: { children, Renderer, rendererProps, AccordionRenderer, ...cell },\r\n column,\r\n },\r\n currentRef,\r\n ) => (\r\n <Box ref={currentRef as React.RefObject<HTMLElement>} {...cell}>\r\n <Box as=\"strong\">{column.label ?? column.name}: </Box>\r\n <Link\r\n className=\"cell__download__document\"\r\n title={rendererProps?.docName}\r\n href={rendererProps?.docUrl}\r\n onClick={(ev) => {\r\n ev.preventDefault();\r\n if (rendererProps?.docUrl) void downloadUrl(rendererProps?.docUrl);\r\n }}\r\n >\r\n <Icon title=\"\" name=\"Download\" />\r\n {rendererProps?.docName}\r\n </Link>\r\n </Box>\r\n ),\r\n );\r\n\r\nNoMemoAccordionDocNameCellRenderer.displayName = 'AccordionDocNameCellRenderer';\r\n\r\nexport const AccordionDocNameCellRenderer = NoMemoAccordionDocNameCellRenderer;\r\n","import React from 'react';\r\nimport { Box } from '@apia/theme';\r\nimport { TResponsiveTableCellRendererProps } from '../types';\r\nimport { TAccordionCellRenderer } from './AccordionCell';\r\n\r\nconst NoMemoAccordionHTMLCellRenderer: TAccordionCellRenderer<{\r\n html: string;\r\n}> = React.forwardRef<\r\n HTMLSpanElement,\r\n TResponsiveTableCellRendererProps<{ html: string }>\r\n>(\r\n (\r\n {\r\n cell: { children, Renderer, rendererProps, AccordionRenderer, ...cell },\r\n column,\r\n row,\r\n ...props\r\n },\r\n currentRef,\r\n ) => (\r\n <Box>\r\n {column.label.trim() !== '' && <Box as=\"strong\">{column.label}: </Box>}\r\n <Box\r\n ref={currentRef as React.RefObject<HTMLTableCellElement>}\r\n {...props}\r\n {...cell}\r\n className=\"accordion__cell__renderer\"\r\n dangerouslySetInnerHTML={{\r\n __html: String(rendererProps?.html ?? children ?? '').replaceAll(\r\n /<TOK(\\d+)/g,\r\n '<TOK$1',\r\n ),\r\n }}\r\n as=\"span\"\r\n />\r\n </Box>\r\n ),\r\n);\r\n\r\nNoMemoAccordionHTMLCellRenderer.displayName = 'AccordionHTMLCellRenderer';\r\n\r\nexport const AccordionHTMLCellRenderer = NoMemoAccordionHTMLCellRenderer;\r\n","import React from 'react';\r\nimport {\r\n TResponsiveTableCellRenderer,\r\n TResponsiveTableCellRendererProps,\r\n} from '../types';\r\n\r\nconst NoMemoHTMLCellRenderer: TResponsiveTableCellRenderer<{ html: string }> =\r\n React.forwardRef<\r\n HTMLTableCellElement,\r\n TResponsiveTableCellRendererProps<{ html: string }>\r\n >(\r\n (\r\n {\r\n cell: { children, Renderer, rendererProps, AccordionRenderer, ...cell },\r\n column,\r\n row,\r\n ...props\r\n },\r\n currentRef,\r\n ) => (\r\n <td\r\n ref={currentRef as React.RefObject<HTMLTableCellElement>}\r\n {...props}\r\n {...cell}\r\n dangerouslySetInnerHTML={{\r\n __html: String(rendererProps?.html ?? children ?? '').replaceAll(\r\n /<TOK(\\d+)/g,\r\n '<TOK$1',\r\n ),\r\n }}\r\n />\r\n ),\r\n );\r\n\r\nNoMemoHTMLCellRenderer.displayName = 'HTMLCellRenderer';\r\n\r\nexport const HTMLCellRenderer = NoMemoHTMLCellRenderer;\r\n","import { Box, Spinner } from '@apia/theme';\r\n\r\nexport const IsLoadingRenderer = () => {\r\n return (\r\n <Box className=\"responsiveTable__isLoading\">\r\n <Spinner />\r\n </Box>\r\n );\r\n};\r\n","import { forwardRef, useCallback, useState } from 'react';\r\nimport { Box } from '@apia/theme';\r\nimport { IconButton } from '@apia/components';\r\nimport { arrayOrArray } from '@apia/util';\r\nimport {\r\n TResponsiveTableRow,\r\n TResponsiveTableCellRenderer,\r\n TResponsiveTableCellRendererProps,\r\n} from '../types';\r\n\r\nexport function makeAccordionAsyncRenderer(\r\n additionalInfoGetter: (row: TResponsiveTableRow) => Promise<\r\n {\r\n label?: string;\r\n name: string;\r\n }[]\r\n >,\r\n) {\r\n const InnerRender: TResponsiveTableCellRenderer = forwardRef<\r\n HTMLElement,\r\n TResponsiveTableCellRendererProps\r\n >(({ row }, ref) => {\r\n const [moreInfo, setMoreInfo] = useState<\r\n | {\r\n label?: string;\r\n name: string;\r\n }[]\r\n | null\r\n >(null);\r\n const loadMore = useCallback(async () => {\r\n const result = await additionalInfoGetter(row);\r\n setMoreInfo(result);\r\n }, [row]);\r\n\r\n return (\r\n <>\r\n {moreInfo ? (\r\n <>\r\n <IconButton icon=\"Minus\" onClick={() => setMoreInfo(null)} />\r\n {arrayOrArray(moreInfo).map(\r\n (dataCell: { label?: string; name: string }) => {\r\n return (\r\n <Box key={dataCell.name} ref={ref} as=\"div\">\r\n <Box as=\"strong\">{dataCell.name}:</Box> {dataCell.label}\r\n </Box>\r\n );\r\n },\r\n )}\r\n </>\r\n ) : (\r\n <IconButton icon=\"Plus\" onClick={() => void loadMore()} />\r\n )}\r\n </>\r\n );\r\n });\r\n\r\n InnerRender.displayName = 'MakeAccordionAsyncRenderer';\r\n\r\n return InnerRender;\r\n}\r\n","import uniqueId from 'lodash-es/uniqueId';\r\nimport { forwardRef, useState } from 'react';\r\nimport { Box, Spinner } from '@apia/theme';\r\nimport { arrayOrArray, useMount } from '@apia/util';\r\nimport {\r\n TResponsiveTableRow,\r\n TResponsiveTableCellRenderer,\r\n TResponsiveTableCellRendererProps,\r\n} from '../types';\r\n\r\nexport function makeAsyncRenderer(\r\n additionalInfoGetter: (row: TResponsiveTableRow) => Promise<\r\n {\r\n label?: string;\r\n name: string;\r\n newline?: boolean;\r\n }[]\r\n >,\r\n) {\r\n const InnerRender: TResponsiveTableCellRenderer = forwardRef<\r\n HTMLElement,\r\n TResponsiveTableCellRendererProps\r\n >(({ row }, ref) => {\r\n const [moreInfo, setMoreInfo] = useState<\r\n | {\r\n label?: string;\r\n name: string;\r\n newline?: boolean;\r\n content?: string;\r\n }[]\r\n | null\r\n >(null);\r\n useMount(() => {\r\n void (async () => {\r\n const result = await additionalInfoGetter(row);\r\n setMoreInfo(result);\r\n })();\r\n });\r\n\r\n return (\r\n <>\r\n {moreInfo ? (\r\n arrayOrArray(moreInfo).map((dataCell) => {\r\n return (\r\n <Box\r\n key={`${dataCell.name}-${uniqueId()}`}\r\n ref={ref}\r\n className={`responsiveTable__additionalInfoItem ${\r\n dataCell.newline ? 'separator' : ''\r\n }`}\r\n >\r\n {dataCell.newline ? (\r\n <>\r\n <Box sx={{ height: '20px' }} as=\"strong\">\r\n {dataCell.name}:\r\n </Box>{' '}\r\n {dataCell.label ?? dataCell?.content}\r\n </>\r\n ) : (\r\n <>\r\n <Box as=\"strong\">{dataCell.name}:</Box>{' '}\r\n {dataCell.label ?? dataCell?.content}\r\n </>\r\n )}\r\n </Box>\r\n );\r\n })\r\n ) : (\r\n <Spinner size={15} />\r\n )}\r\n </>\r\n );\r\n });\r\n\r\n InnerRender.displayName = 'MakeAsyncRenderer';\r\n\r\n return InnerRender;\r\n}\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport React, { memo, useMemo } from 'react';\r\nimport { Box } from '@apia/theme';\r\nimport { TResponsiveTableCellRendererProps } from '../types';\r\n\r\nconst NoMemoNoEllipsisCellRenderer = React.forwardRef<\r\n HTMLTableCellElement,\r\n TResponsiveTableCellRendererProps\r\n>(\r\n (\r\n {\r\n cell: { Renderer, rendererProps, AccordionRenderer, ariaLabel, ...cell },\r\n column,\r\n row,\r\n ...props\r\n },\r\n currentRef,\r\n ) => (\r\n <Box\r\n as={'td' as any}\r\n sx={useMemo(\r\n () => ({\r\n '&.colored': {\r\n background: cell.background,\r\n color: cell.color,\r\n fontWeight: 'bold',\r\n },\r\n }),\r\n [cell.background, cell.color],\r\n )}\r\n ref={currentRef as React.RefObject<HTMLTableCellElement>}\r\n {...props}\r\n {...cell}\r\n aria-label={ariaLabel as string}\r\n >\r\n {props.children ?? cell.children}\r\n </Box>\r\n ),\r\n);\r\nNoMemoNoEllipsisCellRenderer.displayName = 'DefaultCellRenderer';\r\nexport const NoEllipsisCellRenderer = memo(NoMemoNoEllipsisCellRenderer);\r\n","import { FaSquare } from '@meronex/icons/fa';\r\nimport React from 'react';\r\nimport {\r\n TResponsiveTableCellRenderer,\r\n TResponsiveTableCellRendererProps,\r\n} from '../types';\r\n\r\nexport function getPriorityHandler(priority: string | undefined) {\r\n let prio;\r\n if (priority?.includes('priority0')) prio = 'priorityNone';\r\n if (priority?.includes('priority1')) prio = 'priorityLow';\r\n if (priority?.includes('priority2')) prio = 'priorityNormal';\r\n if (priority?.includes('priority3')) prio = 'priorityHigh';\r\n if (priority?.includes('priority4')) prio = 'priorityUrgent';\r\n return prio;\r\n}\r\nconst NoMemoPriorityRenderer: TResponsiveTableCellRenderer<{ src: string }> =\r\n React.forwardRef<\r\n HTMLTableCellElement,\r\n TResponsiveTableCellRendererProps<{ src: string }>\r\n >(\r\n (\r\n {\r\n cell: { children, Renderer, rendererProps, AccordionRenderer, ...cell },\r\n column,\r\n row,\r\n ...props\r\n },\r\n currentRef,\r\n ) => {\r\n const taskPriorityColor = getPriorityHandler(rendererProps?.src);\r\n return (\r\n <td\r\n {...props}\r\n {...cell}\r\n ref={currentRef}\r\n className=\"priority\"\r\n sx={{\r\n color: taskPriorityColor,\r\n }}\r\n >\r\n <FaSquare />\r\n </td>\r\n );\r\n },\r\n );\r\nNoMemoPriorityRenderer.displayName = 'PriorityRenderer';\r\nexport const PriorityRenderer = NoMemoPriorityRenderer;\r\n","import { FaSquare } from '@meronex/icons/fa';\r\nimport React from 'react';\r\nimport { Box } from '@apia/theme';\r\nimport {\r\n TAccordionCellRenderer,\r\n TAccordionCellRendererProps,\r\n} from './AccordionCell';\r\nimport { getPriorityHandler } from './PriorityRenderer';\r\n\r\nconst NoMemoPriorityAccordionRenderer: TAccordionCellRenderer =\r\n React.forwardRef<HTMLTableCellElement, TAccordionCellRendererProps>(\r\n ({ cell, column }, currentRef) => {\r\n const taskPriorityColor = getPriorityHandler(\r\n cell.rendererProps?.src as string,\r\n );\r\n const title = column.label ?? column.name;\r\n return (\r\n <Box ref={currentRef} className=\"priority_container\">\r\n {title && <Box as=\"strong\">{column.label ?? column.name}: </Box>}\r\n <Box\r\n as=\"span\"\r\n className=\"priority\"\r\n sx={{\r\n color: taskPriorityColor,\r\n }}\r\n >\r\n <FaSquare />\r\n </Box>\r\n </Box>\r\n );\r\n },\r\n );\r\n\r\nNoMemoPriorityAccordionRenderer.displayName = 'PriorityAccordionRenderer';\r\n\r\nexport const PriorityAccordionRenderer = NoMemoPriorityAccordionRenderer;\r\n","import dayjs from 'dayjs';\r\nimport React from 'react';\r\nimport { TDateFormat, getDateFormat } from '@apia/util';\r\nimport {\r\n TResponsiveTableCellRenderer,\r\n TResponsiveTableCellRendererProps,\r\n} from '../types';\r\n\r\nexport function getStatusRendererClassName(\r\n cellValue: string,\r\n columnName: string,\r\n) {\r\n if (cellValue === undefined) return '';\r\n\r\n const cellValueDate = cellValue.split(' ')[0];\r\n const cellValueHour = cellValue.split(' ')[1] ?? '00:00:00';\r\n\r\n const dateFormat: TDateFormat = getDateFormat();\r\n const currentDate = dayjs();\r\n const currentHour = Number(dayjs().format('HHmm'));\r\n const queriedDate = dayjs(cellValueDate, dateFormat);\r\n const queriedHour = Number(dayjs(cellValueHour, dateFormat));\r\n let statusClassName = '';\r\n\r\n if (currentDate >= queriedDate) {\r\n statusClassName = columnName;\r\n }\r\n if (!queriedHour) return statusClassName;\r\n\r\n if (currentDate <= queriedDate && currentHour < queriedHour) {\r\n statusClassName = columnName;\r\n }\r\n return statusClassName;\r\n}\r\n\r\nconst NoMemoStatusRenderer: TResponsiveTableCellRenderer<{ src: string }> =\r\n React.forwardRef<\r\n HTMLTableCellElement,\r\n TResponsiveTableCellRendererProps<{ src: string }>\r\n >(\r\n (\r\n {\r\n cell: { children, Renderer, rendererProps, AccordionRenderer, ...cell },\r\n column,\r\n row,\r\n ...props\r\n },\r\n currentRef,\r\n ) => {\r\n const taskStatusClassName = getStatusRendererClassName(\r\n children as string,\r\n column.name,\r\n );\r\n\r\n return (\r\n <td\r\n {...props}\r\n {...cell}\r\n ref={currentRef}\r\n className={taskStatusClassName}\r\n >\r\n {children}\r\n </td>\r\n );\r\n },\r\n );\r\n\r\nNoMemoStatusRenderer.displayName = 'StatusRenderer';\r\n\r\nexport const StatusRenderer = NoMemoStatusRenderer;\r\n","import React from 'react';\r\nimport { Box } from '@apia/theme';\r\nimport {\r\n TAccordionCellRenderer,\r\n TAccordionCellRendererProps,\r\n} from './AccordionCell';\r\nimport { getStatusRendererClassName } from './StatusRenderer';\r\n\r\nconst NoMemoStatusAccordionRenderer: TAccordionCellRenderer = React.forwardRef<\r\n HTMLTableCellElement,\r\n TAccordionCellRendererProps\r\n>(({ cell, column }, currentRef) => {\r\n const taskStatusClassName = getStatusRendererClassName(\r\n cell.children as string,\r\n column.name,\r\n );\r\n\r\n return (\r\n <Box ref={currentRef}>\r\n <Box as=\"strong\">{column.label ?? column.name}: </Box>\r\n <Box as=\"span\" className={taskStatusClassName}>\r\n {cell.children}\r\n </Box>\r\n </Box>\r\n );\r\n});\r\n\r\nNoMemoStatusAccordionRenderer.displayName = 'StatusAccordionRenderer';\r\n\r\nexport const StatusAccordionRenderer = NoMemoStatusAccordionRenderer;\r\n"],"names":["getInitialState","selectionGetInitialState","useUpdateEffect","unit","shallowEqual","cell","__publicField","PG","useMount"],"mappings":"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"}
|