| 1234567891011121314151617181920212223242526272829303132333435363738394041424344 | 
							- import { usePathname, useRouter, useSearchParams } from 'next/navigation'
 
- import { useState } from 'react'
 
- type UseTabSearchParamsOptions = {
 
-   defaultTab: string
 
-   routingBehavior?: 'push' | 'replace'
 
-   searchParamName?: string
 
-   disableSearchParams?: boolean
 
- }
 
- /**
 
-  * Custom hook to manage tab state via URL search parameters in a Next.js application.
 
-  * This hook allows for syncing the active tab with the browser's URL, enabling bookmarking and sharing of URLs with a specific tab activated.
 
-  *
 
-  * @param {UseTabSearchParamsOptions} options Configuration options for the hook:
 
-  * - `defaultTab`: The tab to default to when no tab is specified in the URL.
 
-  * - `routingBehavior`: Optional. Determines how changes to the active tab update the browser's history ('push' or 'replace'). Default is 'push'.
 
-  * - `searchParamName`: Optional. The name of the search parameter that holds the tab state in the URL. Default is 'category'.
 
-  * @returns A tuple where the first element is the active tab and the second element is a function to set the active tab.
 
-  */
 
- export const useTabSearchParams = ({
 
-   defaultTab,
 
-   routingBehavior = 'push',
 
-   searchParamName = 'category',
 
-   disableSearchParams = false,
 
- }: UseTabSearchParamsOptions) => {
 
-   const router = useRouter()
 
-   const pathName = usePathname()
 
-   const searchParams = useSearchParams()
 
-   const [activeTab, setTab] = useState<string>(
 
-     !disableSearchParams
 
-       ? (searchParams.get(searchParamName) || defaultTab)
 
-       : defaultTab,
 
-   )
 
-   const setActiveTab = (newActiveTab: string) => {
 
-     setTab(newActiveTab)
 
-     if (disableSearchParams)
 
-       return
 
-     router[routingBehavior](`${pathName}?${searchParamName}=${newActiveTab}`)
 
-   }
 
-   return [activeTab, setActiveTab] as const
 
- }
 
 
  |