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.

options-wrap.tsx 1.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. 'use client'
  2. import { useBoolean } from 'ahooks'
  3. import type { FC } from 'react'
  4. import React, { useEffect } from 'react'
  5. import { useTranslation } from 'react-i18next'
  6. import { RiEqualizer2Line } from '@remixicon/react'
  7. import cn from '@/utils/classnames'
  8. import { ChevronRight } from '@/app/components/base/icons/src/vender/line/arrows'
  9. const I18N_PREFIX = 'datasetCreation.stepOne.website'
  10. type Props = {
  11. className?: string
  12. children: React.ReactNode
  13. controlFoldOptions?: number
  14. }
  15. const OptionsWrap: FC<Props> = ({
  16. className = '',
  17. children,
  18. controlFoldOptions,
  19. }) => {
  20. const { t } = useTranslation()
  21. const [fold, {
  22. toggle: foldToggle,
  23. setTrue: foldHide,
  24. }] = useBoolean(false)
  25. useEffect(() => {
  26. if (controlFoldOptions)
  27. foldHide()
  28. }, [controlFoldOptions])
  29. return (
  30. <div className={cn(className, !fold ? 'mb-0' : 'mb-3')}>
  31. <div
  32. className='flex h-[26px] cursor-pointer select-none items-center gap-x-1 py-1'
  33. onClick={foldToggle}
  34. >
  35. <div className='flex grow items-center'>
  36. <RiEqualizer2Line className='mr-1 h-4 w-4 text-text-secondary' />
  37. <span className='text-[13px] font-semibold uppercase leading-[16px] text-text-secondary'>{t(`${I18N_PREFIX}.options`)}</span>
  38. </div>
  39. <ChevronRight className={cn(!fold && 'rotate-90', 'h-4 w-4 shrink-0 text-text-tertiary')} />
  40. </div>
  41. {!fold && (
  42. <div className='mb-4'>
  43. {children}
  44. </div>
  45. )}
  46. </div>
  47. )
  48. }
  49. export default React.memo(OptionsWrap)