176 build - убран поиск в ненужном месте
This commit is contained in:
13
README_BUILD176_RU.md
Normal file
13
README_BUILD176_RU.md
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
# Build 176 — убрать лишний поиск в Mapping
|
||||||
|
|
||||||
|
Версия: 2026.09.29.13. Установить поверх build 175.
|
||||||
|
|
||||||
|
Убрана строка «Обычные значения: название, счёт, игрок, ключ…» под блоком SQL-таблицы, отмеченная на скриншоте. Удалены её обработчик и фильтрация. Обычные значения доступны в группах ниже. Поиск строк самой SQL-таблицы сохранён.
|
||||||
|
|
||||||
|
В архиве два изменённых файла приложения и эта инструкция:
|
||||||
|
- app.py — номер сборки для обновления кеша браузера;
|
||||||
|
- hockey_data/static/admin-directories.js — изменение Mapping.
|
||||||
|
|
||||||
|
Остановите приложение, распакуйте файлы в корень проекта с заменой и сохранением вложенных каталогов. Запустите приложение и обновите страницу через Ctrl+F5.
|
||||||
|
|
||||||
|
Настройки, база данных и .env в архив не включены. Изменения build 175 сохранены. Проверены синтаксис JavaScript и существующая браузерная проверка Mapping/RU/EN.
|
||||||
2
app.py
2
app.py
@@ -35,7 +35,7 @@ from khl_site.khl_data_center import APP as khl_site_app, configure_storage, syn
|
|||||||
from hockey_data.khl_career import KhlCareerService
|
from hockey_data.khl_career import KhlCareerService
|
||||||
|
|
||||||
BASE_DIR = Path(__file__).resolve().parent
|
BASE_DIR = Path(__file__).resolve().parent
|
||||||
BUILD_VERSION = "2026.09.29.12"
|
BUILD_VERSION = "2026.09.29.13"
|
||||||
# compatibility: BUILD_VERSION = "2026.09.24.2"
|
# compatibility: BUILD_VERSION = "2026.09.24.2"
|
||||||
# compatibility: BUILD_VERSION = "2026.09.23.8"
|
# compatibility: BUILD_VERSION = "2026.09.23.8"
|
||||||
# compatibility: BUILD_VERSION = "2026.09.23.7"
|
# compatibility: BUILD_VERSION = "2026.09.23.7"
|
||||||
|
|||||||
@@ -26,7 +26,6 @@
|
|||||||
mappingSelectedInputKey: "",
|
mappingSelectedInputKey: "",
|
||||||
mappingTargetField: "",
|
mappingTargetField: "",
|
||||||
mappingSelectedSourceKey: "",
|
mappingSelectedSourceKey: "",
|
||||||
mappingDataSearch: "",
|
|
||||||
mappingInputSearch: "",
|
mappingInputSearch: "",
|
||||||
mappingFieldFilter: "text",
|
mappingFieldFilter: "text",
|
||||||
mappingHideLinked: false,
|
mappingHideLinked: false,
|
||||||
@@ -2433,7 +2432,6 @@
|
|||||||
const catalog = mappingDataCatalog();
|
const catalog = mappingDataCatalog();
|
||||||
const targetField = (currentInput?.fields || []).find((field) => String(field.name || "") === state.mappingTargetField) || null;
|
const targetField = (currentInput?.fields || []).find((field) => String(field.name || "") === state.mappingTargetField) || null;
|
||||||
const targetKind = targetField ? mappingFieldKind(targetField) : "";
|
const targetKind = targetField ? mappingFieldKind(targetField) : "";
|
||||||
const query = String(state.mappingDataSearch || "").trim().toLowerCase();
|
|
||||||
const multiRowCodes = new Set((catalog.tables || []).filter((table) => Number(table.row_count || table.rows?.length || 0) > 1).map((table) => String(table.code || "")));
|
const multiRowCodes = new Set((catalog.tables || []).filter((table) => Number(table.row_count || table.rows?.length || 0) > 1).map((table) => String(table.code || "")));
|
||||||
const categories = [];
|
const categories = [];
|
||||||
for (const item of catalog.items) {
|
for (const item of catalog.items) {
|
||||||
@@ -2444,15 +2442,13 @@
|
|||||||
// Multi-row SQL sources are configured through the table/cell picker below.
|
// Multi-row SQL sources are configured through the table/cell picker below.
|
||||||
if (multiRowCodes.has(String(item.source_code || ""))) continue;
|
if (multiRowCodes.has(String(item.source_code || ""))) continue;
|
||||||
if (!mappingCompatible(item, targetKind)) continue;
|
if (!mappingCompatible(item, targetKind)) continue;
|
||||||
const haystack = `${item.label} ${item.category} ${item.key} ${mappingDisplayValue(item.value, item.kind)}`.toLowerCase();
|
|
||||||
if (query && !haystack.includes(query)) continue;
|
|
||||||
let category = categories.find((row) => row.name === item.category);
|
let category = categories.find((row) => row.name === item.category);
|
||||||
if (!category) { category = { name: item.category, items: [] }; categories.push(category); }
|
if (!category) { category = { name: item.category, items: [] }; categories.push(category); }
|
||||||
category.items.push(item);
|
category.items.push(item);
|
||||||
}
|
}
|
||||||
const selectedSource = state.mappingSelectedSourceKey;
|
const selectedSource = state.mappingSelectedSourceKey;
|
||||||
const groups = categories.map((category) => `
|
const groups = categories.map((category) => `
|
||||||
<details class="hockey-map-data-group" data-map-data-group="${escapeHtml(category.name)}" ${query || state.mappingOpenDataGroups[category.name] ? "open" : ""}>
|
<details class="hockey-map-data-group" data-map-data-group="${escapeHtml(category.name)}" ${state.mappingOpenDataGroups[category.name] ? "open" : ""}>
|
||||||
<summary><span>${escapeHtml(category.name)}</span><b>${category.items.length}</b></summary>
|
<summary><span>${escapeHtml(category.name)}</span><b>${category.items.length}</b></summary>
|
||||||
<div>${category.items.map((item) => `
|
<div>${category.items.map((item) => `
|
||||||
<button type="button" class="hockey-map-data-item ${selectedSource === item.key ? "is-selected" : ""}" data-map-source="${escapeHtml(item.key)}">
|
<button type="button" class="hockey-map-data-item ${selectedSource === item.key ? "is-selected" : ""}" data-map-source="${escapeHtml(item.key)}">
|
||||||
@@ -2574,7 +2570,6 @@
|
|||||||
${targetHint}
|
${targetHint}
|
||||||
${quickTableMarkup}
|
${quickTableMarkup}
|
||||||
${tableMarkup}
|
${tableMarkup}
|
||||||
<label class="hockey-map-data-search"><span>⌕</span><input data-map-data-search value="${escapeHtml(state.mappingDataSearch)}" placeholder="Обычные значения: название, счёт, игрок, ключ…"></label>
|
|
||||||
<div class="hockey-map-data-scroll">${groups || `<div class="hockey-directory-empty">Подходящих одиночных данных не найдено.</div>`}</div>
|
<div class="hockey-map-data-scroll">${groups || `<div class="hockey-directory-empty">Подходящих одиночных данных не найдено.</div>`}</div>
|
||||||
</section>`;
|
</section>`;
|
||||||
}
|
}
|
||||||
@@ -3586,13 +3581,6 @@
|
|||||||
if (input) { input.focus(); input.setSelectionRange(value.length, value.length); }
|
if (input) { input.focus(); input.setSelectionRange(value.length, value.length); }
|
||||||
});
|
});
|
||||||
modal.querySelector("[data-map-test-device]")?.addEventListener("change", (event) => { state.mappingTestDeviceId = event.currentTarget.value; });
|
modal.querySelector("[data-map-test-device]")?.addEventListener("change", (event) => { state.mappingTestDeviceId = event.currentTarget.value; });
|
||||||
modal.querySelector("[data-map-data-search]")?.addEventListener("input", (event) => {
|
|
||||||
state.mappingDataSearch = event.currentTarget.value;
|
|
||||||
const value = state.mappingDataSearch;
|
|
||||||
renderMapping();
|
|
||||||
const input = ensureModal().querySelector("[data-map-data-search]");
|
|
||||||
if (input) { input.focus(); input.setSelectionRange(value.length, value.length); }
|
|
||||||
});
|
|
||||||
modal.querySelector("[data-map-live-refresh]")?.addEventListener("click", async () => { await loadMappingCatalog(); renderMapping(); });
|
modal.querySelector("[data-map-live-refresh]")?.addEventListener("click", async () => { await loadMappingCatalog(); renderMapping(); });
|
||||||
|
|
||||||
const chooseTarget = (fieldName) => {
|
const chooseTarget = (fieldName) => {
|
||||||
|
|||||||
Reference in New Issue
Block a user