search-box-wrapper.tsx 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. 'use client'
  2. import { useMarketplaceContext } from '../context'
  3. import {
  4. useMixedTranslation,
  5. useSearchBoxAutoAnimate,
  6. } from '../hooks'
  7. import SearchBox from './index'
  8. import cn from '@/utils/classnames'
  9. type SearchBoxWrapperProps = {
  10. locale?: string
  11. searchBoxAutoAnimate?: boolean
  12. }
  13. const SearchBoxWrapper = ({
  14. locale,
  15. searchBoxAutoAnimate,
  16. }: SearchBoxWrapperProps) => {
  17. const { t } = useMixedTranslation(locale)
  18. const intersected = useMarketplaceContext(v => v.intersected)
  19. const searchPluginText = useMarketplaceContext(v => v.searchPluginText)
  20. const handleSearchPluginTextChange = useMarketplaceContext(v => v.handleSearchPluginTextChange)
  21. const filterPluginTags = useMarketplaceContext(v => v.filterPluginTags)
  22. const handleFilterPluginTagsChange = useMarketplaceContext(v => v.handleFilterPluginTagsChange)
  23. const { searchBoxCanAnimate } = useSearchBoxAutoAnimate(searchBoxAutoAnimate)
  24. return (
  25. <SearchBox
  26. inputClassName={cn(
  27. 'mx-auto w-[640px] shrink-0 z-[0]',
  28. searchBoxCanAnimate && 'sticky top-3 z-[11]',
  29. !intersected && searchBoxCanAnimate && 'w-[508px] transition-[width] duration-300',
  30. )}
  31. search={searchPluginText}
  32. onSearchChange={handleSearchPluginTextChange}
  33. tags={filterPluginTags}
  34. onTagsChange={handleFilterPluginTagsChange}
  35. size='large'
  36. locale={locale}
  37. placeholder={t('plugin.searchPlugins')}
  38. />
  39. )
  40. }
  41. export default SearchBoxWrapper