UNPKG

@itwin/itwinui-react

Version:

A react component library for iTwinUI

136 lines (135 loc) 3.84 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true, }); function _export(target, all) { for (var name in all) Object.defineProperty(target, name, { enumerable: true, get: all[name], }); } _export(exports, { onShiftSelectHandler: function () { return onShiftSelectHandler; }, onSingleSelectHandler: function () { return onSingleSelectHandler; }, onToggleHandler: function () { return onToggleHandler; }, }); const _Table = require('../Table.js'); const onSelectHandler = (newState, instance, onSelect, isRowDisabled) => { if (!instance?.rows.length) return void onSelect?.([], newState); let newSelectedRowIds = {}; let handleRow = (row) => { if (isRowDisabled?.(row.original)) return false; let hasSubComponents = !!row.initialSubRows[0]?.original[_Table.iuiId]; let hasSubRows = row.subRows.length > 0 && !hasSubComponents; let isAllSubSelected = true; if (hasSubRows) row.initialSubRows.forEach((subRow) => { let result = handleRow(subRow); if (!result) isAllSubSelected = false; }); let isRowSelected = newState.selectedRowIds[row.id]; let case1 = isRowSelected && (!instance.selectSubRows || !hasSubRows); let case2 = hasSubRows && isAllSubSelected; if (case1 || case2) newSelectedRowIds[row.id] = true; return !!newSelectedRowIds[row.id]; }; instance.initialRows.forEach((row) => handleRow(row)); let selectedData = getSelectedData(newSelectedRowIds, instance); newState.selectedRowIds = newSelectedRowIds; onSelect?.(selectedData, newState); }; const onToggleHandler = ( newState, action, instance, onSelect, isRowDisabled, ) => { onSelectHandler(newState, instance, onSelect, isRowDisabled); newState.lastSelectedRowId = action.id; }; const onSingleSelectHandler = ( state, action, instance, onSelect, isRowDisabled, ) => { let selectedRowIds = { [action.id]: true, }; if (instance?.selectSubRows) { let handleRow = (row) => { selectedRowIds[row.id] = true; row.subRows.forEach((r) => handleRow(r)); }; handleRow(instance.rowsById[action.id]); } let newState = { ...state, lastSelectedRowId: action.id, selectedRowIds, }; onSelectHandler(newState, instance, onSelect, isRowDisabled); return newState; }; const onShiftSelectHandler = ( state, action, instance, onSelect, isRowDisabled, ) => { if (null == instance) return state; let startIndex = Math.max( 0, instance.flatRows.findIndex((row) => row.id === state.lastSelectedRowId), ); let endIndex = Math.max( 0, instance.flatRows.findIndex((row) => row.id === action.id), ); if (startIndex > endIndex) { let temp = startIndex; startIndex = endIndex; endIndex = temp; } let isLastSelectedRowIdSelected = null == state.lastSelectedRowId || !!state.selectedRowIds[state.lastSelectedRowId]; let selectedRowIds = action.ctrlPressed ? { ...state.selectedRowIds, } : {}; instance.flatRows .slice(startIndex, endIndex + 1) .forEach((r) => (selectedRowIds[r.id] = isLastSelectedRowIdSelected)); let handleRow = (row) => { selectedRowIds[row.id] = isLastSelectedRowIdSelected; row.subRows.forEach((r) => handleRow(r)); }; handleRow(instance.flatRows[endIndex]); let newState = { ...state, selectedRowIds, }; onSelectHandler(newState, instance, onSelect, isRowDisabled); return newState; }; const getSelectedData = (selectedRowIds, instance) => { let selectedData = []; let setSelectedData = (row) => { if (selectedRowIds[row.id]) selectedData.push(row.original); row.initialSubRows.forEach((subRow) => setSelectedData(subRow)); }; instance?.initialRows.forEach((row) => setSelectedData(row)); return selectedData; };