Skip to content
Snippets Groups Projects
openThem.ts 1.71 KiB
Newer Older
export function openThem({ it, scrollToId }: { it: string; scrollToId?: string }) {
  const gotoandopen = (_event: React.MouseEvent<HTMLElement, MouseEvent>) => {
    updateTabs(it, scrollToId);
    // Update der URL
    const newUrl = `?tab=${it}`;
    window.history.pushState({ tab: it }, '', newUrl);
  };
  return gotoandopen;
}

function updateTabs(it: string, scrollToId?: string) {
  let contenttabid = "tab-" + it;
  let parent = "parent-" + it;

  // Verstecke alle Subtabs und Content-Tabs
  const subtabs = document.getElementsByClassName("sidesubtab");
  const contenttabs = document.getElementsByClassName("enginneeringtab");
  const sideitems = document.getElementsByClassName("sideitem");

  for (let i = 0; i < subtabs.length; i++) {
    (subtabs[i] as HTMLElement).style.display = "none";
  for (let i = 0; i < contenttabs.length; i++) {
    (contenttabs[i] as HTMLElement).style.display = "none";
  }
  for (let i = 0; i < sideitems.length; i++) {
    (sideitems[i] as HTMLElement)!.classList.remove("active-sideitem");
  }

  // Zeige den aktuellen Tab und markiere das entsprechende Sidebar-Item
  document.getElementById(it)!.style.display = "block";
  document.getElementById(parent)!.classList.add("active-sideitem");
  document.getElementById(contenttabid)!.style.display = "block";

  // Scrolle zu der angegebenen ID, falls vorhanden
  if (scrollToId && document.getElementById(scrollToId)) {
    document.getElementById(scrollToId)!.scrollIntoView({ behavior: "smooth" });
Liliana Sanfilippo's avatar
Liliana Sanfilippo committed
    console.log(`Scroll to ${scrollToId}`)
  }
}

// Füge einen Event Listener für `popstate` hinzu
window.addEventListener('popstate', (event) => {
  if (event.state) {
    const tab = event.state.tab;
    updateTabs(tab);
  }
});