lobe-chat
50 строк · 1.3 Кб
1'use client';
2
3import { Icon } from '@lobehub/ui';
4import { Skeleton } from 'antd';
5import { css, cx } from 'antd-style';
6import { ChevronDown, ChevronUp } from 'lucide-react';
7import dynamic from 'next/dynamic';
8import { memo, useState } from 'react';
9import { useTranslation } from 'react-i18next';
10import { Flexbox } from 'react-layout-kit';
11
12const container = css`
13pre.shiki {
14padding: 8px !important;
15}
16`;
17
18const Highlighter = dynamic(() => import('@lobehub/ui/es/Highlighter'), {
19loading: () => <Skeleton avatar={false} title={false} />,
20ssr: false,
21});
22
23const Description = memo<{ message: string; status: number }>(({ message, status }) => {
24const { t } = useTranslation('error');
25const [show, setShow] = useState(false);
26return (
27<Flexbox gap={8}>
28{t(`response.${status}` as any)}
29<Flexbox
30gap={4}
31horizontal
32onClick={() => {
33setShow(!show);
34}}
35style={{ cursor: 'pointer', fontSize: 12 }}
36>
37{t('fetchErrorDetail')} <Icon icon={show ? ChevronUp : ChevronDown} />
38</Flexbox>
39<Highlighter
40className={cx(container)}
41language={'text'}
42style={{ display: show ? undefined : 'none', maxHeight: 80 }}
43>
44{message}
45</Highlighter>
46</Flexbox>
47);
48});
49
50export default Description;
51