правки
This commit is contained in:
parent
de94b08719
commit
ad709fb0f7
@ -8,6 +8,7 @@ import { ROLES_NAME_ID } from '../../constants/constants';
|
||||
import { blueColumn } from './constants/columnColors';
|
||||
import { sectionCodeColor } from './constants/columnConfig';
|
||||
import { isCellEditable } from './utils/cellEditability';
|
||||
import { getColumnValue } from './utils/columnUtils';
|
||||
|
||||
import VspDropdownEditCell from './Cell/EditCell/VspDropdownEditCell';
|
||||
|
||||
@ -248,6 +249,12 @@ export const getTableColumns = ({
|
||||
// Группирующие колонки-заголовки (есть col.columns) не рендерят Cell/Edit
|
||||
// по строкам сами — enableEditing им не нужен, в отличие от листовых.
|
||||
const isLeafColumn = !col.columns?.length;
|
||||
if (isLeafColumn && !col.accessorFn && typeof col.accessorKey === 'string' && col.accessorKey.includes('.')) {
|
||||
// MRT предупреждает об undefined для вложенных путей, отсутствующих
|
||||
// у отдельных типов строк. Сохраняем исходный id для настроек и прав.
|
||||
col.id = col.id ?? col.accessorKey;
|
||||
col.accessorFn = (row) => getColumnValue(row, col.accessorKey);
|
||||
}
|
||||
|
||||
col.Cell = ({ cell, table, column, row }) => {
|
||||
const props = getCachedCellProps(row, column, table);
|
||||
|
||||
@ -1,6 +1,23 @@
|
||||
// Явный id определяет технический ключ колонки; accessorKey используется как fallback.
|
||||
export const getColumnKey = (node) => node?.id ?? node?.accessorKey;
|
||||
|
||||
// У некоторых типов строк нет целого блока данных. NULL в существующей
|
||||
// колонке при этом отличается от отсутствующего пути.
|
||||
export const hasColumnPath = (row, path) => {
|
||||
if (!row || typeof path !== 'string') return false;
|
||||
let value = row;
|
||||
for (const key of path.split('.')) {
|
||||
if (value === null || typeof value !== 'object' || !Object.hasOwn(value, key)) return false;
|
||||
value = value[key];
|
||||
}
|
||||
return true;
|
||||
};
|
||||
|
||||
export const getColumnValue = (row, path) => {
|
||||
if (!hasColumnPath(row, path)) return null;
|
||||
return path.split('.').reduce((value, key) => value[key], row);
|
||||
};
|
||||
|
||||
// Проверка, нужно ли скрыть колонку из дерева
|
||||
export const shouldExcludeFromTree = (node, excludeSet) => {
|
||||
if (node?.hideInTree) return true;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user