You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

search-box-wrapper.tsx 1.5KB

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. wrapperClassName={cn(
  27. 'z-[0] mx-auto w-[640px] shrink-0',
  28. searchBoxCanAnimate && 'sticky top-3 z-[11]',
  29. !intersected && searchBoxCanAnimate && 'w-[508px] transition-[width] duration-300',
  30. )}
  31. inputClassName='w-full'
  32. search={searchPluginText}
  33. onSearchChange={handleSearchPluginTextChange}
  34. tags={filterPluginTags}
  35. onTagsChange={handleFilterPluginTagsChange}
  36. size='large'
  37. locale={locale}
  38. placeholder={t('plugin.searchPlugins')}
  39. />
  40. )
  41. }
  42. export default SearchBoxWrapper