Files
dokploy/components/dashboard/application/advanced/ports/show-port.tsx
2024-07-15 01:08:18 +02:00

94 lines
3.0 KiB
TypeScript

import { AlertBlock } from "@/components/shared/alert-block";
import {
Card,
CardContent,
CardDescription,
CardHeader,
CardTitle,
} from "@/components/ui/card";
import { api } from "@/utils/api";
import { Rss } from "lucide-react";
import React from "react";
import { AddPort } from "./add-port";
import { DeletePort } from "./delete-port";
import { UpdatePort } from "./update-port";
interface Props {
applicationId: string;
}
export const ShowPorts = ({ applicationId }: Props) => {
const { data } = api.application.one.useQuery(
{
applicationId,
},
{ enabled: !!applicationId },
);
return (
<Card className="bg-background">
<CardHeader className="flex flex-row justify-between flex-wrap gap-4">
<div>
<CardTitle className="text-xl">Ports</CardTitle>
<CardDescription>
the ports allows you to expose your application to the internet
</CardDescription>
</div>
{data && data?.ports.length > 0 && (
<AddPort applicationId={applicationId}>Add Port</AddPort>
)}
</CardHeader>
<CardContent className="flex flex-col gap-4">
{data?.ports.length === 0 ? (
<div className="flex w-full flex-col items-center justify-center gap-3 pt-10">
<Rss className="size-8 text-muted-foreground" />
<span className="text-base text-muted-foreground">
No ports configured
</span>
<AddPort applicationId={applicationId}>Add Port</AddPort>
</div>
) : (
<div className="flex flex-col pt-2 gap-4">
<AlertBlock type="info">
Please remember to click Redeploy after adding, editing, or
deleting the ports to apply the changes.
</AlertBlock>
<div className="flex flex-col gap-6">
{data?.ports.map((port) => (
<div key={port.portId}>
<div className="flex w-full flex-col sm:flex-row sm:items-center justify-between gap-4 sm:gap-10 border rounded-lg p-4">
<div className="grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 flex-col gap-4 sm:gap-8">
<div className="flex flex-col gap-1">
<span className="font-medium">Published Port</span>
<span className="text-sm text-muted-foreground">
{port.publishedPort}
</span>
</div>
<div className="flex flex-col gap-1">
<span className="font-medium"> Target Port</span>
<span className="text-sm text-muted-foreground">
{port.targetPort}
</span>
</div>
<div className="flex flex-col gap-1">
<span className="font-medium">Protocol</span>
<span className="text-sm text-muted-foreground">
{port.protocol.toUpperCase()}
</span>
</div>
</div>
<div className="flex flex-row gap-4">
<UpdatePort portId={port.portId} />
<DeletePort portId={port.portId} />
</div>
</div>
</div>
))}
</div>
</div>
)}
</CardContent>
</Card>
);
};