Files
FastGPT/packages/web/components/common/Icon/index.tsx
Archer 09205e4666 fix: price page init data;perf: usage code;fix: reasoning tokens;fix: workflow basic node cannot upgrade (#3816)
* fix: img read

* fix: price page init data

* perf: ai model avatar

* perf: refresh in change team

* perf: null checker

* perf: usage code

* fix: reasoning tokens

* fix: workflow basic node cannot upgrade

* perf: model refresh

* perf: icon refresh
2025-02-18 20:50:25 +08:00

46 lines
1.1 KiB
TypeScript

import React, { useEffect } from 'react';
import type { IconProps } from '@chakra-ui/react';
import { Box, Icon } from '@chakra-ui/react';
import { iconPaths } from './constants';
import type { IconNameType } from './type.d';
import { useRefresh } from '../../../hooks/useRefresh';
const iconCache: Record<string, any> = {};
const MyIcon = ({ name, w = 'auto', h = 'auto', ...props }: { name: IconNameType } & IconProps) => {
const { refresh } = useRefresh();
useEffect(() => {
if (iconCache[name]) {
return;
}
iconPaths[name]?.()
.then((icon) => {
const component = { as: icon.default };
// Store in cache
iconCache[name] = component;
refresh();
})
.catch((error) => console.log(error));
}, [name]);
const IconComponent = iconCache[name];
return !!IconComponent ? (
<Icon
{...IconComponent}
w={w}
h={h}
boxSizing={'content-box'}
verticalAlign={'top'}
fill={'currentcolor'}
{...props}
/>
) : (
<Box w={w} h={'1px'}></Box>
);
};
export default React.memo(MyIcon);