]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-15297 Remove all sonar-ui-common initialization logic
authorWouter Admiraal <wouter.admiraal@sonarsource.com>
Thu, 19 Aug 2021 13:03:11 +0000 (15:03 +0200)
committersonartech <sonartech@sonarsource.com>
Fri, 20 Aug 2021 20:03:09 +0000 (20:03 +0000)
48 files changed:
server/sonar-web/config/jest/SetupTestEnvironment.ts
server/sonar-web/src/main/js/app/components/embed-docs-modal/EmbedDocsPopup.tsx
server/sonar-web/src/main/js/app/components/nav/global/GlobalNavBranding.tsx
server/sonar-web/src/main/js/app/components/nav/global/GlobalNavUser.tsx
server/sonar-web/src/main/js/app/components/nav/settings/SettingsNav.tsx
server/sonar-web/src/main/js/app/index.ts
server/sonar-web/src/main/js/apps/about/components/AboutScanners.tsx
server/sonar-web/src/main/js/apps/account/profile/UserExternalIdentity.tsx
server/sonar-web/src/main/js/apps/create/project/AzureProjectCreateRenderer.tsx
server/sonar-web/src/main/js/apps/create/project/BitbucketCloudProjectCreateRender.tsx
server/sonar-web/src/main/js/apps/create/project/BitbucketProjectCreateRenderer.tsx
server/sonar-web/src/main/js/apps/create/project/CreateProjectModeSelection.tsx
server/sonar-web/src/main/js/apps/create/project/GitlabProjectCreateRenderer.tsx
server/sonar-web/src/main/js/apps/create/project/PersonalAccessTokenForm.tsx
server/sonar-web/src/main/js/apps/maintenance/components/App.tsx
server/sonar-web/src/main/js/apps/overview/branches/MeasuresPanelNoNewCode.tsx
server/sonar-web/src/main/js/apps/permissions/__tests__/utils-test.ts
server/sonar-web/src/main/js/apps/projects/components/ProjectCreationMenuItem.tsx
server/sonar-web/src/main/js/apps/projectsManagement/__tests__/Header-test.tsx
server/sonar-web/src/main/js/apps/security-hotspots/components/EmptyHotspotsPage.tsx
server/sonar-web/src/main/js/apps/sessions/components/LoginForm.tsx
server/sonar-web/src/main/js/apps/sessions/components/Logout.tsx
server/sonar-web/src/main/js/apps/sessions/components/OAuthProviders.tsx
server/sonar-web/src/main/js/apps/sessions/components/Unauthorized.tsx
server/sonar-web/src/main/js/apps/settings/components/almIntegration/AlmIntegrationRenderer.tsx
server/sonar-web/src/main/js/apps/system/components/PageActions.tsx
server/sonar-web/src/main/js/apps/users/components/UserListItemIdentity.tsx
server/sonar-web/src/main/js/components/SourceViewer/SourceViewerHeader.tsx
server/sonar-web/src/main/js/components/activity-graph/GraphsHistory.tsx
server/sonar-web/src/main/js/components/controls/IdentityProviderLink.tsx
server/sonar-web/src/main/js/components/controls/Modal.tsx
server/sonar-web/src/main/js/components/docs/DocImg.tsx
server/sonar-web/src/main/js/components/lazyLoadComponent.tsx
server/sonar-web/src/main/js/components/tutorials/TutorialSelectionRenderer.tsx
server/sonar-web/src/main/js/components/tutorials/components/AllSet.tsx
server/sonar-web/src/main/js/components/tutorials/manual/commands/DownloadBuildWrapper.tsx
server/sonar-web/src/main/js/helpers/__tests__/init-test.ts [deleted file]
server/sonar-web/src/main/js/helpers/__tests__/l10n-test.ts
server/sonar-web/src/main/js/helpers/__tests__/measures-test.ts
server/sonar-web/src/main/js/helpers/__tests__/urls-test.ts
server/sonar-web/src/main/js/helpers/browser.ts
server/sonar-web/src/main/js/helpers/extensions.ts
server/sonar-web/src/main/js/helpers/getHistory.ts
server/sonar-web/src/main/js/helpers/init.ts [deleted file]
server/sonar-web/src/main/js/helpers/l10n.ts
server/sonar-web/src/main/js/helpers/request.ts
server/sonar-web/src/main/js/helpers/system.ts
server/sonar-web/src/main/js/helpers/urls.ts

index 9e3b4e53f8629f329bebf80e77b9cf88db3c4d79..e82edbb84a76ec9a64b24673b28dbd194993e827 100644 (file)
@@ -19,7 +19,6 @@
  */
 import * as theme from '../../src/main/js/app/theme';
 import ThemeContext from '../../src/main/js/components/theme';
-import SonarUiCommonInitializer, { DEFAULT_LOCALE } from '../../src/main/js/helpers/init';
 
 const content = document.createElement('div');
 content.id = 'content';
@@ -27,9 +26,6 @@ document.documentElement.appendChild(content);
 
 const baseUrl = '';
 (window as any).baseUrl = baseUrl;
-SonarUiCommonInitializer.setLocale(DEFAULT_LOCALE)
-  .setMessages({})
-  .setUrlContext(baseUrl);
 
 // Hack : override the default value of the context used for theme by emotion
 // This allows tests to get the theme value without specifiying a theme provider
index 41d40dac55e0acd94b1258f06d3a57ba151095c0..d924b95db37f94c3b98387cca6870533bd0325ae 100644 (file)
@@ -21,7 +21,7 @@ import * as React from 'react';
 import { Link } from 'react-router';
 import { DropdownOverlay } from '../../../components/controls/Dropdown';
 import { translate } from '../../../helpers/l10n';
