BUILD140 — все SQL-колонки в ручном Mapping
This commit is contained in:
2
app.py
2
app.py
@@ -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"
|
||||
|
||||
@@ -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}
|
||||
|
||||
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user