fix: отображение последнего заполненного значения в дереве справочника

This commit is contained in:
2026-07-21 15:00:17 +03:00
parent dee9ae7ad6
commit 9e1612c4c3
3 changed files with 30 additions and 12 deletions

View File

@@ -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(

View File

@@ -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 (
<label key={row.id} className="flex items-center gap-2 p-1.5 hover:bg-muted rounded cursor-pointer">
<Checkbox

View File

@@ -530,10 +530,17 @@ export function registerDataTableRoutes(app: import("express").Express): void {
const getRowLabel = (row: typeof rows[number]): string => {
const values = Array.isArray(row.values) ? row.values : [];
const parts = treeDisplayColumns
.map((ci) => String(values[ci] ?? '').trim())
.filter(Boolean);
return parts.length > 0 ? parts.join(' ') : '(без названия)';
// Последнее заполненное значение из treeDisplayColumns
for (let i = treeDisplayColumns.length - 1; i >= 0; i--) {
const val = String(values[treeDisplayColumns[i]] ?? '').trim();
if (val) return val;
}
// Fallback: первая заполненная колонка
for (const val of values) {
const str = String(val ?? '').trim();
if (str) return str;
}
return '(без названия)';
};
type TreeNode =