index.tsx 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. 'use client'
  2. import { useTranslation } from 'react-i18next'
  3. import classNames from 'classnames'
  4. import s from './index.module.css'
  5. import { DataSet } from '@/models/datasets'
  6. const itemClass = `
  7. flex items-center w-[234px] h-12 px-3 rounded-xl bg-gray-25 border border-gray-100 cursor-pointer
  8. `
  9. const radioClass = `
  10. w-4 h-4 border-[2px] border-gray-200 rounded-full
  11. `
  12. type IPermissionsRadioProps = {
  13. value?: DataSet['permission']
  14. onChange: (v?: DataSet['permission']) => void
  15. }
  16. const PermissionsRadio = ({
  17. value,
  18. onChange
  19. }: IPermissionsRadioProps) => {
  20. const { t } = useTranslation()
  21. const options = [
  22. {
  23. key: 'only_me',
  24. text: t('datasetSettings.form.permissionsOnlyMe')
  25. },
  26. {
  27. key: 'all_team_members',
  28. text: t('datasetSettings.form.permissionsAllMember')
  29. }
  30. ]
  31. return (
  32. <div className={classNames(s.wrapper, 'flex justify-between w-full')}>
  33. {
  34. options.map(option => (
  35. <div
  36. key={option.key}
  37. className={classNames(
  38. option.key === value && s['item-active'],
  39. itemClass,
  40. s.item
  41. )}
  42. onClick={() => onChange(option.key as DataSet['permission'])}
  43. >
  44. <div className={classNames(s['user-icon'], 'mr-3')} />
  45. <div className='grow text-sm text-gray-900'>{option.text}</div>
  46. <div className={classNames(radioClass, s.radio)} />
  47. </div>
  48. ))
  49. }
  50. </div>
  51. )
  52. }
  53. export default PermissionsRadio