'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" > )}
{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'])}
) }