35 lines
689 B
TypeScript
35 lines
689 B
TypeScript
|
|
import {
|
||
|
|
UseDynamicSVGImportOptions,
|
||
|
|
useDynamicSVGImport,
|
||
|
|
} from '@/hooks/commonHooks';
|
||
|
|
|
||
|
|
interface IconProps extends React.SVGProps<SVGSVGElement> {
|
||
|
|
name: string;
|
||
|
|
onCompleted?: UseDynamicSVGImportOptions['onCompleted'];
|
||
|
|
onError?: UseDynamicSVGImportOptions['onError'];
|
||
|
|
}
|
||
|
|
|
||
|
|
const SvgIcon: React.FC<IconProps> = ({
|
||
|
|
name,
|
||
|
|
onCompleted,
|
||
|
|
onError,
|
||
|
|
...rest
|
||
|
|
}): React.ReactNode | null => {
|
||
|
|
const { error, loading, SvgIcon } = useDynamicSVGImport(name, {
|
||
|
|
onCompleted,
|
||
|
|
onError,
|
||
|
|
});
|
||
|
|
if (error) {
|
||
|
|
return error.message;
|
||
|
|
}
|
||
|
|
if (loading) {
|
||
|
|
return 'Loading...';
|
||
|
|
}
|
||
|
|
if (SvgIcon) {
|
||
|
|
return <SvgIcon {...rest} />;
|
||
|
|
}
|
||
|
|
return null;
|
||
|
|
};
|
||
|
|
|
||
|
|
export default SvgIcon;
|