mirror of
https://github.com/ansible/awx.git
synced 2026-04-13 22:19:27 -02:30
Merge pull request #12184 from marshmalien/2912-prefill-playbook
Autopopulate playbook field when there is one resource
This commit is contained in:
@@ -82,7 +82,7 @@ describe('<JobTemplateAdd />', () => {
|
|||||||
CredentialTypesAPI.loadAllTypes = jest.fn();
|
CredentialTypesAPI.loadAllTypes = jest.fn();
|
||||||
CredentialTypesAPI.loadAllTypes.mockResolvedValue([]);
|
CredentialTypesAPI.loadAllTypes.mockResolvedValue([]);
|
||||||
ProjectsAPI.readPlaybooks.mockResolvedValue({
|
ProjectsAPI.readPlaybooks.mockResolvedValue({
|
||||||
data: [],
|
data: ['ping-playbook.yml'],
|
||||||
});
|
});
|
||||||
LabelsAPI.read.mockResolvedValue({ data: { results: [] } });
|
LabelsAPI.read.mockResolvedValue({ data: { results: [] } });
|
||||||
ProjectsAPI.readDetail.mockReturnValue({
|
ProjectsAPI.readDetail.mockReturnValue({
|
||||||
@@ -164,10 +164,6 @@ describe('<JobTemplateAdd />', () => {
|
|||||||
id: 1,
|
id: 1,
|
||||||
name: 'Foo',
|
name: 'Foo',
|
||||||
});
|
});
|
||||||
wrapper.update();
|
|
||||||
wrapper.find('Select#template-playbook').prop('onToggle')();
|
|
||||||
wrapper.update();
|
|
||||||
wrapper.find('Select#template-playbook').prop('onSelect')(null, 'Baz');
|
|
||||||
});
|
});
|
||||||
wrapper.update();
|
wrapper.update();
|
||||||
act(() => {
|
act(() => {
|
||||||
@@ -186,7 +182,7 @@ describe('<JobTemplateAdd />', () => {
|
|||||||
name: 'Bar',
|
name: 'Bar',
|
||||||
job_type: 'check',
|
job_type: 'check',
|
||||||
project: 2,
|
project: 2,
|
||||||
playbook: 'Baz',
|
playbook: 'ping-playbook.yml',
|
||||||
inventory: 2,
|
inventory: 2,
|
||||||
webhook_credential: undefined,
|
webhook_credential: undefined,
|
||||||
webhook_service: '',
|
webhook_service: '',
|
||||||
|
|||||||
@@ -187,6 +187,14 @@ function JobTemplateForm({
|
|||||||
[setFieldValue, setFieldTouched]
|
[setFieldValue, setFieldTouched]
|
||||||
);
|
);
|
||||||
|
|
||||||
|
const handlePlaybookUpdate = useCallback(
|
||||||
|
(value) => {
|
||||||
|
setFieldValue('playbook', value);
|
||||||
|
setFieldTouched('playbook', true, false);
|
||||||
|
},
|
||||||
|
[setFieldValue, setFieldTouched]
|
||||||
|
);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
validateField('inventory');
|
validateField('inventory');
|
||||||
}, [askInventoryOnLaunchField.value, validateField]);
|
}, [askInventoryOnLaunchField.value, validateField]);
|
||||||
@@ -359,7 +367,7 @@ function JobTemplateForm({
|
|||||||
}
|
}
|
||||||
>
|
>
|
||||||
<PlaybookSelect
|
<PlaybookSelect
|
||||||
onChange={playbookHelpers.setValue}
|
onChange={handlePlaybookUpdate}
|
||||||
projectId={projectField.value?.id}
|
projectId={projectField.value?.id}
|
||||||
isValid={!playbookMeta.touched || !playbookMeta.error}
|
isValid={!playbookMeta.touched || !playbookMeta.error}
|
||||||
selected={playbookField.value}
|
selected={playbookField.value}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import React, { useCallback, useEffect, useState } from 'react';
|
import React, { useCallback, useEffect, useState } from 'react';
|
||||||
import { number, string, oneOfType } from 'prop-types';
|
import { func, number, string, oneOfType } from 'prop-types';
|
||||||
|
|
||||||
import { t } from '@lingui/macro';
|
import { t } from '@lingui/macro';
|
||||||
import { SelectVariant, Select, SelectOption } from '@patternfly/react-core';
|
import { SelectVariant, Select, SelectOption } from '@patternfly/react-core';
|
||||||
@@ -28,8 +28,11 @@ function PlaybookSelect({
|
|||||||
}
|
}
|
||||||
const { data } = await ProjectsAPI.readPlaybooks(projectId);
|
const { data } = await ProjectsAPI.readPlaybooks(projectId);
|
||||||
|
|
||||||
|
if (data.length === 1) {
|
||||||
|
onChange(data[0]);
|
||||||
|
}
|
||||||
return data;
|
return data;
|
||||||
}, [projectId]),
|
}, [projectId, onChange]),
|
||||||
[]
|
[]
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -76,9 +79,11 @@ function PlaybookSelect({
|
|||||||
}
|
}
|
||||||
PlaybookSelect.propTypes = {
|
PlaybookSelect.propTypes = {
|
||||||
projectId: oneOfType([number, string]),
|
projectId: oneOfType([number, string]),
|
||||||
|
onChange: func,
|
||||||
};
|
};
|
||||||
PlaybookSelect.defaultProps = {
|
PlaybookSelect.defaultProps = {
|
||||||
projectId: null,
|
projectId: null,
|
||||||
|
onChange: () => {},
|
||||||
};
|
};
|
||||||
|
|
||||||
export { PlaybookSelect as _PlaybookSelect };
|
export { PlaybookSelect as _PlaybookSelect };
|
||||||
|
|||||||
@@ -24,8 +24,7 @@ describe('<PlaybookSelect />', () => {
|
|||||||
<PlaybookSelect
|
<PlaybookSelect
|
||||||
projectId={1}
|
projectId={1}
|
||||||
isValid
|
isValid
|
||||||
form={{}}
|
onChange={() => {}}
|
||||||
field={{ onChange: () => {}, value: '' }}
|
|
||||||
onError={() => {}}
|
onError={() => {}}
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
|
|||||||
Reference in New Issue
Block a user