123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- import {
- memo,
- useMemo,
- } from 'react'
- import { useTranslation } from 'react-i18next'
- import type { OnFeaturesChange } from '../types'
- import { useFeatures } from '../hooks'
- import FileUpload from './file-upload'
- import OpeningStatement from './opening-statement'
- import type { OpeningStatementProps } from './opening-statement'
- import SuggestedQuestionsAfterAnswer from './suggested-questions-after-answer'
- import TextToSpeech from './text-to-speech'
- import SpeechToText from './speech-to-text'
- import Citation from './citation'
- import Moderation from './moderation'
- export type FeaturePanelProps = {
- onChange?: OnFeaturesChange
- openingStatementProps: OpeningStatementProps
- disabled?: boolean
- }
- const FeaturePanel = ({
- onChange,
- openingStatementProps,
- disabled,
- }: FeaturePanelProps) => {
- const { t } = useTranslation()
- const features = useFeatures(s => s.features)
- const showAdvanceFeature = useMemo(() => {
- return features.opening?.enabled || features.suggested?.enabled || features.speech2text?.enabled || features.text2speech?.enabled || features.citation?.enabled
- }, [features])
- const showToolFeature = useMemo(() => {
- return features.moderation?.enabled
- }, [features])
- return (
- <div className='space-y-3'>
- <FileUpload
- onChange={onChange}
- disabled={disabled}
- />
- {
- showAdvanceFeature && (
- <div>
- <div className='flex items-center'>
- <div className='shrink-0 text-xs font-semibold text-gray-500'>
- {t('appDebug.feature.groupChat.title')}
- </div>
- <div
- className='grow ml-3 h-[1px]'
- style={{ background: 'linear-gradient(270deg, rgba(243, 244, 246, 0) 0%, #F3F4F6 100%)' }}
- ></div>
- </div>
- <div className='py-2 space-y-2'>
- {
- features.opening?.enabled && (
- <OpeningStatement
- {...openingStatementProps}
- onChange={onChange}
- readonly={disabled}
- />
- )
- }
- {
- features.suggested?.enabled && (
- <SuggestedQuestionsAfterAnswer />
- )
- }
- {
- features.text2speech?.enabled && (
- <TextToSpeech onChange={onChange} disabled={disabled} />
- )
- }
- {
- features.speech2text?.enabled && (
- <SpeechToText />
- )
- }
- {
- features.citation?.enabled && (
- <Citation />
- )
- }
- </div>
- </div>
- )
- }
- {
- showToolFeature && (
- <div>
- <div className='flex items-center'>
- <div className='shrink-0 text-xs font-semibold text-gray-500'>
- {t('appDebug.feature.groupChat.title')}
- </div>
- <div
- className='grow ml-3 h-[1px]'
- style={{ background: 'linear-gradient(270deg, rgba(243, 244, 246, 0) 0%, #F3F4F6 100%)' }}
- ></div>
- </div>
- <div className='py-2 space-y-2'>
- {
- features.moderation?.enabled && (
- <Moderation onChange={onChange} disabled={disabled} />
- )
- }
- </div>
- </div>
- )
- }
- </div>
- )
- }
- export default memo(FeaturePanel)
|