### What problem does this PR solve? Feat: Restore the button's background color #3221 ### Type of change - [x] New Feature (non-breaking change which adds functionality)
124 lines
3.7 KiB
TypeScript
124 lines
3.7 KiB
TypeScript
import SvgIcon from '@/components/svg-icon';
|
|
import { Card } from '@/components/ui/card';
|
|
import {
|
|
FormControl,
|
|
FormField,
|
|
FormItem,
|
|
FormLabel,
|
|
FormMessage,
|
|
} from '@/components/ui/form';
|
|
import {
|
|
Select,
|
|
SelectContent,
|
|
SelectItem,
|
|
SelectTrigger,
|
|
SelectValue,
|
|
} from '@/components/ui/select';
|
|
import { useTranslate } from '@/hooks/common-hooks';
|
|
import { useSelectParserList } from '@/hooks/user-setting-hooks';
|
|
import { Col, Divider, Empty, Row, Typography } from 'antd';
|
|
import DOMPurify from 'dompurify';
|
|
import camelCase from 'lodash/camelCase';
|
|
import { useMemo } from 'react';
|
|
import { useFormContext } from 'react-hook-form';
|
|
import styles from './index.less';
|
|
import { ImageMap } from './utils';
|
|
|
|
const { Title, Text } = Typography;
|
|
|
|
const CategoryPanel = ({ chunkMethod }: { chunkMethod: string }) => {
|
|
const parserList = useSelectParserList();
|
|
const { t } = useTranslate('knowledgeConfiguration');
|
|
|
|
const item = useMemo(() => {
|
|
const item = parserList.find((x) => x.value === chunkMethod);
|
|
if (item) {
|
|
return {
|
|
title: item.label,
|
|
description: t(camelCase(item.value)),
|
|
};
|
|
}
|
|
return { title: '', description: '' };
|
|
}, [parserList, chunkMethod, t]);
|
|
|
|
const imageList = useMemo(() => {
|
|
if (chunkMethod in ImageMap) {
|
|
return ImageMap[chunkMethod as keyof typeof ImageMap];
|
|
}
|
|
return [];
|
|
}, [chunkMethod]);
|
|
|
|
return (
|
|
<section className={styles.categoryPanelWrapper}>
|
|
{imageList.length > 0 ? (
|
|
<>
|
|
<Title level={5} className={styles.topTitle}>
|
|
{`"${item.title}" ${t('methodTitle')}`}
|
|
</Title>
|
|
<p
|
|
dangerouslySetInnerHTML={{
|
|
__html: DOMPurify.sanitize(item.description),
|
|
}}
|
|
></p>
|
|
<Title level={5}>{`"${item.title}" ${t('methodExamples')}`}</Title>
|
|
<Text>{t('methodExamplesDescription')}</Text>
|
|
<Row gutter={[10, 10]} className={styles.imageRow}>
|
|
{imageList.map((x) => (
|
|
<Col span={12} key={x}>
|
|
<SvgIcon
|
|
name={x}
|
|
width={'100%'}
|
|
className={styles.image}
|
|
></SvgIcon>
|
|
</Col>
|
|
))}
|
|
</Row>
|
|
<Title level={5}>
|
|
{item.title} {t('dialogueExamplesTitle')}
|
|
</Title>
|
|
<Divider></Divider>
|
|
</>
|
|
) : (
|
|
<Empty description={''} image={null}>
|
|
<p>{t('methodEmpty')}</p>
|
|
<SvgIcon name={'chunk-method/chunk-empty'} width={'100%'}></SvgIcon>
|
|
</Empty>
|
|
)}
|
|
</section>
|
|
);
|
|
};
|
|
|
|
export default function ChunkMethodCard() {
|
|
const { t } = useTranslate('knowledgeConfiguration');
|
|
const form = useFormContext();
|
|
|
|
return (
|
|
<Card className="border-0 p-6 mb-8 flex">
|
|
<div className="w-2/5">
|
|
<FormField
|
|
control={form.control}
|
|
name="parser_id"
|
|
render={({ field }) => (
|
|
<FormItem>
|
|
<FormLabel>{t('chunkMethod')}</FormLabel>
|
|
<Select onValueChange={field.onChange} defaultValue={field.value}>
|
|
<FormControl>
|
|
<SelectTrigger>
|
|
<SelectValue placeholder="Select a verified email to display" />
|
|
</SelectTrigger>
|
|
</FormControl>
|
|
<SelectContent>
|
|
<SelectItem value="m@example.com">m@example.com</SelectItem>
|
|
<SelectItem value="m@google.com">m@google.com</SelectItem>
|
|
<SelectItem value="m@support.com">m@support.com</SelectItem>
|
|
</SelectContent>
|
|
</Select>
|
|
<FormMessage />
|
|
</FormItem>
|
|
)}
|
|
/>
|
|
</div>
|
|
<CategoryPanel chunkMethod=""></CategoryPanel>
|
|
</Card>
|
|
);
|
|
}
|