diff --git a/awx/ui_next/src/screens/Credential/shared/CredentialForm.jsx b/awx/ui_next/src/screens/Credential/shared/CredentialForm.jsx index bff6be1627..7becca75b1 100644 --- a/awx/ui_next/src/screens/Credential/shared/CredentialForm.jsx +++ b/awx/ui_next/src/screens/Credential/shared/CredentialForm.jsx @@ -245,37 +245,42 @@ function CredentialForm({ }; Object.values(credentialTypes).forEach(credentialType => { - const fields = credentialType.inputs.fields || []; - fields.forEach( - ({ ask_at_runtime, type, id, choices, default: defaultValue }) => { - if (credential?.inputs && id in credential.inputs) { - if (ask_at_runtime) { - initialValues.passwordPrompts[id] = - credential.inputs[id] === 'ASK' || false; - } - initialValues.inputs[id] = credential.inputs[id]; - } else { - switch (type) { - case 'string': - initialValues.inputs[id] = defaultValue || ''; - break; - case 'boolean': - initialValues.inputs[id] = defaultValue || false; - break; - default: - break; - } + if (!credential.id || credential.credential_type === credentialType.id) { + const fields = credentialType.inputs.fields || []; + fields.forEach( + ({ ask_at_runtime, type, id, choices, default: defaultValue }) => { + if (credential?.inputs && id in credential.inputs) { + if (ask_at_runtime) { + initialValues.passwordPrompts[id] = + credential.inputs[id] === 'ASK' || false; + initialValues.inputs[id] = + credential.inputs[id] === 'ASK' ? '' : credential.inputs[id]; + } else { + initialValues.inputs[id] = credential.inputs[id]; + } + } else { + switch (type) { + case 'string': + initialValues.inputs[id] = defaultValue || ''; + break; + case 'boolean': + initialValues.inputs[id] = defaultValue || false; + break; + default: + break; + } - if (choices) { - initialValues.inputs[id] = defaultValue; - } + if (choices) { + initialValues.inputs[id] = defaultValue; + } - if (ask_at_runtime) { - initialValues.passwordPrompts[id] = false; + if (ask_at_runtime) { + initialValues.passwordPrompts[id] = false; + } } } - } - ); + ); + } }); Object.values(inputSources).forEach(inputSource => { diff --git a/awx/ui_next/src/screens/Credential/shared/CredentialFormFields/CredentialField.jsx b/awx/ui_next/src/screens/Credential/shared/CredentialFormFields/CredentialField.jsx index 42897cab7b..2de7ef5491 100644 --- a/awx/ui_next/src/screens/Credential/shared/CredentialFormFields/CredentialField.jsx +++ b/awx/ui_next/src/screens/Credential/shared/CredentialFormFields/CredentialField.jsx @@ -30,13 +30,15 @@ function CredentialInput({ fieldOptions, credentialKind, ...rest }) { const [fileName, setFileName] = useState(''); const [fileIsUploading, setFileIsUploading] = useState(false); const [subFormField, meta, helpers] = useField(`inputs.${fieldOptions.id}`); + const [passwordPromptsField] = useField(`passwordPrompts.${fieldOptions.id}`); const isValid = !(meta.touched && meta.error); const RevertReplaceButton = ( <> {meta.initialValue && meta.initialValue !== '' && - !meta.initialValue.credential && ( + !meta.initialValue.credential && + !passwordPromptsField.value && (