import { useState } from 'react' import { useTranslation } from 'react-i18next' import cn from 'classnames' import { useEmbeddedChatbotContext } from '../context' import Form from './form' 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 { FootLogo } from '@/app/components/share/chat/welcome/massive-component' 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 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 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 icon={appData?.site.icon} background='transparent' size='small' /> {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 className='shrink-0 px-2 py-0 h-6 bg-white text-xs font-medium text-primary-600 rounded-md' 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 type='primary' className='mr-2 text-sm font-medium' onClick={() => { setCollapsed(true) handleStartChat() }} > {t('common.operation.save')} </Button> <Button className='text-sm font-medium' onClick={() => setCollapsed(true)} > {t('common.operation.cancel')} </Button> </div> </div> ) } { showConfigPanelBeforeChat && ( <div className='p-6 rounded-b-xl'> <Form /> <Button className={cn('px-4 py-0 h-9', inputsForms.length && !isMobile && 'ml-[136px]')} type='primary' 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.powerBy')}</span> { customConfig?.replace_webapp_logo ? <img src={customConfig?.replace_webapp_logo} alt='logo' className='block w-auto h-5' /> : <FootLogo /> } </div> </div> ) } </div> ) } </div> ) } export default ConfigPanel