diff --git a/client/src/components/directories/DirectoryColumnTree.tsx b/client/src/components/directories/DirectoryColumnTree.tsx index 7f88eaa..bfd8706 100644 --- a/client/src/components/directories/DirectoryColumnTree.tsx +++ b/client/src/components/directories/DirectoryColumnTree.tsx @@ -27,10 +27,17 @@ interface TreeGroup { function getRowLabel(row: DataTableRow, displayColumns: number[]): string { const values = Array.isArray(row.values) ? row.values : []; - const parts = displayColumns - .map((ci) => String(values[ci] ?? '').trim()) - .filter(Boolean); - return parts.length > 0 ? parts.join(' ') : '(без названия)'; + // Последнее заполненное значение из displayColumns + for (let i = displayColumns.length - 1; i >= 0; i--) { + const val = String(values[displayColumns[i]] ?? '').trim(); + if (val) return val; + } + // Fallback: первая заполненная колонка + for (const val of values) { + const str = String(val ?? '').trim(); + if (str) return str; + } + return '(без названия)'; } function buildTree( diff --git a/client/src/pages/TableEditor.tsx b/client/src/pages/TableEditor.tsx index ee494cb..3446fb3 100644 --- a/client/src/pages/TableEditor.tsx +++ b/client/src/pages/TableEditor.tsx @@ -1832,10 +1832,14 @@ export default function TableEditor() { ) : ( displayRows.map((row) => { const displayCols = treeDisplayColumns.length > 0 ? treeDisplayColumns : [0]; - const label = displayCols - .map((ci) => String(row.values[ci] ?? '').trim()) - .filter(Boolean) - .join(' ') || `Строка ${row.id}`; + let label = ''; + for (let i = displayCols.length - 1; i >= 0; i--) { + const val = String(row.values[displayCols[i]] ?? '').trim(); + if (val) { label = val; break; } + } + if (!label) { + label = row.values.find((v) => String(v ?? '').trim()) || `Строка ${row.id}`; + } return (