| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181 | 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
 |