File size: 1,575 Bytes
4138aee 967c830 4138aee 8e222fd 967c830 8e222fd 967c830 21cf732 8e222fd 21cf732 967c830 21cf732 967c830 8e222fd 4138aee 8e222fd |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
import { IconMap } from '@/constants/setting';
import Icon, { UserOutlined } from '@ant-design/icons';
import { IconComponentProps } from '@ant-design/icons/lib/components/Icon';
import { Avatar } from 'antd';
import { AvatarSize } from 'antd/es/avatar/AvatarContext';
const importAll = (requireContext: __WebpackModuleApi.RequireContext) => {
const list = requireContext.keys().map((key) => {
const name = key.replace(/\.\/(.*)\.\w+$/, '$1');
return { name, value: requireContext(key) };
});
return list;
};
let routeList: { name: string; value: string }[] = [];
try {
routeList = importAll(require.context('@/assets/svg', true, /\.svg$/));
} catch (error) {
console.warn(error);
routeList = [];
}
interface IProps extends IconComponentProps {
name: string;
width: string | number;
height?: string | number;
}
const SvgIcon = ({ name, width, height, ...restProps }: IProps) => {
const ListItem = routeList.find((item) => item.name === name);
return (
<Icon
component={() => (
<img src={ListItem?.value} alt="" width={width} height={height} />
)}
{...(restProps as any)}
/>
);
};
export const LlmIcon = ({
name,
height = 48,
width = 48,
size = 'large',
}: {
name: string;
height?: number;
width?: number;
size?: AvatarSize;
}) => {
const icon = IconMap[name as keyof typeof IconMap];
return icon ? (
<SvgIcon name={`llm/${icon}`} width={width} height={height}></SvgIcon>
) : (
<Avatar shape="square" size={size} icon={<UserOutlined />} />
);
};
export default SvgIcon;
|