'use client' import type { Environment, EnvironmentStatus } from '@dify/contracts/enterprise/types.gen' import { EnvironmentStatus as EnvironmentStatusEnum } from '@dify/contracts/enterprise/types.gen' import { cn } from '@langgenius/dify-ui/cn' import { Select, SelectContent, SelectItem, SelectItemIndicator, SelectItemText, SelectTrigger, } from '@langgenius/dify-ui/select' import { Tooltip, TooltipContent, TooltipTrigger } from '@langgenius/dify-ui/tooltip' import { useTranslation } from 'react-i18next' import { TitleTooltip } from '../../shared/components/title-tooltip' import { ModeBadge } from './status-badge' export function Field({ label, hint, children, }: { label: string hint?: string children: React.ReactNode }) { return (
{label}
{hint && {hint}}
{children}
) } type SelectOption = { value?: string label: string disabled?: boolean disabledReason?: string } type SelectProps = { value?: string onChange: (value: string) => void options: SelectOption[] ariaLabel?: string placeholder?: string } export function DeploymentSelect({ value, onChange, options, ariaLabel, placeholder, }: SelectProps) { const { t } = useTranslation('deployments') const selectedOption = options.find((option) => option.value === value) return ( ) } function EnvironmentHealthDot({ status }: { status: EnvironmentStatus }) { const { t } = useTranslation('deployments') const label = t(($) => $[`health.${status}`]) const isReady = status === EnvironmentStatusEnum.ENVIRONMENT_STATUS_READY return ( } /> {label} ) } export function EnvironmentRow({ env }: { env: Environment }) { const { t } = useTranslation('deployments') const summary = env.description.trim() || t(($) => $[`backend.${env.backend}`]) return (
{env.displayName}
{summary}
) }