| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 | 'use client'import type { ReactNode } from 'react'import {  useMemo,  useRef,  useState,} from 'react'import {  createContext,  useContextSelector,} from 'use-context-selector'import { useSelector as useAppContextSelector } from '@/context/app-context'import type { FilterState } from './filter-management'import { useTranslation } from 'react-i18next'import { useTabSearchParams } from '@/hooks/use-tab-searchparams'export type PluginPageContextValue = {  containerRef: React.RefObject<HTMLDivElement>  currentPluginID: string | undefined  setCurrentPluginID: (pluginID?: string) => void  filters: FilterState  setFilters: (filter: FilterState) => void  activeTab: string  setActiveTab: (tab: string) => void  options: Array<{ value: string, text: string }>}export const PluginPageContext = createContext<PluginPageContextValue>({  containerRef: { current: null },  currentPluginID: undefined,  setCurrentPluginID: () => { },  filters: {    categories: [],    tags: [],    searchQuery: '',  },  setFilters: () => { },  activeTab: '',  setActiveTab: () => { },  options: [],})type PluginPageContextProviderProps = {  children: ReactNode}export function usePluginPageContext(selector: (value: PluginPageContextValue) => any) {  return useContextSelector(PluginPageContext, selector)}export const PluginPageContextProvider = ({  children,}: PluginPageContextProviderProps) => {  const { t } = useTranslation()  const containerRef = useRef<HTMLDivElement>(null)  const [filters, setFilters] = useState<FilterState>({    categories: [],    tags: [],    searchQuery: '',  })  const [currentPluginID, setCurrentPluginID] = useState<string | undefined>()  const { enable_marketplace } = useAppContextSelector(s => s.systemFeatures)  const options = useMemo(() => {    return [      { value: 'plugins', text: t('common.menus.plugins') },      ...(        enable_marketplace          ? [{ value: 'discover', text: t('common.menus.exploreMarketplace') }]          : []      ),    ]  }, [t, enable_marketplace])  const [activeTab, setActiveTab] = useTabSearchParams({    defaultTab: options[0].value,  })  return (    <PluginPageContext.Provider      value={{        containerRef,        currentPluginID,        setCurrentPluginID,        filters,        setFilters,        activeTab,        setActiveTab,        options,      }}    >      {children}    </PluginPageContext.Provider>  )}
 |