diff --git a/awx/ui_next/.eslintrc b/awx/ui_next/.eslintrc index b7c86c305a..350f50379b 100644 --- a/awx/ui_next/.eslintrc +++ b/awx/ui_next/.eslintrc @@ -78,7 +78,8 @@ "src", "theme", "gridColumns", - "rows" + "rows", + "href" ], "ignore": ["Ansible", "Tower", "JSON", "YAML", "lg"], "ignoreComponent": [ diff --git a/awx/ui_next/src/components/DocsLink/DocsLink.jsx b/awx/ui_next/src/components/DocsLink/DocsLink.jsx new file mode 100644 index 0000000000..e69de29bb2 diff --git a/awx/ui_next/src/components/DocsLink/index.jsx b/awx/ui_next/src/components/DocsLink/index.jsx new file mode 100644 index 0000000000..e1344df9d2 --- /dev/null +++ b/awx/ui_next/src/components/DocsLink/index.jsx @@ -0,0 +1 @@ +export { default } from './DocsLink'; diff --git a/awx/ui_next/src/components/Search/AdvancedSearch.jsx b/awx/ui_next/src/components/Search/AdvancedSearch.jsx index 1700846b02..d98f0bbea5 100644 --- a/awx/ui_next/src/components/Search/AdvancedSearch.jsx +++ b/awx/ui_next/src/components/Search/AdvancedSearch.jsx @@ -11,9 +11,12 @@ import { SelectOption, SelectVariant, TextInput, + Tooltip, } from '@patternfly/react-core'; -import { SearchIcon } from '@patternfly/react-icons'; +import { SearchIcon, QuestionCircleIcon } from '@patternfly/react-icons'; import styled from 'styled-components'; +import { useConfig } from '../../contexts/Config'; +import getDocsBaseUrl from '../../util/getDocsBaseUrl'; const AdvancedGroup = styled.div` display: flex; @@ -45,6 +48,7 @@ function AdvancedSearch({ const [lookupSelection, setLookupSelection] = useState(null); const [keySelection, setKeySelection] = useState(null); const [searchValue, setSearchValue] = useState(''); + const config = useConfig(); const handleAdvancedSearch = e => { // keeps page from fully reloading @@ -262,6 +266,19 @@ function AdvancedSearch({ + + + ); } diff --git a/awx/ui_next/src/screens/Job/JobOutput/JobOutput.jsx b/awx/ui_next/src/screens/Job/JobOutput/JobOutput.jsx index 293986b779..06df7fe3cd 100644 --- a/awx/ui_next/src/screens/Job/JobOutput/JobOutput.jsx +++ b/awx/ui_next/src/screens/Job/JobOutput/JobOutput.jsx @@ -21,7 +21,7 @@ import { ToolbarToggleGroup, Tooltip, } from '@patternfly/react-core'; -import { SearchIcon } from '@patternfly/react-icons'; +import { SearchIcon, QuestionCircleIcon } from '@patternfly/react-icons'; import AlertModal from '../../../components/AlertModal'; import { CardBody as _CardBody } from '../../../components/Card'; @@ -47,6 +47,8 @@ import { removeParams, getQSConfig, } from '../../../util/qs'; +import getDocsBaseUrl from '../../../util/getDocsBaseUrl'; +import { useConfig } from '../../../contexts/Config'; const QS_CONFIG = getQSConfig('job_output', { order_by: 'start_line', @@ -280,6 +282,7 @@ function JobOutput({ job, eventRelatedSearchableKeys, eventSearchableKeys }) { const jobSocketCounter = useRef(0); const interval = useRef(null); const history = useHistory(); + const config = useConfig(); const [contentError, setContentError] = useState(null); const [cssMap, setCssMap] = useState({}); const [currentlyLoading, setCurrentlyLoading] = useState([]); @@ -730,6 +733,21 @@ function JobOutput({ job, eventRelatedSearchableKeys, eventSearchableKeys }) { ) : ( renderSearchComponent(i18n) )} + + + diff --git a/awx/ui_next/src/util/getDocsBaseUrl.js b/awx/ui_next/src/util/getDocsBaseUrl.js new file mode 100644 index 0000000000..31fc671de9 --- /dev/null +++ b/awx/ui_next/src/util/getDocsBaseUrl.js @@ -0,0 +1,7 @@ +export default function getDocsBaseUrl(config) { + let version = 'latest'; + if (config?.license_info?.license_type !== 'open') { + version = config?.version ? config.version.split('-')[0] : 'latest'; + } + return `https://docs.ansible.com/ansible-tower/${version}`; +}