правки
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 { 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);
|
||||||
|
|||||||
@ -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;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user