BUILD140 — все SQL-колонки в ручном Mapping

This commit is contained in:
2026-09-15 16:30:46 +03:00
parent 883313006b
commit 328a4a1a9c
3 changed files with 28 additions and 4 deletions

2
app.py
View File

@@ -29,7 +29,7 @@ from ui_builder import install_ui_builder
from khl_site.khl_data_center import APP as khl_site_app
BASE_DIR = Path(__file__).resolve().parent
BUILD_VERSION = "2026.09.15.7"
BUILD_VERSION = "2026.09.15.8"
# compatibility: BUILD_VERSION = "2026.08.26.1"
# compatibility: BUILD_VERSION = "2026.08.25.1"
# compatibility: BUILD_VERSION = "2026.08.24.15"

View File

@@ -2406,3 +2406,9 @@ body.hockey-admin-settings-open { overflow: hidden; }
.hockey-map-rule-colour-branch{display:grid;gap:6px;min-width:0;padding:7px;border:1px solid #263b50;border-radius:8px;background:#0b151f}
.hockey-map-rule-colour-branch label{min-width:0}
.hockey-map-rule-colour-branch select,.hockey-map-rule-colour-branch input{min-width:0}
/* BUILD140: manual SQL picker shows every physical result column. */
.hockey-map-table-grid{overflow-x:auto!important;overflow-y:auto!important;scrollbar-gutter:stable both-edges}
.hockey-map-table-grid table{width:max-content!important;min-width:100%}
.hockey-map-table-grid thead th{min-width:118px;white-space:nowrap}
.hockey-map-table-picker>summary>b{max-width:none;white-space:nowrap}

View File

@@ -1718,6 +1718,23 @@
return mappingDataCatalog().items.find((item) => item.key === key) || null;
}
// BUILD140: manual Mapping must expose every physical SQL result column.
// The catalog also contains virtual AUTO language columns (foo from foo_RUS/foo_ENG);
// keep those as optional extras, but never hide the original SQL columns.
function mappingManualTableColumns(table) {
const raw = Array.isArray(table?.raw_columns) ? table.raw_columns : [];
const visible = Array.isArray(table?.columns) ? table.columns : [];
const result = [];
const seen = new Set();
for (const column of [...raw, ...visible]) {
const key = String(column?.key || "");
if (!key || seen.has(key)) continue;
seen.add(key);
result.push(column);
}
return result;
}
function mappingCurrentInput(profile) {
const inputs = mappingInventoryInputs(profile);
if (!inputs.length) return null;
@@ -2311,7 +2328,8 @@
const selectedTableRows = selectedTable?.rows || [];
let selectedTableRow = selectedTableRows.find((row) => Number(row.index || 0) === Number(state.mappingSelectedTableRow || 0)) || selectedTableRows[0] || null;
if (selectedTableRow) state.mappingSelectedTableRow = Number(selectedTableRow.index || 1);
const quickCompatibleColumns = (selectedTable?.columns || []).filter((column) => {
const manualColumns = mappingManualTableColumns(selectedTable);
const quickCompatibleColumns = manualColumns.filter((column) => {
if (!selectedTableRow) return false;
const key = `${selectedTable.code}.row.${selectedTableRow.index}.${column.key}`;
const source = mappingSourceByKey(key);
@@ -2351,7 +2369,7 @@
return `${row.index || ""} ${row.label || ""} ${values}`.toLowerCase().includes(rowSearch);
});
const visibleRows = filteredRows.slice(0, 120);
const columns = selectedTable?.columns || [];
const columns = manualColumns;
const tableGridHeight = Math.min(430, Math.max(230, visibleRows.length * 44 + 42));
const cells = visibleRows.map((row) => `
<tr>
@@ -2365,7 +2383,7 @@
</tr>`).join("");
tableMarkup = `
<details class="hockey-map-table-picker" data-map-sql-table-details ${state.mappingSqlTableOpen ? "open" : ""}>
<summary><div><span>ТАБЛИЦА SQL</span><strong>Выберите конкретную строку и столбец</strong></div><b>${Number(selectedTable?.row_count || 0)} строк</b></summary>
<summary><div><span>ТАБЛИЦА SQL</span><strong>Выберите конкретную строку и столбец</strong></div><b>${Number(selectedTable?.row_count || 0)} строк · ${columns.length} колонок</b></summary>
<div class="hockey-map-table-controls">
<select data-map-table-source>${tables.map((table) => `<option value="${escapeHtml(table.code)}" ${String(table.code) === String(selectedTable?.code) ? "selected" : ""}>${escapeHtml(table.name || table.code)} · ${Number(table.row_count || 0)} строк</option>`).join("")}</select>
<label><span>⌕</span><input data-map-table-row-search value="${escapeHtml(state.mappingTableRowSearch)}" placeholder="Поиск строки по любому значению…"></label>