/** * AURORA-1891: Tab/Shift+Tab и Enter в EditCell.jsx/VspDropdownEditCell.jsx * вызывают table.options.meta.openNextEditableCell(row, column, direction) * (RealtimeTable.jsx), который резолвит реальные MRT-строки/колонки * (getOrderedVisibleColumns, table.getRowModel().flatRows — не .rows, см. * рулинг AURORA-1893 про expandRows()/paginateExpandedRows: .rows уже * отфильтрован состоянием свёрнутости групп, и строка в свёрнутой группе * там попросту не нашлась бы) и предикат isCellEditable, а эти две функции * делают только сам обход уже готового списка — без знания про MRT. */ /** * Следующая (step: 1, Tab) или предыдущая (step: -1, Shift+Tab) редактируемая * колонка в той же строке. columns — видимые листовые колонки в порядке * getOrderedVisibleColumns (скрытые туда не попадают — для этой функции они * просто не существуют). isEditable(column) — редактируема ли эта колонка * ИМЕННО в текущей строке (вызывающая сторона уже знает строку). * Возвращает id следующей редактируемой колонки или null, если дошли до края. */ export const findNextEditableColumnId = ({ columns, currentColumnId, step, isEditable }) => { const startIndex = columns.findIndex((column) => column.id === currentColumnId); if (startIndex < 0) return null; for (let index = startIndex + step; index >= 0 && index < columns.length; index += step) { if (isEditable(columns[index])) return columns[index].id; } return null; }; /** * Следующая (step: 1, Enter) или предыдущая (step: -1) строка, где заданная * колонка редактируема. rows — table.getRowModel().flatRows (весь порядок * строк независимо от текущего состояния свёрнутости групп). isEditable(row) * — редактируема ли заданная колонка в этой строке (пропускает итоговые * строки ROOT/GROUP/ITEM, у которых row_type !== 'INPUT'). * Возвращает id следующей строки или null, если дошли до края таблицы. */ export const findNextEditableRowId = ({ rows, currentRowId, step, isEditable }) => { const startIndex = rows.findIndex((row) => row.id === currentRowId); if (startIndex < 0) return null; for (let index = startIndex + step; index >= 0 && index < rows.length; index += step) { if (isEditable(rows[index])) return rows[index].id; } return null; };