{
+ const buildBreadcrumbConfig = useCallback((instanceGroups, instance) => {
if (!instanceGroups) {
return;
}
@@ -49,6 +49,8 @@ function InstanceGroups() {
[`/instance_groups/${instanceGroups.id}/details`]: t`Details`,
[`/instance_groups/${instanceGroups.id}/instances`]: t`Instances`,
+ [`/instance_groups/${instanceGroups.id}/instances/${instance?.id}`]: `${instance?.hostname}`,
+ [`/instance_groups/${instanceGroups.id}/instances/${instance?.id}/details`]: t`Instance details`,
[`/instance_groups/${instanceGroups.id}/jobs`]: t`Jobs`,
[`/instance_groups/${instanceGroups.id}/edit`]: t`Edit details`,
[`/instance_groups/${instanceGroups.id}`]: `${instanceGroups.name}`,
diff --git a/awx/ui/src/screens/InstanceGroup/Instances/InstanceListItem.js b/awx/ui/src/screens/InstanceGroup/Instances/InstanceListItem.js
index d3891e3755..a1e072347b 100644
--- a/awx/ui/src/screens/InstanceGroup/Instances/InstanceListItem.js
+++ b/awx/ui/src/screens/InstanceGroup/Instances/InstanceListItem.js
@@ -1,4 +1,5 @@
import React, { useState, useCallback } from 'react';
+import { Link, useParams } from 'react-router-dom';
import { bool, func } from 'prop-types';
import { t, Plural } from '@lingui/macro';
import styled from 'styled-components';
@@ -62,6 +63,8 @@ function InstanceListItem({
instance.capacity_adjustment
)
);
+ const { id } = useParams();
+
const labelId = `check-action-${instance.id}`;
function usedCapacity(item) {
@@ -113,7 +116,9 @@ function InstanceListItem({
dataLabel={t`Selected`}
/>
|
- {instance.hostname}
+
+ {instance.hostname}
+
|
{instance.node_type} |
diff --git a/awx/ui/src/screens/InstanceGroup/Instances/InstanceListItem.test.js b/awx/ui/src/screens/InstanceGroup/Instances/InstanceListItem.test.js
index 681dfd9482..a2efc6c5b6 100644
--- a/awx/ui/src/screens/InstanceGroup/Instances/InstanceListItem.test.js
+++ b/awx/ui/src/screens/InstanceGroup/Instances/InstanceListItem.test.js
@@ -10,6 +10,12 @@ import InstanceListItem from './InstanceListItem';
jest.mock('../../../api');
jest.mock('../../../hooks/useDebounce');
+jest.mock('react-router-dom', () => ({
+ ...jest.requireActual('react-router-dom'),
+ useParams: () => ({
+ id: 1,
+ }),
+}));
const instance = [
{
id: 1,
@@ -153,6 +159,9 @@ describe('', () => {
);
});
+ expect(wrapper.find('Td[dataLabel="Name"]').find('Link').prop('to')).toBe(
+ '/instance_groups/1/instances/1/details'
+ );
expect(wrapper.find('Td').at(1).text()).toBe('awx');
expect(wrapper.find('Progress').prop('value')).toBe(40);
expect(wrapper.find('Td').at(2).text()).toBe('hybrid');
diff --git a/awx/ui/src/screens/InstanceGroup/Instances/Instances.js b/awx/ui/src/screens/InstanceGroup/Instances/Instances.js
new file mode 100644
index 0000000000..f77bad9d6d
--- /dev/null
+++ b/awx/ui/src/screens/InstanceGroup/Instances/Instances.js
@@ -0,0 +1,30 @@
+import React from 'react';
+import { Redirect, Route, Switch } from 'react-router-dom';
+import InstanceList from './InstanceList';
+import InstanceDetails from '../InstanceDetails';
+
+function Instances({ setBreadcrumb, instanceGroup }) {
+ return (
+
+
+
+
+
+
+
+
+
+ );
+}
+
+export default Instances;
diff --git a/awx/ui/src/screens/InstanceGroup/Instances/index.js b/awx/ui/src/screens/InstanceGroup/Instances/index.js
index 2567e3c8e7..e58909444f 100644
--- a/awx/ui/src/screens/InstanceGroup/Instances/index.js
+++ b/awx/ui/src/screens/InstanceGroup/Instances/index.js
@@ -1,2 +1,3 @@
export { default as InstanceList } from './InstanceList';
export { default as InstanceListItem } from './InstanceListItem';
+export { default as Instances } from './Instances';
|