123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180 |
- import { useState } from 'react'
- import { useTranslation } from 'react-i18next'
- import { useEmbeddedChatbotContext } from '../context'
- import { useThemeContext } from '../theme/theme-context'
- import { CssTransform } from '../theme/utils'
- import Form from './form'
- import cn from '@/utils/classnames'
- import Button from '@/app/components/base/button'
- import AppIcon from '@/app/components/base/app-icon'
- import { MessageDotsCircle } from '@/app/components/base/icons/src/vender/solid/communication'
- import { Edit02 } from '@/app/components/base/icons/src/vender/line/general'
- import { Star06 } from '@/app/components/base/icons/src/vender/solid/shapes'
- import LogoSite from '@/app/components/base/logo/logo-site'
- const ConfigPanel = () => {
- const { t } = useTranslation()
- const {
- appData,
- inputsForms,
- handleStartChat,
- showConfigPanelBeforeChat,
- isMobile,
- } = useEmbeddedChatbotContext()
- const [collapsed, setCollapsed] = useState(true)
- const customConfig = appData?.custom_config
- const site = appData?.site
- const themeBuilder = useThemeContext()
- return (
- <div className='flex flex-col max-h-[80%] w-full max-w-[720px]'>
- <div
- className={cn(
- 'grow rounded-xl overflow-y-auto',
- showConfigPanelBeforeChat && 'border-[0.5px] border-gray-100 shadow-lg',
- !showConfigPanelBeforeChat && collapsed && 'border border-indigo-100',
- !showConfigPanelBeforeChat && !collapsed && 'border-[0.5px] border-gray-100 shadow-lg',
- )}
- >
- <div
- style={CssTransform(themeBuilder.theme?.roundedBackgroundColorStyle ?? '')}
- className={`
- flex flex-wrap px-6 py-4 rounded-t-xl bg-indigo-25
- ${isMobile && '!px-4 !py-3'}
- `}
- >
- {
- showConfigPanelBeforeChat && (
- <>
- <div className='flex items-center h-8 text-2xl font-semibold text-gray-800'>
- <AppIcon
- iconType={appData?.site.icon_type}
- icon={appData?.site.icon}
- imageUrl={appData?.site.icon_url}
- background='transparent'
- size='small'
- className="mr-2"
- />
- {appData?.site.title}
- </div>
- {
- appData?.site.description && (
- <div className='mt-2 w-full text-sm text-gray-500'>
- {appData?.site.description}
- </div>
- )
- }
- </>
- )
- }
- {
- !showConfigPanelBeforeChat && collapsed && (
- <>
- <Star06 className='mr-1 mt-1 w-4 h-4 text-indigo-600' />
- <div className='grow py-[3px] text-[13px] text-indigo-600 leading-[18px] font-medium'>
- {t('share.chat.configStatusDes')}
- </div>
- <Button
- styleCss={CssTransform(themeBuilder.theme?.backgroundButtonDefaultColorStyle ?? '')}
- variant='secondary-accent'
- size='small'
- className='shrink-0'
- onClick={() => setCollapsed(false)}
- >
- <Edit02 className='mr-1 w-3 h-3' />
- {t('common.operation.edit')}
- </Button>
- </>
- )
- }
- {
- !showConfigPanelBeforeChat && !collapsed && (
- <>
- <Star06 className='mr-1 mt-1 w-4 h-4 text-indigo-600' />
- <div className='grow py-[3px] text-[13px] text-indigo-600 leading-[18px] font-medium'>
- {t('share.chat.privatePromptConfigTitle')}
- </div>
- </>
- )
- }
- </div>
- {
- !collapsed && !showConfigPanelBeforeChat && (
- <div className='p-6 rounded-b-xl'>
- <Form />
- <div className={cn('pl-[136px] flex items-center', isMobile && '!pl-0')}>
- <Button
- styleCss={CssTransform(themeBuilder.theme?.backgroundButtonDefaultColorStyle ?? '')}
- variant='primary'
- className='mr-2'
- onClick={() => {
- setCollapsed(true)
- handleStartChat()
- }}
- >
- {t('common.operation.save')}
- </Button>
- <Button
- onClick={() => setCollapsed(true)}
- >
- {t('common.operation.cancel')}
- </Button>
- </div>
- </div>
- )
- }
- {
- showConfigPanelBeforeChat && (
- <div className='p-6 rounded-b-xl'>
- <Form />
- <Button
- styleCss={CssTransform(themeBuilder.theme?.backgroundButtonDefaultColorStyle ?? '')}
- className={cn(inputsForms.length && !isMobile && 'ml-[136px]')}
- variant='primary'
- size='large'
- onClick={handleStartChat}
- >
- <MessageDotsCircle className='mr-2 w-4 h-4 text-white' />
- {t('share.chat.startChat')}
- </Button>
- </div>
- )
- }
- </div>
- {
- showConfigPanelBeforeChat && (site || customConfig) && (
- <div className='mt-4 flex flex-wrap justify-between items-center py-2 text-xs text-gray-400'>
- {site?.privacy_policy
- ? <div className={cn(isMobile && 'mb-2 w-full text-center')}>{t('share.chat.privacyPolicyLeft')}
- <a
- className='text-gray-500 px-1'
- href={site?.privacy_policy}
- target='_blank' rel='noopener noreferrer'>{t('share.chat.privacyPolicyMiddle')}</a>
- {t('share.chat.privacyPolicyRight')}
- </div>
- : <div>
- </div>}
- {
- customConfig?.remove_webapp_brand
- ? null
- : (
- <div className={cn('flex items-center justify-end', isMobile && 'w-full')}>
- <div className='flex items-center pr-3 space-x-3'>
- <span className='uppercase'>{t('share.chat.poweredBy')}</span>
- {
- customConfig?.replace_webapp_logo
- ? <img src={customConfig?.replace_webapp_logo} alt='logo' className='block w-auto h-5' />
- : <LogoSite className='!h-5' />
- }
- </div>
- </div>
- )
- }
- </div>
- )
- }
- </div>
- )
- }
- export default ConfigPanel
|