'use client'
import type { ReleaseSourceMode } from '../state'
import { SegmentedControl, SegmentedControlItem } from '@langgenius/dify-ui/segmented-control'
import { useAtomValue, useSetAtom } from 'jotai'
import { useTranslation } from 'react-i18next'
import Uploader from '@/app/components/app/create-from-dsl-modal/uploader'
import { isDeploymentDslImportEnabled } from '../../shared/domain/feature-flags'
import {
createReleaseDslFileFieldAtom,
createReleaseDslReadErrorAtom,
createReleaseHasUnsupportedDslModeAtom,
createReleaseSelectedSourceAppAtom,
createReleaseSourceModeAtom,
isReadingCreateReleaseDslAtom,
selectCreateReleaseSourceModeAtom,
updateCreateReleaseDslFileAtom,
updateCreateReleaseSourceAppAtom,
} from '../state'
import { SourceAppPicker } from './source-app-picker'
function selectedReleaseSourceMode(value: readonly ReleaseSourceMode[] | undefined) {
return value?.[0]
}
export function ReleaseSourceSection() {
const { t } = useTranslation('deployments')
const releaseSourceMode = useAtomValue(createReleaseSourceModeAtom)
const selectReleaseSourceMode = useSetAtom(selectCreateReleaseSourceModeAtom)
return (
{isDeploymentDslImportEnabled && (
aria-labelledby="release-source-mode-label"
value={[releaseSourceMode]}
onValueChange={(value) => {
const nextMode = selectedReleaseSourceMode(value)
if (!nextMode || nextMode === releaseSourceMode) return
selectReleaseSourceMode(nextMode)
}}
className="shrink-0"
>
{t(($) => $['versions.sourceAppOption'])}
{t(($) => $['versions.manualDslOption'])}
)}
{releaseSourceMode === 'sourceApp' ? : }
)
}
function SourceAppField() {
const sourceApp = useAtomValue(createReleaseSelectedSourceAppAtom)
const updateSourceApp = useSetAtom(updateCreateReleaseSourceAppAtom)
const sourceAppLocked = !isDeploymentDslImportEnabled
return (
)
}
function DslFileField() {
const { t } = useTranslation('deployments')
const dslFileField = useAtomValue(createReleaseDslFileFieldAtom)
const isReadingDsl = useAtomValue(isReadingCreateReleaseDslAtom)
const dslReadError = useAtomValue(createReleaseDslReadErrorAtom)
const updateDslFile = useSetAtom(updateCreateReleaseDslFileAtom)
return (
{
void updateDslFile(file)
}}
className="mt-0"
/>
{isReadingDsl && (
{t(($) => $['versions.dslReading'])}
)}
{dslReadError && (
{t(($) => $['versions.dslReadFailed'])}
)}
)
}
function DslUnsupportedModeError() {
const { t } = useTranslation('deployments')
const hasUnsupportedDslMode = useAtomValue(createReleaseHasUnsupportedDslModeAtom)
if (!hasUnsupportedDslMode) return null
return (
{t(($) => $['versions.dslUnsupportedMode'])}
)
}