subtab bug fix
This commit is contained in:
parent
9d57da7061
commit
994d44cdaf
|
|
@ -93,22 +93,22 @@ function setup_custom_subtabs(wrapper, currentDoctype) {
|
||||||
function ensureParentChainVisible(subtabName) {
|
function ensureParentChainVisible(subtabName) {
|
||||||
let currentChild = subtabName;
|
let currentChild = subtabName;
|
||||||
const parentsToShow = [];
|
const parentsToShow = [];
|
||||||
|
|
||||||
// Collect parent chain
|
// Collect parent chain
|
||||||
while (childToParentMap[currentChild]) {
|
while (childToParentMap[currentChild]) {
|
||||||
const parentName = childToParentMap[currentChild];
|
const parentName = childToParentMap[currentChild];
|
||||||
parentsToShow.push(parentName);
|
parentsToShow.push(parentName);
|
||||||
|
|
||||||
// Show all siblings
|
// Show all siblings - НЕ используем .show(), используем CSS класс
|
||||||
const siblings = subtabs[parentName] || [];
|
const siblings = subtabs[parentName] || [];
|
||||||
siblings.forEach(sibling => {
|
siblings.forEach(sibling => {
|
||||||
const siblingElement = wrapper.find(`.sub-tab[data-subtab-name="${sibling}"]`);
|
const siblingElement = wrapper.find(`.sub-tab[data-subtab-name="${sibling}"]`);
|
||||||
siblingElement.show();
|
siblingElement.css('display', ''); // Убираем inline style
|
||||||
});
|
});
|
||||||
|
|
||||||
currentChild = parentName;
|
currentChild = parentName;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Show all parent content
|
// Show all parent content
|
||||||
parentsToShow.forEach(parentName => {
|
parentsToShow.forEach(parentName => {
|
||||||
const parentTabContentId = `${currentDoctype.toLowerCase().replace(/\s+/g, '-')}-${parentName.toLowerCase().replace(/\s+/g, '_')}_tab`;
|
const parentTabContentId = `${currentDoctype.toLowerCase().replace(/\s+/g, '-')}-${parentName.toLowerCase().replace(/\s+/g, '_')}_tab`;
|
||||||
|
|
@ -123,33 +123,44 @@ function setup_custom_subtabs(wrapper, currentDoctype) {
|
||||||
wrapper.on("click.customsubtabs", ".sub-tab button.nav-link, .sub-tab a.nav-link", function(event) {
|
wrapper.on("click.customsubtabs", ".sub-tab button.nav-link, .sub-tab a.nav-link", function(event) {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
event.stopPropagation();
|
event.stopPropagation();
|
||||||
|
|
||||||
const clickedButton = $(this);
|
const clickedButton = $(this);
|
||||||
const clickedSubtab = clickedButton.closest(".sub-tab");
|
const clickedSubtab = clickedButton.closest(".sub-tab");
|
||||||
const subtabName = clickedSubtab.attr("data-subtab-name");
|
const subtabName = clickedSubtab.attr("data-subtab-name");
|
||||||
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");
|
||||||
|
|
||||||
// Temporarily disable shown.bs.tab handler
|
// Temporarily disable shown.bs.tab handler
|
||||||
wrapper.off('shown.bs.tab.customsubtabs');
|
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");
|
||||||
wrapper.find(".tab-pane").removeClass("active show");
|
wrapper.find(".tab-pane").removeClass("active show");
|
||||||
|
|
||||||
|
// Скрыть все контейнеры субтабов, кроме родительского
|
||||||
|
wrapper.find(".sub-tab-container").each(function() {
|
||||||
|
const containerParentId = $(this).attr("data-parent-id");
|
||||||
|
if (containerParentId !== parentContainerId) {
|
||||||
|
$(this).addClass("subtab-hidden");
|
||||||
|
} else {
|
||||||
|
$(this).removeClass("subtab-hidden");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
// Activate subtab
|
// Activate subtab
|
||||||
clickedSubtab.addClass("active");
|
clickedSubtab.addClass("active");
|
||||||
clickedButton.addClass("active").attr("aria-selected", "true");
|
clickedButton.addClass("active").attr("aria-selected", "true");
|
||||||
|
|
||||||
// Show subtab content
|
// Show subtab content
|
||||||
const targetPane = $(`#${targetId}`);
|
const targetPane = $(`#${targetId}`);
|
||||||
if (targetPane.length) {
|
if (targetPane.length) {
|
||||||
targetPane.addClass("active show");
|
targetPane.addClass("active show");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Show parent chain
|
// Show parent chain
|
||||||
ensureParentChainVisible(subtabName);
|
ensureParentChainVisible(subtabName);
|
||||||
|
|
||||||
// Restore shown.bs.tab handler
|
// Restore shown.bs.tab handler
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
setupMainTabHandler();
|
setupMainTabHandler();
|
||||||
|
|
@ -200,6 +211,18 @@ function setup_custom_subtabs(wrapper, currentDoctype) {
|
||||||
// Initialize handler
|
// Initialize handler
|
||||||
setupMainTabHandler();
|
setupMainTabHandler();
|
||||||
|
|
||||||
|
// Инициализация: скрыть все контейнеры, кроме активного таба
|
||||||
|
const activeMainTab = wrapper.find("ul.form-tabs > li.nav-item.active:not(.sub-tab)").first();
|
||||||
|
const activeTabLink = getTabLink(activeMainTab);
|
||||||
|
const activeTabId = activeTabLink.attr("aria-controls");
|
||||||
|
|
||||||
|
wrapper.find(".sub-tab-container").each(function() {
|
||||||
|
const containerParentId = $(this).attr("data-parent-id");
|
||||||
|
if (containerParentId !== activeTabId) {
|
||||||
|
$(this).addClass("subtab-hidden");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
// Mark as processed
|
// Mark as processed
|
||||||
wrapper.attr('data-subtabs-processed', 'true');
|
wrapper.attr('data-subtabs-processed', 'true');
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue