mirror of https://github.com/portainer/portainer
49 lines
1.0 KiB
TypeScript
49 lines
1.0 KiB
TypeScript
import { ExternalLink } from 'lucide-react';
|
|
|
|
import { Icon } from '@@/Icon';
|
|
|
|
type Props = {
|
|
hostURL?: string;
|
|
hostPort?: string | number;
|
|
containerPort?: string | number;
|
|
};
|
|
|
|
export function PublishedPortLink({ hostURL, hostPort, containerPort }: Props) {
|
|
return (
|
|
<a
|
|
className="image-tag"
|
|
href={generateContainerURL(hostURL, hostPort, containerPort)}
|
|
target="_blank"
|
|
rel="noreferrer"
|
|
>
|
|
<Icon icon={ExternalLink} />
|
|
{hostPort}:{containerPort}
|
|
</a>
|
|
);
|
|
}
|
|
|
|
function generateContainerURL(
|
|
hostURL?: string,
|
|
hostPort?: string | number,
|
|
containerPort?: string | number
|
|
) {
|
|
const url = stripTrailingSlash(hostURL?.toLowerCase());
|
|
|
|
if (!url.startsWith('http://') && !url.startsWith('https://')) {
|
|
if (String(containerPort).endsWith('443')) {
|
|
return `https://${url}:${hostPort}`;
|
|
}
|
|
|
|
return `http://${url}:${hostPort}`;
|
|
}
|
|
|
|
return `${url}:${hostPort}`;
|
|
}
|
|
|
|
function stripTrailingSlash(url?: string) {
|
|
if (!url) {
|
|
return '';
|
|
}
|
|
return url.endsWith('/') ? url.slice(0, -1) : url;
|
|
}
|