ConnectionIcon.tsx 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. import { useTheme } from 'next-themes'
  2. import Image from 'next/image'
  3. import { BASE_PATH } from '@/lib/constants'
  4. interface ConnectionIconProps {
  5. icon: string
  6. iconFolder?: string
  7. supportsDarkMode?: boolean
  8. size?: number
  9. className?: string
  10. }
  11. export const ConnectionIcon = ({
  12. icon,
  13. iconFolder,
  14. supportsDarkMode,
  15. size = 14,
  16. className,
  17. }: ConnectionIconProps) => {
  18. const { resolvedTheme } = useTheme()
  19. const imageFolder =
  20. iconFolder || (['ionic-angular'].includes(icon) ? 'icons/frameworks' : 'libraries')
  21. const imageExtension = imageFolder === 'icons/frameworks' ? '' : '-icon'
  22. const shouldUseDarkMode =
  23. supportsDarkMode ||
  24. ['expo', 'nextjs', 'prisma', 'drizzle', 'astro', 'remix', 'refine'].includes(icon.toLowerCase())
  25. const iconImgSrc = icon.startsWith('http')
  26. ? icon
  27. : `${BASE_PATH}/img/${imageFolder}/${icon.toLowerCase()}${
  28. shouldUseDarkMode && resolvedTheme?.includes('dark') ? '-dark' : ''
  29. }${imageExtension}.svg`
  30. return (
  31. <Image className={className} src={iconImgSrc} alt={`${icon} logo`} width={size} height={size} />
  32. )
  33. }