import { Badge, Box, Text } from '@traefiklabs/faency' import Tooltip from 'components/Tooltip' import { MiddlewareProps, ValuesMapType } from 'hooks/use-resource-detail' function capitalize(word: string): string { return word.charAt(0).toUpperCase() + word.slice(1) } function quote(value: string | number): string | number { if (typeof value === 'string') { return `"${value}"` } return value } function quoteArray(values: (string | number)[]): (string | number)[] { return values.map(quote) } const renderFeatureValues = (valuesMap: ValuesMapType): string => { return Object.entries(valuesMap) .map(([name, value]) => { const capitalizedName = capitalize(name) if (typeof value === 'string') { return [capitalizedName, `"${value}"`].join('=') } if (value instanceof Array) { return [capitalizedName, quoteArray(value).join(', ')].join('=') } if (typeof value === 'object') { return [capitalizedName, `{${renderFeatureValues(value)}}`].join('=') } return [capitalizedName, value].join('=') }) .join(', ') } const FeatureMiddleware = ({ middleware }: { middleware: MiddlewareProps }) => { const [name, value] = Object.entries(middleware)[0] const content = `${capitalize(name)}: ${renderFeatureValues(value)}` return ( {content} ) } type AdditionalFeaturesProps = { middlewares?: MiddlewareProps[] uid: string } const AdditionalFeatures = ({ middlewares, uid }: AdditionalFeaturesProps) => { return middlewares?.length ? ( {middlewares.map((m, idx) => ( ))} ) : ( No additional features ) } export default AdditionalFeatures