diff --git a/awx/ui_next/src/components/AdHocCommands/AdHocCommands.test.jsx b/awx/ui_next/src/components/AdHocCommands/AdHocCommands.test.jsx
index e9879a84fa..3e279a92d7 100644
--- a/awx/ui_next/src/components/AdHocCommands/AdHocCommands.test.jsx
+++ b/awx/ui_next/src/components/AdHocCommands/AdHocCommands.test.jsx
@@ -153,6 +153,10 @@ describe('', () => {
count: 5,
},
});
+ CredentialsAPI.readOptions.mockResolvedValue({
+ data: { actions: { GET: {} } },
+ });
+
ExecutionEnvironmentsAPI.read.mockResolvedValue({
data: {
results: [
@@ -310,6 +314,10 @@ describe('', () => {
count: 5,
},
});
+ CredentialsAPI.readOptions.mockResolvedValue({
+ data: { actions: { GET: {} } },
+ });
+
ExecutionEnvironmentsAPI.read.mockResolvedValue({
data: {
results: [
diff --git a/awx/ui_next/src/components/AdHocCommands/AdHocCommandsWizard.test.jsx b/awx/ui_next/src/components/AdHocCommands/AdHocCommandsWizard.test.jsx
index d2866e7965..c415df1104 100644
--- a/awx/ui_next/src/components/AdHocCommands/AdHocCommandsWizard.test.jsx
+++ b/awx/ui_next/src/components/AdHocCommands/AdHocCommandsWizard.test.jsx
@@ -126,6 +126,9 @@ describe('', () => {
count: 2,
},
});
+ CredentialsAPI.readOptions.mockResolvedValue({
+ data: { actions: { GET: {} } },
+ });
await waitForElement(wrapper, 'WizardNavItem', el => el.length > 0);
await act(async () => {
@@ -245,6 +248,9 @@ describe('', () => {
},
})
);
+ CredentialsAPI.readOptions.mockResolvedValue({
+ data: { actions: { GET: {} } },
+ });
await waitForElement(wrapper, 'WizardNavItem', el => el.length > 0);
await act(async () => {
diff --git a/awx/ui_next/src/components/AdHocCommands/AdHocCredentialStep.jsx b/awx/ui_next/src/components/AdHocCommands/AdHocCredentialStep.jsx
index 29ae4e6827..0246bf444d 100644
--- a/awx/ui_next/src/components/AdHocCommands/AdHocCredentialStep.jsx
+++ b/awx/ui_next/src/components/AdHocCommands/AdHocCredentialStep.jsx
@@ -27,23 +27,45 @@ function AdHocCredentialStep({ credentialTypeId, onEnableLaunch }) {
error,
isLoading,
request: fetchCredentials,
- result: { credentials, credentialCount },
+ result: {
+ credentials,
+ credentialCount,
+ relatedSearchableKeys,
+ searchableKeys,
+ },
} = useRequest(
useCallback(async () => {
const params = parseQueryString(QS_CONFIG, history.location.search);
- const {
- data: { results, count },
- } = await CredentialsAPI.read(
- mergeParams(params, { credential_type: credentialTypeId })
- );
+ const [
+ {
+ data: { results, count },
+ },
+ actionsResponse,
+ ] = await Promise.all([
+ CredentialsAPI.read(
+ mergeParams(params, { credential_type: credentialTypeId })
+ ),
+ CredentialsAPI.readOptions(),
+ ]);
return {
credentials: results,
credentialCount: count,
+ relatedSearchableKeys: (
+ actionsResponse?.data?.related_search_fields || []
+ ).map(val => val.slice(0, -8)),
+ searchableKeys: Object.keys(
+ actionsResponse.data.actions?.GET || {}
+ ).filter(key => actionsResponse.data.actions?.GET[key].filterable),
};
}, [credentialTypeId, history.location.search]),
- { credentials: [], credentialCount: 0 }
+ {
+ credentials: [],
+ credentialCount: 0,
+ relatedSearchableKeys: [],
+ searchableKeys: [],
+ }
);
useEffect(() => {
@@ -84,6 +106,8 @@ function AdHocCredentialStep({ credentialTypeId, onEnableLaunch }) {
header={t`Machine Credential`}
readOnly
qsConfig={QS_CONFIG}
+ relatedSearchableKeys={relatedSearchableKeys}
+ searchableKeys={searchableKeys}
searchColumns={[
{
name: t`Name`,
diff --git a/awx/ui_next/src/components/AdHocCommands/AdHocCredentialStep.test.jsx b/awx/ui_next/src/components/AdHocCommands/AdHocCredentialStep.test.jsx
index f0cc546241..9513632834 100644
--- a/awx/ui_next/src/components/AdHocCommands/AdHocCredentialStep.test.jsx
+++ b/awx/ui_next/src/components/AdHocCommands/AdHocCredentialStep.test.jsx
@@ -23,6 +23,9 @@ describe('', () => {
count: 2,
},
});
+ CredentialsAPI.readOptions.mockResolvedValue({
+ data: { actions: { GET: {} } },
+ });
await act(async () => {
wrapper = mountWithContexts(