Skip to content
Snippets Groups Projects
useNavigation.ts 3.56 KiB
Newer Older
import { useNavigate } from "react-router-dom";
Liliana Sanfilippo's avatar
Liliana Sanfilippo committed

export const useNavigation = () => {
    const navigate = useNavigate();
Liliana Sanfilippo's avatar
Liliana Sanfilippo committed
    const goToPagesAndOpenTab = (tabId: string, path: string) => {
Liliana Sanfilippo's avatar
Liliana Sanfilippo committed
    
Liliana Sanfilippo's avatar
Liliana Sanfilippo committed
        navigate(`${path}?tab=${tabId}`);
        
    };
    const goToTextsAndOpenCollapsible = (collapseId: string, path: string) => {
        
        navigate(`${path}?collapseId=${collapseId}`);
    const goToPageWithTabAndCollapsible = ({ path, tabId, collapseId }: { path: string, tabId: string, collapseId?: string }) => {
        
        
        let url = `${path}?tab=${tabId}`;
        if (collapseId) {
            url += `&collapseId=${collapseId}`;
        }
        navigate(url);
    };
    const goToPageWithNestedTabs = ({ path, tabId, subTabId, collapseId }: { path: string, tabId: string, subTabId?: string, collapseId?: string }) => {
        
        
        let url = `${path}?tab=${tabId}`;
        if (subTabId) {
            url += `&subTab=${subTabId}`;
        }
        if (collapseId) {
            url += `&collapseId=${collapseId}`;
        }
        navigate(url);
    };


Liliana Sanfilippo's avatar
Liliana Sanfilippo committed
    const goToPageWithTabAndScroll = ({ path, tabId, scrollToId }: { path: string, tabId: string, scrollToId: string }) => {
        let url = `${path}?tab=${tabId}`;
        if (scrollToId) {
            url += `&scrollTo=${scrollToId}`;
Liliana Sanfilippo's avatar
Liliana Sanfilippo committed
        }
        navigate(url);
Liliana Sanfilippo's avatar
Liliana Sanfilippo committed
    const goToPageAndScroll = (scrollToId: string, path: string) => {
        
        navigate(`${path}?scrollTo=${scrollToId}`);
    };

Liliana Sanfilippo's avatar
Liliana Sanfilippo committed
  
Liliana Sanfilippo's avatar
Liliana Sanfilippo committed
    const goToPlace = ({
        path,
        scrollToId,
        tabId,
        subTabId,
        collapseId,
        tabincolId
    }: { 
        path: string;
        scrollToId?: string;
        tabId?: string;
        subTabId?: string;
        collapseId?: string;
        tabincolId?: string;
    }) => {
Liliana Sanfilippo's avatar
Liliana Sanfilippo committed
    // Den vollständigen Pfad erstellen, indem wir den basePath und path kombinieren
    let url = `/${path.startsWith("/") ? path.slice(1) : path}`;


        
Liliana Sanfilippo's avatar
Liliana Sanfilippo committed
        let paramsAdded = false; 
        console.log("Found path: " + path)
        // 1. Tab-Logik (tabId und subTabId)
Liliana Sanfilippo's avatar
Liliana Sanfilippo committed
        if (tabId) {
Liliana Sanfilippo's avatar
Liliana Sanfilippo committed
            console.log("Found tabID: " + tabId)
Liliana Sanfilippo's avatar
Liliana Sanfilippo committed
            url += `?tab=${tabId}`;
Liliana Sanfilippo's avatar
Liliana Sanfilippo committed
            paramsAdded = true;
Liliana Sanfilippo's avatar
Liliana Sanfilippo committed
            if (subTabId) {
Liliana Sanfilippo's avatar
Liliana Sanfilippo committed
                console.log("Found subTabId: " + subTabId)
Liliana Sanfilippo's avatar
Liliana Sanfilippo committed
                url += `&subTab=${subTabId}`;
            }
        }
Liliana Sanfilippo's avatar
Liliana Sanfilippo committed

        // 2. Collapse-Logik (collapseId und tabincolId)
Liliana Sanfilippo's avatar
Liliana Sanfilippo committed
        if (collapseId) {
Liliana Sanfilippo's avatar
Liliana Sanfilippo committed
            console.log("Found collapseId: " + collapseId)
            if (!tabId) {
                // Wenn kein tabId gesetzt ist, fügen wir collapseId hinzu
                url += url.includes('?') ? `&collapseId=${collapseId}` : `?collapseId=${collapseId}`;
                paramsAdded = true;
            }
Liliana Sanfilippo's avatar
Liliana Sanfilippo committed
            if (tabincolId) {
Liliana Sanfilippo's avatar
Liliana Sanfilippo committed
                console.log("Found tabincolId: " + tabincolId)
                url += `&colTab=${tabincolId}`;
Liliana Sanfilippo's avatar
Liliana Sanfilippo committed
            }
        }
Liliana Sanfilippo's avatar
Liliana Sanfilippo committed

        // 3. Scroll-Logik (scrollToId)
        if (scrollToId) {
            console.log("Found scrollToId: " + scrollToId)
            // Wenn bereits Parameter existieren, fügen wir & hinzu, ansonsten ?
Liliana Sanfilippo's avatar
Liliana Sanfilippo committed
            const separator = paramsAdded ? '&' : '?';
Liliana Sanfilippo's avatar
Liliana Sanfilippo committed
            paramsAdded = true;
Liliana Sanfilippo's avatar
Liliana Sanfilippo committed
            url += `${separator}scrollTo=${scrollToId}`;
        }
        console.log("Final URL:", url);

        // Navigiere zur URL
Liliana Sanfilippo's avatar
Liliana Sanfilippo committed
        navigate(url);
Liliana Sanfilippo's avatar
Liliana Sanfilippo committed
    };
Liliana Sanfilippo's avatar
Liliana Sanfilippo committed

Liliana Sanfilippo's avatar
Liliana Sanfilippo committed
    return { goToPlace,  goToPageAndScroll, goToPagesAndOpenTab, goToPageWithTabAndScroll, goToPageWithNestedTabs, goToPageWithTabAndCollapsible, goToTextsAndOpenCollapsible };