config-document.tsx 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. 'use client'
  2. import type { FC } from 'react'
  3. import React, { useCallback } from 'react'
  4. import { useTranslation } from 'react-i18next'
  5. import produce from 'immer'
  6. import { useContext } from 'use-context-selector'
  7. import { Document } from '@/app/components/base/icons/src/vender/features'
  8. import Tooltip from '@/app/components/base/tooltip'
  9. import ConfigContext from '@/context/debug-configuration'
  10. import { SupportUploadFileTypes } from '@/app/components/workflow/types'
  11. import { useFeatures, useFeaturesStore } from '@/app/components/base/features/hooks'
  12. import Switch from '@/app/components/base/switch'
  13. const ConfigDocument: FC = () => {
  14. const { t } = useTranslation()
  15. const file = useFeatures(s => s.features.file)
  16. const featuresStore = useFeaturesStore()
  17. const { isShowDocumentConfig } = useContext(ConfigContext)
  18. const isDocumentEnabled = file?.allowed_file_types?.includes(SupportUploadFileTypes.document) ?? false
  19. const handleChange = useCallback((value: boolean) => {
  20. const {
  21. features,
  22. setFeatures,
  23. } = featuresStore!.getState()
  24. const newFeatures = produce(features, (draft) => {
  25. if (value) {
  26. draft.file!.allowed_file_types = Array.from(new Set([
  27. ...(draft.file?.allowed_file_types || []),
  28. SupportUploadFileTypes.document,
  29. ]))
  30. }
  31. else {
  32. draft.file!.allowed_file_types = draft.file!.allowed_file_types?.filter(
  33. type => type !== SupportUploadFileTypes.document,
  34. )
  35. }
  36. if (draft.file)
  37. draft.file.enabled = (draft.file.allowed_file_types?.length ?? 0) > 0
  38. })
  39. setFeatures(newFeatures)
  40. }, [featuresStore])
  41. if (!isShowDocumentConfig)
  42. return null
  43. return (
  44. <div className='mt-2 flex items-center gap-2 p-2 rounded-xl border-t-[0.5px] border-l-[0.5px] bg-background-section-burn'>
  45. <div className='shrink-0 p-1'>
  46. <div className='p-1 rounded-lg border-[0.5px] border-divider-subtle shadow-xs bg-util-colors-indigo-indigo-600'>
  47. <Document className='w-4 h-4 text-text-primary-on-surface' />
  48. </div>
  49. </div>
  50. <div className='grow flex items-center'>
  51. <div className='mr-1 text-text-secondary system-sm-semibold'>{t('appDebug.feature.documentUpload.title')}</div>
  52. <Tooltip
  53. popupContent={
  54. <div className='w-[180px]' >
  55. {t('appDebug.feature.documentUpload.description')}
  56. </div>
  57. }
  58. />
  59. </div>
  60. <div className='shrink-0 flex items-center'>
  61. <div className='ml-1 mr-3 w-[1px] h-3.5 bg-divider-subtle'></div>
  62. <Switch
  63. defaultValue={isDocumentEnabled}
  64. onChange={handleChange}
  65. size='md'
  66. />
  67. </div>
  68. </div>
  69. )
  70. }
  71. export default React.memo(ConfigDocument)