'use client'
import type { ReactNode } from 'react'
import type { GuideStep } from '@/features/deployments/create-guide/state/types'
import { cn } from '@langgenius/dify-ui/cn'
import { ScrollArea } from '@langgenius/dify-ui/scroll-area'
import { useTranslation } from 'react-i18next'
import { TitleTooltip } from '@/features/deployments/shared/components/title-tooltip'
const GUIDE_PROGRESS_STEPS: GuideStep[] = ['source', 'release', 'target']
function GuideStepIntro({ activeStep }: { activeStep: GuideStep }) {
const { t } = useTranslation('deployments')
let title: string
let description: string
if (activeStep === 'source') {
title = t(($) => $['createGuide.source.title'])
description = t(($) => $['createGuide.method.description'])
} else if (activeStep === 'release') {
title = t(($) => $['createGuide.release.title'])
description = t(($) => $['createGuide.release.description'])
} else if (activeStep === 'target') {
title = t(($) => $['createGuide.target.title'])
description = t(($) => $['createGuide.target.description'])
} else {
return null
}
return (
)
}
function GuideProgress({ activeStep }: { activeStep: GuideStep }) {
const { t } = useTranslation('deployments')
const activeIndex = GUIDE_PROGRESS_STEPS.indexOf(activeStep)
return (
{GUIDE_PROGRESS_STEPS.map((step, index) => {
const isActive = step === activeStep
const isComplete = index < activeIndex
const label = t(($) => $[`createGuide.steps.${step}`])
return (
-
{label}
)
})}
)
}
function GuideProgressSummary({ activeStep }: { activeStep: GuideStep }) {
const { t } = useTranslation('deployments')
const activeIndex = GUIDE_PROGRESS_STEPS.indexOf(activeStep)
const activeStepNumber = activeIndex + 1
let activeStepLabel: string
if (activeStep === 'source') activeStepLabel = t(($) => $['createGuide.steps.source'])
else if (activeStep === 'release') activeStepLabel = t(($) => $['createGuide.steps.release'])
else if (activeStep === 'target') activeStepLabel = t(($) => $['createGuide.steps.target'])
else return null
if (activeIndex < 0) return null
return (
{activeStepLabel}
{activeStepNumber}/{GUIDE_PROGRESS_STEPS.length}
{GUIDE_PROGRESS_STEPS.map((step, index) => (
))}
)
}
export function StepShell({
title,
description,
descriptionClassName,
hideHeader,
className,
children,
}: {
title: string
description: string
descriptionClassName?: string
hideHeader?: boolean
className?: string
children: ReactNode
}) {
return (
{!hideHeader && (
)}
{children}
)
}
export function GuideCard({
children,
actions,
contentScrollable = true,
}: {
children: ReactNode
actions: ReactNode
contentScrollable?: boolean
}) {
return (
{contentScrollable ? (
{children}
) : (
{children}
)}
{actions}
)
}
export function GuideFrame({
activeStep,
children,
}: {
activeStep: GuideStep
children: ReactNode
}) {
const { t } = useTranslation('deployments')
return (
$['createGuide.title'])}
className="flex h-full w-full max-w-[840px] flex-col px-5 sm:px-8 lg:px-10"
>
{t(($) => $['createGuide.title'])}
{children}
)
}