t('deployDrawer.envVarSource.ariaLabel', { key })}
defaultSourcePriority="lastDeployment"
envVarCountLabel={t('deployDrawer.envVarCount', { count: envVarSlots.length })}
missingRequiredLabel={t('deployDrawer.missingRequiredEnvVar')}
listClassName={DEPLOY_DRAWER_BINDING_LIST_CLASS_NAME}
showMissingRequired={showValidationErrors}
onChange={setDeployEnvVar}
/>
)
}
function DeployBindingsSection() {
const targetReleaseId = useAtomValue(deployTargetReleaseIdAtom)
const hasSelectedEnvironment = useAtomValue(deployHasSelectedEnvironmentAtom)
if (!targetReleaseId || !hasSelectedEnvironment)
return null
return (
<>
>
)
}
function DeployFormBody() {
return (
)
}
function DeployFooter() {
const { t } = useTranslation('deployments')
const closeDeployDrawer = useSetAtom(closeDeployDrawerAtom)
const showValidationErrors = useSetAtom(showDeployValidationErrorsAtom)
const submitDeployRelease = useSetAtom(deployReleaseSubmissionAtom)
const canAttemptDeploy = useAtomValue(canAttemptDeployAtom)
const canDeploy = useAtomValue(canSubmitDeployAtom)
const isSubmitting = useAtomValue(isDeployReleaseSubmittingAtom)
const submitLabel = isSubmitting ? t('deployDrawer.deploying') : t('deployDrawer.deploy')
function handleDeploy() {
showValidationErrors()
if (!canDeploy)
return
submitDeployRelease({
deployFailedMessage: t('deployDrawer.deployFailed'),
})
}
return (
)
}
function deployReadyFormStoreKey({
appInstanceId,
environments,
releases,
runtimeRows,
defaultReleaseId,
lockedEnvId,
presetReleaseId,
}: DeployReadyFormProps) {
return [
appInstanceId,
lockedEnvId ?? 'any',
presetReleaseId ?? 'new',
defaultReleaseId ?? 'none',
environments.map(env => env.id).join(','),
releases.map(release => release.id).join(','),
runtimeRows.map(row => `${row.environment.id}:${row.currentRelease?.id ?? 'none'}`).join(','),
].join('|')
}
function DeployReadyForm(config: DeployReadyFormProps) {
return (
)
}
function DeployFormContent({
appInstanceId,
lockedEnvId,
presetReleaseId,
}: DeployFormProps) {
const { t } = useTranslation('deployments')
const deploymentView = useAtomValue(releaseDeploymentViewAtom)
const isLoading = useAtomValue(releaseDeploymentViewIsLoadingAtom)
const isError = useAtomValue(releaseDeploymentViewIsErrorAtom)
if (isLoading) {
return
}
if (isError) {
return (
{t('common.loadFailed')}
)
}
if (!deploymentView) {
return (
{t('common.loadFailed')}
)
}
const runtimeRows = deploymentView.environmentDeployments
const environments = runtimeRows
.filter(row => lockedEnvId || isAvailableDeploymentTarget(row))
.map(row => row.environment)
const releaseRows = deploymentView.releases
const currentReleaseId = currentReleaseIdForEnvironment(runtimeRows, lockedEnvId)
const releases = selectableDeployReleases({
releases: releaseRows,
lockedEnvId,
currentReleaseId,
presetReleaseId,
})
const defaultReleaseId = releases[0]?.id
const releaseEmptyLabel = lockedEnvId && !presetReleaseId && currentReleaseId
? t('deployDrawer.noOtherReleaseAvailable')
: undefined
const readyFormConfig = {
appInstanceId,
environments,
releases,
runtimeRows,
defaultReleaseId,
releaseEmptyLabel,
lockedEnvId,
presetReleaseId,
}
const formKey = deployReadyFormStoreKey(readyFormConfig)
return (
)
}
export function DeployForm(props: DeployFormProps) {
return (
)
}