From 982ba2999674768245cc20150fc37c6259204b39 Mon Sep 17 00:00:00 2001 From: stanislavh Date: Mon, 13 Feb 2023 11:44:11 +0100 Subject: [PATCH] SONAR-18128 SONAR-18358 SONAR-18368 Page titles do not identify purpose of pages --- .../main/js/app/components/AdminContainer.tsx | 12 +++++--- .../AdminContainer-test.tsx.snap | 3 +- .../src/main/js/app/utils/startReactApp.tsx | 4 ++- .../coding-rules/__tests__/CodingRules-it.ts | 2 +- .../{App.tsx => CodingRulesApp.tsx} | 28 +++++++++++-------- .../{App-test.tsx => CodingRulesApp-test.tsx} | 8 +++--- ....tsx.snap => CodingRulesApp-test.tsx.snap} | 0 .../src/main/js/apps/coding-rules/routes.tsx | 4 +-- .../{App.tsx => ComponentMeasuresApp.tsx} | 25 +++-------------- ...test.tsx => ComponentMeasuresApp-test.tsx} | 8 +++--- ...nap => ComponentMeasuresApp-test.tsx.snap} | 6 ++-- .../js/apps/component-measures/routes.tsx | 4 +-- .../js/apps/issues/components/IssuesApp.tsx | 13 ++++++++- .../js/apps/quality-gates/components/App.tsx | 11 ++++++-- .../components/ProfileContainer.tsx | 10 ++++++- .../resources/org/sonar/l10n/core.properties | 4 ++- 16 files changed, 80 insertions(+), 62 deletions(-) rename server/sonar-web/src/main/js/apps/coding-rules/components/{App.tsx => CodingRulesApp.tsx} (97%) rename server/sonar-web/src/main/js/apps/coding-rules/components/__tests__/{App-test.tsx => CodingRulesApp-test.tsx} (95%) rename server/sonar-web/src/main/js/apps/coding-rules/components/__tests__/__snapshots__/{App-test.tsx.snap => CodingRulesApp-test.tsx.snap} (100%) rename server/sonar-web/src/main/js/apps/component-measures/components/{App.tsx => ComponentMeasuresApp.tsx} (93%) rename server/sonar-web/src/main/js/apps/component-measures/components/__tests__/{App-test.tsx => ComponentMeasuresApp-test.tsx} (96%) rename server/sonar-web/src/main/js/apps/component-measures/components/__tests__/__snapshots__/{App-test.tsx.snap => ComponentMeasuresApp-test.tsx.snap} (98%) diff --git a/server/sonar-web/src/main/js/app/components/AdminContainer.tsx b/server/sonar-web/src/main/js/app/components/AdminContainer.tsx index bcc5dc09267..82ab8d97641 100644 --- a/server/sonar-web/src/main/js/app/components/AdminContainer.tsx +++ b/server/sonar-web/src/main/js/app/components/AdminContainer.tsx @@ -24,7 +24,7 @@ import { getSettingsNavigation } from '../../api/navigation'; import { getPendingPlugins } from '../../api/plugins'; import { getSystemStatus, waitSystemUPStatus } from '../../api/system'; import handleRequiredAuthorization from '../../app/utils/handleRequiredAuthorization'; -import { translate } from '../../helpers/l10n'; +import { translate, translateWithParameters } from '../../helpers/l10n'; import { AdminPagesContext } from '../../types/admin'; import { AppState } from '../../types/appstate'; import { PendingPluginResult } from '../../types/plugins'; @@ -119,13 +119,17 @@ export class AdminContainer extends React.PureComponent - + + {renderRedirects()} diff --git a/server/sonar-web/src/main/js/apps/coding-rules/__tests__/CodingRules-it.ts b/server/sonar-web/src/main/js/apps/coding-rules/__tests__/CodingRules-it.ts index 00fe9b0ff43..9750dfc6762 100644 --- a/server/sonar-web/src/main/js/apps/coding-rules/__tests__/CodingRules-it.ts +++ b/server/sonar-web/src/main/js/apps/coding-rules/__tests__/CodingRules-it.ts @@ -75,7 +75,7 @@ it('should show open rule with default description section', async () => { expect( await screen.findByRole('heading', { level: 1, name: 'Awsome java rule' }) ).toBeInTheDocument(); - expect(document.title).toEqual('coding_rule.page.Java.Awsome java rule'); + expect(document.title).toEqual('page_title.template.with_category.coding_rules.page'); expect(screen.getByText('Why')).toBeInTheDocument(); expect(screen.getByText('Because')).toBeInTheDocument(); }); diff --git a/server/sonar-web/src/main/js/apps/coding-rules/components/App.tsx b/server/sonar-web/src/main/js/apps/coding-rules/components/CodingRulesApp.tsx similarity index 97% rename from server/sonar-web/src/main/js/apps/coding-rules/components/App.tsx rename to server/sonar-web/src/main/js/apps/coding-rules/components/CodingRulesApp.tsx index c69234ee29c..79dcc48d547 100644 --- a/server/sonar-web/src/main/js/apps/coding-rules/components/App.tsx +++ b/server/sonar-web/src/main/js/apps/coding-rules/components/CodingRulesApp.tsx @@ -96,7 +96,7 @@ interface State { rules: Rule[]; } -export class App extends React.PureComponent { +export class CodingRulesApp extends React.PureComponent { mounted = false; constructor(props: Props) { @@ -562,16 +562,20 @@ export class App extends React.PureComponent { return ( <> - - - + {openRule ? ( + + ) : ( + + + + )}
{({ top }) => ( @@ -715,4 +719,4 @@ function parseFacets(rawFacets: { property: string; values: { count: number; val return facets; } -export default withRouter(withCurrentUserContext(App)); +export default withRouter(withCurrentUserContext(CodingRulesApp)); diff --git a/server/sonar-web/src/main/js/apps/coding-rules/components/__tests__/App-test.tsx b/server/sonar-web/src/main/js/apps/coding-rules/components/__tests__/CodingRulesApp-test.tsx similarity index 95% rename from server/sonar-web/src/main/js/apps/coding-rules/components/__tests__/App-test.tsx rename to server/sonar-web/src/main/js/apps/coding-rules/components/__tests__/CodingRulesApp-test.tsx index aa18b5cba52..09ccc3496a5 100644 --- a/server/sonar-web/src/main/js/apps/coding-rules/components/__tests__/App-test.tsx +++ b/server/sonar-web/src/main/js/apps/coding-rules/components/__tests__/CodingRulesApp-test.tsx @@ -29,7 +29,7 @@ import { mockRouter, } from '../../../../helpers/testMocks'; import { waitAndUpdate } from '../../../../helpers/testUtils'; -import { App } from '../App'; +import { CodingRulesApp } from '../CodingRulesApp'; jest.mock('../../../../components/common/ScreenPositionHelper'); @@ -105,9 +105,9 @@ describe('renderBulkButton', () => { }); }); -function shallowRender(props: Partial = {}) { - return shallow( - = {}) { + return shallow( + ; + return ; } const routes = () => } />; diff --git a/server/sonar-web/src/main/js/apps/component-measures/components/App.tsx b/server/sonar-web/src/main/js/apps/component-measures/components/ComponentMeasuresApp.tsx similarity index 93% rename from server/sonar-web/src/main/js/apps/component-measures/components/App.tsx rename to server/sonar-web/src/main/js/apps/component-measures/components/ComponentMeasuresApp.tsx index 922fa2d0906..b5d7f9da79c 100644 --- a/server/sonar-web/src/main/js/apps/component-measures/components/App.tsx +++ b/server/sonar-web/src/main/js/apps/component-measures/components/ComponentMeasuresApp.tsx @@ -33,11 +33,7 @@ import { enhanceMeasure } from '../../../components/measure/utils'; import '../../../components/search-navigator.css'; import { Alert } from '../../../components/ui/Alert'; import { getBranchLikeQuery, isPullRequest, isSameBranchLike } from '../../../helpers/branch-like'; -import { - getLocalizedMetricDomain, - translate, - translateWithParameters, -} from '../../../helpers/l10n'; +import { translate } from '../../../helpers/l10n'; import { addSideBarClass, addWhitePageClass, @@ -64,7 +60,6 @@ import { hasFullMeasures, hasTree, hasTreemap, - isProjectOverview, parseQuery, Query, serializeQuery, @@ -89,7 +84,7 @@ interface State { metrics: Dict; } -export class App extends React.PureComponent { +export class ComponentMeasuresApp extends React.PureComponent { mounted = false; state: State; @@ -174,18 +169,6 @@ export class App extends React.PureComponent { ); } - getHelmetTitle = (query: Query, displayOverview: boolean, metric?: Metric) => { - if (displayOverview && query.metric) { - return isProjectOverview(query.metric) - ? translate('component_measures.overview.project_overview.facet') - : translateWithParameters( - 'component_measures.domain_x_overview', - getLocalizedMetricDomain(query.metric) - ); - } - return metric ? metric.name : translate('layout.measures'); - }; - getSelectedMetric = (query: Query, displayOverview: boolean) => { if (displayOverview) { return undefined; @@ -310,7 +293,7 @@ export class App extends React.PureComponent { return (
- + {measures.length > 0 ? (
@@ -368,7 +351,7 @@ const AlertContent = styled.div` * is that we can't use the usual withComponentContext HOC, because the type * of `component` isn't the same. It probably used to work because of the lazy loading */ -const WrappedApp = withRouter(withBranchStatusActions(App)); +const WrappedApp = withRouter(withBranchStatusActions(ComponentMeasuresApp)); function AppWithComponentContext() { const { branchLike, component } = React.useContext(ComponentContext); diff --git a/server/sonar-web/src/main/js/apps/component-measures/components/__tests__/App-test.tsx b/server/sonar-web/src/main/js/apps/component-measures/components/__tests__/ComponentMeasuresApp-test.tsx similarity index 96% rename from server/sonar-web/src/main/js/apps/component-measures/components/__tests__/App-test.tsx rename to server/sonar-web/src/main/js/apps/component-measures/components/__tests__/ComponentMeasuresApp-test.tsx index 373b501acf9..f7751cebc97 100644 --- a/server/sonar-web/src/main/js/apps/component-measures/components/__tests__/App-test.tsx +++ b/server/sonar-web/src/main/js/apps/component-measures/components/__tests__/ComponentMeasuresApp-test.tsx @@ -27,7 +27,7 @@ import { mockComponent } from '../../../../helpers/mocks/component'; import { mockIssue, mockLocation, mockRouter } from '../../../../helpers/testMocks'; import { waitAndUpdate } from '../../../../helpers/testUtils'; import { ComponentQualifier } from '../../../../types/component'; -import { App } from '../App'; +import { ComponentMeasuresApp } from '../ComponentMeasuresApp'; jest.mock('../../../../api/metrics', () => ({ getAllMetrics: jest.fn().mockResolvedValue([ @@ -151,9 +151,9 @@ it.each([ } ); -function shallowRender(props: Partial = {}) { - return shallow( - = {}) { + return shallow( +
@@ -123,7 +123,7 @@ exports[`should render correctly 1`] = ` defer={false} encodeSpecialCharacters={true} prioritizeSeoTags={false} - title="Coverage" + title="layout.measures" />
( - } /> + } /> { id="issues-page" > - + {openIssue ? ( + + ) : ( + + )}

{translate('issues.page')}

diff --git a/server/sonar-web/src/main/js/apps/quality-gates/components/App.tsx b/server/sonar-web/src/main/js/apps/quality-gates/components/App.tsx index 87cb5a6097c..a0ce8d48ab9 100644 --- a/server/sonar-web/src/main/js/apps/quality-gates/components/App.tsx +++ b/server/sonar-web/src/main/js/apps/quality-gates/components/App.tsx @@ -25,7 +25,7 @@ import ScreenPositionHelper from '../../../components/common/ScreenPositionHelpe import Suggestions from '../../../components/embed-docs-modal/Suggestions'; import '../../../components/search-navigator.css'; import DeferredSpinner from '../../../components/ui/DeferredSpinner'; -import { translate } from '../../../helpers/l10n'; +import { translate, translateWithParameters } from '../../../helpers/l10n'; import { addSideBarClass, addWhitePageClass, @@ -113,11 +113,16 @@ class App extends React.PureComponent { render() { const { name } = this.props; const { canCreate, qualityGates } = this.state; - const defaultTitle = translate('quality_gates.page'); return ( <> - +
diff --git a/server/sonar-web/src/main/js/apps/quality-profiles/components/ProfileContainer.tsx b/server/sonar-web/src/main/js/apps/quality-profiles/components/ProfileContainer.tsx index 5588a4d15b9..77ac4b8d845 100644 --- a/server/sonar-web/src/main/js/apps/quality-profiles/components/ProfileContainer.tsx +++ b/server/sonar-web/src/main/js/apps/quality-profiles/components/ProfileContainer.tsx @@ -21,6 +21,7 @@ import * as React from 'react'; import { Helmet } from 'react-helmet-async'; import { Outlet, useSearchParams } from 'react-router-dom'; import { useLocation } from '../../../components/hoc/withRouter'; +import { translate, translateWithParameters } from '../../../helpers/l10n'; import ProfileHeader from '../details/ProfileHeader'; import { useQualityProfilesContext } from '../qualityProfilesContext'; import ProfileNotFound from './ProfileNotFound'; @@ -58,7 +59,14 @@ export default function ProfileContainer() { return (
- + 1} diff --git a/sonar-core/src/main/resources/org/sonar/l10n/core.properties b/sonar-core/src/main/resources/org/sonar/l10n/core.properties index 9ff58aa9d78..f2b0b5cdebd 100644 --- a/sonar-core/src/main/resources/org/sonar/l10n/core.properties +++ b/sonar-core/src/main/resources/org/sonar/l10n/core.properties @@ -675,6 +675,8 @@ regulatory_page.select_branch=Select Branch # #------------------------------------------------------------------------------ +page_title.template.default=%s - SonarQube +page_title.template.with_category=%s - {0} - SonarQube overview.page=Overview code.page=Code permissions.page=Permissions @@ -1656,7 +1658,7 @@ project.info.see_more_info_on_x_locs=See more information on your {0} lines of c #------------------------------------------------------------------------------ quality_profiles.page_title_changelog_x={0} - Quality profile changelog -quality_profiles.page_title_compare_x={0} - Quality profile comparaison +quality_profiles.page_title_compare_x={0} - Quality profile comparison quality_profiles.new_profile=New Quality Profile quality_profiles.compare_with=Compare with quality_profiles.filter_by=Filter profiles by -- 2.39.5