@apia/table 4.0.18 → 4.0.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +10 -1
- package/dist/index.js +40 -8
- 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/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/controller2/applyFocusAttributes.ts","../src/controller2/applySelectionAttributes.ts","../src/controller2/handleMouseDownEvent.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';\nimport React, { FC, ReactNode } from 'react';\nimport { TApiaFilter, TModify } from '@apia/util';\nimport { TAccordionCellRenderer } from './renderers/AccordionCell';\nimport {\n ISelectableState,\n TBasicRow,\n TKeyHandlerProps,\n} from './store/selection/types';\n\nexport type TColoredElement = {\n background?: string;\n color?: string;\n};\n\n/**\n * Se encontró en algunos casos particulares que\n * el servidor devuelve Up y Down para referirse\n * al orden actual de una columna.\n */\nexport type TResponsiveTableSortValue =\n | null\n | 'A'\n | 'D'\n | 'Down'\n | 'Up'\n | 'Asc'\n | 'Des';\n\n/**\n * Cada vez que se hace click en el botón del\n * cabezal de una columna, si la columna tiene\n * habilitado el ordenamiento, se emite un\n * evento de este tipo, informando cuál columna\n * emitió el evento, y cuál es el nuevo sortValue.\n */\nexport type TResponsiveTableSortChangeEvent = {\n name: string;\n column: TResponsiveTableColumn;\n columnIndex: number;\n /**\n * Es el orden que la columna debería tener\n * si no hay ningún motivo para evitar que\n * la acción de ordenamiento se lleve a cabo.\n *\n * Es importante notar que el componente\n * responsiveTable no realiza ninguna acción\n * de ordenamiento por defecto, sino que es\n * quien la usa, quien debe realizar las\n * acciones correspondientes e informarlo a\n * la tabla actualizando los registros y el\n * estado de la columna correspondiente.\n */\n sortValue: TResponsiveTableSortValue;\n};\n\n/**\n * Cada celda admite un renderer, que recibe\n * propiedades personalizadas. Este tipo define\n * cuál es la forma de esas propiedades.\n */\nexport type TResponsiveTableCellRendererProps<\n RendererPropsType extends Partial<\n Record<keyof RendererPropsType, unknown>\n > = Record<string, unknown>,\n HTML = HTMLTableCellElement,\n> = {\n cell: TResponsiveTableCell<RendererPropsType>;\n column: TResponsiveTableColumn;\n row: TResponsiveTableRow;\n} & React.AllHTMLAttributes<HTML>;\n\nexport type TResponsiveTableCellRenderer<\n RendererPropsType extends Partial<\n Record<keyof RendererPropsType, unknown>\n > = Record<string, unknown>,\n> = React.FunctionComponent<\n TResponsiveTableCellRendererProps<RendererPropsType>\n>;\n\n/**\n * Algunos elementos de la tabla admiten un\n * Renderer personalizado. Dichos elementos\n * extienden este tipo.\n */\nexport type TResponsiveTableWithRendererElement<\n RendererPropsType extends Partial<\n Record<keyof RendererPropsType, unknown>\n > = Record<string, unknown>,\n> = {\n /**\n * Si se desea, el elemento admite un componente\n * personalizado para encargarse del renderizado\n * del mismo en el modo responsivo. De esta forma, se puede proveer\n * de comportamiento específico a cualquier\n * elemento de la tabla.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n AccordionRenderer?: TAccordionCellRenderer<any>;\n /**\n * Son las propiedades que se desean pasar al\n * componente de renderizado personalizado que\n * se haya establecido.\n *\n * Estas props serán obviadas en caso de que\n * no haya componente de renderizado personalizado.\n */\n rendererProps?: RendererPropsType;\n /**\n * Si se desea, el elemento admite un componente\n * personalizado para encargarse del renderizado\n * del mismo. De esta forma, se puede proveer\n * de comportamiento específico a cualquier\n * elemento de la tabla.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Renderer?: TResponsiveTableCellRenderer<any>;\n};\n\nexport type TResponsiveTableCell<\n RendererPropsType extends Partial<\n Record<keyof RendererPropsType, unknown>\n > = Record<string, unknown>,\n> = {\n children?: ReactNode;\n} & TResponsiveTableWithRendererElement<RendererPropsType> &\n Partial<\n Pick<\n HTMLTableCellElement,\n 'ariaLabel' | 'className' | 'colSpan' | 'id' | 'rowSpan' | 'title'\n >\n > &\n TColoredElement;\n\n/**\n * Cada celda admite un renderer, que recibe\n * propiedades personalizadas. Este tipo define\n * cuál es la forma de esas propiedades.\n */\nexport type TResponsiveTableRowRendererProps<\n RendererPropsType extends Partial<\n Record<keyof RendererPropsType, unknown>\n > = Record<string, unknown>,\n> = {\n row: TResponsiveTableRow<RendererPropsType>;\n rowIndex: number;\n} & React.AllHTMLAttributes<HTMLTableRowElement>;\n\nexport type TResponsiveTableRowRenderer<\n RendererPropsType extends Partial<\n Record<keyof RendererPropsType, unknown>\n > = Record<string, unknown>,\n> = React.FunctionComponent<\n TResponsiveTableRowRendererProps<RendererPropsType>\n>;\n\nexport type TResponsiveTableRow<\n RendererPropsType extends Partial<\n Record<keyof RendererPropsType, unknown>\n > = Record<string, unknown>,\n> = TBasicRow &\n TColoredElement & {\n accordionButtonProps?: {\n rightButtons?: React.ReactNode;\n onUserPressEnter?: (ev: React.KeyboardEvent) => unknown;\n };\n cells: TResponsiveTableCell[];\n /**\n * Si se pasa en true, la fila se mostrará como un separador\n */\n separator?: boolean;\n initiallySelected?: boolean;\n\n renderer?: TResponsiveTableRowRenderer<RendererPropsType>;\n rendererProps?: RendererPropsType;\n /**\n * Permite pasar propiedades arbitrarias a un row y recuperarlas en los\n * eventos de onClick por ejemplo.\n */\n rowProps?: RendererPropsType;\n isHidden?: boolean;\n /**\n * Los estados de la fila agregan un ícono en la columna\n * especial que es la que se muestra a la izquierda y\n * contiene, cuando existe, el botón de más información.\n */\n states?: TResponsiveTableRowState[];\n } & Partial<\n Pick<\n HTMLTableCellElement,\n 'ariaLabel' | 'colSpan' | 'className' | 'rowSpan' | 'title'\n >\n >;\n\nexport type TResponsiveTableRowState = {\n /**\n * Es un className que se agregará al elemento <tr>\n */\n className?: string;\n Icon: IconType;\n color?: string;\n tooltip: string;\n};\n\nexport type TResponsiveTableColumn = TResponsiveTableWithRendererElement & {\n /** Con esta propiedad se puede pasar parámetros opcionales */\n additionalData?: Record<string, unknown>;\n /**\n * Determina si la columna admite ordenamiento.\n */\n allowSorting?: boolean;\n children?: React.ReactNode;\n /**\n * Cuando la columna admite ordenamiento, muestra\n * una flecha indicando el orden actual. Esta\n * propiedad establece si la flecha apunta hacia\n * arriba, abajo, o si la flecha es un guión.\n */\n currentSorting?: TResponsiveTableSortValue;\n /** *\n * Valor para decirle al server cuál columna se está ordenando\n */\n dataSortBy?: string;\n hidden?: boolean;\n /**\n * Normalmente, todas las columnas se van a mostrar\n * como renglones en el acordión, cuando este es\n * expandido.\n *\n * Si este flag es pasado en true, la columna\n * correspondiente no se va a mostrar en modo\n * responsivo.\n */\n hideFromAccordion?: boolean;\n /**\n * Elemento id del dom.\n */\n id?: string;\n /**\n * Es el texto que se mostrará en el cabezal.\n */\n label: string;\n maxWidth?: number | string;\n minWidth?: number | string;\n /**\n * El nombre de la columna debe ser único, se utiliza\n * para realizar la asosiación entre las columnas\n * y los filtros, así como con los eventos de orden.\n */\n name: string;\n /**\n * Si se pasa required: true, se pone un asterisco\n * rojo en el cabezal de la columna para señalar que\n * la columna es requerida.\n */\n required?: boolean;\n /**\n * Algunas columnas podrán mostrarse mediante un botón\n * \"mostrar más\", para ello deberán ser marcadas con\n * esta prop en true.\n */\n showAsAdditional?: boolean;\n /**\n * Cuando no se pasa esta propiedad en ninguna columna,\n * la aplicación encuentra la primera fila sin celdas\n * vacías y la utiliza como título.\n *\n * En cambio, si al menos una columna tiene este flag\n * en true, el título de cada fila del acordión estará\n * compuesto por los valores de estas columnas.\n */\n showInAccordionTitle?: boolean;\n /**\n * Elemento title de html (El tooltip).\n */\n title?: string;\n width?: number | string;\n} & Partial<\n Pick<\n HTMLTableCellElement,\n 'ariaLabel' | 'className' | 'colSpan' | 'rowSpan'\n >\n >;\n\nexport type TResponsiveTableStoreProps = {\n /**\n * Habla sobre el orden de las filas en función de\n * las columnas. Esta propiedad habilita/deshabilita\n * el ordenado de las columnas al hacer click en los\n * cabezales.\n *\n * La tabla admite ordenamiento por defecto, a menos\n * que esta prop venga en false. En caso de que se\n * pase false no importa qué digan las columnas,\n * el ordenamiento no estará habilitado.\n */\n allowSorting?: boolean;\n\n // Composition\n columns: TResponsiveTableColumn[];\n filters?: TApiaFilter[];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rows: TResponsiveTableRow<any>[];\n\n /**\n * Por defecto, la tabla permitirá seleccionar\n * múltiples valores, a menos que esta prop venga\n * en false.\n */\n isMultiple?: boolean;\n\n label?: string;\n\n /**\n * Es normal que una tabla tenga paginación y que en cada página haya una\n * cantidad distinta de estados. Si se quiere mantener consistencia en el\n * tamaño de las páginas, es posible reservar un tamaño para una cantidad\n * definida de estados con este parámetro.\n */\n reserveColumnsForStates?: number;\n};\n\nexport type TResponsiveTableRowsSelectionEvent = {\n index: number;\n row: TResponsiveTableRow;\n}[];\n\nexport type TResponsiveTableContextProps = TResponsiveTableStoreProps &\n Pick<\n ISelectableState,\n 'allowRowsKeyboardSorting' | 'allowEdition' | 'allowSelection'\n > & {\n /**\n * Cuando se actualiza el array de rows de la tabla\n * desde las props del ResponsiveTableContext, se\n * reinicia el estado de selección de acuerdo a cómo\n * viene definido en el prop. **Si esta prop se pasa\n * en true**, este comportamiento es deshabilitado.\n */\n avoidReparseSelectionOnRowChange?: boolean;\n avoidAutoEllipsis?: boolean;\n children?: React.ReactNode;\n className?: string;\n /**\n * Permite redefinir el comportamiento de los breakpoints pasando un índice\n * personalizado. Cuando es pasado, deja de prestar atención al breakpoint\n * de la pantalla y comienza a prestar atención a este índice.\n */\n currentBreakPoint?: number;\n customLabels?: typeof defaultLabels;\n /**\n * Se puede utilizar este booleano para que la tabla\n * deshabilite las opciones de filtrado y ordenado mientras\n * se está ejecutando una acción ajax.\n */\n isLoading?: boolean;\n /**\n * La tabla debe tener un nombre único que será usado para\n * acceder a las propiedades de la misma en el store. En caso\n * de que no se pase ninguno, la tabla lo generará\n * automaticamente.\n */\n name?: string;\n\n // Filtering\n onFilterChange?: (ev: TApiaFilter) => void | Promise<boolean>;\n onFilterBlur?: (ev: TApiaFilter) => unknown;\n onFilterPressEnter?: (ev: TApiaFilter) => unknown;\n FiltersRenderer?: (id: string) => FC<{ filter: TApiaFilter }>;\n\n // Selection\n onChangeSelection?: (ev: TResponsiveTableRowsSelectionEvent) => unknown;\n /**\n * Este evento será llamado cada vez que el usuario esté\n * haciendo foco en la tabla, tenga una selección de\n * filas no vacía y presione la tecla Enter.\n */\n onSelectRows?: (\n ev: TResponsiveTableRowsSelectionEvent,\n focusedRowIndex: number,\n ) => unknown;\n /**\n * Este evento será llamado cada vez que el usuario haga click en una fila\n */\n onRowClick?: (\n ev: TResponsiveTableRowsSelectionEvent[0],\n focusedRowIndex: number,\n ) => unknown;\n\n // Sorting\n /**\n * Es llamado cada vez que el usuario hace click en el botón\n * del cabezal de la columna. **Importante:** la tabla no\n * realizará ninguna acción de ordenamiento, sino solamente\n * avisar de que el usuario desea que las filas sean ordenadas\n * por alguna columna en particular.\n */\n onSortChange?: (ev: TResponsiveTableSortChangeEvent) => unknown;\n /**\n * Si se pasa selectionHandler, la tabla no realizará ningún control de eventos de teclado o mouse.\n */\n SelectionHandler?: FC<TKeyHandlerProps>;\n variant?: string;\n };\n\n/**\n * Los callbacks del responsiveTable estarán\n * disponibles a través de un contexto, de\n * forma que cualquier elemento activo que\n * desee informar de un evento en particular\n * pueda hacerlo en forma sencilla.\n */\nexport type TResponsiveTableContext = TModify<\n Pick<\n TResponsiveTableContextProps,\n | 'avoidAutoEllipsis'\n | 'FiltersRenderer'\n | 'currentBreakPoint'\n | 'name'\n | 'onChangeSelection'\n | 'onFilterBlur'\n | 'onFilterChange'\n | 'onFilterPressEnter'\n | 'onSelectRows'\n | 'onRowClick'\n | 'onSortChange'\n | 'label'\n | 'SelectionHandler'\n >,\n { labels: typeof defaultLabels; name: string }\n>;\n\ndeclare global {\n interface Window {\n FINDER_NO_DATA: string;\n ORDER_ASC_LABEL: string;\n ORDER_DESC_LABEL: string;\n GNR_TOT_RECORDS: string;\n GNR_TOT_RECORDS_REACHED: string;\n QUERY_MORE_DATA: string;\n LBL_MAXIMIZE: string;\n LBL_MINIMIZE: string;\n BTN_FILE_INFO_TOOLTIP: string;\n NAV_FIRST_PAGE: string;\n NAV_PREVIOUS_PAGE: string;\n NAV_INPUT_LABEL: string;\n PAGE: string;\n NAV_NEXT_PAGE: string;\n NAV_LAST_PAGE: string;\n BTN_DELETE_FILTERS: string;\n NAV_REFRESH: string;\n }\n}\n\nexport const defaultLabels = {\n noRegisters: window.FINDER_NO_DATA,\n};\n","import { TApiaFilter } from '@apia/util';\nimport { ISelectableState, TBasicRow } from './types';\n\nexport function getInitialState<\n ColumnsType extends { name: string },\n RowsType extends TBasicRow | string,\n>(): ISelectableState<ColumnsType, TApiaFilter, RowsType> {\n return {\n allowEdition: false,\n allowSelection: true,\n columns: [],\n expandedRows: [],\n isEditionMode: false,\n isFocused: false,\n filters: [],\n focusedColumn: 0,\n focusedRow: 0,\n hasNonAdditionalFilters: false,\n isMultiple: true,\n nonAdditionalColumnsCount: 0,\n rows: [],\n selectedRows: [],\n statesColumns: 0,\n };\n}\n","import { addBoundary } from '@apia/util';\nimport { Draft } from '@apia/store';\nimport { INewFocus, ISelectableState, TBasicRow } from './types';\n\n/**\n * Este método conoce las interfaces necesarias\n * para aplicar las restricciones correspondientes\n * a la hora de hacer foco en una fila, evitando\n * que se haga foco en filas inexistentes.\n */\nexport function addRowBoundary(newRow: number, state: ISelectableState) {\n const hasFiltersRow = !!state.filters.find(\n (current) =>\n !!state.columns.find((search) => search.name === current.column),\n );\n return addBoundary({\n number: newRow,\n min: hasFiltersRow ? -2 : -1,\n max: Math.max(0, state.rows.length - 1),\n });\n}\n/**\n * Este método conoce las interfaces necesarias\n * para aplicar las restricciones correspondientes\n * a la hora de hacer foco en una columna, evitando\n * que se haga foco en columnas inexistentes.\n */\nexport function addColumnBoundary(newColumn: number, state: ISelectableState) {\n return addBoundary({\n number: newColumn,\n min: 0,\n max:\n state.nonAdditionalColumnsCount +\n state.statesColumns +\n (state.hasNonAdditionalFilters ? 1 : 0),\n });\n}\n\nfunction isBasicRow(row: unknown): row is TBasicRow {\n return typeof row === 'object' && !!row && 'forbidSelection' in row;\n}\n\nfunction filterNonSellectableRows(\n state: Draft<ISelectableState>,\n newSelection: number[],\n) {\n let expandedRowsBefore = 0;\n return newSelection.filter((selectedRowIndex) => {\n const row = state.rows[selectedRowIndex + expandedRowsBefore];\n if (state.expandedRows.includes(selectedRowIndex)) expandedRowsBefore += 1;\n return !(isBasicRow(row) && row.forbidSelection);\n });\n}\n\n/**\n * Normalmente, este método será llamado desde un\n * action de Redux, para eso fue diseñado. Su\n * utilidad es la de tomar el estado y alterarlo\n * dependiendo de los parámetros pasados y la lógica\n * de selección de filas y columnas en una grilla,\n * devolviendo un estado coherente que represente\n * las acciones de un usuario en la grilla.\n */\nexport function setNewFocused(\n state: Draft<ISelectableState>,\n {\n /**\n * Propiedad proveniente del evento click o keydown.\n */\n ctrlKey,\n /**\n * Propiedad proveniente del evento click o keydown.\n */\n shiftKey,\n newFocusedColumn,\n newFocusedRow,\n /**\n * Con este método se puede seleccionar cuál celda\n * va a recibir el foco y la selección, o solamente\n * el foco si esta propiedad es pasada en false.\n */\n shouldSelectNewFocused,\n }: INewFocus,\n) {\n let actualNewFocusedRow =\n Math.round(\n addRowBoundary(newFocusedRow ?? state.focusedRow ?? 0, state) * 2,\n ) / 2;\n const actualNewFocusedColumn = addColumnBoundary(\n newFocusedColumn ?? state.focusedColumn,\n state,\n );\n\n state.focusedColumn = actualNewFocusedColumn;\n state.focusedRow = actualNewFocusedRow;\n state.isFocused = shouldSelectNewFocused ?? false;\n\n if (shouldSelectNewFocused === false || actualNewFocusedRow < 0) return;\n\n if (Math.round(actualNewFocusedRow) - actualNewFocusedRow !== 0)\n actualNewFocusedRow = Math.floor(actualNewFocusedRow);\n\n const isDeselectingWithCtrl =\n ctrlKey && state.selectedRows.includes(actualNewFocusedRow);\n\n if (state.allowSelection !== false)\n if (\n (!ctrlKey && !shiftKey) ||\n (state.isMultiple === false && !isDeselectingWithCtrl)\n )\n state.selectedRows = filterNonSellectableRows(state, [\n actualNewFocusedRow,\n ]);\n else if ((ctrlKey && state.isMultiple) || isDeselectingWithCtrl) {\n state.selectedRows = filterNonSellectableRows(\n state,\n state.selectedRows.includes(actualNewFocusedRow)\n ? state.selectedRows.filter(\n (current) => current !== actualNewFocusedRow,\n )\n : [...state.selectedRows, actualNewFocusedRow],\n );\n } else if (shiftKey && state.isMultiple) {\n const sortedSelectedRows = [...state.selectedRows].sort((a, b) => a - b);\n let minSelectedRow = sortedSelectedRows[0];\n let maxSelectedRow = sortedSelectedRows[sortedSelectedRows.length - 1];\n\n if (minSelectedRow === undefined) {\n state.selectedRows = filterNonSellectableRows(state, [\n actualNewFocusedRow,\n ]);\n return;\n }\n\n if (actualNewFocusedRow < minSelectedRow)\n minSelectedRow = actualNewFocusedRow;\n if (actualNewFocusedRow > maxSelectedRow)\n maxSelectedRow = actualNewFocusedRow;\n\n const newSelectedRows = filterNonSellectableRows(\n state,\n new Array(maxSelectedRow - minSelectedRow + 1)\n .fill('')\n .map((_, i) => i + (minSelectedRow ?? 0)),\n );\n\n state.selectedRows = filterNonSellectableRows(state, newSelectedRows);\n }\n}\n","import { Draft } from '@apia/store';\nimport React from 'react';\nimport { setNewFocused } from './setNewFocused';\nimport { THandleKey, INewFocus, ISelectableState } from './types';\n\n/**\n * Este método es de uso interno y normalmente\n * no será necesario fuera de este documento,\n * su utilidad es la de determinar si un evento\n * de teclado será controlado por el keyHandler.\n */\nexport function willHandleKey(\n ev: React.KeyboardEvent,\n state: ISelectableState,\n) {\n const actualKey = ev.key.toLowerCase();\n if (state.isEditionMode) return false;\n\n if (actualKey === ' ' && ev.ctrlKey) return true;\n if (actualKey === 'a' && ev.ctrlKey) return true;\n if (actualKey === 'm' && ev.ctrlKey) return true;\n if (state.draggingRow !== undefined) {\n return ['Escape', 'Enter'].includes(ev.key);\n }\n return [\n 'arrowup',\n 'arrowdown',\n 'arrowleft',\n 'arrowright',\n 'end',\n 'enter',\n 'home',\n 'pageup',\n 'pagedown',\n ].includes(ev.key.toLowerCase());\n}\n\n/**\n * Este método será llamado normalmente desde un action\n * de Redux. Su utilidad es la de evaluar qué tecla\n * se presionó y decidir qué alteración se debe producir\n * en base a eso.\n */\nexport function handleKey(state: Draft<ISelectableState>, { ev }: THandleKey) {\n const {\n altKey: isAltPressed,\n ctrlKey: isCtrlPressed,\n key,\n shiftKey: isShiftPressed,\n } = ev;\n if (willHandleKey(ev, state)) ev.preventDefault();\n const actualKey = key.toLowerCase();\n const setFocus = ({\n newFocusedColumn,\n newFocusedRow,\n ...rest\n }: Partial<INewFocus>) =>\n setNewFocused(state, {\n altKey: isAltPressed,\n ctrlKey: isCtrlPressed,\n shiftKey: isShiftPressed,\n newFocusedColumn,\n newFocusedRow,\n ...rest,\n });\n\n if (!state.isEditionMode) {\n if (\n actualKey === 'enter' &&\n (state.allowEdition === true || state.focusedRow < 0)\n )\n state.isEditionMode = true;\n else\n switch (actualKey) {\n case 'arrowup': {\n let sumRate = state.expandedRows.includes(state.focusedRow - 1)\n ? 0.6\n : 1;\n if (Math.round(state.focusedRow) - state.focusedRow !== 0)\n sumRate = 0.5;\n setFocus({\n newFocusedRow: state.focusedRow - sumRate,\n shouldSelectNewFocused: !isCtrlPressed,\n });\n break;\n }\n case 'arrowdown': {\n let sumRate = state.expandedRows.includes(state.focusedRow) ? 0.6 : 1;\n if (Math.round(state.focusedRow) - state.focusedRow !== 0)\n sumRate = 0.5;\n setFocus({\n newFocusedRow: state.focusedRow + sumRate,\n shouldSelectNewFocused: !isCtrlPressed,\n });\n break;\n }\n case 'arrowleft':\n case 'arrowright': {\n setFocus({\n newFocusedColumn:\n state.focusedColumn + (actualKey === 'arrowleft' ? -1 : 1),\n shouldSelectNewFocused: !isCtrlPressed,\n });\n break;\n }\n case 'home': {\n if (isCtrlPressed)\n setFocus({ newFocusedColumn: 0, newFocusedRow: 0, ctrlKey: false });\n else setFocus({ newFocusedColumn: 0 });\n break;\n }\n case 'end': {\n if (isCtrlPressed)\n setFocus({\n newFocusedRow: Number.POSITIVE_INFINITY,\n newFocusedColumn: Number.POSITIVE_INFINITY,\n ctrlKey: false,\n });\n else\n setFocus({\n newFocusedColumn: Number.POSITIVE_INFINITY,\n });\n break;\n }\n case 'pageup': {\n setFocus({\n newFocusedRow: state.focusedRow - 5,\n shouldSelectNewFocused: !isCtrlPressed,\n });\n break;\n }\n case 'pagedown': {\n setFocus({\n newFocusedRow: state.focusedRow + 5,\n shouldSelectNewFocused: !isCtrlPressed,\n });\n break;\n }\n case ' ': {\n if (isCtrlPressed)\n setFocus({\n newFocusedRow: state.focusedRow,\n });\n break;\n }\n case 'a': {\n if (isCtrlPressed && state.allowSelection)\n state.selectedRows = state.rows.map((_, i) => i);\n break;\n }\n default:\n break;\n }\n } else\n switch (actualKey) {\n case 'escape':\n case 'enter': {\n if (state.isEditionMode) state.isEditionMode = false;\n ev.stopPropagation();\n break;\n }\n default:\n break;\n }\n}\n","import type { Draft, PayloadAction } from '@apia/store';\nimport type { TRequireOnlyOne } from '@apia/util';\nimport { handleKey } from './handleKey';\nimport { setNewFocused } from './setNewFocused';\nimport { THandleKey, INewFocus, ISelectableState } from './types';\n\ntype TState = Draft<Record<string, ISelectableState>>;\n\nexport type TPayloadWithId<\n P = Record<string, unknown>,\n T extends string = string,\n M = never,\n E = never,\n> = PayloadAction<P & { id: string }, T, M, E>;\n\nexport type THandleKeyPayload = TPayloadWithId<THandleKey>;\nexport type TSelectionStateUpdatePayload = TPayloadWithId<\n Partial<ISelectableState>\n>;\nexport type TSetNewFocusedPayload = TPayloadWithId<INewFocus>;\nexport type TUpdateByClickPayload = TPayloadWithId<\n TRequireOnlyOne<{ ariaRowIndex: number; rowIndex: number }> &\n TRequireOnlyOne<{ ariaColIndex?: number; colIndex: number }> &\n Pick<INewFocus, 'altKey' | 'ctrlKey' | 'shiftKey' | 'isFocused'>\n>;\n\nexport function getReduxActions() {\n return {\n handleKey(state: TState, { payload }: THandleKeyPayload) {\n handleKey(state[payload.id], payload);\n },\n selectionStateUpdate(\n state: TState,\n { payload: { id, ...payload } }: TSelectionStateUpdatePayload,\n ) {\n state[id] = { ...state[id], ...payload };\n },\n setNewFocused(\n state: TState,\n { payload: { id, ...payload } }: TSetNewFocusedPayload,\n ) {\n setNewFocused(state[id], payload);\n },\n updateByClick(\n state: TState,\n {\n payload: {\n id,\n colIndex,\n rowIndex,\n ariaColIndex,\n ariaRowIndex,\n isFocused,\n ...payload\n },\n }: TUpdateByClickPayload,\n ) {\n const hasFiltersRow = state[id].hasNonAdditionalFilters;\n state[id].isEditionMode = false;\n\n const newFocusedColumn = colIndex ?? ariaColIndex ?? 1;\n const newFocusedRow =\n ariaRowIndex !== undefined\n ? ariaRowIndex\n : (rowIndex ?? 0) - (1 + (hasFiltersRow ? 2 : 1));\n\n setNewFocused(state[id], {\n ...payload,\n newFocusedColumn,\n newFocusedRow,\n });\n\n if (isFocused !== undefined) state[id].isFocused = isFocused;\n },\n };\n}\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 */\nimport { createSlice, injectReducers } from '@apia/store';\nimport {\n TResponsiveTableAction,\n TResponsiveTableIndexColumns,\n TResponsiveTableSlice,\n TResponsiveTableState,\n} from './types';\nimport { getInitialState as selectionGetInitialState } from './selection/getInitialState';\nimport { setNewFocused } from './selection/setNewFocused';\nimport { TResponsiveTableRow } from '../types';\nimport { getReduxActions } from './selection/getReduxActions';\nimport { getController2ReduxActions } from '../controller2/getController2ReduxActions';\n\nfunction getInitialState(): TResponsiveTableState {\n const newState: TResponsiveTableState = {\n ...selectionGetInitialState(),\n allowSelection: true,\n allowSorting: true,\n filters: [],\n isLoading: false,\n isMultiple: true,\n accordionIndexColumns: {} as TResponsiveTableIndexColumns,\n expandedRows: [],\n };\n\n return newState;\n}\n\nconst responsiveTableSlice = createSlice({\n name: 'responsiveTableSlice',\n initialState: {} as TResponsiveTableSlice,\n reducers: {\n update(\n state,\n {\n payload: { tableName, handleFocus, ...rest },\n }: TResponsiveTableAction<\n Partial<TResponsiveTableState> & {\n isFocused?: boolean;\n handleFocus?: boolean;\n }\n >,\n ) {\n if (!state[tableName]) state[tableName] = getInitialState();\n state[tableName] = { ...state[tableName], ...rest };\n\n if (handleFocus !== false) {\n setNewFocused(state[tableName], {\n altKey: false,\n ctrlKey: false,\n shiftKey: false,\n shouldSelectNewFocused: rest.isFocused ?? state[tableName].isFocused,\n });\n }\n\n if (rest.columns) {\n state[tableName].nonAdditionalColumnsCount = rest.columns.filter(\n (current) => !current.showAsAdditional,\n ).length;\n }\n\n if (rest.rows) {\n state[tableName].statesColumns = Math.max(\n state[tableName]?.reserveColumnsForStates ?? 0,\n ...(state[tableName]?.rows?.map(\n (current) => current.states?.length ?? 0,\n ) ?? [0]),\n );\n }\n\n if (rest.filters) {\n state[tableName].hasNonAdditionalFilters =\n rest.filters.filter(\n (current) =>\n !current.asAdditional &&\n (rest.columns ?? state[tableName].columns)?.find(\n (search) => search.name === current.column,\n ),\n ).length > 0;\n }\n },\n addRows(\n state,\n { payload }: TResponsiveTableAction<{ newRows: TResponsiveTableRow[] }>,\n ) {\n if (!state[payload.tableName])\n state[payload.tableName] = getInitialState();\n state[payload.tableName].rows = state[payload.tableName].rows.concat(\n ...payload.newRows,\n );\n setNewFocused(state[payload.tableName], {\n altKey: false,\n ctrlKey: false,\n shiftKey: false,\n shouldSelectNewFocused: true,\n newFocusedRow: state[payload.tableName].rows.length,\n });\n },\n deleteRows(\n state,\n { payload }: TResponsiveTableAction<{ rowIndices: number[] }>,\n ) {\n const table = state[payload.tableName];\n const minIndex = payload.rowIndices.reduce((min, current) => {\n return current < min ? current : min;\n }, Infinity);\n table.rows = table.rows.filter(\n (_, index) => !payload.rowIndices.includes(index),\n );\n\n setNewFocused(state[payload.tableName], {\n altKey: false,\n ctrlKey: false,\n shiftKey: false,\n shouldSelectNewFocused: true,\n newFocusedRow: minIndex,\n });\n state[payload.tableName].isFocused = false;\n },\n destroy(state, { payload: { tableName } }: TResponsiveTableAction) {\n delete state[tableName];\n },\n swapFocusedRow(\n state,\n {\n payload: { newIndex, tableName },\n }: TResponsiveTableAction<{ newIndex: number }>,\n ) {\n const tableState = state[tableName];\n const focusedIndex = tableState.focusedRow;\n\n if (\n focusedIndex === undefined ||\n newIndex < 0 ||\n newIndex >= tableState.rows.length\n )\n return;\n\n if (focusedIndex === newIndex) {\n if (tableState.draggingRow === newIndex)\n tableState.draggingRow = undefined;\n else tableState.draggingRow = newIndex;\n return;\n }\n\n const isSelected = tableState.selectedRows.includes(focusedIndex);\n\n if (isSelected) {\n tableState.selectedRows = [\n ...tableState.selectedRows.filter(\n (current) => current !== focusedIndex,\n ),\n newIndex,\n ];\n }\n\n const aux = tableState.rows[newIndex];\n tableState.rows[newIndex] = tableState.rows[focusedIndex];\n tableState.rows[focusedIndex] = aux;\n\n tableState.focusedRow = newIndex;\n tableState.draggingRow = newIndex;\n },\n\n // Rows selection\n ...getReduxActions(),\n ...getController2ReduxActions(),\n },\n});\n\ntype TypedUseSelectorHook<TState> = <TSelected>(\n selector: (state: TState) => TSelected,\n equalityFn?: (a: TSelected, b: TSelected) => boolean,\n) => TSelected;\nconst { store: responsiveTableStore, useSelector } = injectReducers({\n responsiveTableSlice: responsiveTableSlice.reducer,\n});\n\nconst useResponsiveTable = useSelector as TypedUseSelectorHook<{\n responsiveTableSlice: TResponsiveTableSlice;\n}>;\nexport { responsiveTableStore };\nexport { useResponsiveTable };\n\nexport const responsiveTableActions = responsiveTableSlice.actions;\n","import { useMount, useUnmount, useUpdateEffect } from 'ahooks';\nimport uniqueId from 'lodash-es/uniqueId';\nimport React from 'react';\nimport { Box } from '@apia/theme';\nimport {\n defaultLabels,\n TResponsiveTableContext,\n TResponsiveTableContextProps,\n} from './types';\nimport { responsiveTableActions, responsiveTableStore } from './store';\nimport { ResponsiveTable } from './ResponsiveTable';\nimport { getVariant } from '@apia/theme';\n\nexport const ResponsiveTableReactContext =\n React.createContext<TResponsiveTableContext>({} as TResponsiveTableContext);\n\nconst tableContexts: Record<string, TResponsiveTableContext> = {};\n\nexport function getResponsiveTableContext(tableName: string) {\n return tableContexts[tableName];\n}\n\nexport function useResponsiveTableContext(tableName?: string) {\n const reactContext = React.useContext(ResponsiveTableReactContext);\n const context = tableName ? tableContexts[tableName] : reactContext;\n if (!context) throw new Error('There is no ResponsiveTableContext');\n return context;\n}\n\n/**\n * Este contexto busca facilitar la tarea de centralizar las\n * propiedades y callbacks asociados a la tabla, de forma de\n * evitar la necesidad de distribuir comportamientos.\n *\n * **MUY IMPORTANTE**\n * Asegurarse de memoizar las propiedades rows, filters y\n * columns, ya que en caso contrario eso va a disparar\n * actualizaciones en el responsiveTableStore cada vez que el padre del\n * contexto renderice.\n *\n */\nconst NoMemoResponsiveTableContext = ({\n allowEdition,\n allowRowsKeyboardSorting,\n avoidAutoEllipsis,\n allowSelection,\n allowSorting,\n avoidReparseSelectionOnRowChange,\n children = <ResponsiveTable />,\n className,\n currentBreakPoint,\n customLabels,\n columns,\n filters,\n FiltersRenderer,\n rows,\n label,\n isMultiple,\n name,\n\n onChangeSelection,\n onFilterBlur,\n onFilterChange,\n onFilterPressEnter,\n onRowClick,\n onSelectRows,\n onSortChange,\n reserveColumnsForStates,\n SelectionHandler,\n variant,\n}: TResponsiveTableContextProps) => {\n const actualName = React.useMemo(\n () => name ?? uniqueId('responsiveTable'),\n [name],\n );\n const labels = React.useMemo(\n () => ({ ...defaultLabels, ...customLabels }),\n [customLabels],\n );\n const contextValue = React.useMemo<TResponsiveTableContext>(\n () => ({\n currentBreakPoint,\n label,\n labels,\n avoidAutoEllipsis,\n FiltersRenderer,\n name: actualName,\n onChangeSelection,\n onFilterBlur,\n onFilterChange,\n onFilterPressEnter,\n onRowClick,\n onSelectRows,\n onSortChange,\n SelectionHandler,\n }),\n [\n currentBreakPoint,\n label,\n labels,\n avoidAutoEllipsis,\n actualName,\n FiltersRenderer,\n onChangeSelection,\n onFilterBlur,\n onFilterChange,\n onFilterPressEnter,\n onRowClick,\n onSelectRows,\n onSortChange,\n SelectionHandler,\n ],\n );\n\n tableContexts[actualName] = contextValue;\n\n useMount(() => {\n responsiveTableStore.dispatch(\n responsiveTableActions.update({\n allowEdition,\n allowRowsKeyboardSorting,\n allowSelection,\n allowSorting,\n columns,\n filters: filters ?? [],\n rows,\n isMultiple,\n tableName: actualName,\n reserveColumnsForStates,\n handleFocus: !SelectionHandler,\n }),\n );\n });\n\n useUpdateEffect(() => {\n responsiveTableStore.dispatch(\n responsiveTableActions.update({\n tableName: actualName,\n columns,\n handleFocus: !SelectionHandler,\n }),\n );\n }, [columns]);\n\n useUpdateEffect(() => {\n responsiveTableStore.dispatch(\n responsiveTableActions.update({\n tableName: actualName,\n rows,\n handleFocus: !SelectionHandler,\n }),\n );\n if (!SelectionHandler && avoidReparseSelectionOnRowChange !== true) {\n const selected = rows\n .map((current, i) => ({ ...current, i }))\n .filter((current) => current.initiallySelected);\n responsiveTableStore.dispatch(\n responsiveTableActions.update({\n tableName: actualName,\n selectedRows: selected.map((current) => current.i),\n }),\n );\n }\n }, [rows]);\n\n useUpdateEffect(() => {\n responsiveTableStore.dispatch(\n responsiveTableActions.update({\n tableName: actualName,\n filters,\n handleFocus: !SelectionHandler,\n }),\n );\n }, [filters]);\n\n useUnmount(() => {\n responsiveTableStore.dispatch(\n responsiveTableActions.destroy({ tableName: actualName }),\n );\n });\n\n return (\n <ResponsiveTableReactContext.Provider value={contextValue}>\n <Box\n id={name}\n className={`responsiveTableContext__wrapper ${className ?? ''}`}\n {...(variant ? getVariant(variant) : null)}\n >\n {children}\n </Box>\n </ResponsiveTableReactContext.Provider>\n );\n};\n\nexport const ResponsiveTableContext = React.memo(NoMemoResponsiveTableContext);\n","import React from 'react';\nimport { shallowEqual } from 'react-redux';\nimport { Box } from '@apia/theme';\nimport {\n autoDisconnectMutationObserver,\n customEvents,\n getFocusSelector,\n getSpecificParent,\n globalFocus,\n isChild,\n cantFocusSelector,\n scrollParentIntoElement,\n useLatest,\n useUpdateEffect,\n} from '@apia/util';\nimport { ThrottleOptions } from 'ahooks/lib/useThrottle/throttleOptions';\nimport { useThrottleFn } from 'ahooks';\nimport { TUpdateByClickPayload } from './getReduxActions';\nimport { willHandleKey } from './handleKey';\nimport {\n INewFocus,\n ISelectableState,\n THandleKey,\n TKeyHandlerProps,\n TUseDomProps,\n} from './types';\nimport {\n TResponsiveTableRow,\n TResponsiveTableRowsSelectionEvent,\n} from '../../types';\nimport { responsiveTableStore, useResponsiveTable } from '..';\n\nexport function shoutKeyhandlerLive(\n liveType: 'reset' | 'howToStartDrag' | 'howToEndDrag' | 'whichIsTheNewIndex',\n) {\n switch (liveType) {\n /* case 'howToEndDrag':\n AriaLiveEmitter.emit('live', {\n type: 'assertive',\n message: window.ARIA_HOW_TO_END_DRAG,\n });\n break;\n case 'whichIsTheNewIndex':\n AriaLiveEmitter.emit('live', {\n type: 'assertive',\n * message:\n * formatMessage(window.ARIA_HOW_TO_WHICH_IS_THE_NEW_POSITION, {\n TOK1: String(additionalData?.newIndex ?? 0),\n }),\n });\n break;\n case 'reset':\n AriaLiveEmitter.emit('live', {\n type: 'reset',\n message: '',\n });\n break;\n default:\n AriaLiveEmitter.emit('live', {\n type: 'assertive',\n message: window.ARIA_HOW_TO_START_DRAG,\n }); */\n default:\n }\n}\n\nlet scrollTimeout: number;\n/**\n * Devuelve un elemento KeyHandler que puede usarse como\n * en el ejemplo.\n *\n * Su función es la de manejar los eventos de teclado y\n * ejecutar las acciones necesarias en el estado de la\n * grilla de acuerdo a la funcionalidad estándar de\n * usabilidad de grillas.\n *\n * @example\n *\n <KeyHandler>\n <table ... />\n </KeyHandler>\n */\nexport function makeKeyHandler(\n actions: {\n handleKey: (payload: THandleKey & { id: string }) => {\n payload: THandleKey & { id: string };\n type: string;\n };\n selectionStateUpdate: (\n payload: Partial<ISelectableState> & { id: string },\n ) => {\n payload: Partial<ISelectableState> & { id: string };\n type: string;\n };\n setNewFocused: (payload: INewFocus & { id: string }) => {\n payload: INewFocus & { id: string };\n type: string;\n };\n swapFocusedRow?: (\n payload: {\n newIndex: number;\n } & {\n tableName: string;\n },\n ) => {\n payload: {\n newIndex: number;\n } & {\n tableName: string;\n };\n type: string;\n };\n updateByClick: (payload: TUpdateByClickPayload['payload']) => {\n payload: INewFocus & { id: string };\n type: string;\n };\n },\n id: string,\n config: { throttleOptions?: ThrottleOptions; stateSelector: TUseDomProps },\n) {\n return function KeyHandler({\n children,\n onChangeSelection,\n onRowClick: onClickRows,\n onSelectRows,\n ...props\n }: TKeyHandlerProps) {\n const { run: keyHandler } = useThrottleFn<\n React.KeyboardEventHandler<HTMLDivElement>\n >(\n (ev) => {\n if (!['shift', 'alt', 'control'].includes(ev.key.toLowerCase())) {\n responsiveTableStore.dispatch(actions.handleKey({ id, ev }));\n }\n },\n config?.throttleOptions ?? { wait: 100 },\n );\n\n const [ref, setRef] = React.useState<HTMLElement | null>(null);\n\n const selectedRows = useResponsiveTable(\n (global) => {\n const state = config.stateSelector(global);\n return (state?.selectedRows ?? []).map<\n TResponsiveTableRowsSelectionEvent[0]\n >((current) => ({\n index: current,\n row: state.rows[current] as TResponsiveTableRow,\n }));\n },\n (a, b) =>\n shallowEqual(\n a.map((current) => current.index),\n b.map((current) => current.index),\n ),\n );\n const selectedRowsRef = useLatest(selectedRows);\n const { allowKeyboardSorting, focusedCell, isEditionMode, isFocused } =\n useResponsiveTable((global) => {\n const state = config.stateSelector(global);\n return {\n focusedCell:\n state?.focusedRow !== undefined\n ? `${state?.focusedRow}_${state?.focusedColumn}`\n : undefined,\n isEditionMode: state?.isEditionMode,\n rows: state?.rows,\n isFocused: state?.isFocused,\n allowKeyboardSorting: state?.allowRowsKeyboardSorting,\n };\n }, shallowEqual);\n useUpdateEffect(() => {\n if (onChangeSelection) onChangeSelection(selectedRows);\n }, [onChangeSelection, selectedRows]);\n\n const handleClick = React.useCallback(\n (ev: MouseEvent | FocusEvent | Event) => {\n if ((ev.target as HTMLElement).closest('.moreInformationButton'))\n return;\n\n if ((ev as MouseEvent).shiftKey) {\n document.getSelection()?.removeAllRanges();\n }\n const parentRow = getSpecificParent(\n ev.target as HTMLElement,\n (current) => {\n if (current.tagName.toLowerCase() === 'table') return null;\n if (current.matches('tr')) {\n return true;\n }\n return false;\n },\n );\n const parentCell = getSpecificParent(\n ev.target as HTMLElement,\n (current) => {\n if (current.tagName.toLowerCase() === 'table') return null;\n if (current.matches('td,th')) {\n return true;\n }\n return false;\n },\n );\n if (parentCell && parentRow) {\n responsiveTableStore.dispatch(\n actions.updateByClick({\n altKey: (ev as MouseEvent).altKey,\n id,\n ctrlKey: (ev as MouseEvent).ctrlKey,\n ariaColIndex: Number(parentCell.getAttribute('aria-colindex')),\n rowIndex: Number(parentRow.getAttribute('data-focusindex')),\n shiftKey: (ev as MouseEvent).shiftKey,\n }),\n );\n if (onClickRows && ev.type === 'mousedown')\n onClickRows(\n selectedRowsRef.current?.[0],\n config.stateSelector(responsiveTableStore.getState()).focusedRow,\n );\n }\n },\n [onClickRows, selectedRowsRef],\n );\n const handleDoubleClick = React.useCallback(\n (ev: MouseEvent) => {\n if (\n isChild(\n ev.target as HTMLElement,\n (current) => current.tagName === 'THEAD',\n )\n )\n return;\n ev.preventDefault();\n if (onSelectRows)\n onSelectRows(\n selectedRowsRef.current,\n config.stateSelector(responsiveTableStore.getState()).focusedRow,\n );\n },\n [onSelectRows, selectedRowsRef],\n );\n\n const initialized = React.useRef(true);\n\n const running = React.useRef(false);\n const doFocusThings = React.useCallback(() => {\n if (!running.current) {\n running.current = true;\n if (focusedCell === undefined) {\n running.current = false;\n return () => {};\n }\n\n if (ref) {\n const disconnectObserver = autoDisconnectMutationObserver(\n ref,\n () => {\n scrollTimeout = setTimeout(() => {\n const focusedElement = ref.querySelector(\n '[data-focused=\"true\"]',\n );\n\n let tableCellElement: HTMLElement | null = null;\n let tableCellWidget: HTMLElement | null = null;\n\n if (\n ['td', 'th'].includes(\n focusedElement?.tagName.toLowerCase() ?? '',\n )\n ) {\n tableCellElement = focusedElement as HTMLElement;\n tableCellWidget = focusedElement?.querySelector(\n getFocusSelector(':not(.debug_info__button)'),\n ) as HTMLElement;\n }\n\n if (focusedElement?.tagName.toLowerCase() === 'tr') {\n tableCellElement = focusedElement.querySelector('td,th');\n tableCellWidget =\n (focusedElement.querySelector(\n getFocusSelector(':not(.debug_info__button)'),\n ) as HTMLElement) || tableCellElement;\n }\n\n if (tableCellWidget) {\n tableCellElement?.setAttribute('tabIndex', '-1');\n tableCellWidget.setAttribute('tabIndex', '0');\n } else tableCellElement?.setAttribute('tabIndex', '0');\n\n if (!isEditionMode) {\n const allFocusableElements = ref?.querySelectorAll(\n getFocusSelector(\n `${cantFocusSelector}:not([data-focused=\"true\"])`,\n ),\n );\n allFocusableElements?.forEach((current) => {\n if (current !== tableCellWidget) {\n current.setAttribute('tabIndex', '-1');\n }\n if (tableCellWidget?.tagName === 'BUTTON')\n tableCellWidget.setAttribute('role', 'gridcell');\n });\n } else {\n const focusableElements =\n tableCellElement?.querySelectorAll('[tabindex=\"-1\"]');\n\n focusableElements?.forEach((current) =>\n current.setAttribute('tabIndex', '0'),\n );\n }\n\n const focusElement = tableCellWidget ?? tableCellElement;\n const row = getSpecificParent(\n focusElement,\n (current) => current.tagName === 'TR',\n );\n\n if (\n focusElement &&\n initialized.current &&\n config.stateSelector(responsiveTableStore.getState())\n .isFocused\n ) {\n globalFocus.focus = focusElement;\n\n focusElement.focus();\n }\n\n if (row) {\n scrollParentIntoElement(row, 55, 2, 100, 'makeKeyHandler');\n }\n\n if (!initialized.current) {\n initialized.current = true;\n }\n }, 0) as unknown as number;\n },\n { timeout: 5000 },\n );\n\n running.current = false;\n return () => {\n disconnectObserver();\n clearTimeout(scrollTimeout);\n };\n }\n running.current = false;\n }\n return () => {};\n }, [focusedCell, ref, isEditionMode]);\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n React.useLayoutEffect(doFocusThings, [\n focusedCell,\n isFocused,\n isEditionMode,\n ]);\n React.useEffect(() => {\n function handleFocus(ev: FocusEvent) {\n const targetTable = getSpecificParent(\n ev.target as HTMLElement,\n (current) => current.tagName.toLowerCase() === 'table',\n );\n const relatedTargetTable = getSpecificParent(\n ev.relatedTarget as HTMLElement,\n (current) => current.tagName.toLowerCase() === 'table',\n );\n\n if (!relatedTargetTable || relatedTargetTable !== targetTable)\n handleClick(ev);\n }\n\n ref?.addEventListener('dblclick', handleDoubleClick);\n ref?.addEventListener('mousedown', handleClick);\n ref?.addEventListener('focusin', handleFocus);\n ref?.addEventListener(customEvents.focus, handleClick);\n return () => {\n ref?.removeEventListener('mousedown', handleClick);\n ref?.removeEventListener('dblclick', handleDoubleClick);\n ref?.removeEventListener('focusin', handleFocus);\n ref?.removeEventListener(customEvents.focus, handleClick);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [ref]);\n\n const isDragging = React.useRef(false);\n const isFocusedRef = React.useRef(false);\n\n return (\n <Box\n ref={setRef}\n {...props}\n className={`selection__keyHandler ${props.className ?? ''}`}\n onBlur={React.useCallback(\n (ev: React.FocusEvent) => {\n if (\n !ev.relatedTarget ||\n !getSpecificParent(\n ev.relatedTarget as HTMLElement,\n (current) => current === ref,\n )\n ) {\n responsiveTableStore.dispatch(\n actions.selectionStateUpdate({ id, isFocused: false }),\n );\n shoutKeyhandlerLive('reset');\n isFocusedRef.current = false;\n }\n },\n [ref],\n )}\n onFocus={React.useCallback(() => {\n if (!isFocusedRef.current) shoutKeyhandlerLive('howToStartDrag');\n isFocusedRef.current = true;\n }, [])}\n sx={React.useMemo(\n () => ({ overflow: 'auto', position: 'relative' }),\n [],\n )}\n onKeyDown={React.useCallback<\n React.KeyboardEventHandler<HTMLDivElement>\n >(\n (ev) => {\n const state = config.stateSelector(responsiveTableStore.getState());\n\n if (\n willHandleKey(\n ev,\n config.stateSelector(responsiveTableStore.getState()),\n )\n ) {\n ev.preventDefault();\n ev.stopPropagation();\n }\n if (\n actions.swapFocusedRow &&\n isDragging.current &&\n allowKeyboardSorting\n ) {\n if (\n (ev.key === 'Enter' || ev.key === 'Escape') &&\n isDragging.current\n ) {\n shoutKeyhandlerLive('howToStartDrag');\n isDragging.current = false;\n responsiveTableStore.dispatch(\n actions.swapFocusedRow({\n tableName: id,\n newIndex: state.focusedRow,\n }),\n );\n } else if (['ArrowDown', 'ArrowUp'].includes(ev.key)) {\n if (ev.key === 'ArrowDown') {\n responsiveTableStore.dispatch(\n actions.swapFocusedRow({\n tableName: id,\n newIndex: state.focusedRow + 1,\n }),\n );\n } else {\n responsiveTableStore.dispatch(\n actions.swapFocusedRow({\n tableName: id,\n newIndex: state.focusedRow - 1,\n }),\n );\n }\n }\n } else if (\n ev.key === 'm' &&\n ev.ctrlKey &&\n !isDragging.current &&\n state.focusedRow >= 0 &&\n actions.swapFocusedRow\n ) {\n isDragging.current = true;\n shoutKeyhandlerLive('howToEndDrag');\n responsiveTableStore.dispatch(\n actions.swapFocusedRow({\n tableName: id,\n newIndex: state.focusedRow,\n }),\n );\n } else {\n const currentSelectedRows = (state?.selectedRows ?? []).map<\n TResponsiveTableRowsSelectionEvent[0]\n >((current) => ({\n index: current,\n row: state.rows[current] as TResponsiveTableRow,\n }));\n if (props.onKeyDown) props.onKeyDown(ev);\n if (ev.key === 'Enter' && onSelectRows && state.focusedRow >= 0) {\n onSelectRows(currentSelectedRows, state.focusedRow);\n }\n keyHandler(ev);\n }\n },\n [allowKeyboardSorting, keyHandler, onSelectRows, props],\n )}\n >\n {children}\n </Box>\n );\n };\n}\n","import React from 'react';\nimport { BoxProps } from '@apia/theme';\nimport { useResponsiveTableContext } from './ResponsiveTableContext';\nimport { makeKeyHandler } from './store/selection/makeKeyHandler';\nimport { responsiveTableActions } from './store';\n\nexport interface IKeyHandler {\n children: React.ReactNode;\n}\n\nconst NoMemoKeyHandler = (props: BoxProps) => {\n const {\n name,\n onChangeSelection,\n onRowClick,\n onSelectRows,\n SelectionHandler,\n } = useResponsiveTableContext();\n\n const Handler = React.useMemo(\n () =>\n SelectionHandler ||\n makeKeyHandler(responsiveTableActions, name, {\n throttleOptions: { wait: 50 },\n stateSelector: (global) => global.responsiveTableSlice[name],\n }),\n [SelectionHandler, name],\n );\n\n return (\n <Handler\n onChangeSelection={onChangeSelection}\n onSelectRows={onSelectRows}\n onRowClick={onRowClick}\n {...props}\n />\n );\n};\n\nexport const KeyHandler = React.memo(NoMemoKeyHandler);\n","import { useMemo } from 'react';\nimport { shallowEqual } from 'react-redux';\nimport { addBoundary } from '@apia/util';\nimport { TDomProps, IRequiredDomProps, TUseDomProps } from './types';\nimport { responsiveTableStore, useResponsiveTable } from '..';\n\nexport function getDomStoreProps<ElementType extends keyof IRequiredDomProps>(\n element: ElementType,\n elementProps: IRequiredDomProps[typeof element],\n stateSelector: TUseDomProps,\n) {\n const globalState = responsiveTableStore.getState();\n const tableState = stateSelector(globalState);\n const hasNonAdditionalFilters = tableState?.hasNonAdditionalFilters;\n const startDataRowIndex = hasNonAdditionalFilters ? 2 : 1;\n\n const statesColumns = tableState?.statesColumns ?? 0;\n\n let expandedBeforeThisRow = 0;\n\n if (element === 'tr')\n expandedBeforeThisRow = tableState?.expandedRows.filter(\n (current) => current < (elementProps as IRequiredDomProps['td']).rowIndex,\n ).length;\n\n let isFocused = false;\n let isSelected = false;\n switch (element) {\n case 'filterTd': {\n const castedProps = elementProps as IRequiredDomProps['filterTd'];\n isFocused =\n tableState?.focusedRow === 1 - startDataRowIndex &&\n addBoundary(tableState?.focusedColumn ?? 0, 0) - statesColumns ===\n castedProps.columnIndex + 1 + (hasNonAdditionalFilters ? 1 : 0);\n break;\n }\n case 'tr': {\n const castedProps = elementProps as IRequiredDomProps['tr'];\n isFocused = !tableState\n ? false\n : (tableState.focusedRow === castedProps.rowIndex &&\n tableState?.focusedColumn === 0) ||\n (Math.floor(tableState?.focusedRow) === castedProps.rowIndex &&\n Math.round(tableState?.focusedRow) - tableState.focusedRow !== 0 &&\n !!castedProps.isTheExpandedRow);\n isSelected =\n !castedProps.isTheExpandedRow &&\n tableState?.selectedRows.includes(castedProps.rowIndex);\n break;\n }\n case 'headerTr': {\n isFocused = !tableState\n ? false\n : tableState.focusedRow === 0 && tableState?.focusedColumn === 0;\n isSelected = false;\n break;\n }\n case 'stateCell': {\n const castedProps = elementProps as IRequiredDomProps['td'];\n isFocused =\n tableState?.focusedRow === castedProps.rowIndex &&\n (tableState?.focusedColumn ?? 0) ===\n castedProps.columnIndex + 1 + (hasNonAdditionalFilters ? 1 : 0);\n break;\n }\n case 'additionalTd': {\n const castedProps = elementProps as IRequiredDomProps['additionalTd'];\n isFocused =\n tableState?.focusedRow === castedProps.rowIndex &&\n (tableState?.focusedColumn ?? 0) === 1;\n break;\n }\n case 'td': {\n const castedProps = elementProps as IRequiredDomProps['td'];\n isFocused =\n tableState?.focusedRow === castedProps.rowIndex &&\n (tableState?.focusedColumn ?? 0) - statesColumns ===\n castedProps.columnIndex + 1 + (hasNonAdditionalFilters ? 1 : 0);\n break;\n }\n case 'headerStateCell': {\n const castedProps = elementProps as IRequiredDomProps['td'];\n isFocused =\n tableState?.focusedRow ===\n castedProps.rowIndex - 1 - startDataRowIndex &&\n addBoundary(tableState?.focusedColumn, 0) ===\n castedProps.columnIndex + 1 + (hasNonAdditionalFilters ? 1 : 0);\n break;\n }\n case 'th': {\n const castedProps = elementProps as IRequiredDomProps['th'];\n isFocused =\n tableState?.focusedRow === 0 - startDataRowIndex &&\n addBoundary((tableState?.focusedColumn ?? 0) - statesColumns, 0) ===\n castedProps.columnIndex + 1 + (hasNonAdditionalFilters ? 1 : 0);\n break;\n }\n case 'separator': {\n const castedProps = elementProps as IRequiredDomProps['separator'];\n isFocused = !tableState\n ? false\n : tableState.focusedRow === castedProps.rowIndex;\n break;\n }\n default:\n break;\n }\n\n return {\n columns: tableState?.columns ?? [],\n expandedBeforeThisRow,\n isEditionMode: tableState?.isEditionMode,\n hasNonAdditionalFilters,\n rowsLength: element === 'table' ? tableState?.rows.length : '',\n isSelected,\n isFocused,\n startDataRowIndex,\n statesColumns: tableState?.statesColumns,\n };\n}\n\nexport function getDomProps<ElementType extends keyof IRequiredDomProps>(\n state: ReturnType<typeof getDomStoreProps>,\n element: ElementType,\n elementProps: IRequiredDomProps[typeof element],\n): TDomProps {\n let returnObject: Omit<TDomProps, 'ref'> = {};\n\n switch (element) {\n case 'filterTd': {\n const castedProps = elementProps as IRequiredDomProps['filterTd'];\n returnObject = {\n 'aria-colindex':\n castedProps.columnIndex +\n 1 +\n state.statesColumns +\n (state.hasNonAdditionalFilters ? 1 : 0),\n 'data-editionmode': state.isEditionMode && state.isFocused,\n 'data-focused': state.isFocused,\n tabIndex: state.isFocused ? 0 : -1,\n 'data-rowindex': 2,\n };\n break;\n }\n case 'separator': {\n const castedProps = elementProps as IRequiredDomProps['separator'];\n returnObject = {\n 'aria-rowindex':\n castedProps.rowIndex +\n state.startDataRowIndex +\n 1 +\n state.expandedBeforeThisRow,\n 'data-focusindex': castedProps.rowIndex + state.startDataRowIndex + 1,\n 'aria-selected': state.isSelected,\n 'data-focused': state.isFocused,\n 'aria-expanded': false,\n };\n break;\n }\n case 'table': {\n returnObject = {\n role: 'treegrid',\n 'aria-colcount': state.columns.length,\n 'aria-rowcount': state.rowsLength,\n };\n break;\n }\n case 'tr': {\n const castedProps = elementProps as IRequiredDomProps['tr'];\n returnObject = {\n 'aria-rowindex':\n castedProps.rowIndex +\n state.startDataRowIndex +\n 1 +\n state.expandedBeforeThisRow +\n (castedProps.isTheExpandedRow ? 1 : 0),\n 'data-focusindex':\n castedProps.rowIndex +\n state.startDataRowIndex +\n 1 +\n (castedProps.isTheExpandedRow ? 0.5 : 0),\n 'data-rowindex': castedProps.rowIndex,\n 'aria-selected': state.isSelected,\n 'data-focused': state.isFocused,\n 'aria-expanded': castedProps.isThisRowExpanded,\n tabIndex: state.isFocused ? 0 : -1,\n };\n break;\n }\n case 'headerTr': {\n returnObject = {\n 'aria-rowindex': 1,\n 'data-focusindex': 1,\n 'data-rowindex': state.hasNonAdditionalFilters ? -2 : -1,\n 'aria-selected': false,\n 'data-focused': state.isFocused,\n 'aria-expanded': false,\n };\n break;\n }\n case 'td': {\n const castedProps = elementProps as IRequiredDomProps['td'];\n returnObject = {\n 'aria-colindex':\n castedProps.columnIndex +\n 1 +\n state.statesColumns +\n (state.hasNonAdditionalFilters ? 1 : 0),\n 'data-editionmode': state.isEditionMode && state.isFocused,\n 'data-focused': state.isFocused,\n tabIndex: state.isFocused ? 0 : -1,\n 'data-rowindex': castedProps.rowIndex + state.startDataRowIndex + 1,\n };\n break;\n }\n case 'additionalTd': {\n const castedProps = elementProps as IRequiredDomProps['td'];\n returnObject = {\n 'aria-colindex': 1,\n 'data-editionmode': state.isEditionMode && state.isFocused,\n 'data-focused': state.isFocused,\n tabIndex: state.isFocused ? 0 : -1,\n 'data-rowindex': castedProps.rowIndex + state.startDataRowIndex + 1,\n };\n break;\n }\n case 'stateCell': {\n const castedProps = elementProps as IRequiredDomProps['td'];\n returnObject = {\n 'aria-colindex':\n castedProps.columnIndex + 1 + (state.hasNonAdditionalFilters ? 1 : 0),\n 'data-editionmode': state.isEditionMode && state.isFocused,\n 'data-focused': state.isFocused,\n tabIndex: state.isFocused ? 0 : -1,\n 'data-rowindex': castedProps.rowIndex + state.startDataRowIndex + 1,\n };\n break;\n }\n case 'headerStateCell': {\n const castedProps = elementProps as IRequiredDomProps['td'];\n returnObject = {\n 'aria-colindex':\n castedProps.columnIndex + 1 + (state.hasNonAdditionalFilters ? 1 : 0),\n 'data-editionmode': state.isEditionMode && state.isFocused,\n 'data-focused': state.isFocused,\n tabIndex: state.isFocused ? 0 : -1,\n 'data-rowindex': castedProps.rowIndex,\n };\n break;\n }\n case 'th': {\n const castedProps = elementProps as IRequiredDomProps['th'];\n returnObject = {\n 'aria-colindex':\n castedProps.columnIndex +\n 1 +\n state.statesColumns +\n (state.hasNonAdditionalFilters ? 1 : 0),\n 'aria-sort': ['ascending', 'descending', undefined][\n ['Asc', 'Desc', null].findIndex(\n (current) =>\n current === state.columns[castedProps.columnIndex].currentSorting,\n )\n ] as 'none' | 'ascending' | 'descending' | 'other' | undefined,\n 'data-editionmode': state.isEditionMode && state.isFocused,\n 'data-focused': state.isFocused,\n tabIndex: state.isFocused ? 0 : -1,\n 'data-rowindex': 1,\n };\n break;\n }\n default:\n break;\n }\n\n return returnObject;\n}\n\n/**\n * Este hook extrae según el estado de la tabla actual\n * y el nombre del elemento al que se le desean calcular\n * los atributos que deben mostrarse en el dom para\n * cumplir con las reglas de accesibilidad.\n *\n * @param element Es el nombre del elemento\n *\n * @param elementProps Las propiedades necesarias que se\n * deben suministrar para lograr un cálculo apropiado de\n * las propiedades que deben mostrarse.\n *\n * @param stateSelector Es una función que acepta el estado\n * global de la aplicación y devuelve el estado de la tabla\n * actual. Este método es necesario ya que el useDomProps\n * no sabe contra qué slice va a trabajar.\n *\n * @returns un objeto que contiene las propiedades\n * del DOM que deben destructurarse en el elemento html.\n */\nexport function useDomProps<ElementType extends keyof IRequiredDomProps>(\n element: ElementType,\n elementProps: IRequiredDomProps[typeof element],\n stateSelector: TUseDomProps,\n): TDomProps {\n const state = useResponsiveTable(() => {\n return getDomStoreProps<ElementType>(element, elementProps, stateSelector);\n }, shallowEqual);\n\n return useMemo(() => {\n return getDomProps(state, element, elementProps);\n }, [element, elementProps, state]);\n}\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} 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 ?? 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 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: 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: `${width}px`,\r\n position: 'relative',\r\n },\r\n [column.maxWidth, column.minWidth, column.width, isResize, width],\r\n );\r\n\r\n const buttonProps = useOtherTagButton(\r\n React.useMemo(\r\n () => ({\r\n className: 'headButton',\r\n onClick: (ev) => {\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, onSortChange],\r\n ),\r\n );\r\n return (\r\n <Box\r\n as=\"th\"\r\n style={sx}\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 >\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';\nimport { Box, getVariant } from '@apia/theme';\nimport { TResponsiveTableRowState } from '../types';\n\nconst NoMemoRowStatesRenderer = ({\n state,\n}: {\n state: TResponsiveTableRowState;\n}) => {\n const { Icon } = state;\n\n return (\n <Box\n sx={React.useMemo(\n () => ({\n '&, svg, path': {\n color: state.color ?? '',\n },\n }),\n [state.color],\n )}\n >\n <Icon\n {...getVariant('inherit')}\n title={state.tooltip}\n className={`${state.className ?? 'state'}_icon state_icon`}\n />\n </Box>\n );\n};\n\nexport const RowStatesRenderer = React.memo(NoMemoRowStatesRenderer);\n","import { domPropsSelector } from './ResponsiveTable';\nimport { RowStatesRenderer } from './renderers/RowStatesRenderer';\nimport { useResponsiveTableContext } from './ResponsiveTableContext';\nimport { useDomProps } from './store/selection/useDomProps';\nimport { TResponsiveTableRowState } from './types';\nimport { Box } from '@apia/theme';\n\ninterface IStateCell {\n index: number;\n isHeader?: boolean;\n rowIndex: number;\n state?: TResponsiveTableRowState;\n}\n\nexport const StateCell = ({ index, rowIndex, state, isHeader }: IStateCell) => {\n const { name } = useResponsiveTableContext();\n const domProps = useDomProps(\n isHeader ? 'headerStateCell' : 'stateCell',\n { columnIndex: index, rowIndex },\n domPropsSelector(name),\n );\n return (\n <Box as=\"td\" className=\"stateCell\" {...domProps}>\n {state ? <RowStatesRenderer state={state} /> : ''}\n </Box>\n );\n};\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';\nimport React from 'react';\nimport { TApiaFilter, TApiaFilterValue } from '@apia/util';\nimport { ApiaFilter } from '@apia/components';\nimport { useResponsiveTableContext } from './ResponsiveTableContext';\nimport { domPropsSelector } from './ResponsiveTable';\nimport { RangeFilter } from './filters/RangeFilter';\nimport { useDomProps } from './store/selection/useDomProps';\nimport { TResponsiveTableContextProps } from './types';\n\ninterface IFilterCell {\n columnIndex: number;\n filter?: TApiaFilter;\n Renderer?: ReturnType<\n NonNullable<TResponsiveTableContextProps['FiltersRenderer']>\n >;\n}\n\nexport const FilterCell = ({ columnIndex, filter, Renderer }: IFilterCell) => {\n const { name, onFilterBlur, onFilterChange, onFilterPressEnter } =\n useResponsiveTableContext();\n const domProps = useDomProps(\n 'filterTd',\n {\n columnIndex,\n },\n domPropsSelector(name),\n );\n\n const handleOnBlur = React.useCallback(\n (currentValue: TApiaFilterValue) => {\n if (filter && onFilterBlur) onFilterBlur({ ...filter, currentValue });\n },\n [filter, onFilterBlur],\n );\n\n const handleOnChange = React.useCallback(\n (currentValue: TApiaFilterValue) => {\n if (filter && onFilterChange)\n return onFilterChange({ ...filter, currentValue });\n return true;\n },\n [filter, onFilterChange],\n );\n\n const handleOnPressEnter = React.useCallback(\n (currentValue: TApiaFilterValue) => {\n if (filter && onFilterPressEnter)\n onFilterPressEnter({ ...filter, currentValue });\n },\n [filter, onFilterPressEnter],\n );\n\n function findFilter() {\n if (filter?.isRange) {\n return <RangeFilter filter={filter} />;\n }\n if (filter && !(filter.asAdditional || !filter.column || filter.isRange)) {\n return (\n <ApiaFilter\n onBlur={handleOnBlur}\n onChange={handleOnChange}\n onPressEnter={handleOnPressEnter}\n filter={filter}\n />\n );\n }\n\n let label: string;\n if (filter && (filter.asAdditional || !filter.column || filter.isRange)) {\n label = window.LBL_ADDITIONAL_FILTER;\n } else {\n label = window.LBL_NO_COLUMN_FILTER;\n }\n\n return <Input aria-label={label} disabled />;\n }\n return (\n <td {...domProps}>\n {Renderer ? <Renderer filter={filter!} /> : findFilter()}\n </td>\n );\n};\n","import { useUpdateEffect } from 'ahooks';\nimport uniqueId from 'lodash-es/uniqueId';\nimport React, { useState } from 'react';\nimport {\n customEvents,\n getLabel,\n persistentStorage,\n TApiaFilter,\n} from '@apia/util';\nimport { shallowEqual } from '@apia/store';\nimport { useOtherTagButton } from '@apia/components';\nimport { Icon } from '@apia/icons';\nimport { HeaderCell } from './HeaderCell';\nimport { useResponsiveTableContext } from './ResponsiveTableContext';\nimport { useResponsiveTable } from './store';\nimport { StateCell } from './StateCell';\nimport { FilterCell } from './FilterCell';\nimport { useDomProps } from './store/selection/useDomProps';\nimport { domPropsSelector } from './ResponsiveTable';\n\ndeclare global {\n interface Window {\n focusedRow: number;\n focusedColumn: number;\n hasNonAdditionalFilters: boolean;\n }\n}\n\nconst NoMemoHeader = () => {\n const { name, FiltersRenderer } = useResponsiveTableContext();\n\n const columns = useResponsiveTable(\n (global) => global.responsiveTableSlice[name]?.columns,\n );\n const hasNonAdditionalFilters = useResponsiveTable(\n (global) => global.responsiveTableSlice[name]?.hasNonAdditionalFilters,\n );\n const focusedColumn = useResponsiveTable(\n (global) => global.responsiveTableSlice[name]?.focusedColumn,\n );\n const focusedRow = useResponsiveTable(\n (global) => global.responsiveTableSlice[name]?.focusedRow,\n );\n\n const filters = useResponsiveTable<\n {\n columnIndex: number;\n definition: TApiaFilter;\n }[]\n >(\n (global) => {\n const tableState = global.responsiveTableSlice[name];\n const returnObject = tableState?.filters\n ?.map((current) => ({\n columnIndex: tableState.columns.findIndex(\n (search) => search.name === current.column,\n ),\n definition: current,\n }))\n .filter((current) => current.columnIndex >= 0);\n\n return returnObject;\n },\n (a, b) => {\n return (\n a?.length === b?.length &&\n a?.reduce<boolean>((result, current, index) => {\n return (\n result && shallowEqual(current.definition, b[index].definition)\n );\n }, true)\n );\n },\n );\n\n const statesCount = useResponsiveTable((globalState) => {\n const state = globalState.responsiveTableSlice[name];\n return state?.statesColumns ?? 0;\n }, shallowEqual);\n\n const additionalColumns = React.useMemo(\n () =>\n columns?.reduce(\n (count, column) => count + (column.showAsAdditional ? 1 : 0),\n 0,\n ),\n [columns],\n );\n\n const statesIds = React.useMemo(() => {\n return Array(statesCount)\n .fill('')\n .map(() => uniqueId());\n }, [statesCount]);\n\n const [isFiltersRowVisible, setIsFiltersRowVisible] = React.useState<boolean>(\n /* (persistentStorage.showResponsiveTableFilters as boolean) ?? */ false,\n );\n React.useEffect(() => {\n persistentStorage.showResponsiveTableFilters = isFiltersRowVisible;\n }, [isFiltersRowVisible]);\n\n const buttonProps = useOtherTagButton(\n React.useMemo(\n () => ({\n className: 'additionalColumn',\n onClick: () => setIsFiltersRowVisible((current) => !current),\n }),\n [],\n ),\n );\n\n const [ref, setRef] = useState<HTMLTableRowElement | null>(null);\n\n useUpdateEffect(() => {\n const handleFocus = (ev: Event) => {\n ev.stopPropagation();\n setIsFiltersRowVisible(true);\n };\n ref?.addEventListener(customEvents.focus, handleFocus);\n return () => {\n ref?.removeEventListener(customEvents.focus, handleFocus);\n };\n }, [ref]);\n\n const domProps = useDomProps('headerTr', {}, domPropsSelector(name));\n\n return (\n <thead>\n <tr {...domProps}>\n {(additionalColumns > 0 || hasNonAdditionalFilters) && (\n <th\n aria-colindex={1}\n aria-rowindex={1}\n data-focused={\n focusedColumn === 1 &&\n focusedRow === -1 - (hasNonAdditionalFilters ? 1 : 0)\n }\n {...buttonProps}\n tabIndex={\n focusedColumn === 1 &&\n focusedRow === -1 - (hasNonAdditionalFilters ? 1 : 0)\n ? 0\n : -1\n }\n aria-label={\n isFiltersRowVisible\n ? getLabel('lblHideFilters').text\n : getLabel('lblShowFilters').text\n }\n role=\"rowheader\"\n >\n {hasNonAdditionalFilters ? (\n <Icon\n className=\"filterButton\"\n name=\"Filter\"\n title={\n isFiltersRowVisible\n ? getLabel('lblHideFilters').text\n : getLabel('lblShowFilters').text\n }\n aria-label={\n isFiltersRowVisible\n ? getLabel('lblHideFilters').text\n : getLabel('lblShowFilters').text\n }\n />\n ) : (\n <>\n <span style={{ display: 'none' }}>\n {isFiltersRowVisible\n ? getLabel('lblHideFilters').text\n : getLabel('lblShowFilters').text}\n </span>\n <span> </span>\n </>\n )}\n </th>\n )}\n {statesIds.map((id, i) => (\n <StateCell isHeader key={id} index={i} rowIndex={1} />\n ))}\n {columns\n ?.map((current, actualColumnIndex) => ({\n ...current,\n actualTableColumnIndex: actualColumnIndex,\n }))\n .filter((current) => !current.showAsAdditional)\n .map((current, columnIndex) => {\n if (current.hidden) return null;\n\n return (\n <HeaderCell\n apiaColumnIndex={current.actualTableColumnIndex}\n columnIndex={current.actualTableColumnIndex}\n inTableColumnIndex={columnIndex}\n key={current.name}\n />\n );\n })}\n </tr>\n {(filters?.length ?? 0) > 0 && (\n <tr\n aria-rowindex={2}\n data-rowindex={-1}\n ref={setRef}\n data-focusindex={2}\n className={`responsiveTable__filters__row ${\n isFiltersRowVisible ? '' : 'hidden'\n }`}\n >\n {(additionalColumns > 0 || hasNonAdditionalFilters) && (\n <td\n className=\"noFilter\"\n aria-colindex={1}\n aria-rowindex={2}\n tabIndex={focusedColumn === 1 && focusedRow === -1 ? 0 : -1}\n data-focused={focusedColumn === 1 && focusedRow === -1}\n >\n \n </td>\n )}\n {statesIds.map((id, i) => (\n <StateCell isHeader key={id} index={i} rowIndex={2} />\n ))}\n {columns\n ?.filter((current) => !current.showAsAdditional && !current.hidden)\n .map((current, columnIndex) => {\n const filter = filters.find(\n (search) => search.definition.column === current.name,\n );\n\n const RenderComponent = filter\n ? FiltersRenderer?.(String(filter.definition.id))\n : undefined;\n\n return current.showAsAdditional ? null : (\n <FilterCell\n key={current.name}\n columnIndex={columnIndex}\n filter={filter?.definition}\n Renderer={RenderComponent}\n />\n );\n })}\n </tr>\n )}\n </thead>\n );\n};\n\nexport const Header = React.memo(NoMemoHeader);\n","import React from 'react';\nimport { Box } from '@apia/theme';\nimport { TResponsiveTableCellRendererProps } from '../types';\n\nconst NoMemoAdditionalColumnDefaultRenderer = ({\n column,\n cell,\n}: TResponsiveTableCellRendererProps) => {\n return (\n <Box\n className={`${cell.className ?? ''} responsiveTable__additionalInfoItem`}\n id={cell.id}\n title={cell.title}\n >\n <Box as=\"strong\">{column.label ?? column.name}:</Box> {cell.children}\n </Box>\n );\n};\n\nexport const AdditionalColumnDefaultRenderer = React.memo(\n NoMemoAdditionalColumnDefaultRenderer,\n);\n","import { domPropsSelector } from './ResponsiveTable';\nimport { useResponsiveTableContext } from './ResponsiveTableContext';\nimport { useDomProps } from './store/selection/useDomProps';\n\nexport const SeparatorCell = ({\n colSpan,\n rowIndex,\n}: {\n colSpan: number;\n rowIndex: number;\n}) => {\n const { name } = useResponsiveTableContext();\n const domProps = useDomProps(\n 'separator',\n { rowIndex },\n domPropsSelector(name),\n );\n return (\n <td className=\"row__separator__cell\" colSpan={colSpan} {...domProps} />\n );\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport React, { useMemo } from 'react';\nimport { Box } from '@apia/theme';\nimport {\n TResponsiveTableRowRenderer,\n TResponsiveTableRowRendererProps,\n} from '../types';\n\nconst NoMemoDefaultRowRenderer: TResponsiveTableRowRenderer = React.forwardRef<\n HTMLTableRowElement,\n TResponsiveTableRowRendererProps\n>(({ row, rowIndex, ...props }, currentRef) => (\n <Box\n as={'tr' as any}\n sx={useMemo(\n () => ({\n '&.colored, & > *': {\n color: row.color,\n background: row.background,\n },\n }),\n [row.background, row.color],\n )}\n ref={currentRef as React.RefObject<HTMLTableRowElement>}\n {...props}\n />\n));\n\nNoMemoDefaultRowRenderer.displayName = 'DefaultRowRenderer';\n\nexport const DefaultRowRenderer = NoMemoDefaultRowRenderer;\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';\nimport { shallowEqual } from 'react-redux';\nimport { domPropsSelector } from './ResponsiveTable';\nimport { DefaultCellRenderer } from './renderers/DefaultCellRenderer';\nimport { useResponsiveTableContext } from './ResponsiveTableContext';\nimport { useDomProps } from './store/selection/useDomProps';\nimport { useResponsiveTable } from './store';\nimport { getFocusSelector } from '@apia/util';\n\ninterface ICell {\n columnIndex: number;\n inTableColumnIndex: number;\n rowIndex: number;\n}\n\nconst NoMemoCell: FC<ICell> = ({\n columnIndex,\n inTableColumnIndex,\n rowIndex,\n}) => {\n const { name } = useResponsiveTableContext();\n const domProps = useDomProps(\n 'td',\n { columnIndex: inTableColumnIndex, rowIndex },\n domPropsSelector(name),\n );\n\n const cell = useResponsiveTable((global) => {\n const tableState = global.responsiveTableSlice[name];\n\n return tableState?.rows[rowIndex]?.cells[columnIndex];\n }, shallowEqual);\n\n const column = useResponsiveTable((global) => {\n const tableState = global.responsiveTableSlice[name];\n return tableState?.columns[columnIndex];\n }, shallowEqual);\n\n const row = useResponsiveTable((global) => {\n const tableState = global.responsiveTableSlice[name];\n return tableState?.rows[rowIndex];\n }, shallowEqual);\n\n const Renderer = React.useMemo(\n () => cell?.Renderer ?? column.Renderer ?? DefaultCellRenderer,\n [cell?.Renderer, column.Renderer],\n );\n\n if (!Renderer || !cell)\n return row.separator ? <div className=\"separator\"></div> : null;\n\n return (\n <Renderer\n {...(domProps as Omit<React.HTMLProps<HTMLTableCellElement>, 'ref'>)}\n cell={cell}\n column={column}\n row={row}\n onFocus={(ev) => {\n if (ev.target instanceof HTMLElement) {\n const cell = ev.target.closest<HTMLElement>('td,th');\n if (ev.target === cell) {\n const widget = cell?.querySelector<HTMLElement>(getFocusSelector());\n if (cell && widget) {\n widget.focus();\n cell.tabIndex = -1;\n }\n }\n }\n }}\n />\n );\n};\n\nexport const Cell = React.memo(NoMemoCell);\n","import uniqueId from 'lodash-es/uniqueId';\nimport React, { useRef } from 'react';\nimport { shallowEqual } from 'react-redux';\nimport { MdKeyboardArrowRight, MdKeyboardArrowDown } from '@meronex/icons/md/';\nimport { Box } from '@apia/theme';\nimport { IconButton } from '@apia/components';\nimport { getVariant } from '@apia/theme';\nimport { domPropsSelector } from './ResponsiveTable';\nimport { TResponsiveTableCell, TResponsiveTableColumn } from './types';\nimport { AdditionalColumnDefaultRenderer } from './renderers/AdditionalColumnDefaultRenderer';\nimport { SeparatorCell } from './SeparatorCell';\nimport { DefaultRowRenderer } from './renderers/DefaultRowRenderer';\nimport { useResponsiveTableContext } from './ResponsiveTableContext';\nimport {\n responsiveTableActions,\n responsiveTableStore,\n useResponsiveTable,\n} from './store';\nimport { useDomProps } from './store/selection/useDomProps';\nimport { StateCell } from './StateCell';\nimport { Cell } from './Cell';\nimport { getLabel, scrollParentIntoElement } from '@apia/util';\n\ninterface IRow {\n rowIndex: number;\n}\n\ntype TAdditionalCell = {\n cell: TResponsiveTableCell;\n column: TResponsiveTableColumn;\n columnIndex: number;\n};\n\nconst NoMemoRow = ({ rowIndex }: IRow) => {\n const { name } = useResponsiveTableContext();\n\n const { columns, hasNonAdditionalFilters, isScrolledIntoView } =\n useResponsiveTable((global) => {\n const tableState = global.responsiveTableSlice[name];\n return {\n columns: tableState?.columns ?? [],\n hasNonAdditionalFilters: tableState?.hasNonAdditionalFilters,\n isScrolledIntoView: tableState.scrollIntoViewRow === rowIndex,\n };\n }, shallowEqual);\n const row = useResponsiveTable(\n (global) => global.responsiveTableSlice[name].rows[rowIndex],\n shallowEqual,\n );\n const additionalCells: TAdditionalCell[] = useResponsiveTable(\n (global) => {\n const tableState = global.responsiveTableSlice[name];\n return tableState.columns\n .map((current, index) =>\n current.showAsAdditional\n ? {\n index,\n column: current,\n }\n : null,\n )\n .filter(\n (\n current,\n ): current is {\n index: number;\n column: TResponsiveTableColumn;\n } => !!current,\n )\n .map((current) => {\n return {\n cell: tableState.rows[rowIndex]?.cells[current.index],\n column: current.column,\n columnIndex: current.index,\n };\n });\n },\n (currentValue, newValue) => {\n return currentValue.reduce<boolean>(\n (accumulatedBoolean, currentCell, cellIndex) => {\n return (\n accumulatedBoolean && shallowEqual(currentCell, newValue[cellIndex])\n );\n },\n true,\n );\n },\n );\n const { isDragging, isExpanded, shouldForbidSelection } = useResponsiveTable(\n (global) => {\n const tableState = global.responsiveTableSlice[name];\n return {\n isExpanded: tableState.expandedRows.includes(rowIndex),\n isDragging: tableState.draggingRow === rowIndex,\n shouldForbidSelection: tableState.rows[rowIndex]?.forbidSelection,\n };\n },\n shallowEqual,\n );\n\n const domProps = useDomProps(\n 'tr',\n {\n isThisRowExpanded: isExpanded,\n rowIndex,\n },\n domPropsSelector(name),\n );\n\n const expandedRowDomProps = useDomProps(\n 'tr',\n {\n isTheExpandedRow: true,\n rowIndex,\n },\n domPropsSelector(name),\n );\n\n const handleExpandedState = React.useCallback(\n (ev: boolean | React.MouseEvent) => {\n const willBeExpanded = typeof ev === 'boolean' ? ev : !isExpanded;\n if (!willBeExpanded)\n responsiveTableStore.dispatch(\n responsiveTableActions.update({\n tableName: name,\n expandedRows: responsiveTableStore\n .getState()\n .responsiveTableSlice[\n name\n ].expandedRows.filter((current) => current !== rowIndex),\n }),\n );\n else\n responsiveTableStore.dispatch(\n responsiveTableActions.update({\n tableName: name,\n expandedRows: [\n ...responsiveTableStore.getState().responsiveTableSlice[name]\n .expandedRows,\n rowIndex,\n ],\n }),\n );\n },\n [isExpanded, name, rowIndex],\n );\n\n const statesCount = useResponsiveTable((globalState) => {\n const state = globalState.responsiveTableSlice[name];\n return state?.statesColumns ?? 0;\n }, shallowEqual);\n\n const states = React.useMemo(\n () => (row.states ?? []).map((current) => ({ ...current, id: uniqueId() })),\n [row.states],\n );\n\n const { ref, ...additionalCellDomProps } = useDomProps(\n 'additionalTd',\n { rowIndex },\n domPropsSelector(name),\n );\n\n const Renderer = React.useMemo(\n () => row.renderer ?? DefaultRowRenderer,\n [row.renderer],\n );\n\n const hasScrolled = useRef(false);\n\n return (\n <>\n <Renderer\n {...domProps}\n row={row}\n rowIndex={rowIndex}\n className={`responsiveTable__row ${row.isHidden ? 'hidden' : ''} ${\n domProps['aria-selected'] ? 'selected' : ''\n } ${shouldForbidSelection ? 'non-selectable' : ''} ${states\n .map((current) => current.className)\n .join(' ')} ${row.className ?? ''} ${\n row.separator ? 'row__separator' : ''\n } ${isDragging ? 'draggingRow' : ''}`}\n onKeyDown={React.useCallback(\n (ev: React.KeyboardEvent) => {\n if (ev.key.toLowerCase() === 'arrowleft' && ev.ctrlKey) {\n ev.preventDefault();\n ev.stopPropagation();\n handleExpandedState(false);\n }\n if (ev.key.toLowerCase() === 'arrowright' && ev.ctrlKey) {\n ev.preventDefault();\n ev.stopPropagation();\n handleExpandedState(true);\n }\n },\n [handleExpandedState],\n )}\n {...{\n ref: (el: HTMLElement) => {\n if (el && isScrolledIntoView && !hasScrolled.current) {\n hasScrolled.current = true;\n scrollParentIntoElement(el);\n }\n },\n }}\n >\n {row.separator ? (\n <SeparatorCell\n colSpan={\n (additionalCells.length > 0 || hasNonAdditionalFilters ? 1 : 0) +\n statesCount +\n columns.filter((current) => !current.showAsAdditional).length\n }\n rowIndex={rowIndex}\n />\n ) : (\n <>\n {(additionalCells.length > 0 || hasNonAdditionalFilters) && (\n <td className=\"additionalInfo__cell\" {...additionalCellDomProps}>\n {additionalCells.length > 0 && (\n <IconButton\n size={'Lg'}\n {...getVariant('icon-outline')}\n icon={\n isExpanded ? MdKeyboardArrowDown : MdKeyboardArrowRight\n }\n aria-label={\n isExpanded\n ? getLabel('lblCollapseRow').text\n : getLabel('lblExpandRow').text\n }\n className=\"moreInformationButton\"\n onClick={handleExpandedState}\n />\n )}\n </td>\n )}\n {Array(statesCount)\n .fill('')\n .map((_, i) => {\n return (\n <StateCell\n key={states[i]?.id ?? i}\n index={i}\n state={states[i]}\n rowIndex={rowIndex}\n />\n );\n })}\n {columns\n .map((current, actualColumnIndex) => ({\n ...current,\n actualColumnIndex,\n }))\n .filter((current) => !current.showAsAdditional)\n .map((current, inTableColumnIndex) => {\n if (current.hidden) return null;\n return (\n <Cell\n key={current.name}\n columnIndex={current.actualColumnIndex}\n rowIndex={rowIndex}\n inTableColumnIndex={inTableColumnIndex}\n />\n );\n })}\n </>\n )}\n </Renderer>\n {isExpanded && (\n <tr className=\"expandedRow\" {...expandedRowDomProps}>\n <td\n colSpan={\n columns.length - additionalCells.length + states.length + 1\n }\n >\n <Box className=\"responsiveTable__additionalInfoContainer\">\n {additionalCells.map((current) => {\n const { Renderer: ColumnRenderer } = current.column;\n if (ColumnRenderer)\n return (\n <ColumnRenderer\n key={current.column.name}\n cell={current.cell}\n column={current.column}\n row={row}\n />\n );\n return (\n <AdditionalColumnDefaultRenderer\n key={current.column.name}\n cell={current.cell}\n column={current.column}\n row={row}\n />\n );\n })}\n </Box>\n </td>\n </tr>\n )}\n </>\n );\n};\n\nexport const Row = React.memo(NoMemoRow);\n","import { Box } from '@apia/theme';\nimport { useResponsiveTableContext } from '../ResponsiveTableContext';\n\nexport const NoRegistersRenderer = () => {\n const { labels } = useResponsiveTableContext();\n return <Box className=\"no__registers\">{labels.noRegisters}</Box>;\n};\n","import React from 'react';\nimport { shallowEqual } from 'react-redux';\nimport { Box } from '@apia/theme';\nimport { getVariant } from '@apia/theme';\nimport { Header } from '../Header';\nimport { useResponsiveTableContext } from '../ResponsiveTableContext';\nimport { Row } from '../Row';\nimport { NoRegistersRenderer } from './NoRegistersRenderer';\nimport { useDomProps } from '../store/selection/useDomProps';\nimport { useResponsiveTable } from '../store';\n\nconst NoMemoTableRenderer = ({ variant }: { variant?: string }) => {\n const { name, label, labels } = useResponsiveTableContext();\n const domProps = useDomProps(\n 'table',\n {},\n (global) => global.responsiveTableSlice[name],\n );\n\n const rows = useResponsiveTable((global) => {\n const tableState = global.responsiveTableSlice[name];\n return tableState?.rows?.map((current) => current.id);\n }, shallowEqual);\n\n const columnsCount = useResponsiveTable(\n (global) =>\n (global.responsiveTableSlice[name]?.nonAdditionalColumnsCount ?? 0) +\n (global.responsiveTableSlice[name]?.hasNonAdditionalFilters ? 1 : 0) +\n (global.responsiveTableSlice[name]?.statesColumns ?? 0) +\n (global.responsiveTableSlice[name]?.columns.find(\n (current) => current.showAsAdditional,\n )\n ? 1\n : 0),\n );\n\n const rowsCount = useResponsiveTable(\n (global) => global.responsiveTableSlice[name]?.rows.length || 0,\n );\n\n return (\n <Box\n {...domProps}\n as=\"table\"\n className=\"responsiveTable__table\"\n {...getVariant(variant || 'layout.common.tables.primary')}\n aria-label={label}\n >\n <Header />\n <tbody>\n {rowsCount > 0 ? (\n rows?.map((row, index) => {\n return (\n <Row key={row ?? `${row as string}-${index}`} rowIndex={index} />\n );\n })\n ) : labels.noRegisters ? (\n <tr>\n <td colSpan={columnsCount}>\n <NoRegistersRenderer />\n </td>\n </tr>\n ) : null}\n </tbody>\n </Box>\n );\n};\n\nexport const TableRenderer = React.memo(NoMemoTableRenderer);\n","import { Box } from '@apia/theme';\nimport { FunctionComponent } from 'react';\nimport {\n TResponsiveTableCell,\n TResponsiveTableColumn,\n TResponsiveTableRow,\n} from '../types';\n\nexport type TAccordionCellRendererProps<CellProps = Record<string, unknown>> = {\n cell: TResponsiveTableCell<CellProps>;\n column: TResponsiveTableColumn;\n columnIndex: number;\n row: TResponsiveTableRow;\n rowIndex: number;\n};\n\nexport type TAccordionCellRenderer<CellProps = Record<string, unknown>> =\n FunctionComponent<TAccordionCellRendererProps<CellProps>>;\n\nconst NoMemoAccordionCell: TAccordionCellRenderer = ({ cell, column }) => {\n return (\n <Box\n key={column.name}\n className={`responsiveTable__accordionElement__column ${\n cell.className ?? ''\n }`}\n >\n <Box as=\"strong\">{column.label ?? column.name}: </Box>\n <Box as=\"span\" sx={{ color: cell.color, background: cell.background }}>\n {cell?.children}\n </Box>\n </Box>\n );\n};\n\nexport const AccordionCell = NoMemoAccordionCell;\n","import React, { memo, useMemo } from 'react';\nimport { shallowEqual } from 'react-redux';\nimport { useResponsiveTableContext } from '../ResponsiveTableContext';\nimport { TResponsiveTableRow } from '../types';\nimport { AccordionCell } from './AccordionCell';\nimport {\n responsiveTableActions,\n responsiveTableStore,\n useResponsiveTable,\n} from '../store';\nimport { AccordionItem, IAccordionItemButton } from '@apia/components';\n\nexport interface IAccordionElement {\n row: TResponsiveTableRow;\n rowIndex: number;\n}\n\nconst NoMemoAccordionElement = ({ row, rowIndex }: IAccordionElement) => {\n const { name } = useResponsiveTableContext();\n\n const indexColumns = useResponsiveTable((global) => {\n const tableState = global.responsiveTableSlice[name];\n return tableState?.accordionIndexColumns;\n }, shallowEqual);\n const columns = useResponsiveTable((global) => {\n const tableState = global.responsiveTableSlice[name];\n return tableState?.columns;\n }, shallowEqual);\n\n const title = React.useMemo(() => {\n if (row.title) return row.title;\n if (Array.isArray(indexColumns))\n return indexColumns\n .map(\n (current) =>\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n row.cells[current.index].title ||\n (row.cells[current.index].children as string),\n )\n .join(' | ');\n return row.cells[0].title ?? (row.cells[0].children as string);\n }, [indexColumns, row.cells, row.title]);\n const isSelected = useResponsiveTable((global) =>\n global.responsiveTableSlice[name].allowSelection !== false\n ? global.responsiveTableSlice[name].selectedRows.includes(rowIndex)\n : undefined,\n );\n const isFocused = useResponsiveTable(\n (global) => global.responsiveTableSlice[name].focusedRow === rowIndex,\n );\n const buttonProps = useMemo<IAccordionItemButton>(\n () => ({\n title,\n ariaLabel: title,\n label: title,\n checked: isSelected,\n onChange: (isChecked: boolean) => {\n const isMultiple =\n responsiveTableStore.getState().responsiveTableSlice[name].isMultiple;\n responsiveTableStore.dispatch(\n responsiveTableActions.update({\n tableName: name,\n selectedRows: isMultiple\n ? isChecked\n ? [\n ...responsiveTableStore.getState().responsiveTableSlice[\n name\n ].selectedRows,\n rowIndex,\n ]\n : responsiveTableStore\n .getState()\n .responsiveTableSlice[\n name\n ].selectedRows.filter((current) => current !== rowIndex)\n : [rowIndex],\n }),\n );\n },\n tabIndex: isFocused ? 0 : -1,\n rightButtons: row.accordionButtonProps?.rightButtons,\n onUserPressEnter: row.accordionButtonProps?.onUserPressEnter,\n domButtonProps: {\n buttonSx: {\n '&.accordion__item__button .accordion__item__button__label': {\n color: row.color,\n },\n },\n },\n }),\n [\n isFocused,\n isSelected,\n name,\n row.accordionButtonProps?.onUserPressEnter,\n row.accordionButtonProps?.rightButtons,\n row.color,\n rowIndex,\n title,\n ],\n );\n\n if (!Array.isArray(indexColumns) || !columns) return null;\n\n return (\n <AccordionItem id={row.id} buttonProps={buttonProps}>\n {columns.map((currentColumn, columnIndex) => {\n const Renderer =\n row.cells[columnIndex].AccordionRenderer ??\n currentColumn.AccordionRenderer ??\n AccordionCell;\n\n return currentColumn.hideFromAccordion ||\n currentColumn.showAsAdditional ? null : (\n <Renderer\n cell={row.cells[columnIndex]}\n column={currentColumn}\n columnIndex={columnIndex}\n key={currentColumn.name}\n row={row}\n rowIndex={rowIndex}\n />\n );\n })}\n\n {columns\n .filter((current) => !!current.showAsAdditional)\n .map((currentColumn, columnIndex) => {\n const Renderer =\n row.cells[columnIndex].AccordionRenderer ??\n currentColumn.AccordionRenderer ??\n AccordionCell;\n\n return currentColumn.hideFromAccordion ? null : (\n <Renderer\n cell={row.cells[columnIndex]}\n column={currentColumn}\n columnIndex={columnIndex}\n key={currentColumn.name}\n row={row}\n rowIndex={rowIndex}\n />\n );\n })}\n </AccordionItem>\n );\n};\n\nexport const AccordionElement = memo(NoMemoAccordionElement);\n","import React from 'react';\nimport { shallowEqual } from 'react-redux';\nimport { useResponsiveTableContext } from '../ResponsiveTableContext';\nimport { TResponsiveTableColumn } from '../types';\nimport { AccordionElement } from './AccordionElement';\nimport { NoRegistersRenderer } from './NoRegistersRenderer';\nimport {\n responsiveTableActions,\n useResponsiveTable,\n responsiveTableStore,\n} from '../store';\nimport { TResponsiveTableIndexColumns } from '../store/types';\nimport { Accordion } from '@apia/components';\n\nconst NoMemoAccordionRenderer = () => {\n const { name } = useResponsiveTableContext();\n\n const { columns, rows } = useResponsiveTable((global) => {\n const tableState = global.responsiveTableSlice[name];\n return {\n columns: tableState?.columns,\n rows: tableState?.rows,\n };\n }, shallowEqual);\n\n React.useEffect(() => {\n /**\n * Método para seleccionar qué columnas se utilizarán\n * como cabezal en cada fila.\n *\n * - Si existe al menos una columna marcada con showInAccordionTitle,\n * todas las columnas que estén marcadas con esta propiedad serán\n * mostradas como parte del título.\n *\n * - Si no existe ninguna, se busca cuál es la primera columna\n * que no tiene ninguna entrada vacía y se utiliza como título\n * del acordión.\n *\n * - Si ninguna columna no tiene ninguna fila vacía, entonces se\n * utiliza la primera columna.\n */\n\n if (columns && rows) {\n /**\n * Buscar columnas marcadas\n */\n const markedAsTitleColumns: TResponsiveTableIndexColumns = [];\n columns.forEach((column, index) => {\n if (column.showInAccordionTitle)\n markedAsTitleColumns.push({ column, index });\n });\n if (markedAsTitleColumns.length > 0) {\n responsiveTableStore.dispatch(\n responsiveTableActions.update({\n tableName: name,\n accordionIndexColumns: markedAsTitleColumns,\n }),\n );\n } else {\n /**\n * No se encontró ninguna columna marcada, se busca la primera sin\n * entradas vacías.\n */\n const columnsLength = columns.length;\n let indexColumn: TResponsiveTableColumn | null = null;\n let currentIndex = 0;\n\n while (!indexColumn && currentIndex < columns.length) {\n let isAnyEmptyRow = false;\n // eslint-disable-next-line no-restricted-syntax\n for (const row of rows) {\n if (!row.cells[currentIndex].children) {\n isAnyEmptyRow = true;\n break;\n }\n }\n if (!isAnyEmptyRow && columns[currentIndex]) {\n indexColumn = columns[currentIndex];\n } else {\n currentIndex += 1;\n if (currentIndex === columnsLength) break;\n }\n }\n if (!indexColumn) {\n /**\n * No hay ninguna sin ninguna entrada vacía,\n * se usa la primera columna.\n */\n [indexColumn] = columns;\n currentIndex = 0;\n }\n responsiveTableStore.dispatch(\n responsiveTableActions.update({\n tableName: name,\n accordionIndexColumns: [\n { column: indexColumn, index: currentIndex },\n ],\n }),\n );\n }\n }\n }, [columns, name, rows]);\n\n return (\n <Accordion>\n {!rows || (rows.length === 0 && <NoRegistersRenderer />)}\n {rows?.map((current, rowIndex) => (\n <AccordionElement row={current} rowIndex={rowIndex} key={current.id} />\n ))}\n </Accordion>\n );\n};\n\nexport const AccordionRenderer = React.memo(NoMemoAccordionRenderer);\n","import React from 'react';\nimport { Box, BoxProps, useBreakpointIndex } from '@apia/theme';\nimport { getVariant } from '@apia/theme';\nimport { KeyHandler } from './KeyHandler';\nimport { TableRenderer } from './renderers/TableRenderer';\nimport { AccordionRenderer } from './renderers/AccordionRenderer';\nimport { TUseDomProps } from './store/selection/types';\nimport { responsiveTableStore } from './store';\nimport { useResponsiveTableContext } from './ResponsiveTableContext';\n\ntype TResponsiveTable = BoxProps;\n\n/**\n * Este objeto determina qué partes de la tabla deben\n * ser 'debugueadas'. Sobre todo para conocer el\n * impacto en el performance de la misma.\n */\nexport const rtDebug = {\n cell: false,\n context: false,\n filterCell: false,\n filters: {\n additional: false,\n grouped: false,\n inner: false,\n responsive: false,\n sort: false,\n },\n header: false,\n headerCell: false,\n index: false,\n keyHandler: false,\n row: false,\n tableRenderer: false,\n};\n\nexport const domPropsSelector: (name: string) => TUseDomProps =\n (name: string) =>\n (global: ReturnType<typeof responsiveTableStore.getState>) =>\n global.responsiveTableSlice[name];\n\n/**\n * El ResponsiveTable renderiza una tabla en base a la\n * información provista por ResponsiveTableContext, quien\n * debe ser ancestro de este elemento. La finalidad última\n * de este componente es lograr responsividad y performance.\n *\n * Las props pasadas sarán colocadas directamente en el\n * wrapper de la tabla. Con esta estructura se busca que\n * a la hora de dar estilos a este componente, se pueda pasar\n * un variant al Wrapper, sin afectar los estilos por defecto\n * de la tabla ni del acordión en modo responsivo. Esto no limita\n * en ningún concepto la posibilidad de cambiar el variant a\n * la tabla o al acordión, ya que eso puede hacerse desde un\n * variante personalizado con la estructura mostrada en el\n * ejemplo.\n *\n * Además, de esta manera es posible aplicar estilo a algunos\n * componentes nada más, sin la necesidad de cambiar el layout\n * que usa la tabla por defecto. Por ejemplo, con esta estructura\n * se puede utilizar un variant personalizado para definir\n * el ancho de las columnas de la tabla.\n *\n * @example\n * 'customVariant': {\n * '.responsiveTable__accordion': {\n * variant: 'layout.tables.otherAccordion'\n * }\n * '.responsiveTable__table': {\n * variant: 'layout.tables.otherTable'\n * }\n * }\n */\nconst NoMemoResponsiveTable = React.forwardRef<\n HTMLDivElement,\n TResponsiveTable\n>(({ className, variant, ...props }, ref) => {\n const breakpoint = useBreakpointIndex({ defaultIndex: 3 });\n const { currentBreakPoint } = useResponsiveTableContext();\n\n const actualBreakpoint = currentBreakPoint ?? breakpoint;\n\n return (\n <Box\n {...props}\n {...getVariant('layout.common.tables.responsive')}\n className={`responsiveTable__wrapper ${className ?? ''}`}\n ref={ref}\n >\n {actualBreakpoint >= 3 ? (\n <KeyHandler>\n <TableRenderer variant={variant} />\n </KeyHandler>\n ) : (\n <AccordionRenderer />\n )}\n </Box>\n );\n});\n\nNoMemoResponsiveTable.displayName = 'ResponsiveTable';\n\nexport const ResponsiveTable = React.memo(NoMemoResponsiveTable);\n","import React from 'react';\nimport { shallowEqual } from 'react-redux';\nimport { Box, Label, Select } from '@apia/theme';\nimport { useResponsiveTableContext } from '../ResponsiveTableContext';\nimport { TResponsiveTableSortValue } from '../types';\nimport { useResponsiveTable } from '../store';\n\nconst NoMemoSort = ({ tableName }: { tableName?: string }) => {\n const { name, onSortChange } = useResponsiveTableContext(tableName);\n\n const columns = useResponsiveTable((global) => {\n return global.responsiveTableSlice[name]?.columns;\n }, shallowEqual);\n\n return (\n <>\n {columns?.map((column, columnIndex) => {\n return column.showAsAdditional ||\n column.allowSorting === false ? null : (\n <Label key={column.name}>\n <Box as=\"span\">{column.label ?? column.name}</Box>\n <Box>\n <Select\n value={\n column.currentSorting === null ? '' : column.currentSorting\n }\n onChange={(ev) => {\n if (onSortChange)\n onSortChange({\n columnIndex,\n column,\n name: column.name,\n sortValue:\n ev.target.value === ''\n ? null\n : (ev.target.value as TResponsiveTableSortValue),\n });\n }}\n >\n <option value=\"\" />\n <option value=\"A\">{window.ORDER_ASC_LABEL}</option>\n <option value=\"D\">{window.ORDER_DESC_LABEL}</option>\n </Select>\n </Box>\n </Label>\n );\n })}\n </>\n );\n};\n\nexport const Sort = React.memo(NoMemoSort);\n","/* eslint-disable @typescript-eslint/prefer-nullish-coalescing */\nimport dayjs from 'dayjs';\nimport React from 'react';\nimport { Box, Label } from '@apia/theme';\nimport customParseFormat from 'dayjs/plugin/customParseFormat';\nimport {\n TApiaFilter,\n TApiaFilterValue,\n formatMessage,\n getDateFormat,\n} from '@apia/util';\nimport { ApiaFilter, RequiredMark } from '@apia/components';\nimport { TResponsiveTableContextProps } from '../types';\nimport { useResponsiveTableContext } from '../ResponsiveTableContext';\nimport { RangeFilter } from './RangeFilter';\nimport { responsiveTableStore } from '../store';\n\ndayjs.extend(customParseFormat);\n\nconst dateFormat = getDateFormat();\n\nfunction controlDatesOrder(first: string, last: string) {\n if (!first || !last) return true;\n\n if (dayjs(last, dateFormat).isBefore(dayjs(first, dateFormat))) {\n return window.MSG_FEC_FIN_MAY_FEC_INI;\n }\n return true;\n}\n\nconst NoMemoInnerRender = React.forwardRef(\n (\n {\n filters,\n tableName,\n }: {\n filters: TResponsiveTableContextProps['filters'];\n isResponsive?: boolean;\n tableName?: string;\n },\n ref,\n ) => {\n const {\n onFilterBlur,\n onFilterChange,\n onFilterPressEnter,\n name,\n FiltersRenderer,\n } = useResponsiveTableContext(tableName);\n const [lastEmittedValue, setLastEmittedValue] =\n React.useState<TApiaFilterValue | null>(null);\n const [lastEmittedValueByPartner, setLastEmittedValueByPartner] =\n React.useState<TApiaFilterValue | null>(null);\n\n return (\n <Box ref={ref} className=\"filtersRender\">\n {filters?.map((filter, key) => {\n if (filter.hide) return null;\n\n const Renderer = FiltersRenderer?.(String(filter.id));\n\n const isDate = filter.type === 'D' || filter.type === 'date';\n const filterToId = filter.filterToId ?? `${filter.id}i`;\n const filterTo: TApiaFilter = {\n ...filter,\n hide: filter.filterToId === undefined,\n id: filterToId,\n currentValue: filter.filterToValue ?? '',\n required: false,\n };\n\n const column = responsiveTableStore\n .getState()\n .responsiveTableSlice[\n name\n ].columns.find((current) => current.name === filter.column);\n const filterTitle =\n filter.title ||\n column?.label ||\n column?.title ||\n column?.name ||\n 'noFilterNorColumnTitle';\n\n return (\n <React.Fragment key={filter.id ?? filter.column ?? key}>\n <Box\n className={\n filter.type === 'D' || filter.type === 'date'\n ? 'twoColumns'\n : ''\n }\n key={filter.id ?? filter.column ?? key}\n >\n <Label\n title={\n isDate ? window.LBL_DATE_FILTER_FROM_TOOLTIP : filterTitle\n }\n >\n {window.SHOW_REQUIRED_POSITION !== '0' && (\n <RequiredMark isRequired={filter.required} />\n )}\n <Box as=\"span\">\n {isDate && !filter.hideToFilter\n ? formatMessage(window.LBL_DATE_FILTER_FROM_TXT, {\n TOK1: filterTitle,\n })\n : filterTitle}\n </Box>\n {Renderer ? (\n <Renderer filter={filter} />\n ) : filter.isRange ? (\n <RangeFilter filter={filter} />\n ) : (\n <ApiaFilter\n filter={filter}\n onChange={(currentValue) => {\n const result = controlDatesOrder(\n currentValue as string,\n lastEmittedValueByPartner as string,\n );\n if (result === true) {\n setLastEmittedValue(currentValue);\n if (onFilterChange)\n void onFilterChange({ ...filter, currentValue });\n }\n return result;\n }}\n onBlur={(currentValue) => {\n if (onFilterBlur)\n void onFilterBlur({ ...filter, currentValue });\n }}\n onPressEnter={(currentValue) => {\n if (onFilterPressEnter)\n void onFilterPressEnter({\n ...filter,\n currentValue,\n });\n }}\n />\n )}\n {window.SHOW_REQUIRED_POSITION === '0' && (\n <RequiredMark isRequired={filter.required} />\n )}\n </Label>\n </Box>\n {isDate && !filter.hideToFilter && (\n <Box\n className={\n filter.type === 'D' || filter.type === 'date'\n ? 'twoColumns'\n : ''\n }\n >\n <Label title={window.LBL_DATE_FILTER_TO_TOOLTIP}>\n <Box as=\"span\">\n {formatMessage(window.LBL_DATE_FILTER_TO_TXT, {\n TOK1: filterTitle,\n })}\n </Box>\n <ApiaFilter\n filter={filterTo}\n onChange={(currentValue) => {\n const result = controlDatesOrder(\n lastEmittedValue as string,\n currentValue as string,\n );\n if (result === true) {\n setLastEmittedValueByPartner(currentValue);\n if (onFilterChange)\n void onFilterChange({\n ...filter,\n filterToId,\n filterToValue: currentValue,\n });\n }\n return result;\n }}\n onBlur={(currentValue) => {\n if (onFilterBlur)\n void onFilterBlur({\n ...filter,\n filterToId,\n filterToValue: currentValue,\n });\n }}\n onPressEnter={(currentValue) => {\n if (onFilterPressEnter)\n void onFilterPressEnter({\n ...filter,\n filterToId,\n filterToValue: currentValue,\n });\n }}\n />\n </Label>\n </Box>\n )}\n </React.Fragment>\n );\n })}\n </Box>\n );\n },\n);\n\nNoMemoInnerRender.displayName = 'FiltersInnerRender';\n\nexport const InnerRender = React.memo(NoMemoInnerRender);\n","import React from 'react';\nimport { shallowEqual } from 'react-redux';\nimport { useResponsiveTableContext } from '../ResponsiveTableContext';\nimport { InnerRender } from './InnerRender';\nimport { useResponsiveTable } from '../store';\n\nconst NoMemoAdditional = ({ tableName }: { tableName?: string }) => {\n const { name } = useResponsiveTableContext(tableName);\n\n const additionalFilters = useResponsiveTable((global) => {\n const state = global.responsiveTableSlice[name];\n return state?.filters.filter(\n (current) =>\n !current.group &&\n ((!current.isMeta &&\n !state?.columns.find(\n (search) => search.name === current.column && !current.asAdditional,\n )) ||\n state?.columns.find(\n (search) =>\n search.name === current.column && search.showAsAdditional,\n ) ||\n current.asAdditional),\n );\n }, shallowEqual);\n\n return <InnerRender tableName={tableName} filters={additionalFilters} />;\n};\n\nexport const Additional = React.memo(NoMemoAdditional);\n","import React from 'react';\nimport { shallowEqual } from 'react-redux';\nimport { useResponsiveTableContext } from '../ResponsiveTableContext';\nimport { InnerRender } from './InnerRender';\nimport { useResponsiveTable } from '../store';\n\nconst NoMemoResponsive = ({ tableName }: { tableName?: string }) => {\n const { name } = useResponsiveTableContext(tableName);\n\n const nonAdditionalFilters = useResponsiveTable((global) => {\n const state = global.responsiveTableSlice[name];\n return state?.filters.filter(\n (current) =>\n !current.isMeta &&\n state?.columns.find((search) => search.name === current.column),\n );\n }, shallowEqual);\n\n return (\n <InnerRender\n tableName={tableName}\n isResponsive\n filters={nonAdditionalFilters}\n />\n );\n};\n\nexport const Responsive = React.memo(NoMemoResponsive);\n","import { TMap, TId, EventEmitter, persistentStorage } from '@apia/util';\nimport React from 'react';\n\nexport type TElementSelector = string | (() => HTMLElement);\n\ntype TMaximizationComponent = {\n isMaximized: boolean;\n selector?: TElementSelector;\n};\n\ntype TMaximizationPersist = TMap<boolean>;\n\nconst maximizationPersist = {\n getState(id: TId) {\n const current = (persistentStorage.maximizationPersist ??\n {}) as TMaximizationPersist;\n return current[id];\n },\n setState(id: TId, isMaximized: boolean) {\n // if (!conf<boolean>('lists.persistMaximized', true, 'boolean')) return;\n const current = (persistentStorage.maximizationPersist ??\n {}) as TMaximizationPersist;\n current[id] = isMaximized;\n persistentStorage.maximizationPersist = current;\n },\n};\nclass Maximization extends EventEmitter<{\n toggle: { id: TId; isMaximized?: boolean };\n}> {\n components: TMap<TMaximizationComponent> = {};\n\n checkComponentExists(id: TId) {\n return this.components[id] === undefined;\n }\n\n emit<K extends 'toggle'>(\n eventName: K,\n params: {\n toggle: {\n id: TId;\n isMaximized?: boolean;\n };\n }[K],\n ): void {\n if (eventName === 'toggle') {\n const { id, isMaximized } = params;\n this.checkComponentExists(id);\n if (!this.components[id]) return;\n\n this.components[id].isMaximized =\n isMaximized ?? !this.components[id].isMaximized;\n\n maximizationPersist.setState(id, this.components[id].isMaximized);\n\n this.isMaximized(id);\n super.emit(eventName, {\n id,\n isMaximized: this.components[id].isMaximized,\n });\n }\n }\n\n isMaximized(id: TId) {\n this.checkComponentExists(id);\n const selector = this.components[id]?.selector;\n if (selector === undefined) return undefined;\n\n const content =\n typeof selector === 'string'\n ? (document.querySelector(selector) as HTMLElement)\n : selector?.();\n if (content)\n content.classList.toggle('maximized', this.components[id].isMaximized);\n return this.components[id]?.isMaximized;\n }\n\n registerMaximizableComponent(\n id: TId,\n selector?: TElementSelector,\n // isDefaultMaximized?: boolean,\n ) {\n this.components[id] = {\n selector: selector ?? this.components[id]?.selector,\n isMaximized: false,\n // isDefaultMaximized ??\n // (conf<boolean>('lists.persistMaximized', true, 'boolean')\n // ? maximizationPersist.getState(id)\n // : undefined) ??\n // isConfDefaultMaximized,\n };\n }\n\n toggleIsMaximized(id: TId, isMaximized?: boolean) {\n this.emit('toggle', { id, isMaximized });\n }\n}\nexport const maximizationController = new Maximization();\n\n/**\n *\n * @returns\n * **isMaximized**: boolean, indica si el listado está maximizado o no.\n *\n * **toggleIsMaximized**: (isMaximized?: boolean) => void, alterna el estado\n * entre true y false si isMaximized===undefined, o setea el estado pasado en\n * isMaximized en caso contrario.\n */\nexport default function useIsMaximized(id: TId) {\n React.useEffect(() => {\n maximizationController.registerMaximizableComponent(id);\n }, [id]);\n\n const [isInnerMaximized, innerSetIsMaximized] = React.useState(\n maximizationController.isMaximized(id) ?? false,\n );\n\n React.useEffect(() => {\n const handleToggle = ({\n id: eventId,\n isMaximized: eventIsMaximized,\n }: {\n id: TId;\n isMaximized?: boolean;\n }) => {\n if (id === eventId)\n innerSetIsMaximized((current) => eventIsMaximized ?? !current);\n };\n const unsuscribe1 = maximizationController.on('toggle', handleToggle);\n innerSetIsMaximized(\n maximizationController.components[id].isMaximized ?? false,\n );\n\n return () => {\n unsuscribe1();\n };\n }, [id]);\n\n return {\n isMaximized: isInnerMaximized,\n toggleIsMaximized: React.useCallback(\n (isMaximized?: boolean) => {\n maximizationController.emit('toggle', { id, isMaximized });\n },\n [id],\n ),\n };\n}\n","import React, { useState, useEffect, useCallback, createRef } from 'react';\nimport { Box, Input, Select, useBreakpointIndex } from '@apia/theme';\nimport { TId, getLabel, noNaN } from '@apia/util';\nimport { ApiaUtil, IconButton, SimpleButton, TTooltip } from '@apia/components';\nimport { useResponsiveTableContext } from '../ResponsiveTableContext';\nimport useIsMaximized from './useIsMaximized';\n\nexport interface IPagination {\n appliedFilters?: number;\n /**\n * Este valor determina si el boton de eliminar filtros debe mostrarse como si hubieran filtros sin aplicar (en caso de que haya filtros aplicados por defecto) o si debe mostrarse como si todos los filtros con valor estan aplicados a la busqueda actual. Se deberia verificar con el slice de redux correspondiente a la tabla.\n */\n areAllFiltersApplied?: boolean;\n\n className?: string;\n currentPage: number | string;\n disabled?: boolean;\n disableReduced?: boolean;\n hideInfo?: boolean;\n hideMaximizeButton?: boolean;\n hideRefreshButton?: boolean;\n isLoading?: boolean;\n /**\n * Valor obtenido del buttonsSlice para bloquear los botones de la paginacion mientras se estan ejecutando acciones\n */\n isPerforming?: boolean;\n /**\n * Se usa principalmente en grillas de ejecución para indicar al pagination\n * que debe usar el fieldId de la misma y no el de un listado global.\n */\n listId?: TId;\n /**\n * Si se pasa un método onDeleteFilters, aparece el botón \"Eliminar filtros\"\n * cerca del refresh\n */\n onDeleteFilters?: () => unknown;\n onPageChange: (page: number) => unknown;\n onRefresh: (page: number) => unknown;\n pageCount: number | string;\n reachedMax?: boolean | undefined;\n hasMore?: boolean | undefined;\n /**\n * Si la cantidad de registros se obtiene desde un lugar distinto de Redux,\n * se puede pasar como number directamente\n */\n recordsCount?: number;\n showMaximizeOnSmallBreakpoints?: boolean;\n variant?: 'primary' | 'secondary' | 'datagrid';\n}\n\nconst NoMemoPagination = ({\n appliedFilters,\n areAllFiltersApplied,\n className,\n currentPage,\n disabled,\n disableReduced,\n hasMore,\n hideInfo,\n hideMaximizeButton,\n hideRefreshButton,\n isLoading,\n isPerforming,\n listId: outerListId,\n onDeleteFilters,\n onPageChange,\n onRefresh,\n pageCount,\n recordsCount: outerRecordsCount,\n reachedMax,\n showMaximizeOnSmallBreakpoints,\n variant = 'primary',\n}: IPagination) => {\n const numberPageCount = Number(pageCount);\n const breakPoint = useBreakpointIndex();\n const numberCurrentPage = Number(currentPage);\n const recordsCount = outerRecordsCount;\n const [internCurrentPage, setCurrentPage] = useState<number>(\n numberCurrentPage ?? 1,\n );\n\n const [lastEmittedPage, setLastEmittedPage] = useState<number>(\n numberCurrentPage ?? 1,\n );\n\n const [hasNoValue, setHasNoValue] = useState<boolean>(false);\n\n useEffect(() => {\n setCurrentPage(numberCurrentPage);\n }, [numberCurrentPage]);\n const setCurrentAndDispatch = useCallback(\n (page: number) => {\n setCurrentPage(page);\n onPageChange(page);\n setLastEmittedPage(page);\n },\n [onPageChange],\n );\n\n const InputRef = createRef<HTMLInputElement>();\n const listId = useResponsiveTableContext().name;\n const { isMaximized, toggleIsMaximized } = useIsMaximized(\n outerListId ?? listId,\n );\n\n const options = [];\n for (let i = 1; i <= numberPageCount; i++) {\n options.push(i);\n }\n\n const [infoButtonRef, setInfoButtonRef] = React.useState<HTMLElement | null>(\n null,\n );\n\n const recordsCountLabel = `${window.GNR_TOT_RECORDS}: ${recordsCount}`;\n const tooltipProps: TTooltip = React.useMemo(\n () => ({\n text:\n breakPoint <= 3\n ? `${recordsCountLabel}.${\n !reachedMax && !hasMore\n ? ''\n : (reachedMax && window.GNR_TOT_RECORDS_REACHED) ||\n (hasMore && window.QUERY_MORE_DATA)\n }`\n : `${\n !reachedMax && !hasMore\n ? ''\n : (reachedMax && window.GNR_TOT_RECORDS_REACHED) ||\n (hasMore && window.QUERY_MORE_DATA)\n }`,\n attachToElement: { current: infoButtonRef! },\n closeOnClickOut: true,\n // closeOnClickOutChecker(element) {\n // return !getSpecificParent(element, (current) =>\n // current.classList.contains('pagination__information'),\n // );\n // },\n }),\n [breakPoint, hasMore, infoButtonRef, reachedMax, recordsCountLabel],\n );\n return (\n <Box\n as=\"nav\"\n variant={`layout.common.components.pagination.${variant}`}\n aria-label={getLabel('lblQryParamPag').text}\n className={`pagination ${\n numberPageCount <= 1 && !disableReduced ? 'onlyRefresh' : ''\n } ${className ?? ''}`}\n >\n <Box className=\"pagination__leftToolbar\">\n {!hideMaximizeButton &&\n (showMaximizeOnSmallBreakpoints || breakPoint > 4) && (\n <IconButton\n variant={'icon'}\n className=\"pagination__fullScreenButton\"\n onClick={toggleIsMaximized.bind(toggleIsMaximized, undefined)}\n icon={!isMaximized ? 'Maximize' : 'Minimize'}\n title={!isMaximized ? window.LBL_MAXIMIZE : window.LBL_MINIMIZE}\n aria-label={\n !isMaximized ? window.LBL_MAXIMIZE : window.LBL_MINIMIZE\n }\n iconSize={'Md'}\n />\n )}\n {!hideInfo && (\n <>\n {(((reachedMax || hasMore) && breakPoint > 3) || breakPoint <= 3) &&\n className !== 'grid__pagination' ? (\n <IconButton\n variant={'icon-primary'}\n icon=\"Info\"\n className={`pagination__information ${\n reachedMax || hasMore ? 'pagination__alertInfo' : ''\n }`}\n onClick={() => ApiaUtil.instance.tooltips.open(tooltipProps)}\n ref={setInfoButtonRef}\n iconSize={'Md'}\n aria-label={window.BTN_FILE_INFO_TOOLTIP}\n title={window.BTN_FILE_INFO_TOOLTIP}\n />\n ) : (\n ''\n )}\n {breakPoint > 3 && (\n <Box\n as=\"span\"\n className=\"recordsCounter pagination__deleteLabels\"\n title={recordsCountLabel}\n >\n {recordsCount !== -1 &&\n `${window.GNR_TOT_RECORDS}: ${recordsCount} `}\n </Box>\n )}\n </>\n )}\n </Box>\n\n <Box className=\"pagination__controls\">\n {(numberPageCount > 0 || disableReduced) && (\n <>\n {breakPoint > 2 && (\n <IconButton\n variant={'icon-primary'}\n disabled={\n disabled ||\n internCurrentPage === 1 ||\n isLoading ||\n isPerforming\n }\n aria-label={window.NAV_FIRST_PAGE}\n type=\"button\"\n onClick={() => {\n setCurrentAndDispatch(1);\n }}\n icon=\"First\"\n iconSize={'Sm'}\n />\n )}\n\n <IconButton\n variant={'icon-primary'}\n disabled={\n disabled || internCurrentPage <= 1 || isLoading || isPerforming\n }\n aria-label={window.NAV_PREVIOUS_PAGE}\n type=\"button\"\n onClick={() => {\n setCurrentAndDispatch(internCurrentPage - 1);\n }}\n icon=\"Previous\"\n iconSize={'Sm'}\n />\n {breakPoint > 2 && (\n <Box className=\"input\">\n <Input\n className=\"pagination__controls__input\"\n aria-label={window.NAV_INPUT_LABEL}\n title={`${window.PAGE}: ${internCurrentPage} `}\n ref={InputRef}\n value={hasNoValue ? '' : internCurrentPage}\n onKeyDown={(ev) => {\n const regex = /([0-9])|(Backspace)|(Tab)/;\n if (!ev.key.match(regex)) {\n ev.stopPropagation();\n ev.preventDefault();\n }\n if (ev.key === 'Enter') {\n ev.stopPropagation();\n ev.preventDefault();\n setCurrentAndDispatch(internCurrentPage);\n }\n }}\n onBlur={() => {\n if (lastEmittedPage !== internCurrentPage) {\n setCurrentAndDispatch(internCurrentPage);\n }\n }}\n onFocus={(ev) => {\n ev.currentTarget.select();\n }}\n onChange={(ev) => {\n setHasNoValue(ev.target.value === '');\n setCurrentPage(\n Math.max(\n 1,\n Math.min(\n noNaN(Number(ev.currentTarget.value)),\n pageCount as number,\n ),\n ),\n );\n }}\n disabled={disabled || isLoading || isPerforming}\n />{' '}\n /{' '}\n <Box\n as=\"span\"\n title={\n recordsCount !== -1\n ? `${window.GNR_TOT_RECORDS} ${recordsCount}`\n : window.NAV_INPUT_LABEL\n }\n >\n {pageCount}\n </Box>\n </Box>\n )}\n {breakPoint <= 2 && (\n <Select\n className=\"pagination__selectPage\"\n // menuplacement=\"top\"\n value={internCurrentPage}\n onChange={(e) => {\n setCurrentAndDispatch(Number(e.target.value));\n }}\n >\n <option disabled>Total: {numberPageCount}</option>\n {options.map((current) => {\n return <option key={current}>{current}</option>;\n })}\n </Select>\n )}\n <IconButton\n variant={'icon-primary'}\n disabled={\n disabled ||\n internCurrentPage >= numberPageCount ||\n isLoading ||\n isPerforming\n }\n aria-label={window.NAV_NEXT_PAGE}\n type=\"button\"\n onClick={() => {\n setCurrentAndDispatch(internCurrentPage + 1);\n }}\n icon=\"Next\"\n iconSize={'Sm'}\n />\n\n {breakPoint > 2 && (\n <IconButton\n variant={'icon-primary'}\n type=\"button\"\n aria-label={window.NAV_LAST_PAGE}\n disabled={\n disabled ||\n internCurrentPage >= numberPageCount ||\n isLoading ||\n isPerforming\n }\n onClick={() => {\n setCurrentAndDispatch(numberPageCount);\n }}\n icon=\"Last\"\n iconSize={'Sm'}\n />\n )}\n </>\n )}\n </Box>\n <Box className=\"pagination__rightToolbar\">\n {(!hideRefreshButton || onDeleteFilters) && (\n <>\n {onDeleteFilters && (\n <SimpleButton\n disabled={isPerforming}\n className=\"pagination__deleteFiltersButton\"\n onClick={onDeleteFilters}\n >\n {breakPoint > 3 && (\n <Box as=\"span\" className=\"pagination__deleteLabels\">\n {window.BTN_DELETE_FILTERS}\n </Box>\n )}\n <Box\n as=\"span\"\n className={`pagination__appliedFiltersLabel ${\n areAllFiltersApplied ? '' : 'withFilters'\n }`}\n >\n {appliedFilters}\n </Box>\n </SimpleButton>\n )}\n {!hideRefreshButton && (\n <IconButton\n aria-label={window.NAV_REFRESH}\n onClick={() => onRefresh(numberCurrentPage)}\n icon=\"Refresh\"\n iconSize={'Md'}\n disabled={disabled || isLoading}\n variant={'icon-primary'}\n isLoading={isPerforming}\n className=\"pagiantion__refreshIcon\"\n />\n )}\n </>\n )}\n </Box>\n </Box>\n );\n};\n\nexport const Pagination = React.memo(NoMemoPagination);\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 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 { 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 { applyFocusAttributes } from './applyFocusAttributes';\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 applyFocusAttributes(\r\n table,\r\n this.getState(),\r\n state,\r\n state.isFocused,\r\n target as HTMLElement,\r\n );\r\n this.setState(state);\r\n\r\n this.events.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 { 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 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 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 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 state.columns.length,\r\n );\r\n break;\r\n case 'ArrowRight':\r\n state.focusedColumn = addBoundary(\r\n state.focusedColumn + 1,\r\n 0,\r\n state.columns.length +\r\n (state.hasNonAdditionalFilters ? 1 : 0),\r\n );\r\n break;\r\n case 'Home':\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 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 = state.columns.length;\r\n }\r\n break;\r\n case 'PageUp':\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 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 state.isEditionMode = true;\r\n this.setState(state);\r\n applyFocusAttributes(table, this.getState(), state);\r\n\r\n if (state.focusedRow >= 0) {\r\n this.events.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);\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';\nimport {\n ResponsiveTableReactContext,\n useResponsiveTableContext,\n} from './ResponsiveTableContext';\n\nexport const TableContextReproducer = ({\n children,\n tableName,\n}: {\n children: ReactNode;\n tableName: string;\n}) => {\n const context = useResponsiveTableContext(tableName);\n\n return (\n <ResponsiveTableReactContext.Provider value={context}>\n {children}\n </ResponsiveTableReactContext.Provider>\n );\n};\n","import React from 'react';\nimport { Link } from '@apia/theme';\nimport { downloadUrl } from '@apia/util';\nimport { Icon } from '@apia/icons';\nimport {\n TResponsiveTableCellRenderer,\n TResponsiveTableCellRendererProps,\n} from '../types';\n\nexport type TDocNameCellRendererProps = {\n docName: string;\n docUrl: string;\n};\n\nexport type TDocNameCellRenderer =\n TResponsiveTableCellRendererProps<TDocNameCellRendererProps>;\n\nconst NoMemoDocNameCellRenderer: TResponsiveTableCellRenderer<TDocNameCellRendererProps> =\n React.forwardRef<HTMLTableCellElement, TDocNameCellRenderer>(\n (\n {\n cell: { children, Renderer, rendererProps, AccordionRenderer, ...cell },\n column,\n row,\n ...props\n },\n currentRef,\n ) => (\n <td\n ref={currentRef as React.RefObject<HTMLTableCellElement>}\n {...props}\n {...cell}\n >\n <Link\n className=\"cell__download__document\"\n title={rendererProps?.docName}\n href={rendererProps?.docUrl}\n onClick={(ev) => {\n ev.preventDefault();\n if (rendererProps?.docUrl) void downloadUrl(rendererProps?.docUrl);\n }}\n >\n <Icon title=\"\" name=\"Download\" />\n {rendererProps?.docName}\n </Link>\n </td>\n ),\n );\n\nNoMemoDocNameCellRenderer.displayName = 'DocNameCellRenderer';\n\nexport const DocNameCellRenderer = NoMemoDocNameCellRenderer;\n","import React from 'react';\nimport { Box, Link } from '@apia/theme';\nimport { downloadUrl } from '@apia/util';\nimport { Icon } from '@apia/icons';\nimport {\n TAccordionCellRenderer,\n TAccordionCellRendererProps,\n} from './AccordionCell';\n\nexport type TDocNameCellRendererProps = {\n docName: string;\n docUrl: string;\n};\n\nexport type TDocNameCellRenderer =\n TAccordionCellRendererProps<TDocNameCellRendererProps>;\n\nconst NoMemoAccordionDocNameCellRenderer: TAccordionCellRenderer<TDocNameCellRendererProps> =\n React.forwardRef<HTMLElement, TDocNameCellRenderer>(\n (\n {\n cell: { children, Renderer, rendererProps, AccordionRenderer, ...cell },\n column,\n },\n currentRef,\n ) => (\n <Box ref={currentRef as React.RefObject<HTMLElement>} {...cell}>\n <Box as=\"strong\">{column.label ?? column.name}: </Box>\n <Link\n className=\"cell__download__document\"\n title={rendererProps?.docName}\n href={rendererProps?.docUrl}\n onClick={(ev) => {\n ev.preventDefault();\n if (rendererProps?.docUrl) void downloadUrl(rendererProps?.docUrl);\n }}\n >\n <Icon title=\"\" name=\"Download\" />\n {rendererProps?.docName}\n </Link>\n </Box>\n ),\n );\n\nNoMemoAccordionDocNameCellRenderer.displayName = 'AccordionDocNameCellRenderer';\n\nexport const AccordionDocNameCellRenderer = NoMemoAccordionDocNameCellRenderer;\n","import React from 'react';\nimport { Box } from '@apia/theme';\nimport { TResponsiveTableCellRendererProps } from '../types';\nimport { TAccordionCellRenderer } from './AccordionCell';\n\nconst NoMemoAccordionHTMLCellRenderer: TAccordionCellRenderer<{\n html: string;\n}> = React.forwardRef<\n HTMLSpanElement,\n TResponsiveTableCellRendererProps<{ html: string }>\n>(\n (\n {\n cell: { children, Renderer, rendererProps, AccordionRenderer, ...cell },\n column,\n row,\n ...props\n },\n currentRef,\n ) => (\n /**\n * Aca falta el title de la columna\n */\n <Box\n ref={currentRef as React.RefObject<HTMLTableCellElement>}\n {...props}\n {...cell}\n className=\"accordion__cell__renderer\"\n dangerouslySetInnerHTML={{\n __html: String(rendererProps?.html ?? children ?? '').replaceAll(\n /<TOK(\\d+)/g,\n '<TOK$1',\n ),\n }}\n as=\"span\"\n />\n ),\n);\n\nNoMemoAccordionHTMLCellRenderer.displayName = 'AccordionHTMLCellRenderer';\n\nexport const AccordionHTMLCellRenderer = NoMemoAccordionHTMLCellRenderer;\n","import React from 'react';\nimport {\n TResponsiveTableCellRenderer,\n TResponsiveTableCellRendererProps,\n} from '../types';\n\nconst NoMemoHTMLCellRenderer: TResponsiveTableCellRenderer<{ html: string }> =\n React.forwardRef<\n HTMLTableCellElement,\n TResponsiveTableCellRendererProps<{ html: string }>\n >(\n (\n {\n cell: { children, Renderer, rendererProps, AccordionRenderer, ...cell },\n column,\n row,\n ...props\n },\n currentRef,\n ) => (\n <td\n ref={currentRef as React.RefObject<HTMLTableCellElement>}\n {...props}\n {...cell}\n dangerouslySetInnerHTML={{\n __html: String(rendererProps?.html ?? children ?? '').replaceAll(\n /<TOK(\\d+)/g,\n '<TOK$1',\n ),\n }}\n />\n ),\n );\n\nNoMemoHTMLCellRenderer.displayName = 'HTMLCellRenderer';\n\nexport const HTMLCellRenderer = NoMemoHTMLCellRenderer;\n","import { Box, Spinner } from '@apia/theme';\n\nexport const IsLoadingRenderer = () => {\n return (\n <Box className=\"responsiveTable__isLoading\">\n <Spinner />\n </Box>\n );\n};\n","import { forwardRef, useCallback, useState } from 'react';\nimport { Box } from '@apia/theme';\nimport { IconButton } from '@apia/components';\nimport { arrayOrArray } from '@apia/util';\nimport {\n TResponsiveTableRow,\n TResponsiveTableCellRenderer,\n TResponsiveTableCellRendererProps,\n} from '../types';\n\nexport function makeAccordionAsyncRenderer(\n additionalInfoGetter: (row: TResponsiveTableRow) => Promise<\n {\n label?: string;\n name: string;\n }[]\n >,\n) {\n const InnerRender: TResponsiveTableCellRenderer = forwardRef<\n HTMLElement,\n TResponsiveTableCellRendererProps\n >(({ row }, ref) => {\n const [moreInfo, setMoreInfo] = useState<\n | {\n label?: string;\n name: string;\n }[]\n | null\n >(null);\n const loadMore = useCallback(async () => {\n const result = await additionalInfoGetter(row);\n setMoreInfo(result);\n }, [row]);\n\n return (\n <>\n {moreInfo ? (\n <>\n <IconButton icon=\"Minus\" onClick={() => setMoreInfo(null)} />\n {arrayOrArray(moreInfo).map(\n (dataCell: { label?: string; name: string }) => {\n return (\n <Box key={dataCell.name} ref={ref} as=\"div\">\n <Box as=\"strong\">{dataCell.name}:</Box> {dataCell.label}\n </Box>\n );\n },\n )}\n </>\n ) : (\n <IconButton icon=\"Plus\" onClick={() => void loadMore()} />\n )}\n </>\n );\n });\n\n InnerRender.displayName = 'MakeAccordionAsyncRenderer';\n\n return InnerRender;\n}\n","import uniqueId from 'lodash-es/uniqueId';\nimport { forwardRef, useState } from 'react';\nimport { Box, Spinner } from '@apia/theme';\nimport { arrayOrArray, useMount } from '@apia/util';\nimport {\n TResponsiveTableRow,\n TResponsiveTableCellRenderer,\n TResponsiveTableCellRendererProps,\n} from '../types';\n\nexport function makeAsyncRenderer(\n additionalInfoGetter: (row: TResponsiveTableRow) => Promise<\n {\n label?: string;\n name: string;\n newline?: boolean;\n }[]\n >,\n) {\n const InnerRender: TResponsiveTableCellRenderer = forwardRef<\n HTMLElement,\n TResponsiveTableCellRendererProps\n >(({ row }, ref) => {\n const [moreInfo, setMoreInfo] = useState<\n | {\n label?: string;\n name: string;\n newline?: boolean;\n }[]\n | null\n >(null);\n useMount(() => {\n void (async () => {\n const result = await additionalInfoGetter(row);\n setMoreInfo(result);\n })();\n });\n\n return (\n <>\n {moreInfo ? (\n arrayOrArray(moreInfo).map((dataCell) => {\n return (\n <Box\n key={`${dataCell.name}-${uniqueId()}`}\n ref={ref}\n className={`responsiveTable__additionalInfoItem ${\n dataCell.newline ? 'separator' : ''\n }`}\n >\n {dataCell.newline ? (\n <>\n <Box sx={{ height: '20px' }} as=\"strong\">\n {dataCell.name}:\n </Box>{' '}\n {dataCell.label}\n </>\n ) : (\n <>\n <Box as=\"strong\">{dataCell.name}:</Box> {dataCell.label}\n </>\n )}\n </Box>\n );\n })\n ) : (\n <Spinner size={15} />\n )}\n </>\n );\n });\n\n InnerRender.displayName = 'MakeAsyncRenderer';\n\n return InnerRender;\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport React, { memo, useMemo } from 'react';\nimport { Box } from '@apia/theme';\nimport { TResponsiveTableCellRendererProps } from '../types';\n\nconst NoMemoNoEllipsisCellRenderer = React.forwardRef<\n HTMLTableCellElement,\n TResponsiveTableCellRendererProps\n>(\n (\n {\n cell: { Renderer, rendererProps, AccordionRenderer, ariaLabel, ...cell },\n column,\n row,\n ...props\n },\n currentRef,\n ) => (\n <Box\n as={'td' as any}\n sx={useMemo(\n () => ({\n '&.colored': {\n background: cell.background,\n color: cell.color,\n fontWeight: 'bold',\n },\n }),\n [cell.background, cell.color],\n )}\n ref={currentRef as React.RefObject<HTMLTableCellElement>}\n {...props}\n {...cell}\n aria-label={ariaLabel as string}\n >\n {props.children ?? cell.children}\n </Box>\n ),\n);\nNoMemoNoEllipsisCellRenderer.displayName = 'DefaultCellRenderer';\nexport const NoEllipsisCellRenderer = memo(NoMemoNoEllipsisCellRenderer);\n","import { FaSquare } from '@meronex/icons/fa';\nimport React from 'react';\nimport {\n TResponsiveTableCellRenderer,\n TResponsiveTableCellRendererProps,\n} from '../types';\n\nexport function getPriorityHandler(priority: string | undefined) {\n let prio;\n if (priority?.includes('priority0')) prio = 'priorityNone';\n if (priority?.includes('priority1')) prio = 'priorityLow';\n if (priority?.includes('priority2')) prio = 'priorityNormal';\n if (priority?.includes('priority3')) prio = 'priorityHigh';\n if (priority?.includes('priority4')) prio = 'priorityUrgent';\n return prio;\n}\nconst NoMemoPriorityRenderer: TResponsiveTableCellRenderer<{ src: string }> =\n React.forwardRef<\n HTMLTableCellElement,\n TResponsiveTableCellRendererProps<{ src: string }>\n >(\n (\n {\n cell: { children, Renderer, rendererProps, AccordionRenderer, ...cell },\n column,\n row,\n ...props\n },\n currentRef,\n ) => {\n const taskPriorityColor = getPriorityHandler(rendererProps?.src);\n return (\n <td\n {...props}\n {...cell}\n ref={currentRef}\n className=\"priority\"\n sx={{\n color: taskPriorityColor,\n }}\n >\n <FaSquare />\n </td>\n );\n },\n );\nNoMemoPriorityRenderer.displayName = 'PriorityRenderer';\nexport const PriorityRenderer = NoMemoPriorityRenderer;\n","import { FaSquare } from '@meronex/icons/fa';\nimport React from 'react';\nimport { Box } from '@apia/theme';\nimport {\n TAccordionCellRenderer,\n TAccordionCellRendererProps,\n} from './AccordionCell';\nimport { getPriorityHandler } from './PriorityRenderer';\n\nconst NoMemoPriorityAccordionRenderer: TAccordionCellRenderer =\n React.forwardRef<HTMLTableCellElement, TAccordionCellRendererProps>(\n ({ cell, column }, currentRef) => {\n const taskPriorityColor = getPriorityHandler(\n cell.rendererProps?.src as string,\n );\n const title = column.label ?? column.name;\n return (\n <Box ref={currentRef} className=\"priority_container\">\n {title && <Box as=\"strong\">{column.label ?? column.name}: </Box>}\n <Box\n as=\"span\"\n className=\"priority\"\n sx={{\n color: taskPriorityColor,\n }}\n >\n <FaSquare />\n </Box>\n </Box>\n );\n },\n );\n\nNoMemoPriorityAccordionRenderer.displayName = 'PriorityAccordionRenderer';\n\nexport const PriorityAccordionRenderer = NoMemoPriorityAccordionRenderer;\n","import dayjs from 'dayjs';\nimport React from 'react';\nimport { TDateFormat, getDateFormat } from '@apia/util';\nimport {\n TResponsiveTableCellRenderer,\n TResponsiveTableCellRendererProps,\n} from '../types';\n\nexport function getStatusRendererClassName(\n cellValue: string,\n columnName: string,\n) {\n if (cellValue === undefined) return '';\n\n const cellValueDate = cellValue.split(' ')[0];\n const cellValueHour = cellValue.split(' ')[1] ?? '00:00:00';\n\n const dateFormat: TDateFormat = getDateFormat();\n const currentDate = dayjs();\n const currentHour = Number(dayjs().format('HHmm'));\n const queriedDate = dayjs(cellValueDate, dateFormat);\n const queriedHour = Number(dayjs(cellValueHour, dateFormat));\n let statusClassName = '';\n\n if (currentDate >= queriedDate) {\n statusClassName = columnName;\n }\n if (!queriedHour) return statusClassName;\n\n if (currentDate <= queriedDate && currentHour < queriedHour) {\n statusClassName = columnName;\n }\n return statusClassName;\n}\n\nconst NoMemoStatusRenderer: TResponsiveTableCellRenderer<{ src: string }> =\n React.forwardRef<\n HTMLTableCellElement,\n TResponsiveTableCellRendererProps<{ src: string }>\n >(\n (\n {\n cell: { children, Renderer, rendererProps, AccordionRenderer, ...cell },\n column,\n row,\n ...props\n },\n currentRef,\n ) => {\n const taskStatusClassName = getStatusRendererClassName(\n children as string,\n column.name,\n );\n\n return (\n <td\n {...props}\n {...cell}\n ref={currentRef}\n className={taskStatusClassName}\n >\n {children}\n </td>\n );\n },\n );\n\nNoMemoStatusRenderer.displayName = 'StatusRenderer';\n\nexport const StatusRenderer = NoMemoStatusRenderer;\n","import React from 'react';\nimport { Box } from '@apia/theme';\nimport {\n TAccordionCellRenderer,\n TAccordionCellRendererProps,\n} from './AccordionCell';\nimport { getStatusRendererClassName } from './StatusRenderer';\n\nconst NoMemoStatusAccordionRenderer: TAccordionCellRenderer = React.forwardRef<\n HTMLTableCellElement,\n TAccordionCellRendererProps\n>(({ cell, column }, currentRef) => {\n const taskStatusClassName = getStatusRendererClassName(\n cell.children as string,\n column.name,\n );\n\n return (\n <Box ref={currentRef}>\n <Box as=\"strong\">{column.label ?? column.name}: </Box>\n <Box as=\"span\" className={taskStatusClassName}>\n {cell.children}\n </Box>\n </Box>\n );\n});\n\nNoMemoStatusAccordionRenderer.displayName = 'StatusAccordionRenderer';\n\nexport const StatusAccordionRenderer = NoMemoStatusAccordionRenderer;\n"],"names":["getInitialState","selectionGetInitialState","useUpdateEffect","unit","shallowEqual","cell","__publicField","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/controller2/applyFocusAttributes.ts","../src/controller2/applySelectionAttributes.ts","../src/controller2/handleMouseDownEvent.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};\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 variant?: string;\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 >,\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 selectedRows: [],\r\n statesColumns: 0,\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.rows) {\r\n state[tableName].statesColumns = Math.max(\r\n state[tableName]?.reserveColumnsForStates ?? 0,\r\n ...(state[tableName]?.rows?.map(\r\n (current) => current.states?.length ?? 0,\r\n ) ?? [0]),\r\n );\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 name,\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 }),\r\n [\r\n currentBreakPoint,\r\n label,\r\n labels,\r\n avoidAutoEllipsis,\r\n actualName,\r\n FiltersRenderer,\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 ],\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 }),\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 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 ?? 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 +\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 +\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 +\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} 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 ?? 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 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: 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: `${width}px`,\r\n position: 'relative',\r\n },\r\n [column.maxWidth, column.minWidth, column.width, isResize, width],\r\n );\r\n\r\n const buttonProps = useOtherTagButton(\r\n React.useMemo(\r\n () => ({\r\n className: 'headButton',\r\n onClick: (ev) => {\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, onSortChange],\r\n ),\r\n );\r\n return (\r\n <Box\r\n as=\"th\"\r\n style={sx}\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 ? <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 uniqueId from 'lodash-es/uniqueId';\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\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 } = 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 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 statesCount = useResponsiveTable((globalState) => {\r\n const state = globalState.responsiveTableSlice[name];\r\n return state?.statesColumns ?? 0;\r\n }, shallowEqual);\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 statesIds = React.useMemo(() => {\r\n return Array(statesCount)\r\n .fill('')\r\n .map(() => uniqueId());\r\n }, [statesCount]);\r\n\r\n const [isFiltersRowVisible, setIsFiltersRowVisible] = React.useState<boolean>(\r\n /* (persistentStorage.showResponsiveTableFilters as boolean) ?? */ 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 {statesIds.map((id, i) => (\r\n <StateCell isHeader key={id} index={i} rowIndex={1} />\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 {statesIds.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 {...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 state?.statesColumns ?? 0;\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 ?? 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 } = 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 ? (\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 <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 {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 <Box as=\"span\">\r\n {formatMessage(window.LBL_DATE_FILTER_TO_TXT, {\r\n TOK1: filterTitle,\r\n })}\r\n </Box>\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, createRef } from 'react';\r\nimport { Box, Input, Select, useBreakpointIndex } from '@apia/theme';\r\nimport { TId, getLabel, noNaN } from '@apia/util';\r\nimport { ApiaUtil, IconButton, SimpleButton, TTooltip } from '@apia/components';\r\nimport { useResponsiveTableContext } from '../ResponsiveTableContext';\r\nimport useIsMaximized from './useIsMaximized';\r\n\r\nexport interface IPagination {\r\n appliedFilters?: number;\r\n /**\r\n * Este valor determina si el boton de eliminar filtros debe mostrarse como si hubieran filtros sin aplicar (en caso de que haya filtros aplicados por defecto) o si debe mostrarse como si todos los filtros con valor estan aplicados a la busqueda actual. Se deberia verificar con el slice de redux correspondiente a la tabla.\r\n */\r\n areAllFiltersApplied?: boolean;\r\n\r\n className?: string;\r\n currentPage: number | string;\r\n disabled?: boolean;\r\n disableReduced?: boolean;\r\n hideInfo?: boolean;\r\n hideMaximizeButton?: boolean;\r\n hideRefreshButton?: boolean;\r\n isLoading?: boolean;\r\n /**\r\n * Valor obtenido del buttonsSlice para bloquear los botones de la paginacion mientras se estan ejecutando acciones\r\n */\r\n isPerforming?: boolean;\r\n /**\r\n * Se usa principalmente en grillas de ejecución para indicar al pagination\r\n * que debe usar el fieldId de la misma y no el de un listado global.\r\n */\r\n listId?: TId;\r\n /**\r\n * Si se pasa un método onDeleteFilters, aparece el botón \"Eliminar filtros\"\r\n * cerca del refresh\r\n */\r\n onDeleteFilters?: () => unknown;\r\n onPageChange: (page: number) => unknown;\r\n onRefresh: (page: number) => unknown;\r\n pageCount: number | string;\r\n reachedMax?: boolean | undefined;\r\n hasMore?: boolean | undefined;\r\n /**\r\n * Si la cantidad de registros se obtiene desde un lugar distinto de Redux,\r\n * se puede pasar como number directamente\r\n */\r\n recordsCount?: number;\r\n showMaximizeOnSmallBreakpoints?: boolean;\r\n variant?: 'primary' | 'secondary' | 'datagrid';\r\n}\r\n\r\nconst NoMemoPagination = ({\r\n appliedFilters,\r\n areAllFiltersApplied,\r\n className,\r\n currentPage,\r\n disabled,\r\n disableReduced,\r\n hasMore,\r\n hideInfo,\r\n hideMaximizeButton,\r\n hideRefreshButton,\r\n isLoading,\r\n isPerforming,\r\n listId: outerListId,\r\n onDeleteFilters,\r\n onPageChange,\r\n onRefresh,\r\n pageCount,\r\n recordsCount: outerRecordsCount,\r\n reachedMax,\r\n showMaximizeOnSmallBreakpoints,\r\n variant = 'primary',\r\n}: IPagination) => {\r\n const numberPageCount = Number(pageCount);\r\n const breakPoint = useBreakpointIndex();\r\n const numberCurrentPage = Number(currentPage);\r\n const recordsCount = outerRecordsCount;\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 [hasNoValue, setHasNoValue] = useState<boolean>(false);\r\n\r\n useEffect(() => {\r\n setCurrentPage(numberCurrentPage);\r\n }, [numberCurrentPage]);\r\n const setCurrentAndDispatch = useCallback(\r\n (page: number) => {\r\n setCurrentPage(page);\r\n onPageChange(page);\r\n setLastEmittedPage(page);\r\n },\r\n [onPageChange],\r\n );\r\n\r\n const InputRef = createRef<HTMLInputElement>();\r\n const listId = useResponsiveTableContext().name;\r\n const { isMaximized, toggleIsMaximized } = useIsMaximized(\r\n outerListId ?? listId,\r\n );\r\n\r\n const options = [];\r\n for (let i = 1; i <= numberPageCount; i++) {\r\n options.push(i);\r\n }\r\n\r\n const [infoButtonRef, setInfoButtonRef] = React.useState<HTMLElement | null>(\r\n null,\r\n );\r\n\r\n const recordsCountLabel = `${window.GNR_TOT_RECORDS}: ${recordsCount}`;\r\n const tooltipProps: TTooltip = React.useMemo(\r\n () => ({\r\n text:\r\n breakPoint <= 3\r\n ? `${recordsCountLabel}.${\r\n !reachedMax && !hasMore\r\n ? ''\r\n : (reachedMax && window.GNR_TOT_RECORDS_REACHED) ||\r\n (hasMore && window.QUERY_MORE_DATA)\r\n }`\r\n : `${\r\n !reachedMax && !hasMore\r\n ? ''\r\n : (reachedMax && window.GNR_TOT_RECORDS_REACHED) ||\r\n (hasMore && window.QUERY_MORE_DATA)\r\n }`,\r\n attachToElement: { current: infoButtonRef! },\r\n closeOnClickOut: true,\r\n // closeOnClickOutChecker(element) {\r\n // return !getSpecificParent(element, (current) =>\r\n // current.classList.contains('pagination__information'),\r\n // );\r\n // },\r\n }),\r\n [breakPoint, hasMore, infoButtonRef, reachedMax, recordsCountLabel],\r\n );\r\n return (\r\n <Box\r\n as=\"nav\"\r\n variant={`layout.common.components.pagination.${variant}`}\r\n aria-label={getLabel('lblQryParamPag').text}\r\n className={`pagination ${\r\n numberPageCount <= 1 && !disableReduced ? 'onlyRefresh' : ''\r\n } ${className ?? ''}`}\r\n >\r\n <Box className=\"pagination__leftToolbar\">\r\n {!hideMaximizeButton &&\r\n (showMaximizeOnSmallBreakpoints || breakPoint > 4) && (\r\n <IconButton\r\n variant={'icon'}\r\n className=\"pagination__fullScreenButton\"\r\n onClick={toggleIsMaximized.bind(toggleIsMaximized, undefined)}\r\n icon={!isMaximized ? 'Maximize' : 'Minimize'}\r\n title={!isMaximized ? window.LBL_MAXIMIZE : window.LBL_MINIMIZE}\r\n aria-label={\r\n !isMaximized ? window.LBL_MAXIMIZE : window.LBL_MINIMIZE\r\n }\r\n iconSize={'Md'}\r\n />\r\n )}\r\n {!hideInfo && (\r\n <>\r\n {(((reachedMax || hasMore) && breakPoint > 3) || breakPoint <= 3) &&\r\n className !== 'grid__pagination' ? (\r\n <IconButton\r\n variant={'icon-primary'}\r\n icon=\"Info\"\r\n className={`pagination__information ${\r\n reachedMax || hasMore ? 'pagination__alertInfo' : ''\r\n }`}\r\n onClick={() => ApiaUtil.instance.tooltips.open(tooltipProps)}\r\n ref={setInfoButtonRef}\r\n iconSize={'Md'}\r\n aria-label={window.BTN_FILE_INFO_TOOLTIP}\r\n title={window.BTN_FILE_INFO_TOOLTIP}\r\n />\r\n ) : (\r\n ''\r\n )}\r\n {breakPoint > 3 && (\r\n <Box\r\n as=\"span\"\r\n className=\"recordsCounter pagination__deleteLabels\"\r\n title={recordsCountLabel}\r\n >\r\n {recordsCount !== -1 &&\r\n `${window.GNR_TOT_RECORDS}: ${recordsCount} `}\r\n </Box>\r\n )}\r\n </>\r\n )}\r\n </Box>\r\n\r\n <Box className=\"pagination__controls\">\r\n {(numberPageCount > 0 || disableReduced) && (\r\n <>\r\n {breakPoint > 2 && (\r\n <IconButton\r\n variant={'icon-primary'}\r\n disabled={\r\n disabled ||\r\n internCurrentPage === 1 ||\r\n isLoading ||\r\n isPerforming\r\n }\r\n aria-label={window.NAV_FIRST_PAGE}\r\n type=\"button\"\r\n onClick={() => {\r\n setCurrentAndDispatch(1);\r\n }}\r\n icon=\"First\"\r\n iconSize={'Sm'}\r\n />\r\n )}\r\n\r\n <IconButton\r\n variant={'icon-primary'}\r\n disabled={\r\n disabled || internCurrentPage <= 1 || isLoading || isPerforming\r\n }\r\n aria-label={window.NAV_PREVIOUS_PAGE}\r\n type=\"button\"\r\n onClick={() => {\r\n setCurrentAndDispatch(internCurrentPage - 1);\r\n }}\r\n icon=\"Previous\"\r\n iconSize={'Sm'}\r\n />\r\n {breakPoint > 2 && (\r\n <Box className=\"input\">\r\n <Input\r\n className=\"pagination__controls__input\"\r\n aria-label={window.NAV_INPUT_LABEL}\r\n title={`${window.PAGE}: ${internCurrentPage} `}\r\n ref={InputRef}\r\n value={hasNoValue ? '' : internCurrentPage}\r\n onKeyDown={(ev) => {\r\n const regex = /([0-9])|(Backspace)|(Tab)/;\r\n if (!ev.key.match(regex)) {\r\n ev.stopPropagation();\r\n ev.preventDefault();\r\n }\r\n if (ev.key === 'Enter') {\r\n ev.stopPropagation();\r\n ev.preventDefault();\r\n setCurrentAndDispatch(internCurrentPage);\r\n }\r\n }}\r\n onBlur={() => {\r\n if (lastEmittedPage !== internCurrentPage) {\r\n setCurrentAndDispatch(internCurrentPage);\r\n }\r\n }}\r\n onFocus={(ev) => {\r\n ev.currentTarget.select();\r\n }}\r\n onChange={(ev) => {\r\n setHasNoValue(ev.target.value === '');\r\n setCurrentPage(\r\n Math.max(\r\n 1,\r\n Math.min(\r\n noNaN(Number(ev.currentTarget.value)),\r\n pageCount as number,\r\n ),\r\n ),\r\n );\r\n }}\r\n disabled={disabled || isLoading || isPerforming}\r\n />{' '}\r\n /{' '}\r\n <Box\r\n as=\"span\"\r\n title={\r\n recordsCount !== -1\r\n ? `${window.GNR_TOT_RECORDS} ${recordsCount}`\r\n : window.NAV_INPUT_LABEL\r\n }\r\n >\r\n {pageCount}\r\n </Box>\r\n </Box>\r\n )}\r\n {breakPoint <= 2 && (\r\n <Select\r\n className=\"pagination__selectPage\"\r\n // menuplacement=\"top\"\r\n value={internCurrentPage}\r\n onChange={(e) => {\r\n setCurrentAndDispatch(Number(e.target.value));\r\n }}\r\n >\r\n <option disabled>Total: {numberPageCount}</option>\r\n {options.map((current) => {\r\n return <option key={current}>{current}</option>;\r\n })}\r\n </Select>\r\n )}\r\n <IconButton\r\n variant={'icon-primary'}\r\n disabled={\r\n disabled ||\r\n internCurrentPage >= numberPageCount ||\r\n isLoading ||\r\n isPerforming\r\n }\r\n aria-label={window.NAV_NEXT_PAGE}\r\n type=\"button\"\r\n onClick={() => {\r\n setCurrentAndDispatch(internCurrentPage + 1);\r\n }}\r\n icon=\"Next\"\r\n iconSize={'Sm'}\r\n />\r\n\r\n {breakPoint > 2 && (\r\n <IconButton\r\n variant={'icon-primary'}\r\n type=\"button\"\r\n aria-label={window.NAV_LAST_PAGE}\r\n disabled={\r\n disabled ||\r\n internCurrentPage >= numberPageCount ||\r\n isLoading ||\r\n isPerforming\r\n }\r\n onClick={() => {\r\n setCurrentAndDispatch(numberPageCount);\r\n }}\r\n icon=\"Last\"\r\n iconSize={'Sm'}\r\n />\r\n )}\r\n </>\r\n )}\r\n </Box>\r\n <Box className=\"pagination__rightToolbar\">\r\n {(!hideRefreshButton || onDeleteFilters) && (\r\n <>\r\n {onDeleteFilters && (\r\n <SimpleButton\r\n disabled={isPerforming}\r\n className=\"pagination__deleteFiltersButton\"\r\n onClick={onDeleteFilters}\r\n >\r\n {breakPoint > 3 && (\r\n <Box as=\"span\" className=\"pagination__deleteLabels\">\r\n {window.BTN_DELETE_FILTERS}\r\n </Box>\r\n )}\r\n <Box\r\n as=\"span\"\r\n className={`pagination__appliedFiltersLabel ${\r\n areAllFiltersApplied ? '' : 'withFilters'\r\n }`}\r\n >\r\n {appliedFilters}\r\n </Box>\r\n </SimpleButton>\r\n )}\r\n {!hideRefreshButton && (\r\n <IconButton\r\n aria-label={window.NAV_REFRESH}\r\n onClick={() => onRefresh(numberCurrentPage)}\r\n icon=\"Refresh\"\r\n iconSize={'Md'}\r\n disabled={disabled || isLoading}\r\n variant={'icon-primary'}\r\n isLoading={isPerforming}\r\n className=\"pagiantion__refreshIcon\"\r\n />\r\n )}\r\n </>\r\n )}\r\n </Box>\r\n </Box>\r\n );\r\n};\r\n\r\nexport const Pagination = React.memo(NoMemoPagination);\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 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 { 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 { applyFocusAttributes } from './applyFocusAttributes';\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 applyFocusAttributes(\r\n table,\r\n this.getState(),\r\n state,\r\n state.isFocused,\r\n target as HTMLElement,\r\n );\r\n this.setState(state);\r\n\r\n this.events.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 { 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 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 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 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 state.columns.length,\r\n );\r\n break;\r\n case 'ArrowRight':\r\n state.focusedColumn = addBoundary(\r\n state.focusedColumn + 1,\r\n 0,\r\n state.columns.length +\r\n (state.hasNonAdditionalFilters ? 1 : 0),\r\n );\r\n break;\r\n case 'Home':\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 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 = state.columns.length;\r\n }\r\n break;\r\n case 'PageUp':\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 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 state.isEditionMode = true;\r\n this.setState(state);\r\n applyFocusAttributes(table, this.getState(), state);\r\n\r\n if (state.focusedRow >= 0) {\r\n this.events.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);\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 }[]\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}\r\n </>\r\n ) : (\r\n <>\r\n <Box as=\"strong\">{dataCell.name}:</Box> {dataCell.label}\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","useMount"],"mappings":"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"}
|