You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

index.tsx 3.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. import React from 'react'
  2. import { useTranslation } from 'react-i18next'
  3. import { Message3Fill } from '@/app/components/base/icons/src/public/other'
  4. import Button from '@/app/components/base/button'
  5. import Divider from '@/app/components/base/divider'
  6. import InputsFormContent from '@/app/components/base/chat/embedded-chatbot/inputs-form/content'
  7. import { useEmbeddedChatbotContext } from '../context'
  8. import cn from '@/utils/classnames'
  9. type Props = {
  10. collapsed: boolean
  11. setCollapsed: (collapsed: boolean) => void
  12. }
  13. const InputsFormNode = ({
  14. collapsed,
  15. setCollapsed,
  16. }: Props) => {
  17. const { t } = useTranslation()
  18. const {
  19. isMobile,
  20. currentConversationId,
  21. themeBuilder,
  22. handleStartChat,
  23. allInputsHidden,
  24. inputsForms,
  25. } = useEmbeddedChatbotContext()
  26. if (allInputsHidden || inputsForms.length === 0)
  27. return null
  28. return (
  29. <div className={cn('mb-6 flex flex-col items-center px-4 pt-6', isMobile && 'mb-4 pt-4')}>
  30. <div className={cn(
  31. 'w-full max-w-[672px] rounded-2xl border-[0.5px] border-components-panel-border bg-components-panel-bg shadow-md',
  32. collapsed && 'border border-components-card-border bg-components-card-bg shadow-none',
  33. )}>
  34. <div className={cn(
  35. 'flex items-center gap-3 rounded-t-2xl px-6 py-4',
  36. !collapsed && 'border-b border-divider-subtle',
  37. isMobile && 'px-4 py-3',
  38. )}>
  39. <Message3Fill className='h-6 w-6 shrink-0' />
  40. <div className='system-xl-semibold grow text-text-secondary'>{t('share.chat.chatSettingsTitle')}</div>
  41. {collapsed && (
  42. <Button className='uppercase text-text-tertiary' size='small' variant='ghost' onClick={() => setCollapsed(false)}>{t('common.operation.edit')}</Button>
  43. )}
  44. {!collapsed && currentConversationId && (
  45. <Button className='uppercase text-text-tertiary' size='small' variant='ghost' onClick={() => setCollapsed(true)}>{t('common.operation.close')}</Button>
  46. )}
  47. </div>
  48. {!collapsed && (
  49. <div className={cn('p-6', isMobile && 'p-4')}>
  50. <InputsFormContent />
  51. </div>
  52. )}
  53. {!collapsed && !currentConversationId && (
  54. <div className={cn('p-6', isMobile && 'p-4')}>
  55. <Button
  56. variant='primary'
  57. className='w-full'
  58. onClick={() => handleStartChat(() => setCollapsed(true))}
  59. style={
  60. themeBuilder?.theme
  61. ? {
  62. backgroundColor: themeBuilder?.theme.primaryColor,
  63. }
  64. : {}
  65. }
  66. >{t('share.chat.startChat')}</Button>
  67. </div>
  68. )}
  69. </div>
  70. {collapsed && (
  71. <div className='flex w-full max-w-[720px] items-center py-4'>
  72. <Divider bgStyle='gradient' className='h-px basis-1/2 rotate-180' />
  73. <Divider bgStyle='gradient' className='h-px basis-1/2' />
  74. </div>
  75. )}
  76. </div>
  77. )
  78. }
  79. export default InputsFormNode