правки

This commit is contained in:
PotapovaA 2026-11-06 16:06:35 +03:00
parent de94b08719
commit ad709fb0f7
3 changed files with 24 additions and 0 deletions

View File

@ -8,6 +8,7 @@ import { ROLES_NAME_ID } from '../../constants/constants';
import { blueColumn } from './constants/columnColors'; import { blueColumn } from './constants/columnColors';
import { sectionCodeColor } from './constants/columnConfig'; import { sectionCodeColor } from './constants/columnConfig';
import { isCellEditable } from './utils/cellEditability'; import { isCellEditable } from './utils/cellEditability';
import { getColumnValue } from './utils/columnUtils';
import VspDropdownEditCell from './Cell/EditCell/VspDropdownEditCell'; import VspDropdownEditCell from './Cell/EditCell/VspDropdownEditCell';
@ -248,6 +249,12 @@ export const getTableColumns = ({
// Группирующие колонки-заголовки (есть col.columns) не рендерят Cell/Edit // Группирующие колонки-заголовки (есть col.columns) не рендерят Cell/Edit
// по строкам сами — enableEditing им не нужен, в отличие от листовых. // по строкам сами — enableEditing им не нужен, в отличие от листовых.
const isLeafColumn = !col.columns?.length; 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 }) => { col.Cell = ({ cell, table, column, row }) => {
const props = getCachedCellProps(row, column, table); const props = getCachedCellProps(row, column, table);

View File

@ -1,6 +1,23 @@
// Явный id определяет технический ключ колонки; accessorKey используется как fallback. // Явный id определяет технический ключ колонки; accessorKey используется как fallback.
export const getColumnKey = (node) => node?.id ?? node?.accessorKey; 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) => { export const shouldExcludeFromTree = (node, excludeSet) => {
if (node?.hideInTree) return true; if (node?.hideInTree) return true;