diff --git a/awx/ui_next/src/components/LaunchButton/LaunchButton.jsx b/awx/ui_next/src/components/LaunchButton/LaunchButton.jsx index 15e7e76f6e..16430d803c 100644 --- a/awx/ui_next/src/components/LaunchButton/LaunchButton.jsx +++ b/awx/ui_next/src/components/LaunchButton/LaunchButton.jsx @@ -37,7 +37,6 @@ function LaunchButton({ resource, children, history }) { const [launchConfig, setLaunchConfig] = useState(null); const [surveyConfig, setSurveyConfig] = useState(null); const [isLaunching, setIsLaunching] = useState(false); - const [resourceCredentials, setResourceCredentials] = useState([]); const [error, setError] = useState(null); const handleLaunch = async () => { @@ -60,17 +59,6 @@ function LaunchButton({ resource, children, history }) { setSurveyConfig(data); } - if ( - launch.ask_credential_on_launch && - resource.type === 'workflow_job_template' - ) { - const { - data: { results: jobTemplateCredentials }, - } = await JobTemplatesAPI.readCredentials(resource.id); - - setResourceCredentials(jobTemplateCredentials); - } - if (canLaunchWithoutPrompt(launch)) { launchWithParams({}); } else { @@ -184,7 +172,6 @@ function LaunchButton({ resource, children, history }) { resource={resource} onLaunch={launchWithParams} onCancel={() => setShowLaunchPrompt(false)} - resourceDefaultCredentials={resourceCredentials} /> )} diff --git a/awx/ui_next/src/components/LaunchPrompt/LaunchPrompt.jsx b/awx/ui_next/src/components/LaunchPrompt/LaunchPrompt.jsx index 217b85297c..9dc05b3ca8 100644 --- a/awx/ui_next/src/components/LaunchPrompt/LaunchPrompt.jsx +++ b/awx/ui_next/src/components/LaunchPrompt/LaunchPrompt.jsx @@ -16,7 +16,6 @@ function PromptModalForm({ onSubmit, resource, surveyConfig, - resourceDefaultCredentials, }) { const { setFieldTouched, values } = useFormikContext(); const [showDescription, setShowDescription] = useState(false); @@ -28,12 +27,7 @@ function PromptModalForm({ visitStep, visitAllSteps, contentError, - } = useLaunchSteps( - launchConfig, - surveyConfig, - resource, - resourceDefaultCredentials - ); + } = useLaunchSteps(launchConfig, surveyConfig, resource); const handleSubmit = () => { const postValues = {}; diff --git a/awx/ui_next/src/components/LaunchPrompt/LaunchPrompt.test.jsx b/awx/ui_next/src/components/LaunchPrompt/LaunchPrompt.test.jsx index 4e5547242c..366437fdf7 100644 --- a/awx/ui_next/src/components/LaunchPrompt/LaunchPrompt.test.jsx +++ b/awx/ui_next/src/components/LaunchPrompt/LaunchPrompt.test.jsx @@ -7,6 +7,7 @@ import { import LaunchPrompt from './LaunchPrompt'; import InventoryStep from './steps/InventoryStep'; import CredentialsStep from './steps/CredentialsStep'; +import CredentialPasswordsStep from './steps/CredentialPasswordsStep'; import OtherPromptsStep from './steps/OtherPromptsStep'; import PreviewStep from './steps/PreviewStep'; import { @@ -27,6 +28,18 @@ const resource = { description: 'Foo Description', name: 'Foobar', type: 'job_template', + summary_fields: { + credentials: [ + { + id: 5, + name: 'cred that prompts', + credential_type: 1, + inputs: { + password: 'ASK', + }, + }, + ], + }, }; const noop = () => {}; @@ -101,7 +114,12 @@ describe('LaunchPrompt', () => { summary_fields: { credentials: [ { - id: 1, + id: 5, + name: 'cred that prompts', + credential_type: 1, + inputs: { + password: 'ASK', + }, }, ], }, @@ -126,16 +144,6 @@ describe('LaunchPrompt', () => { }, ], }} - resourceDefaultCredentials={[ - { - id: 5, - name: 'cred that prompts', - credential_type: 1, - inputs: { - password: 'ASK', - }, - }, - ]} /> ); }); @@ -197,10 +205,13 @@ describe('LaunchPrompt', () => { const wizard = await waitForElement(wrapper, 'Wizard'); const steps = wizard.prop('steps'); - expect(steps).toHaveLength(2); + expect(steps).toHaveLength(3); expect(steps[0].name.props.children).toEqual('Credentials'); expect(isElementOfType(steps[0].component, CredentialsStep)).toEqual(true); - expect(isElementOfType(steps[1].component, PreviewStep)).toEqual(true); + expect( + isElementOfType(steps[1].component, CredentialPasswordsStep) + ).toEqual(true); + expect(isElementOfType(steps[2].component, PreviewStep)).toEqual(true); }); test('should add other prompts step', async () => { diff --git a/awx/ui_next/src/components/LaunchPrompt/steps/credentialsValidator.jsx b/awx/ui_next/src/components/LaunchPrompt/steps/credentialsValidator.jsx index 98d0b0aed4..9105c8ea31 100644 --- a/awx/ui_next/src/components/LaunchPrompt/steps/credentialsValidator.jsx +++ b/awx/ui_next/src/components/LaunchPrompt/steps/credentialsValidator.jsx @@ -17,19 +17,18 @@ export default function credentialsValidator( if ( !selectedCredentials.find(selectedCredential => { return ( - (selectedCredential.credential_type === - defaultCredential.credential_type && - !selectedCredential.inputs.vault_id && - !defaultCredential.inputs.vault_id) || - (selectedCredential.inputs.vault_id && - defaultCredential.inputs.vault_id && - selectedCredential.inputs.vault_id === - defaultCredential.inputs.vault_id) + (selectedCredential?.credential_type === + defaultCredential?.credential_type && + !selectedCredential.inputs?.vault_id && + !defaultCredential.inputs?.vault_id) || + (defaultCredential.inputs?.vault_id && + selectedCredential.inputs?.vault_id === + defaultCredential.inputs?.vault_id) ); }) ) { missingCredentialTypes.push( - defaultCredential.inputs.vault_id + defaultCredential.inputs?.vault_id ? `${defaultCredential.summary_fields.credential_type.name} | ${defaultCredential.inputs.vault_id}` : defaultCredential.summary_fields.credential_type.name ); diff --git a/awx/ui_next/src/components/LaunchPrompt/steps/useCredentialsStep.jsx b/awx/ui_next/src/components/LaunchPrompt/steps/useCredentialsStep.jsx index 6b05b27b78..51ca81be44 100644 --- a/awx/ui_next/src/components/LaunchPrompt/steps/useCredentialsStep.jsx +++ b/awx/ui_next/src/components/LaunchPrompt/steps/useCredentialsStep.jsx @@ -11,7 +11,6 @@ export default function useCredentialsStep( launchConfig, resource, resourceDefaultCredentials, - allowCredentialsWithPasswords = false ) { const [field, meta, helpers] = useField('credentials'); @@ -22,7 +21,6 @@ export default function useCredentialsStep( return { step: getStep( launchConfig, - allowCredentialsWithPasswords, formError, resourceDefaultCredentials diff --git a/awx/ui_next/src/components/LaunchPrompt/useLaunchSteps.js b/awx/ui_next/src/components/LaunchPrompt/useLaunchSteps.js index e8b0b82c5f..e2c5e5a3d7 100644 --- a/awx/ui_next/src/components/LaunchPrompt/useLaunchSteps.js +++ b/awx/ui_next/src/components/LaunchPrompt/useLaunchSteps.js @@ -39,12 +39,7 @@ function showCredentialPasswordsStep(credentials = [], launchConfig) { return credentialPasswordStepRequired; } -export default function useLaunchSteps( - launchConfig, - surveyConfig, - resource, - resourceDefaultCredentials -) { +export default function useLaunchSteps(launchConfig, surveyConfig, resource) { const [visited, setVisited] = useState({}); const [isReady, setIsReady] = useState(false); const { touched, values: formikValues } = useFormikContext(); @@ -53,7 +48,7 @@ export default function useLaunchSteps( useCredentialsStep( launchConfig, resource, - resourceDefaultCredentials, + resource.summary_fields.credentials || [], true ), useCredentialPasswordsStep(