diff --git a/app.py b/app.py index e02c1e9..2877a80 100644 --- a/app.py +++ b/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" diff --git a/hockey_data/static/admin-directories.css b/hockey_data/static/admin-directories.css index e7fa299..360845e 100644 --- a/hockey_data/static/admin-directories.css +++ b/hockey_data/static/admin-directories.css @@ -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} diff --git a/hockey_data/static/admin-directories.js b/hockey_data/static/admin-directories.js index 04a38a4..9009952 100644 --- a/hockey_data/static/admin-directories.js +++ b/hockey_data/static/admin-directories.js @@ -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) => ` @@ -2365,7 +2383,7 @@ `).join(""); tableMarkup = `
-
ТАБЛИЦА SQLВыберите конкретную строку и столбец
${Number(selectedTable?.row_count || 0)} строк
+
ТАБЛИЦА SQLВыберите конкретную строку и столбец
${Number(selectedTable?.row_count || 0)} строк · ${columns.length} колонок