formatting and layout
This commit is contained in:
52
src/utils/DynamicIcon.tsx
Normal file
52
src/utils/DynamicIcon.tsx
Normal file
@@ -0,0 +1,52 @@
|
||||
import React from 'react';
|
||||
import * as FaIcons from 'react-icons/fa';
|
||||
import * as MdIcons from 'react-icons/md';
|
||||
import * as AiIcons from 'react-icons/ai';
|
||||
import * as GiIcons from 'react-icons/gi';
|
||||
import * as IoIcons from 'react-icons/io';
|
||||
import * as CiIcons from 'react-icons/ci';
|
||||
import * as FiIcons from 'react-icons/fi';
|
||||
import * as LuIcons from 'react-icons/lu';
|
||||
import * as SiIcons from 'react-icons/si';
|
||||
|
||||
// Load React Icon library dynamically from attributes in Directus
|
||||
|
||||
const iconSets = {
|
||||
fa: FaIcons,
|
||||
md: MdIcons,
|
||||
ai: AiIcons,
|
||||
gi: GiIcons,
|
||||
io: IoIcons,
|
||||
ci: CiIcons,
|
||||
fi: FiIcons,
|
||||
lu: LuIcons,
|
||||
si: SiIcons,
|
||||
};
|
||||
|
||||
const DynamicIcon = ({
|
||||
name,
|
||||
set = 'fa',
|
||||
size = 20,
|
||||
color = 'currentColor',
|
||||
className = '',
|
||||
}: {
|
||||
name: string;
|
||||
set: string;
|
||||
size: number;
|
||||
color: string;
|
||||
className: string;
|
||||
}) => {
|
||||
let IconComponent = FaIcons.FaAlignCenter;
|
||||
|
||||
if (name.startsWith('Fa')) {
|
||||
IconComponent = iconSets['fa'][name];
|
||||
} else if (name.startsWith('Si')) {
|
||||
IconComponent = iconSets['si'][name];
|
||||
} else {
|
||||
IconComponent = iconSets[set][name];
|
||||
}
|
||||
|
||||
return <IconComponent size={size} color={color} className={className} />;
|
||||
};
|
||||
|
||||
export default DynamicIcon;
|
Reference in New Issue
Block a user