UNPKG

@ui5/webcomponents-react

Version:

React Wrapper for UI5 Web Components and additional components

78 lines (77 loc) 2.63 kB
import { enrichEventWithDetails } from '@ui5/webcomponents-react-base'; import { useEffect } from 'react'; import { AnalyticalTableSelectionMode } from '../../../enums/index.js'; export const useSelectionChangeCallback = hooks => { hooks.useControlledState.push((state, { instance }) => { const { selectedRowPayload, selectedRowIds, filters, globalFilter } = state; const { rowsById, preFilteredRowsById, webComponentsReactProperties, dispatch } = instance; const isFiltered = filters?.length > 0 || !!globalFilter; // eslint-disable-next-line react-hooks/rules-of-hooks useEffect(() => { if (selectedRowPayload?.fired) { const { event: e, row: selRow, selectAll } = selectedRowPayload; const row = rowsById[selRow?.id]; // when selecting a row on a filtered table, `preFilteredRowsById` has to be used, otherwise filtered out rows are undefined const _rowsById = isFiltered ? preFilteredRowsById : rowsById; if (row || selectAll) { const payload = { row: row, rowsById: _rowsById, isSelected: row?.isSelected, allRowsSelected: false, selectedRowIds }; if (webComponentsReactProperties.selectionMode === AnalyticalTableSelectionMode.Multiple) { if (Object.keys(selectedRowIds).length === Object.keys(_rowsById).length) { payload.allRowsSelected = true; } if (selectAll) { dispatch({ type: 'SELECT_ROW_CB', payload: { event: e, row, selectAll: false, fired: false } }); webComponentsReactProperties?.onRowSelect(enrichEventWithDetails(e, { rowsById: payload.rowsById, allRowsSelected: payload.allRowsSelected, selectedRowIds: payload.selectedRowIds })); return; } } dispatch({ type: 'SELECT_ROW_CB', payload: { event: e, row, fired: false } }); webComponentsReactProperties?.onRowSelect(enrichEventWithDetails(e, payload)); } } }, [selectedRowPayload?.fired, rowsById, webComponentsReactProperties.selectionMode, selectedRowIds, isFiltered]); return state; }); }; useSelectionChangeCallback.pluginName = 'useSelectionChangeCallback';