import { HTMLAttributes, useMemo } from 'react'
import Consul from 'components/icons/providers/Consul'
import Docker from 'components/icons/providers/Docker'
import ECS from 'components/icons/providers/ECS'
import Etcd from 'components/icons/providers/Etcd'
import File from 'components/icons/providers/File'
import Http from 'components/icons/providers/Http'
import Hub from 'components/icons/providers/Hub'
import Internal from 'components/icons/providers/Internal'
import Kubernetes from 'components/icons/providers/Kubernetes'
import Nomad from 'components/icons/providers/Nomad'
import Plugin from 'components/icons/providers/Plugin'
import Redis from 'components/icons/providers/Redis'
import Zookeeper from 'components/icons/providers/Zookeeper'
export type ProviderIconProps = HTMLAttributes & {
height?: number | string
width?: number | string
}
export default function ProviderIcon({ name, size = 32 }: { name: string; size?: number }) {
const Icon = useMemo(() => {
if (!name || typeof name !== 'string') return Internal
const nameLowerCase = name.toLowerCase()
if (['consul', 'consul-', 'consulcatalog-'].some((prefix) => nameLowerCase.startsWith(prefix))) {
return Consul
}
if (['docker', 'swarm'].some((prefix) => nameLowerCase.startsWith(prefix))) {
return Docker
}
if (['ecs'].some((prefix) => nameLowerCase.startsWith(prefix))) {
return ECS
}
if (['etcd'].some((prefix) => nameLowerCase.startsWith(prefix))) {
return Etcd
}
if (['file'].some((prefix) => nameLowerCase.startsWith(prefix))) {
return File
}
if (['http'].some((prefix) => nameLowerCase.startsWith(prefix))) {
return Http
}
if (['hub'].some((prefix) => nameLowerCase.startsWith(prefix))) {
return Hub
}
if (['kubernetes'].some((prefix) => nameLowerCase.startsWith(prefix))) {
return Kubernetes
}
if (['nomad', 'nomad-'].some((prefix) => nameLowerCase.startsWith(prefix))) {
return Nomad
}
if (['plugin', 'plugin-'].some((prefix) => nameLowerCase.startsWith(prefix))) {
return Plugin
}
if (['redis'].some((prefix) => nameLowerCase.startsWith(prefix))) {
return Redis
}
if (['zookeeper'].some((prefix) => nameLowerCase.startsWith(prefix))) {
return Zookeeper
}
return Internal
}, [name])
return (
)
}