|
|
|
@@ -291,74 +291,76 @@ const Answer: FC<IAnswerProps> = ({ item, feedbackDisabled = false, isHideFeedba |
|
|
|
</div> |
|
|
|
} |
|
|
|
</div> |
|
|
|
<div className={`${s.answerWrap} ${showEdit ? 'w-full' : ''}`}> |
|
|
|
<div className={`${s.answer} relative text-sm text-gray-900`}> |
|
|
|
<div className={'ml-2 py-3 px-4 bg-gray-100 rounded-tr-2xl rounded-b-2xl'}> |
|
|
|
{item.isOpeningStatement && ( |
|
|
|
<div className='flex items-center mb-1 gap-1'> |
|
|
|
<OpeningStatementIcon /> |
|
|
|
<div className='text-xs text-gray-500'>{t('appDebug.openingStatement.title')}</div> |
|
|
|
</div> |
|
|
|
)} |
|
|
|
{(isResponsing && !content) ? ( |
|
|
|
<div className='flex items-center justify-center w-6 h-5'> |
|
|
|
<LoadingAnim type='text' /> |
|
|
|
</div> |
|
|
|
) : ( |
|
|
|
<Markdown content={content} /> |
|
|
|
)} |
|
|
|
{!showEdit |
|
|
|
? (annotation?.content |
|
|
|
&& <> |
|
|
|
<Divider name={annotation?.account?.name || userProfile?.name} /> |
|
|
|
{annotation.content} |
|
|
|
</>) |
|
|
|
: <> |
|
|
|
<Divider name={annotation?.account?.name || userProfile?.name} /> |
|
|
|
<AutoHeightTextarea |
|
|
|
placeholder={t('appLog.detail.operation.annotationPlaceholder') as string} |
|
|
|
value={inputValue} |
|
|
|
onChange={e => setInputValue(e.target.value)} |
|
|
|
minHeight={58} |
|
|
|
className={`${cn(s.textArea)} !py-2 resize-none block w-full !px-3 bg-gray-50 border border-gray-200 rounded-md shadow-sm focus:outline-none focus:ring-blue-500 focus:border-blue-500 sm:text-sm text-gray-700 tracking-[0.2px]`} |
|
|
|
/> |
|
|
|
<div className="mt-2 flex flex-row"> |
|
|
|
<Button |
|
|
|
type='primary' |
|
|
|
className='mr-2' |
|
|
|
loading={loading} |
|
|
|
onClick={async () => { |
|
|
|
if (!inputValue) |
|
|
|
return |
|
|
|
setLoading(true) |
|
|
|
const res = await onSubmitAnnotation?.(id, inputValue) |
|
|
|
if (res) |
|
|
|
setAnnotation({ ...annotation, content: inputValue } as any) |
|
|
|
setLoading(false) |
|
|
|
setShowEdit(false) |
|
|
|
}}>{t('common.operation.confirm')}</Button> |
|
|
|
<Button |
|
|
|
onClick={() => { |
|
|
|
setInputValue(annotation?.content ?? '') |
|
|
|
setShowEdit(false) |
|
|
|
}}>{t('common.operation.cancel')}</Button> |
|
|
|
<div className={s.answerWrapWrap}> |
|
|
|
<div className={`${s.answerWrap} ${showEdit ? 'w-full' : ''}`}> |
|
|
|
<div className={`${s.answer} relative text-sm text-gray-900`}> |
|
|
|
<div className={'ml-2 py-3 px-4 bg-gray-100 rounded-tr-2xl rounded-b-2xl'}> |
|
|
|
{item.isOpeningStatement && ( |
|
|
|
<div className='flex items-center mb-1 gap-1'> |
|
|
|
<OpeningStatementIcon /> |
|
|
|
<div className='text-xs text-gray-500'>{t('appDebug.openingStatement.title')}</div> |
|
|
|
</div> |
|
|
|
</> |
|
|
|
} |
|
|
|
</div> |
|
|
|
<div className='absolute top-[-14px] right-[-14px] flex flex-row justify-end gap-1'> |
|
|
|
<CopyBtn |
|
|
|
value={content} |
|
|
|
className={cn(s.copyBtn, 'mr-1')} |
|
|
|
/> |
|
|
|
{!feedbackDisabled && !item.feedbackDisabled && renderItemOperation(displayScene !== 'console')} |
|
|
|
{/* Admin feedback is displayed only in the background. */} |
|
|
|
{!feedbackDisabled && renderFeedbackRating(localAdminFeedback?.rating, false, false)} |
|
|
|
{/* User feedback must be displayed */} |
|
|
|
{!feedbackDisabled && renderFeedbackRating(feedback?.rating, !isHideFeedbackEdit, displayScene !== 'console')} |
|
|
|
)} |
|
|
|
{(isResponsing && !content) ? ( |
|
|
|
<div className='flex items-center justify-center w-6 h-5'> |
|
|
|
<LoadingAnim type='text' /> |
|
|
|
</div> |
|
|
|
) : ( |
|
|
|
<Markdown content={content} /> |
|
|
|
)} |
|
|
|
{!showEdit |
|
|
|
? (annotation?.content |
|
|
|
&& <> |
|
|
|
<Divider name={annotation?.account?.name || userProfile?.name} /> |
|
|
|
{annotation.content} |
|
|
|
</>) |
|
|
|
: <> |
|
|
|
<Divider name={annotation?.account?.name || userProfile?.name} /> |
|
|
|
<AutoHeightTextarea |
|
|
|
placeholder={t('appLog.detail.operation.annotationPlaceholder') as string} |
|
|
|
value={inputValue} |
|
|
|
onChange={e => setInputValue(e.target.value)} |
|
|
|
minHeight={58} |
|
|
|
className={`${cn(s.textArea)} !py-2 resize-none block w-full !px-3 bg-gray-50 border border-gray-200 rounded-md shadow-sm focus:outline-none focus:ring-blue-500 focus:border-blue-500 sm:text-sm text-gray-700 tracking-[0.2px]`} |
|
|
|
/> |
|
|
|
<div className="mt-2 flex flex-row"> |
|
|
|
<Button |
|
|
|
type='primary' |
|
|
|
className='mr-2' |
|
|
|
loading={loading} |
|
|
|
onClick={async () => { |
|
|
|
if (!inputValue) |
|
|
|
return |
|
|
|
setLoading(true) |
|
|
|
const res = await onSubmitAnnotation?.(id, inputValue) |
|
|
|
if (res) |
|
|
|
setAnnotation({ ...annotation, content: inputValue } as any) |
|
|
|
setLoading(false) |
|
|
|
setShowEdit(false) |
|
|
|
}}>{t('common.operation.confirm')}</Button> |
|
|
|
<Button |
|
|
|
onClick={() => { |
|
|
|
setInputValue(annotation?.content ?? '') |
|
|
|
setShowEdit(false) |
|
|
|
}}>{t('common.operation.cancel')}</Button> |
|
|
|
</div> |
|
|
|
</> |
|
|
|
} |
|
|
|
</div> |
|
|
|
<div className='absolute top-[-14px] right-[-14px] flex flex-row justify-end gap-1'> |
|
|
|
<CopyBtn |
|
|
|
value={content} |
|
|
|
className={cn(s.copyBtn, 'mr-1')} |
|
|
|
/> |
|
|
|
{!feedbackDisabled && !item.feedbackDisabled && renderItemOperation(displayScene !== 'console')} |
|
|
|
{/* Admin feedback is displayed only in the background. */} |
|
|
|
{!feedbackDisabled && renderFeedbackRating(localAdminFeedback?.rating, false, false)} |
|
|
|
{/* User feedback must be displayed */} |
|
|
|
{!feedbackDisabled && renderFeedbackRating(feedback?.rating, !isHideFeedbackEdit, displayScene !== 'console')} |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
{more && <MoreInfo more={more} isQuestion={false} />} |
|
|
|
</div> |
|
|
|
{more && <MoreInfo more={more} isQuestion={false} />} |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
@@ -372,7 +374,7 @@ const Question: FC<IQuestionProps> = ({ id, content, more, useCurrentUserAvatar |
|
|
|
const userName = userProfile?.name |
|
|
|
return ( |
|
|
|
<div className='flex items-start justify-end' key={id}> |
|
|
|
<div> |
|
|
|
<div className={s.questionWrapWrap}> |
|
|
|
<div className={`${s.question} relative text-sm text-gray-900`}> |
|
|
|
<div |
|
|
|
className={'mr-2 py-3 px-4 bg-blue-500 rounded-tl-2xl rounded-b-2xl'} |