-import { getBaseUrl } from '../../../helpers/urls';
+import { getBaseUrl } from '../../../helpers/system';
 import { SuggestionsContext } from './SuggestionsContext';
 
 interface Props {
index 1bd360c6a7309e3c48f17cde9f8398b9275c15b5..0e6ba57077eca8ea10843466f7aa8a650fd736d1 100644 (file)
@@ -21,7 +21,7 @@ import * as React from 'react';
 import { connect } from 'react-redux';
 import { Link } from 'react-router';
 import { translate } from '../../../../helpers/l10n';
-import { getBaseUrl } from '../../../../helpers/urls';
+import { getBaseUrl } from '../../../../helpers/system';
 import { getGlobalSettingValue, Store } from '../../../../store/rootReducer';
 
 interface StateProps {
index 95a148fb1ee9536684b43732a7055d0985ceb579..8d808a68ac47b8fa90487cef9e055898e3d842d5 100644 (file)
@@ -23,7 +23,7 @@ import Dropdown from '../../../../components/controls/Dropdown';
 import { Router, withRouter } from '../../../../components/hoc/withRouter';
 import Avatar from '../../../../components/ui/Avatar';
 import { translate } from '../../../../helpers/l10n';
-import { getBaseUrl } from '../../../../helpers/urls';
+import { getBaseUrl } from '../../../../helpers/system';
 import { isLoggedIn } from '../../../../helpers/users';
 import { rawSizes } from '../../../theme';
 
index 0712fd67280285a780db94866f9c2f68b84a3382..71bc8cc6b3b2f55489fe06c98e12b4bf6542120b 100644 (file)
@@ -25,7 +25,7 @@ import DropdownIcon from '../../../../components/icons/DropdownIcon';
 import ContextNavBar from '../../../../components/ui/ContextNavBar';
 import NavBarTabs from '../../../../components/ui/NavBarTabs';
 import { translate } from '../../../../helpers/l10n';
-import { getBaseUrl } from '../../../../helpers/urls';
+import { getBaseUrl } from '../../../../helpers/system';
 import { AdminPageExtension } from '../../../../types/extension';
 import { PendingPluginResult } from '../../../../types/plugins';
 import { rawSizes } from '../../../theme';
index cd7c28a8d01eaf1dccd889fb19dd7d82d4159815..8ceaf92f55ff260e46e2c4331237e55f520963ad 100644 (file)
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  */
 import { installExtensionsHandler, installWebAnalyticsHandler } from '../helpers/extensionsHandler';
-import SonarUiCommonInitializer from '../helpers/init';
 import { loadL10nBundle } from '../helpers/l10n';
 import { parseJSON, request } from '../helpers/request';
 import { getBaseUrl, getSystemStatus } from '../helpers/system';
 import './styles/sonar.css';
 
-SonarUiCommonInitializer.setUrlContext(getBaseUrl());
-
 installWebAnalyticsHandler();
 
 if (isMainApp()) {
index bcbd9f92f57e735fd4f6d3e360f54f4872b18639..f557b7966e306c7416723d1c98f2d2ca582d09d1 100644 (file)
@@ -20,7 +20,7 @@
 import * as React from 'react';
 import { Link } from 'react-router';
 import { translate } from '../../../helpers/l10n';
-import { getBaseUrl } from '../../../helpers/urls';
+import { getBaseUrl } from '../../../helpers/system';
 
 const scanners = [
   {
index 822785ab57282be7b115b9684f1cfd39d1afa761..096ec5c438252b8db8e4ed4984bf163b90410bf4 100644 (file)
@@ -21,7 +21,7 @@ import * as React from 'react';
 import { getIdentityProviders } from '../../../api/users';
 import { colors } from '../../../app/theme';
 import { getTextColor } from '../../../helpers/colors';
-import { getBaseUrl } from '../../../helpers/urls';
+import { getBaseUrl } from '../../../helpers/system';
 
 export interface UserExternalIdentityProps {
   user: T.LoggedInUser;
index b68f7eadd9634f81d262e1405b7a5c4fc7594f9d..3c954c02665b2f6e0ac55d8d1e4f638f38b23738 100644 (file)
@@ -22,7 +22,7 @@ import { Button } from '../../../components/controls/buttons';
 import SearchBox from '../../../components/controls/SearchBox';
 import DeferredSpinner from '../../../components/ui/DeferredSpinner';
 import { translate } from '../../../helpers/l10n';
-import { getBaseUrl } from '../../../helpers/urls';
+import { getBaseUrl } from '../../../helpers/system';
 import { AzureProject, AzureRepository } from '../../../types/alm-integration';
 import { AlmKeys, AlmSettingsInstance } from '../../../types/alm-settings';
 import AzurePersonalAccessTokenForm from './AzurePersonalAccessTokenForm';
index 33de2a91863387a8e48528447834d706d32b494f..744b6df114dd05a87fe38acad7b17ba95b4e57dc 100644 (file)
@@ -19,7 +19,7 @@
  */
 import * as React from 'react';
 import { translate } from '../../../helpers/l10n';
-import { getBaseUrl } from '../../../helpers/urls';
+import { getBaseUrl } from '../../../helpers/system';
 import { BitbucketCloudRepository } from '../../../types/alm-integration';
 import { AlmKeys, AlmSettingsInstance } from '../../../types/alm-settings';
 import BitbucketCloudSearchForm from './BitbucketCloudSearchForm';
index 118753f0ad2075f9e77d1f53861fab5198aeea4b..972b367aabb124268bb024a38f8c114f69d3ea88 100644 (file)
@@ -21,7 +21,7 @@ import * as React from 'react';
 import { Button } from '../../../components/controls/buttons';
 import DeferredSpinner from '../../../components/ui/DeferredSpinner';
 import { translate } from '../../../helpers/l10n';
-import { getBaseUrl } from '../../../helpers/urls';
+import { getBaseUrl } from '../../../helpers/system';
 import {
   BitbucketProject,
   BitbucketProjectRepositories,
index f3193c44ce82fb30668c844b658562ee1cfe4be0..6601bb02b5ed0d85997545280379339822d9eec3 100644 (file)
@@ -23,7 +23,7 @@ import { withAppState } from '../../../components/hoc/withAppState';
 import ChevronsIcon from '../../../components/icons/ChevronsIcon';
 import { Alert } from '../../../components/ui/Alert';
 import { translate, translateWithParameters } from '../../../helpers/l10n';
-import { getBaseUrl } from '../../../helpers/urls';
+import { getBaseUrl } from '../../../helpers/system';
 import { AlmKeys } from '../../../types/alm-settings';
 import { CreateProjectModes } from './types';
 
index cc63fc2a66af706530149f76e18ac01183e84563..2b2e761a9d1af9d467e72fc470b44da95cc9968b 100644 (file)
@@ -19,7 +19,7 @@
  */
 import * as React from 'react';
 import { translate } from '../../../helpers/l10n';
-import { getBaseUrl } from '../../../helpers/urls';
+import { getBaseUrl } from '../../../helpers/system';
 import { GitlabProject } from '../../../types/alm-integration';
 import { AlmKeys, AlmSettingsInstance } from '../../../types/alm-settings';
 import CreateProjectPageHeader from './CreateProjectPageHeader';
index b452c0f096e3ea4fb0781ffaa8914e2b73cd782d..114698ed515090d7bbbb9525d782188f6bba49e9 100644 (file)
@@ -29,7 +29,7 @@ import ValidationInput from '../../../components/controls/ValidationInput';
 import { Alert } from '../../../components/ui/Alert';
 import DeferredSpinner from '../../../components/ui/DeferredSpinner';
 import { translate } from '../../../helpers/l10n';
-import { getBaseUrl } from '../../../helpers/urls';
+import { getBaseUrl } from '../../../helpers/system';
 import { AlmKeys, AlmSettingsInstance } from '../../../types/alm-settings';
 
 interface Props {
index 82b66453860019854b14ee980894b3ecb5b6742b..a676f7e2b5c7cd8355689b12e38659e2abc3b667 100644 (file)
@@ -27,8 +27,8 @@ import { Button } from '../../../components/controls/buttons';
 import DateFromNow from '../../../components/intl/DateFromNow';
 import TimeFormatter from '../../../components/intl/TimeFormatter';
 import { translate } from '../../../helpers/l10n';
-import { isSonarCloud } from '../../../helpers/system';
-import { getBaseUrl, getReturnUrl } from '../../../helpers/urls';
+import { getBaseUrl, isSonarCloud } from '../../../helpers/system';
+import { getReturnUrl } from '../../../helpers/urls';
 import '../styles.css';
 
 interface Props {
index e02240a9760de1d20416a89a59c59cf64ba59cf2..a6eaf3cf9417a04bc3c5245e35deb1507c0cb1a3 100644 (file)
@@ -22,7 +22,7 @@ import { FormattedMessage } from 'react-intl';
 import { Link } from 'react-router';
 import { getBranchLikeQuery } from '../../../helpers/branch-like';
 import { translate } from '../../../helpers/l10n';
-import { getBaseUrl } from '../../../helpers/urls';
+import { getBaseUrl } from '../../../helpers/system';
 import { Branch } from '../../../types/branch-like';
 import { ComponentQualifier } from '../../../types/component';
 
index 5c6a1f128a9c44fe65624c38db5fc692b8959f38..a0f55b0bf91268ab702af7caf112271ff9a50487 100644 (file)
  * along with this program; if not, write to the Free Software Foundation,
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  */
-import SonarUiCommonInitializer from '../../../helpers/init';
+import { resetMessages } from '../../../helpers/l10n';
 import { isSonarCloud } from '../../../helpers/system';
 import { convertToPermissionDefinitions } from '../utils';
 
 jest.mock('../../../helpers/system', () => ({ isSonarCloud: jest.fn() }));
 
 afterEach(() => {
-  SonarUiCommonInitializer.setMessages({});
+  resetMessages({});
 });
 
 describe('convertToPermissionDefinitions', () => {
   it('should convert and translate a permission definition', () => {
     (isSonarCloud as jest.Mock).mockImplementation(() => false);
 
-    SonarUiCommonInitializer.setMessages({
+    resetMessages({
       'global_permissions.admin': 'Administer System'
     });
 
@@ -46,7 +46,7 @@ describe('convertToPermissionDefinitions', () => {
   it('should convert and translate a permission definition for SonarCloud', () => {
     (isSonarCloud as jest.Mock).mockImplementation(() => true);
 
-    SonarUiCommonInitializer.setMessages({
+    resetMessages({
       'global_permissions.admin': 'Administer System',
       'global_permissions.admin.sonarcloud': 'Administer Organization'
     });
@@ -66,7 +66,7 @@ describe('convertToPermissionDefinitions', () => {
   it('should fallback to basic message when SonarCloud version does not exist', () => {
     (isSonarCloud as jest.Mock).mockImplementation(() => true);
 
-    SonarUiCommonInitializer.setMessages({
+    resetMessages({
       'global_permissions.admin': 'Administer System'
     });
 
index c34b94152d22db6ad2daa56908cb27ac2a7388e1..d750b387f9785402cbf58be31b466a5438234a57 100644 (file)
@@ -21,7 +21,7 @@ import * as React from 'react';
 import { Link } from 'react-router';
 import ChevronsIcon from '../../../components/icons/ChevronsIcon';
 import { translate } from '../../../helpers/l10n';
-import { getBaseUrl } from '../../../helpers/urls';
+import { getBaseUrl } from '../../../helpers/system';
 import { AlmKeys } from '../../../types/alm-settings';
 
 export interface ProjectCreationMenuItemProps {
index c67e81e0cf6492b43b6d4334f7ea36a874ecd0db..19774442b900673e6bc45733470777b4c7fdccf4 100644 (file)
@@ -22,7 +22,10 @@ import * as React from 'react';
 import { click } from '../../../helpers/testUtils';
 import Header, { Props } from '../Header';
 
-jest.mock('../../../helpers/system', () => ({ isSonarCloud: jest.fn().mockReturnValue(false) }));
+jest.mock('../../../helpers/system', () => ({
+  getReactDomContainerSelector: jest.fn(() => '#content'),
+  isSonarCloud: jest.fn().mockReturnValue(false)
+}));
 
 it('renders', () => {
   expect(shallowRender()).toMatchSnapshot('default');
index ab115bb012827a74210d9cd7de90051df4028dd4..6a3776756b7c22612a38884c45027088c25bd469 100644 (file)
@@ -20,7 +20,7 @@
 import * as React from 'react';
 import { Link } from 'react-router';
 import { translate } from '../../../helpers/l10n';
-import { getBaseUrl } from '../../../helpers/urls';
+import { getBaseUrl } from '../../../helpers/system';
 
 export interface EmptyHotspotsPageProps {
   filtered: boolean;
index 4268892d49227700452d0fbe147b399f4ee062ca..0e607bc59ec5614c419f67c94b7420a47026729f 100644 (file)
@@ -21,7 +21,7 @@ import * as React from 'react';
 import { SubmitButton } from '../../../components/controls/buttons';
 import DeferredSpinner from '../../../components/ui/DeferredSpinner';
 import { translate } from '../../../helpers/l10n';
-import { getBaseUrl } from '../../../helpers/urls';
+import { getBaseUrl } from '../../../helpers/system';
 import './LoginForm.css';
 
 interface Props {
index 8b240308f7eca3a6ba041b8c246fb0e439299d39..48c984df959265bfd05b7a73d4165fc8b62df81d 100644 (file)
@@ -22,7 +22,7 @@ import { connect } from 'react-redux';
 import GlobalMessagesContainer from '../../../app/components/GlobalMessagesContainer';
 import RecentHistory from '../../../app/components/RecentHistory';
 import { translate } from '../../../helpers/l10n';
-import { getBaseUrl } from '../../../helpers/urls';
+import { getBaseUrl } from '../../../helpers/system';
 import { doLogout } from '../../../store/rootActions';
 
 interface Props {
index 85d3ce9cf536ac96e7f223b1b0047cae9ef8e404..8e8ee8f830394efcee01e3e1be513917ca7c166b 100644 (file)
@@ -22,7 +22,7 @@ import * as React from 'react';
 import HelpTooltip from '../../../components/controls/HelpTooltip';
 import IdentityProviderLink from '../../../components/controls/IdentityProviderLink';
 import { translateWithParameters } from '../../../helpers/l10n';
-import { getBaseUrl } from '../../../helpers/urls';
+import { getBaseUrl } from '../../../helpers/system';
 import './OAuthProviders.css';
 
 interface Props {
index c6c7b573e87ad4b0d02cc64d71f8d7fda4626015..e6da089ba73a48e403888638b1efc3b6b3c7cdd2 100644 (file)
@@ -20,7 +20,7 @@
 import * as React from 'react';
 import { getCookie } from '../../../helpers/cookies';
 import { translate } from '../../../helpers/l10n';
-import { getBaseUrl } from '../../../helpers/urls';
+import { getBaseUrl } from '../../../helpers/system';
 
 export default function Unauthorized() {
   const message = decodeURIComponent(getCookie('AUTHENTICATION-ERROR') || '');
index 094c1214e8be1eb169cbe6ce253863a0af10cf05..04bd555a4be92c74fa1731b91b4b62fac9ea718b 100644 (file)
@@ -20,7 +20,7 @@
 import * as React from 'react';
 import BoxedTabs from '../../../../components/controls/BoxedTabs';
 import { translate } from '../../../../helpers/l10n';
-import { getBaseUrl } from '../../../../helpers/urls';
+import { getBaseUrl } from '../../../../helpers/system';
 import {
   AlmKeys,
   AlmSettingsBindingDefinitions,
index 5f3e0887fe9aef9719329a957ab5181bc35c5caa..8554c67f8741784484d042d4e4035ced756a8280 100644 (file)
@@ -24,7 +24,7 @@ import { Button, EditButton } from '../../../components/controls/buttons';
 import Dropdown from '../../../components/controls/Dropdown';
 import DropdownIcon from '../../../components/icons/DropdownIcon';
 import { translate } from '../../../helpers/l10n';
-import { getBaseUrl } from '../../../helpers/urls';
+import { getBaseUrl } from '../../../helpers/system';
 import { getFileNameSuffix } from '../utils';
 import ChangeLogLevelForm from './ChangeLogLevelForm';
 
index 14ba55b04b22a3a68e14107db9b9337357087c41..7ad86650cb6d451059bca87b6fc721a4fc5a4a0c 100644 (file)
@@ -20,7 +20,7 @@
 import * as React from 'react';
 import { colors } from '../../../app/theme';
 import { getTextColor } from '../../../helpers/colors';
-import { getBaseUrl } from '../../../helpers/urls';
+import { getBaseUrl } from '../../../helpers/system';
 
 export interface Props {
   identityProvider?: T.IdentityProvider;
index cbe62d3d0859b11df28c8c74f73f239b6f580290..95172b76ee549103563dadc01db5db99900824d0 100644 (file)
@@ -33,8 +33,8 @@ import { translate } from '../../helpers/l10n';
 import { formatMeasure } from '../../helpers/measures';
 import { collapsedDirFromPath, fileFromPath } from '../../helpers/path';
 import { omitNil } from '../../helpers/request';
+import { getBaseUrl } from '../../helpers/system';
 import {
-  getBaseUrl,
   getBranchLikeUrl,
   getCodeUrl,
   getComponentIssuesUrl,
index 8da9f418f94d4413840c5d36d9c7b92f4c9d0bfa..29d351983c51e046008b27d3e8b8519123339aa0 100644 (file)
@@ -21,7 +21,7 @@ import { isEqual } from 'lodash';
 import * as React from 'react';
 import DeferredSpinner from '../../components/ui/DeferredSpinner';
 import { translate } from '../../helpers/l10n';
-import { getBaseUrl } from '../../helpers/urls';
+import { getBaseUrl } from '../../helpers/system';
 import { GraphType, MeasureHistory, Serie } from '../../types/project-activity';
 import GraphHistory from './GraphHistory';
 import './styles.css';
index 31dd2da7e00169d4d0a3f19b99df1f71087915a5..383a344b6ce071460e0b0a526ad5adae0cf2d41e 100644 (file)
@@ -20,7 +20,7 @@
 import * as classNames from 'classnames';
 import * as React from 'react';
 import { isDarkColor } from '../../helpers/colors';
-import { getBaseUrl } from '../../helpers/urls';
+import { getBaseUrl } from '../../helpers/system';
 import './IdentityProviderLink.css';
 
 interface Props {
index d97d9e1522b1f9916262618918f4f3745c2bec46..b7181e25e1f9ffda38b9a7261721417ce8db847d 100644 (file)
@@ -20,7 +20,7 @@
 import * as classNames from 'classnames';
 import * as React from 'react';
 import * as ReactModal from 'react-modal';
-import { getReactDomContainerSelector } from '../../helpers/init';
+import { getReactDomContainerSelector } from '../../helpers/system';
 import './Modal.css';
 
 ReactModal.setAppElement(getReactDomContainerSelector());
index d8baf103eab742ca9adccfe14155ac33b0e8ee84..67ff35adfeb1bc0d40a690960c05d5174f774406 100644 (file)
@@ -18,7 +18,7 @@
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  */
 import * as React from 'react';
-import { getBaseUrl } from '../../helpers/urls';
+import { getBaseUrl } from '../../helpers/system';
 
 export default function DocImg(props: React.ImgHTMLAttributes<HTMLImageElement>) {
   const { alt, src, ...other } = props;
index d45577895dcf3fccade5b2a6d67640364bab753c..2d6a13f2fc0808021f2f32514ee45785fffac874 100644 (file)
@@ -19,7 +19,7 @@
  */
 import * as React from 'react';
 import { Alert } from '../components/ui/Alert';
-import { IS_SSR } from '../helpers/init';
+import { IS_SSR } from '../helpers/browser';
 import { translate } from '../helpers/l10n';
 import { requestTryAndRepeatUntil } from '../helpers/request';
 
index 39b7a6449ed98d5ac257e9bcbf020501b2fd9c4e..795f1ffbdd10f81df9f94f7858549aa11f8a690b 100644 (file)
@@ -20,7 +20,7 @@
 import * as React from 'react';
 import EllipsisIcon from '../../components/icons/EllipsisIcon';
 import { translate } from '../../helpers/l10n';
-import { getBaseUrl } from '../../helpers/urls';
+import { getBaseUrl } from '../../helpers/system';
 import { AlmKeys, AlmSettingsInstance, ProjectAlmBindingResponse } from '../../types/alm-settings';
 import AzurePipelinesTutorial from './azure-pipelines/AzurePipelinesTutorial';
 import BitbucketPipelinesTutorial from './bitbucket-pipelines/BitbucketPipelinesTutorial';
index 806d1e4215c6045b809f0363f5ab05950fd5c787..fa744dacabd8b846a478c6d8c789114117f4a7b0 100644 (file)
@@ -19,7 +19,7 @@
  */
 import * as React from 'react';
 import { translate } from '../../../helpers/l10n';
-import { getBaseUrl } from '../../../helpers/urls';
+import { getBaseUrl } from '../../../helpers/system';
 import { AlmKeys } from '../../../types/alm-settings';
 import { withAppState } from '../../hoc/withAppState';
 import SentenceWithHighlights from './SentenceWithHighlights';
index 7f53c2048feb6f5b1cc3a03053cac9526ea15f4d..2012d5f095c45329b06ab41b1a4baebb3c142246 100644 (file)
@@ -20,7 +20,7 @@
 import * as React from 'react';
 import { FormattedMessage } from 'react-intl';
 import { translate } from '../../../../helpers/l10n';
-import { getBaseUrl } from '../../../../helpers/urls';
+import { getBaseUrl } from '../../../../helpers/system';
 import { OSs } from '../../types';
 
 export interface DownloadBuildWrapperProps {
diff --git a/server/sonar-web/src/main/js/helpers/__tests__/init-test.ts b/server/sonar-web/src/main/js/helpers/__tests__/init-test.ts
deleted file mode 100644 (file)
index d1251f0..0000000
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2021 SonarSource SA
- * mailto:info AT sonarsource DOT com
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
- */
-/* eslint-disable no-console */
-import Initializer, {
-  DEFAULT_LOCALE,
-  DEFAULT_MESSAGES,
-  getLocale,
-  getMessages,
-  getReactDomContainerSelector,
-  getUrlContext
-} from '../init';
-
-const originalConsoleWarn = console.warn;
-console.warn = jest.fn();
-
-beforeEach(() => {
-  (console.warn as jest.Mock).mockClear();
-});
-
-afterAll(() => {
-  Initializer.setLocale('en')
-    .setMessages({})
-    .setUrlContext('');
-  // @ts-ignore: initialize everything to undefined, not possible by respecting types
-  Initializer.setReactDomContainer(undefined);
-  console.warn = originalConsoleWarn;
-});
-
-it('should throw when trying to get a value without initializing first', () => {
-  // @ts-ignore: initialize react dom container to undefined, not possible by respecting types
-  Initializer.setLocale(undefined)
-    .setMessages(undefined)
-    .setUrlContext(undefined);
-
-  expect(getLocale()).toBe(DEFAULT_LOCALE);
-  expect(console.warn).toHaveBeenLastCalledWith(
-    expect.stringContaining('L10n locale is not initialized')
-  );
-
-  expect(getMessages()).toBe(DEFAULT_MESSAGES);
-  expect(console.warn).toHaveBeenLastCalledWith(
-    expect.stringContaining('L10n messages are not initialized')
-  );
-
-  expect(getUrlContext).toThrowErrorMatchingInlineSnapshot(
-    `"sonar-ui-common init: web context needs to be initialized by Initializer.setUrlContext before being used"`
-  );
-});
-
-it('should return the initialized values', () => {
-  const locale = 'ru';
-  const messages = { any: 'Any' };
-  const urlContext = '/context';
-  const reactDomContainerSelector = '#custom';
-
-  Initializer.setLocale(locale)
-    .setMessages(messages)
-    .setUrlContext(urlContext)
-    .setReactDomContainer(reactDomContainerSelector);
-
-  expect(getLocale()).toBe(locale);
-  expect(getMessages()).toBe(messages);
-  expect(getUrlContext()).toBe(urlContext);
-  expect(getReactDomContainerSelector()).toBe(reactDomContainerSelector);
-  expect(console.warn).not.toBeCalled();
-});
-
-it('should have a default react dom container selector without warning', () => {
-  // @ts-ignore: initialize react dom container to undefined, not possible by respecting types
-  Initializer.setReactDomContainer(undefined);
-
-  expect(getReactDomContainerSelector()).toBe('#content');
-  expect(console.warn).not.toBeCalled();
-});
index 2c4e48221af9d51b856e50015f270a96fa5b1a6e..54378d58b3ba7ddee23a24a4766a1cea73b3d2d3 100644 (file)
  * along with this program; if not, write to the Free Software Foundation,
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  */
-import * as reactIntl from 'react-intl';
 import { fetchL10nBundle } from '../../api/l10n';
-import SonarUiCommonInitializer, { getMessages } from '../init';
 import {
   getLocalizedCategoryMetricName,
   getLocalizedMetricDomain,
   getLocalizedMetricName,
+  getMessages,
   getShortMonthName,
   getShortWeekDayName,
   getWeekDayName,
   hasMessage,
   loadL10nBundle,
+  resetMessages,
   translate,
   translateWithParameters
 } from '../l10n';
@@ -86,35 +86,23 @@ describe('#loadL10nBundle', () => {
       expect.objectContaining({ locale: cachedBundle.locale, messages: cachedBundle.messages })
     );
   });
-
-  it('should init react-intl & sonar-ui-common', async () => {
-    jest.spyOn(SonarUiCommonInitializer, 'setLocale');
-    jest.spyOn(SonarUiCommonInitializer, 'setMessages');
-    jest.spyOn(reactIntl, 'addLocaleData');
-
-    await loadL10nBundle();
-
-    expect(SonarUiCommonInitializer.setLocale).toHaveBeenCalledWith('de');
-    expect(SonarUiCommonInitializer.setMessages).toHaveBeenCalledWith({ test_message: 'test' });
-    expect(reactIntl.addLocaleData).toHaveBeenCalled();
-  });
 });
 
 const originalMessages = getMessages();
 const MSG = 'my_message';
 
 afterEach(() => {
-  SonarUiCommonInitializer.setMessages(originalMessages);
+  resetMessages(originalMessages);
 });
 
 describe('translate', () => {
   it('should translate simple message', () => {
-    SonarUiCommonInitializer.setMessages({ my_key: MSG });
+    resetMessages({ my_key: MSG });
     expect(translate('my_key')).toBe(MSG);
   });
 
   it('should translate message with composite key', () => {
-    SonarUiCommonInitializer.setMessages({ 'my.composite.message': MSG });
+    resetMessages({ 'my.composite.message': MSG });
     expect(translate('my', 'composite', 'message')).toBe(MSG);
     expect(translate('my.composite', 'message')).toBe(MSG);
     expect(translate('my', 'composite.message')).toBe(MSG);
@@ -130,22 +118,22 @@ describe('translate', () => {
 
 describe('translateWithParameters', () => {
   it('should translate message with one parameter in the beginning', () => {
-    SonarUiCommonInitializer.setMessages({ x_apples: '{0} apples' });
+    resetMessages({ x_apples: '{0} apples' });
     expect(translateWithParameters('x_apples', 5)).toBe('5 apples');
   });
 
   it('should translate message with one parameter in the middle', () => {
-    SonarUiCommonInitializer.setMessages({ x_apples: 'I have {0} apples' });
+    resetMessages({ x_apples: 'I have {0} apples' });
     expect(translateWithParameters('x_apples', 5)).toBe('I have 5 apples');
   });
 
   it('should translate message with one parameter in the end', () => {
-    SonarUiCommonInitializer.setMessages({ x_apples: 'Apples: {0}' });
+    resetMessages({ x_apples: 'Apples: {0}' });
     expect(translateWithParameters('x_apples', 5)).toBe('Apples: 5');
   });
 
   it('should translate message with several parameters', () => {
-    SonarUiCommonInitializer.setMessages({
+    resetMessages({
       x_apples: '{0}: I have {2} apples in my {1} baskets - {3}'
     });
     expect(translateWithParameters('x_apples', 1, 2, 3, 4)).toBe(
@@ -154,7 +142,7 @@ describe('translateWithParameters', () => {
   });
 
   it('should not be affected by replacement pattern XSS vulnerability of String.replace', () => {
-    SonarUiCommonInitializer.setMessages({ x_apples: 'I have {0} apples' });
+    resetMessages({ x_apples: 'I have {0} apples' });
     expect(translateWithParameters('x_apples', '$`')).toBe('I have $` apples');
   });
 
@@ -167,7 +155,7 @@ describe('translateWithParameters', () => {
 
 describe('hasMessage', () => {
   it('should return that the message exists', () => {
-    SonarUiCommonInitializer.setMessages({ foo: 'Foo', 'foo.bar': 'Foo Bar' });
+    resetMessages({ foo: 'Foo', 'foo.bar': 'Foo Bar' });
     expect(hasMessage('foo')).toBe(true);
     expect(hasMessage('foo', 'bar')).toBe(true);
   });
@@ -182,19 +170,19 @@ describe('getLocalizedMetricName', () => {
   const metric = { key: 'new_code', name: 'new_code_metric_name' };
 
   it('should return the metric name translation', () => {
-    SonarUiCommonInitializer.setMessages({ 'metric.new_code.name': 'metric.new_code.name_t' });
+    resetMessages({ 'metric.new_code.name': 'metric.new_code.name_t' });
     expect(getLocalizedMetricName(metric)).toBe('metric.new_code.name_t');
   });
 
   it('should return the metric short name', () => {
-    SonarUiCommonInitializer.setMessages({
+    resetMessages({
       'metric.new_code.short_name': 'metric.new_code.short_name_t'
     });
     expect(getLocalizedMetricName(metric, true)).toBe('metric.new_code.short_name_t');
   });
 
   it('should fallback on name if short name is absent', () => {
-    SonarUiCommonInitializer.setMessages({ 'metric.new_code.name': 'metric.new_code.name_t' });
+    resetMessages({ 'metric.new_code.name': 'metric.new_code.name_t' });
     expect(getLocalizedMetricName(metric, true)).toBe('metric.new_code.name_t');
   });
 
@@ -209,7 +197,7 @@ describe('getLocalizedMetricName', () => {
 
 describe('getLocalizedCategoryMetricName', () => {
   it('should return metric category name translation', () => {
-    SonarUiCommonInitializer.setMessages({
+    resetMessages({
       'metric.new_code.extra_short_name': 'metric.new_code.extra_short_name_t'
     });
     expect(getLocalizedCategoryMetricName({ key: 'new_code' })).toBe(
@@ -218,14 +206,14 @@ describe('getLocalizedCategoryMetricName', () => {
   });
 
   it('should fallback on metric name if extra_short_name is absent', () => {
-    SonarUiCommonInitializer.setMessages({ 'metric.new_code.name': 'metric.new_code.name_t' });
+    resetMessages({ 'metric.new_code.name': 'metric.new_code.name_t' });
     expect(getLocalizedCategoryMetricName({ key: 'new_code' })).toBe('metric.new_code.name_t');
   });
 });
 
 describe('getLocalizedMetricDomain', () => {
   it('should return metric domain name translation', () => {
-    SonarUiCommonInitializer.setMessages({ 'metric_domain.domain': 'metric_domain.domain_t' });
+    resetMessages({ 'metric_domain.domain': 'metric_domain.domain_t' });
     expect(getLocalizedMetricDomain('domain')).toBe('metric_domain.domain_t');
   });
 
@@ -236,21 +224,21 @@ describe('getLocalizedMetricDomain', () => {
 
 describe('getShortMonthName', () => {
   it('should properly translation months', () => {
-    SonarUiCommonInitializer.setMessages({ Jan: 'Jan_t' });
+    resetMessages({ Jan: 'Jan_t' });
     expect(getShortMonthName(0)).toBe('Jan_t');
   });
 });
 
 describe('getWeekDayName', () => {
   it('should properly translation weekday', () => {
-    SonarUiCommonInitializer.setMessages({ Sunday: 'Sunday_t' });
+    resetMessages({ Sunday: 'Sunday_t' });
     expect(getWeekDayName(0)).toBe('Sunday_t');
   });
 });
 
 describe('getShortWeekDayName', () => {
   it('should properly translation short weekday', () => {
-    SonarUiCommonInitializer.setMessages({ Sun: 'Sun_t' });
+    resetMessages({ Sun: 'Sun_t' });
     expect(getShortWeekDayName(0)).toBe('Sun_t');
   });
 });
index 2bc23d79beca65629ec24abc15feb29022cc335a..7671fc99a0c32ba7c34be0dd4c9c801b519f4dc4 100644 (file)
@@ -17,7 +17,7 @@
  * along with this program; if not, write to the Free Software Foundation,
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  */
-import SonarUiCommonInitializer from '../init';
+import { resetMessages } from '../l10n';
 import {
   enhanceConditionWithMeasure,
   formatMeasure,
@@ -77,7 +77,7 @@ const ONE_HOUR = ONE_MINUTE * 60;
 const ONE_DAY = HOURS_IN_DAY * ONE_HOUR;
 
 beforeAll(() => {
-  SonarUiCommonInitializer.setMessages({
+  resetMessages({
     'work_duration.x_days': '{0}d',
     'work_duration.x_hours': '{0}h',
     'work_duration.x_minutes': '{0}min',
@@ -92,7 +92,7 @@ beforeAll(() => {
 });
 
 afterAll(() => {
-  SonarUiCommonInitializer.setMessages({});
+  resetMessages({});
 });
 
 describe('#formatMeasure()', () => {
index 79e986cb91333dfa22e7b959d510512b1f9616fb..7e067b7aa9eea655da6f5c544c69b14bda1dd5f5 100644 (file)
@@ -20,7 +20,6 @@
 import { AlmKeys } from '../../types/alm-settings';
 import { ComponentQualifier } from '../../types/component';
 import { IssueType } from '../../types/issues';
-import SonarUICommonInitializer from '../init';
 import {
   convertGithubApiUrlToLink,
   getComponentDrilldownUrl,
@@ -186,10 +185,6 @@ describe('#getProjectSettingsUrl', () => {
   });
 });
 
-afterEach(() => {
-  SonarUICommonInitializer.setUrlContext('');
-});
-
 describe('#getPathUrlAsString', () => {
   it('should return component url', () => {
     expect(
@@ -202,13 +197,6 @@ describe('#getPathUrlAsString', () => {
       getPathUrlAsString({ pathname: '/dashboard', query: { id: COMPLEX_COMPONENT_KEY } })
     ).toBe('/dashboard?id=' + COMPLEX_COMPONENT_KEY_ENCODED);
   });
-
-  it('should take baseUrl into account', () => {
-    SonarUICommonInitializer.setUrlContext('/context');
-    expect(
-      getPathUrlAsString({ pathname: '/dashboard', query: { id: COMPLEX_COMPONENT_KEY } })
-    ).toBe('/context/dashboard?id=' + COMPLEX_COMPONENT_KEY_ENCODED);
-  });
 });
 
 describe('#getReturnUrl', () => {
index e9a8fe5221faeda978c58d684bbf675bf28b88f4..9ae20d2657e6ba71c4351567339156fc09e0b1f1 100644 (file)
@@ -19,6 +19,8 @@
  */
 import { EnhancedWindow } from '../types/browser';
 
+export const IS_SSR = typeof window === 'undefined';
+
 export function getEnhancedWindow() {
   return (window as unknown) as EnhancedWindow;
 }
index 484a085bc942159ebd1f5f4b6b2174a2eb5d4df6..7b1ef7286d08836c683c7d28855836e98cfd3568 100644 (file)
@@ -17,7 +17,7 @@
  * along with this program; if not, write to the Free Software Foundation,
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  */
-import { getBaseUrl } from '../helpers/urls';
+import { getBaseUrl } from '../helpers/system';
 import { getExtensionFromCache } from './extensionsHandler';
 
 let librariesExposed = false;
index ea76f47a724b8726167572796927fe15101c9438..16a66d584a214bd6cb2256024ced21ae8a6a99b6 100644 (file)
  */
 import { createHistory, History } from 'history';
 import { useRouterHistory } from 'react-router';
-import { getUrlContext } from './init';
+import { getBaseUrl } from './system';
 
 let history: History;
 
 function ensureHistory() {
   // eslint-disable-next-line react-hooks/rules-of-hooks
   history = useRouterHistory(createHistory)({
-    basename: getUrlContext()
+    basename: getBaseUrl()
   });
   return history;
 }
diff --git a/server/sonar-web/src/main/js/helpers/init.ts b/server/sonar-web/src/main/js/helpers/init.ts
deleted file mode 100644 (file)
index fd9ab57..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2021 SonarSource SA
- * mailto:info AT sonarsource DOT com
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
- */
-import { Messages } from './l10n';
-
-let urlContext: string | undefined; // Is the base path (web context) in SQ
-let messages: Messages | undefined;
-let locale: string | undefined;
-let reactDomContainerSelector: string | undefined; // CSS selector of the DOM node where the React App is attached
-
-export const IS_SSR = typeof window === 'undefined';
-export const DEFAULT_LOCALE = 'en';
-export const DEFAULT_MESSAGES = {
-  // eslint-disable-next-line camelcase
-  default_error_message: 'The request cannot be processed. Try again later.'
-};
-const LOGGER_PREFIX = 'sonar-ui-common init:';
-
-export default {
-  setUrlContext(newUrlContext?: string) {
-    urlContext = newUrlContext;
-    return this;
-  },
-  setLocale(newLocale: string) {
-    locale = newLocale;
-    return this;
-  },
-  setMessages(newMessages?: Messages) {
-    messages = newMessages;
-    return this;
-  },
-  setReactDomContainer(nodeSelector: string) {
-    reactDomContainerSelector = nodeSelector;
-    return this;
-  }
-};
-
-export function getMessages() {
-  if (typeof messages === 'undefined') {
-    logWarning('L10n messages are not initialized. Use default messages.');
-    return DEFAULT_MESSAGES;
-  }
-  return messages;
-}
-
-export function getLocale() {
-  if (typeof locale === 'undefined') {
-    logWarning('L10n locale is not initialized. Use default locale.');
-    return DEFAULT_LOCALE;
-  }
-  return locale;
-}
-
-export function getReactDomContainerSelector() {
-  return reactDomContainerSelector || '#content';
-}
-
-export function getUrlContext() {
-  if (typeof urlContext === 'undefined') {
-    throw new Error(
-      `${LOGGER_PREFIX} web context needs to be initialized by Initializer.setUrlContext before being used`
-    );
-  }
-  return urlContext;
-}
-
-function logWarning(message: string) {
-  if (process.env.NODE_ENV !== 'production') {
-    // eslint-disable-next-line no-console
-    console.warn(`${LOGGER_PREFIX} ${message}`);
-  }
-}
index 01a93305912355b88932bc5c5b2ec41823c8dc87..a96f34682c26dd99f717ef470d5ebdfc78972148 100644 (file)
 import { fetchL10nBundle } from '../api/l10n';
 import { L10nBundle, L10nBundleRequestParams } from '../types/l10n';
 import { toNotSoISOString } from './dates';
-import SonarUiCommonInitializer, { DEFAULT_LOCALE, getLocale, getMessages } from './init';
 import { get as loadFromLocalStorage, save as saveInLocalStorage } from './storage';
 
 export type Messages = T.Dict<string>;
 
+export const DEFAULT_LOCALE = 'en';
+export const DEFAULT_MESSAGES = {
+  // eslint-disable-next-line camelcase
+  default_error_message: 'The request cannot be processed. Try again later.'
+};
+
+let allMessages: Messages = {};
+let locale: string | undefined;
+
 export function translate(...keys: string[]): string {
   const messageKey = keys.join('.');
   const l10nMessages = getMessages();
@@ -57,6 +65,18 @@ export function hasMessage(...keys: string[]): boolean {
   return getMessages()[messageKey] != null;
 }
 
+export function getMessages() {
+  if (typeof allMessages === 'undefined') {
+    logWarning('L10n messages are not initialized. Use default messages.');
+    return DEFAULT_MESSAGES;
+  }
+  return allMessages;
+}
+
+export function resetMessages(newMessages: Messages) {
+  allMessages = newMessages;
+}
+
 export function getLocalizedMetricName(
   metric: { key: string; name?: string },
   short = false
@@ -81,7 +101,11 @@ export function getLocalizedMetricDomain(domainName: string) {
 }
 
 export function getCurrentLocale() {
-  return getLocale();
+  return locale;
+}
+
+export function resetCurrentLocale(newLocale: string) {
+  locale = newLocale;
 }
 
 export function getShortMonthName(index: number) {
@@ -120,7 +144,9 @@ export async function loadL10nBundle() {
     messages: {}
   }));
 
-  SonarUiCommonInitializer.setLocale(bundle.locale).setMessages(bundle.messages);
+  resetCurrentLocale(bundle.locale);
+  resetMessages(bundle.messages);
+
   // No need to load english (default) bundle, it's coming with react-intl
   if (bundle.locale !== DEFAULT_LOCALE) {
     const [intlBundle, intl] = await Promise.all([
@@ -159,9 +185,8 @@ export async function getLatestL10nBundle() {
         effectiveLocale: cachedBundle.locale || browserLocale || DEFAULT_LOCALE,
         messages: cachedBundle.messages ?? {}
       };
-    } else {
-      throw new Error(`Unexpected status code: ${response.status}`);
     }
+    throw new Error(`Unexpected status code: ${response.status}`);
   });
 
   const bundle = {
@@ -198,3 +223,10 @@ function loadL10nBundleFromLocalStorage() {
 function saveL10nBundleToLocalStorage(bundle: L10nBundle) {
   saveInLocalStorage(L10N_BUNDLE_LS_KEY, JSON.stringify(bundle));
 }
+
+function logWarning(message: string) {
+  if (process.env.NODE_ENV !== 'production') {
+    // eslint-disable-next-line no-console
+    console.warn(message);
+  }
+}
index e3ede0d98435ec6779838d69beb1f60844155357..686ea3a218cb2119ff0ab8015e3ae6e3f750aab5 100644 (file)
@@ -20,8 +20,8 @@
 import { isNil, omitBy } from 'lodash';
 import { stringify } from 'querystring';
 import { getCookie } from './cookies';
-import { getUrlContext } from './init';
 import { translate } from './l10n';
+import { getBaseUrl } from './system';
 
 export function getCSRFTokenName(): string {
   return 'X-XSRF-TOKEN';
@@ -110,7 +110,7 @@ class Request {
 
   submit(): Promise<Response> {
     const { url, options } = this.getSubmitData({ ...getCSRFToken() });
-    return window.fetch(getUrlContext() + url, options);
+    return window.fetch(getBaseUrl() + url, options);
   }
 
   setMethod(method: string): Request {
index e7e53e5b966cce9c13bdabe9b5667354d8307c60..f93cf592ead66fb8784f043af16a25e164a74919 100644 (file)
@@ -39,3 +39,7 @@ export function isOfficial() {
 export function isSonarCloud() {
   return getInstance() === InstanceType.SonarCloud;
 }
+
+export function getReactDomContainerSelector() {
+  return '#content';
+}
index 118b15f8a7052eecdc74cdd32a90a979b6ea1aae..d0a95a62878333d5d58cde731669ed9f7aa6401c 100644 (file)
@@ -25,7 +25,8 @@ import { ComponentQualifier, isApplication, isPortfolioLike } from '../types/com
 import { GraphType } from '../types/project-activity';
 import { SecurityStandard } from '../types/security';
 import { getBranchLikeQuery, isBranch, isMainBranch, isPullRequest } from './branch-like';
-import { getUrlContext, IS_SSR } from './init';
+import { IS_SSR } from './browser';
+import { getBaseUrl } from './system';
 
 export interface Location {
   pathname: string;
@@ -315,10 +316,6 @@ export function stripTrailingSlash(url: string) {
   return url.replace(/\/$/, '');
 }
 
-export function getBaseUrl(): string {
-  return getUrlContext();
-}
-
 export function getHostUrl(): string {
   if (IS_SSR) {
     throw new Error('No host url available on server side.');