123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- 'use client'
- import type { FC } from 'react'
- import React from 'react'
- import { useTranslation } from 'react-i18next'
- import { ClipboardDocumentIcon, HandThumbDownIcon, HandThumbUpIcon } from '@heroicons/react/24/outline'
- import copy from 'copy-to-clipboard'
- import type { FeedbackType } from '@/app/components/base/chat/chat/type'
- import Button from '@/app/components/base/button'
- import Toast from '@/app/components/base/toast'
- import Tooltip from '@/app/components/base/tooltip'
- type IResultHeaderProps = {
- result: string
- showFeedback: boolean
- feedback: FeedbackType
- onFeedback: (feedback: FeedbackType) => void
- }
- const Header: FC<IResultHeaderProps> = ({
- feedback,
- showFeedback,
- onFeedback,
- result,
- }) => {
- const { t } = useTranslation()
- return (
- <div className='flex w-full items-center justify-between '>
- <div className='text-2xl font-normal leading-4 text-gray-800'>{t('share.generation.resultTitle')}</div>
- <div className='flex items-center space-x-2'>
- <Button
- className='h-7 p-[2px] pr-2'
- onClick={() => {
- copy(result)
- Toast.notify({ type: 'success', message: 'copied' })
- }}
- >
- <>
- <ClipboardDocumentIcon className='mr-1 h-3 w-4 text-gray-500' />
- <span className='text-xs leading-3 text-gray-500'>{t('share.generation.copy')}</span>
- </>
- </Button>
- {showFeedback && feedback.rating && feedback.rating === 'like' && (
- <Tooltip
- popupContent="Undo Great Rating"
- >
- <div
- onClick={() => {
- onFeedback({
- rating: null,
- })
- }}
- className='flex h-7 w-7 cursor-pointer items-center justify-center rounded-md border border-primary-200 bg-primary-100 !text-primary-600 hover:border-primary-300 hover:bg-primary-200'>
- <HandThumbUpIcon width={16} height={16} />
- </div>
- </Tooltip>
- )}
- {showFeedback && feedback.rating && feedback.rating === 'dislike' && (
- <Tooltip
- popupContent="Undo Undesirable Response"
- >
- <div
- onClick={() => {
- onFeedback({
- rating: null,
- })
- }}
- className='flex h-7 w-7 cursor-pointer items-center justify-center rounded-md border border-red-200 bg-red-100 !text-red-600 hover:border-red-300 hover:bg-red-200'>
- <HandThumbDownIcon width={16} height={16} />
- </div>
- </Tooltip>
- )}
- {showFeedback && !feedback.rating && (
- <div className='flex space-x-1 rounded-lg border border-gray-200 p-[1px]'>
- <Tooltip
- popupContent="Great Rating"
- needsDelay={false}
- >
- <div
- onClick={() => {
- onFeedback({
- rating: 'like',
- })
- }}
- className='flex h-6 w-6 cursor-pointer items-center justify-center rounded-md hover:bg-gray-100'>
- <HandThumbUpIcon width={16} height={16} />
- </div>
- </Tooltip>
- <Tooltip
- popupContent="Undesirable Response"
- needsDelay={false}
- >
- <div
- onClick={() => {
- onFeedback({
- rating: 'dislike',
- })
- }}
- className='flex h-6 w-6 cursor-pointer items-center justify-center rounded-md hover:bg-gray-100'>
- <HandThumbDownIcon width={16} height={16} />
- </div>
- </Tooltip>
- </div>
- )}
- </div>
- </div>
- )
- }
- export default React.memo(Header)
|