'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 (
)
}