From 6bdc00cdb4f213710b5d03033a1c131ea22b75fb Mon Sep 17 00:00:00 2001 From: Stas Vilchik Date: Fri, 9 Sep 2016 17:38:06 +0200 Subject: [PATCH] fix conflicts between domain on web api page --- .../src/main/js/apps/web-api/components/Menu.js | 5 ++--- .../js/apps/web-api/components/WebApiApp.js | 5 +++-- .../sonar-web/src/main/js/apps/web-api/utils.js | 17 +++++++++++++++++ 3 files changed, 22 insertions(+), 5 deletions(-) diff --git a/server/sonar-web/src/main/js/apps/web-api/components/Menu.js b/server/sonar-web/src/main/js/apps/web-api/components/Menu.js index ba2938ca171..af81e50fb45 100644 --- a/server/sonar-web/src/main/js/apps/web-api/components/Menu.js +++ b/server/sonar-web/src/main/js/apps/web-api/components/Menu.js @@ -20,10 +20,9 @@ import React from 'react'; import { Link } from 'react-router'; import classNames from 'classnames'; - import InternalBadge from './InternalBadge'; import { TooltipsContainer } from '../../../components/mixins/tooltips-mixin'; -import { getActionKey } from '../utils'; +import { getActionKey, isDomainPathActive } from '../utils'; export default function Menu ({ domains, showInternal, showOnlyDeprecated, searchQuery, splat }) { const filteredDomains = (domains || []) @@ -50,7 +49,7 @@ export default function Menu ({ domains, showInternal, showOnlyDeprecated, searc {filteredDomains.map(domain => (

{domain.path} diff --git a/server/sonar-web/src/main/js/apps/web-api/components/WebApiApp.js b/server/sonar-web/src/main/js/apps/web-api/components/WebApiApp.js index 332d18f1399..3ca3b93312b 100644 --- a/server/sonar-web/src/main/js/apps/web-api/components/WebApiApp.js +++ b/server/sonar-web/src/main/js/apps/web-api/components/WebApiApp.js @@ -25,6 +25,7 @@ import Menu from './Menu'; import Search from './Search'; import Domain from './Domain'; import { getActionKey } from '../utils'; +import { isDomainPathActive } from '../utils'; export default class WebApiApp extends React.Component { state = { @@ -104,7 +105,7 @@ export default class WebApiApp extends React.Component { const { splat } = this.props.params; const { router } = this.context; const { domains } = this.state; - const domain = domains.find(domain => splat.indexOf(domain.path) === 0); + const domain = domains.find(domain => isDomainPathActive(domain.path, splat)); const showInternal = !this.state.showInternal; if (domain && domain.internal && !showInternal) { @@ -122,7 +123,7 @@ export default class WebApiApp extends React.Component { const { splat } = this.props.params; const { domains, showInternal, showOnlyDeprecated, searchQuery } = this.state; - const domain = domains.find(domain => splat.indexOf(domain.path) === 0); + const domain = domains.find(domain => isDomainPathActive(domain.path, splat)); return (
diff --git a/server/sonar-web/src/main/js/apps/web-api/utils.js b/server/sonar-web/src/main/js/apps/web-api/utils.js index 6e6de08af2d..4dd0d06d14a 100644 --- a/server/sonar-web/src/main/js/apps/web-api/utils.js +++ b/server/sonar-web/src/main/js/apps/web-api/utils.js @@ -20,3 +20,20 @@ export function getActionKey (domain, action) { return domain + '/' + action; } + +export const isDomainPathActive = (path, splat) => { + const pathTokens = path.split('/'); + const splatTokens = splat.split('/'); + + if (pathTokens.length > splatTokens.length) { + return false; + } + + for (let i = 0; i < pathTokens.length; i++) { + if (pathTokens[i] !== splatTokens[i]) { + return false; + } + } + + return true; +}; -- 2.39.5