diff options
author | Stas Vilchik <stas.vilchik@sonarsource.com> | 2018-12-05 17:32:18 +0100 |
---|---|---|
committer | SonarTech <sonartech@sonarsource.com> | 2018-12-05 20:20:59 +0100 |
commit | 41c98779d38bda9fdfdca182a5f20c73fcff9a84 (patch) | |
tree | d895a9f8bfd0276aee5ffacf7bb33a0109436cbd /server/sonar-web/src/main/js/apps/component-measures | |
parent | a9c22c1185c5fd8c8dc4c9388f4a3b967e3f463d (diff) | |
download | sonarqube-41c98779d38bda9fdfdca182a5f20c73fcff9a84.tar.gz sonarqube-41c98779d38bda9fdfdca182a5f20c73fcff9a84.zip |
create global type definitions (#1017)
Diffstat (limited to 'server/sonar-web/src/main/js/apps/component-measures')
28 files changed, 167 insertions, 237 deletions
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/App.tsx index 3ecb85b9786..25348fb55db 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/App.tsx @@ -50,37 +50,33 @@ import { translate } from '../../../helpers/l10n'; import { RawQuery } from '../../../helpers/query'; -import { - BranchLike, - ComponentMeasure, - CurrentUser, - MeasureEnhanced, - Metric, - Period -} from '../../../app/types'; import '../../../components/search-navigator.css'; import '../style.css'; interface Props { - branchLike?: BranchLike; - component: ComponentMeasure; - currentUser: CurrentUser; + branchLike?: T.BranchLike; + component: T.ComponentMeasure; + currentUser: T.CurrentUser; location: { pathname: string; query: RawQuery }; fetchMeasures: ( component: string, metricsKey: string[], - branchLike?: BranchLike - ) => Promise<{ component: ComponentMeasure; measures: MeasureEnhanced[]; leakPeriod?: Period }>; + branchLike?: T.BranchLike + ) => Promise<{ + component: T.ComponentMeasure; + measures: T.MeasureEnhanced[]; + leakPeriod?: T.Period; + }>; fetchMetrics: () => void; - metrics: { [metric: string]: Metric }; + metrics: { [metric: string]: T.Metric }; metricsKey: string[]; router: InjectedRouter; } interface State { loading: boolean; - measures: MeasureEnhanced[]; - leakPeriod?: Period; + measures: T.MeasureEnhanced[]; + leakPeriod?: T.Period; } export default class App extends React.PureComponent<Props, State> { @@ -162,7 +158,7 @@ export default class App extends React.PureComponent<Props, State> { ); }; - getHelmetTitle = (query: Query, displayOverview: boolean, metric?: Metric) => { + getHelmetTitle = (query: Query, displayOverview: boolean, metric?: T.Metric) => { if (displayOverview && query.metric) { return isProjectOverview(query.metric) ? translate('component_measures.overview.project_overview.facet') @@ -205,7 +201,7 @@ export default class App extends React.PureComponent<Props, State> { }); }; - renderContent = (displayOverview: boolean, query: Query, metric?: Metric) => { + renderContent = (displayOverview: boolean, query: Query, metric?: T.Metric) => { const { branchLike, component, fetchMeasures, metrics } = this.props; const { leakPeriod } = this.state; if (displayOverview) { diff --git a/server/sonar-web/src/main/js/apps/component-measures/components/AppContainer.tsx b/server/sonar-web/src/main/js/apps/component-measures/components/AppContainer.tsx index 5f332e09455..ae7a599a5aa 100644 --- a/server/sonar-web/src/main/js/apps/component-measures/components/AppContainer.tsx +++ b/server/sonar-web/src/main/js/apps/component-measures/components/AppContainer.tsx @@ -28,19 +28,10 @@ import { getMeasuresAndMeta } from '../../../api/measures'; import { getLeakPeriod } from '../../../helpers/periods'; import { enhanceMeasure } from '../../../components/measure/utils'; import { getBranchLikeQuery } from '../../../helpers/branches'; -import { - BranchLike, - ComponentMeasure, - CurrentUser, - Measure, - MeasureEnhanced, - Metric, - Period -} from '../../../app/types'; interface StateToProps { - currentUser: CurrentUser; - metrics: { [metric: string]: Metric }; + currentUser: T.CurrentUser; + metrics: { [metric: string]: T.Metric }; metricsKey: string[]; } @@ -48,14 +39,18 @@ interface DispatchToProps { fetchMeasures: ( component: string, metricsKey: string[], - branchLike?: BranchLike - ) => Promise<{ component: ComponentMeasure; measures: MeasureEnhanced[]; leakPeriod?: Period }>; + branchLike?: T.BranchLike + ) => Promise<{ + component: T.ComponentMeasure; + measures: T.MeasureEnhanced[]; + leakPeriod?: T.Period; + }>; fetchMetrics: () => void; } interface OwnProps { - branchLike?: BranchLike; - component: ComponentMeasure; + branchLike?: T.BranchLike; + component: T.ComponentMeasure; } const mapStateToProps = (state: any): StateToProps => ({ @@ -64,7 +59,7 @@ const mapStateToProps = (state: any): StateToProps => ({ metricsKey: getMetricsKey(state) }); -function banQualityGate({ measures = [], qualifier }: ComponentMeasure): Measure[] { +function banQualityGate({ measures = [], qualifier }: T.ComponentMeasure): T.Measure[] { const bannedMetrics: string[] = []; if (!['VW', 'SVW'].includes(qualifier)) { bannedMetrics.push('alert_status'); @@ -75,7 +70,7 @@ function banQualityGate({ measures = [], qualifier }: ComponentMeasure): Measure return measures.filter(measure => !bannedMetrics.includes(measure.metric)); } -const fetchMeasures = (component: string, metricsKey: string[], branchLike?: BranchLike) => ( +const fetchMeasures = (component: string, metricsKey: string[], branchLike?: T.BranchLike) => ( _dispatch: Dispatch, getState: () => any ) => { @@ -92,7 +87,7 @@ const fetchMeasures = (component: string, metricsKey: string[], branchLike?: Bra ); const newBugs = measures.find(measure => measure.metric.key === 'new_bugs'); - const applicationPeriods = newBugs ? [{ index: 1 } as Period] : []; + const applicationPeriods = newBugs ? [{ index: 1 } as T.Period] : []; const leakPeriod = getLeakPeriod(component.qualifier === 'APP' ? applicationPeriods : periods); return { component, measures, leakPeriod }; }, throwGlobalError); diff --git a/server/sonar-web/src/main/js/apps/component-measures/components/Breadcrumb.tsx b/server/sonar-web/src/main/js/apps/component-measures/components/Breadcrumb.tsx index 326401a8377..17e53750aaa 100644 --- a/server/sonar-web/src/main/js/apps/component-measures/components/Breadcrumb.tsx +++ b/server/sonar-web/src/main/js/apps/component-measures/components/Breadcrumb.tsx @@ -20,11 +20,10 @@ import * as React from 'react'; import Tooltip from '../../../components/controls/Tooltip'; import { collapsePath, limitComponentName } from '../../../helpers/path'; -import { ComponentMeasure } from '../../../app/types'; interface Props { canBrowse: boolean; - component: ComponentMeasure; + component: T.ComponentMeasure; isLast: boolean; handleSelect: (component: string) => void; } diff --git a/server/sonar-web/src/main/js/apps/component-measures/components/Breadcrumbs.tsx b/server/sonar-web/src/main/js/apps/component-measures/components/Breadcrumbs.tsx index f90d46e7550..926f96c80b8 100644 --- a/server/sonar-web/src/main/js/apps/component-measures/components/Breadcrumbs.tsx +++ b/server/sonar-web/src/main/js/apps/component-measures/components/Breadcrumbs.tsx @@ -22,19 +22,18 @@ import * as key from 'keymaster'; import Breadcrumb from './Breadcrumb'; import { getBreadcrumbs } from '../../../api/components'; import { getBranchLikeQuery } from '../../../helpers/branches'; -import { BranchLike, ComponentMeasure } from '../../../app/types'; interface Props { backToFirst: boolean; - branchLike?: BranchLike; + branchLike?: T.BranchLike; className?: string; - component: ComponentMeasure; + component: T.ComponentMeasure; handleSelect: (component: string) => void; - rootComponent: ComponentMeasure; + rootComponent: T.ComponentMeasure; } interface State { - breadcrumbs: ComponentMeasure[]; + breadcrumbs: T.ComponentMeasure[]; } export default class Breadcrumbs extends React.PureComponent<Props, State> { diff --git a/server/sonar-web/src/main/js/apps/component-measures/components/LeakPeriodLegend.tsx b/server/sonar-web/src/main/js/apps/component-measures/components/LeakPeriodLegend.tsx index 57362e1933f..9f145e734af 100644 --- a/server/sonar-web/src/main/js/apps/component-measures/components/LeakPeriodLegend.tsx +++ b/server/sonar-web/src/main/js/apps/component-measures/components/LeakPeriodLegend.tsx @@ -27,12 +27,11 @@ import Tooltip from '../../../components/controls/Tooltip'; import { getPeriodLabel, getPeriodDate } from '../../../helpers/periods'; import { translate, translateWithParameters } from '../../../helpers/l10n'; import { differenceInDays } from '../../../helpers/dates'; -import { ComponentMeasure, Period, PeriodMode } from '../../../app/types'; interface Props { className?: string; - component: ComponentMeasure; - period: Period; + component: T.ComponentMeasure; + period: T.Period; } export default class LeakPeriodLegend extends React.PureComponent<Props> { @@ -62,7 +61,7 @@ export default class LeakPeriodLegend extends React.PureComponent<Props> { </div> ); - if (period.mode === PeriodMode.Days) { + if (period.mode === 'days') { return label; } diff --git a/server/sonar-web/src/main/js/apps/component-measures/components/MeasureContent.tsx b/server/sonar-web/src/main/js/apps/component-measures/components/MeasureContent.tsx index 7d795c8d1f8..c9ddae92ee3 100644 --- a/server/sonar-web/src/main/js/apps/component-measures/components/MeasureContent.tsx +++ b/server/sonar-web/src/main/js/apps/component-measures/components/MeasureContent.tsx @@ -36,33 +36,23 @@ import { getProjectUrl } from '../../../helpers/urls'; import { isDiffMetric } from '../../../helpers/measures'; import { isSameBranchLike, getBranchLikeQuery } from '../../../helpers/branches'; import DeferredSpinner from '../../../components/common/DeferredSpinner'; -import { - BranchLike, - ComponentMeasure, - ComponentMeasureEnhanced, - CurrentUser, - Metric, - Paging, - MeasureEnhanced, - Period -} from '../../../app/types'; import { RequestData } from '../../../helpers/request'; import { isLoggedIn } from '../../../helpers/users'; interface Props { - branchLike?: BranchLike; + branchLike?: T.BranchLike; className?: string; - component: ComponentMeasure; - currentUser: CurrentUser; + component: T.ComponentMeasure; + currentUser: T.CurrentUser; loading: boolean; loadingMore: boolean; - leakPeriod?: Period; - measure?: MeasureEnhanced; - metric: Metric; - metrics: { [metric: string]: Metric }; - rootComponent: ComponentMeasure; + leakPeriod?: T.Period; + measure?: T.MeasureEnhanced; + metric: T.Metric; + metrics: { [metric: string]: T.Metric }; + rootComponent: T.ComponentMeasure; router: InjectedRouter; - secondaryMeasure?: MeasureEnhanced; + secondaryMeasure?: T.MeasureEnhanced; updateLoading: (param: { [key: string]: boolean }) => void; updateSelected: (component: string) => void; updateView: (view: string) => void; @@ -70,9 +60,9 @@ interface Props { } interface State { - components: ComponentMeasureEnhanced[]; - metric?: Metric; - paging?: Paging; + components: T.ComponentMeasureEnhanced[]; + metric?: T.Metric; + paging?: T.Paging; selected?: string; view?: string; } @@ -109,7 +99,7 @@ export default class MeasureContent extends React.PureComponent<Props, State> { return index !== -1 ? index : undefined; }; - getComponentRequestParams = (view: string, metric: Metric, options: Object = {}) => { + getComponentRequestParams = (view: string, metric: T.Metric, options: Object = {}) => { const strategy = view === 'list' ? 'leaves' : 'children'; const metricKeys = [metric.key]; const opts: RequestData = { diff --git a/server/sonar-web/src/main/js/apps/component-measures/components/MeasureContentContainer.tsx b/server/sonar-web/src/main/js/apps/component-measures/components/MeasureContentContainer.tsx index c8a1301038d..0a756d3b8ad 100644 --- a/server/sonar-web/src/main/js/apps/component-measures/components/MeasureContentContainer.tsx +++ b/server/sonar-web/src/main/js/apps/component-measures/components/MeasureContentContainer.tsx @@ -21,28 +21,20 @@ import * as React from 'react'; import { InjectedRouter } from 'react-router'; import MeasureContent from './MeasureContent'; import { Query } from '../utils'; -import { - ComponentMeasure, - Metric, - BranchLike, - CurrentUser, - MeasureEnhanced, - Period -} from '../../../app/types'; interface Props { - branchLike?: BranchLike; + branchLike?: T.BranchLike; className?: string; - currentUser: CurrentUser; - rootComponent: ComponentMeasure; + currentUser: T.CurrentUser; + rootComponent: T.ComponentMeasure; fetchMeasures: ( component: string, metricsKey: string[], - branchLike?: BranchLike - ) => Promise<{ component: ComponentMeasure; measures: MeasureEnhanced[] }>; - leakPeriod?: Period; - metric: Metric; - metrics: { [metric: string]: Metric }; + branchLike?: T.BranchLike + ) => Promise<{ component: T.ComponentMeasure; measures: T.MeasureEnhanced[] }>; + leakPeriod?: T.Period; + metric: T.Metric; + metrics: { [metric: string]: T.Metric }; router: InjectedRouter; selected?: string; updateQuery: (query: Partial<Query>) => void; @@ -56,10 +48,10 @@ interface LoadingState { } interface State { - component?: ComponentMeasure; + component?: T.ComponentMeasure; loading: LoadingState; - measure?: MeasureEnhanced; - secondaryMeasure?: MeasureEnhanced; + measure?: T.MeasureEnhanced; + secondaryMeasure?: T.MeasureEnhanced; } export default class MeasureContentContainer extends React.PureComponent<Props, State> { diff --git a/server/sonar-web/src/main/js/apps/component-measures/components/MeasureFavoriteContainer.tsx b/server/sonar-web/src/main/js/apps/component-measures/components/MeasureFavoriteContainer.tsx index d062ad6af50..43e4148b94d 100644 --- a/server/sonar-web/src/main/js/apps/component-measures/components/MeasureFavoriteContainer.tsx +++ b/server/sonar-web/src/main/js/apps/component-measures/components/MeasureFavoriteContainer.tsx @@ -21,12 +21,11 @@ import * as React from 'react'; import Favorite from '../../../components/controls/Favorite'; import { getComponentForSourceViewer } from '../../../api/components'; import { isMainBranch } from '../../../helpers/branches'; -import { BranchLike, SourceViewerFile } from '../../../app/types'; -type FavComponent = Pick<SourceViewerFile, 'canMarkAsFavorite' | 'fav' | 'key' | 'q'>; +type FavComponent = Pick<T.SourceViewerFile, 'canMarkAsFavorite' | 'fav' | 'key' | 'q'>; interface Props { - branchLike?: BranchLike; + branchLike?: T.BranchLike; className?: string; component: string; } diff --git a/server/sonar-web/src/main/js/apps/component-measures/components/MeasureHeader.tsx b/server/sonar-web/src/main/js/apps/component-measures/components/MeasureHeader.tsx index d85dcc4a067..59e894f6aae 100644 --- a/server/sonar-web/src/main/js/apps/component-measures/components/MeasureHeader.tsx +++ b/server/sonar-web/src/main/js/apps/component-measures/components/MeasureHeader.tsx @@ -28,16 +28,15 @@ import Tooltip from '../../../components/controls/Tooltip'; import { getLocalizedMetricName, translate } from '../../../helpers/l10n'; import { getMeasureHistoryUrl } from '../../../helpers/urls'; import { isDiffMetric } from '../../../helpers/measures'; -import { BranchLike, ComponentMeasure, MeasureEnhanced, Metric, Period } from '../../../app/types'; import { hasFullMeasures } from '../utils'; interface Props { - branchLike?: BranchLike; - component: ComponentMeasure; - leakPeriod?: Period; - measure?: MeasureEnhanced; - metric: Metric; - secondaryMeasure?: MeasureEnhanced; + branchLike?: T.BranchLike; + component: T.ComponentMeasure; + leakPeriod?: T.Period; + measure?: T.MeasureEnhanced; + metric: T.Metric; + secondaryMeasure?: T.MeasureEnhanced; } export default function MeasureHeader(props: Props) { diff --git a/server/sonar-web/src/main/js/apps/component-measures/components/MeasureOverview.tsx b/server/sonar-web/src/main/js/apps/component-measures/components/MeasureOverview.tsx index 18c34ea5d4a..7c049607c45 100644 --- a/server/sonar-web/src/main/js/apps/component-measures/components/MeasureOverview.tsx +++ b/server/sonar-web/src/main/js/apps/component-measures/components/MeasureOverview.tsx @@ -28,33 +28,24 @@ import { getComponentLeaves } from '../../../api/components'; import { enhanceComponent, getBubbleMetrics, isFileType } from '../utils'; import { getBranchLikeQuery } from '../../../helpers/branches'; import DeferredSpinner from '../../../components/common/DeferredSpinner'; -import { - BranchLike, - ComponentMeasure, - ComponentMeasureEnhanced, - CurrentUser, - Metric, - Paging, - Period -} from '../../../app/types'; interface Props { - branchLike?: BranchLike; + branchLike?: T.BranchLike; className?: string; - component: ComponentMeasure; - currentUser: CurrentUser; + component: T.ComponentMeasure; + currentUser: T.CurrentUser; domain: string; - leakPeriod?: Period; + leakPeriod?: T.Period; loading: boolean; - metrics: { [metric: string]: Metric }; - rootComponent: ComponentMeasure; + metrics: { [metric: string]: T.Metric }; + rootComponent: T.ComponentMeasure; updateLoading: (param: { [key: string]: boolean }) => void; updateSelected: (component: string) => void; } interface State { - components: ComponentMeasureEnhanced[]; - paging?: Paging; + components: T.ComponentMeasureEnhanced[]; + paging?: T.Paging; } const BUBBLES_LIMIT = 500; diff --git a/server/sonar-web/src/main/js/apps/component-measures/components/MeasureOverviewContainer.tsx b/server/sonar-web/src/main/js/apps/component-measures/components/MeasureOverviewContainer.tsx index 642cde71e20..db3a5229e37 100644 --- a/server/sonar-web/src/main/js/apps/component-measures/components/MeasureOverviewContainer.tsx +++ b/server/sonar-web/src/main/js/apps/component-measures/components/MeasureOverviewContainer.tsx @@ -24,16 +24,15 @@ import { getComponentShow } from '../../../api/components'; import { getProjectUrl } from '../../../helpers/urls'; import { isViewType, Query } from '../utils'; import { getBranchLikeQuery } from '../../../helpers/branches'; -import { BranchLike, ComponentMeasure, CurrentUser, Metric, Period } from '../../../app/types'; interface Props { - branchLike?: BranchLike; + branchLike?: T.BranchLike; className?: string; - currentUser: CurrentUser; + currentUser: T.CurrentUser; domain: string; - leakPeriod?: Period; - metrics: { [metric: string]: Metric }; - rootComponent: ComponentMeasure; + leakPeriod?: T.Period; + metrics: { [metric: string]: T.Metric }; + rootComponent: T.ComponentMeasure; router: InjectedRouter; selected?: string; updateQuery: (query: Partial<Query>) => void; @@ -45,7 +44,7 @@ interface LoadingState { } interface State { - component?: ComponentMeasure; + component?: T.ComponentMeasure; loading: LoadingState; } diff --git a/server/sonar-web/src/main/js/apps/component-measures/components/MeasureViewSelect.tsx b/server/sonar-web/src/main/js/apps/component-measures/components/MeasureViewSelect.tsx index 69347353959..cd84ac1c88d 100644 --- a/server/sonar-web/src/main/js/apps/component-measures/components/MeasureViewSelect.tsx +++ b/server/sonar-web/src/main/js/apps/component-measures/components/MeasureViewSelect.tsx @@ -24,11 +24,10 @@ import TreemapIcon from '../../../components/icons-components/TreemapIcon'; import Select from '../../../components/controls/Select'; import { hasList, hasTree, hasTreemap } from '../utils'; import { translate } from '../../../helpers/l10n'; -import { Metric } from '../../../app/types'; interface Props { className?: string; - metric: Metric; + metric: T.Metric; handleViewChange: (view: string) => void; view: string; } diff --git a/server/sonar-web/src/main/js/apps/component-measures/components/PageActions.tsx b/server/sonar-web/src/main/js/apps/component-measures/components/PageActions.tsx index 75078edb21a..8417f05b294 100644 --- a/server/sonar-web/src/main/js/apps/component-measures/components/PageActions.tsx +++ b/server/sonar-web/src/main/js/apps/component-measures/components/PageActions.tsx @@ -20,12 +20,11 @@ import * as React from 'react'; import FilesCounter from './FilesCounter'; import { translate } from '../../../helpers/l10n'; -import { Paging } from '../../../app/types'; interface Props { current?: number; isFile?: boolean; - paging?: Paging; + paging?: T.Paging; totalLoadedComponents?: number; view?: string; } diff --git a/server/sonar-web/src/main/js/apps/component-measures/components/__tests__/LeakPeriodLegend-test.tsx b/server/sonar-web/src/main/js/apps/component-measures/components/__tests__/LeakPeriodLegend-test.tsx index be616b62017..3aa1046f6dc 100644 --- a/server/sonar-web/src/main/js/apps/component-measures/components/__tests__/LeakPeriodLegend-test.tsx +++ b/server/sonar-web/src/main/js/apps/component-measures/components/__tests__/LeakPeriodLegend-test.tsx @@ -21,7 +21,6 @@ import * as React from 'react'; import { shallow } from 'enzyme'; import LeakPeriodLegend from '../LeakPeriodLegend'; import { differenceInDays } from '../../../../helpers/dates'; -import { ComponentMeasure, Period, PeriodMode } from '../../../../app/types'; jest.mock('../../../../helpers/dates', () => { const dates = require.requireActual('../../../../helpers/dates'); @@ -41,17 +40,17 @@ const APP = { qualifier: 'APP' }; -const PERIOD = { +const PERIOD: T.Period = { date: '2017-05-16T13:50:02+0200', index: 1, - mode: PeriodMode.PreviousVersion, + mode: 'previous_version', parameter: '6,4' }; -const PERIOD_DAYS = { +const PERIOD_DAYS: T.Period = { date: '2017-05-16T13:50:02+0200', index: 1, - mode: PeriodMode.Days, + mode: 'days', parameter: '18' }; @@ -69,7 +68,7 @@ it('should render a more precise date', () => { expect(getWrapper(PROJECT, PERIOD)).toMatchSnapshot(); }); -function getWrapper(component: ComponentMeasure, period: Period) { +function getWrapper(component: T.ComponentMeasure, period: T.Period) { return shallow(<LeakPeriodLegend component={component} period={period} />, { context: { intl: { formatDate: (date: string) => 'formatted.' + date } diff --git a/server/sonar-web/src/main/js/apps/component-measures/components/__tests__/MeasureHeader-test.tsx b/server/sonar-web/src/main/js/apps/component-measures/components/__tests__/MeasureHeader-test.tsx index 2df222654bd..9b43b1ce72b 100644 --- a/server/sonar-web/src/main/js/apps/component-measures/components/__tests__/MeasureHeader-test.tsx +++ b/server/sonar-web/src/main/js/apps/component-measures/components/__tests__/MeasureHeader-test.tsx @@ -20,7 +20,6 @@ import * as React from 'react'; import { shallow } from 'enzyme'; import MeasureHeader from '../MeasureHeader'; -import { PeriodMode } from '../../../../app/types'; const METRIC = { id: '1', @@ -64,9 +63,9 @@ const PROPS = { leakPeriod: { date: '2017-05-16T13:50:02+0200', index: 1, - mode: PeriodMode.PreviousVersion, + mode: 'previous_version', parameter: '6,4' - }, + } as T.Period, measure: MEASURE, metric: METRIC }; diff --git a/server/sonar-web/src/main/js/apps/component-measures/components/__tests__/MeasureViewSelect-test.tsx b/server/sonar-web/src/main/js/apps/component-measures/components/__tests__/MeasureViewSelect-test.tsx index a54ea14a3a1..c1d6e7cfda8 100644 --- a/server/sonar-web/src/main/js/apps/component-measures/components/__tests__/MeasureViewSelect-test.tsx +++ b/server/sonar-web/src/main/js/apps/component-measures/components/__tests__/MeasureViewSelect-test.tsx @@ -20,14 +20,13 @@ import * as React from 'react'; import { shallow } from 'enzyme'; import MeasureViewSelect from '../MeasureViewSelect'; -import { Metric } from '../../../../app/types'; it('should display correctly with treemap option', () => { expect( shallow( <MeasureViewSelect handleViewChange={() => {}} - metric={{ type: 'PERCENT' } as Metric} + metric={{ type: 'PERCENT' } as T.Metric} view="tree" /> ) diff --git a/server/sonar-web/src/main/js/apps/component-measures/drilldown/BubbleChart.tsx b/server/sonar-web/src/main/js/apps/component-measures/drilldown/BubbleChart.tsx index 0c07b5a249f..c52981c4872 100644 --- a/server/sonar-web/src/main/js/apps/component-measures/drilldown/BubbleChart.tsx +++ b/server/sonar-web/src/main/js/apps/component-measures/drilldown/BubbleChart.tsx @@ -31,20 +31,19 @@ import { } from '../../../helpers/l10n'; import { getBubbleMetrics, getBubbleYDomain, isProjectOverview } from '../utils'; import { RATING_COLORS } from '../../../helpers/constants'; -import { ComponentMeasure, ComponentMeasureEnhanced, Metric } from '../../../app/types'; const HEIGHT = 500; interface Props { - component: ComponentMeasure; - components: ComponentMeasureEnhanced[]; + component: T.ComponentMeasure; + components: T.ComponentMeasureEnhanced[]; domain: string; - metrics: { [metric: string]: Metric }; + metrics: { [metric: string]: T.Metric }; updateSelected: (component: string) => void; } export default class BubbleChart extends React.PureComponent<Props> { - getMeasureVal = (component: ComponentMeasureEnhanced, metric: Metric) => { + getMeasureVal = (component: T.ComponentMeasureEnhanced, metric: T.Metric) => { const measure = component.measures.find(measure => measure.metric.key === metric.key); if (!measure) { return undefined; @@ -55,7 +54,7 @@ export default class BubbleChart extends React.PureComponent<Props> { getTooltip( componentName: string, values: { x: number; y: number; size: number; colors?: Array<number | undefined> }, - metrics: { x: Metric; y: Metric; size: Metric; colors?: Array<Metric> } + metrics: { x: T.Metric; y: T.Metric; size: T.Metric; colors?: T.Metric[] } ) { const inner = [ componentName, @@ -85,7 +84,7 @@ export default class BubbleChart extends React.PureComponent<Props> { ); } - handleBubbleClick = (component: ComponentMeasureEnhanced) => + handleBubbleClick = (component: T.ComponentMeasureEnhanced) => this.props.updateSelected(component.refKey || component.key); getDescription(domain: string) { @@ -97,7 +96,7 @@ export default class BubbleChart extends React.PureComponent<Props> { return translatedDescription; } - renderBubbleChart(metrics: { x: Metric; y: Metric; size: Metric; colors?: Metric[] }) { + renderBubbleChart(metrics: { x: T.Metric; y: T.Metric; size: T.Metric; colors?: T.Metric[] }) { const items = this.props.components .map(component => { const x = this.getMeasureVal(component, metrics.x); @@ -120,13 +119,13 @@ export default class BubbleChart extends React.PureComponent<Props> { tooltip: this.getTooltip(component.name, { x, y, size, colors }, metrics) }; }) - .filter(Boolean) as BubbleItem<ComponentMeasureEnhanced>[]; + .filter(Boolean) as BubbleItem<T.ComponentMeasureEnhanced>[]; const formatXTick = (tick: string | number | undefined) => formatMeasure(tick, metrics.x.type); const formatYTick = (tick: string | number | undefined) => formatMeasure(tick, metrics.y.type); return ( - <OriginalBubbleChart<ComponentMeasureEnhanced> + <OriginalBubbleChart<T.ComponentMeasureEnhanced> formatXTick={formatXTick} formatYTick={formatYTick} height={HEIGHT} @@ -138,7 +137,7 @@ export default class BubbleChart extends React.PureComponent<Props> { ); } - renderChartHeader(domain: string, sizeMetric: Metric, colorsMetric?: Metric[]) { + renderChartHeader(domain: string, sizeMetric: T.Metric, colorsMetric?: T.Metric[]) { const title = isProjectOverview(domain) ? translate('component_measures.overview', domain, 'title') : translateWithParameters( diff --git a/server/sonar-web/src/main/js/apps/component-measures/drilldown/CodeView.tsx b/server/sonar-web/src/main/js/apps/component-measures/drilldown/CodeView.tsx index a07eb4710c2..9dd42f1299f 100644 --- a/server/sonar-web/src/main/js/apps/component-measures/drilldown/CodeView.tsx +++ b/server/sonar-web/src/main/js/apps/component-measures/drilldown/CodeView.tsx @@ -20,20 +20,13 @@ import * as React from 'react'; import * as key from 'keymaster'; import SourceViewer from '../../../components/SourceViewer/SourceViewer'; -import { - BranchLike, - ComponentMeasure, - ComponentMeasureEnhanced, - Metric, - Period -} from '../../../app/types'; interface Props { - branchLike?: BranchLike; - component: ComponentMeasure; - components: Array<ComponentMeasureEnhanced>; - leakPeriod?: Period; - metric: Metric; + branchLike?: T.BranchLike; + component: T.ComponentMeasure; + components: T.ComponentMeasureEnhanced[]; + leakPeriod?: T.Period; + metric: T.Metric; selectedIdx?: number; updateSelected: (component: string) => void; } diff --git a/server/sonar-web/src/main/js/apps/component-measures/drilldown/ComponentCell.tsx b/server/sonar-web/src/main/js/apps/component-measures/drilldown/ComponentCell.tsx index 4ddcd665e7b..071f6f2c7b6 100644 --- a/server/sonar-web/src/main/js/apps/component-measures/drilldown/ComponentCell.tsx +++ b/server/sonar-web/src/main/js/apps/component-measures/drilldown/ComponentCell.tsx @@ -30,14 +30,13 @@ import { getProjectUrl } from '../../../helpers/urls'; import { translate } from '../../../helpers/l10n'; -import { BranchLike, ComponentMeasure, ComponentMeasureEnhanced, Metric } from '../../../app/types'; interface Props { - branchLike?: BranchLike; - component: ComponentMeasureEnhanced; + branchLike?: T.BranchLike; + component: T.ComponentMeasureEnhanced; onClick: (component: string) => void; - metric: Metric; - rootComponent: ComponentMeasure; + metric: T.Metric; + rootComponent: T.ComponentMeasure; } export default class ComponentCell extends React.PureComponent<Props> { diff --git a/server/sonar-web/src/main/js/apps/component-measures/drilldown/ComponentsList.tsx b/server/sonar-web/src/main/js/apps/component-measures/drilldown/ComponentsList.tsx index 957fdc7b3e5..01cf98e452d 100644 --- a/server/sonar-web/src/main/js/apps/component-measures/drilldown/ComponentsList.tsx +++ b/server/sonar-web/src/main/js/apps/component-measures/drilldown/ComponentsList.tsx @@ -22,15 +22,14 @@ import ComponentsListRow from './ComponentsListRow'; import EmptyResult from './EmptyResult'; import { complementary } from '../config/complementary'; import { getLocalizedMetricName } from '../../../helpers/l10n'; -import { ComponentMeasure, ComponentMeasureEnhanced, Metric, BranchLike } from '../../../app/types'; interface Props { - branchLike?: BranchLike; - components: ComponentMeasureEnhanced[]; + branchLike?: T.BranchLike; + components: T.ComponentMeasureEnhanced[]; onClick: (component: string) => void; - metric: Metric; - metrics: { [metric: string]: Metric }; - rootComponent: ComponentMeasure; + metric: T.Metric; + metrics: { [metric: string]: T.Metric }; + rootComponent: T.ComponentMeasure; selectedComponent?: string; } diff --git a/server/sonar-web/src/main/js/apps/component-measures/drilldown/ComponentsListRow.tsx b/server/sonar-web/src/main/js/apps/component-measures/drilldown/ComponentsListRow.tsx index 6ae4c80b619..e19138b2bdf 100644 --- a/server/sonar-web/src/main/js/apps/component-measures/drilldown/ComponentsListRow.tsx +++ b/server/sonar-web/src/main/js/apps/component-measures/drilldown/ComponentsListRow.tsx @@ -21,16 +21,15 @@ import * as React from 'react'; import * as classNames from 'classnames'; import ComponentCell from './ComponentCell'; import MeasureCell from './MeasureCell'; -import { ComponentMeasure, Metric, ComponentMeasureEnhanced, BranchLike } from '../../../app/types'; interface Props { - branchLike?: BranchLike; - component: ComponentMeasureEnhanced; + branchLike?: T.BranchLike; + component: T.ComponentMeasureEnhanced; isSelected: boolean; onClick: (component: string) => void; - otherMetrics: Metric[]; - metric: Metric; - rootComponent: ComponentMeasure; + otherMetrics: T.Metric[]; + metric: T.Metric; + rootComponent: T.ComponentMeasure; } export default function ComponentsListRow(props: Props) { diff --git a/server/sonar-web/src/main/js/apps/component-measures/drilldown/FilesView.tsx b/server/sonar-web/src/main/js/apps/component-measures/drilldown/FilesView.tsx index 0413514857e..8d106bc29fd 100644 --- a/server/sonar-web/src/main/js/apps/component-measures/drilldown/FilesView.tsx +++ b/server/sonar-web/src/main/js/apps/component-measures/drilldown/FilesView.tsx @@ -23,29 +23,22 @@ import { throttle } from 'lodash'; import ComponentsList from './ComponentsList'; import ListFooter from '../../../components/controls/ListFooter'; import { Button } from '../../../components/ui/buttons'; -import { - ComponentMeasure, - ComponentMeasureEnhanced, - Metric, - Paging, - BranchLike -} from '../../../app/types'; import { translate, translateWithParameters } from '../../../helpers/l10n'; import { isPeriodBestValue, isDiffMetric, formatMeasure } from '../../../helpers/measures'; import { scrollToElement } from '../../../helpers/scrolling'; import { Alert } from '../../../components/ui/Alert'; interface Props { - branchLike?: BranchLike; - components: ComponentMeasureEnhanced[]; + branchLike?: T.BranchLike; + components: T.ComponentMeasureEnhanced[]; fetchMore: () => void; handleSelect: (component: string) => void; handleOpen: (component: string) => void; loadingMore: boolean; - metric: Metric; - metrics: { [metric: string]: Metric }; - paging?: Paging; - rootComponent: ComponentMeasure; + metric: T.Metric; + metrics: { [metric: string]: T.Metric }; + paging?: T.Paging; + rootComponent: T.ComponentMeasure; selectedKey?: string; selectedIdx?: number; } @@ -103,7 +96,7 @@ export default class ListView extends React.PureComponent<Props, State> { ['up', 'down', 'right'].forEach(action => key.unbind(action, 'measures-files')); } - getVisibleComponents = (components: ComponentMeasureEnhanced[], showBestMeasures: boolean) => { + getVisibleComponents = (components: T.ComponentMeasureEnhanced[], showBestMeasures: boolean) => { if (showBestMeasures) { return components; } @@ -118,7 +111,7 @@ export default class ListView extends React.PureComponent<Props, State> { this.setState({ showBestMeasures: true }); }; - hasBestValue = (component: ComponentMeasureEnhanced) => { + hasBestValue = (component: T.ComponentMeasureEnhanced) => { const { metric } = this.props; const focusedMeasure = component.measures.find(measure => measure.metric.key === metric.key); if (focusedMeasure && isDiffMetric(metric.key)) { diff --git a/server/sonar-web/src/main/js/apps/component-measures/drilldown/MeasureCell.tsx b/server/sonar-web/src/main/js/apps/component-measures/drilldown/MeasureCell.tsx index 951bb590f62..fb1f210e2b2 100644 --- a/server/sonar-web/src/main/js/apps/component-measures/drilldown/MeasureCell.tsx +++ b/server/sonar-web/src/main/js/apps/component-measures/drilldown/MeasureCell.tsx @@ -20,12 +20,11 @@ import * as React from 'react'; import Measure from '../../../components/measure/Measure'; import { isDiffMetric } from '../../../helpers/measures'; -import { Metric, MeasureEnhanced, ComponentMeasureEnhanced } from '../../../app/types'; interface Props { - component: ComponentMeasureEnhanced; - measure?: MeasureEnhanced; - metric: Metric; + component: T.ComponentMeasureEnhanced; + measure?: T.MeasureEnhanced; + metric: T.Metric; } export default function MeasureCell({ component, measure, metric }: Props) { diff --git a/server/sonar-web/src/main/js/apps/component-measures/drilldown/TreeMapView.tsx b/server/sonar-web/src/main/js/apps/component-measures/drilldown/TreeMapView.tsx index 61a35f44ace..2f07bb3545a 100644 --- a/server/sonar-web/src/main/js/apps/component-measures/drilldown/TreeMapView.tsx +++ b/server/sonar-web/src/main/js/apps/component-measures/drilldown/TreeMapView.tsx @@ -30,13 +30,12 @@ import TreeMap, { TreeMapItem } from '../../../components/charts/TreeMap'; import { translate, translateWithParameters, getLocalizedMetricName } from '../../../helpers/l10n'; import { formatMeasure, isDiffMetric } from '../../../helpers/measures'; import { getBranchLikeUrl } from '../../../helpers/urls'; -import { BranchLike, ComponentMeasureEnhanced, Metric } from '../../../app/types'; interface Props { - branchLike?: BranchLike; - components: ComponentMeasureEnhanced[]; + branchLike?: T.BranchLike; + components: T.ComponentMeasureEnhanced[]; handleSelect: (component: string) => void; - metric: Metric; + metric: T.Metric; } interface State { @@ -105,7 +104,7 @@ export default class TreeMapView extends React.PureComponent<Props, State> { .domain(['ERROR', 'WARN', 'OK', 'NONE']) .range(LEVEL_COLORS); - getPercentColorScale = (metric: Metric) => { + getPercentColorScale = (metric: T.Metric) => { const color = scaleLinear<string, string>().domain([0, 25, 50, 75, 100]); color.range(metric.direction === 1 ? [...COLORS].reverse() : COLORS); return color; @@ -116,7 +115,7 @@ export default class TreeMapView extends React.PureComponent<Props, State> { .domain([1, 2, 3, 4, 5]) .range(COLORS); - getColorScale = (metric: Metric) => { + getColorScale = (metric: T.Metric) => { if (metric.type === 'LEVEL') { return this.getLevelColorScale(); } @@ -133,10 +132,10 @@ export default class TreeMapView extends React.PureComponent<Props, State> { sizeMetric, sizeValue }: { - colorMetric: Metric; + colorMetric: T.Metric; colorValue?: string; componentName: string; - sizeMetric: Metric; + sizeMetric: T.Metric; sizeValue: number; }) => { const formatted = diff --git a/server/sonar-web/src/main/js/apps/component-measures/sidebar/DomainFacet.tsx b/server/sonar-web/src/main/js/apps/component-measures/sidebar/DomainFacet.tsx index 1a52f8c80c5..675e94cfaf5 100644 --- a/server/sonar-web/src/main/js/apps/component-measures/sidebar/DomainFacet.tsx +++ b/server/sonar-web/src/main/js/apps/component-measures/sidebar/DomainFacet.tsx @@ -37,10 +37,9 @@ import { getLocalizedMetricName, translate } from '../../../helpers/l10n'; -import { MeasureEnhanced } from '../../../app/types'; interface Props { - domain: { name: string; measures: MeasureEnhanced[] }; + domain: { name: string; measures: T.MeasureEnhanced[] }; hasOverview: boolean; onChange: (metric: string) => void; onToggle: (property: string) => void; @@ -63,7 +62,11 @@ export default class DomainFacet extends React.PureComponent<Props> { this.props.onToggle(this.props.domain.name); }; - hasFacetSelected = (domain: { name: string }, measures: MeasureEnhanced[], selected: string) => { + hasFacetSelected = ( + domain: { name: string }, + measures: T.MeasureEnhanced[], + selected: string + ) => { const measureSelected = measures.find(measure => measure.metric.key === selected); const overviewSelected = domain.name === selected && this.hasOverview(domain.name); return measureSelected || overviewSelected; @@ -73,7 +76,7 @@ export default class DomainFacet extends React.PureComponent<Props> { return this.props.hasOverview && hasBubbleChart(domain); }; - renderItemFacetStat = (item: MeasureEnhanced) => { + renderItemFacetStat = (item: T.MeasureEnhanced) => { return hasFacetStat(item.metric.key) ? <FacetMeasureValue measure={item} /> : null; }; diff --git a/server/sonar-web/src/main/js/apps/component-measures/sidebar/FacetMeasureValue.tsx b/server/sonar-web/src/main/js/apps/component-measures/sidebar/FacetMeasureValue.tsx index 473b287cbd7..a9ac8816935 100644 --- a/server/sonar-web/src/main/js/apps/component-measures/sidebar/FacetMeasureValue.tsx +++ b/server/sonar-web/src/main/js/apps/component-measures/sidebar/FacetMeasureValue.tsx @@ -20,10 +20,9 @@ import * as React from 'react'; import Measure from '../../../components/measure/Measure'; import { isDiffMetric } from '../../../helpers/measures'; -import { MeasureEnhanced } from '../../../app/types'; interface Props { - measure: MeasureEnhanced; + measure: T.MeasureEnhanced; } export default function FacetMeasureValue({ measure }: Props) { diff --git a/server/sonar-web/src/main/js/apps/component-measures/sidebar/Sidebar.tsx b/server/sonar-web/src/main/js/apps/component-measures/sidebar/Sidebar.tsx index 09683497982..6aed80029c9 100644 --- a/server/sonar-web/src/main/js/apps/component-measures/sidebar/Sidebar.tsx +++ b/server/sonar-web/src/main/js/apps/component-measures/sidebar/Sidebar.tsx @@ -21,11 +21,10 @@ import * as React from 'react'; import ProjectOverviewFacet from './ProjectOverviewFacet'; import DomainFacet from './DomainFacet'; import { getDefaultView, groupByDomains, KNOWN_DOMAINS, PROJECT_OVERVEW, Query } from '../utils'; -import { MeasureEnhanced } from '../../../app/types'; interface Props { hasOverview: boolean; - measures: MeasureEnhanced[]; + measures: T.MeasureEnhanced[]; selectedMetric: string; updateQuery: (query: Partial<Query>) => void; } diff --git a/server/sonar-web/src/main/js/apps/component-measures/utils.ts b/server/sonar-web/src/main/js/apps/component-measures/utils.ts index 05f0713f257..9ea4c49bc28 100644 --- a/server/sonar-web/src/main/js/apps/component-measures/utils.ts +++ b/server/sonar-web/src/main/js/apps/component-measures/utils.ts @@ -21,13 +21,6 @@ import { groupBy, memoize, sortBy, toPairs } from 'lodash'; import { domains } from './config/domains'; import { bubbles } from './config/bubbles'; import { getLocalizedMetricName } from '../../helpers/l10n'; -import { - ComponentMeasure, - ComponentMeasureEnhanced, - Metric, - MeasureEnhanced, - BranchLike -} from '../../app/types'; import { enhanceMeasure } from '../../components/measure/utils'; import { cleanQuery, parseAsString, RawQuery, serializeString } from '../../helpers/query'; import { isLongLivingBranch, isMainBranch } from '../../helpers/branches'; @@ -59,30 +52,30 @@ const BANNED_MEASURES = [ 'new_info_violations' ]; -export function filterMeasures(measures: MeasureEnhanced[]): MeasureEnhanced[] { +export function filterMeasures(measures: T.MeasureEnhanced[]): T.MeasureEnhanced[] { return measures.filter(measure => !BANNED_MEASURES.includes(measure.metric.key)); } export function sortMeasures( domainName: string, - measures: Array<MeasureEnhanced | string> -): Array<MeasureEnhanced | string> { + measures: Array<T.MeasureEnhanced | string> +): Array<T.MeasureEnhanced | string> { const config = domains[domainName] || {}; const configOrder = config.order || []; return sortBy(measures, [ - (item: MeasureEnhanced | string) => { + (item: T.MeasureEnhanced | string) => { if (typeof item === 'string') { return configOrder.indexOf(item); } const idx = configOrder.indexOf(item.metric.key); return idx >= 0 ? idx : configOrder.length; }, - (item: MeasureEnhanced | string) => + (item: T.MeasureEnhanced | string) => typeof item === 'string' ? item : getLocalizedMetricName(item.metric) ]); } -export function addMeasureCategories(domainName: string, measures: MeasureEnhanced[]) { +export function addMeasureCategories(domainName: string, measures: T.MeasureEnhanced[]) { const categories = domains[domainName] && domains[domainName].categories; if (categories && categories.length > 0) { return [...categories, ...measures]; @@ -91,10 +84,10 @@ export function addMeasureCategories(domainName: string, measures: MeasureEnhanc } export function enhanceComponent( - component: ComponentMeasure, - metric: Metric | undefined, - metrics: { [key: string]: Metric } -): ComponentMeasureEnhanced { + component: T.ComponentMeasure, + metric: T.Metric | undefined, + metrics: { [key: string]: T.Metric } +): T.ComponentMeasureEnhanced { if (!component.measures) { return { ...component, measures: [] }; } @@ -106,22 +99,22 @@ export function enhanceComponent( return { ...component, value, leak, measures: enhancedMeasures }; } -export function isFileType(component: ComponentMeasure): boolean { +export function isFileType(component: T.ComponentMeasure): boolean { return ['FIL', 'UTS'].includes(component.qualifier); } -export function isViewType(component: ComponentMeasure): boolean { +export function isViewType(component: T.ComponentMeasure): boolean { return ['VW', 'SVW', 'APP'].includes(component.qualifier); } -export const groupByDomains = memoize((measures: MeasureEnhanced[]) => { +export const groupByDomains = memoize((measures: T.MeasureEnhanced[]) => { const domains = toPairs(groupBy(measures, measure => measure.metric.domain)).map(r => ({ name: r[0], measures: r[1] })); return sortBy(domains, [ - (domain: { name: string; measures: MeasureEnhanced[] }) => { + (domain: { name: string; measures: T.MeasureEnhanced[] }) => { const idx = KNOWN_DOMAINS.indexOf(domain.name); return idx >= 0 ? idx : KNOWN_DOMAINS.length; }, @@ -156,11 +149,14 @@ export function hasFacetStat(metric: string): boolean { return metric !== 'alert_status'; } -export function hasFullMeasures(branch?: BranchLike) { +export function hasFullMeasures(branch?: T.BranchLike) { return !branch || isLongLivingBranch(branch) || isMainBranch(branch); } -export function getMeasuresPageMetricKeys(metrics: { [key: string]: Metric }, branch?: BranchLike) { +export function getMeasuresPageMetricKeys( + metrics: { [key: string]: T.Metric }, + branch?: T.BranchLike +) { if (!hasFullMeasures(branch)) { return [ 'coverage', @@ -182,7 +178,7 @@ export function getMeasuresPageMetricKeys(metrics: { [key: string]: Metric }, br return getDisplayMetrics(Object.values(metrics)).map(metric => metric.key); } -export function getBubbleMetrics(domain: string, metrics: { [key: string]: Metric }) { +export function getBubbleMetrics(domain: string, metrics: { [key: string]: T.Metric }) { const conf = bubbles[domain]; return { x: metrics[conf.x], |