subtab bug fix
This commit is contained in:
parent
5cf9e982dd
commit
174fbe8f29
|
|
@ -130,9 +130,6 @@ function setup_custom_subtabs(wrapper, currentDoctype) {
|
||||||
const targetId = clickedButton.attr("data-target-id") || clickedButton.attr("aria-controls");
|
const targetId = clickedButton.attr("data-target-id") || clickedButton.attr("aria-controls");
|
||||||
const parentContainerId = clickedSubtab.attr("data-parent-id");
|
const parentContainerId = clickedSubtab.attr("data-parent-id");
|
||||||
|
|
||||||
// Temporarily disable shown.bs.tab handler
|
|
||||||
wrapper.off('shown.bs.tab.customsubtabs');
|
|
||||||
|
|
||||||
// Hide all tabs and content
|
// Hide all tabs and content
|
||||||
wrapper.find(".nav-item").removeClass("active");
|
wrapper.find(".nav-item").removeClass("active");
|
||||||
wrapper.find("button.nav-link, a.nav-link").removeClass("active").attr("aria-selected", "false");
|
wrapper.find("button.nav-link, a.nav-link").removeClass("active").attr("aria-selected", "false");
|
||||||
|
|
@ -160,37 +157,36 @@ function setup_custom_subtabs(wrapper, currentDoctype) {
|
||||||
|
|
||||||
// Show parent chain
|
// Show parent chain
|
||||||
ensureParentChainVisible(subtabName);
|
ensureParentChainVisible(subtabName);
|
||||||
|
|
||||||
// Restore shown.bs.tab handler
|
|
||||||
setTimeout(() => {
|
|
||||||
setupMainTabHandler();
|
|
||||||
}, 100);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
// Function to setup main tab handler
|
// Function to setup main tab handler
|
||||||
function setupMainTabHandler() {
|
function setupMainTabHandler() {
|
||||||
// Удаляем старый обработчик
|
// Для Frappe v16 используем MutationObserver вместо событий Bootstrap
|
||||||
wrapper.off("shown.bs.tab.customsubtabs");
|
// так как shown.bs.tab не генерируется
|
||||||
|
|
||||||
// Регистрируем новый на wrapper без делегирования
|
// Удаляем старый observer если есть
|
||||||
wrapper.on("shown.bs.tab.customsubtabs", function(event) {
|
if (wrapper.data('subtabs-observer')) {
|
||||||
const button = event.target;
|
wrapper.data('subtabs-observer').disconnect();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Создаем MutationObserver для отслеживания изменений класса active
|
||||||
|
const observer = new MutationObserver(function(mutations) {
|
||||||
|
mutations.forEach(function(mutation) {
|
||||||
|
if (mutation.type === 'attributes' && mutation.attributeName === 'class') {
|
||||||
|
const button = mutation.target;
|
||||||
const $button = $(button);
|
const $button = $(button);
|
||||||
|
|
||||||
|
// Проверяем что это кнопка таба и она стала активной
|
||||||
|
if ($button.hasClass('nav-link') && $button.hasClass('active')) {
|
||||||
const li = $button.closest("li.nav-item");
|
const li = $button.closest("li.nav-item");
|
||||||
|
|
||||||
// If this is a subtab - ignore
|
// Игнорируем субтабы
|
||||||
if (li.hasClass("sub-tab")) {
|
if (li.hasClass("sub-tab")) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const tabId = button.getAttribute("aria-controls");
|
const tabId = button.getAttribute("aria-controls");
|
||||||
|
|
||||||
console.log('shown.bs.tab сработал для:', {
|
|
||||||
text: $button.text().trim(),
|
|
||||||
tabId: tabId,
|
|
||||||
isSubtab: li.hasClass("sub-tab")
|
|
||||||
});
|
|
||||||
|
|
||||||
// ИСПРАВЛЕНИЕ: Убираем active классы со всех субтабов и их контента
|
// ИСПРАВЛЕНИЕ: Убираем active классы со всех субтабов и их контента
|
||||||
wrapper.find(".sub-tab").removeClass("active");
|
wrapper.find(".sub-tab").removeClass("active");
|
||||||
wrapper.find(".sub-tab button.nav-link, .sub-tab a.nav-link")
|
wrapper.find(".sub-tab button.nav-link, .sub-tab a.nav-link")
|
||||||
|
|
@ -209,18 +205,24 @@ function setup_custom_subtabs(wrapper, currentDoctype) {
|
||||||
// Show/hide subtabs
|
// Show/hide subtabs
|
||||||
wrapper.find(".sub-tab-container").each(function() {
|
wrapper.find(".sub-tab-container").each(function() {
|
||||||
const containerParentId = $(this).attr("data-parent-id");
|
const containerParentId = $(this).attr("data-parent-id");
|
||||||
console.log('Проверка контейнера:', {
|
|
||||||
containerParentId: containerParentId,
|
|
||||||
tabId: tabId,
|
|
||||||
match: containerParentId === tabId
|
|
||||||
});
|
|
||||||
if (containerParentId === tabId) {
|
if (containerParentId === tabId) {
|
||||||
$(this).removeClass("subtab-hidden");
|
$(this).removeClass("subtab-hidden");
|
||||||
} else {
|
} else {
|
||||||
$(this).addClass("subtab-hidden");
|
$(this).addClass("subtab-hidden");
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
// Наблюдаем за всеми кнопками табов (не субтабов)
|
||||||
|
wrapper.find('ul.form-tabs > li.nav-item:not(.sub-tab) button.nav-link, ul.form-tabs > li.nav-item:not(.sub-tab) a.nav-link').each(function() {
|
||||||
|
observer.observe(this, { attributes: true, attributeFilter: ['class'] });
|
||||||
|
});
|
||||||
|
|
||||||
|
// Сохраняем observer чтобы можно было удалить позже
|
||||||
|
wrapper.data('subtabs-observer', observer);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Initialize handler
|
// Initialize handler
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue