1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- import React, { useCallback, useMemo, useState } from 'react'
- import produce from 'immer'
- import { useTranslation } from 'react-i18next'
- import { RiCloseLine } from '@remixicon/react'
- import FileUploadSetting from '@/app/components/workflow/nodes/_base/components/file-upload-setting'
- import Button from '@/app/components/base/button'
- import { useFeatures, useFeaturesStore } from '@/app/components/base/features/hooks'
- import type { OnFeaturesChange } from '@/app/components/base/features/types'
- import type { UploadFileSetting } from '@/app/components/workflow/types'
- import { SupportUploadFileTypes } from '@/app/components/workflow/types'
- import { FILE_EXTS } from '@/app/components/base/prompt-editor/constants'
- type SettingContentProps = {
- imageUpload?: boolean
- onClose: () => void
- onChange?: OnFeaturesChange
- }
- const SettingContent = ({
- imageUpload,
- onClose,
- onChange,
- }: SettingContentProps) => {
- const { t } = useTranslation()
- const featuresStore = useFeaturesStore()
- const file = useFeatures(state => state.features.file)
- const fileSettingPayload = useMemo(() => {
- return {
- allowed_file_upload_methods: file?.allowed_file_upload_methods || ['local_file', 'remote_url'],
- allowed_file_types: file?.allowed_file_types || [SupportUploadFileTypes.image],
- allowed_file_extensions: file?.allowed_file_extensions || FILE_EXTS[SupportUploadFileTypes.image],
- max_length: file?.number_limits || 3,
- } as UploadFileSetting
- }, [file])
- const [tempPayload, setTempPayload] = useState<UploadFileSetting>(fileSettingPayload)
- const handleChange = useCallback(() => {
- const {
- features,
- setFeatures,
- } = featuresStore!.getState()
- const newFeatures = produce(features, (draft) => {
- draft.file = {
- ...draft.file,
- allowed_file_upload_methods: tempPayload.allowed_file_upload_methods,
- number_limits: tempPayload.max_length,
- allowed_file_types: tempPayload.allowed_file_types,
- allowed_file_extensions: tempPayload.allowed_file_extensions,
- }
- })
- setFeatures(newFeatures)
- if (onChange)
- onChange()
- }, [featuresStore, onChange, tempPayload])
- return (
- <>
- <div className='mb-4 flex items-center justify-between'>
- <div className='text-text-primary system-xl-semibold'>{!imageUpload ? t('appDebug.feature.fileUpload.modalTitle') : t('appDebug.feature.imageUpload.modalTitle')}</div>
- <div className='p-1 cursor-pointer' onClick={onClose}><RiCloseLine className='w-4 h-4 text-text-tertiary'/></div>
- </div>
- <FileUploadSetting
- isMultiple
- inFeaturePanel
- hideSupportFileType={imageUpload}
- payload={tempPayload}
- onChange={(p: UploadFileSetting) => setTempPayload(p)}
- />
- <div className='mt-4 flex items-center justify-end'>
- <Button
- onClick={onClose}
- className='mr-2'
- >
- {t('common.operation.cancel')}
- </Button>
- <Button
- variant='primary'
- onClick={handleChange}
- disabled={tempPayload.allowed_file_types.length === 0}
- >
- {t('common.operation.save')}
- </Button>
- </div>
- </>
- )
- }
- export default React.memo(SettingContent)
|