aboutsummaryrefslogtreecommitdiffstats
path: root/server/sonar-web
diff options
context:
space:
mode:
Diffstat (limited to 'server/sonar-web')
-rw-r--r--server/sonar-web/.babelrc1
-rw-r--r--server/sonar-web/.eslintrc3
-rw-r--r--server/sonar-web/package.json34
-rw-r--r--server/sonar-web/src/main/js/app/components/AdminContainer.tsx7
-rw-r--r--server/sonar-web/src/main/js/app/components/App.tsx5
-rw-r--r--server/sonar-web/src/main/js/app/components/ComponentContainer.tsx15
-rw-r--r--server/sonar-web/src/main/js/app/components/GlobalFooterBranding.js3
-rw-r--r--server/sonar-web/src/main/js/app/components/GlobalMessagesContainer.tsx (renamed from server/sonar-web/src/main/js/app/components/GlobalMessagesContainer.js)7
-rw-r--r--server/sonar-web/src/main/js/app/components/MarkdownHelp.js32
-rw-r--r--server/sonar-web/src/main/js/app/components/StartupModal.tsx11
-rw-r--r--server/sonar-web/src/main/js/app/components/embed-docs-modal/SuggestionsProvider.tsx2
-rw-r--r--server/sonar-web/src/main/js/app/components/embed-docs-modal/__tests__/SuggestionsProvider-test.tsx6
-rw-r--r--server/sonar-web/src/main/js/app/components/extensions/ExtensionContainer.tsx5
-rw-r--r--server/sonar-web/src/main/js/app/components/extensions/OrganizationPageExtension.tsx7
-rw-r--r--server/sonar-web/src/main/js/app/components/extensions/ProjectAdminPageExtension.js5
-rw-r--r--server/sonar-web/src/main/js/app/components/nav/component/ComponentNavMenu.tsx60
-rw-r--r--server/sonar-web/src/main/js/app/components/nav/global/GlobalNavMenu.tsx2
-rw-r--r--server/sonar-web/src/main/js/app/components/nav/global/GlobalNavPlus.tsx2
-rw-r--r--server/sonar-web/src/main/js/app/components/nav/settings/SettingsNav.tsx6
-rw-r--r--server/sonar-web/src/main/js/app/components/search/SearchShowMore.js2
-rw-r--r--server/sonar-web/src/main/js/app/styles/components/boxed-group.css4
-rw-r--r--server/sonar-web/src/main/js/apps/about/components/AboutApp.js5
-rw-r--r--server/sonar-web/src/main/js/apps/about/components/AboutProjects.js2
-rw-r--r--server/sonar-web/src/main/js/apps/about/components/AboutScanners.js6
-rw-r--r--server/sonar-web/src/main/js/apps/about/components/EntryIssueTypes.js12
-rw-r--r--server/sonar-web/src/main/js/apps/about/sonarcloud/AsAService.tsx4
-rw-r--r--server/sonar-web/src/main/js/apps/about/sonarcloud/BranchAnalysis.tsx7
-rw-r--r--server/sonar-web/src/main/js/apps/about/sonarcloud/Footer.tsx9
-rw-r--r--server/sonar-web/src/main/js/apps/about/sonarcloud/Home.tsx8
-rw-r--r--server/sonar-web/src/main/js/apps/about/sonarcloud/Pricing.tsx3
-rw-r--r--server/sonar-web/src/main/js/apps/about/sonarcloud/SQHome.tsx6
-rw-r--r--server/sonar-web/src/main/js/apps/about/sonarcloud/SonarLintIntegration.tsx4
-rw-r--r--server/sonar-web/src/main/js/apps/account/components/Account.js2
-rw-r--r--server/sonar-web/src/main/js/apps/account/components/Nav.js10
-rw-r--r--server/sonar-web/src/main/js/apps/account/components/UserCard.js4
-rw-r--r--server/sonar-web/src/main/js/apps/account/notifications/NotificationsContainer.tsx5
-rw-r--r--server/sonar-web/src/main/js/apps/account/organizations/CreateOrganizationForm.tsx5
-rw-r--r--server/sonar-web/src/main/js/apps/account/organizations/OrganizationCard.tsx2
-rw-r--r--server/sonar-web/src/main/js/apps/account/organizations/UserOrganizations.tsx5
-rw-r--r--server/sonar-web/src/main/js/apps/account/profile/Profile.js4
-rw-r--r--server/sonar-web/src/main/js/apps/account/profile/UserExternalIdentity.js4
-rw-r--r--server/sonar-web/src/main/js/apps/account/profile/UserGroups.js2
-rw-r--r--server/sonar-web/src/main/js/apps/account/profile/UserScmAccounts.js2
-rw-r--r--server/sonar-web/src/main/js/apps/background-tasks/__tests__/background-tasks-test.js10
-rw-r--r--server/sonar-web/src/main/js/apps/background-tasks/components/BackgroundTasksApp.js5
-rw-r--r--server/sonar-web/src/main/js/apps/background-tasks/components/ScannerContext.tsx2
-rw-r--r--server/sonar-web/src/main/js/apps/background-tasks/components/Stacktrace.tsx2
-rw-r--r--server/sonar-web/src/main/js/apps/background-tasks/components/__tests__/TaskDate-test.tsx4
-rw-r--r--server/sonar-web/src/main/js/apps/background-tasks/components/__tests__/TaskDay-test.tsx4
-rw-r--r--server/sonar-web/src/main/js/apps/code/components/App.tsx2
-rw-r--r--server/sonar-web/src/main/js/apps/code/components/Search.tsx2
-rw-r--r--server/sonar-web/src/main/js/apps/coding-rules/components/App.tsx8
-rw-r--r--server/sonar-web/src/main/js/apps/coding-rules/components/CustomRuleFormModal.tsx11
-rw-r--r--server/sonar-web/src/main/js/apps/coding-rules/components/RuleDetails.tsx9
-rw-r--r--server/sonar-web/src/main/js/apps/component-measures/components/AppContainer.js5
-rw-r--r--server/sonar-web/src/main/js/apps/component-measures/components/Breadcrumbs.js4
-rw-r--r--server/sonar-web/src/main/js/apps/component-measures/components/MeasureContent.js4
-rw-r--r--server/sonar-web/src/main/js/apps/component-measures/components/MeasureContentContainer.js2
-rw-r--r--server/sonar-web/src/main/js/apps/component-measures/components/MeasureFavoriteContainer.js5
-rw-r--r--server/sonar-web/src/main/js/apps/component-measures/components/MeasureViewSelect.js4
-rw-r--r--server/sonar-web/src/main/js/apps/component-measures/components/__tests__/Breadcrumb-test.js4
-rw-r--r--server/sonar-web/src/main/js/apps/component-measures/components/__tests__/MeasureViewSelect-test.js2
-rw-r--r--server/sonar-web/src/main/js/apps/component-measures/drilldown/MeasureCell.js2
-rw-r--r--server/sonar-web/src/main/js/apps/component-measures/drilldown/TreeMapView.js2
-rw-r--r--server/sonar-web/src/main/js/apps/component-measures/sidebar/FacetMeasureValue.js10
-rw-r--r--server/sonar-web/src/main/js/apps/explore/Explore.tsx8
-rw-r--r--server/sonar-web/src/main/js/apps/groups/components/List.tsx2
-rw-r--r--server/sonar-web/src/main/js/apps/groups/components/__tests__/__snapshots__/EditMembers-test.tsx.snap8
-rw-r--r--server/sonar-web/src/main/js/apps/issues/actions.ts28
-rw-r--r--server/sonar-web/src/main/js/apps/issues/components/AppContainer.tsx7
-rw-r--r--server/sonar-web/src/main/js/apps/issues/conciseIssuesList/ConciseIssueBox.tsx4
-rw-r--r--server/sonar-web/src/main/js/apps/marketplace/components/PluginAvailable.tsx2
-rw-r--r--server/sonar-web/src/main/js/apps/marketplace/components/PluginInstalled.tsx2
-rw-r--r--server/sonar-web/src/main/js/apps/marketplace/components/PluginUpdateItem.tsx2
-rw-r--r--server/sonar-web/src/main/js/apps/marketplace/utils.ts21
-rw-r--r--server/sonar-web/src/main/js/apps/organizations/components/OrganizationDelete.tsx7
-rw-r--r--server/sonar-web/src/main/js/apps/organizations/components/OrganizationEdit.tsx5
-rw-r--r--server/sonar-web/src/main/js/apps/organizations/components/OrganizationMembersContainer.tsx11
-rw-r--r--server/sonar-web/src/main/js/apps/organizations/components/OrganizationPage.tsx7
-rw-r--r--server/sonar-web/src/main/js/apps/overview/events/Analysis.tsx4
-rw-r--r--server/sonar-web/src/main/js/apps/overview/meta/MetaKey.tsx2
-rw-r--r--server/sonar-web/src/main/js/apps/overview/meta/MetaLinks.tsx4
-rw-r--r--server/sonar-web/src/main/js/apps/overview/meta/MetaOrganizationKey.tsx2
-rw-r--r--server/sonar-web/src/main/js/apps/overview/meta/MetaSize.tsx2
-rw-r--r--server/sonar-web/src/main/js/apps/overview/qualityGate/ApplicationQualityGate.tsx16
-rw-r--r--server/sonar-web/src/main/js/apps/overview/qualityGate/QualityGateCondition.js6
-rw-r--r--server/sonar-web/src/main/js/apps/permission-templates/components/App.js6
-rw-r--r--server/sonar-web/src/main/js/apps/permission-templates/components/Home.js4
-rw-r--r--server/sonar-web/src/main/js/apps/permission-templates/components/List.js4
-rw-r--r--server/sonar-web/src/main/js/apps/permission-templates/components/ListItem.js2
-rw-r--r--server/sonar-web/src/main/js/apps/permission-templates/components/NameCell.js2
-rw-r--r--server/sonar-web/src/main/js/apps/permission-templates/components/TemplateDetails.js2
-rw-r--r--server/sonar-web/src/main/js/apps/permission-templates/components/TemplateHeader.js8
-rw-r--r--server/sonar-web/src/main/js/apps/permission-templates/components/__tests__/Defaults-test.js4
-rw-r--r--server/sonar-web/src/main/js/apps/permissions/project/components/App.js2
-rw-r--r--server/sonar-web/src/main/js/apps/permissions/project/components/AppContainer.js5
-rw-r--r--server/sonar-web/src/main/js/apps/portfolio/components/App.tsx7
-rw-r--r--server/sonar-web/src/main/js/apps/portfolio/components/MainRating.tsx2
-rw-r--r--server/sonar-web/src/main/js/apps/portfolio/components/ReleasabilityBox.tsx4
-rw-r--r--server/sonar-web/src/main/js/apps/portfolio/components/Report.tsx4
-rw-r--r--server/sonar-web/src/main/js/apps/portfolio/components/WorstProjects.tsx12
-rw-r--r--server/sonar-web/src/main/js/apps/project-admin/key/BulkUpdate.js17
-rw-r--r--server/sonar-web/src/main/js/apps/project-admin/key/Key.js17
-rw-r--r--server/sonar-web/src/main/js/apps/project-admin/links/Links.js13
-rw-r--r--server/sonar-web/src/main/js/apps/projectActivity/components/GraphHistory.js6
-rw-r--r--server/sonar-web/src/main/js/apps/projectActivity/components/GraphsHistory.js2
-rw-r--r--server/sonar-web/src/main/js/apps/projectActivity/components/GraphsLegendCustom.js2
-rw-r--r--server/sonar-web/src/main/js/apps/projectActivity/components/GraphsTooltipsContent.js2
-rw-r--r--server/sonar-web/src/main/js/apps/projectActivity/components/GraphsTooltipsContentCoverage.js8
-rw-r--r--server/sonar-web/src/main/js/apps/projectActivity/components/GraphsTooltipsContentDuplication.js4
-rw-r--r--server/sonar-web/src/main/js/apps/projectActivity/components/GraphsTooltipsContentEvents.js2
-rw-r--r--server/sonar-web/src/main/js/apps/projectActivity/components/GraphsTooltipsContentIssues.js2
-rw-r--r--server/sonar-web/src/main/js/apps/projectActivity/components/GraphsZoom.js2
-rw-r--r--server/sonar-web/src/main/js/apps/projectActivity/components/ProjectActivityAnalysesList.js10
-rw-r--r--server/sonar-web/src/main/js/apps/projectActivity/components/ProjectActivityApp.js6
-rw-r--r--server/sonar-web/src/main/js/apps/projectActivity/components/ProjectActivityPageFooter.js2
-rw-r--r--server/sonar-web/src/main/js/apps/projectActivity/components/ProjectActivityPageHeader.js10
-rw-r--r--server/sonar-web/src/main/js/apps/projectActivity/components/__tests__/GraphsLegendItem-test.tsx2
-rw-r--r--server/sonar-web/src/main/js/apps/projectActivity/components/__tests__/ProjectActivityDateInput-test.js2
-rw-r--r--server/sonar-web/src/main/js/apps/projectBranches/components/LongBranchesPattern.tsx2
-rw-r--r--server/sonar-web/src/main/js/apps/projectQualityProfiles/App.tsx2
-rw-r--r--server/sonar-web/src/main/js/apps/projectQualityProfiles/ProfileRow.tsx2
-rw-r--r--server/sonar-web/src/main/js/apps/projectQualityProfiles/Table.tsx4
-rw-r--r--server/sonar-web/src/main/js/apps/projects/components/FavoriteFilterContainer.tsx9
-rw-r--r--server/sonar-web/src/main/js/apps/projects/components/__tests__/PerspectiveSelect-test.tsx2
-rw-r--r--server/sonar-web/src/main/js/apps/projects/create/CreateProjectPage.tsx29
-rw-r--r--server/sonar-web/src/main/js/apps/projects/create/ManualProjectCreate.tsx7
-rw-r--r--server/sonar-web/src/main/js/apps/projects/create/utils.ts23
-rw-r--r--server/sonar-web/src/main/js/apps/projects/filters/CoverageFilter.tsx20
-rw-r--r--server/sonar-web/src/main/js/apps/projects/filters/DuplicationsFilter.tsx20
-rw-r--r--server/sonar-web/src/main/js/apps/projects/filters/Filter.tsx2
-rw-r--r--server/sonar-web/src/main/js/apps/projects/filters/IssuesFilter.tsx22
-rw-r--r--server/sonar-web/src/main/js/apps/projects/filters/LanguagesFilter.tsx24
-rw-r--r--server/sonar-web/src/main/js/apps/projects/filters/NewCoverageFilter.tsx2
-rw-r--r--server/sonar-web/src/main/js/apps/projects/filters/NewDuplicationsFilter.tsx2
-rw-r--r--server/sonar-web/src/main/js/apps/projects/filters/NewLinesFilter.tsx14
-rw-r--r--server/sonar-web/src/main/js/apps/projects/filters/QualityGateFilter.tsx12
-rw-r--r--server/sonar-web/src/main/js/apps/projects/filters/SizeFilter.tsx16
-rw-r--r--server/sonar-web/src/main/js/apps/projects/filters/TagsFilter.tsx24
-rw-r--r--server/sonar-web/src/main/js/apps/projects/filters/__tests__/SearchableFilterFooter-test.tsx4
-rw-r--r--server/sonar-web/src/main/js/apps/projects/filters/__tests__/TagsFilter-test.tsx6
-rw-r--r--server/sonar-web/src/main/js/apps/projects/utils.ts2
-rw-r--r--server/sonar-web/src/main/js/apps/projectsManagement/AppContainer.tsx5
-rw-r--r--server/sonar-web/src/main/js/apps/quality-gates/components/DetailsApp.tsx8
-rw-r--r--server/sonar-web/src/main/js/apps/quality-profiles/changelog/Changelog.tsx2
-rw-r--r--server/sonar-web/src/main/js/apps/quality-profiles/compare/ComparisonContainer.tsx8
-rw-r--r--server/sonar-web/src/main/js/apps/quality-profiles/compare/ComparisonForm.tsx8
-rw-r--r--server/sonar-web/src/main/js/apps/quality-profiles/compare/ComparisonResults.tsx10
-rw-r--r--server/sonar-web/src/main/js/apps/quality-profiles/compare/__tests__/ComparisonForm-test.tsx4
-rw-r--r--server/sonar-web/src/main/js/apps/quality-profiles/compare/__tests__/ComparisonResults-test.tsx8
-rw-r--r--server/sonar-web/src/main/js/apps/quality-profiles/components/AppContainer.tsx5
-rw-r--r--server/sonar-web/src/main/js/apps/quality-profiles/components/ProfileNotFound.tsx2
-rw-r--r--server/sonar-web/src/main/js/apps/sessions/components/EmailAlreadyExists.tsx6
-rw-r--r--server/sonar-web/src/main/js/apps/sessions/components/LoginContainer.tsx7
-rw-r--r--server/sonar-web/src/main/js/apps/sessions/components/Logout.tsx5
-rw-r--r--server/sonar-web/src/main/js/apps/sessions/components/UpdateLogin.tsx6
-rw-r--r--server/sonar-web/src/main/js/apps/settings/components/App.js6
-rw-r--r--server/sonar-web/src/main/js/apps/settings/components/AppContainer.js5
-rw-r--r--server/sonar-web/src/main/js/apps/settings/components/CategoriesList.js6
-rw-r--r--server/sonar-web/src/main/js/apps/settings/components/CategoryDefinitionsList.js5
-rw-r--r--server/sonar-web/src/main/js/apps/settings/components/Definition.js19
-rw-r--r--server/sonar-web/src/main/js/apps/settings/components/inputs/InputForBoolean.js2
-rw-r--r--server/sonar-web/src/main/js/apps/settings/components/inputs/InputForSingleSelectList.js6
-rw-r--r--server/sonar-web/src/main/js/apps/settings/components/inputs/InputForText.js4
-rw-r--r--server/sonar-web/src/main/js/apps/settings/components/inputs/MultiValueInput.js4
-rw-r--r--server/sonar-web/src/main/js/apps/settings/components/inputs/PrimitiveInput.js10
-rw-r--r--server/sonar-web/src/main/js/apps/settings/components/inputs/PropertySetInput.js2
-rw-r--r--server/sonar-web/src/main/js/apps/settings/components/inputs/SimpleInput.js6
-rw-r--r--server/sonar-web/src/main/js/apps/settings/components/inputs/__tests__/Input-test.js6
-rw-r--r--server/sonar-web/src/main/js/apps/settings/components/inputs/__tests__/InputForBoolean-test.js6
-rw-r--r--server/sonar-web/src/main/js/apps/settings/components/inputs/__tests__/InputForNumber-test.js2
-rw-r--r--server/sonar-web/src/main/js/apps/settings/components/inputs/__tests__/InputForSingleSelectList-test.js12
-rw-r--r--server/sonar-web/src/main/js/apps/settings/components/inputs/__tests__/InputForString-test.js2
-rw-r--r--server/sonar-web/src/main/js/apps/settings/components/inputs/__tests__/InputForText-test.js4
-rw-r--r--server/sonar-web/src/main/js/apps/settings/components/inputs/__tests__/MultiValueInput-test.js10
-rw-r--r--server/sonar-web/src/main/js/apps/settings/components/inputs/__tests__/SimpleInput-test.js12
-rw-r--r--server/sonar-web/src/main/js/apps/settings/encryption/EncryptionApp.js4
-rw-r--r--server/sonar-web/src/main/js/apps/settings/encryption/EncryptionAppContainer.js15
-rw-r--r--server/sonar-web/src/main/js/apps/system/components/ClusterSysInfos.tsx4
-rw-r--r--server/sonar-web/src/main/js/apps/system/components/PageHeader.tsx2
-rw-r--r--server/sonar-web/src/main/js/apps/system/components/__tests__/PageHeader-test.tsx4
-rw-r--r--server/sonar-web/src/main/js/apps/system/components/info-items/HealthCard.tsx2
-rw-r--r--server/sonar-web/src/main/js/apps/system/components/info-items/HealthItem.tsx2
-rw-r--r--server/sonar-web/src/main/js/apps/system/components/info-items/__tests__/HealthItem-test.tsx2
-rw-r--r--server/sonar-web/src/main/js/apps/system/components/info-items/__tests__/Section-test.tsx2
-rw-r--r--server/sonar-web/src/main/js/apps/system/components/info-items/__tests__/__snapshots__/SysInfoItem-test.tsx.snap2
-rw-r--r--server/sonar-web/src/main/js/apps/system/components/system-upgrade/SystemUpgradeForm.tsx2
-rw-r--r--server/sonar-web/src/main/js/apps/system/components/system-upgrade/__tests__/SystemUpgradeItem-test.tsx2
-rw-r--r--server/sonar-web/src/main/js/apps/system/utils.ts17
-rw-r--r--server/sonar-web/src/main/js/apps/tutorials/onboarding/OnboardingPage.tsx5
-rw-r--r--server/sonar-web/src/main/js/apps/tutorials/projectOnboarding/ProjectOnboardingPage.tsx5
-rw-r--r--server/sonar-web/src/main/js/apps/users/Search.tsx2
-rw-r--r--server/sonar-web/src/main/js/apps/users/UsersApp.tsx6
-rw-r--r--server/sonar-web/src/main/js/apps/users/UsersList.tsx2
-rw-r--r--server/sonar-web/src/main/js/apps/users/components/UserGroups.tsx4
-rw-r--r--server/sonar-web/src/main/js/apps/users/components/UserListItem.tsx4
-rw-r--r--server/sonar-web/src/main/js/apps/users/components/UserListItemIdentity.tsx4
-rw-r--r--server/sonar-web/src/main/js/apps/users/components/UserScmAccounts.tsx4
-rw-r--r--server/sonar-web/src/main/js/apps/users/components/UsersSelectSearch.tsx16
-rw-r--r--server/sonar-web/src/main/js/apps/users/components/__tests__/UsersSelectSearch-test.tsx6
-rw-r--r--server/sonar-web/src/main/js/apps/users/utils.ts17
-rw-r--r--server/sonar-web/src/main/js/apps/web-api/components/Action.tsx12
-rw-r--r--server/sonar-web/src/main/js/apps/web-api/components/ActionChangelog.tsx2
-rw-r--r--server/sonar-web/src/main/js/apps/web-api/components/Params.tsx2
-rw-r--r--server/sonar-web/src/main/js/apps/web-api/utils.ts25
-rw-r--r--server/sonar-web/src/main/js/apps/webhooks/components/DeliveriesForm.tsx4
-rw-r--r--server/sonar-web/src/main/js/components/SourceViewer/SourceViewer.tsx7
-rw-r--r--server/sonar-web/src/main/js/components/SourceViewer/SourceViewerBase.tsx22
-rw-r--r--server/sonar-web/src/main/js/components/SourceViewer/components/CoveragePopup.tsx5
-rw-r--r--server/sonar-web/src/main/js/components/charts/AdvancedTimeline.js4
-rw-r--r--server/sonar-web/src/main/js/components/charts/ColorBoxLegend.tsx2
-rw-r--r--server/sonar-web/src/main/js/components/charts/Histogram.tsx12
-rw-r--r--server/sonar-web/src/main/js/components/charts/LanguageDistribution.tsx2
-rw-r--r--server/sonar-web/src/main/js/components/charts/ZoomTimeLine.js38
-rw-r--r--server/sonar-web/src/main/js/components/charts/__tests__/Histogram-test.tsx6
-rw-r--r--server/sonar-web/src/main/js/components/common/MarkdownTips.tsx6
-rw-r--r--server/sonar-web/src/main/js/components/common/OrganizationAvatar.tsx2
-rw-r--r--server/sonar-web/src/main/js/components/common/SelectListItem.js6
-rw-r--r--server/sonar-web/src/main/js/components/common/__tests__/CodeSnippet-test.tsx4
-rw-r--r--server/sonar-web/src/main/js/components/common/__tests__/SelectList-test.js16
-rw-r--r--server/sonar-web/src/main/js/components/controls/FavoriteContainer.ts5
-rw-r--r--server/sonar-web/src/main/js/components/controls/HomePageSelect.tsx5
-rw-r--r--server/sonar-web/src/main/js/components/controls/RadioToggle.tsx8
-rw-r--r--server/sonar-web/src/main/js/components/controls/ReloadButton.tsx4
-rw-r--r--server/sonar-web/src/main/js/components/controls/ScreenPositionFixer.tsx38
-rw-r--r--server/sonar-web/src/main/js/components/controls/Tooltip.tsx2
-rw-r--r--server/sonar-web/src/main/js/components/controls/__tests__/FavoriteBase-test.tsx2
-rw-r--r--server/sonar-web/src/main/js/components/controls/__tests__/RadioToggle-test.tsx2
-rw-r--r--server/sonar-web/src/main/js/components/controls/__tests__/ScreenPositionFixer-test.tsx10
-rw-r--r--server/sonar-web/src/main/js/components/controls/__tests__/ValidationModal-test.tsx6
-rw-r--r--server/sonar-web/src/main/js/components/docs/DocCollapsibleBlock.tsx2
-rw-r--r--server/sonar-web/src/main/js/components/docs/__tests__/__snapshots__/DocCollapsibleBlock-test.tsx.snap4
-rw-r--r--server/sonar-web/src/main/js/components/icons-components/DropdownIcon.tsx2
-rw-r--r--server/sonar-web/src/main/js/components/icons-components/Icon.tsx2
-rw-r--r--server/sonar-web/src/main/js/components/issue/components/__tests__/IssueMessage-test.js2
-rw-r--r--server/sonar-web/src/main/js/components/issue/components/__tests__/IssueTitleBar-test.js4
-rw-r--r--server/sonar-web/src/main/js/components/issue/popups/ChangelogPopup.js4
-rw-r--r--server/sonar-web/src/main/js/components/preview-graph/PreviewGraph.js8
-rw-r--r--server/sonar-web/src/main/js/components/shared/DrilldownLink.tsx2
-rw-r--r--server/sonar-web/src/main/js/components/workspace/Workspace.tsx14
-rw-r--r--server/sonar-web/src/main/js/helpers/cookies.ts20
-rw-r--r--server/sonar-web/src/main/js/store/marketplace/actions.ts2
-rw-r--r--server/sonar-web/src/main/js/store/utils/configureStore.js5
-rw-r--r--server/sonar-web/src/main/js/store/withCurrentUser.tsx35
-rw-r--r--server/sonar-web/yarn.lock743
245 files changed, 1200 insertions, 1266 deletions
diff --git a/server/sonar-web/.babelrc b/server/sonar-web/.babelrc
index 2beb6e05efa..9de26ad2a06 100644
--- a/server/sonar-web/.babelrc
+++ b/server/sonar-web/.babelrc
@@ -73,7 +73,6 @@
],
"plugins": [
"transform-class-properties",
- // use built-in `Object.assign`
["transform-object-rest-spread", { "useBuiltIns": true }],
"lodash"
],
diff --git a/server/sonar-web/.eslintrc b/server/sonar-web/.eslintrc
index ee259345ce1..a86bbb5212b 100644
--- a/server/sonar-web/.eslintrc
+++ b/server/sonar-web/.eslintrc
@@ -2,6 +2,7 @@
"extends": "sonarqube",
"rules": {
- "import/extensions": ["error", "never", { "json": "always", "md": "always" }]
+ "import/extensions": ["error", "never", { "json": "always", "md": "always" }],
+ "jsx-a11y/accessible-emoji": "off"
}
}
diff --git a/server/sonar-web/package.json b/server/sonar-web/package.json
index a65e68ff7f9..1ff33ce42da 100644
--- a/server/sonar-web/package.json
+++ b/server/sonar-web/package.json
@@ -24,9 +24,9 @@
"lunr": "2.3.0",
"mdast-util-toc": "2.0.1",
"prop-types": "15.6.1",
- "react": "16.2.0",
+ "react": "16.4.2",
"react-day-picker": "7.1.8",
- "react-dom": "16.2.0",
+ "react-dom": "16.4.2",
"react-draggable": "3.0.5",
"react-ga": "2.5.3",
"react-helmet": "5.2.0",
@@ -40,9 +40,9 @@
"redux-logger": "3.0.6",
"redux-thunk": "2.2.0",
"remark-custom-blocks": "2.2.0",
+ "remark-slug": "5.0.0",
"remark-toc": "5.0.0",
"unist-util-visit": "1.3.1",
- "remark-slug": "5.0.0",
"whatwg-fetch": "2.0.4"
},
"devDependencies": {
@@ -55,22 +55,22 @@
"@types/d3-shape": "1.2.2",
"@types/d3-zoom": "1.7.1",
"@types/enzyme": "3.1.10",
- "@types/jest": "22.2.3",
+ "@types/jest": "23.3.1",
"@types/keymaster": "1.6.28",
"@types/lodash": "4.14.108",
- "@types/prop-types": "15.5.2",
- "@types/react": "16.0.29",
- "@types/react-dom": "16.0.3",
+ "@types/prop-types": "15.5.4",
+ "@types/react": "16.4.8",
+ "@types/react-dom": "16.0.7",
"@types/react-helmet": "5.0.6",
"@types/react-intl": "2.3.8",
"@types/react-modal": "3.1.2",
- "@types/react-redux": "5.0.12",
+ "@types/react-redux": "6.0.6",
"@types/react-router": "3.0.13",
"@types/react-select": "1.2.6",
"@types/react-virtualized": "9.18.3",
"autoprefixer": "8.4.1",
"babel-core": "6.26.3",
- "babel-jest": "23.0.1",
+ "babel-jest": "23.4.2",
"babel-loader": "7.1.4",
"babel-plugin-dynamic-import-node": "1.2.0",
"babel-plugin-lodash": "3.3.2",
@@ -102,25 +102,25 @@
"glob": "7.1.2",
"glob-promise": "3.4.0",
"html-webpack-plugin": "3.2.0",
- "jest": "23.1.0",
+ "jest": "23.4.2",
"lint-staged": "4.3.0",
"lodash-webpack-plugin": "0.11.5",
"mini-css-extract-plugin": "0.4.0",
"postcss-calc": "6.0.1",
"postcss-custom-properties": "6.2.0",
"postcss-loader": "2.1.5",
- "prettier": "1.11.1",
+ "prettier": "1.14.0",
"raw-loader": "0.5.1",
"react-dev-utils": "5.0.1",
"react-error-overlay": "1.0.7",
- "react-test-renderer": "16.2.0",
+ "react-test-renderer": "16.4.2",
"remark": "9.0.0",
"remark-react": "4.0.3",
"style-loader": "0.21.0",
- "ts-jest": "22.4.6",
+ "ts-jest": "23.1.3",
"ts-loader": "4.3.0",
- "typescript": "2.8.3",
- "typescript-eslint-parser": "15.0.0",
+ "typescript": "3.0.1",
+ "typescript-eslint-parser": "18.0.0",
"webpack": "4.15.1",
"webpack-bundle-analyzer": "2.11.2",
"webpack-dev-server": "3.1.4"
@@ -179,8 +179,8 @@
],
"testRegex": "(/__tests__/.*|\\-test)\\.(ts|tsx|js)$",
"transform": {
- "^.+\\.js$": "<rootDir>/node_modules/babel-jest",
- ".(ts|tsx)$": "<rootDir>/node_modules/ts-jest/preprocessor.js"
+ "\\.js$": "babel-jest",
+ "\\.(ts|tsx)$": "ts-jest"
}
},
"prettier": {
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 c6440c317e0..4a14a53d0d7 100644
--- a/server/sonar-web/src/main/js/app/components/AdminContainer.tsx
+++ b/server/sonar-web/src/main/js/app/components/AdminContainer.tsx
@@ -104,6 +104,7 @@ const mapDispatchToProps: DispatchToProps = {
setAdminPages
};
-export default connect<StateProps, DispatchToProps, OwnProps>(mapStateToProps, mapDispatchToProps)(
- AdminContainer
-);
+export default connect<StateProps, DispatchToProps, OwnProps>(
+ mapStateToProps,
+ mapDispatchToProps
+)(AdminContainer);
diff --git a/server/sonar-web/src/main/js/app/components/App.tsx b/server/sonar-web/src/main/js/app/components/App.tsx
index dca11f0b8eb..23211fbae33 100644
--- a/server/sonar-web/src/main/js/app/components/App.tsx
+++ b/server/sonar-web/src/main/js/app/components/App.tsx
@@ -100,4 +100,7 @@ const mapDispatchToProps = ({
fetchMyOrganizations
} as any) as DispatchProps;
-export default connect(mapStateToProps, mapDispatchToProps)(App);
+export default connect(
+ mapStateToProps,
+ mapDispatchToProps
+)(App);
diff --git a/server/sonar-web/src/main/js/app/components/ComponentContainer.tsx b/server/sonar-web/src/main/js/app/components/ComponentContainer.tsx
index 176a21d06ac..00e376c5dfc 100644
--- a/server/sonar-web/src/main/js/app/components/ComponentContainer.tsx
+++ b/server/sonar-web/src/main/js/app/components/ComponentContainer.tsx
@@ -244,9 +244,15 @@ export class ComponentContainer extends React.PureComponent<Props, State> {
return !task.branch && !task.pullRequest;
};
- handleComponentChange = (changes: {}) => {
+ handleComponentChange = (changes: Partial<Component>) => {
if (this.mounted) {
- this.setState(state => ({ component: { ...state.component, ...changes } }));
+ this.setState(state => {
+ if (state.component) {
+ const newComponent: Component = { ...state.component, ...changes };
+ return { component: newComponent };
+ }
+ return null;
+ });
}
};
@@ -309,4 +315,7 @@ export class ComponentContainer extends React.PureComponent<Props, State> {
const mapDispatchToProps = { fetchOrganizations };
-export default connect<any, any, any>(null, mapDispatchToProps)(ComponentContainer);
+export default connect<any, any, any>(
+ null,
+ mapDispatchToProps
+)(ComponentContainer);
diff --git a/server/sonar-web/src/main/js/app/components/GlobalFooterBranding.js b/server/sonar-web/src/main/js/app/components/GlobalFooterBranding.js
index 8ce14f4c343..8f1f47e880d 100644
--- a/server/sonar-web/src/main/js/app/components/GlobalFooterBranding.js
+++ b/server/sonar-web/src/main/js/app/components/GlobalFooterBranding.js
@@ -30,7 +30,8 @@ export default function GlobalFooterBranding() {
but is <strong>not</strong> an official version provided by{' '}
<a href="http://www.sonarsource.com" title="SonarSource SA">
SonarSource SA
- </a>.
+ </a>
+ .
</div>
);
}
diff --git a/server/sonar-web/src/main/js/app/components/GlobalMessagesContainer.js b/server/sonar-web/src/main/js/app/components/GlobalMessagesContainer.tsx
index f159a481b7b..d8366702bc8 100644
--- a/server/sonar-web/src/main/js/app/components/GlobalMessagesContainer.js
+++ b/server/sonar-web/src/main/js/app/components/GlobalMessagesContainer.tsx
@@ -22,10 +22,13 @@ import GlobalMessages from '../../components/controls/GlobalMessages';
import { getGlobalMessages } from '../../store/rootReducer';
import { closeGlobalMessage } from '../../store/globalMessages/duck';
-const mapStateToProps = state => ({
+const mapStateToProps = (state: any) => ({
messages: getGlobalMessages(state)
});
const mapDispatchToProps = { closeGlobalMessage };
-export default connect(mapStateToProps, mapDispatchToProps)(GlobalMessages);
+export default connect(
+ mapStateToProps,
+ mapDispatchToProps
+)(GlobalMessages);
diff --git a/server/sonar-web/src/main/js/app/components/MarkdownHelp.js b/server/sonar-web/src/main/js/app/components/MarkdownHelp.js
index 1a2c67397c7..f4b957da4f0 100644
--- a/server/sonar-web/src/main/js/app/components/MarkdownHelp.js
+++ b/server/sonar-web/src/main/js/app/components/MarkdownHelp.js
@@ -54,8 +54,8 @@ export default function MarkdownHelp() {
</tr>
<tr>
<td className="text-top">
- * first item<br />
- * second item
+ * first item
+ <br />* second item
</td>
<td className="markdown">
<ul>
@@ -66,7 +66,8 @@ export default function MarkdownHelp() {
</tr>
<tr>
<td className="text-top">
- 1. first item<br />
+ 1. first item
+ <br />
1. second item
</td>
<td className="markdown text-top">
@@ -102,11 +103,15 @@ export default function MarkdownHelp() {
</tr>
<tr>
<td className="text-top">
- ``<br />
- // code on multiple lines<br />
+ ``
+ {/* eslint-disable-next-line react/jsx-no-comment-textnodes */}
+ <br />
+ // code on multiple lines
+ <br />
{'public void foo() {'}
<br />
- &nbsp;&nbsp;{'// do some logic here'}
+ &nbsp;&nbsp;
+ {'// do some logic here'}
<br />
{'}'}
<br />
@@ -120,15 +125,20 @@ export default function MarkdownHelp() {
</tr>
<tr>
<td className="text-top">
- Standard text<br />
- &gt; Blockquoted text<br />
- &gt; that spans multiple lines<br />
+ Standard text
+ <br />
+ &gt; Blockquoted text
+ <br />
+ &gt; that spans multiple lines
+ <br />
</td>
<td className="markdown text-top">
<p>Standard text</p>
<blockquote>
- Blockquoted text<br />
- that spans multiple lines<br />
+ Blockquoted text
+ <br />
+ that spans multiple lines
+ <br />
</blockquote>
</td>
</tr>
diff --git a/server/sonar-web/src/main/js/app/components/StartupModal.tsx b/server/sonar-web/src/main/js/app/components/StartupModal.tsx
index 7930a9b7f21..9383ec2539e 100644
--- a/server/sonar-web/src/main/js/app/components/StartupModal.tsx
+++ b/server/sonar-web/src/main/js/app/components/StartupModal.tsx
@@ -106,7 +106,7 @@ export class StartupModal extends React.PureComponent<Props, State> {
this.props.skipOnboardingAction();
return { automatic: false, modal: undefined };
}
- return undefined;
+ return null;
});
};
@@ -115,7 +115,7 @@ export class StartupModal extends React.PureComponent<Props, State> {
if (state.modal === ModalKey.license) {
return { automatic: false, modal: undefined };
}
- return undefined;
+ return null;
});
};
@@ -223,6 +223,7 @@ const mapStateToProps = (state: any): StateProps => ({
const mapDispatchToProps: DispatchProps = { skipOnboardingAction };
-export default connect<StateProps, DispatchProps, OwnProps>(mapStateToProps, mapDispatchToProps)(
- StartupModal
-);
+export default connect<StateProps, DispatchProps, OwnProps>(
+ mapStateToProps,
+ mapDispatchToProps
+)(StartupModal);
diff --git a/server/sonar-web/src/main/js/app/components/embed-docs-modal/SuggestionsProvider.tsx b/server/sonar-web/src/main/js/app/components/embed-docs-modal/SuggestionsProvider.tsx
index 21cf0bd5bed..909c6a5d1d4 100644
--- a/server/sonar-web/src/main/js/app/components/embed-docs-modal/SuggestionsProvider.tsx
+++ b/server/sonar-web/src/main/js/app/components/embed-docs-modal/SuggestionsProvider.tsx
@@ -20,7 +20,7 @@
import * as React from 'react';
import * as PropTypes from 'prop-types';
// eslint-disable-next-line import/no-extraneous-dependencies
-import suggestionsJson from 'Docs/EmbedDocsSuggestions.json';
+import * as suggestionsJson from 'Docs/EmbedDocsSuggestions.json';
import { SuggestionsContext } from './SuggestionsContext';
import { isSonarCloud } from '../../../helpers/system';
diff --git a/server/sonar-web/src/main/js/app/components/embed-docs-modal/__tests__/SuggestionsProvider-test.tsx b/server/sonar-web/src/main/js/app/components/embed-docs-modal/__tests__/SuggestionsProvider-test.tsx
index c7ca9442a89..2092c80a14d 100644
--- a/server/sonar-web/src/main/js/app/components/embed-docs-modal/__tests__/SuggestionsProvider-test.tsx
+++ b/server/sonar-web/src/main/js/app/components/embed-docs-modal/__tests__/SuggestionsProvider-test.tsx
@@ -25,10 +25,8 @@ import { isSonarCloud } from '../../../../helpers/system';
jest.mock(
'Docs/EmbedDocsSuggestions.json',
() => ({
- default: {
- pageA: [{ link: '/foo', text: 'Foo' }, { link: '/bar', text: 'Bar', scope: 'sonarcloud' }],
- pageB: [{ link: '/qux', text: 'Qux' }]
- }
+ pageA: [{ link: '/foo', text: 'Foo' }, { link: '/bar', text: 'Bar', scope: 'sonarcloud' }],
+ pageB: [{ link: '/qux', text: 'Qux' }]
}),
{ virtual: true }
);
diff --git a/server/sonar-web/src/main/js/app/components/extensions/ExtensionContainer.tsx b/server/sonar-web/src/main/js/app/components/extensions/ExtensionContainer.tsx
index e24cb825b9b..c3c56057669 100644
--- a/server/sonar-web/src/main/js/app/components/extensions/ExtensionContainer.tsx
+++ b/server/sonar-web/src/main/js/app/components/extensions/ExtensionContainer.tsx
@@ -28,4 +28,7 @@ const mapStateToProps = (state: any) => ({
const mapDispatchToProps = { onFail: addGlobalErrorMessage };
-export default connect<any, any, any>(mapStateToProps, mapDispatchToProps)(Extension);
+export default connect<any, any, any>(
+ mapStateToProps,
+ mapDispatchToProps
+)(Extension);
diff --git a/server/sonar-web/src/main/js/app/components/extensions/OrganizationPageExtension.tsx b/server/sonar-web/src/main/js/app/components/extensions/OrganizationPageExtension.tsx
index d5875a4f851..c38e996c2a3 100644
--- a/server/sonar-web/src/main/js/app/components/extensions/OrganizationPageExtension.tsx
+++ b/server/sonar-web/src/main/js/app/components/extensions/OrganizationPageExtension.tsx
@@ -80,6 +80,7 @@ const mapStateToProps = (state: any, ownProps: OwnProps) => ({
const mapDispatchToProps = { fetchOrganization };
-export default connect<StateToProps, DispatchProps, OwnProps>(mapStateToProps, mapDispatchToProps)(
- OrganizationPageExtension
-);
+export default connect<StateToProps, DispatchProps, OwnProps>(
+ mapStateToProps,
+ mapDispatchToProps
+)(OrganizationPageExtension);
diff --git a/server/sonar-web/src/main/js/app/components/extensions/ProjectAdminPageExtension.js b/server/sonar-web/src/main/js/app/components/extensions/ProjectAdminPageExtension.js
index 1c584fc30ee..45c7a677a18 100644
--- a/server/sonar-web/src/main/js/app/components/extensions/ProjectAdminPageExtension.js
+++ b/server/sonar-web/src/main/js/app/components/extensions/ProjectAdminPageExtension.js
@@ -54,4 +54,7 @@ function ProjectAdminPageExtension(props /*: Props */) {
const mapDispatchToProps = { onFail: addGlobalErrorMessage };
-export default connect(null, mapDispatchToProps)(ProjectAdminPageExtension);
+export default connect(
+ null,
+ mapDispatchToProps
+)(ProjectAdminPageExtension);
diff --git a/server/sonar-web/src/main/js/app/components/nav/component/ComponentNavMenu.tsx b/server/sonar-web/src/main/js/app/components/nav/component/ComponentNavMenu.tsx
index 1accbd77863..31983bc3913 100644
--- a/server/sonar-web/src/main/js/app/components/nav/component/ComponentNavMenu.tsx
+++ b/server/sonar-web/src/main/js/app/components/nav/component/ComponentNavMenu.tsx
@@ -109,7 +109,7 @@ export default class ComponentNavMenu extends React.PureComponent<Props> {
return (
<li>
- <Link to={{ pathname: '/code', query: this.getQuery() }} activeClassName="active">
+ <Link activeClassName="active" to={{ pathname: '/code', query: this.getQuery() }}>
{this.isPortfolio() || this.isApplication()
? translate('view_projects.page')
: translate('code.page')}
@@ -128,8 +128,8 @@ export default class ComponentNavMenu extends React.PureComponent<Props> {
return (
<li>
<Link
- to={{ pathname: '/project/activity', query: this.getQuery() }}
- activeClassName="active">
+ activeClassName="active"
+ to={{ pathname: '/project/activity', query: this.getQuery() }}>
{translate('project_activity.page')}
</Link>
</li>
@@ -161,8 +161,8 @@ export default class ComponentNavMenu extends React.PureComponent<Props> {
return (
<li>
<Link
- to={{ pathname: '/component_measures', query: this.getQuery() }}
- activeClassName="active">
+ activeClassName="active"
+ to={{ pathname: '/component_measures', query: this.getQuery() }}>
{translate('layout.measures')}
</Link>
</li>
@@ -206,7 +206,7 @@ export default class ComponentNavMenu extends React.PureComponent<Props> {
<Dropdown overlay={this.renderSecurityReportsLink()} tagName="li">
{({ onToggleClick, open }) => (
<a
- aria-expanded={String(open)}
+ aria-expanded={open}
aria-haspopup="true"
className={classNames('dropdown-toggle', { active: isActive || open })}
href="#"
@@ -240,7 +240,7 @@ export default class ComponentNavMenu extends React.PureComponent<Props> {
tagName="li">
{({ onToggleClick, open }) => (
<a
- aria-expanded={String(open)}
+ aria-expanded={open}
aria-haspopup="true"
className={classNames('dropdown-toggle', { active: isSettingsActive || open })}
href="#"
@@ -278,8 +278,8 @@ export default class ComponentNavMenu extends React.PureComponent<Props> {
return (
<li key="settings">
<Link
- to={{ pathname: '/project/settings', query: this.getQuery() }}
- activeClassName="active">
+ activeClassName="active"
+ to={{ pathname: '/project/settings', query: this.getQuery() }}>
{translate('project_settings.page')}
</Link>
</li>
@@ -298,8 +298,8 @@ export default class ComponentNavMenu extends React.PureComponent<Props> {
return (
<li key="branches">
<Link
- to={{ pathname: '/project/branches', query: { id: this.props.component.key } }}
- activeClassName="active">
+ activeClassName="active"
+ to={{ pathname: '/project/branches', query: { id: this.props.component.key } }}>
{translate('project_branches.page')}
</Link>
</li>
@@ -313,8 +313,8 @@ export default class ComponentNavMenu extends React.PureComponent<Props> {
return (
<li key="profiles">
<Link
- to={{ pathname: '/project/quality_profiles', query: { id: this.props.component.key } }}
- activeClassName="active">
+ activeClassName="active"
+ to={{ pathname: '/project/quality_profiles', query: { id: this.props.component.key } }}>
{translate('project_quality_profiles.page')}
</Link>
</li>
@@ -328,8 +328,8 @@ export default class ComponentNavMenu extends React.PureComponent<Props> {
return (
<li key="quality_gate">
<Link
- to={{ pathname: '/project/quality_gate', query: { id: this.props.component.key } }}
- activeClassName="active">
+ activeClassName="active"
+ to={{ pathname: '/project/quality_gate', query: { id: this.props.component.key } }}>
{translate('project_quality_gate.page')}
</Link>
</li>
@@ -343,8 +343,8 @@ export default class ComponentNavMenu extends React.PureComponent<Props> {
return (
<li key="custom_measures">
<Link
- to={{ pathname: '/custom_measures', query: { id: this.props.component.key } }}
- activeClassName="active">
+ activeClassName="active"
+ to={{ pathname: '/custom_measures', query: { id: this.props.component.key } }}>
{translate('custom_measures.page')}
</Link>
</li>
@@ -358,8 +358,8 @@ export default class ComponentNavMenu extends React.PureComponent<Props> {
return (
<li key="links">
<Link
- to={{ pathname: '/project/links', query: { id: this.props.component.key } }}
- activeClassName="active">
+ activeClassName="active"
+ to={{ pathname: '/project/links', query: { id: this.props.component.key } }}>
{translate('project_links.page')}
</Link>
</li>
@@ -373,8 +373,8 @@ export default class ComponentNavMenu extends React.PureComponent<Props> {
return (
<li key="permissions">
<Link
- to={{ pathname: '/project_roles', query: { id: this.props.component.key } }}
- activeClassName="active">
+ activeClassName="active"
+ to={{ pathname: '/project_roles', query: { id: this.props.component.key } }}>
{translate('permissions.page')}
</Link>
</li>
@@ -388,8 +388,8 @@ export default class ComponentNavMenu extends React.PureComponent<Props> {
return (
<li key="background_tasks">
<Link
- to={{ pathname: '/project/background_tasks', query: { id: this.props.component.key } }}
- activeClassName="active">
+ activeClassName="active"
+ to={{ pathname: '/project/background_tasks', query: { id: this.props.component.key } }}>
{translate('background_tasks.page')}
</Link>
</li>
@@ -403,8 +403,8 @@ export default class ComponentNavMenu extends React.PureComponent<Props> {
return (
<li key="update_key">
<Link
- to={{ pathname: '/project/key', query: { id: this.props.component.key } }}
- activeClassName="active">
+ activeClassName="active"
+ to={{ pathname: '/project/key', query: { id: this.props.component.key } }}>
{translate('update_key.page')}
</Link>
</li>
@@ -418,8 +418,8 @@ export default class ComponentNavMenu extends React.PureComponent<Props> {
return (
<li key="webhooks">
<Link
- to={{ pathname: '/project/webhooks', query: { id: this.props.component.key } }}
- activeClassName="active">
+ activeClassName="active"
+ to={{ pathname: '/project/webhooks', query: { id: this.props.component.key } }}>
{translate('webhooks.page')}
</Link>
</li>
@@ -440,8 +440,8 @@ export default class ComponentNavMenu extends React.PureComponent<Props> {
return (
<li key="project_delete">
<Link
- to={{ pathname: '/project/deletion', query: { id: this.props.component.key } }}
- activeClassName="active">
+ activeClassName="active"
+ to={{ pathname: '/project/deletion', query: { id: this.props.component.key } }}>
{translate('deletion.page')}
</Link>
</li>
@@ -481,7 +481,7 @@ export default class ComponentNavMenu extends React.PureComponent<Props> {
tagName="li">
{({ onToggleClick, open }) => (
<a
- aria-expanded={String(open)}
+ aria-expanded={open}
aria-haspopup="true"
className={classNames('dropdown-toggle', { active: open })}
href="#"
diff --git a/server/sonar-web/src/main/js/app/components/nav/global/GlobalNavMenu.tsx b/server/sonar-web/src/main/js/app/components/nav/global/GlobalNavMenu.tsx
index ccb40acc1f6..6bb9590573a 100644
--- a/server/sonar-web/src/main/js/app/components/nav/global/GlobalNavMenu.tsx
+++ b/server/sonar-web/src/main/js/app/components/nav/global/GlobalNavMenu.tsx
@@ -163,7 +163,7 @@ export default class GlobalNavMenu extends React.PureComponent<Props> {
tagName="li">
{({ onToggleClick, open }) => (
<a
- aria-expanded={String(open)}
+ aria-expanded={open}
aria-haspopup="true"
className={classNames('dropdown-toggle', { active: open })}
href="#"
diff --git a/server/sonar-web/src/main/js/app/components/nav/global/GlobalNavPlus.tsx b/server/sonar-web/src/main/js/app/components/nav/global/GlobalNavPlus.tsx
index 58030362c11..629bdc20180 100644
--- a/server/sonar-web/src/main/js/app/components/nav/global/GlobalNavPlus.tsx
+++ b/server/sonar-web/src/main/js/app/components/nav/global/GlobalNavPlus.tsx
@@ -84,7 +84,7 @@ export default class GlobalNavPlus extends React.PureComponent<Props, State> {
{({ onToggleClick, open }) => (
<>
<a
- aria-expanded={String(open)}
+ aria-expanded={open}
aria-haspopup="true"
className="navbar-plus"
href="#"
diff --git a/server/sonar-web/src/main/js/app/components/nav/settings/SettingsNav.tsx b/server/sonar-web/src/main/js/app/components/nav/settings/SettingsNav.tsx
index d5571dd9248..82d644a9345 100644
--- a/server/sonar-web/src/main/js/app/components/nav/settings/SettingsNav.tsx
+++ b/server/sonar-web/src/main/js/app/components/nav/settings/SettingsNav.tsx
@@ -120,7 +120,7 @@ export default class SettingsNav extends React.PureComponent<Props> {
tagName="li">
{({ onToggleClick, open }) => (
<a
- aria-expanded={String(open)}
+ aria-expanded={open}
aria-haspopup="true"
className={classNames('dropdown-toggle', {
active:
@@ -165,7 +165,7 @@ export default class SettingsNav extends React.PureComponent<Props> {
tagName="li">
{({ onToggleClick, open }) => (
<a
- aria-expanded={String(open)}
+ aria-expanded={open}
aria-haspopup="true"
className={classNames('dropdown-toggle', { active: open || this.isProjectsActive() })}
href="#"
@@ -215,7 +215,7 @@ export default class SettingsNav extends React.PureComponent<Props> {
tagName="li">
{({ onToggleClick, open }) => (
<a
- aria-expanded={String(open)}
+ aria-expanded={open}
aria-haspopup="true"
className={classNames('dropdown-toggle', { active: open || this.isSecurityActive() })}
href="#"
diff --git a/server/sonar-web/src/main/js/app/components/search/SearchShowMore.js b/server/sonar-web/src/main/js/app/components/search/SearchShowMore.js
index 5b46e9934cd..a05ea9b4e98 100644
--- a/server/sonar-web/src/main/js/app/components/search/SearchShowMore.js
+++ b/server/sonar-web/src/main/js/app/components/search/SearchShowMore.js
@@ -54,7 +54,7 @@ export default class SearchShowMore extends React.PureComponent {
const { loadingMore, qualifier, selected } = this.props;
return (
- <li key={`more-${qualifier}`} className={classNames('menu-footer', { active: selected })}>
+ <li className={classNames('menu-footer', { active: selected })} key={`more-${qualifier}`}>
<DeferredSpinner className="navbar-search-icon" loading={loadingMore === qualifier}>
<a
className={classNames({ 'cursor-not-allowed': !this.props.allowMore })}
diff --git a/server/sonar-web/src/main/js/app/styles/components/boxed-group.css b/server/sonar-web/src/main/js/app/styles/components/boxed-group.css
index 5a79c7f70e8..08e25e19aa9 100644
--- a/server/sonar-web/src/main/js/app/styles/components/boxed-group.css
+++ b/server/sonar-web/src/main/js/app/styles/components/boxed-group.css
@@ -64,8 +64,8 @@
}
.boxed-group-list {
- margin-top: - var(--gridSize);
- margin-bottom: - var(--gridSize);
+ margin-top: -var(--gridSize);
+ margin-bottom: -var(--gridSize);
}
.boxed-group-list > li {
diff --git a/server/sonar-web/src/main/js/apps/about/components/AboutApp.js b/server/sonar-web/src/main/js/apps/about/components/AboutApp.js
index 5221f845d5d..c1d319015f1 100644
--- a/server/sonar-web/src/main/js/apps/about/components/AboutApp.js
+++ b/server/sonar-web/src/main/js/apps/about/components/AboutApp.js
@@ -219,4 +219,7 @@ const mapStateToProps = state => ({
const mapDispatchToProps = { fetchAboutPageSettings };
-export default connect(mapStateToProps, mapDispatchToProps)(AboutApp);
+export default connect(
+ mapStateToProps,
+ mapDispatchToProps
+)(AboutApp);
diff --git a/server/sonar-web/src/main/js/apps/about/components/AboutProjects.js b/server/sonar-web/src/main/js/apps/about/components/AboutProjects.js
index 2d3a26dd89b..ded5a77736f 100644
--- a/server/sonar-web/src/main/js/apps/about/components/AboutProjects.js
+++ b/server/sonar-web/src/main/js/apps/about/components/AboutProjects.js
@@ -37,7 +37,7 @@ export default function AboutProjects({ count, loading } /*: Props */) {
{!loading && (
<div>
<div>
- <Link to="/projects" className="about-page-projects-link">
+ <Link className="about-page-projects-link" to="/projects">
{formatMeasure(count, 'INT')}
</Link>
</div>
diff --git a/server/sonar-web/src/main/js/apps/about/components/AboutScanners.js b/server/sonar-web/src/main/js/apps/about/components/AboutScanners.js
index 9d79e0c4b0f..42ad663a7ad 100644
--- a/server/sonar-web/src/main/js/apps/about/components/AboutScanners.js
+++ b/server/sonar-web/src/main/js/apps/about/components/AboutScanners.js
@@ -55,11 +55,11 @@ export default function AboutScanners() {
<p className="about-page-text">{translate('about_page.scanners.text')}</p>
<div className="about-page-analyzers">
{scanners.map(scanner => (
- <a key={scanner.key} className="about-page-analyzer-box" href={scanner.link}>
+ <a className="about-page-analyzer-box" href={scanner.link} key={scanner.key}>
<img
- src={`${window.baseUrl}/images/scanner-logos/${scanner.key}.svg`}
- height={60}
alt={translate('about_page.scanners', scanner.key)}
+ height={60}
+ src={`${window.baseUrl}/images/scanner-logos/${scanner.key}.svg`}
/>
</a>
))}
diff --git a/server/sonar-web/src/main/js/apps/about/components/EntryIssueTypes.js b/server/sonar-web/src/main/js/apps/about/components/EntryIssueTypes.js
index 31e5fb7a3c4..499df6ce3a2 100644
--- a/server/sonar-web/src/main/js/apps/about/components/EntryIssueTypes.js
+++ b/server/sonar-web/src/main/js/apps/about/components/EntryIssueTypes.js
@@ -48,8 +48,8 @@ export default function EntryIssueTypes(
<tr>
<td className="about-page-issue-type-number">
<Link
- to={getIssuesUrl({ resolved: 'false', types: 'BUG', s: 'CREATION_DATE' })}
- className="about-page-issue-type-link">
+ className="about-page-issue-type-link"
+ to={getIssuesUrl({ resolved: 'false', types: 'BUG', s: 'CREATION_DATE' })}>
{formatMeasure(bugs, 'SHORT_INT')}
</Link>
</td>
@@ -63,12 +63,12 @@ export default function EntryIssueTypes(
<tr>
<td className="about-page-issue-type-number">
<Link
+ className="about-page-issue-type-link"
to={getIssuesUrl({
resolved: 'false',
types: 'VULNERABILITY',
s: 'CREATION_DATE'
- })}
- className="about-page-issue-type-link">
+ })}>
{formatMeasure(vulnerabilities, 'SHORT_INT')}
</Link>
</td>
@@ -82,8 +82,8 @@ export default function EntryIssueTypes(
<tr>
<td className="about-page-issue-type-number">
<Link
- to={getIssuesUrl({ resolved: 'false', types: 'CODE_SMELL', s: 'CREATION_DATE' })}
- className="about-page-issue-type-link">
+ className="about-page-issue-type-link"
+ to={getIssuesUrl({ resolved: 'false', types: 'CODE_SMELL', s: 'CREATION_DATE' })}>
{formatMeasure(codeSmells, 'SHORT_INT')}
</Link>
</td>
diff --git a/server/sonar-web/src/main/js/apps/about/sonarcloud/AsAService.tsx b/server/sonar-web/src/main/js/apps/about/sonarcloud/AsAService.tsx
index 8c4938558db..fad4823c0e1 100644
--- a/server/sonar-web/src/main/js/apps/about/sonarcloud/AsAService.tsx
+++ b/server/sonar-web/src/main/js/apps/about/sonarcloud/AsAService.tsx
@@ -36,8 +36,8 @@ export default function AsAService() {
<img alt="" height="34" src={`${getBaseUrl()}/images/sonarcloud/as-a-service.svg`} />
<h1 className="sc-child-title">As a Service</h1>
<p className="sc-child-lead">
- We fully operate the SonarQube base service, <br />which is hosted in Frankfurt,
- Germany.
+ We fully operate the SonarQube base service, <br />
+ which is hosted in Frankfurt, Germany.
</p>
<img
alt=""
diff --git a/server/sonar-web/src/main/js/apps/about/sonarcloud/BranchAnalysis.tsx b/server/sonar-web/src/main/js/apps/about/sonarcloud/BranchAnalysis.tsx
index 49b8f302b1c..19c5f5dddd2 100644
--- a/server/sonar-web/src/main/js/apps/about/sonarcloud/BranchAnalysis.tsx
+++ b/server/sonar-web/src/main/js/apps/about/sonarcloud/BranchAnalysis.tsx
@@ -35,11 +35,12 @@ export default function BranchAnalysis() {
<div className="sc-child-header">
<img alt="" height="34" src={`${getBaseUrl()}/images/sonarcloud/branch-analysis.svg`} />
<h1 className="sc-child-title">
- Branch analysis & <br />pull request decoration
+ Branch analysis & <br />
+ pull request decoration
</h1>
<p className="sc-child-lead">
- SonarCloud comes with a built-in feature to automatically analyze <br />project
- branches and pull requests as soon as they get created.
+ SonarCloud comes with a built-in feature to automatically analyze <br />
+ project branches and pull requests as soon as they get created.
</p>
</div>
diff --git a/server/sonar-web/src/main/js/apps/about/sonarcloud/Footer.tsx b/server/sonar-web/src/main/js/apps/about/sonarcloud/Footer.tsx
index 01efb8943f4..5dd6848f767 100644
--- a/server/sonar-web/src/main/js/apps/about/sonarcloud/Footer.tsx
+++ b/server/sonar-web/src/main/js/apps/about/sonarcloud/Footer.tsx
@@ -137,14 +137,16 @@ export default function Footer() {
rel="noopener noreferrer"
target="_blank">
SonarSource SA
- </a>. All rights reserved. SonarCloud is a service operated by{' '}
+ </a>
+ . All rights reserved. SonarCloud is a service operated by{' '}
<a
className="sc-footer-link sc-footer-copy-link"
href="https://www.sonarsource.com"
rel="noopener noreferrer"
target="_blank">
SonarSource
- </a>, the company that develops and promotes open source{' '}
+ </a>
+ , the company that develops and promotes open source{' '}
<a
className="sc-footer-link sc-footer-copy-link"
href="http://sonarqube.org"
@@ -159,7 +161,8 @@ export default function Footer() {
rel="noopener noreferrer"
target="_blank">
SonarLint
- </a>.
+ </a>
+ .
</div>
</div>
</footer>
diff --git a/server/sonar-web/src/main/js/apps/about/sonarcloud/Home.tsx b/server/sonar-web/src/main/js/apps/about/sonarcloud/Home.tsx
index 629a1730dba..21f62fb4f5d 100644
--- a/server/sonar-web/src/main/js/apps/about/sonarcloud/Home.tsx
+++ b/server/sonar-web/src/main/js/apps/about/sonarcloud/Home.tsx
@@ -33,8 +33,8 @@ export default function Home() {
<div className="page page-limited sc-page">
<h1 className="sc-page-title">Continuous Code Quality Online</h1>
<p className="sc-page-subtitle">
- Analyze the quality of your source code to detect bugs, vulnerabilities <br />and code
- smells throughout the development process.
+ Analyze the quality of your source code to detect bugs, vulnerabilities <br />
+ and code smells throughout the development process.
</p>
<ul className="sc-features-list">
@@ -91,8 +91,8 @@ export default function Home() {
<div className="sc-narrow-container text-center">
<h2 className="sc-feature-title">Explore open source projects on SonarCloud</h2>
<p className="sc-feature-description">
- SonarCloud offers free analysis for open source projects. <br />It is public and open
- to anyone who wants to browse the service.
+ SonarCloud offers free analysis for open source projects. <br />
+ It is public and open to anyone who wants to browse the service.
</p>
</div>
diff --git a/server/sonar-web/src/main/js/apps/about/sonarcloud/Pricing.tsx b/server/sonar-web/src/main/js/apps/about/sonarcloud/Pricing.tsx
index 3943b5eced5..8340323d357 100644
--- a/server/sonar-web/src/main/js/apps/about/sonarcloud/Pricing.tsx
+++ b/server/sonar-web/src/main/js/apps/about/sonarcloud/Pricing.tsx
@@ -33,7 +33,8 @@ export default function Pricing() {
<h3 className="sc-pricing-title">Private Projects</h3>
<span className="sc-pricing-small">14 days free trial</span>
<strong>
- From <span className="sc-pricing-price">10€</span>/mo
+ From <span className="sc-pricing-price">10€</span>
+ /mo
</strong>
<Link className="sc-news-link" to="/documentation/sonarcloud-pricing">
see prices
diff --git a/server/sonar-web/src/main/js/apps/about/sonarcloud/SQHome.tsx b/server/sonar-web/src/main/js/apps/about/sonarcloud/SQHome.tsx
index 7d9067e3a0d..1b0bfe98092 100644
--- a/server/sonar-web/src/main/js/apps/about/sonarcloud/SQHome.tsx
+++ b/server/sonar-web/src/main/js/apps/about/sonarcloud/SQHome.tsx
@@ -52,12 +52,14 @@ function Jumbotron() {
<div className="sc-sq-jumbotron">
<div className="sc-sq-jumbotron-left">
<h1 className="sc-sq-jumbotron-title">
- Use SonarQube<br />
+ Use SonarQube
+ <br />
<span className="sc-sq-jumbotron-title-orange">as a Service</span>
</h1>
<div className="sc-sq-jumbotron-login">
{'—'}
- <br />Log in or sign up with
+ <br />
+ Log in or sign up with
</div>
<div>
<a
diff --git a/server/sonar-web/src/main/js/apps/about/sonarcloud/SonarLintIntegration.tsx b/server/sonar-web/src/main/js/apps/about/sonarcloud/SonarLintIntegration.tsx
index 17fe58eee42..69a0bceabbe 100644
--- a/server/sonar-web/src/main/js/apps/about/sonarcloud/SonarLintIntegration.tsx
+++ b/server/sonar-web/src/main/js/apps/about/sonarcloud/SonarLintIntegration.tsx
@@ -44,8 +44,8 @@ export default function SonarLintIntegration() {
<a className="sc-child-lead-link" href="https://www.sonarlint.org/">
SonarLint
</a>{' '}
- to provide developers maximum insight <br />in their IDEs on code quality and make
- sure they do not introduce new issues.
+ to provide developers maximum insight <br />
+ in their IDEs on code quality and make sure they do not introduce new issues.
</p>
<img
alt=""
diff --git a/server/sonar-web/src/main/js/apps/account/components/Account.js b/server/sonar-web/src/main/js/apps/account/components/Account.js
index 0266a3efaf6..bb4e8645692 100644
--- a/server/sonar-web/src/main/js/apps/account/components/Account.js
+++ b/server/sonar-web/src/main/js/apps/account/components/Account.js
@@ -50,7 +50,7 @@ class Account extends React.PureComponent {
<header className="account-header">
<div className="account-container clearfix">
<UserCard user={currentUser} />
- <Nav user={currentUser} customOrganizations={this.props.customOrganizations} />
+ <Nav customOrganizations={this.props.customOrganizations} user={currentUser} />
</div>
</header>
diff --git a/server/sonar-web/src/main/js/apps/account/components/Nav.js b/server/sonar-web/src/main/js/apps/account/components/Nav.js
index d08adb2e20b..8688985c311 100644
--- a/server/sonar-web/src/main/js/apps/account/components/Nav.js
+++ b/server/sonar-web/src/main/js/apps/account/components/Nav.js
@@ -34,30 +34,30 @@ export default function Nav({ customOrganizations } /*: Props */) {
<nav className="account-nav">
<NavBarTabs>
<li>
- <IndexLink to="/account/" activeClassName="active">
+ <IndexLink activeClassName="active" to="/account/">
{translate('my_account.profile')}
</IndexLink>
</li>
<li>
- <Link to="/account/security/" activeClassName="active">
+ <Link activeClassName="active" to="/account/security/">
{translate('my_account.security')}
</Link>
</li>
<li>
- <Link to="/account/notifications" activeClassName="active">
+ <Link activeClassName="active" to="/account/notifications">
{translate('my_account.notifications')}
</Link>
</li>
{!customOrganizations && (
<li>
- <Link to="/account/projects/" activeClassName="active">
+ <Link activeClassName="active" to="/account/projects/">
{translate('my_account.projects')}
</Link>
</li>
)}
{customOrganizations && (
<li>
- <Link to="/account/organizations" activeClassName="active">
+ <Link activeClassName="active" to="/account/organizations">
{translate('my_account.organizations')}
</Link>
</li>
diff --git a/server/sonar-web/src/main/js/apps/account/components/UserCard.js b/server/sonar-web/src/main/js/apps/account/components/UserCard.js
index c5299f13bb9..a67a2ef2eb0 100644
--- a/server/sonar-web/src/main/js/apps/account/components/UserCard.js
+++ b/server/sonar-web/src/main/js/apps/account/components/UserCard.js
@@ -31,10 +31,10 @@ export default class UserCard extends React.PureComponent {
return (
<div className="account-user">
- <div id="avatar" className="pull-left account-user-avatar">
+ <div className="pull-left account-user-avatar" id="avatar">
<Avatar hash={user.avatar} name={user.name} size={60} />
</div>
- <h1 id="name" className="pull-left">
+ <h1 className="pull-left" id="name">
{user.name}
</h1>
</div>
diff --git a/server/sonar-web/src/main/js/apps/account/notifications/NotificationsContainer.tsx b/server/sonar-web/src/main/js/apps/account/notifications/NotificationsContainer.tsx
index 7c05e0f1616..08430793fcd 100644
--- a/server/sonar-web/src/main/js/apps/account/notifications/NotificationsContainer.tsx
+++ b/server/sonar-web/src/main/js/apps/account/notifications/NotificationsContainer.tsx
@@ -23,4 +23,7 @@ import { fetchOrganizations } from '../../../store/rootActions';
const mapDispatchToProps = { fetchOrganizations } as Pick<Props, 'fetchOrganizations'>;
-export default connect(null, mapDispatchToProps)(Notifications);
+export default connect(
+ null,
+ mapDispatchToProps
+)(Notifications);
diff --git a/server/sonar-web/src/main/js/apps/account/organizations/CreateOrganizationForm.tsx b/server/sonar-web/src/main/js/apps/account/organizations/CreateOrganizationForm.tsx
index a6dca76e8aa..25636965522 100644
--- a/server/sonar-web/src/main/js/apps/account/organizations/CreateOrganizationForm.tsx
+++ b/server/sonar-web/src/main/js/apps/account/organizations/CreateOrganizationForm.tsx
@@ -246,4 +246,7 @@ class CreateOrganizationForm extends React.PureComponent<Props, State> {
const mapDispatchToProps: DispatchProps = { createOrganization: createOrganization as any };
-export default connect(null, mapDispatchToProps)(CreateOrganizationForm);
+export default connect(
+ null,
+ mapDispatchToProps
+)(CreateOrganizationForm);
diff --git a/server/sonar-web/src/main/js/apps/account/organizations/OrganizationCard.tsx b/server/sonar-web/src/main/js/apps/account/organizations/OrganizationCard.tsx
index 53010e8e63c..db53d626a83 100644
--- a/server/sonar-web/src/main/js/apps/account/organizations/OrganizationCard.tsx
+++ b/server/sonar-web/src/main/js/apps/account/organizations/OrganizationCard.tsx
@@ -50,7 +50,7 @@ export default function OrganizationCard({ organization }: Props) {
{!!organization.url && (
<div className="markdown spacer-top">
- <a href={organization.url} title={organization.url} rel="nofollow">
+ <a href={organization.url} rel="nofollow" title={organization.url}>
{organization.url}
</a>
</div>
diff --git a/server/sonar-web/src/main/js/apps/account/organizations/UserOrganizations.tsx b/server/sonar-web/src/main/js/apps/account/organizations/UserOrganizations.tsx
index 9bf4071c8b0..c3768ee5e5c 100644
--- a/server/sonar-web/src/main/js/apps/account/organizations/UserOrganizations.tsx
+++ b/server/sonar-web/src/main/js/apps/account/organizations/UserOrganizations.tsx
@@ -120,4 +120,7 @@ const mapDispatchToProps = {
fetchIfAnyoneCanCreateOrganizations: fetchIfAnyoneCanCreateOrganizations as any
} as DispatchProps;
-export default connect(mapStateToProps, mapDispatchToProps)(UserOrganizations);
+export default connect(
+ mapStateToProps,
+ mapDispatchToProps
+)(UserOrganizations);
diff --git a/server/sonar-web/src/main/js/apps/account/profile/Profile.js b/server/sonar-web/src/main/js/apps/account/profile/Profile.js
index aa4b8c0ed85..3b91c7649dc 100644
--- a/server/sonar-web/src/main/js/apps/account/profile/Profile.js
+++ b/server/sonar-web/src/main/js/apps/account/profile/Profile.js
@@ -52,7 +52,7 @@ function Profile(props /*: Props */) {
{!user.local &&
user.externalProvider !== 'sonarqube' && (
- <div id="identity-provider" className="spacer-bottom">
+ <div className="spacer-bottom" id="identity-provider">
<UserExternalIdentity user={user} />
</div>
)}
@@ -68,7 +68,7 @@ function Profile(props /*: Props */) {
<hr />
- <UserScmAccounts user={user} scmAccounts={user.scmAccounts} />
+ <UserScmAccounts scmAccounts={user.scmAccounts} user={user} />
</div>
</div>
);
diff --git a/server/sonar-web/src/main/js/apps/account/profile/UserExternalIdentity.js b/server/sonar-web/src/main/js/apps/account/profile/UserExternalIdentity.js
index 2148e50098f..8e0536fe3ac 100644
--- a/server/sonar-web/src/main/js/apps/account/profile/UserExternalIdentity.js
+++ b/server/sonar-web/src/main/js/apps/account/profile/UserExternalIdentity.js
@@ -87,11 +87,11 @@ export default class UserExternalIdentity extends React.PureComponent {
color: getTextColor(identityProvider.backgroundColor, theme.secondFontColor)
}}>
<img
+ alt={identityProvider.name}
className="little-spacer-right"
+ height="14"
src={window.baseUrl + identityProvider.iconPath}
width="14"
- height="14"
- alt={identityProvider.name}
/>{' '}
{user.externalIdentity}
</div>
diff --git a/server/sonar-web/src/main/js/apps/account/profile/UserGroups.js b/server/sonar-web/src/main/js/apps/account/profile/UserGroups.js
index c4816fb66cd..f81ba233119 100644
--- a/server/sonar-web/src/main/js/apps/account/profile/UserGroups.js
+++ b/server/sonar-web/src/main/js/apps/account/profile/UserGroups.js
@@ -34,7 +34,7 @@ export default class UserGroups extends React.PureComponent {
<h2 className="spacer-bottom">{translate('my_profile.groups')}</h2>
<ul id="groups">
{groups.map(group => (
- <li key={group} className="little-spacer-bottom" title={group}>
+ <li className="little-spacer-bottom" key={group} title={group}>
{group}
</li>
))}
diff --git a/server/sonar-web/src/main/js/apps/account/profile/UserScmAccounts.js b/server/sonar-web/src/main/js/apps/account/profile/UserScmAccounts.js
index 324af5716a4..a306959eade 100644
--- a/server/sonar-web/src/main/js/apps/account/profile/UserScmAccounts.js
+++ b/server/sonar-web/src/main/js/apps/account/profile/UserScmAccounts.js
@@ -45,7 +45,7 @@ export default class UserScmAccounts extends React.PureComponent {
)}
{scmAccounts.map(scmAccount => (
- <li key={scmAccount} className="little-spacer-bottom" title={scmAccount}>
+ <li className="little-spacer-bottom" key={scmAccount} title={scmAccount}>
{scmAccount}
</li>
))}
diff --git a/server/sonar-web/src/main/js/apps/background-tasks/__tests__/background-tasks-test.js b/server/sonar-web/src/main/js/apps/background-tasks/__tests__/background-tasks-test.js
index 2e10882d6b8..f4f686fd287 100644
--- a/server/sonar-web/src/main/js/apps/background-tasks/__tests__/background-tasks-test.js
+++ b/server/sonar-web/src/main/js/apps/background-tasks/__tests__/background-tasks-test.js
@@ -81,21 +81,21 @@ describe('Stats', () => {
describe('Pending', () => {
it('should show zero pending', () => {
const result = shallow(
- <Stats pendingCount={0} onCancelAllPending={stub} onShowFailing={stub} />
+ <Stats onCancelAllPending={stub} onShowFailing={stub} pendingCount={0} />
);
expect(result.find('.js-pending-count').text()).toContain('0');
});
it('should show 5 pending', () => {
const result = shallow(
- <Stats pendingCount={5} onCancelAllPending={stub} onShowFailing={stub} />
+ <Stats onCancelAllPending={stub} onShowFailing={stub} pendingCount={5} />
);
expect(result.find('.js-pending-count').text()).toContain('5');
});
it('should not show cancel pending button', () => {
const result = shallow(
- <Stats pendingCount={0} onCancelAllPending={stub} onShowFailing={stub} />
+ <Stats onCancelAllPending={stub} onShowFailing={stub} pendingCount={0} />
);
expect(result.find('.js-cancel-pending').length).toBe(0);
});
@@ -104,9 +104,9 @@ describe('Stats', () => {
const result = shallow(
<Stats
isSystemAdmin={true}
- pendingCount={5}
onCancelAllPending={stub}
onShowFailing={stub}
+ pendingCount={5}
/>
);
expect(result.find('.js-cancel-pending').length).toBe(1);
@@ -117,9 +117,9 @@ describe('Stats', () => {
const result = shallow(
<Stats
isSystemAdmin={true}
- pendingCount={5}
onCancelAllPending={spy}
onShowFailing={stub}
+ pendingCount={5}
/>
);
expect(spy).not.toBeCalled();
diff --git a/server/sonar-web/src/main/js/apps/background-tasks/components/BackgroundTasksApp.js b/server/sonar-web/src/main/js/apps/background-tasks/components/BackgroundTasksApp.js
index 94090edd286..20329eafbaf 100644
--- a/server/sonar-web/src/main/js/apps/background-tasks/components/BackgroundTasksApp.js
+++ b/server/sonar-web/src/main/js/apps/background-tasks/components/BackgroundTasksApp.js
@@ -270,4 +270,7 @@ class BackgroundTasksApp extends React.PureComponent {
const mapDispatchToProps = { fetchOrganizations };
-export default connect(null, mapDispatchToProps)(BackgroundTasksApp);
+export default connect(
+ null,
+ mapDispatchToProps
+)(BackgroundTasksApp);
diff --git a/server/sonar-web/src/main/js/apps/background-tasks/components/ScannerContext.tsx b/server/sonar-web/src/main/js/apps/background-tasks/components/ScannerContext.tsx
index 45f653857b0..7e66a3e007e 100644
--- a/server/sonar-web/src/main/js/apps/background-tasks/components/ScannerContext.tsx
+++ b/server/sonar-web/src/main/js/apps/background-tasks/components/ScannerContext.tsx
@@ -84,7 +84,7 @@ export default class ScannerContext extends React.PureComponent<Props, State> {
</div>
<div className="modal-foot">
- <a href="#" className="js-modal-close" onClick={this.handleCloseClick}>
+ <a className="js-modal-close" href="#" onClick={this.handleCloseClick}>
{translate('close')}
</a>
</div>
diff --git a/server/sonar-web/src/main/js/apps/background-tasks/components/Stacktrace.tsx b/server/sonar-web/src/main/js/apps/background-tasks/components/Stacktrace.tsx
index 1ea9befbc89..21cdf7ec937 100644
--- a/server/sonar-web/src/main/js/apps/background-tasks/components/Stacktrace.tsx
+++ b/server/sonar-web/src/main/js/apps/background-tasks/components/Stacktrace.tsx
@@ -100,7 +100,7 @@ export default class Stacktrace extends React.PureComponent<Props, State> {
</div>
<div className="modal-foot">
- <a href="#" className="js-modal-close" onClick={this.handleCloseClick}>
+ <a className="js-modal-close" href="#" onClick={this.handleCloseClick}>
{translate('close')}
</a>
</div>
diff --git a/server/sonar-web/src/main/js/apps/background-tasks/components/__tests__/TaskDate-test.tsx b/server/sonar-web/src/main/js/apps/background-tasks/components/__tests__/TaskDate-test.tsx
index 3892a59cd0a..9b11cc91891 100644
--- a/server/sonar-web/src/main/js/apps/background-tasks/components/__tests__/TaskDate-test.tsx
+++ b/server/sonar-web/src/main/js/apps/background-tasks/components/__tests__/TaskDate-test.tsx
@@ -25,9 +25,9 @@ it('renders', () => {
expect(shallow(<TaskDate />)).toMatchSnapshot();
expect(shallow(<TaskDate date="2017-01-01T00:00:00.000Z" />)).toMatchSnapshot();
expect(
- shallow(<TaskDate date="2017-01-01T00:00:00.000Z" baseDate="2017-01-01T00:00:00.000Z" />)
+ shallow(<TaskDate baseDate="2017-01-01T00:00:00.000Z" date="2017-01-01T00:00:00.000Z" />)
).toMatchSnapshot();
expect(
- shallow(<TaskDate date="2017-01-05T00:00:00.000Z" baseDate="2017-01-01T00:00:00.000Z" />)
+ shallow(<TaskDate baseDate="2017-01-01T00:00:00.000Z" date="2017-01-05T00:00:00.000Z" />)
).toMatchSnapshot();
});
diff --git a/server/sonar-web/src/main/js/apps/background-tasks/components/__tests__/TaskDay-test.tsx b/server/sonar-web/src/main/js/apps/background-tasks/components/__tests__/TaskDay-test.tsx
index 185dd6d8f34..9f03fb4348d 100644
--- a/server/sonar-web/src/main/js/apps/background-tasks/components/__tests__/TaskDay-test.tsx
+++ b/server/sonar-web/src/main/js/apps/background-tasks/components/__tests__/TaskDay-test.tsx
@@ -24,13 +24,13 @@ import TaskDay from '../TaskDay';
it('renders', () => {
expect(
shallow(
- <TaskDay submittedAt="2017-01-02T00:00:00.000Z" prevSubmittedAt="2017-01-01T00:00:00.000Z" />
+ <TaskDay prevSubmittedAt="2017-01-01T00:00:00.000Z" submittedAt="2017-01-02T00:00:00.000Z" />
)
).toMatchSnapshot();
expect(
shallow(
- <TaskDay submittedAt="2017-01-01T00:00:00.000Z" prevSubmittedAt="2017-01-01T00:00:00.000Z" />
+ <TaskDay prevSubmittedAt="2017-01-01T00:00:00.000Z" submittedAt="2017-01-01T00:00:00.000Z" />
)
).toMatchSnapshot();
});
diff --git a/server/sonar-web/src/main/js/apps/code/components/App.tsx b/server/sonar-web/src/main/js/apps/code/components/App.tsx
index 56b2dcf6de5..f7a7354b0e6 100644
--- a/server/sonar-web/src/main/js/apps/code/components/App.tsx
+++ b/server/sonar-web/src/main/js/apps/code/components/App.tsx
@@ -239,7 +239,7 @@ export default class App extends React.PureComponent<Props, State> {
{sourceViewer === undefined &&
components !== undefined && (
- <ListFooter count={components.length} total={total} loadMore={this.handleLoadMore} />
+ <ListFooter count={components.length} loadMore={this.handleLoadMore} total={total} />
)}
{sourceViewer !== undefined && (
diff --git a/server/sonar-web/src/main/js/apps/code/components/Search.tsx b/server/sonar-web/src/main/js/apps/code/components/Search.tsx
index abeeacc511a..6315df5dcd3 100644
--- a/server/sonar-web/src/main/js/apps/code/components/Search.tsx
+++ b/server/sonar-web/src/main/js/apps/code/components/Search.tsx
@@ -176,7 +176,7 @@ export default class Search extends React.PureComponent<Props, State> {
const isPortfolio = ['VW', 'SVW', 'APP'].includes(component.qualifier);
return (
- <div id="code-search" className={containerClassName}>
+ <div className={containerClassName} id="code-search">
<SearchBox
minLength={3}
onChange={this.handleQueryChange}
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/App.tsx
index 19f179aca95..320c759103e 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/App.tsx
@@ -467,12 +467,14 @@ export class App extends React.PureComponent<Props, State> {
});
handleRuleDeactivate = (profile: string, rule: string) =>
- this.setState((state: State) => {
+ this.setState(state => {
const { actives } = state;
if (actives && actives[rule]) {
- return { actives: { ...actives, [rule]: { ...actives[rule], [profile]: undefined } } };
+ const newRule = { ...actives[rule] };
+ delete newRule[profile];
+ return { actives: { ...actives, [rule]: newRule } };
}
- return {};
+ return null;
});
handleSearch = (searchQuery: string) => this.handleFilterChange({ searchQuery });
diff --git a/server/sonar-web/src/main/js/apps/coding-rules/components/CustomRuleFormModal.tsx b/server/sonar-web/src/main/js/apps/coding-rules/components/CustomRuleFormModal.tsx
index e3076a11b3f..309e99dcf1d 100644
--- a/server/sonar-web/src/main/js/apps/coding-rules/components/CustomRuleFormModal.tsx
+++ b/server/sonar-web/src/main/js/apps/coding-rules/components/CustomRuleFormModal.tsx
@@ -131,13 +131,10 @@ export default class CustomRuleFormModal extends React.PureComponent<Props, Stat
handleNameChange = (event: React.SyntheticEvent<HTMLInputElement>) => {
const { value: name } = event.currentTarget;
- this.setState((state: State) => {
- const change: Partial<State> = { name };
- if (!state.keyModifiedByUser) {
- change.key = latinize(name).replace(/[^A-Za-z0-9]/g, '_');
- }
- return change;
- });
+ this.setState(state => ({
+ name,
+ key: state.keyModifiedByUser ? state.key : latinize(name).replace(/[^A-Za-z0-9]/g, '_')
+ }));
};
handleKeyChange = (event: React.SyntheticEvent<HTMLInputElement>) =>
diff --git a/server/sonar-web/src/main/js/apps/coding-rules/components/RuleDetails.tsx b/server/sonar-web/src/main/js/apps/coding-rules/components/RuleDetails.tsx
index 0b07f5b597d..dcdc5b733dd 100644
--- a/server/sonar-web/src/main/js/apps/coding-rules/components/RuleDetails.tsx
+++ b/server/sonar-web/src/main/js/apps/coding-rules/components/RuleDetails.tsx
@@ -104,14 +104,19 @@ export default class RuleDetails extends React.PureComponent<Props, State> {
handleTagsChange = (tags: string[]) => {
// optimistic update
const oldTags = this.state.ruleDetails && this.state.ruleDetails.tags;
- this.setState(state => ({ ruleDetails: { ...state.ruleDetails, tags } }));
+ this.setState(
+ state => (state.ruleDetails ? { ruleDetails: { ...state.ruleDetails, tags } } : null)
+ );
updateRule({
key: this.props.ruleKey,
organization: this.props.organization,
tags: tags.join()
}).catch(() => {
if (this.mounted) {
- this.setState(state => ({ ruleDetails: { ...state.ruleDetails, tags: oldTags } }));
+ this.setState(
+ state =>
+ state.ruleDetails ? { ruleDetails: { ...state.ruleDetails, tags: oldTags } } : null
+ );
}
});
};
diff --git a/server/sonar-web/src/main/js/apps/component-measures/components/AppContainer.js b/server/sonar-web/src/main/js/apps/component-measures/components/AppContainer.js
index 54d63a4dddd..b02d379358c 100644
--- a/server/sonar-web/src/main/js/apps/component-measures/components/AppContainer.js
+++ b/server/sonar-web/src/main/js/apps/component-measures/components/AppContainer.js
@@ -74,4 +74,7 @@ const fetchMeasures = (
const mapDispatchToProps = { fetchMeasures, fetchMetrics };
-export default connect(mapStateToProps, mapDispatchToProps)(withRouter(App));
+export default connect(
+ mapStateToProps,
+ mapDispatchToProps
+)(withRouter(App));
diff --git a/server/sonar-web/src/main/js/apps/component-measures/components/Breadcrumbs.js b/server/sonar-web/src/main/js/apps/component-measures/components/Breadcrumbs.js
index 7709a31d257..fbc87441a60 100644
--- a/server/sonar-web/src/main/js/apps/component-measures/components/Breadcrumbs.js
+++ b/server/sonar-web/src/main/js/apps/component-measures/components/Breadcrumbs.js
@@ -104,11 +104,11 @@ export default class Breadcrumbs extends React.PureComponent {
<div className={this.props.className}>
{breadcrumbs.map(component => (
<Breadcrumb
- key={component.key}
canBrowse={component.key !== lastItem.key}
component={component}
- isLast={component.key === lastItem.key}
handleSelect={this.props.handleSelect}
+ isLast={component.key === lastItem.key}
+ key={component.key}
/>
))}
</div>
diff --git a/server/sonar-web/src/main/js/apps/component-measures/components/MeasureContent.js b/server/sonar-web/src/main/js/apps/component-measures/components/MeasureContent.js
index e3843c8bcd0..8777d0fca7e 100644
--- a/server/sonar-web/src/main/js/apps/component-measures/components/MeasureContent.js
+++ b/server/sonar-web/src/main/js/apps/component-measures/components/MeasureContent.js
@@ -306,15 +306,15 @@ export default class MeasureContent extends React.PureComponent {
isLoggedIn && (
<MeasureFavoriteContainer
branchLike={branchLike}
- component={component.key}
className="measure-favorite spacer-right"
+ component={component.key}
/>
)}
{!isFile && (
<MeasureViewSelect
className="measure-view-select"
- metric={metric}
handleViewChange={this.props.updateView}
+ metric={metric}
view={view}
/>
)}
diff --git a/server/sonar-web/src/main/js/apps/component-measures/components/MeasureContentContainer.js b/server/sonar-web/src/main/js/apps/component-measures/components/MeasureContentContainer.js
index 54d1e975031..160bf1d74b6 100644
--- a/server/sonar-web/src/main/js/apps/component-measures/components/MeasureContentContainer.js
+++ b/server/sonar-web/src/main/js/apps/component-measures/components/MeasureContentContainer.js
@@ -134,8 +134,8 @@ export default class MeasureContentContainer extends React.PureComponent {
className={this.props.className}
component={this.state.component}
currentUser={this.props.currentUser}
- loading={this.state.loading.measure || this.state.loading.components}
leakPeriod={this.props.leakPeriod}
+ loading={this.state.loading.measure || this.state.loading.components}
measure={this.state.measure}
metric={this.props.metric}
metrics={this.props.metrics}
diff --git a/server/sonar-web/src/main/js/apps/component-measures/components/MeasureFavoriteContainer.js b/server/sonar-web/src/main/js/apps/component-measures/components/MeasureFavoriteContainer.js
index 9eacba92a32..627913abc1c 100644
--- a/server/sonar-web/src/main/js/apps/component-measures/components/MeasureFavoriteContainer.js
+++ b/server/sonar-web/src/main/js/apps/component-measures/components/MeasureFavoriteContainer.js
@@ -97,4 +97,7 @@ const mapDispatchToProps = {
}
};
-export default connect(mapStateToProps, mapDispatchToProps)(MeasureFavoriteContainer);
+export default connect(
+ mapStateToProps,
+ mapDispatchToProps
+)(MeasureFavoriteContainer);
diff --git a/server/sonar-web/src/main/js/apps/component-measures/components/MeasureViewSelect.js b/server/sonar-web/src/main/js/apps/component-measures/components/MeasureViewSelect.js
index 0cc8795a154..e8fb726ef9f 100644
--- a/server/sonar-web/src/main/js/apps/component-measures/components/MeasureViewSelect.js
+++ b/server/sonar-web/src/main/js/apps/component-measures/components/MeasureViewSelect.js
@@ -89,11 +89,11 @@ export default class MeasureViewSelect extends React.PureComponent {
autoBlur={true}
className={this.props.className}
clearable={false}
+ onChange={this.handleChange}
+ options={this.getOptions()}
searchable={false}
value={this.props.view}
valueRenderer={this.renderValue}
- options={this.getOptions()}
- onChange={this.handleChange}
/>
);
}
diff --git a/server/sonar-web/src/main/js/apps/component-measures/components/__tests__/Breadcrumb-test.js b/server/sonar-web/src/main/js/apps/component-measures/components/__tests__/Breadcrumb-test.js
index 07618142a7e..cd4c0298fb8 100644
--- a/server/sonar-web/src/main/js/apps/component-measures/components/__tests__/Breadcrumb-test.js
+++ b/server/sonar-web/src/main/js/apps/component-measures/components/__tests__/Breadcrumb-test.js
@@ -31,8 +31,8 @@ it('should show the last element without clickable link', () => {
name: 'Foo',
qualifier: 'TRK'
}}
- isLast={true}
handleSelect={() => {}}
+ isLast={true}
/>
)
).toMatchSnapshot();
@@ -48,8 +48,8 @@ it('should correctly show a middle element', () => {
name: 'Foo',
qualifier: 'TRK'
}}
- isLast={false}
handleSelect={() => {}}
+ isLast={false}
/>
)
).toMatchSnapshot();
diff --git a/server/sonar-web/src/main/js/apps/component-measures/components/__tests__/MeasureViewSelect-test.js b/server/sonar-web/src/main/js/apps/component-measures/components/__tests__/MeasureViewSelect-test.js
index 115ade51760..48b39433226 100644
--- a/server/sonar-web/src/main/js/apps/component-measures/components/__tests__/MeasureViewSelect-test.js
+++ b/server/sonar-web/src/main/js/apps/component-measures/components/__tests__/MeasureViewSelect-test.js
@@ -24,7 +24,7 @@ import MeasureViewSelect from '../MeasureViewSelect';
it('should display correctly with treemap option', () => {
expect(
shallow(
- <MeasureViewSelect metric={{ type: 'PERCENT' }} handleViewChange={() => {}} view="tree" />
+ <MeasureViewSelect handleViewChange={() => {}} metric={{ type: 'PERCENT' }} view="tree" />
)
).toMatchSnapshot();
});
diff --git a/server/sonar-web/src/main/js/apps/component-measures/drilldown/MeasureCell.js b/server/sonar-web/src/main/js/apps/component-measures/drilldown/MeasureCell.js
index 8e7d69452a7..da55b93966d 100644
--- a/server/sonar-web/src/main/js/apps/component-measures/drilldown/MeasureCell.js
+++ b/server/sonar-web/src/main/js/apps/component-measures/drilldown/MeasureCell.js
@@ -40,7 +40,7 @@ export default function MeasureCell({ component, measure, metric } /*: Props */)
return (
<td className="thin nowrap text-right">
<span id={`component-measures-component-measure-${component.key}-${metric.key}`}>
- <Measure value={value} metricKey={metric.key} metricType={metric.type} />
+ <Measure metricKey={metric.key} metricType={metric.type} value={value} />
</span>
</td>
);
diff --git a/server/sonar-web/src/main/js/apps/component-measures/drilldown/TreeMapView.js b/server/sonar-web/src/main/js/apps/component-measures/drilldown/TreeMapView.js
index 6a79f5e3d56..ce1735a02ca 100644
--- a/server/sonar-web/src/main/js/apps/component-measures/drilldown/TreeMapView.js
+++ b/server/sonar-web/src/main/js/apps/component-measures/drilldown/TreeMapView.js
@@ -162,8 +162,8 @@ export default class TreeMapView extends React.PureComponent {
return (
<ColorGradientLegend
className="measure-details-treemap-legend"
- colorScale={colorScale}
colorNA={theme.secondFontColor}
+ colorScale={colorScale}
direction={metric.direction}
height={20}
width={200}
diff --git a/server/sonar-web/src/main/js/apps/component-measures/sidebar/FacetMeasureValue.js b/server/sonar-web/src/main/js/apps/component-measures/sidebar/FacetMeasureValue.js
index 93d7ff58493..70953357687 100644
--- a/server/sonar-web/src/main/js/apps/component-measures/sidebar/FacetMeasureValue.js
+++ b/server/sonar-web/src/main/js/apps/component-measures/sidebar/FacetMeasureValue.js
@@ -27,23 +27,23 @@ export default function FacetMeasureValue({ measure } /*: { measure: MeasureEnha
if (isDiffMetric(measure.metric.key)) {
return (
<div
- id={`measure-${measure.metric.key}-leak`}
- className="domain-measures-value domain-measures-leak">
+ className="domain-measures-value domain-measures-leak"
+ id={`measure-${measure.metric.key}-leak`}>
<Measure
- value={measure.leak}
metricKey={measure.metric.key}
metricType={measure.metric.type}
+ value={measure.leak}
/>
</div>
);
}
return (
- <div id={`measure-${measure.metric.key}-value`} className="domain-measures-value">
+ <div className="domain-measures-value" id={`measure-${measure.metric.key}-value`}>
<Measure
- value={measure.value}
metricKey={measure.metric.key}
metricType={measure.metric.type}
+ value={measure.value}
/>
</div>
);
diff --git a/server/sonar-web/src/main/js/apps/explore/Explore.tsx b/server/sonar-web/src/main/js/apps/explore/Explore.tsx
index 967796f4317..eb132497a6a 100644
--- a/server/sonar-web/src/main/js/apps/explore/Explore.tsx
+++ b/server/sonar-web/src/main/js/apps/explore/Explore.tsx
@@ -31,21 +31,21 @@ interface Props {
export default function Explore(props: Props) {
return (
<div id="explore">
- <ContextNavBar id="explore-navigation" height={theme.contextNavHeightRaw}>
+ <ContextNavBar height={theme.contextNavHeightRaw} id="explore-navigation">
<header className="navbar-context-header">
<h1>{translate('explore')}</h1>
</header>
<NavBarTabs>
<li>
- <Link to="/explore/projects" activeClassName="active">
+ <Link activeClassName="active" to="/explore/projects">
{translate('projects.page')}
</Link>
</li>
<li>
<Link
- to={{ pathname: '/explore/issues', query: { resolved: 'false' } }}
- activeClassName="active">
+ activeClassName="active"
+ to={{ pathname: '/explore/issues', query: { resolved: 'false' } }}>
{translate('issues.page')}
</Link>
</li>
diff --git a/server/sonar-web/src/main/js/apps/groups/components/List.tsx b/server/sonar-web/src/main/js/apps/groups/components/List.tsx
index bac8da1aa30..1971e243c15 100644
--- a/server/sonar-web/src/main/js/apps/groups/components/List.tsx
+++ b/server/sonar-web/src/main/js/apps/groups/components/List.tsx
@@ -35,7 +35,7 @@ interface Props {
export default function List(props: Props) {
return (
<div className="boxed-group boxed-group-inner">
- <table id="groups-list" className="data zebra zebra-hover">
+ <table className="data zebra zebra-hover" id="groups-list">
<thead>
<tr>
<th />
diff --git a/server/sonar-web/src/main/js/apps/groups/components/__tests__/__snapshots__/EditMembers-test.tsx.snap b/server/sonar-web/src/main/js/apps/groups/components/__tests__/__snapshots__/EditMembers-test.tsx.snap
index 4af0e007372..3e3b73245bb 100644
--- a/server/sonar-web/src/main/js/apps/groups/components/__tests__/__snapshots__/EditMembers-test.tsx.snap
+++ b/server/sonar-web/src/main/js/apps/groups/components/__tests__/__snapshots__/EditMembers-test.tsx.snap
@@ -45,7 +45,7 @@ exports[`should edit members 1`] = `
"clipRule": "evenodd",
"fillRule": "evenodd",
"strokeLinejoin": "round",
- "strokeMiterlimit": "1.41421",
+ "strokeMiterlimit": 1.41421,
}
}
version="1.1"
@@ -116,7 +116,7 @@ exports[`should edit members 2`] = `
"clipRule": "evenodd",
"fillRule": "evenodd",
"strokeLinejoin": "round",
- "strokeMiterlimit": "1.41421",
+ "strokeMiterlimit": 1.41421,
}
}
version="1.1"
@@ -393,7 +393,7 @@ exports[`should edit members 2`] = `
"clipRule": "evenodd",
"fillRule": "evenodd",
"strokeLinejoin": "round",
- "strokeMiterlimit": "1.41421",
+ "strokeMiterlimit": 1.41421,
}
}
version="1.1"
@@ -525,7 +525,7 @@ exports[`should edit members 3`] = `
"clipRule": "evenodd",
"fillRule": "evenodd",
"strokeLinejoin": "round",
- "strokeMiterlimit": "1.41421",
+ "strokeMiterlimit": 1.41421,
}
}
version="1.1"
diff --git a/server/sonar-web/src/main/js/apps/issues/actions.ts b/server/sonar-web/src/main/js/apps/issues/actions.ts
index 90a6897177f..76da57eb2fe 100644
--- a/server/sonar-web/src/main/js/apps/issues/actions.ts
+++ b/server/sonar-web/src/main/js/apps/issues/actions.ts
@@ -20,7 +20,7 @@
import { State } from './components/App';
import { allLocationsEmpty } from './utils';
-export function enableLocationsNavigator(state: State): Partial<State> | undefined {
+export function enableLocationsNavigator(state: State) {
const { openIssue, selectedLocationIndex } = state;
if (openIssue && (openIssue.secondaryLocations.length > 0 || openIssue.flows.length > 0)) {
const selectedFlowIndex =
@@ -36,15 +36,15 @@ export function enableLocationsNavigator(state: State): Partial<State> | undefin
};
}
}
- return undefined;
+ return null;
}
-export function disableLocationsNavigator(): Partial<State> {
+export function disableLocationsNavigator() {
return { locationsNavigator: false };
}
export function selectLocation(nextIndex: number | undefined) {
- return (state: State): Partial<State> | undefined => {
+ return (state: State) => {
const { selectedLocationIndex: index, openIssue } = state;
if (openIssue) {
if (!state.locationsNavigator) {
@@ -59,11 +59,11 @@ export function selectLocation(nextIndex: number | undefined) {
};
}
}
- return undefined;
+ return null;
};
}
-export function selectNextLocation(state: State): Partial<State> | undefined {
+export function selectNextLocation(state: State) {
const { selectedFlowIndex, selectedLocationIndex: index, openIssue } = state;
if (openIssue) {
const locations =
@@ -79,10 +79,10 @@ export function selectNextLocation(state: State): Partial<State> | undefined {
selectedLocationIndex: index !== undefined && index < lastLocationIdx ? index + 1 : index
};
}
- return undefined;
+ return null;
}
-export function selectPreviousLocation(state: State): Partial<State> | undefined {
+export function selectPreviousLocation(state: State) {
const { selectedFlowIndex, selectedLocationIndex: index, openIssue } = state;
if (openIssue) {
if (index === -1) {
@@ -95,16 +95,16 @@ export function selectPreviousLocation(state: State): Partial<State> | undefined
}
return { selectedLocationIndex: index !== undefined && index > 0 ? index - 1 : index };
}
- return undefined;
+ return null;
}
export function selectFlow(nextIndex?: number) {
- return (): Partial<State> => {
+ return () => {
return { selectedFlowIndex: nextIndex, selectedLocationIndex: 0 };
};
}
-export function selectNextFlow(state: State): Partial<State> | undefined {
+export function selectNextFlow(state: State) {
const { openIssue, selectedFlowIndex } = state;
if (
openIssue &&
@@ -113,13 +113,13 @@ export function selectNextFlow(state: State): Partial<State> | undefined {
) {
return { selectedFlowIndex: selectedFlowIndex + 1, selectedLocationIndex: 0 };
}
- return undefined;
+ return null;
}
-export function selectPreviousFlow(state: State): Partial<State> | undefined {
+export function selectPreviousFlow(state: State) {
const { openIssue, selectedFlowIndex } = state;
if (openIssue && selectedFlowIndex !== undefined && selectedFlowIndex > 0) {
return { selectedFlowIndex: selectedFlowIndex - 1, selectedLocationIndex: 0 };
}
- return undefined;
+ return null;
}
diff --git a/server/sonar-web/src/main/js/apps/issues/components/AppContainer.tsx b/server/sonar-web/src/main/js/apps/issues/components/AppContainer.tsx
index 683a016303f..a2c5a09d56a 100644
--- a/server/sonar-web/src/main/js/apps/issues/components/AppContainer.tsx
+++ b/server/sonar-web/src/main/js/apps/issues/components/AppContainer.tsx
@@ -93,6 +93,7 @@ interface OwnProps {
myIssues?: boolean;
}
-export default connect<StateProps, DispatchProps, OwnProps>(mapStateToProps, mapDispatchToProps)(
- lazyLoad(() => import('./App'))
-);
+export default connect<StateProps, DispatchProps, OwnProps>(
+ mapStateToProps,
+ mapDispatchToProps
+)(lazyLoad(() => import('./App')));
diff --git a/server/sonar-web/src/main/js/apps/issues/conciseIssuesList/ConciseIssueBox.tsx b/server/sonar-web/src/main/js/apps/issues/conciseIssuesList/ConciseIssueBox.tsx
index 65f14bb1b24..c8201f79b0e 100644
--- a/server/sonar-web/src/main/js/apps/issues/conciseIssuesList/ConciseIssueBox.tsx
+++ b/server/sonar-web/src/main/js/apps/issues/conciseIssuesList/ConciseIssueBox.tsx
@@ -59,7 +59,9 @@ export default class ConciseIssueBox extends React.PureComponent<Props> {
const locations =
selectedFlowIndex !== undefined
? flows[selectedFlowIndex]
- : flows.length > 0 ? flows[0] : secondaryLocations;
+ : flows.length > 0
+ ? flows[0]
+ : secondaryLocations;
if (!locations || locations.length < 15) {
// if there are no locations, or there are just few
diff --git a/server/sonar-web/src/main/js/apps/marketplace/components/PluginAvailable.tsx b/server/sonar-web/src/main/js/apps/marketplace/components/PluginAvailable.tsx
index 938163782e3..1e50dda69d8 100644
--- a/server/sonar-web/src/main/js/apps/marketplace/components/PluginAvailable.tsx
+++ b/server/sonar-web/src/main/js/apps/marketplace/components/PluginAvailable.tsx
@@ -71,7 +71,7 @@ export default function PluginAvailable({ plugin, readOnly, refreshPending, stat
</td>
{!readOnly && (
- <PluginStatus plugin={plugin} status={status} refreshPending={refreshPending} />
+ <PluginStatus plugin={plugin} refreshPending={refreshPending} status={status} />
)}
</tr>
);
diff --git a/server/sonar-web/src/main/js/apps/marketplace/components/PluginInstalled.tsx b/server/sonar-web/src/main/js/apps/marketplace/components/PluginInstalled.tsx
index 2d6faf4975d..c0fdbd7fe4f 100644
--- a/server/sonar-web/src/main/js/apps/marketplace/components/PluginInstalled.tsx
+++ b/server/sonar-web/src/main/js/apps/marketplace/components/PluginInstalled.tsx
@@ -59,7 +59,7 @@ export default function PluginInstalled({ plugin, readOnly, refreshPending, stat
</td>
{!readOnly && (
- <PluginStatus plugin={plugin} status={status} refreshPending={refreshPending} />
+ <PluginStatus plugin={plugin} refreshPending={refreshPending} status={status} />
)}
</tr>
);
diff --git a/server/sonar-web/src/main/js/apps/marketplace/components/PluginUpdateItem.tsx b/server/sonar-web/src/main/js/apps/marketplace/components/PluginUpdateItem.tsx
index 1bbb18782f2..0a2ce739b5e 100644
--- a/server/sonar-web/src/main/js/apps/marketplace/components/PluginUpdateItem.tsx
+++ b/server/sonar-web/src/main/js/apps/marketplace/components/PluginUpdateItem.tsx
@@ -52,7 +52,7 @@ export default class PluginUpdateItem extends React.PureComponent<Props, State>
render() {
const { release, update } = this.props;
return (
- <li key={release.version} className="display-flex-row little-spacer-bottom">
+ <li className="display-flex-row little-spacer-bottom" key={release.version}>
<div className="pull-left spacer-right">
{update.status === 'COMPATIBLE' ? (
<span className="js-update-version badge badge-success">{release.version}</span>
diff --git a/server/sonar-web/src/main/js/apps/marketplace/utils.ts b/server/sonar-web/src/main/js/apps/marketplace/utils.ts
index 0d80dc953af..ac04e962c24 100644
--- a/server/sonar-web/src/main/js/apps/marketplace/utils.ts
+++ b/server/sonar-web/src/main/js/apps/marketplace/utils.ts
@@ -113,14 +113,17 @@ export function isPluginPending(plugin: Plugin): plugin is PluginPending {
}
export const DEFAULT_FILTER = 'all';
-export const parseQuery = memoize((urlQuery: RawQuery): Query => ({
- filter: parseAsString(urlQuery['filter']) || DEFAULT_FILTER,
- search: parseAsString(urlQuery['search'])
-}));
-
-export const serializeQuery = memoize((query: Query): RawQuery =>
- cleanQuery({
- filter: query.filter === DEFAULT_FILTER ? undefined : serializeString(query.filter),
- search: query.search ? serializeString(query.search) : undefined
+export const parseQuery = memoize(
+ (urlQuery: RawQuery): Query => ({
+ filter: parseAsString(urlQuery['filter']) || DEFAULT_FILTER,
+ search: parseAsString(urlQuery['search'])
})
);
+
+export const serializeQuery = memoize(
+ (query: Query): RawQuery =>
+ cleanQuery({
+ filter: query.filter === DEFAULT_FILTER ? undefined : serializeString(query.filter),
+ search: query.search ? serializeString(query.search) : undefined
+ })
+);
diff --git a/server/sonar-web/src/main/js/apps/organizations/components/OrganizationDelete.tsx b/server/sonar-web/src/main/js/apps/organizations/components/OrganizationDelete.tsx
index 4625032fcdd..c1aac8ef5d6 100644
--- a/server/sonar-web/src/main/js/apps/organizations/components/OrganizationDelete.tsx
+++ b/server/sonar-web/src/main/js/apps/organizations/components/OrganizationDelete.tsx
@@ -128,6 +128,7 @@ export class OrganizationDelete extends React.PureComponent<Props, State> {
const mapDispatchToProps: DispatchToProps = { deleteOrganization: deleteOrganization as any };
-export default connect<null, DispatchToProps, OwnProps>(null, mapDispatchToProps)(
- OrganizationDelete
-);
+export default connect<null, DispatchToProps, OwnProps>(
+ null,
+ mapDispatchToProps
+)(OrganizationDelete);
diff --git a/server/sonar-web/src/main/js/apps/organizations/components/OrganizationEdit.tsx b/server/sonar-web/src/main/js/apps/organizations/components/OrganizationEdit.tsx
index af96e5ec02f..a81cbe614d3 100644
--- a/server/sonar-web/src/main/js/apps/organizations/components/OrganizationEdit.tsx
+++ b/server/sonar-web/src/main/js/apps/organizations/components/OrganizationEdit.tsx
@@ -197,4 +197,7 @@ export class OrganizationEdit extends React.PureComponent<Props, State> {
const mapDispatchToProps = { updateOrganization: updateOrganization as any };
-export default connect<{}, DispatchProps, OwnProps>(null, mapDispatchToProps)(OrganizationEdit);
+export default connect<{}, DispatchProps, OwnProps>(
+ null,
+ mapDispatchToProps
+)(OrganizationEdit);
diff --git a/server/sonar-web/src/main/js/apps/organizations/components/OrganizationMembersContainer.tsx b/server/sonar-web/src/main/js/apps/organizations/components/OrganizationMembersContainer.tsx
index cbc1d9d0d98..01226a51009 100644
--- a/server/sonar-web/src/main/js/apps/organizations/components/OrganizationMembersContainer.tsx
+++ b/server/sonar-web/src/main/js/apps/organizations/components/OrganizationMembersContainer.tsx
@@ -43,7 +43,7 @@ interface OwnProps {
interface StateProps {
memberLogins: string[];
members: OrganizationMember[];
- organization?: Organization;
+ organization: Organization;
organizationGroups: Group[];
status: { loading?: boolean; total?: number; pageIndex?: number; query?: string };
}
@@ -68,7 +68,7 @@ const mapStateToProps = (state: any, ownProps: OwnProps): StateProps => {
return {
memberLogins,
members: getUsersByLogins(state, memberLogins),
- organization: getOrganizationByKey(state, organizationKey),
+ organization: getOrganizationByKey(state, organizationKey)!,
organizationGroups: getOrganizationGroupsByKey(state, organizationKey),
status: getOrganizationMembersState(state, organizationKey)
};
@@ -83,6 +83,7 @@ const mapDispatchToProps = {
updateOrganizationMemberGroups
};
-export default connect<StateProps, DispatchProps, OwnProps>(mapStateToProps, mapDispatchToProps)(
- OrganizationMembers
-);
+export default connect<StateProps, DispatchProps, OwnProps>(
+ mapStateToProps,
+ mapDispatchToProps
+)(OrganizationMembers);
diff --git a/server/sonar-web/src/main/js/apps/organizations/components/OrganizationPage.tsx b/server/sonar-web/src/main/js/apps/organizations/components/OrganizationPage.tsx
index 44daa37abea..41981090047 100644
--- a/server/sonar-web/src/main/js/apps/organizations/components/OrganizationPage.tsx
+++ b/server/sonar-web/src/main/js/apps/organizations/components/OrganizationPage.tsx
@@ -118,6 +118,7 @@ const mapStateToProps = (state: any, ownProps: OwnProps) => ({
const mapDispatchToProps = { fetchOrganization: fetchOrganization as any };
-export default connect<StateProps, DispatchToProps, OwnProps>(mapStateToProps, mapDispatchToProps)(
- OrganizationPage
-);
+export default connect<StateProps, DispatchToProps, OwnProps>(
+ mapStateToProps,
+ mapDispatchToProps
+)(OrganizationPage);
diff --git a/server/sonar-web/src/main/js/apps/overview/events/Analysis.tsx b/server/sonar-web/src/main/js/apps/overview/events/Analysis.tsx
index 915316ce2fc..3b4eac183be 100644
--- a/server/sonar-web/src/main/js/apps/overview/events/Analysis.tsx
+++ b/server/sonar-web/src/main/js/apps/overview/events/Analysis.tsx
@@ -51,7 +51,9 @@ export default function Analysis({ analysis, ...props }: Props) {
{sortedEvents.length > 0 ? (
<div className="overview-activity-events">
- {sortedEvents.map(event => <Event event={event} key={event.key} />)}
+ {sortedEvents.map(event => (
+ <Event event={event} key={event.key} />
+ ))}
</div>
) : (
<span className="note">{translate('project_activity.analyzed', qualifier)}</span>
diff --git a/server/sonar-web/src/main/js/apps/overview/meta/MetaKey.tsx b/server/sonar-web/src/main/js/apps/overview/meta/MetaKey.tsx
index 4d6c5748748..f533a2bd828 100644
--- a/server/sonar-web/src/main/js/apps/overview/meta/MetaKey.tsx
+++ b/server/sonar-web/src/main/js/apps/overview/meta/MetaKey.tsx
@@ -31,7 +31,7 @@ export default function MetaKey({ componentKey, qualifier }: Props) {
<>
<h4 className="overview-meta-header">{translate('overview.project_key', qualifier)}</h4>
<div className="display-flex-center">
- <input className="overview-key" type="text" value={componentKey} readOnly={true} />
+ <input className="overview-key" readOnly={true} type="text" value={componentKey} />
<ClipboardButton className="little-spacer-left" copyValue={componentKey} />
</div>
</>
diff --git a/server/sonar-web/src/main/js/apps/overview/meta/MetaLinks.tsx b/server/sonar-web/src/main/js/apps/overview/meta/MetaLinks.tsx
index d9db8d5b150..5afa32a08ae 100644
--- a/server/sonar-web/src/main/js/apps/overview/meta/MetaLinks.tsx
+++ b/server/sonar-web/src/main/js/apps/overview/meta/MetaLinks.tsx
@@ -74,7 +74,9 @@ export default class MetaLinks extends React.PureComponent<Props, State> {
<div className="overview-meta-card">
<h4 className="overview-meta-header">{translate('overview.external_links')}</h4>
<ul className="overview-meta-list">
- {orderedLinks.map(link => <MetaLink key={link.id} link={link} />)}
+ {orderedLinks.map(link => (
+ <MetaLink key={link.id} link={link} />
+ ))}
</ul>
</div>
);
diff --git a/server/sonar-web/src/main/js/apps/overview/meta/MetaOrganizationKey.tsx b/server/sonar-web/src/main/js/apps/overview/meta/MetaOrganizationKey.tsx
index 9d8ca5a8000..73de7662404 100644
--- a/server/sonar-web/src/main/js/apps/overview/meta/MetaOrganizationKey.tsx
+++ b/server/sonar-web/src/main/js/apps/overview/meta/MetaOrganizationKey.tsx
@@ -30,7 +30,7 @@ export default function MetaOrganizationKey({ organization }: Props) {
<>
<h4 className="overview-meta-header big-spacer-top">{translate('organization_key')}</h4>
<div className="display-flex-center">
- <input className="overview-key" type="text" value={organization} readOnly={true} />
+ <input className="overview-key" readOnly={true} type="text" value={organization} />
<ClipboardButton className="little-spacer-left" copyValue={organization} />
</div>
</>
diff --git a/server/sonar-web/src/main/js/apps/overview/meta/MetaSize.tsx b/server/sonar-web/src/main/js/apps/overview/meta/MetaSize.tsx
index 243a5765d77..f1b25609103 100644
--- a/server/sonar-web/src/main/js/apps/overview/meta/MetaSize.tsx
+++ b/server/sonar-web/src/main/js/apps/overview/meta/MetaSize.tsx
@@ -68,7 +68,7 @@ export default class MetaSize extends React.PureComponent<Props> {
this.props.component.qualifier === 'TRK' ? 'overview-meta-size-lang-dist' : 'big-spacer-top';
return languageDistribution ? (
- <div id="overview-language-distribution" className={className}>
+ <div className={className} id="overview-language-distribution">
<LanguageDistributionContainer distribution={languageDistribution.value} width={160} />
</div>
) : null;
diff --git a/server/sonar-web/src/main/js/apps/overview/qualityGate/ApplicationQualityGate.tsx b/server/sonar-web/src/main/js/apps/overview/qualityGate/ApplicationQualityGate.tsx
index ecd6133cecb..91cba327f51 100644
--- a/server/sonar-web/src/main/js/apps/overview/qualityGate/ApplicationQualityGate.tsx
+++ b/server/sonar-web/src/main/js/apps/overview/qualityGate/ApplicationQualityGate.tsx
@@ -103,15 +103,13 @@ export default class ApplicationQualityGate extends React.PureComponent<Props, S
<div
className="overview-quality-gate-conditions-list clearfix"
id="overview-quality-gate-conditions-list">
- {projects
- .filter(project => project.status !== 'OK')
- .map(project => (
- <ApplicationQualityGateProject
- key={project.key}
- metrics={metrics}
- project={project}
- />
- ))}
+ {projects.filter(project => project.status !== 'OK').map(project => (
+ <ApplicationQualityGateProject
+ key={project.key}
+ metrics={metrics}
+ project={project}
+ />
+ ))}
</div>
)}
</div>
diff --git a/server/sonar-web/src/main/js/apps/overview/qualityGate/QualityGateCondition.js b/server/sonar-web/src/main/js/apps/overview/qualityGate/QualityGateCondition.js
index 8ff4cb04044..7e2d6d3772e 100644
--- a/server/sonar-web/src/main/js/apps/overview/qualityGate/QualityGateCondition.js
+++ b/server/sonar-web/src/main/js/apps/overview/qualityGate/QualityGateCondition.js
@@ -114,7 +114,7 @@ export default class QualityGateCondition extends React.PureComponent {
};
return RATING_METRICS_MAPPING[metricKey] ? (
- <Link to={this.getUrlForType(...RATING_METRICS_MAPPING[metricKey])} className={className}>
+ <Link className={className} to={this.getUrlForType(...RATING_METRICS_MAPPING[metricKey])}>
{children}
</Link>
) : (
@@ -153,15 +153,15 @@ export default class QualityGateCondition extends React.PureComponent {
<div className="overview-quality-gate-condition-value">
<Measure
decimals={decimals}
- value={actual}
metricKey={measure.metric.key}
metricType={measure.metric.type}
+ value={actual}
/>
</div>
<div>
<div className="overview-quality-gate-condition-metric">
- <IssueTypeIcon query={metric.key} className="little-spacer-right" />
+ <IssueTypeIcon className="little-spacer-right" query={metric.key} />
{metric.name}
</div>
{!isDiff &&
diff --git a/server/sonar-web/src/main/js/apps/permission-templates/components/App.js b/server/sonar-web/src/main/js/apps/permission-templates/components/App.js
index df020fbe8a4..d36592db6be 100644
--- a/server/sonar-web/src/main/js/apps/permission-templates/components/App.js
+++ b/server/sonar-web/src/main/js/apps/permission-templates/components/App.js
@@ -80,8 +80,8 @@ export default class App extends React.PureComponent {
return (
<Template
organization={this.props.organization}
- template={template}
refresh={this.requestPermissions}
+ template={template}
topQualifiers={this.props.topQualifiers}
/>
);
@@ -91,11 +91,11 @@ export default class App extends React.PureComponent {
return (
<Home
organization={this.props.organization}
- topQualifiers={this.props.topQualifiers}
permissions={this.state.permissions}
permissionTemplates={this.state.permissionTemplates}
ready={this.state.ready}
refresh={this.requestPermissions}
+ topQualifiers={this.props.topQualifiers}
/>
);
}
@@ -106,8 +106,8 @@ export default class App extends React.PureComponent {
<div>
<Suggestions suggestions="permission_templates" />
<OrganizationHelmet
- title={translate('permission_templates.page')}
organization={this.props.organization}
+ title={translate('permission_templates.page')}
/>
{id && this.renderTemplate(id)}
diff --git a/server/sonar-web/src/main/js/apps/permission-templates/components/Home.js b/server/sonar-web/src/main/js/apps/permission-templates/components/Home.js
index 046bdd984a2..3cf1b539834 100644
--- a/server/sonar-web/src/main/js/apps/permission-templates/components/Home.js
+++ b/server/sonar-web/src/main/js/apps/permission-templates/components/Home.js
@@ -47,10 +47,10 @@ export default class Home extends React.PureComponent {
<List
organization={this.props.organization}
- permissionTemplates={this.props.permissionTemplates}
permissions={this.props.permissions}
- topQualifiers={this.props.topQualifiers}
+ permissionTemplates={this.props.permissionTemplates}
refresh={this.props.refresh}
+ topQualifiers={this.props.topQualifiers}
/>
</div>
);
diff --git a/server/sonar-web/src/main/js/apps/permission-templates/components/List.js b/server/sonar-web/src/main/js/apps/permission-templates/components/List.js
index 290cd1e908f..fdc2ef38b3d 100644
--- a/server/sonar-web/src/main/js/apps/permission-templates/components/List.js
+++ b/server/sonar-web/src/main/js/apps/permission-templates/components/List.js
@@ -38,14 +38,14 @@ export default class List extends React.PureComponent {
key={p.id}
organization={this.props.organization}
permissionTemplate={p}
- topQualifiers={this.props.topQualifiers}
refresh={this.props.refresh}
+ topQualifiers={this.props.topQualifiers}
/>
));
return (
<div className="boxed-group boxed-group-inner">
- <table id="permission-templates" className="data zebra permissions-table">
+ <table className="data zebra permissions-table" id="permission-templates">
<ListHeader organization={this.props.organization} permissions={this.props.permissions} />
<tbody>{permissionTemplates}</tbody>
</table>
diff --git a/server/sonar-web/src/main/js/apps/permission-templates/components/ListItem.js b/server/sonar-web/src/main/js/apps/permission-templates/components/ListItem.js
index 9b3d0c530ce..96ac8ffe556 100644
--- a/server/sonar-web/src/main/js/apps/permission-templates/components/ListItem.js
+++ b/server/sonar-web/src/main/js/apps/permission-templates/components/ListItem.js
@@ -51,8 +51,8 @@ export default class ListItem extends React.PureComponent {
<ActionsCell
organization={this.props.organization}
permissionTemplate={this.props.permissionTemplate}
- topQualifiers={this.props.topQualifiers}
refresh={this.props.refresh}
+ topQualifiers={this.props.topQualifiers}
/>
</td>
</tr>
diff --git a/server/sonar-web/src/main/js/apps/permission-templates/components/NameCell.js b/server/sonar-web/src/main/js/apps/permission-templates/components/NameCell.js
index e7a1ebcb900..afeae1c6a09 100644
--- a/server/sonar-web/src/main/js/apps/permission-templates/components/NameCell.js
+++ b/server/sonar-web/src/main/js/apps/permission-templates/components/NameCell.js
@@ -45,8 +45,8 @@ export default class NameCell extends React.PureComponent {
{t.defaultFor.length > 0 && (
<div className="spacer-top js-defaults">
<Defaults
- permissionTemplate={this.props.permissionTemplate}
organization={organization}
+ permissionTemplate={this.props.permissionTemplate}
/>
</div>
)}
diff --git a/server/sonar-web/src/main/js/apps/permission-templates/components/TemplateDetails.js b/server/sonar-web/src/main/js/apps/permission-templates/components/TemplateDetails.js
index 0b3923be0a8..8370a72b902 100644
--- a/server/sonar-web/src/main/js/apps/permission-templates/components/TemplateDetails.js
+++ b/server/sonar-web/src/main/js/apps/permission-templates/components/TemplateDetails.js
@@ -34,7 +34,7 @@ export default class TemplateDetails extends React.PureComponent {
<div className="big-spacer-bottom">
{template.defaultFor.length > 0 && (
<div className="spacer-top js-defaults">
- <Defaults permissionTemplate={template} organization={this.props.organization} />
+ <Defaults organization={this.props.organization} permissionTemplate={template} />
</div>
)}
diff --git a/server/sonar-web/src/main/js/apps/permission-templates/components/TemplateHeader.js b/server/sonar-web/src/main/js/apps/permission-templates/components/TemplateHeader.js
index 9998758b75b..127600700a4 100644
--- a/server/sonar-web/src/main/js/apps/permission-templates/components/TemplateHeader.js
+++ b/server/sonar-web/src/main/js/apps/permission-templates/components/TemplateHeader.js
@@ -40,9 +40,9 @@ export default class TemplateHeader extends React.PureComponent {
: '/permission_templates';
return (
- <header id="project-permissions-header" className="page-header">
+ <header className="page-header" id="project-permissions-header">
<div className="note spacer-bottom">
- <Link to={pathname} className="text-muted">
+ <Link className="text-muted" to={pathname}>
{translate('permission_templates.page')}
</Link>
</div>
@@ -53,11 +53,11 @@ export default class TemplateHeader extends React.PureComponent {
<div className="pull-right">
<ActionsCell
+ fromDetails={true}
organization={this.props.organization}
permissionTemplate={this.props.template}
- topQualifiers={this.props.topQualifiers}
refresh={this.props.refresh}
- fromDetails={true}
+ topQualifiers={this.props.topQualifiers}
/>
</div>
</header>
diff --git a/server/sonar-web/src/main/js/apps/permission-templates/components/__tests__/Defaults-test.js b/server/sonar-web/src/main/js/apps/permission-templates/components/__tests__/Defaults-test.js
index 0dab8b12ede..ed819e648b3 100644
--- a/server/sonar-web/src/main/js/apps/permission-templates/components/__tests__/Defaults-test.js
+++ b/server/sonar-web/src/main/js/apps/permission-templates/components/__tests__/Defaults-test.js
@@ -42,13 +42,13 @@ it('should render several qualifiers', () => {
it('should render several qualifiers for default organization', () => {
const sample = { ...SAMPLE, defaultFor: ['TRK', 'VW'] };
const organization = { isDefault: true };
- const output = shallow(<Defaults permissionTemplate={sample} organization={organization} />);
+ const output = shallow(<Defaults organization={organization} permissionTemplate={sample} />);
expect(output).toMatchSnapshot();
});
it('should render only projects for custom organization', () => {
const sample = { ...SAMPLE, defaultFor: ['TRK', 'VW'] };
const organization = { isDefault: false };
- const output = shallow(<Defaults permissionTemplate={sample} organization={organization} />);
+ const output = shallow(<Defaults organization={organization} permissionTemplate={sample} />);
expect(output).toMatchSnapshot();
});
diff --git a/server/sonar-web/src/main/js/apps/permissions/project/components/App.js b/server/sonar-web/src/main/js/apps/permissions/project/components/App.js
index dc5888fcd08..c39d78e3d30 100644
--- a/server/sonar-web/src/main/js/apps/permissions/project/components/App.js
+++ b/server/sonar-web/src/main/js/apps/permissions/project/components/App.js
@@ -339,8 +339,8 @@ export default class App extends React.PureComponent {
<PageHeader
component={this.props.component}
- loading={this.state.loading}
loadHolders={this.loadHolders}
+ loading={this.state.loading}
/>
<PageError />
<div>
diff --git a/server/sonar-web/src/main/js/apps/permissions/project/components/AppContainer.js b/server/sonar-web/src/main/js/apps/permissions/project/components/AppContainer.js
index f022c5ea7b1..b95e406649f 100644
--- a/server/sonar-web/src/main/js/apps/permissions/project/components/AppContainer.js
+++ b/server/sonar-web/src/main/js/apps/permissions/project/components/AppContainer.js
@@ -30,4 +30,7 @@ const mapDispatchToProps = dispatch => ({
onRequestFail: onFail(dispatch)
});
-export default connect(mapStateToProps, mapDispatchToProps)(App);
+export default connect(
+ mapStateToProps,
+ mapDispatchToProps
+)(App);
diff --git a/server/sonar-web/src/main/js/apps/portfolio/components/App.tsx b/server/sonar-web/src/main/js/apps/portfolio/components/App.tsx
index 5e9b873b841..e12f6f7edc1 100644
--- a/server/sonar-web/src/main/js/apps/portfolio/components/App.tsx
+++ b/server/sonar-web/src/main/js/apps/portfolio/components/App.tsx
@@ -224,6 +224,7 @@ const mapStateToProps = (state: any): StateToProps => ({
metrics: getMetrics(state)
});
-export default connect<StateToProps, DispatchToProps, Props>(mapStateToProps, mapDispatchToProps)(
- App
-);
+export default connect<StateToProps, DispatchToProps, Props>(
+ mapStateToProps,
+ mapDispatchToProps
+)(App);
diff --git a/server/sonar-web/src/main/js/apps/portfolio/components/MainRating.tsx b/server/sonar-web/src/main/js/apps/portfolio/components/MainRating.tsx
index 3a6b5971893..2b177dde32f 100644
--- a/server/sonar-web/src/main/js/apps/portfolio/components/MainRating.tsx
+++ b/server/sonar-web/src/main/js/apps/portfolio/components/MainRating.tsx
@@ -30,7 +30,7 @@ interface Props {
export default function MainRating({ component, metric, value }: Props) {
return (
- <Link to={getMeasureTreemapUrl(component, metric)} className="portfolio-box-rating">
+ <Link className="portfolio-box-rating" to={getMeasureTreemapUrl(component, metric)}>
<Rating value={value} />
</Link>
);
diff --git a/server/sonar-web/src/main/js/apps/portfolio/components/ReleasabilityBox.tsx b/server/sonar-web/src/main/js/apps/portfolio/components/ReleasabilityBox.tsx
index dc805cf0433..8ec942f2e6e 100644
--- a/server/sonar-web/src/main/js/apps/portfolio/components/ReleasabilityBox.tsx
+++ b/server/sonar-web/src/main/js/apps/portfolio/components/ReleasabilityBox.tsx
@@ -42,8 +42,8 @@ export default function ReleasabilityBox({ component, measures }: Props) {
{rating && (
<Link
- to={getComponentDrilldownUrl({ componentKey: component, metric: 'alert_status' })}
- className="portfolio-box-rating">
+ className="portfolio-box-rating"
+ to={getComponentDrilldownUrl({ componentKey: component, metric: 'alert_status' })}>
<Rating value={rating} />
</Link>
)}
diff --git a/server/sonar-web/src/main/js/apps/portfolio/components/Report.tsx b/server/sonar-web/src/main/js/apps/portfolio/components/Report.tsx
index 478cd3d8608..1331d80fc43 100644
--- a/server/sonar-web/src/main/js/apps/portfolio/components/Report.tsx
+++ b/server/sonar-web/src/main/js/apps/portfolio/components/Report.tsx
@@ -92,9 +92,9 @@ export default class Report extends React.PureComponent<Props, State> {
<div className="spacer-top">
<a
className="button js-report-download"
+ download={component.name + ' - Executive Report.pdf'}
href={getReportUrl(component.key)}
- target="_blank"
- download={component.name + ' - Executive Report.pdf'}>
+ target="_blank">
{translate('report.print')}
</a>
</div>
diff --git a/server/sonar-web/src/main/js/apps/portfolio/components/WorstProjects.tsx b/server/sonar-web/src/main/js/apps/portfolio/components/WorstProjects.tsx
index 89752754338..46db61f7c14 100644
--- a/server/sonar-web/src/main/js/apps/portfolio/components/WorstProjects.tsx
+++ b/server/sonar-web/src/main/js/apps/portfolio/components/WorstProjects.tsx
@@ -74,8 +74,8 @@ export default function WorstProjects({ component, subComponents, total }: Props
<tr key={component.key}>
<td>
<Link
- to={getProjectUrl(component.refKey || component.key)}
- className="link-with-icon">
+ className="link-with-icon"
+ to={getProjectUrl(component.refKey || component.key)}>
<QualifierIcon qualifier={component.qualifier} /> {component.name}
</Link>
</td>
@@ -98,7 +98,7 @@ export default function WorstProjects({ component, subComponents, total }: Props
formatMeasure(count, 'INT'),
formatMeasure(total, 'INT')
)}
- <Link to={projectsPageUrl} className="spacer-left">
+ <Link className="spacer-left" to={projectsPageUrl}>
{translate('show_more')}
</Link>
</footer>
@@ -117,15 +117,15 @@ function renderCell(measures: { [key: string]: string | undefined }, metric: str
function renderNcloc(measures: { [key: string]: string | undefined }, maxLoc: number) {
const ncloc = Number(measures['ncloc'] || 0);
- const barWidth = maxLoc > 0 ? Math.max(1, Math.round(ncloc / maxLoc * 50)) : 0;
+ const barWidth = maxLoc > 0 ? Math.max(1, Math.round((ncloc / maxLoc) * 50)) : 0;
return (
<td className="text-right">
<span className="note">
<Measure metricKey="ncloc" metricType="SHORT_INT" value={measures['ncloc']} />
</span>
{maxLoc > 0 && (
- <svg width="50" height="16" className="spacer-left">
- <rect className="bar-chart-bar" x="0" y="3" width={barWidth} height="10" />
+ <svg className="spacer-left" height="16" width="50">
+ <rect className="bar-chart-bar" height="10" width={barWidth} x="0" y="3" />
</svg>
)}
</td>
diff --git a/server/sonar-web/src/main/js/apps/project-admin/key/BulkUpdate.js b/server/sonar-web/src/main/js/apps/project-admin/key/BulkUpdate.js
index cf6ffdb2d9a..9919f4b8604 100644
--- a/server/sonar-web/src/main/js/apps/project-admin/key/BulkUpdate.js
+++ b/server/sonar-web/src/main/js/apps/project-admin/key/BulkUpdate.js
@@ -127,10 +127,10 @@ class BulkUpdate extends React.PureComponent {
{results != null && (
<BulkUpdateResults
- results={results}
- replace={replace}
by={by}
onConfirm={this.handleConfirm.bind(this)}
+ replace={replace}
+ results={results}
/>
)}
</div>
@@ -138,8 +138,11 @@ class BulkUpdate extends React.PureComponent {
}
}
-export default connect(null, {
- addGlobalErrorMessage,
- addGlobalSuccessMessage,
- closeAllGlobalMessages
-})(BulkUpdate);
+export default connect(
+ null,
+ {
+ addGlobalErrorMessage,
+ addGlobalSuccessMessage,
+ closeAllGlobalMessages
+ }
+)(BulkUpdate);
diff --git a/server/sonar-web/src/main/js/apps/project-admin/key/Key.js b/server/sonar-web/src/main/js/apps/project-admin/key/Key.js
index d1688ed106e..2d272a903ad 100644
--- a/server/sonar-web/src/main/js/apps/project-admin/key/Key.js
+++ b/server/sonar-web/src/main/js/apps/project-admin/key/Key.js
@@ -144,10 +144,13 @@ const mapStateToProps = (state, ownProps) => ({
modules: getProjectAdminProjectModules(state, ownProps.location.query.id)
});
-export default connect(mapStateToProps, {
- fetchProjectModules,
- changeKey,
- addGlobalErrorMessage,
- addGlobalSuccessMessage,
- closeAllGlobalMessages
-})(Key);
+export default connect(
+ mapStateToProps,
+ {
+ fetchProjectModules,
+ changeKey,
+ addGlobalErrorMessage,
+ addGlobalSuccessMessage,
+ closeAllGlobalMessages
+ }
+)(Key);
diff --git a/server/sonar-web/src/main/js/apps/project-admin/links/Links.js b/server/sonar-web/src/main/js/apps/project-admin/links/Links.js
index fa77e03c6b8..15227725c0d 100644
--- a/server/sonar-web/src/main/js/apps/project-admin/links/Links.js
+++ b/server/sonar-web/src/main/js/apps/project-admin/links/Links.js
@@ -60,8 +60,11 @@ const mapStateToProps = (state, ownProps) => ({
links: getProjectAdminProjectLinks(state, ownProps.location.query.id)
});
-export default connect(mapStateToProps, {
- fetchProjectLinks,
- createProjectLink,
- deleteProjectLink
-})(Links);
+export default connect(
+ mapStateToProps,
+ {
+ fetchProjectLinks,
+ createProjectLink,
+ deleteProjectLink
+ }
+)(Links);
diff --git a/server/sonar-web/src/main/js/apps/projectActivity/components/GraphHistory.js b/server/sonar-web/src/main/js/apps/projectActivity/components/GraphHistory.js
index 535529ccc18..c9bb46571d3 100644
--- a/server/sonar-web/src/main/js/apps/projectActivity/components/GraphHistory.js
+++ b/server/sonar-web/src/main/js/apps/projectActivity/components/GraphHistory.js
@@ -82,7 +82,7 @@ export default class GraphHistory extends React.PureComponent {
return (
<div className="project-activity-graph-container">
{this.props.isCustom ? (
- <GraphsLegendCustom series={series} removeMetric={this.props.removeCustomMetric} />
+ <GraphsLegendCustom removeMetric={this.props.removeCustomMetric} series={series} />
) : (
<GraphsLegendStatic series={series} />
)}
@@ -92,10 +92,9 @@ export default class GraphHistory extends React.PureComponent {
<div>
<AdvancedTimeline
endDate={this.props.graphEndDate}
+ formatYTick={this.formatValue}
height={height}
- width={width}
interpolate="linear"
- formatYTick={this.formatValue}
leakPeriodDate={this.props.leakPeriodDate}
metricType={this.props.metricsType}
selectedDate={selectedDate}
@@ -105,6 +104,7 @@ export default class GraphHistory extends React.PureComponent {
updateSelectedDate={this.props.updateSelectedDate}
updateTooltip={this.updateTooltip}
updateZoom={this.props.updateGraphZoom}
+ width={width}
/>
{selectedDate != null &&
tooltipXPos != null && (
diff --git a/server/sonar-web/src/main/js/apps/projectActivity/components/GraphsHistory.js b/server/sonar-web/src/main/js/apps/projectActivity/components/GraphsHistory.js
index 989b2ea690b..8bedfa774e4 100644
--- a/server/sonar-web/src/main/js/apps/projectActivity/components/GraphsHistory.js
+++ b/server/sonar-web/src/main/js/apps/projectActivity/components/GraphsHistory.js
@@ -142,12 +142,12 @@ export default class GraphsHistory extends React.PureComponent {
<div className="project-activity-graphs">
{this.props.graphs.map((series, idx) => (
<GraphHistory
- key={idx}
events={events}
graph={graph}
graphEndDate={this.props.graphEndDate}
graphStartDate={this.props.graphStartDate}
isCustom={isCustom}
+ key={idx}
leakPeriodDate={this.props.leakPeriodDate}
measuresHistory={this.props.measuresHistory}
metricsType={getSeriesMetricType(series)}
diff --git a/server/sonar-web/src/main/js/apps/projectActivity/components/GraphsLegendCustom.js b/server/sonar-web/src/main/js/apps/projectActivity/components/GraphsLegendCustom.js
index bead6826b4f..166477120c2 100644
--- a/server/sonar-web/src/main/js/apps/projectActivity/components/GraphsLegendCustom.js
+++ b/server/sonar-web/src/main/js/apps/projectActivity/components/GraphsLegendCustom.js
@@ -41,9 +41,9 @@ export default function GraphsLegendCustom({ removeMetric, series } /*: Props */
<GraphsLegendItem
metric={serie.name}
name={serie.translatedName}
+ removeMetric={removeMetric}
showWarning={!hasData}
style={idx.toString()}
- removeMetric={removeMetric}
/>
);
if (!hasData) {
diff --git a/server/sonar-web/src/main/js/apps/projectActivity/components/GraphsTooltipsContent.js b/server/sonar-web/src/main/js/apps/projectActivity/components/GraphsTooltipsContent.js
index da1b227fa23..9d05d9c95f6 100644
--- a/server/sonar-web/src/main/js/apps/projectActivity/components/GraphsTooltipsContent.js
+++ b/server/sonar-web/src/main/js/apps/projectActivity/components/GraphsTooltipsContent.js
@@ -33,7 +33,7 @@ type Props = {
export default function GraphsTooltipsContent({ name, style, translatedName, value } /*: Props */) {
return (
- <tr key={name} className="project-activity-graph-tooltip-line">
+ <tr className="project-activity-graph-tooltip-line" key={name}>
<td className="thin">
<ChartLegendIcon
className={classNames('spacer-right line-chart-legend', 'line-chart-legend-' + style)}
diff --git a/server/sonar-web/src/main/js/apps/projectActivity/components/GraphsTooltipsContentCoverage.js b/server/sonar-web/src/main/js/apps/projectActivity/components/GraphsTooltipsContentCoverage.js
index 4334b38efaa..ea2889a67db 100644
--- a/server/sonar-web/src/main/js/apps/projectActivity/components/GraphsTooltipsContentCoverage.js
+++ b/server/sonar-web/src/main/js/apps/projectActivity/components/GraphsTooltipsContentCoverage.js
@@ -53,8 +53,8 @@ export default function GraphsTooltipsContentCoverage(
{uncoveredValue && (
<tr className="project-activity-graph-tooltip-line">
<td
- colSpan="2"
- className="project-activity-graph-tooltip-value text-right spacer-right thin">
+ className="project-activity-graph-tooltip-value text-right spacer-right thin"
+ colSpan="2">
{formatMeasure(uncoveredValue, 'SHORT_INT')}
</td>
<td>{translate('metric.uncovered_lines.name')}</td>
@@ -63,8 +63,8 @@ export default function GraphsTooltipsContentCoverage(
{coverageValue && (
<tr className="project-activity-graph-tooltip-line">
<td
- colSpan="2"
- className="project-activity-graph-tooltip-value text-right spacer-right thin">
+ className="project-activity-graph-tooltip-value text-right spacer-right thin"
+ colSpan="2">
{formatMeasure(coverageValue, 'PERCENT')}
</td>
<td>{translate('metric.coverage.name')}</td>
diff --git a/server/sonar-web/src/main/js/apps/projectActivity/components/GraphsTooltipsContentDuplication.js b/server/sonar-web/src/main/js/apps/projectActivity/components/GraphsTooltipsContentDuplication.js
index 36305c85368..d07405ed649 100644
--- a/server/sonar-web/src/main/js/apps/projectActivity/components/GraphsTooltipsContentDuplication.js
+++ b/server/sonar-web/src/main/js/apps/projectActivity/components/GraphsTooltipsContentDuplication.js
@@ -55,8 +55,8 @@ export default function GraphsTooltipsContentDuplication(
)}
<tr className="project-activity-graph-tooltip-line">
<td
- colSpan="2"
- className="project-activity-graph-tooltip-value text-right spacer-right thin">
+ className="project-activity-graph-tooltip-value text-right spacer-right thin"
+ colSpan="2">
{formatMeasure(duplicationDensityValue, 'PERCENT')}
</td>
<td>{translate('metric.duplicated_lines_density.name')}</td>
diff --git a/server/sonar-web/src/main/js/apps/projectActivity/components/GraphsTooltipsContentEvents.js b/server/sonar-web/src/main/js/apps/projectActivity/components/GraphsTooltipsContentEvents.js
index 48d8a840aee..9a9fd699678 100644
--- a/server/sonar-web/src/main/js/apps/projectActivity/components/GraphsTooltipsContentEvents.js
+++ b/server/sonar-web/src/main/js/apps/projectActivity/components/GraphsTooltipsContentEvents.js
@@ -44,7 +44,7 @@ export default function GraphsTooltipsContentEvents({ addSeparator, events } /*:
<td colSpan="3">
<span>{translate('events')}:</span>
{events.map(event => (
- <span key={event.key} className="spacer-left">
+ <span className="spacer-left" key={event.key}>
<ProjectEventIcon className={'project-activity-event-icon ' + event.category} />
</span>
))}
diff --git a/server/sonar-web/src/main/js/apps/projectActivity/components/GraphsTooltipsContentIssues.js b/server/sonar-web/src/main/js/apps/projectActivity/components/GraphsTooltipsContentIssues.js
index 0934fa40d1e..11aa433612b 100644
--- a/server/sonar-web/src/main/js/apps/projectActivity/components/GraphsTooltipsContentIssues.js
+++ b/server/sonar-web/src/main/js/apps/projectActivity/components/GraphsTooltipsContentIssues.js
@@ -50,7 +50,7 @@ export default function GraphsTooltipsContentIssues(props /*: Props */) {
}
const ratingValue = rating.history[props.tooltipIdx].value;
return (
- <tr key={props.name} className="project-activity-graph-tooltip-issues-line">
+ <tr className="project-activity-graph-tooltip-issues-line" key={props.name}>
<td className="thin">
<ChartLegendIcon
className={classNames(
diff --git a/server/sonar-web/src/main/js/apps/projectActivity/components/GraphsZoom.js b/server/sonar-web/src/main/js/apps/projectActivity/components/GraphsZoom.js
index 1cf79296c10..5f646a05273 100644
--- a/server/sonar-web/src/main/js/apps/projectActivity/components/GraphsZoom.js
+++ b/server/sonar-web/src/main/js/apps/projectActivity/components/GraphsZoom.js
@@ -51,7 +51,6 @@ export default function GraphsZoom(props /*: Props */) {
<ZoomTimeLine
endDate={props.graphEndDate}
height={64}
- width={width}
interpolate="linear"
leakPeriodDate={props.leakPeriodDate}
metricType={props.metricsType}
@@ -60,6 +59,7 @@ export default function GraphsZoom(props /*: Props */) {
showAreas={props.showAreas}
startDate={props.graphStartDate}
updateZoom={props.updateGraphZoom}
+ width={width}
/>
)}
</AutoSizer>
diff --git a/server/sonar-web/src/main/js/apps/projectActivity/components/ProjectActivityAnalysesList.js b/server/sonar-web/src/main/js/apps/projectActivity/components/ProjectActivityAnalysesList.js
index 9d0b7f38956..9b39fdc783d 100644
--- a/server/sonar-web/src/main/js/apps/projectActivity/components/ProjectActivityAnalysesList.js
+++ b/server/sonar-web/src/main/js/apps/projectActivity/components/ProjectActivityAnalysesList.js
@@ -189,8 +189,8 @@ export default class ProjectActivityAnalysesList extends React.PureComponent {
{version.version && (
<div className={classNames('project-activity-version-badge', { first: idx === 0 })}>
<Tooltip
- overlay={`${translate('version')} ${version.version}`}
- mouseEnterDelay={0.5}>
+ mouseEnterDelay={0.5}
+ overlay={`${translate('version')} ${version.version}`}>
<span className="badge">{version.version}</span>
</Tooltip>
</div>
@@ -198,9 +198,9 @@ export default class ProjectActivityAnalysesList extends React.PureComponent {
<ul className="project-activity-days-list">
{days.map(day => (
<li
- key={day}
className="project-activity-day"
- data-day={toShortNotSoISOString(Number(day))}>
+ data-day={toShortNotSoISOString(Number(day))}
+ key={day}>
<div className="project-activity-date">
<DateFormatter date={Number(day)} long={true} />
</div>
@@ -212,8 +212,8 @@ export default class ProjectActivityAnalysesList extends React.PureComponent {
addVersion={this.props.addVersion}
analysis={analysis}
canAdmin={this.props.canAdmin}
- canDeleteAnalyses={this.props.canDeleteAnalyses}
canCreateVersion={this.props.project.qualifier === 'TRK'}
+ canDeleteAnalyses={this.props.canDeleteAnalyses}
changeEvent={this.props.changeEvent}
deleteAnalysis={this.props.deleteAnalysis}
deleteEvent={this.props.deleteEvent}
diff --git a/server/sonar-web/src/main/js/apps/projectActivity/components/ProjectActivityApp.js b/server/sonar-web/src/main/js/apps/projectActivity/components/ProjectActivityApp.js
index 567853ebe55..e2d931038e4 100644
--- a/server/sonar-web/src/main/js/apps/projectActivity/components/ProjectActivityApp.js
+++ b/server/sonar-web/src/main/js/apps/projectActivity/components/ProjectActivityApp.js
@@ -61,7 +61,7 @@ export default function ProjectActivityApp(props /*: Props */) {
(configuration ? configuration.showHistory : false);
const canDeleteAnalyses = configuration ? configuration.showHistory : false;
return (
- <div id="project-activity" className="page page-limited">
+ <div className="page page-limited" id="project-activity">
<Suggestions suggestions="project_activity" />
<Helmet title={translate('project_activity.page')} />
@@ -78,12 +78,12 @@ export default function ProjectActivityApp(props /*: Props */) {
<ProjectActivityAnalysesList
addCustomEvent={props.addCustomEvent}
addVersion={props.addVersion}
- analysesLoading={props.analysesLoading}
analyses={analyses}
+ analysesLoading={props.analysesLoading}
canAdmin={canAdmin}
canDeleteAnalyses={canDeleteAnalyses}
- className="boxed-group-inner"
changeEvent={props.changeEvent}
+ className="boxed-group-inner"
deleteAnalysis={props.deleteAnalysis}
deleteEvent={props.deleteEvent}
initializing={props.initializing}
diff --git a/server/sonar-web/src/main/js/apps/projectActivity/components/ProjectActivityPageFooter.js b/server/sonar-web/src/main/js/apps/projectActivity/components/ProjectActivityPageFooter.js
index 927594cfc42..e5bbde9aae7 100644
--- a/server/sonar-web/src/main/js/apps/projectActivity/components/ProjectActivityPageFooter.js
+++ b/server/sonar-web/src/main/js/apps/projectActivity/components/ProjectActivityPageFooter.js
@@ -36,5 +36,5 @@ export default function ProjectActivityPageFooter(
if (!paging || analyses.length === 0) {
return null;
}
- return <ListFooter count={analyses.length} total={paging.total} loadMore={fetchMoreActivity} />;
+ return <ListFooter count={analyses.length} loadMore={fetchMoreActivity} total={paging.total} />;
}
diff --git a/server/sonar-web/src/main/js/apps/projectActivity/components/ProjectActivityPageHeader.js b/server/sonar-web/src/main/js/apps/projectActivity/components/ProjectActivityPageHeader.js
index 85b0305515b..9ad7d3f98f7 100644
--- a/server/sonar-web/src/main/js/apps/projectActivity/components/ProjectActivityPageHeader.js
+++ b/server/sonar-web/src/main/js/apps/projectActivity/components/ProjectActivityPageHeader.js
@@ -57,21 +57,21 @@ export default class ProjectActivityPageHeader extends React.PureComponent {
{!['VW', 'SVW'].includes(this.props.project.qualifier) && (
<Select
className="input-medium pull-left big-spacer-right"
- placeholder={translate('project_activity.filter_events') + '...'}
clearable={true}
+ onChange={this.handleCategoryChange}
+ optionComponent={ProjectActivityEventSelectOption}
+ options={this.options}
+ placeholder={translate('project_activity.filter_events') + '...'}
searchable={false}
value={this.props.category}
- optionComponent={ProjectActivityEventSelectOption}
valueComponent={ProjectActivityEventSelectValue}
- options={this.options}
- onChange={this.handleCategoryChange}
/>
)}
<ProjectActivityDateInput
className="pull-left"
from={this.props.from}
- to={this.props.to}
onChange={this.props.updateQuery}
+ to={this.props.to}
/>
</header>
);
diff --git a/server/sonar-web/src/main/js/apps/projectActivity/components/__tests__/GraphsLegendItem-test.tsx b/server/sonar-web/src/main/js/apps/projectActivity/components/__tests__/GraphsLegendItem-test.tsx
index 80d6c9bd861..f92da80a7ff 100644
--- a/server/sonar-web/src/main/js/apps/projectActivity/components/__tests__/GraphsLegendItem-test.tsx
+++ b/server/sonar-web/src/main/js/apps/projectActivity/components/__tests__/GraphsLegendItem-test.tsx
@@ -32,8 +32,8 @@ it('should render correctly an actionable legend', () => {
className="myclass"
metric="foo"
name="Foo"
- style="1"
removeMetric={() => {}}
+ style="1"
/>
)
).toMatchSnapshot();
diff --git a/server/sonar-web/src/main/js/apps/projectActivity/components/__tests__/ProjectActivityDateInput-test.js b/server/sonar-web/src/main/js/apps/projectActivity/components/__tests__/ProjectActivityDateInput-test.js
index de9f2696f1c..b9e93f16b76 100644
--- a/server/sonar-web/src/main/js/apps/projectActivity/components/__tests__/ProjectActivityDateInput-test.js
+++ b/server/sonar-web/src/main/js/apps/projectActivity/components/__tests__/ProjectActivityDateInput-test.js
@@ -27,8 +27,8 @@ it('should render correctly the date inputs', () => {
shallowWithIntl(
<ProjectActivityDateInput
from={parseDate('2016-10-27T12:21:15+0000')}
- to={parseDate('2016-12-27T12:21:15+0000')}
onChange={() => {}}
+ to={parseDate('2016-12-27T12:21:15+0000')}
/>
)
).toMatchSnapshot();
diff --git a/server/sonar-web/src/main/js/apps/projectBranches/components/LongBranchesPattern.tsx b/server/sonar-web/src/main/js/apps/projectBranches/components/LongBranchesPattern.tsx
index 61c9e133c4c..487ec48c432 100644
--- a/server/sonar-web/src/main/js/apps/projectBranches/components/LongBranchesPattern.tsx
+++ b/server/sonar-web/src/main/js/apps/projectBranches/components/LongBranchesPattern.tsx
@@ -89,8 +89,8 @@ export default class LongBranchesPattern extends React.PureComponent<Props, Stat
<EditButton className="button-small spacer-left" onClick={this.handleChangeClick} />
{this.state.formOpen && (
<LongBranchesPatternForm
- onClose={this.closeForm}
onChange={this.handleChange}
+ onClose={this.closeForm}
project={this.props.project}
setting={setting}
/>
diff --git a/server/sonar-web/src/main/js/apps/projectQualityProfiles/App.tsx b/server/sonar-web/src/main/js/apps/projectQualityProfiles/App.tsx
index 381e56d4fd1..9cd66cea2cf 100644
--- a/server/sonar-web/src/main/js/apps/projectQualityProfiles/App.tsx
+++ b/server/sonar-web/src/main/js/apps/projectQualityProfiles/App.tsx
@@ -131,8 +131,8 @@ export default class QualityProfiles extends React.PureComponent<Props, State> {
profiles && (
<Table
allProfiles={allProfiles}
- profiles={profiles}
onChangeProfile={this.handleChangeProfile}
+ profiles={profiles}
/>
)
)}
diff --git a/server/sonar-web/src/main/js/apps/projectQualityProfiles/ProfileRow.tsx b/server/sonar-web/src/main/js/apps/projectQualityProfiles/ProfileRow.tsx
index d430f983921..4d31caa9edd 100644
--- a/server/sonar-web/src/main/js/apps/projectQualityProfiles/ProfileRow.tsx
+++ b/server/sonar-web/src/main/js/apps/projectQualityProfiles/ProfileRow.tsx
@@ -90,8 +90,8 @@ export default class ProfileRow extends React.PureComponent<Props, State> {
optionRenderer={this.renderProfileName}
options={options}
style={{ width: 300 }}
- valueRenderer={this.renderProfileName}
value={profile.key}
+ valueRenderer={this.renderProfileName}
/>
);
}
diff --git a/server/sonar-web/src/main/js/apps/projectQualityProfiles/Table.tsx b/server/sonar-web/src/main/js/apps/projectQualityProfiles/Table.tsx
index 27862e2ae5d..1563e159755 100644
--- a/server/sonar-web/src/main/js/apps/projectQualityProfiles/Table.tsx
+++ b/server/sonar-web/src/main/js/apps/projectQualityProfiles/Table.tsx
@@ -37,9 +37,9 @@ export default function Table(props: Props) {
const profileRows = orderedProfiles.map(profile => (
<ProfileRow
key={profile.language}
- profile={profile}
- possibleProfiles={profilesByLanguage[profile.language]}
onChangeProfile={props.onChangeProfile}
+ possibleProfiles={profilesByLanguage[profile.language]}
+ profile={profile}
/>
));
diff --git a/server/sonar-web/src/main/js/apps/projects/components/FavoriteFilterContainer.tsx b/server/sonar-web/src/main/js/apps/projects/components/FavoriteFilterContainer.tsx
index 9314497e953..a869603b9ba 100644
--- a/server/sonar-web/src/main/js/apps/projects/components/FavoriteFilterContainer.tsx
+++ b/server/sonar-web/src/main/js/apps/projects/components/FavoriteFilterContainer.tsx
@@ -17,7 +17,12 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
+import { connect } from 'react-redux';
import FavoriteFilter from './FavoriteFilter';
-import { withCurrentUser } from '../../../store/withCurrentUser';
+import { getCurrentUser } from '../../../store/rootReducer';
-export default withCurrentUser(FavoriteFilter);
+function mapStateToProps(state: any) {
+ return { currentUser: getCurrentUser(state) };
+}
+
+export default connect(mapStateToProps)(FavoriteFilter);
diff --git a/server/sonar-web/src/main/js/apps/projects/components/__tests__/PerspectiveSelect-test.tsx b/server/sonar-web/src/main/js/apps/projects/components/__tests__/PerspectiveSelect-test.tsx
index 0e65862014a..bf55319fd00 100644
--- a/server/sonar-web/src/main/js/apps/projects/components/__tests__/PerspectiveSelect-test.tsx
+++ b/server/sonar-web/src/main/js/apps/projects/components/__tests__/PerspectiveSelect-test.tsx
@@ -36,7 +36,7 @@ it('should render with coverage selected', () => {
it('should handle perspective change correctly', () => {
const onChange = jest.fn();
const instance = shallow(
- <PerspectiveSelect view="visualizations" visualization="coverage" onChange={onChange} />
+ <PerspectiveSelect onChange={onChange} view="visualizations" visualization="coverage" />
).instance() as PerspectiveSelect;
instance.handleChange({ label: 'overall', value: 'overall', type: 'view' });
instance.handleChange({ label: 'leak', value: 'leak', type: 'view' });
diff --git a/server/sonar-web/src/main/js/apps/projects/create/CreateProjectPage.tsx b/server/sonar-web/src/main/js/apps/projects/create/CreateProjectPage.tsx
index fd86a11afee..41a518401c7 100644
--- a/server/sonar-web/src/main/js/apps/projects/create/CreateProjectPage.tsx
+++ b/server/sonar-web/src/main/js/apps/projects/create/CreateProjectPage.tsx
@@ -51,9 +51,7 @@ interface DispatchProps {
skipOnboardingAction: () => void;
}
-interface Props extends OwnProps, StateProps, DispatchProps {
- currentUser: LoggedInUser;
-}
+type Props = StateProps & DispatchProps & OwnProps;
interface State {
identityProvider?: IdentityProvider;
@@ -101,7 +99,7 @@ export class CreateProjectPage extends React.PureComponent<Props, State> {
};
canAutoCreate = ({ currentUser } = this.props) => {
- return ['bitbucket', 'github'].includes(currentUser.externalProvider || '');
+ return ['bitbucket', 'github'].includes((currentUser as LoggedInUser).externalProvider || '');
};
fetchIdentityProviders = () => {
@@ -110,7 +108,8 @@ export class CreateProjectPage extends React.PureComponent<Props, State> {
if (this.mounted) {
this.setState({
identityProvider: identityProviders.find(
- identityProvider => identityProvider.key === this.props.currentUser.externalProvider
+ identityProvider =>
+ identityProvider.key === (this.props.currentUser as LoggedInUser).externalProvider
),
loading: false
});
@@ -143,6 +142,11 @@ export class CreateProjectPage extends React.PureComponent<Props, State> {
render() {
const { currentUser } = this.props;
+
+ if (!isLoggedIn(currentUser)) {
+ return null;
+ }
+
const { identityProvider, loading } = this.state;
const displayManual = parseQuery(this.props.location.query).manual;
const header = translate('onboarding.create_project.header');
@@ -208,14 +212,13 @@ export class CreateProjectPage extends React.PureComponent<Props, State> {
}
}
-const mapStateToProps = (state: any): StateProps => {
- return {
- currentUser: getCurrentUser(state)
- };
-};
+const mapStateToProps = (state: any): StateProps => ({
+ currentUser: getCurrentUser(state)
+});
const mapDispatchToProps: DispatchProps = { addGlobalErrorMessage, skipOnboardingAction };
-export default connect<StateProps, DispatchProps, OwnProps>(mapStateToProps, mapDispatchToProps)(
- CreateProjectPage
-);
+export default connect<StateProps, DispatchProps, OwnProps>(
+ mapStateToProps,
+ mapDispatchToProps
+)(CreateProjectPage);
diff --git a/server/sonar-web/src/main/js/apps/projects/create/ManualProjectCreate.tsx b/server/sonar-web/src/main/js/apps/projects/create/ManualProjectCreate.tsx
index d1df2b59ec0..299dc7676e0 100644
--- a/server/sonar-web/src/main/js/apps/projects/create/ManualProjectCreate.tsx
+++ b/server/sonar-web/src/main/js/apps/projects/create/ManualProjectCreate.tsx
@@ -222,6 +222,7 @@ const mapStateToProps = (state: any): StateProps => {
userOrganizations: getMyOrganizations(state)
};
};
-export default connect<StateProps, DispatchProps, OwnProps>(mapStateToProps, mapDispatchToProps)(
- ManualProjectCreate
-);
+export default connect<StateProps, DispatchProps, OwnProps>(
+ mapStateToProps,
+ mapDispatchToProps
+)(ManualProjectCreate);
diff --git a/server/sonar-web/src/main/js/apps/projects/create/utils.ts b/server/sonar-web/src/main/js/apps/projects/create/utils.ts
index 4963cfc5ebc..64a746fc61c 100644
--- a/server/sonar-web/src/main/js/apps/projects/create/utils.ts
+++ b/server/sonar-web/src/main/js/apps/projects/create/utils.ts
@@ -31,15 +31,18 @@ export interface Query {
manual: boolean;
}
-export const parseQuery = memoize((urlQuery: RawQuery): Query => {
- return {
- error: parseAsOptionalString(urlQuery['error']),
- manual: parseAsBoolean(urlQuery['manual'], false)
- };
-});
+export const parseQuery = memoize(
+ (urlQuery: RawQuery): Query => {
+ return {
+ error: parseAsOptionalString(urlQuery['error']),
+ manual: parseAsBoolean(urlQuery['manual'], false)
+ };
+ }
+);
-export const serializeQuery = memoize((query: Query): RawQuery =>
- cleanQuery({
- manual: serializeOptionalBoolean(query.manual || undefined)
- })
+export const serializeQuery = memoize(
+ (query: Query): RawQuery =>
+ cleanQuery({
+ manual: serializeOptionalBoolean(query.manual || undefined)
+ })
);
diff --git a/server/sonar-web/src/main/js/apps/projects/filters/CoverageFilter.tsx b/server/sonar-web/src/main/js/apps/projects/filters/CoverageFilter.tsx
index c2a1936e85d..e76a506d58f 100644
--- a/server/sonar-web/src/main/js/apps/projects/filters/CoverageFilter.tsx
+++ b/server/sonar-web/src/main/js/apps/projects/filters/CoverageFilter.tsx
@@ -42,20 +42,20 @@ export default function CoverageFilter(props: Props) {
return (
<Filter
+ className={props.className}
facet={props.facet}
+ getFacetValueForOption={getFacetValueForOption}
+ header={<FilterHeader name={translate('metric_domain.Coverage')} />}
+ highlightUnder={1}
+ highlightUnderMax={5}
maxFacetValue={props.maxFacetValue}
onQueryChange={props.onQueryChange}
- value={props.value}
- property={property}
- className={props.className}
options={[1, 2, 3, 4, 5, 6]}
+ organization={props.organization}
+ property={property}
query={props.query}
renderOption={renderOption}
- organization={props.organization}
- getFacetValueForOption={getFacetValueForOption}
- highlightUnder={1}
- highlightUnderMax={5}
- header={<FilterHeader name={translate('metric_domain.Coverage')} />}
+ value={props.value}
/>
);
}
@@ -70,9 +70,9 @@ function renderOption(option: number, selected: boolean) {
<span>
{option < 6 && (
<CoverageRating
- value={getCoverageRatingAverageValue(option)}
- size="small"
muted={!selected}
+ size="small"
+ value={getCoverageRatingAverageValue(option)}
/>
)}
<span className="spacer-left">
diff --git a/server/sonar-web/src/main/js/apps/projects/filters/DuplicationsFilter.tsx b/server/sonar-web/src/main/js/apps/projects/filters/DuplicationsFilter.tsx
index 82c3ab42114..36e8840f3ee 100644
--- a/server/sonar-web/src/main/js/apps/projects/filters/DuplicationsFilter.tsx
+++ b/server/sonar-web/src/main/js/apps/projects/filters/DuplicationsFilter.tsx
@@ -44,20 +44,20 @@ export default function DuplicationsFilter(props: Props) {
const { property = 'duplications' } = props;
return (
<Filter
+ className={props.className}
facet={props.facet}
+ getFacetValueForOption={getFacetValueForOption}
+ header={<FilterHeader name={translate('metric_domain.Duplications')} />}
+ highlightUnder={1}
+ highlightUnderMax={5}
maxFacetValue={props.maxFacetValue}
onQueryChange={props.onQueryChange}
- value={props.value}
- property={property}
- className={props.className}
options={[1, 2, 3, 4, 5, 6]}
+ organization={props.organization}
+ property={property}
query={props.query}
renderOption={renderOption}
- organization={props.organization}
- getFacetValueForOption={getFacetValueForOption}
- highlightUnder={1}
- highlightUnderMax={5}
- header={<FilterHeader name={translate('metric_domain.Duplications')} />}
+ value={props.value}
/>
);
}
@@ -72,9 +72,9 @@ function renderOption(option: number, selected: boolean) {
<span>
{option < 6 && (
<DuplicationsRating
- value={getDuplicationsRatingAverageValue(option)}
- size="small"
muted={!selected}
+ size="small"
+ value={getDuplicationsRatingAverageValue(option)}
/>
)}
<span className="spacer-left">
diff --git a/server/sonar-web/src/main/js/apps/projects/filters/Filter.tsx b/server/sonar-web/src/main/js/apps/projects/filters/Filter.tsx
index 50a9fa718e0..7c980fa4566 100644
--- a/server/sonar-web/src/main/js/apps/projects/filters/Filter.tsx
+++ b/server/sonar-web/src/main/js/apps/projects/filters/Filter.tsx
@@ -97,7 +97,7 @@ export default class Filter extends React.PureComponent<Props> {
<div className="projects-facet-bar">
<div
className="projects-facet-bar-inner"
- style={{ width: facetValue / this.props.maxFacetValue * 60 }}
+ style={{ width: (facetValue / this.props.maxFacetValue) * 60 }}
/>
</div>
);
diff --git a/server/sonar-web/src/main/js/apps/projects/filters/IssuesFilter.tsx b/server/sonar-web/src/main/js/apps/projects/filters/IssuesFilter.tsx
index 06be03f8cc6..4e4a15042a4 100644
--- a/server/sonar-web/src/main/js/apps/projects/filters/IssuesFilter.tsx
+++ b/server/sonar-web/src/main/js/apps/projects/filters/IssuesFilter.tsx
@@ -41,23 +41,23 @@ interface Props {
export default function IssuesFilter(props: Props) {
return (
<Filter
- facet={props.facet}
- maxFacetValue={props.maxFacetValue}
- onQueryChange={props.onQueryChange}
- value={props.value}
- property={props.property}
className={props.className}
- options={[1, 2, 3, 4, 5]}
- query={props.query}
- renderOption={renderOption}
- organization={props.organization}
+ facet={props.facet}
getFacetValueForOption={getFacetValueForOption}
- highlightUnder={1}
header={
<FilterHeader name={translate('metric_domain', props.name)}>
{props.headerDetail}
</FilterHeader>
}
+ highlightUnder={1}
+ maxFacetValue={props.maxFacetValue}
+ onQueryChange={props.onQueryChange}
+ options={[1, 2, 3, 4, 5]}
+ organization={props.organization}
+ property={props.property}
+ query={props.query}
+ renderOption={renderOption}
+ value={props.value}
/>
);
}
@@ -69,7 +69,7 @@ function getFacetValueForOption(facet: Facet, option: number) {
function renderOption(option: number, selected: boolean) {
return (
<span>
- <Rating value={option} small={true} muted={!selected} />
+ <Rating muted={!selected} small={true} value={option} />
</span>
);
}
diff --git a/server/sonar-web/src/main/js/apps/projects/filters/LanguagesFilter.tsx b/server/sonar-web/src/main/js/apps/projects/filters/LanguagesFilter.tsx
index 1c39277af7d..2481e0b6986 100644
--- a/server/sonar-web/src/main/js/apps/projects/filters/LanguagesFilter.tsx
+++ b/server/sonar-web/src/main/js/apps/projects/filters/LanguagesFilter.tsx
@@ -59,8 +59,8 @@ export default class LanguagesFilter extends React.Component<Props> {
renderOption = (option: string) => (
<SearchableFilterOption
- optionKey={option}
option={getLanguageByKey(this.props.languages, option)}
+ optionKey={option}
/>
);
@@ -69,26 +69,26 @@ export default class LanguagesFilter extends React.Component<Props> {
return (
<Filter
- onQueryChange={this.props.onQueryChange}
- property={property}
- options={this.getSortedOptions(this.props.facet)}
- query={this.props.query}
- renderOption={this.renderOption}
- value={this.props.value}
facet={this.props.facet}
- maxFacetValue={this.props.maxFacetValue}
- organization={this.props.organization}
- getFacetValueForOption={this.getFacetValueForOption}
- header={<FilterHeader name={translate('projects.facets.languages')} />}
footer={
<SearchableFilterFooter
onQueryChange={this.props.onQueryChange}
- organization={this.props.organization}
options={this.getSearchOptions()}
+ organization={this.props.organization}
property={property}
query={this.props.query}
/>
}
+ getFacetValueForOption={this.getFacetValueForOption}
+ header={<FilterHeader name={translate('projects.facets.languages')} />}
+ maxFacetValue={this.props.maxFacetValue}
+ onQueryChange={this.props.onQueryChange}
+ options={this.getSortedOptions(this.props.facet)}
+ organization={this.props.organization}
+ property={property}
+ query={this.props.query}
+ renderOption={this.renderOption}
+ value={this.props.value}
/>
);
}
diff --git a/server/sonar-web/src/main/js/apps/projects/filters/NewCoverageFilter.tsx b/server/sonar-web/src/main/js/apps/projects/filters/NewCoverageFilter.tsx
index 4ea87c71bb3..860901a5929 100644
--- a/server/sonar-web/src/main/js/apps/projects/filters/NewCoverageFilter.tsx
+++ b/server/sonar-web/src/main/js/apps/projects/filters/NewCoverageFilter.tsx
@@ -21,5 +21,5 @@ import * as React from 'react';
import CoverageFilter, { Props } from './CoverageFilter';
export default function NewCoverageFilter(props: Props) {
- return <CoverageFilter {...props} property="new_coverage" className="leak-facet-box" />;
+ return <CoverageFilter {...props} className="leak-facet-box" property="new_coverage" />;
}
diff --git a/server/sonar-web/src/main/js/apps/projects/filters/NewDuplicationsFilter.tsx b/server/sonar-web/src/main/js/apps/projects/filters/NewDuplicationsFilter.tsx
index 684612da89e..c15766b0c68 100644
--- a/server/sonar-web/src/main/js/apps/projects/filters/NewDuplicationsFilter.tsx
+++ b/server/sonar-web/src/main/js/apps/projects/filters/NewDuplicationsFilter.tsx
@@ -21,5 +21,5 @@ import * as React from 'react';
import DuplicationsFilter, { Props } from './DuplicationsFilter';
export default function NewDuplicationsFilter(props: Props) {
- return <DuplicationsFilter {...props} property="new_duplications" className="leak-facet-box" />;
+ return <DuplicationsFilter {...props} className="leak-facet-box" property="new_duplications" />;
}
diff --git a/server/sonar-web/src/main/js/apps/projects/filters/NewLinesFilter.tsx b/server/sonar-web/src/main/js/apps/projects/filters/NewLinesFilter.tsx
index a8141038de6..468f0cb5375 100644
--- a/server/sonar-web/src/main/js/apps/projects/filters/NewLinesFilter.tsx
+++ b/server/sonar-web/src/main/js/apps/projects/filters/NewLinesFilter.tsx
@@ -41,19 +41,19 @@ export default function NewLinesFilter(props: Props) {
return (
<Filter
+ className="leak-facet-box"
facet={props.facet}
+ getFacetValueForOption={getFacetValueForOption}
+ header={<FilterHeader name={translate('projects.facets.new_lines')} />}
+ highlightUnder={1}
maxFacetValue={props.maxFacetValue}
onQueryChange={props.onQueryChange}
- value={props.value}
- property={property}
- className="leak-facet-box"
options={[1, 2, 3, 4, 5]}
+ organization={props.organization}
+ property={property}
query={props.query}
renderOption={renderOption}
- organization={props.organization}
- getFacetValueForOption={getFacetValueForOption}
- highlightUnder={1}
- header={<FilterHeader name={translate('projects.facets.new_lines')} />}
+ value={props.value}
/>
);
}
diff --git a/server/sonar-web/src/main/js/apps/projects/filters/QualityGateFilter.tsx b/server/sonar-web/src/main/js/apps/projects/filters/QualityGateFilter.tsx
index cffd2ccb8f2..072116972fe 100644
--- a/server/sonar-web/src/main/js/apps/projects/filters/QualityGateFilter.tsx
+++ b/server/sonar-web/src/main/js/apps/projects/filters/QualityGateFilter.tsx
@@ -39,16 +39,16 @@ export default function QualityGateFilter(props: Props) {
return (
<Filter
facet={props.facet}
+ getFacetValueForOption={getFacetValueForOption}
+ header={<FilterHeader name={translate('projects.facets.quality_gate')} />}
maxFacetValue={props.maxFacetValue}
onQueryChange={props.onQueryChange}
- value={props.value}
- property="gate"
options={['OK', 'WARN', 'ERROR']}
+ organization={props.organization}
+ property="gate"
query={props.query}
renderOption={renderOption}
- organization={props.organization}
- getFacetValueForOption={getFacetValueForOption}
- header={<FilterHeader name={translate('projects.facets.quality_gate')} />}
+ value={props.value}
/>
);
}
@@ -58,5 +58,5 @@ function getFacetValueForOption(facet: Facet, option: string) {
}
function renderOption(option: string, selected: boolean) {
- return <Level level={option} small={true} muted={!selected} />;
+ return <Level level={option} muted={!selected} small={true} />;
}
diff --git a/server/sonar-web/src/main/js/apps/projects/filters/SizeFilter.tsx b/server/sonar-web/src/main/js/apps/projects/filters/SizeFilter.tsx
index 570c5722028..ec70339a005 100644
--- a/server/sonar-web/src/main/js/apps/projects/filters/SizeFilter.tsx
+++ b/server/sonar-web/src/main/js/apps/projects/filters/SizeFilter.tsx
@@ -42,19 +42,19 @@ export default function SizeFilter(props: Props) {
return (
<Filter
+ className={props.className}
facet={props.facet}
+ getFacetValueForOption={getFacetValueForOption}
+ header={<FilterHeader name={translate('metric_domain.Size')} />}
+ highlightUnder={1}
maxFacetValue={props.maxFacetValue}
onQueryChange={props.onQueryChange}
- value={props.value}
- property={property}
- className={props.className}
options={[1, 2, 3, 4, 5]}
+ organization={props.organization}
+ property={property}
query={props.query}
renderOption={renderOption}
- organization={props.organization}
- getFacetValueForOption={getFacetValueForOption}
- highlightUnder={1}
- header={<FilterHeader name={translate('metric_domain.Size')} />}
+ value={props.value}
/>
);
}
@@ -67,7 +67,7 @@ function getFacetValueForOption(facet: Facet, option: number) {
function renderOption(option: number, selected: boolean) {
return (
<span>
- <SizeRating value={getSizeRatingAverageValue(option)} small={true} muted={!selected} />
+ <SizeRating muted={!selected} small={true} value={getSizeRatingAverageValue(option)} />
<span className="spacer-left">{getSizeRatingLabel(option)}</span>
</span>
);
diff --git a/server/sonar-web/src/main/js/apps/projects/filters/TagsFilter.tsx b/server/sonar-web/src/main/js/apps/projects/filters/TagsFilter.tsx
index e8337514883..3227f92daf2 100644
--- a/server/sonar-web/src/main/js/apps/projects/filters/TagsFilter.tsx
+++ b/server/sonar-web/src/main/js/apps/projects/filters/TagsFilter.tsx
@@ -105,29 +105,29 @@ export default class TagsFilter extends React.PureComponent<Props, State> {
return (
<Filter
- onQueryChange={this.props.onQueryChange}
- property={property}
- options={this.getSortedOptions(this.props.facet)}
- query={this.props.query}
- renderOption={this.renderOption}
- value={this.props.value}
facet={this.props.facet}
- maxFacetValue={this.props.maxFacetValue}
- organization={this.props.organization}
- getFacetValueForOption={this.getFacetValueForOption}
- header={<FilterHeader name={translate('projects.facets.tags')} />}
footer={
<SearchableFilterFooter
- onQueryChange={this.props.onQueryChange}
isLoading={this.state.isLoading}
onInputChange={this.handleSearch}
onOpen={this.handleSearch}
- organization={this.props.organization}
+ onQueryChange={this.props.onQueryChange}
options={this.getSearchOptions()}
+ organization={this.props.organization}
property={property}
query={this.props.query}
/>
}
+ getFacetValueForOption={this.getFacetValueForOption}
+ header={<FilterHeader name={translate('projects.facets.tags')} />}
+ maxFacetValue={this.props.maxFacetValue}
+ onQueryChange={this.props.onQueryChange}
+ options={this.getSortedOptions(this.props.facet)}
+ organization={this.props.organization}
+ property={property}
+ query={this.props.query}
+ renderOption={this.renderOption}
+ value={this.props.value}
/>
);
}
diff --git a/server/sonar-web/src/main/js/apps/projects/filters/__tests__/SearchableFilterFooter-test.tsx b/server/sonar-web/src/main/js/apps/projects/filters/__tests__/SearchableFilterFooter-test.tsx
index c9b1faa82e0..4bc227b9949 100644
--- a/server/sonar-web/src/main/js/apps/projects/filters/__tests__/SearchableFilterFooter-test.tsx
+++ b/server/sonar-web/src/main/js/apps/projects/filters/__tests__/SearchableFilterFooter-test.tsx
@@ -31,9 +31,9 @@ it('should render items without the ones in the facet', () => {
const wrapper = shallow(
<SearchableFilterFooter
onQueryChange={jest.fn()}
+ options={options}
property="languages"
query={{ languages: ['java'] }}
- options={options}
/>,
{ context: { router: { push: jest.fn() } } }
);
@@ -45,9 +45,9 @@ it('should render items without the ones in the facet', () => {
const wrapper = shallow(
<SearchableFilterFooter
onQueryChange={onQueryChange}
+ options={options}
property="languages"
query={{ languages: ['java'] }}
- options={options}
/>,
{ context: { router: { push: jest.fn() } } }
);
diff --git a/server/sonar-web/src/main/js/apps/projects/filters/__tests__/TagsFilter-test.tsx b/server/sonar-web/src/main/js/apps/projects/filters/__tests__/TagsFilter-test.tsx
index d7f4ee801ec..b924d7fba44 100644
--- a/server/sonar-web/src/main/js/apps/projects/filters/__tests__/TagsFilter-test.tsx
+++ b/server/sonar-web/src/main/js/apps/projects/filters/__tests__/TagsFilter-test.tsx
@@ -26,7 +26,7 @@ const tagsFacet = { lang: 4, sonar: 3, csharp: 1 };
it('should render the tags without the ones in the facet', () => {
const wrapper = shallow(
- <TagsFilter onQueryChange={jest.fn()} query={{ tags: null }} facet={tagsFacet} />
+ <TagsFilter facet={tagsFacet} onQueryChange={jest.fn()} query={{ tags: null }} />
);
expect(wrapper).toMatchSnapshot();
wrapper.setState({ tags });
@@ -36,10 +36,10 @@ it('should render the tags without the ones in the facet', () => {
it('should render the tags facet with the selected tags', () => {
const wrapper = shallow(
<TagsFilter
+ facet={tagsFacet}
onQueryChange={jest.fn()}
query={{ tags: ['lang', 'sonar'] }}
value={['lang', 'sonar']}
- facet={tagsFacet}
/>
);
expect(wrapper).toMatchSnapshot();
@@ -49,10 +49,10 @@ it('should render the tags facet with the selected tags', () => {
it('should render maximum 10 tags in the searchbox results', () => {
const wrapper = shallow(
<TagsFilter
+ facet={{ ...tagsFacet, ad: 1 }}
onQueryChange={jest.fn()}
query={{ languages: ['java', 'ad'] }}
value={['java', 'ad']}
- facet={{ ...tagsFacet, ad: 1 }}
/>
);
wrapper.setState({ tags: [...tags, 'aa', 'ab', 'ac', 'ad', 'ae', 'af', 'ag', 'ah', 'ai'] });
diff --git a/server/sonar-web/src/main/js/apps/projects/utils.ts b/server/sonar-web/src/main/js/apps/projects/utils.ts
index 753e245be49..474b8d89e8e 100644
--- a/server/sonar-web/src/main/js/apps/projects/utils.ts
+++ b/server/sonar-web/src/main/js/apps/projects/utils.ts
@@ -360,7 +360,7 @@ function format(periods: Array<{ value: number; label: string }>) {
}
export function formatDuration(value: number) {
- if(value < ONE_MINUTE) {
+ if (value < ONE_MINUTE) {
return translate('duration.seconds');
}
const years = Math.floor(value / ONE_YEAR);
diff --git a/server/sonar-web/src/main/js/apps/projectsManagement/AppContainer.tsx b/server/sonar-web/src/main/js/apps/projectsManagement/AppContainer.tsx
index 9004f091ac8..30f543f096d 100644
--- a/server/sonar-web/src/main/js/apps/projectsManagement/AppContainer.tsx
+++ b/server/sonar-web/src/main/js/apps/projectsManagement/AppContainer.tsx
@@ -102,5 +102,8 @@ const mapDispatchToProps = (dispatch: Function) => ({
});
export default forSingleOrganization(
- connect<StateProps, DispatchProps, OwnProps>(mapStateToProps, mapDispatchToProps)(AppContainer)
+ connect<StateProps, DispatchProps, OwnProps>(
+ mapStateToProps,
+ mapDispatchToProps
+ )(AppContainer)
);
diff --git a/server/sonar-web/src/main/js/apps/quality-gates/components/DetailsApp.tsx b/server/sonar-web/src/main/js/apps/quality-gates/components/DetailsApp.tsx
index 483d4bfcf0b..d22d36f9c7d 100644
--- a/server/sonar-web/src/main/js/apps/quality-gates/components/DetailsApp.tsx
+++ b/server/sonar-web/src/main/js/apps/quality-gates/components/DetailsApp.tsx
@@ -96,7 +96,7 @@ export class DetailsApp extends React.PureComponent<Props, State> {
handleAddCondition = (condition: Condition) => {
this.setState(({ qualityGate }) => {
if (!qualityGate) {
- return undefined;
+ return null;
}
return { qualityGate: addCondition(qualityGate, condition) };
});
@@ -105,7 +105,7 @@ export class DetailsApp extends React.PureComponent<Props, State> {
handleSaveCondition = (newCondition: Condition, oldCondition: Condition) => {
this.setState(({ qualityGate }) => {
if (!qualityGate) {
- return undefined;
+ return null;
}
return { qualityGate: replaceCondition(qualityGate, newCondition, oldCondition) };
});
@@ -114,7 +114,7 @@ export class DetailsApp extends React.PureComponent<Props, State> {
handleRemoveCondition = (condition: Condition) => {
this.setState(({ qualityGate }) => {
if (!qualityGate) {
- return undefined;
+ return null;
}
return { qualityGate: deleteCondition(qualityGate, condition) };
});
@@ -123,7 +123,7 @@ export class DetailsApp extends React.PureComponent<Props, State> {
handleSetDefault = () => {
this.setState(({ qualityGate }) => {
if (!qualityGate) {
- return undefined;
+ return null;
}
this.props.onSetDefault(qualityGate);
const newQualityGate: QualityGate = {
diff --git a/server/sonar-web/src/main/js/apps/quality-profiles/changelog/Changelog.tsx b/server/sonar-web/src/main/js/apps/quality-profiles/changelog/Changelog.tsx
index 2c9ab530964..f03ac029d86 100644
--- a/server/sonar-web/src/main/js/apps/quality-profiles/changelog/Changelog.tsx
+++ b/server/sonar-web/src/main/js/apps/quality-profiles/changelog/Changelog.tsx
@@ -59,7 +59,7 @@ export default function Changelog(props: Props) {
const className = 'js-profile-changelog-event ' + (isEvenRow ? 'even' : 'odd');
return (
- <tr key={index} className={className}>
+ <tr className={className} key={index}>
<td className="thin nowrap">{!isBulkChange && <DateTimeFormatter date={event.date} />}</td>
<td className="thin nowrap">
diff --git a/server/sonar-web/src/main/js/apps/quality-profiles/compare/ComparisonContainer.tsx b/server/sonar-web/src/main/js/apps/quality-profiles/compare/ComparisonContainer.tsx
index f461c668672..bb3fa09aa81 100644
--- a/server/sonar-web/src/main/js/apps/quality-profiles/compare/ComparisonContainer.tsx
+++ b/server/sonar-web/src/main/js/apps/quality-profiles/compare/ComparisonContainer.tsx
@@ -116,10 +116,10 @@ export default class ComparisonContainer extends React.PureComponent<Props, Stat
<div className="boxed-group boxed-group-inner js-profile-comparison">
<header>
<ComparisonForm
- withKey={withKey}
+ onCompare={this.handleCompare}
profile={profile}
profiles={profiles}
- onCompare={this.handleCompare}
+ withKey={withKey}
/>
{this.state.loading && <i className="spinner spacer-left" />}
@@ -132,12 +132,12 @@ export default class ComparisonContainer extends React.PureComponent<Props, Stat
modified != null && (
<div className="spacer-top">
<ComparisonResults
- left={left}
- right={right}
inLeft={inLeft}
inRight={inRight}
+ left={left}
modified={modified}
organization={this.props.organization}
+ right={right}
/>
</div>
)}
diff --git a/server/sonar-web/src/main/js/apps/quality-profiles/compare/ComparisonForm.tsx b/server/sonar-web/src/main/js/apps/quality-profiles/compare/ComparisonForm.tsx
index c2900d499ca..5cbba2b10cc 100644
--- a/server/sonar-web/src/main/js/apps/quality-profiles/compare/ComparisonForm.tsx
+++ b/server/sonar-web/src/main/js/apps/quality-profiles/compare/ComparisonForm.tsx
@@ -44,12 +44,12 @@ export default class ComparisonForm extends React.PureComponent<Props> {
<div className="display-inline-block">
<label className="spacer-right">{translate('quality_profiles.compare_with')}</label>
<Select
- value={withKey}
- options={options}
- placeholder={translate('select_verb')}
- clearable={false}
className="input-large"
+ clearable={false}
onChange={this.handleChange.bind(this)}
+ options={options}
+ placeholder={translate('select_verb')}
+ value={withKey}
/>
</div>
);
diff --git a/server/sonar-web/src/main/js/apps/quality-profiles/compare/ComparisonResults.tsx b/server/sonar-web/src/main/js/apps/quality-profiles/compare/ComparisonResults.tsx
index fc475311f68..b4938f4cf1b 100644
--- a/server/sonar-web/src/main/js/apps/quality-profiles/compare/ComparisonResults.tsx
+++ b/server/sonar-web/src/main/js/apps/quality-profiles/compare/ComparisonResults.tsx
@@ -57,7 +57,7 @@ export default class ComparisonResults extends React.PureComponent<Props> {
return (
<ul>
{Object.keys(params).map(key => (
- <li key={key} className="spacer-top">
+ <li className="spacer-top" key={key}>
<code>
{key}
{': '}
@@ -88,7 +88,7 @@ export default class ComparisonResults extends React.PureComponent<Props> {
<td>&nbsp;</td>
</tr>
{this.props.inLeft.map(rule => (
- <tr key={`left-${rule.key}`} className="js-comparison-in-left">
+ <tr className="js-comparison-in-left" key={`left-${rule.key}`}>
<td>{this.renderRule(rule, rule.severity)}</td>
<td>&nbsp;</td>
</tr>
@@ -116,7 +116,7 @@ export default class ComparisonResults extends React.PureComponent<Props> {
</td>
</tr>
{this.props.inRight.map(rule => (
- <tr key={`right-${rule.key}`} className="js-comparison-in-right">
+ <tr className="js-comparison-in-right" key={`right-${rule.key}`}>
<td>&nbsp;</td>
<td>{this.renderRule(rule, rule.severity)}</td>
</tr>
@@ -132,7 +132,7 @@ export default class ComparisonResults extends React.PureComponent<Props> {
return (
<>
<tr>
- <td colSpan={2} className="text-center">
+ <td className="text-center" colSpan={2}>
<h6>
{translateWithParameters(
'quality_profiles.x_rules_have_different_configuration',
@@ -150,7 +150,7 @@ export default class ComparisonResults extends React.PureComponent<Props> {
</td>
</tr>
{this.props.modified.map(rule => (
- <tr key={`modified-${rule.key}`} className="js-comparison-modified">
+ <tr className="js-comparison-modified" key={`modified-${rule.key}`}>
<td>
{this.renderRule(rule, rule.left.severity)}
{this.renderParameters(rule.left.params)}
diff --git a/server/sonar-web/src/main/js/apps/quality-profiles/compare/__tests__/ComparisonForm-test.tsx b/server/sonar-web/src/main/js/apps/quality-profiles/compare/__tests__/ComparisonForm-test.tsx
index 9399a905167..74a3797e25a 100644
--- a/server/sonar-web/src/main/js/apps/quality-profiles/compare/__tests__/ComparisonForm-test.tsx
+++ b/server/sonar-web/src/main/js/apps/quality-profiles/compare/__tests__/ComparisonForm-test.tsx
@@ -32,10 +32,10 @@ it('should render Select with right options', () => {
const output = shallow(
<ComparisonForm
- withKey="another"
+ onCompare={() => true}
profile={profile}
profiles={profiles}
- onCompare={() => true}
+ withKey="another"
/>
).find('Select');
expect(output.length).toBe(1);
diff --git a/server/sonar-web/src/main/js/apps/quality-profiles/compare/__tests__/ComparisonResults-test.tsx b/server/sonar-web/src/main/js/apps/quality-profiles/compare/__tests__/ComparisonResults-test.tsx
index 02c86c35088..6ae04a58e37 100644
--- a/server/sonar-web/src/main/js/apps/quality-profiles/compare/__tests__/ComparisonResults-test.tsx
+++ b/server/sonar-web/src/main/js/apps/quality-profiles/compare/__tests__/ComparisonResults-test.tsx
@@ -26,12 +26,12 @@ import ComparisonEmpty from '../ComparisonEmpty';
it('should render ComparisonEmpty', () => {
const output = shallow(
<ComparisonResults
- left={{ name: 'left' }}
- right={{ name: 'right' }}
inLeft={[]}
inRight={[]}
+ left={{ name: 'left' }}
modified={[]}
organization={null}
+ right={{ name: 'right' }}
/>
);
expect(output.is(ComparisonEmpty)).toBe(true);
@@ -60,12 +60,12 @@ it('should compare', () => {
const output = shallow(
<ComparisonResults
- left={{ name: 'left' }}
- right={{ name: 'right' }}
inLeft={inLeft}
inRight={inRight}
+ left={{ name: 'left' }}
modified={modified}
organization={null}
+ right={{ name: 'right' }}
/>
);
diff --git a/server/sonar-web/src/main/js/apps/quality-profiles/components/AppContainer.tsx b/server/sonar-web/src/main/js/apps/quality-profiles/components/AppContainer.tsx
index 1da66735a8c..417c54699d6 100644
--- a/server/sonar-web/src/main/js/apps/quality-profiles/components/AppContainer.tsx
+++ b/server/sonar-web/src/main/js/apps/quality-profiles/components/AppContainer.tsx
@@ -45,5 +45,8 @@ const mapDispatchToProps = (dispatch: any) => ({
});
export default forSingleOrganization(
- connect<StateProps, DispatchProps>(mapStateToProps, mapDispatchToProps)(App)
+ connect<StateProps, DispatchProps>(
+ mapStateToProps,
+ mapDispatchToProps
+ )(App)
);
diff --git a/server/sonar-web/src/main/js/apps/quality-profiles/components/ProfileNotFound.tsx b/server/sonar-web/src/main/js/apps/quality-profiles/components/ProfileNotFound.tsx
index f55b48206df..bbefe239932 100644
--- a/server/sonar-web/src/main/js/apps/quality-profiles/components/ProfileNotFound.tsx
+++ b/server/sonar-web/src/main/js/apps/quality-profiles/components/ProfileNotFound.tsx
@@ -30,7 +30,7 @@ export default function ProfileNotFound(props: Props) {
return (
<div className="quality-profile-not-found">
<div className="note spacer-bottom">
- <IndexLink to={getProfilesPath(props.organization)} className="text-muted">
+ <IndexLink className="text-muted" to={getProfilesPath(props.organization)}>
{translate('quality_profiles.page')}
</IndexLink>
</div>
diff --git a/server/sonar-web/src/main/js/apps/sessions/components/EmailAlreadyExists.tsx b/server/sonar-web/src/main/js/apps/sessions/components/EmailAlreadyExists.tsx
index baf38997a15..e1099044232 100644
--- a/server/sonar-web/src/main/js/apps/sessions/components/EmailAlreadyExists.tsx
+++ b/server/sonar-web/src/main/js/apps/sessions/components/EmailAlreadyExists.tsx
@@ -85,9 +85,9 @@ export default class EmailAlreadyExists extends React.PureComponent<Props, State
<img
alt={identityProvider.name}
className="little-spacer-right"
+ height="14"
src={getBaseUrl() + identityProvider.iconPath}
width="14"
- height="14"
/>
{login}
</div>
@@ -102,8 +102,8 @@ export default class EmailAlreadyExists extends React.PureComponent<Props, State
const { query } = this.props.location;
return (
- <div id="bd" className="page-wrapper-simple">
- <div id="nonav" className="page-simple">
+ <div className="page-wrapper-simple" id="bd">
+ <div className="page-simple" id="nonav">
<div className="big-spacer-bottom js-existing-account">
<p className="little-spacer-bottom">
<FormattedMessage
diff --git a/server/sonar-web/src/main/js/apps/sessions/components/LoginContainer.tsx b/server/sonar-web/src/main/js/apps/sessions/components/LoginContainer.tsx
index 31e0eb9bc60..ed4c7dacfe9 100644
--- a/server/sonar-web/src/main/js/apps/sessions/components/LoginContainer.tsx
+++ b/server/sonar-web/src/main/js/apps/sessions/components/LoginContainer.tsx
@@ -116,6 +116,7 @@ class LoginContainer extends React.PureComponent<Props, State> {
const mapStateToProps = null;
const mapDispatchToProps = { doLogin: doLogin as any };
-export default connect<{}, DispatchToProps, OwnProps>(mapStateToProps, mapDispatchToProps)(
- LoginContainer
-);
+export default connect<{}, DispatchToProps, OwnProps>(
+ mapStateToProps,
+ mapDispatchToProps
+)(LoginContainer);
diff --git a/server/sonar-web/src/main/js/apps/sessions/components/Logout.tsx b/server/sonar-web/src/main/js/apps/sessions/components/Logout.tsx
index 8a07c646df8..ceaafa0988f 100644
--- a/server/sonar-web/src/main/js/apps/sessions/components/Logout.tsx
+++ b/server/sonar-web/src/main/js/apps/sessions/components/Logout.tsx
@@ -54,4 +54,7 @@ const mapStateToProps = () => ({});
const mapDispatchToProps = { doLogout };
-export default connect(mapStateToProps, mapDispatchToProps)(Logout as any);
+export default connect(
+ mapStateToProps,
+ mapDispatchToProps
+)(Logout as any);
diff --git a/server/sonar-web/src/main/js/apps/sessions/components/UpdateLogin.tsx b/server/sonar-web/src/main/js/apps/sessions/components/UpdateLogin.tsx
index cace6275846..048f0d27516 100644
--- a/server/sonar-web/src/main/js/apps/sessions/components/UpdateLogin.tsx
+++ b/server/sonar-web/src/main/js/apps/sessions/components/UpdateLogin.tsx
@@ -85,9 +85,9 @@ export default class UpdateLogin extends React.PureComponent<Props, State> {
<img
alt={identityProvider.name}
className="little-spacer-right"
+ height="14"
src={getBaseUrl() + identityProvider.iconPath}
width="14"
- height="14"
/>
{login}
</div>
@@ -102,8 +102,8 @@ export default class UpdateLogin extends React.PureComponent<Props, State> {
const { query } = this.props.location;
return (
- <div id="bd" className="page-wrapper-simple">
- <div id="nonav" className="page-simple">
+ <div className="page-wrapper-simple" id="bd">
+ <div className="page-simple" id="nonav">
<div className="big-spacer-bottom js-provider-name">
<p className="little-spacer-bottom">
<FormattedMessage
diff --git a/server/sonar-web/src/main/js/apps/settings/components/App.js b/server/sonar-web/src/main/js/apps/settings/components/App.js
index 21f8d383e5d..378494100f6 100644
--- a/server/sonar-web/src/main/js/apps/settings/components/App.js
+++ b/server/sonar-web/src/main/js/apps/settings/components/App.js
@@ -69,7 +69,7 @@ export default class App extends React.PureComponent {
const selectedCategory = query.category || this.props.defaultCategory;
return (
- <div id="settings-page" className="page page-limited">
+ <div className="page page-limited" id="settings-page">
<Suggestions suggestions="settings" />
<Helmet title={translate('settings.page')} />
@@ -79,12 +79,12 @@ export default class App extends React.PureComponent {
<div className="side-tabs-side">
<AllCategoriesList
component={this.props.component}
- selectedCategory={selectedCategory}
defaultCategory={this.props.defaultCategory}
+ selectedCategory={selectedCategory}
/>
</div>
<div className="side-tabs-main">
- <CategoryDefinitionsList component={this.props.component} category={selectedCategory} />
+ <CategoryDefinitionsList category={selectedCategory} component={this.props.component} />
{selectedCategory === 'exclusions' && <WildcardsHelp />}
</div>
</div>
diff --git a/server/sonar-web/src/main/js/apps/settings/components/AppContainer.js b/server/sonar-web/src/main/js/apps/settings/components/AppContainer.js
index 71a01f026a4..d2d4f003e7a 100644
--- a/server/sonar-web/src/main/js/apps/settings/components/AppContainer.js
+++ b/server/sonar-web/src/main/js/apps/settings/components/AppContainer.js
@@ -28,4 +28,7 @@ const mapStateToProps = state => ({
const mapdispatchToProps = { fetchSettings };
-export default connect(mapStateToProps, mapdispatchToProps)(App);
+export default connect(
+ mapStateToProps,
+ mapdispatchToProps
+)(App);
diff --git a/server/sonar-web/src/main/js/apps/settings/components/CategoriesList.js b/server/sonar-web/src/main/js/apps/settings/components/CategoriesList.js
index 3cff69cff00..8b61e566c2e 100644
--- a/server/sonar-web/src/main/js/apps/settings/components/CategoriesList.js
+++ b/server/sonar-web/src/main/js/apps/settings/components/CategoriesList.js
@@ -59,7 +59,7 @@ export default class CategoriesList extends React.PureComponent {
const pathname = this.props.component ? '/project/settings' : '/settings';
return (
- <IndexLink to={{ pathname, query }} className={className} title={category.name}>
+ <IndexLink className={className} title={category.name} to={{ pathname, query }}>
{category.name}
</IndexLink>
);
@@ -74,7 +74,9 @@ export default class CategoriesList extends React.PureComponent {
return (
<ul className="side-tabs-menu">
- {sortedCategories.map(category => <li key={category.key}>{this.renderLink(category)}</li>)}
+ {sortedCategories.map(category => (
+ <li key={category.key}>{this.renderLink(category)}</li>
+ ))}
</ul>
);
}
diff --git a/server/sonar-web/src/main/js/apps/settings/components/CategoryDefinitionsList.js b/server/sonar-web/src/main/js/apps/settings/components/CategoryDefinitionsList.js
index 8f380a5de6d..630ce8bbc98 100644
--- a/server/sonar-web/src/main/js/apps/settings/components/CategoryDefinitionsList.js
+++ b/server/sonar-web/src/main/js/apps/settings/components/CategoryDefinitionsList.js
@@ -33,4 +33,7 @@ const mapStateToProps = (state, ownProps) => ({
const mapDispatchToProps = { fetchValues };
-export default connect(mapStateToProps, mapDispatchToProps)(SubCategoryDefinitionsList);
+export default connect(
+ mapStateToProps,
+ mapDispatchToProps
+)(SubCategoryDefinitionsList);
diff --git a/server/sonar-web/src/main/js/apps/settings/components/Definition.js b/server/sonar-web/src/main/js/apps/settings/components/Definition.js
index ab25a45251b..668c22c6377 100644
--- a/server/sonar-web/src/main/js/apps/settings/components/Definition.js
+++ b/server/sonar-web/src/main/js/apps/settings/components/Definition.js
@@ -222,11 +222,14 @@ const mapStateToProps = (state, ownProps) => ({
validationMessage: getSettingsAppValidationMessage(state, ownProps.setting.definition.key)
});
-export default connect(mapStateToProps, {
- changeValue,
- saveValue,
- resetValue,
- passValidation,
- cancelChange,
- checkValue
-})(Definition);
+export default connect(
+ mapStateToProps,
+ {
+ changeValue,
+ saveValue,
+ resetValue,
+ passValidation,
+ cancelChange,
+ checkValue
+ }
+)(Definition);
diff --git a/server/sonar-web/src/main/js/apps/settings/components/inputs/InputForBoolean.js b/server/sonar-web/src/main/js/apps/settings/components/inputs/InputForBoolean.js
index 25404abd729..1a7cb685cdb 100644
--- a/server/sonar-web/src/main/js/apps/settings/components/inputs/InputForBoolean.js
+++ b/server/sonar-web/src/main/js/apps/settings/components/inputs/InputForBoolean.js
@@ -35,7 +35,7 @@ export default class InputForBoolean extends React.PureComponent {
return (
<div className="display-inline-block text-top">
- <Toggle name={this.props.name} value={displayedValue} onChange={this.props.onChange} />
+ <Toggle name={this.props.name} onChange={this.props.onChange} value={displayedValue} />
{!hasValue && <span className="spacer-left note">{translate('settings.not_set')}</span>}
</div>
diff --git a/server/sonar-web/src/main/js/apps/settings/components/inputs/InputForSingleSelectList.js b/server/sonar-web/src/main/js/apps/settings/components/inputs/InputForSingleSelectList.js
index 3df0a656c4c..15173960462 100644
--- a/server/sonar-web/src/main/js/apps/settings/components/inputs/InputForSingleSelectList.js
+++ b/server/sonar-web/src/main/js/apps/settings/components/inputs/InputForSingleSelectList.js
@@ -40,12 +40,12 @@ export default class InputForSingleSelectList extends React.PureComponent {
return (
<Select
- name={this.props.name}
className="settings-large-input"
- options={options}
clearable={false}
- value={this.props.value}
+ name={this.props.name}
onChange={option => this.handleInputChange(option)}
+ options={options}
+ value={this.props.value}
/>
);
}
diff --git a/server/sonar-web/src/main/js/apps/settings/components/inputs/InputForText.js b/server/sonar-web/src/main/js/apps/settings/components/inputs/InputForText.js
index b725fe2653c..7193e8a118d 100644
--- a/server/sonar-web/src/main/js/apps/settings/components/inputs/InputForText.js
+++ b/server/sonar-web/src/main/js/apps/settings/components/inputs/InputForText.js
@@ -30,11 +30,11 @@ export default class InputForText extends React.PureComponent {
render() {
return (
<textarea
- name={this.props.name}
className="settings-large-input text-top"
+ name={this.props.name}
+ onChange={e => this.handleInputChange(e)}
rows="5"
value={this.props.value || ''}
- onChange={e => this.handleInputChange(e)}
/>
);
}
diff --git a/server/sonar-web/src/main/js/apps/settings/components/inputs/MultiValueInput.js b/server/sonar-web/src/main/js/apps/settings/components/inputs/MultiValueInput.js
index dae49df28e0..47ddb1945e7 100644
--- a/server/sonar-web/src/main/js/apps/settings/components/inputs/MultiValueInput.js
+++ b/server/sonar-web/src/main/js/apps/settings/components/inputs/MultiValueInput.js
@@ -58,11 +58,11 @@ export default class MultiValueInput extends React.PureComponent {
renderInput(value, index, isLast) {
return (
- <li key={index} className="spacer-bottom">
+ <li className="spacer-bottom" key={index}>
<PrimitiveInput
+ onChange={this.handleSingleInputChange.bind(this, index)}
setting={this.prepareSetting()}
value={value}
- onChange={this.handleSingleInputChange.bind(this, index)}
/>
{!isLast && (
diff --git a/server/sonar-web/src/main/js/apps/settings/components/inputs/PrimitiveInput.js b/server/sonar-web/src/main/js/apps/settings/components/inputs/PrimitiveInput.js
index a1c956831f6..327031a34e8 100644
--- a/server/sonar-web/src/main/js/apps/settings/components/inputs/PrimitiveInput.js
+++ b/server/sonar-web/src/main/js/apps/settings/components/inputs/PrimitiveInput.js
@@ -54,11 +54,11 @@ export default class PrimitiveInput extends React.PureComponent {
if (definition.type === types.TYPE_SINGLE_SELECT_LIST) {
return (
<InputForSingleSelectList
- name={name}
- value={value}
isDefault={isDefaultOrInherited(setting)}
- options={definition.options}
+ name={name}
onChange={onChange}
+ options={definition.options}
+ value={value}
{...other}
/>
);
@@ -67,10 +67,10 @@ export default class PrimitiveInput extends React.PureComponent {
const InputComponent = typeMapping[definition.type] || InputForString;
return (
<InputComponent
- name={name}
- value={value}
isDefault={isDefaultOrInherited(setting)}
+ name={name}
onChange={onChange}
+ value={value}
{...other}
/>
);
diff --git a/server/sonar-web/src/main/js/apps/settings/components/inputs/PropertySetInput.js b/server/sonar-web/src/main/js/apps/settings/components/inputs/PropertySetInput.js
index e7e4425226a..62f86adf2a9 100644
--- a/server/sonar-web/src/main/js/apps/settings/components/inputs/PropertySetInput.js
+++ b/server/sonar-web/src/main/js/apps/settings/components/inputs/PropertySetInput.js
@@ -61,9 +61,9 @@ export default class PropertySetInput extends React.PureComponent {
<td key={field.key}>
<PrimitiveInput
name={this.getFieldName(field)}
+ onChange={this.handleInputChange.bind(this, index, field.key)}
setting={{ definition: field, value: fieldValues[field.key] }}
value={fieldValues[field.key]}
- onChange={this.handleInputChange.bind(this, index, field.key)}
/>
</td>
))}
diff --git a/server/sonar-web/src/main/js/apps/settings/components/inputs/SimpleInput.js b/server/sonar-web/src/main/js/apps/settings/components/inputs/SimpleInput.js
index b523acb93ab..c2a38bc8bbc 100644
--- a/server/sonar-web/src/main/js/apps/settings/components/inputs/SimpleInput.js
+++ b/server/sonar-web/src/main/js/apps/settings/components/inputs/SimpleInput.js
@@ -50,12 +50,12 @@ export default class SimpleInput extends React.PureComponent {
render() {
return (
<input
- name={this.props.name}
className={this.props.className + ' text-top'}
- type={this.props.type}
- value={this.props.value || ''}
+ name={this.props.name}
onChange={this.handleInputChange}
onKeyDown={this.handleKeyDown}
+ type={this.props.type}
+ value={this.props.value || ''}
/>
);
}
diff --git a/server/sonar-web/src/main/js/apps/settings/components/inputs/__tests__/Input-test.js b/server/sonar-web/src/main/js/apps/settings/components/inputs/__tests__/Input-test.js
index 720192841c9..5877a37a652 100644
--- a/server/sonar-web/src/main/js/apps/settings/components/inputs/__tests__/Input-test.js
+++ b/server/sonar-web/src/main/js/apps/settings/components/inputs/__tests__/Input-test.js
@@ -28,7 +28,7 @@ import { TYPE_STRING, TYPE_PROPERTY_SET } from '../../../constants';
it('should render PrimitiveInput', () => {
const setting = { definition: { key: 'example', type: TYPE_STRING } };
const onChange = jest.fn();
- const input = shallow(<Input setting={setting} value="foo" onChange={onChange} />).find(
+ const input = shallow(<Input onChange={onChange} setting={setting} value="foo" />).find(
PrimitiveInput
);
expect(input.length).toBe(1);
@@ -41,7 +41,7 @@ it('should render MultiValueInput', () => {
const setting = { definition: { key: 'example', type: TYPE_STRING, multiValues: true } };
const value = ['foo', 'bar'];
const onChange = jest.fn();
- const input = shallow(<Input setting={setting} value={value} onChange={onChange} />).find(
+ const input = shallow(<Input onChange={onChange} setting={setting} value={value} />).find(
MultiValueInput
);
expect(input.length).toBe(1);
@@ -54,7 +54,7 @@ it('should render PropertySetInput', () => {
const setting = { definition: { key: 'example', type: TYPE_PROPERTY_SET, fields: [] } };
const value = [{ foo: 'bar' }];
const onChange = jest.fn();
- const input = shallow(<Input setting={setting} value={value} onChange={onChange} />).find(
+ const input = shallow(<Input onChange={onChange} setting={setting} value={value} />).find(
PropertySetInput
);
expect(input.length).toBe(1);
diff --git a/server/sonar-web/src/main/js/apps/settings/components/inputs/__tests__/InputForBoolean-test.js b/server/sonar-web/src/main/js/apps/settings/components/inputs/__tests__/InputForBoolean-test.js
index d41e16499e3..95b3809b449 100644
--- a/server/sonar-web/src/main/js/apps/settings/components/inputs/__tests__/InputForBoolean-test.js
+++ b/server/sonar-web/src/main/js/apps/settings/components/inputs/__tests__/InputForBoolean-test.js
@@ -25,7 +25,7 @@ import Toggle from '../../../../../components/controls/Toggle';
it('should render Toggle', () => {
const onChange = jest.fn();
const toggle = shallow(
- <InputForBoolean name="foo" value={true} isDefault={false} onChange={onChange} />
+ <InputForBoolean isDefault={false} name="foo" onChange={onChange} value={true} />
).find(Toggle);
expect(toggle.length).toBe(1);
expect(toggle.prop('name')).toBe('foo');
@@ -35,7 +35,7 @@ it('should render Toggle', () => {
it('should render Toggle without value', () => {
const onChange = jest.fn();
- const input = shallow(<InputForBoolean name="foo" isDefault={false} onChange={onChange} />);
+ const input = shallow(<InputForBoolean isDefault={false} name="foo" onChange={onChange} />);
const toggle = input.find(Toggle);
expect(toggle.length).toBe(1);
expect(toggle.prop('name')).toBe('foo');
@@ -47,7 +47,7 @@ it('should render Toggle without value', () => {
it('should call onChange', () => {
const onChange = jest.fn();
const input = shallow(
- <InputForBoolean name="foo" value={true} isDefault={false} onChange={onChange} />
+ <InputForBoolean isDefault={false} name="foo" onChange={onChange} value={true} />
);
const toggle = input.find(Toggle);
expect(toggle.length).toBe(1);
diff --git a/server/sonar-web/src/main/js/apps/settings/components/inputs/__tests__/InputForNumber-test.js b/server/sonar-web/src/main/js/apps/settings/components/inputs/__tests__/InputForNumber-test.js
index c614256196a..4745ce34095 100644
--- a/server/sonar-web/src/main/js/apps/settings/components/inputs/__tests__/InputForNumber-test.js
+++ b/server/sonar-web/src/main/js/apps/settings/components/inputs/__tests__/InputForNumber-test.js
@@ -25,7 +25,7 @@ import SimpleInput from '../SimpleInput';
it('should render SimpleInput', () => {
const onChange = jest.fn();
const simpleInput = shallow(
- <InputForNumber name="foo" value={17} isDefault={false} onChange={onChange} />
+ <InputForNumber isDefault={false} name="foo" onChange={onChange} value={17} />
).find(SimpleInput);
expect(simpleInput.length).toBe(1);
expect(simpleInput.prop('name')).toBe('foo');
diff --git a/server/sonar-web/src/main/js/apps/settings/components/inputs/__tests__/InputForSingleSelectList-test.js b/server/sonar-web/src/main/js/apps/settings/components/inputs/__tests__/InputForSingleSelectList-test.js
index 25bcf056722..e3c17c02f6a 100644
--- a/server/sonar-web/src/main/js/apps/settings/components/inputs/__tests__/InputForSingleSelectList-test.js
+++ b/server/sonar-web/src/main/js/apps/settings/components/inputs/__tests__/InputForSingleSelectList-test.js
@@ -25,11 +25,11 @@ it('should render Select', () => {
const onChange = jest.fn();
const select = shallow(
<InputForSingleSelectList
- name="foo"
- value="bar"
- options={['foo', 'bar', 'baz']}
isDefault={false}
+ name="foo"
onChange={onChange}
+ options={['foo', 'bar', 'baz']}
+ value="bar"
/>
).find('Select');
expect(select.length).toBe(1);
@@ -47,11 +47,11 @@ it('should call onChange', () => {
const onChange = jest.fn();
const select = shallow(
<InputForSingleSelectList
- name="foo"
- value="bar"
- options={['foo', 'bar', 'baz']}
isDefault={false}
+ name="foo"
onChange={onChange}
+ options={['foo', 'bar', 'baz']}
+ value="bar"
/>
).find('Select');
expect(select.length).toBe(1);
diff --git a/server/sonar-web/src/main/js/apps/settings/components/inputs/__tests__/InputForString-test.js b/server/sonar-web/src/main/js/apps/settings/components/inputs/__tests__/InputForString-test.js
index 7cb444c2dd1..01f312c49f8 100644
--- a/server/sonar-web/src/main/js/apps/settings/components/inputs/__tests__/InputForString-test.js
+++ b/server/sonar-web/src/main/js/apps/settings/components/inputs/__tests__/InputForString-test.js
@@ -25,7 +25,7 @@ import SimpleInput from '../SimpleInput';
it('should render SimpleInput', () => {
const onChange = jest.fn();
const simpleInput = shallow(
- <InputForString name="foo" value="bar" isDefault={false} onChange={onChange} />
+ <InputForString isDefault={false} name="foo" onChange={onChange} value="bar" />
).find(SimpleInput);
expect(simpleInput.length).toBe(1);
expect(simpleInput.prop('name')).toBe('foo');
diff --git a/server/sonar-web/src/main/js/apps/settings/components/inputs/__tests__/InputForText-test.js b/server/sonar-web/src/main/js/apps/settings/components/inputs/__tests__/InputForText-test.js
index 34d944cd0a5..387873b0cd9 100644
--- a/server/sonar-web/src/main/js/apps/settings/components/inputs/__tests__/InputForText-test.js
+++ b/server/sonar-web/src/main/js/apps/settings/components/inputs/__tests__/InputForText-test.js
@@ -25,7 +25,7 @@ import { change } from '../../../../../helpers/testUtils';
it('should render textarea', () => {
const onChange = jest.fn();
const textarea = shallow(
- <InputForText name="foo" value="bar" isDefault={false} onChange={onChange} />
+ <InputForText isDefault={false} name="foo" onChange={onChange} value="bar" />
).find('textarea');
expect(textarea.length).toBe(1);
expect(textarea.prop('name')).toBe('foo');
@@ -36,7 +36,7 @@ it('should render textarea', () => {
it('should call onChange', () => {
const onChange = jest.fn();
const textarea = shallow(
- <InputForText name="foo" value="bar" isDefault={false} onChange={onChange} />
+ <InputForText isDefault={false} name="foo" onChange={onChange} value="bar" />
).find('textarea');
expect(textarea.length).toBe(1);
expect(textarea.prop('onChange')).toBeTruthy();
diff --git a/server/sonar-web/src/main/js/apps/settings/components/inputs/__tests__/MultiValueInput-test.js b/server/sonar-web/src/main/js/apps/settings/components/inputs/__tests__/MultiValueInput-test.js
index 94c0df554ab..b8a777db0f3 100644
--- a/server/sonar-web/src/main/js/apps/settings/components/inputs/__tests__/MultiValueInput-test.js
+++ b/server/sonar-web/src/main/js/apps/settings/components/inputs/__tests__/MultiValueInput-test.js
@@ -34,7 +34,7 @@ const assertValues = (inputs, values) => {
it('should render one value', () => {
const multiValueInput = shallow(
- <MultiValueInput setting={{ definition }} value={['foo']} onChange={jest.fn()} />
+ <MultiValueInput onChange={jest.fn()} setting={{ definition }} value={['foo']} />
);
const stringInputs = multiValueInput.find(PrimitiveInput);
expect(stringInputs.length).toBe(1 + 1);
@@ -43,7 +43,7 @@ it('should render one value', () => {
it('should render several values', () => {
const multiValueInput = shallow(
- <MultiValueInput setting={{ definition }} value={['foo', 'bar', 'baz']} onChange={jest.fn()} />
+ <MultiValueInput onChange={jest.fn()} setting={{ definition }} value={['foo', 'bar', 'baz']} />
);
const stringInputs = multiValueInput.find(PrimitiveInput);
expect(stringInputs.length).toBe(3 + 1);
@@ -53,7 +53,7 @@ it('should render several values', () => {
it('should remove value', () => {
const onChange = jest.fn();
const multiValueInput = shallow(
- <MultiValueInput setting={{ definition }} value={['foo', 'bar', 'baz']} onChange={onChange} />
+ <MultiValueInput onChange={onChange} setting={{ definition }} value={['foo', 'bar', 'baz']} />
);
click(multiValueInput.find('.js-remove-value').at(1));
expect(onChange).toBeCalledWith(['foo', 'baz']);
@@ -62,7 +62,7 @@ it('should remove value', () => {
it('should change existing value', () => {
const onChange = jest.fn();
const multiValueInput = shallow(
- <MultiValueInput setting={{ definition }} value={['foo', 'bar', 'baz']} onChange={onChange} />
+ <MultiValueInput onChange={onChange} setting={{ definition }} value={['foo', 'bar', 'baz']} />
);
multiValueInput
.find(PrimitiveInput)
@@ -74,7 +74,7 @@ it('should change existing value', () => {
it('should add new value', () => {
const onChange = jest.fn();
const multiValueInput = shallow(
- <MultiValueInput setting={{ definition }} value={['foo']} onChange={onChange} />
+ <MultiValueInput onChange={onChange} setting={{ definition }} value={['foo']} />
);
multiValueInput
.find(PrimitiveInput)
diff --git a/server/sonar-web/src/main/js/apps/settings/components/inputs/__tests__/SimpleInput-test.js b/server/sonar-web/src/main/js/apps/settings/components/inputs/__tests__/SimpleInput-test.js
index 42973678530..35f2c967252 100644
--- a/server/sonar-web/src/main/js/apps/settings/components/inputs/__tests__/SimpleInput-test.js
+++ b/server/sonar-web/src/main/js/apps/settings/components/inputs/__tests__/SimpleInput-test.js
@@ -26,12 +26,12 @@ it('should render input', () => {
const onChange = jest.fn();
const input = shallow(
<SimpleInput
- type="text"
className="input-large"
- name="foo"
- value="bar"
isDefault={false}
+ name="foo"
onChange={onChange}
+ type="text"
+ value="bar"
/>
).find('input');
expect(input.length).toBe(1);
@@ -46,12 +46,12 @@ it('should call onChange', () => {
const onChange = jest.fn();
const input = shallow(
<SimpleInput
- type="text"
className="input-large"
- name="foo"
- value="bar"
isDefault={false}
+ name="foo"
onChange={onChange}
+ type="text"
+ value="bar"
/>
).find('input');
expect(input.length).toBe(1);
diff --git a/server/sonar-web/src/main/js/apps/settings/encryption/EncryptionApp.js b/server/sonar-web/src/main/js/apps/settings/encryption/EncryptionApp.js
index 5885ca220b0..89f918dd457 100644
--- a/server/sonar-web/src/main/js/apps/settings/encryption/EncryptionApp.js
+++ b/server/sonar-web/src/main/js/apps/settings/encryption/EncryptionApp.js
@@ -43,7 +43,7 @@ export default class EncryptionApp extends React.PureComponent {
render() {
return (
- <div id="encryption-page" className="page page-limited">
+ <div className="page page-limited" id="encryption-page">
<Helmet title={translate('property.category.security.encryption')} />
<header className="page-header">
<h1 className="page-title">{translate('property.category.security.encryption')}</h1>
@@ -53,8 +53,8 @@ export default class EncryptionApp extends React.PureComponent {
{!this.props.loading &&
!this.props.secretKeyAvailable && (
<GenerateSecretKeyForm
- secretKey={this.props.secretKey}
generateSecretKey={this.props.generateSecretKey}
+ secretKey={this.props.secretKey}
/>
)}
diff --git a/server/sonar-web/src/main/js/apps/settings/encryption/EncryptionAppContainer.js b/server/sonar-web/src/main/js/apps/settings/encryption/EncryptionAppContainer.js
index 95c90a3f2f2..80c24b3527f 100644
--- a/server/sonar-web/src/main/js/apps/settings/encryption/EncryptionAppContainer.js
+++ b/server/sonar-web/src/main/js/apps/settings/encryption/EncryptionAppContainer.js
@@ -27,9 +27,12 @@ import {
} from '../store/encryptionPage/actions';
import { getSettingsAppEncryptionState } from '../../../store/rootReducer';
-export default connect(state => getSettingsAppEncryptionState(state), {
- checkSecretKey,
- generateSecretKey,
- encryptValue,
- startGeneration
-})(EncryptionApp);
+export default connect(
+ state => getSettingsAppEncryptionState(state),
+ {
+ checkSecretKey,
+ generateSecretKey,
+ encryptValue,
+ startGeneration
+ }
+)(EncryptionApp);
diff --git a/server/sonar-web/src/main/js/apps/system/components/ClusterSysInfos.tsx b/server/sonar-web/src/main/js/apps/system/components/ClusterSysInfos.tsx
index 1d7ae6d3f8c..e6df1fa0c2c 100644
--- a/server/sonar-web/src/main/js/apps/system/components/ClusterSysInfos.tsx
+++ b/server/sonar-web/src/main/js/apps/system/components/ClusterSysInfos.tsx
@@ -56,9 +56,9 @@ export default function ClusterSysInfos({ expandedCards, sysInfoData, toggleCard
</li>
{sortBy(getAppNodes(sysInfoData), getNodeName).map(node => (
<HealthCard
- key={getNodeName(node)}
health={getHealth(node)}
healthCauses={getHealthCauses(node)}
+ key={getNodeName(node)}
name={getNodeName(node)}
onClick={toggleCard}
open={expandedCards.includes(getNodeName(node))}
@@ -68,9 +68,9 @@ export default function ClusterSysInfos({ expandedCards, sysInfoData, toggleCard
<li className="note system-info-health-title">{translate('system.search_nodes_title')}</li>
{sortBy(getSearchNodes(sysInfoData), getNodeName).map(node => (
<HealthCard
- key={getNodeName(node)}
health={getHealth(node)}
healthCauses={getHealthCauses(node)}
+ key={getNodeName(node)}
name={getNodeName(node)}
onClick={toggleCard}
open={expandedCards.includes(getNodeName(node))}
diff --git a/server/sonar-web/src/main/js/apps/system/components/PageHeader.tsx b/server/sonar-web/src/main/js/apps/system/components/PageHeader.tsx
index 653a3841154..007e186d0d9 100644
--- a/server/sonar-web/src/main/js/apps/system/components/PageHeader.tsx
+++ b/server/sonar-web/src/main/js/apps/system/components/PageHeader.tsx
@@ -40,8 +40,8 @@ export default function PageHeader(props: Props) {
canRestart={!props.isCluster}
cluster={props.isCluster}
logLevel={props.logLevel}
- serverId={props.serverId}
onLogLevelChange={props.onLogLevelChange}
+ serverId={props.serverId}
/>
)}
{props.loading && (
diff --git a/server/sonar-web/src/main/js/apps/system/components/__tests__/PageHeader-test.tsx b/server/sonar-web/src/main/js/apps/system/components/__tests__/PageHeader-test.tsx
index 94cbc6b4dc4..85182ef72d2 100644
--- a/server/sonar-web/src/main/js/apps/system/components/__tests__/PageHeader-test.tsx
+++ b/server/sonar-web/src/main/js/apps/system/components/__tests__/PageHeader-test.tsx
@@ -28,8 +28,8 @@ it('should render correctly', () => {
isCluster={true}
loading={false}
logLevel="INFO"
- showActions={true}
onLogLevelChange={() => {}}
+ showActions={true}
/>
)
).toMatchSnapshot();
@@ -42,8 +42,8 @@ it('should show a loading spinner and no actions', () => {
isCluster={true}
loading={true}
logLevel="INFO"
- showActions={false}
onLogLevelChange={() => {}}
+ showActions={false}
/>
)
).toMatchSnapshot();
diff --git a/server/sonar-web/src/main/js/apps/system/components/info-items/HealthCard.tsx b/server/sonar-web/src/main/js/apps/system/components/info-items/HealthCard.tsx
index f042eed7de3..8b621c3d4a6 100644
--- a/server/sonar-web/src/main/js/apps/system/components/info-items/HealthCard.tsx
+++ b/server/sonar-web/src/main/js/apps/system/components/info-items/HealthCard.tsx
@@ -76,7 +76,7 @@ export default function HealthCard({
title={name}>
{showFields && <Section items={mainSection} />}
{showSections &&
- map(sections, (section, name) => <Section key={name} items={section} name={name} />)}
+ map(sections, (section, name) => <Section items={section} key={name} name={name} />)}
</BoxedGroupAccordion>
);
}
diff --git a/server/sonar-web/src/main/js/apps/system/components/info-items/HealthItem.tsx b/server/sonar-web/src/main/js/apps/system/components/info-items/HealthItem.tsx
index 5bea29aae5c..bdb649e28fb 100644
--- a/server/sonar-web/src/main/js/apps/system/components/info-items/HealthItem.tsx
+++ b/server/sonar-web/src/main/js/apps/system/components/info-items/HealthItem.tsx
@@ -42,7 +42,7 @@ export default function HealthItem({ biggerHealth, className, name, health, heal
<div className={classNames('system-info-health-info', className)}>
{hasHealthCauses &&
healthCauses!.map((cause, idx) => (
- <HealthCauseItem key={idx} className="spacer-right" health={health} healthCause={cause} />
+ <HealthCauseItem className="spacer-right" health={health} healthCause={cause} key={idx} />
))}
{name ? (
<Tooltip overlay={translateWithParameters('system.current_health_of_x', name)}>
diff --git a/server/sonar-web/src/main/js/apps/system/components/info-items/__tests__/HealthItem-test.tsx b/server/sonar-web/src/main/js/apps/system/components/info-items/__tests__/HealthItem-test.tsx
index b0e0b9ee348..3e4cacff8ba 100644
--- a/server/sonar-web/src/main/js/apps/system/components/info-items/__tests__/HealthItem-test.tsx
+++ b/server/sonar-web/src/main/js/apps/system/components/info-items/__tests__/HealthItem-test.tsx
@@ -25,7 +25,7 @@ import { HealthType } from '../../../../../api/system';
it('should render correctly', () => {
expect(
shallow(
- <HealthItem biggerHealth={true} name="Foo" health={HealthType.RED} healthCauses={['foo']} />
+ <HealthItem biggerHealth={true} health={HealthType.RED} healthCauses={['foo']} name="Foo" />
)
).toMatchSnapshot();
});
diff --git a/server/sonar-web/src/main/js/apps/system/components/info-items/__tests__/Section-test.tsx b/server/sonar-web/src/main/js/apps/system/components/info-items/__tests__/Section-test.tsx
index 4e37df1258a..924823697cc 100644
--- a/server/sonar-web/src/main/js/apps/system/components/info-items/__tests__/Section-test.tsx
+++ b/server/sonar-web/src/main/js/apps/system/components/info-items/__tests__/Section-test.tsx
@@ -23,7 +23,7 @@ import Section from '../Section';
it('should render correctly', () => {
expect(
- shallow(<Section name="foo" items={{ foo: 1, bar: 'Bar', baz: false }} />)
+ shallow(<Section items={{ foo: 1, bar: 'Bar', baz: false }} name="foo" />)
).toMatchSnapshot();
});
diff --git a/server/sonar-web/src/main/js/apps/system/components/info-items/__tests__/__snapshots__/SysInfoItem-test.tsx.snap b/server/sonar-web/src/main/js/apps/system/components/info-items/__tests__/__snapshots__/SysInfoItem-test.tsx.snap
index ce4b5077ba0..6b61b4c785e 100644
--- a/server/sonar-web/src/main/js/apps/system/components/info-items/__tests__/__snapshots__/SysInfoItem-test.tsx.snap
+++ b/server/sonar-web/src/main/js/apps/system/components/info-items/__tests__/__snapshots__/SysInfoItem-test.tsx.snap
@@ -136,7 +136,7 @@ Array [
"clipRule": "evenodd",
"fillRule": "evenodd",
"strokeLinejoin": "round",
- "strokeMiterlimit": "1.41421",
+ "strokeMiterlimit": 1.41421,
}
}
version="1.1"
diff --git a/server/sonar-web/src/main/js/apps/system/components/system-upgrade/SystemUpgradeForm.tsx b/server/sonar-web/src/main/js/apps/system/components/system-upgrade/SystemUpgradeForm.tsx
index 4112b1be239..be2274f7037 100644
--- a/server/sonar-web/src/main/js/apps/system/components/system-upgrade/SystemUpgradeForm.tsx
+++ b/server/sonar-web/src/main/js/apps/system/components/system-upgrade/SystemUpgradeForm.tsx
@@ -54,10 +54,10 @@ export default class SystemUpgradeForm extends React.PureComponent<Props, State>
{systemUpgrades.map((upgrades, idx) => (
<SystemUpgradeItem
key={upgrades[upgrades.length - 1].version}
+ systemUpgrades={upgrades}
type={
idx === 0 ? translate('system.latest_version') : translate('system.lts_version')
}
- systemUpgrades={upgrades}
/>
))}
</div>
diff --git a/server/sonar-web/src/main/js/apps/system/components/system-upgrade/__tests__/SystemUpgradeItem-test.tsx b/server/sonar-web/src/main/js/apps/system/components/system-upgrade/__tests__/SystemUpgradeItem-test.tsx
index 7fd5d5121f0..24f01859547 100644
--- a/server/sonar-web/src/main/js/apps/system/components/system-upgrade/__tests__/SystemUpgradeItem-test.tsx
+++ b/server/sonar-web/src/main/js/apps/system/components/system-upgrade/__tests__/SystemUpgradeItem-test.tsx
@@ -54,6 +54,6 @@ it('should display correctly', () => {
});
it('should display a badge', () => {
- const wrapper = shallow(<SystemUpgradeItem type="LTS Version" systemUpgrades={UPGRADES} />);
+ const wrapper = shallow(<SystemUpgradeItem systemUpgrades={UPGRADES} type="LTS Version" />);
expect(wrapper.find('h1').exists()).toBeTruthy();
});
diff --git a/server/sonar-web/src/main/js/apps/system/utils.ts b/server/sonar-web/src/main/js/apps/system/utils.ts
index e24f796cd60..eb0b963bf6e 100644
--- a/server/sonar-web/src/main/js/apps/system/utils.ts
+++ b/server/sonar-web/src/main/js/apps/system/utils.ts
@@ -192,16 +192,19 @@ export function groupSections(sysInfoData: SysValueObject) {
return { mainSection, sections };
}
-export const parseQuery = memoize((urlQuery: RawQuery): Query => ({
- expandedCards: parseAsArray(urlQuery.expand, parseAsString)
-}));
-
-export const serializeQuery = memoize((query: Query): RawQuery =>
- cleanQuery({
- expand: serializeStringArray(query.expandedCards)
+export const parseQuery = memoize(
+ (urlQuery: RawQuery): Query => ({
+ expandedCards: parseAsArray(urlQuery.expand, parseAsString)
})
);
+export const serializeQuery = memoize(
+ (query: Query): RawQuery =>
+ cleanQuery({
+ expand: serializeStringArray(query.expandedCards)
+ })
+);
+
export function sortUpgrades(upgrades: SystemUpgrade[]): SystemUpgrade[] {
return sortBy(upgrades, [
(upgrade: SystemUpgrade) => -Number(upgrade.version.split('.')[0]),
diff --git a/server/sonar-web/src/main/js/apps/tutorials/onboarding/OnboardingPage.tsx b/server/sonar-web/src/main/js/apps/tutorials/onboarding/OnboardingPage.tsx
index d69e98ae561..cd5bc33f08c 100644
--- a/server/sonar-web/src/main/js/apps/tutorials/onboarding/OnboardingPage.tsx
+++ b/server/sonar-web/src/main/js/apps/tutorials/onboarding/OnboardingPage.tsx
@@ -96,4 +96,7 @@ export class OnboardingPage extends React.PureComponent<DispatchProps, State> {
const mapDispatchToProps: DispatchProps = { skipOnboardingAction };
-export default connect<{}, DispatchProps>(null, mapDispatchToProps)(OnboardingPage);
+export default connect<{}, DispatchProps>(
+ null,
+ mapDispatchToProps
+)(OnboardingPage);
diff --git a/server/sonar-web/src/main/js/apps/tutorials/projectOnboarding/ProjectOnboardingPage.tsx b/server/sonar-web/src/main/js/apps/tutorials/projectOnboarding/ProjectOnboardingPage.tsx
index 5d0978e41d9..e3e747805fc 100644
--- a/server/sonar-web/src/main/js/apps/tutorials/projectOnboarding/ProjectOnboardingPage.tsx
+++ b/server/sonar-web/src/main/js/apps/tutorials/projectOnboarding/ProjectOnboardingPage.tsx
@@ -44,4 +44,7 @@ export class ProjectOnboardingPage extends React.PureComponent<DispatchProps> {
const mapDispatchToProps: DispatchProps = { skipOnboarding };
-export default connect<{}, DispatchProps>(null, mapDispatchToProps)(ProjectOnboardingPage);
+export default connect<{}, DispatchProps>(
+ null,
+ mapDispatchToProps
+)(ProjectOnboardingPage);
diff --git a/server/sonar-web/src/main/js/apps/users/Search.tsx b/server/sonar-web/src/main/js/apps/users/Search.tsx
index 5df5684f10c..8ffb2ff98ff 100644
--- a/server/sonar-web/src/main/js/apps/users/Search.tsx
+++ b/server/sonar-web/src/main/js/apps/users/Search.tsx
@@ -36,7 +36,7 @@ export default class Search extends React.PureComponent<Props> {
const { query } = this.props;
return (
- <div id="users-search" className="panel panel-vertical bordered-bottom spacer-bottom">
+ <div className="panel panel-vertical bordered-bottom spacer-bottom" id="users-search">
<SearchBox
minLength={2}
onChange={this.handleSearch}
diff --git a/server/sonar-web/src/main/js/apps/users/UsersApp.tsx b/server/sonar-web/src/main/js/apps/users/UsersApp.tsx
index e0ea3203655..edefebb1086 100644
--- a/server/sonar-web/src/main/js/apps/users/UsersApp.tsx
+++ b/server/sonar-web/src/main/js/apps/users/UsersApp.tsx
@@ -124,7 +124,7 @@ export default class UsersApp extends React.PureComponent<Props, State> {
const query = parseQuery(this.props.location.query);
const { loading, paging, users } = this.state;
return (
- <div id="users-page" className="page page-limited">
+ <div className="page page-limited" id="users-page">
<Suggestions suggestions="users" />
<Helmet title={translate('users.page')} />
<Header loading={loading} onUpdateUsers={this.fetchUsers} />
@@ -140,9 +140,9 @@ export default class UsersApp extends React.PureComponent<Props, State> {
{paging !== undefined && (
<ListFooter
count={users.length}
- total={paging.total}
- ready={!loading}
loadMore={this.fetchMoreUsers}
+ ready={!loading}
+ total={paging.total}
/>
)}
</div>
diff --git a/server/sonar-web/src/main/js/apps/users/UsersList.tsx b/server/sonar-web/src/main/js/apps/users/UsersList.tsx
index de981b356f0..8888af81c51 100644
--- a/server/sonar-web/src/main/js/apps/users/UsersList.tsx
+++ b/server/sonar-web/src/main/js/apps/users/UsersList.tsx
@@ -41,7 +41,7 @@ export default function UsersList({
}: Props) {
return (
<div className="boxed-group boxed-group-inner">
- <table id="users-list" className="data zebra">
+ <table className="data zebra" id="users-list">
<thead>
<tr>
<th />
diff --git a/server/sonar-web/src/main/js/apps/users/components/UserGroups.tsx b/server/sonar-web/src/main/js/apps/users/components/UserGroups.tsx
index dceecaeafd1..53ab715e8da 100644
--- a/server/sonar-web/src/main/js/apps/users/components/UserGroups.tsx
+++ b/server/sonar-web/src/main/js/apps/users/components/UserGroups.tsx
@@ -54,14 +54,14 @@ export default class UserGroups extends React.PureComponent<Props, State> {
return (
<ul>
{groups.slice(0, limit).map(group => (
- <li key={group} className="little-spacer-bottom">
+ <li className="little-spacer-bottom" key={group}>
{group}
</li>
))}
{groups.length > GROUPS_LIMIT &&
this.state.showMore &&
groups.slice(limit).map(group => (
- <li key={group} className="little-spacer-bottom">
+ <li className="little-spacer-bottom" key={group}>
{group}
</li>
))}
diff --git a/server/sonar-web/src/main/js/apps/users/components/UserListItem.tsx b/server/sonar-web/src/main/js/apps/users/components/UserListItem.tsx
index 4848a05c853..33562848989 100644
--- a/server/sonar-web/src/main/js/apps/users/components/UserListItem.tsx
+++ b/server/sonar-web/src/main/js/apps/users/components/UserListItem.tsx
@@ -62,7 +62,7 @@ export default class UserListItem extends React.PureComponent<Props, State> {
</td>
{!organizationsEnabled && (
<td>
- <UserGroups groups={user.groups || []} user={user} onUpdateUsers={onUpdateUsers} />
+ <UserGroups groups={user.groups || []} onUpdateUsers={onUpdateUsers} user={user} />
</td>
)}
<td>
@@ -83,9 +83,9 @@ export default class UserListItem extends React.PureComponent<Props, State> {
</td>
{this.state.openTokenForm && (
<TokensFormModal
- user={user}
onClose={this.handleCloseTokensForm}
updateTokensCount={this.props.updateTokensCount}
+ user={user}
/>
)}
</tr>
diff --git a/server/sonar-web/src/main/js/apps/users/components/UserListItemIdentity.tsx b/server/sonar-web/src/main/js/apps/users/components/UserListItemIdentity.tsx
index a609e1c9145..1d3ff144df0 100644
--- a/server/sonar-web/src/main/js/apps/users/components/UserListItemIdentity.tsx
+++ b/server/sonar-web/src/main/js/apps/users/components/UserListItemIdentity.tsx
@@ -60,15 +60,15 @@ export function ExternalProvider({ identityProvider, user }: Props) {
<div
className="identity-provider"
style={{
- 'background-color': identityProvider.backgroundColor,
+ backgroundColor: identityProvider.backgroundColor,
color: getTextColor(identityProvider.backgroundColor, theme.secondFontColor)
}}>
<img
alt={identityProvider.name}
className="little-spacer-right"
+ height="14"
src={getBaseUrl() + identityProvider.iconPath}
width="14"
- height="14"
/>
{user.externalIdentity}
</div>
diff --git a/server/sonar-web/src/main/js/apps/users/components/UserScmAccounts.tsx b/server/sonar-web/src/main/js/apps/users/components/UserScmAccounts.tsx
index 07a6766077d..67938f2e702 100644
--- a/server/sonar-web/src/main/js/apps/users/components/UserScmAccounts.tsx
+++ b/server/sonar-web/src/main/js/apps/users/components/UserScmAccounts.tsx
@@ -44,14 +44,14 @@ export default class UserScmAccounts extends React.PureComponent<Props, State> {
return (
<ul>
{scmAccounts.slice(0, limit).map((scmAccount, idx) => (
- <li key={idx} className="little-spacer-bottom">
+ <li className="little-spacer-bottom" key={idx}>
{scmAccount}
</li>
))}
{scmAccounts.length > SCM_LIMIT &&
(this.state.showMore ? (
scmAccounts.slice(limit).map((scmAccount, idx) => (
- <li key={idx + limit} className="little-spacer-bottom">
+ <li className="little-spacer-bottom" key={idx + limit}>
{scmAccount}
</li>
))
diff --git a/server/sonar-web/src/main/js/apps/users/components/UsersSelectSearch.tsx b/server/sonar-web/src/main/js/apps/users/components/UsersSelectSearch.tsx
index 7fb84c7f497..9628b48edc4 100644
--- a/server/sonar-web/src/main/js/apps/users/components/UsersSelectSearch.tsx
+++ b/server/sonar-web/src/main/js/apps/users/components/UsersSelectSearch.tsx
@@ -103,19 +103,19 @@ export default class UsersSelectSearch extends React.PureComponent<Props, State>
<Select
autoFocus={this.props.autoFocus}
className="Select-big"
- options={this.state.searchResult}
+ clearable={false}
isLoading={this.state.isLoading}
- optionComponent={UsersSelectSearchOption}
- valueComponent={UsersSelectSearchValue}
+ labelKey="name"
+ noResultsText={noResult}
onChange={this.props.handleValueChange}
onInputChange={this.handleInputChange}
- value={this.props.selectedUser}
+ optionComponent={UsersSelectSearchOption}
+ options={this.state.searchResult}
placeholder=""
- noResultsText={noResult}
- labelKey="name"
- valueKey="login"
- clearable={false}
searchable={true}
+ value={this.props.selectedUser}
+ valueComponent={UsersSelectSearchValue}
+ valueKey="login"
/>
);
}
diff --git a/server/sonar-web/src/main/js/apps/users/components/__tests__/UsersSelectSearch-test.tsx b/server/sonar-web/src/main/js/apps/users/components/__tests__/UsersSelectSearch-test.tsx
index 26210e9dfc7..87973ed58e4 100644
--- a/server/sonar-web/src/main/js/apps/users/components/__tests__/UsersSelectSearch-test.tsx
+++ b/server/sonar-web/src/main/js/apps/users/components/__tests__/UsersSelectSearch-test.tsx
@@ -41,10 +41,10 @@ describe('UsersSelectSearch', () => {
const onSearch = jest.fn(() => Promise.resolve(users));
const wrapper = shallow(
<UsersSelectSearch
- selectedUser={selectedUser}
excludedUsers={excludedUsers}
handleValueChange={jest.fn()}
searchUsers={onSearch}
+ selectedUser={selectedUser}
/>
);
expect(wrapper).toMatchSnapshot();
@@ -57,7 +57,7 @@ describe('UsersSelectSearch', () => {
describe('UsersSelectSearchOption', () => {
it('should render correctly without all parameters', () => {
const wrapper = shallow(
- <UsersSelectSearchOption option={selectedUser} onFocus={jest.fn()} onSelect={jest.fn()}>
+ <UsersSelectSearchOption onFocus={jest.fn()} onSelect={jest.fn()} option={selectedUser}>
{selectedUser.name}
</UsersSelectSearchOption>
);
@@ -66,7 +66,7 @@ describe('UsersSelectSearchOption', () => {
it('should render correctly with email instead of hash', () => {
const wrapper = shallow(
- <UsersSelectSearchOption option={users[0]} onFocus={jest.fn()} onSelect={jest.fn()}>
+ <UsersSelectSearchOption onFocus={jest.fn()} onSelect={jest.fn()} option={users[0]}>
{users[0].name}
</UsersSelectSearchOption>
);
diff --git a/server/sonar-web/src/main/js/apps/users/utils.ts b/server/sonar-web/src/main/js/apps/users/utils.ts
index 937c46eadc1..abb0fcc3d78 100644
--- a/server/sonar-web/src/main/js/apps/users/utils.ts
+++ b/server/sonar-web/src/main/js/apps/users/utils.ts
@@ -24,12 +24,15 @@ export interface Query {
search: string;
}
-export const parseQuery = memoize((urlQuery: RawQuery): Query => ({
- search: parseAsString(urlQuery['search'])
-}));
-
-export const serializeQuery = memoize((query: Query): RawQuery =>
- cleanQuery({
- search: query.search ? serializeString(query.search) : undefined
+export const parseQuery = memoize(
+ (urlQuery: RawQuery): Query => ({
+ search: parseAsString(urlQuery['search'])
})
);
+
+export const serializeQuery = memoize(
+ (query: Query): RawQuery =>
+ cleanQuery({
+ search: query.search ? serializeString(query.search) : undefined
+ })
+);
diff --git a/server/sonar-web/src/main/js/apps/web-api/components/Action.tsx b/server/sonar-web/src/main/js/apps/web-api/components/Action.tsx
index b59e8cb07a8..9d205e3b5f6 100644
--- a/server/sonar-web/src/main/js/apps/web-api/components/Action.tsx
+++ b/server/sonar-web/src/main/js/apps/web-api/components/Action.tsx
@@ -130,16 +130,18 @@ export default class Action extends React.PureComponent<Props, State> {
const actionKey = getActionKey(domain.path, action.key);
return (
- <div id={actionKey} className="boxed-group">
+ <div className="boxed-group" id={actionKey}>
<header className="web-api-action-header boxed-group-header">
<Link
- to={{ pathname: '/web_api/' + actionKey }}
- className="spacer-right link-no-underline">
+ className="spacer-right link-no-underline"
+ to={{ pathname: '/web_api/' + actionKey }}>
<LinkIcon />
</Link>
<h3 className="web-api-action-title">
- {verb}&nbsp;{actionKey}
+ {verb}
+ &nbsp;
+ {actionKey}
</h3>
{action.internal && (
@@ -179,7 +181,7 @@ export default class Action extends React.PureComponent<Props, State> {
)}
{showResponse &&
- action.hasResponseExample && <ResponseExample domain={domain} action={action} />}
+ action.hasResponseExample && <ResponseExample action={action} domain={domain} />}
{showChangelog && <ActionChangelog changelog={action.changelog} />}
</div>
diff --git a/server/sonar-web/src/main/js/apps/web-api/components/ActionChangelog.tsx b/server/sonar-web/src/main/js/apps/web-api/components/ActionChangelog.tsx
index f02cd0d7ff2..47e57ec9ebc 100644
--- a/server/sonar-web/src/main/js/apps/web-api/components/ActionChangelog.tsx
+++ b/server/sonar-web/src/main/js/apps/web-api/components/ActionChangelog.tsx
@@ -28,7 +28,7 @@ export default function ActionChangelog({ changelog }: Props) {
return (
<ul className="big-spacer-top">
{changelog.map((item, index) => (
- <li key={index} className="spacer-top">
+ <li className="spacer-top" key={index}>
<span className="spacer-right badge">{item.version}</span>
{item.description}
</li>
diff --git a/server/sonar-web/src/main/js/apps/web-api/components/Params.tsx b/server/sonar-web/src/main/js/apps/web-api/components/Params.tsx
index 9a433edfc74..1b5f8995549 100644
--- a/server/sonar-web/src/main/js/apps/web-api/components/Params.tsx
+++ b/server/sonar-web/src/main/js/apps/web-api/components/Params.tsx
@@ -90,7 +90,7 @@ export default function Params({ params, showDeprecated, showInternal }: Props)
<h4>{translate('api_documentation.possible_values')}</h4>
<ul className="list-styled">
{param.possibleValues.map(value => (
- <li key={value} className="little-spacer-top">
+ <li className="little-spacer-top" key={value}>
<code>{value}</code>
</li>
))}
diff --git a/server/sonar-web/src/main/js/apps/web-api/utils.ts b/server/sonar-web/src/main/js/apps/web-api/utils.ts
index dceaf980e70..0fabf35af39 100644
--- a/server/sonar-web/src/main/js/apps/web-api/utils.ts
+++ b/server/sonar-web/src/main/js/apps/web-api/utils.ts
@@ -64,16 +64,19 @@ export const isDomainPathActive = (path: string, splat: string) => {
return true;
};
-export const parseQuery = memoize((urlQuery: RawQuery): Query => ({
- search: parseAsString(urlQuery['query']),
- deprecated: parseAsOptionalBoolean(urlQuery['deprecated']) || false,
- internal: parseAsOptionalBoolean(urlQuery['internal']) || false
-}));
-
-export const serializeQuery = memoize((query: Query): RawQuery =>
- cleanQuery({
- query: query.search ? serializeString(query.search) : undefined,
- deprecated: query.deprecated || undefined,
- internal: query.internal || undefined
+export const parseQuery = memoize(
+ (urlQuery: RawQuery): Query => ({
+ search: parseAsString(urlQuery['query']),
+ deprecated: parseAsOptionalBoolean(urlQuery['deprecated']) || false,
+ internal: parseAsOptionalBoolean(urlQuery['internal']) || false
})
);
+
+export const serializeQuery = memoize(
+ (query: Query): RawQuery =>
+ cleanQuery({
+ query: query.search ? serializeString(query.search) : undefined,
+ deprecated: query.deprecated || undefined,
+ internal: query.internal || undefined
+ })
+);
diff --git a/server/sonar-web/src/main/js/apps/webhooks/components/DeliveriesForm.tsx b/server/sonar-web/src/main/js/apps/webhooks/components/DeliveriesForm.tsx
index 5e5366e70f6..c1622381057 100644
--- a/server/sonar-web/src/main/js/apps/webhooks/components/DeliveriesForm.tsx
+++ b/server/sonar-web/src/main/js/apps/webhooks/components/DeliveriesForm.tsx
@@ -97,7 +97,9 @@ export default class DeliveriesForm extends React.PureComponent<Props, State> {
<h2>{header}</h2>
</header>
<div className="modal-body modal-container">
- {deliveries.map(delivery => <DeliveryAccordion delivery={delivery} key={delivery.id} />)}
+ {deliveries.map(delivery => (
+ <DeliveryAccordion delivery={delivery} key={delivery.id} />
+ ))}
<div className="text-center">
<DeferredSpinner loading={loading} />
</div>
diff --git a/server/sonar-web/src/main/js/components/SourceViewer/SourceViewer.tsx b/server/sonar-web/src/main/js/components/SourceViewer/SourceViewer.tsx
index 2e0a1c2daf8..5e6a563abf2 100644
--- a/server/sonar-web/src/main/js/components/SourceViewer/SourceViewer.tsx
+++ b/server/sonar-web/src/main/js/components/SourceViewer/SourceViewer.tsx
@@ -47,6 +47,7 @@ const mapDispatchToProps: DispatchProps = { onReceiveComponent };
type OwnProps = Omit<Props, keyof DispatchProps>;
-export default connect<null, DispatchProps, OwnProps>(mapStateToProps, mapDispatchToProps)(
- lazyLoad(() => import(/* webpackPrefetch: true */ './SourceViewerBase'))
-);
+export default connect<null, DispatchProps, OwnProps>(
+ mapStateToProps,
+ mapDispatchToProps
+)(lazyLoad(() => import(/* webpackPrefetch: true */ './SourceViewerBase')));
diff --git a/server/sonar-web/src/main/js/components/SourceViewer/SourceViewerBase.tsx b/server/sonar-web/src/main/js/components/SourceViewer/SourceViewerBase.tsx
index 826cd8781a8..c403c76d948 100644
--- a/server/sonar-web/src/main/js/components/SourceViewer/SourceViewerBase.tsx
+++ b/server/sonar-web/src/main/js/components/SourceViewer/SourceViewerBase.tsx
@@ -501,18 +501,16 @@ export default class SourceViewerBase extends React.PureComponent<Props, State>
}).then(
r => {
if (this.mounted) {
- this.setState(() => {
- const changes: Partial<State> = {
- displayDuplications: true,
- duplications: r.duplications,
- duplicationsByLine: duplicationsByLine(r.duplications),
- duplicatedFiles: r.files
- };
- if (r.duplications.length === 1) {
- changes.linePopup = { index: 0, line: line.line, name: 'duplications' };
- }
- return changes;
- });
+ this.setState(state => ({
+ displayDuplications: true,
+ duplications: r.duplications,
+ duplicationsByLine: duplicationsByLine(r.duplications),
+ duplicatedFiles: r.files,
+ linePopup:
+ r.duplications.length === 1
+ ? { index: 0, line: line.line, name: 'duplications' }
+ : state.linePopup
+ }));
}
},
() => {
diff --git a/server/sonar-web/src/main/js/components/SourceViewer/components/CoveragePopup.tsx b/server/sonar-web/src/main/js/components/SourceViewer/components/CoveragePopup.tsx
index 88e0809d4af..9c35f78e269 100644
--- a/server/sonar-web/src/main/js/components/SourceViewer/components/CoveragePopup.tsx
+++ b/server/sonar-web/src/main/js/components/SourceViewer/components/CoveragePopup.tsx
@@ -152,7 +152,10 @@ export default class CoveragePopup extends React.PureComponent<Props, State> {
<TestStatusIcon className="spacer-right" status={testCase.status} />
<div className="display-inline-block text-ellipsis">{testCase.name}</div>
{testCase.status !== 'SKIPPED' && (
- <span className="spacer-left note">{testCase.durationInMs}ms</span>
+ <span className="spacer-left note">
+ {testCase.durationInMs}
+ ms
+ </span>
)}
</li>
))}
diff --git a/server/sonar-web/src/main/js/components/charts/AdvancedTimeline.js b/server/sonar-web/src/main/js/components/charts/AdvancedTimeline.js
index dc21bfe550a..7ff162330c6 100644
--- a/server/sonar-web/src/main/js/components/charts/AdvancedTimeline.js
+++ b/server/sonar-web/src/main/js/components/charts/AdvancedTimeline.js
@@ -230,7 +230,9 @@ export default class AdvancedTimeline extends React.PureComponent {
const parentBbox = this.getMouseOverlayPos(evt.target);
const mouseXPos = (evt.pageX - parentBbox.left) / parentBbox.width;
const xRange = xScale.range();
- const speed = evt.deltaMode ? 25 / evt.deltaMode * this.props.zoomSpeed : this.props.zoomSpeed;
+ const speed = evt.deltaMode
+ ? (25 / evt.deltaMode) * this.props.zoomSpeed
+ : this.props.zoomSpeed;
const leftPos = xRange[0] - Math.round(speed * evt.deltaY * mouseXPos);
const rightPos = xRange[1] + Math.round(speed * evt.deltaY * (1 - mouseXPos));
const startDate = leftPos > maxXRange[0] ? xScale.invert(leftPos) : null;
diff --git a/server/sonar-web/src/main/js/components/charts/ColorBoxLegend.tsx b/server/sonar-web/src/main/js/components/charts/ColorBoxLegend.tsx
index 5edfc0f5253..54d44d78a53 100644
--- a/server/sonar-web/src/main/js/components/charts/ColorBoxLegend.tsx
+++ b/server/sonar-web/src/main/js/components/charts/ColorBoxLegend.tsx
@@ -28,7 +28,7 @@ interface Props {
colorNA?: string;
colorScale:
| ScaleOrdinal<string, string> // used for LEVEL type
- | ScaleLinear<number, string | number>; // used for RATING or PERCENT type
+ | ScaleLinear<string, string | number>; // used for RATING or PERCENT type
metricType: string;
}
diff --git a/server/sonar-web/src/main/js/components/charts/Histogram.tsx b/server/sonar-web/src/main/js/components/charts/Histogram.tsx
index 8c5728bb43c..dccb146812a 100644
--- a/server/sonar-web/src/main/js/components/charts/Histogram.tsx
+++ b/server/sonar-web/src/main/js/components/charts/Histogram.tsx
@@ -49,7 +49,7 @@ export default class Histogram extends React.PureComponent<Props> {
const x = xScale.range()[0] + (alignTicks ? padding[3] : 0);
const y = Math.round(yScale(index)! + yScale.bandwidth() / 2);
- return <rect className="bar-chart-bar" x={x} y={y} width={width} height={BAR_HEIGHT} />;
+ return <rect className="bar-chart-bar" height={BAR_HEIGHT} width={width} x={x} y={y} />;
}
renderValue(d: number, index: number, xScale: XScale, yScale: YScale) {
@@ -66,7 +66,7 @@ export default class Histogram extends React.PureComponent<Props> {
return (
<Tooltip overlay={this.props.yTooltips && this.props.yTooltips[index]}>
- <text className="bar-chart-tick histogram-value" x={x} y={y} dx="1em" dy="0.3em">
+ <text className="bar-chart-tick histogram-value" dx="1em" dy="0.3em" x={x} y={y}>
{value}
</text>
</Tooltip>
@@ -89,10 +89,10 @@ export default class Histogram extends React.PureComponent<Props> {
return (
<text
className={'bar-chart-tick ' + historyTickClass}
- x={x}
- y={y}
dx={alignTicks ? 0 : '-1em'}
- dy="0.3em">
+ dy="0.3em"
+ x={x}
+ y={y}>
{tick}
</text>
);
@@ -128,7 +128,7 @@ export default class Histogram extends React.PureComponent<Props> {
.rangeRound([0, availableHeight]);
return (
- <svg className="bar-chart" width={this.props.width} height={this.props.height}>
+ <svg className="bar-chart" height={this.props.height} width={this.props.width}>
<g transform={`translate(${this.props.alignTicks ? 4 : padding[3]}, ${padding[0]})`}>
{this.renderBars(xScale, yScale)}
</g>
diff --git a/server/sonar-web/src/main/js/components/charts/LanguageDistribution.tsx b/server/sonar-web/src/main/js/components/charts/LanguageDistribution.tsx
index e520abdc4a4..457bc24c4ea 100644
--- a/server/sonar-web/src/main/js/components/charts/LanguageDistribution.tsx
+++ b/server/sonar-web/src/main/js/components/charts/LanguageDistribution.tsx
@@ -50,10 +50,10 @@ export default function LanguageDistribution(props: Props) {
bars={data}
height={distribution.length * 25}
padding={[0, 60, 0, 80]}
+ width={props.width}
yTicks={yTicks}
yTooltips={yTooltips}
yValues={yValues}
- width={props.width}
/>
);
diff --git a/server/sonar-web/src/main/js/components/charts/ZoomTimeLine.js b/server/sonar-web/src/main/js/components/charts/ZoomTimeLine.js
index e2cee003b15..a79b1c52e1d 100644
--- a/server/sonar-web/src/main/js/components/charts/ZoomTimeLine.js
+++ b/server/sonar-web/src/main/js/components/charts/ZoomTimeLine.js
@@ -219,7 +219,7 @@ export default class ZoomTimeLine extends React.PureComponent {
const nextTick = index + 1 < ticks.length ? ticks[index + 1] : xScale.domain()[1];
const x = (xScale(tick) + xScale(nextTick)) / 2;
return (
- <text key={index} className="chart-zoom-tick" x={x} y={y} dy="1.3em">
+ <text className="chart-zoom-tick" dy="1.3em" key={index} x={x} y={y}>
{format(tick)}
</text>
);
@@ -235,11 +235,11 @@ export default class ZoomTimeLine extends React.PureComponent {
const yRange = yScale.range();
return (
<rect
+ fill={theme.leakColor}
+ height={yRange[0] - yRange[yRange.length - 1]}
+ width={xScale.range()[1] - xScale(this.props.leakPeriodDate)}
x={xScale(this.props.leakPeriodDate)}
y={yRange[yRange.length - 1]}
- width={xScale.range()[1] - xScale(this.props.leakPeriodDate)}
- height={yRange[0] - yRange[yRange.length - 1]}
- fill={theme.leakColor}
/>
);
};
@@ -256,9 +256,9 @@ export default class ZoomTimeLine extends React.PureComponent {
<g>
{this.props.series.map((serie, idx) => (
<path
- key={serie.name}
className={classNames('line-chart-path', 'line-chart-path-' + idx)}
d={lineGenerator(serie.data)}
+ key={serie.name}
/>
))}
</g>
@@ -278,9 +278,9 @@ export default class ZoomTimeLine extends React.PureComponent {
<g>
{this.props.series.map((serie, idx) => (
<path
- key={serie.name}
className={classNames('line-chart-area', 'line-chart-area-' + idx)}
d={areaGenerator(serie.data)}
+ key={serie.name}
/>
))}
</g>
@@ -300,7 +300,6 @@ export default class ZoomTimeLine extends React.PureComponent {
<Draggable
axis="x"
bounds={{ left: options.xDim[0], right: options.xDim[1] }}
- position={{ x: options.xPos, y: 0 }}
onDrag={this.handleSelectionHandleDrag(
options.xScale,
options.fixedPos,
@@ -313,13 +312,14 @@ export default class ZoomTimeLine extends React.PureComponent {
options.fixedPos,
options.xDim,
options.direction
- )}>
+ )}
+ position={{ x: options.xPos, y: 0 }}>
<rect
className="zoom-selection-handle"
- x={-3}
- y={options.yDim[1]}
height={options.yDim[0] - options.yDim[1] + 1}
width={6}
+ x={-3}
+ y={options.yDim[1]}
/>
</Draggable>
);
@@ -341,31 +341,31 @@ export default class ZoomTimeLine extends React.PureComponent {
return (
<g className="chart-zoom">
<DraggableCore
- onStart={this.handleNewZoomDragStart(xDim)}
onDrag={this.handleNewZoomDrag(xScale, xDim)}
+ onStart={this.handleNewZoomDragStart(xDim)}
onStop={this.handleNewZoomDragEnd(xScale, xDim)}>
<rect
className="zoom-overlay"
- x={xDim[0]}
- y={yDim[1]}
height={yDim[0] - yDim[1]}
width={xDim[1] - xDim[0]}
+ x={xDim[0]}
+ y={yDim[1]}
/>
</DraggableCore>
{showZoomArea && (
<Draggable
axis="x"
bounds={{ left: xDim[0], right: Math.floor(xDim[1] - zoomBoxWidth) }}
- position={{ x: xArray[0], y: 0 }}
onDrag={this.handleSelectionDrag(xScale, zoomBoxWidth, xDim, true)}
- onStop={this.handleSelectionDrag(xScale, zoomBoxWidth, xDim)}>
+ onStop={this.handleSelectionDrag(xScale, zoomBoxWidth, xDim)}
+ position={{ x: xArray[0], y: 0 }}>
<rect
className="zoom-selection"
- x={0}
- y={yDim[1]}
height={yDim[0] - yDim[1] + 1}
- width={zoomBoxWidth}
onDoubleClick={this.handleDoubleClick(xScale, xDim)}
+ width={zoomBoxWidth}
+ x={0}
+ y={yDim[1]}
/>
</Draggable>
)}
@@ -399,7 +399,7 @@ export default class ZoomTimeLine extends React.PureComponent {
const { xScale, yScale } = this.getScales();
return (
- <svg className="line-chart " width={this.props.width} height={this.props.height}>
+ <svg className="line-chart " height={this.props.height} width={this.props.width}>
<g transform={`translate(${this.props.padding[3]}, ${this.props.padding[0] + 2})`}>
{this.renderLeak(xScale, yScale)}
{this.renderBaseLine(xScale, yScale)}
diff --git a/server/sonar-web/src/main/js/components/charts/__tests__/Histogram-test.tsx b/server/sonar-web/src/main/js/components/charts/__tests__/Histogram-test.tsx
index 3d0fa938273..575e9da65f5 100644
--- a/server/sonar-web/src/main/js/components/charts/__tests__/Histogram-test.tsx
+++ b/server/sonar-web/src/main/js/components/charts/__tests__/Histogram-test.tsx
@@ -31,8 +31,8 @@ it('renders with yValues', () => {
<Histogram
bars={[100, 75, 150]}
height={75}
- yValues={['100.0', '75.0', '150.0']}
width={100}
+ yValues={['100.0', '75.0', '150.0']}
/>
)
).toMatchSnapshot();
@@ -44,9 +44,9 @@ it('renders with yValues and yTicks', () => {
<Histogram
bars={[100, 75, 150]}
height={75}
+ width={100}
yTicks={['a', 'b', 'c']}
yValues={['100.0', '75.0', '150.0']}
- width={100}
/>
)
).toMatchSnapshot();
@@ -58,10 +58,10 @@ it('renders with yValues, yTicks and yTooltips', () => {
<Histogram
bars={[100, 75, 150]}
height={75}
+ width={100}
yTicks={['a', 'b', 'c']}
yTooltips={['a - 100', 'b - 75', 'c - 150']}
yValues={['100.0', '75.0', '150.0']}
- width={100}
/>
)
).toMatchSnapshot();
diff --git a/server/sonar-web/src/main/js/components/common/MarkdownTips.tsx b/server/sonar-web/src/main/js/components/common/MarkdownTips.tsx
index 93755541652..d205f1d56a4 100644
--- a/server/sonar-web/src/main/js/components/common/MarkdownTips.tsx
+++ b/server/sonar-web/src/main/js/components/common/MarkdownTips.tsx
@@ -35,7 +35,11 @@ export default class MarkdownTips extends React.PureComponent {
</a>
{':'}
<span className="spacer-left">*{translate('bold')}*</span>
- <span className="spacer-left">``{translate('code')}``</span>
+ <span className="spacer-left">
+ ``
+ {translate('code')}
+ ``
+ </span>
<span className="spacer-left">* {translate('bulleted_point')}</span>
</div>
);
diff --git a/server/sonar-web/src/main/js/components/common/OrganizationAvatar.tsx b/server/sonar-web/src/main/js/components/common/OrganizationAvatar.tsx
index c479082670e..f9f5b25d8e3 100644
--- a/server/sonar-web/src/main/js/components/common/OrganizationAvatar.tsx
+++ b/server/sonar-web/src/main/js/components/common/OrganizationAvatar.tsx
@@ -38,7 +38,7 @@ export default function OrganizationAvatar({ organization, small }: Props) {
'is-small': small
})}>
{organization.avatar ? (
- <img className="rounded" src={organization.avatar} alt={organization.name} />
+ <img alt={organization.name} className="rounded" src={organization.avatar} />
) : (
<GenericAvatar name={organization.name} size={small ? 15 : 30} />
)}
diff --git a/server/sonar-web/src/main/js/components/common/SelectListItem.js b/server/sonar-web/src/main/js/components/common/SelectListItem.js
index 309564a9b5d..6e2ec4d6646 100644
--- a/server/sonar-web/src/main/js/components/common/SelectListItem.js
+++ b/server/sonar-web/src/main/js/components/common/SelectListItem.js
@@ -57,11 +57,11 @@ export default class SelectListItem extends React.PureComponent {
return (
<li>
<a
- href="#"
className={classNames({ active: this.props.active === this.props.item })}
+ href="#"
onClick={this.handleSelect}
- onMouseOver={this.handleHover}
- onFocus={this.handleHover}>
+ onFocus={this.handleHover}
+ onMouseOver={this.handleHover}>
{children}
</a>
</li>
diff --git a/server/sonar-web/src/main/js/components/common/__tests__/CodeSnippet-test.tsx b/server/sonar-web/src/main/js/components/common/__tests__/CodeSnippet-test.tsx
index 8956e411a50..aa54b80ef33 100644
--- a/server/sonar-web/src/main/js/components/common/__tests__/CodeSnippet-test.tsx
+++ b/server/sonar-web/src/main/js/components/common/__tests__/CodeSnippet-test.tsx
@@ -23,10 +23,10 @@ import CodeSnippet from '../CodeSnippet';
it('renders correctly', () => {
expect(mount(<CodeSnippet snippet={'foo\nbar'} />)).toMatchSnapshot();
- expect(mount(<CodeSnippet snippet={'foo\nbar'} noCopy={true} />)).toMatchSnapshot();
+ expect(mount(<CodeSnippet noCopy={true} snippet={'foo\nbar'} />)).toMatchSnapshot();
});
it('renders correctly with array snippet', () => {
expect(mount(<CodeSnippet snippet={['foo', 'bar']} />)).toMatchSnapshot();
- expect(mount(<CodeSnippet snippet={['foo', 'bar']} isOneLine={true} />)).toMatchSnapshot();
+ expect(mount(<CodeSnippet isOneLine={true} snippet={['foo', 'bar']} />)).toMatchSnapshot();
});
diff --git a/server/sonar-web/src/main/js/components/common/__tests__/SelectList-test.js b/server/sonar-web/src/main/js/components/common/__tests__/SelectList-test.js
index 892d3226d1b..29832878a31 100644
--- a/server/sonar-web/src/main/js/components/common/__tests__/SelectList-test.js
+++ b/server/sonar-web/src/main/js/components/common/__tests__/SelectList-test.js
@@ -28,8 +28,8 @@ it('should render correctly without children', () => {
expect(
shallow(
<SelectList
- items={['item', 'seconditem', 'third']}
currentItem="seconditem"
+ items={['item', 'seconditem', 'third']}
onSelect={onSelect}
/>
)
@@ -41,10 +41,11 @@ it('should render correctly with children', () => {
const items = ['item', 'seconditem', 'third'];
expect(
shallow(
- <SelectList items={items} currentItem="seconditem" onSelect={onSelect}>
+ <SelectList currentItem="seconditem" items={items} onSelect={onSelect}>
{items.map(item => (
- <SelectListItem key={item} item={item}>
- <i className="myicon" />item
+ <SelectListItem item={item} key={item}>
+ <i className="myicon" />
+ item
</SelectListItem>
))}
</SelectList>
@@ -56,10 +57,11 @@ it('should correclty handle user actions', () => {
const onSelect = jest.fn();
const items = ['item', 'seconditem', 'third'];
const list = mount(
- <SelectList items={items} currentItem="seconditem" onSelect={onSelect}>
+ <SelectList currentItem="seconditem" items={items} onSelect={onSelect}>
{items.map(item => (
- <SelectListItem key={item} item={item}>
- <i className="myicon" />item
+ <SelectListItem item={item} key={item}>
+ <i className="myicon" />
+ item
</SelectListItem>
))}
</SelectList>
diff --git a/server/sonar-web/src/main/js/components/controls/FavoriteContainer.ts b/server/sonar-web/src/main/js/components/controls/FavoriteContainer.ts
index 5d8d59db663..8d9da47f1a3 100644
--- a/server/sonar-web/src/main/js/components/controls/FavoriteContainer.ts
+++ b/server/sonar-web/src/main/js/components/controls/FavoriteContainer.ts
@@ -52,4 +52,7 @@ const mapDispatchToProps = (dispatch: Function, ownProps: any) => ({
removeFavorite: () => dispatch(removeFavorite(ownProps.componentKey))
});
-export default connect(mapStateToProps, mapDispatchToProps)(FavoriteBaseStateless);
+export default connect(
+ mapStateToProps,
+ mapDispatchToProps
+)(FavoriteBaseStateless);
diff --git a/server/sonar-web/src/main/js/components/controls/HomePageSelect.tsx b/server/sonar-web/src/main/js/components/controls/HomePageSelect.tsx
index 3c1ec66c76a..d71cec022b5 100644
--- a/server/sonar-web/src/main/js/components/controls/HomePageSelect.tsx
+++ b/server/sonar-web/src/main/js/components/controls/HomePageSelect.tsx
@@ -87,4 +87,7 @@ const mapStateToProps = (state: any): StateProps => ({
const mapDispatchToProps: DispatchProps = { setHomePage };
-export default connect(mapStateToProps, mapDispatchToProps)(HomePageSelect);
+export default connect(
+ mapStateToProps,
+ mapDispatchToProps
+)(HomePageSelect);
diff --git a/server/sonar-web/src/main/js/components/controls/RadioToggle.tsx b/server/sonar-web/src/main/js/components/controls/RadioToggle.tsx
index 3bc54c83285..33689460fde 100644
--- a/server/sonar-web/src/main/js/components/controls/RadioToggle.tsx
+++ b/server/sonar-web/src/main/js/components/controls/RadioToggle.tsx
@@ -53,13 +53,13 @@ export default class RadioToggle extends React.PureComponent<Props> {
return (
<li key={option.value}>
<input
- type="radio"
+ checked={checked}
disabled={option.disabled}
- name={this.props.name}
- value={option.value}
id={htmlId}
- checked={checked}
+ name={this.props.name}
onChange={this.handleChange}
+ type="radio"
+ value={option.value}
/>
<Tooltip overlay={option.tooltip || undefined}>
<label htmlFor={htmlId}>{option.label}</label>
diff --git a/server/sonar-web/src/main/js/components/controls/ReloadButton.tsx b/server/sonar-web/src/main/js/components/controls/ReloadButton.tsx
index fe437c24b86..b31f8e1ed75 100644
--- a/server/sonar-web/src/main/js/components/controls/ReloadButton.tsx
+++ b/server/sonar-web/src/main/js/components/controls/ReloadButton.tsx
@@ -37,10 +37,10 @@ export default class ReloadButton extends React.PureComponent<Props> {
};
renderIcon = () => (
- <svg width="18" height="24" viewBox="0 0 18 24">
+ <svg height="24" viewBox="0 0 18 24" width="18">
<path
- fill={theme.secondFontColor}
d="M16.6454 8.1084c-.3-.5-.9-.7-1.4-.4-.5.3-.7.9-.4 1.4.9 1.6 1.1 3.4.6 5.1-.5 1.7-1.7 3.2-3.2 4-3.3 1.8-7.4.6-9.1-2.7-1.8-3.1-.8-6.9 2.1-8.8v3.3h2v-7h-7v2h3.9c-3.7 2.5-5 7.5-2.8 11.4 1.6 3 4.6 4.6 7.7 4.6 1.4 0 2.8-.3 4.2-1.1 2-1.1 3.5-3 4.2-5.2.6-2.2.3-4.6-.8-6.6z"
+ fill={theme.secondFontColor}
/>
</svg>
);
diff --git a/server/sonar-web/src/main/js/components/controls/ScreenPositionFixer.tsx b/server/sonar-web/src/main/js/components/controls/ScreenPositionFixer.tsx
index ebf28cf924a..4e381937004 100644
--- a/server/sonar-web/src/main/js/components/controls/ScreenPositionFixer.tsx
+++ b/server/sonar-web/src/main/js/components/controls/ScreenPositionFixer.tsx
@@ -80,26 +80,26 @@ export default class ScreenPositionFixer extends React.Component<Props, Fixes> {
position = () => {
// eslint-disable-next-line react/no-find-dom-node
const node = findDOMNode(this);
-
- const { width, height, left, top } = node.getBoundingClientRect();
-
- const { clientHeight, clientWidth } = document.body;
-
- let leftFix = 0;
- if (left < EDGE_MARGIN) {
- leftFix = EDGE_MARGIN - left;
- } else if (left + width > clientWidth - EDGE_MARGIN) {
- leftFix = clientWidth - EDGE_MARGIN - left - width;
+ if (node && node instanceof Element) {
+ const { width, height, left, top } = node.getBoundingClientRect();
+ const { clientHeight, clientWidth } = document.body;
+
+ let leftFix = 0;
+ if (left < EDGE_MARGIN) {
+ leftFix = EDGE_MARGIN - left;
+ } else if (left + width > clientWidth - EDGE_MARGIN) {
+ leftFix = clientWidth - EDGE_MARGIN - left - width;
+ }
+
+ let topFix = 0;
+ if (top < EDGE_MARGIN) {
+ topFix = EDGE_MARGIN - top;
+ } else if (top + height > clientHeight - EDGE_MARGIN) {
+ topFix = clientHeight - EDGE_MARGIN - top - height;
+ }
+
+ this.setState({ leftFix, topFix });
}
-
- let topFix = 0;
- if (top < EDGE_MARGIN) {
- topFix = EDGE_MARGIN - top;
- } else if (top + height > clientHeight - EDGE_MARGIN) {
- topFix = clientHeight - EDGE_MARGIN - top - height;
- }
-
- this.setState({ leftFix, topFix });
};
render() {
diff --git a/server/sonar-web/src/main/js/components/controls/Tooltip.tsx b/server/sonar-web/src/main/js/components/controls/Tooltip.tsx
index 17a017881b7..9e25efbdb5c 100644
--- a/server/sonar-web/src/main/js/components/controls/Tooltip.tsx
+++ b/server/sonar-web/src/main/js/components/controls/Tooltip.tsx
@@ -157,7 +157,7 @@ export class TooltipInner extends React.Component<Props, State> {
// eslint-disable-next-line react/no-find-dom-node
const toggleNode = findDOMNode(this);
- if (toggleNode && this.tooltipNode) {
+ if (toggleNode && toggleNode instanceof Element && this.tooltipNode) {
const toggleRect = toggleNode.getBoundingClientRect();
const tooltipRect = this.tooltipNode.getBoundingClientRect();
const { width, height } = tooltipRect;
diff --git a/server/sonar-web/src/main/js/components/controls/__tests__/FavoriteBase-test.tsx b/server/sonar-web/src/main/js/components/controls/__tests__/FavoriteBase-test.tsx
index 1e1640410d9..32118beae7c 100644
--- a/server/sonar-web/src/main/js/components/controls/__tests__/FavoriteBase-test.tsx
+++ b/server/sonar-web/src/main/js/components/controls/__tests__/FavoriteBase-test.tsx
@@ -49,8 +49,8 @@ it('should remove favorite', () => {
function renderFavoriteBase(props: Partial<Props> = {}) {
return shallow(
<FavoriteBase
- favorite={true}
addFavorite={jest.fn()}
+ favorite={true}
qualifier="TRK"
removeFavorite={jest.fn()}
{...props}
diff --git a/server/sonar-web/src/main/js/components/controls/__tests__/RadioToggle-test.tsx b/server/sonar-web/src/main/js/components/controls/__tests__/RadioToggle-test.tsx
index 153e7556bc0..4aad9d7e3ac 100644
--- a/server/sonar-web/src/main/js/components/controls/__tests__/RadioToggle-test.tsx
+++ b/server/sonar-web/src/main/js/components/controls/__tests__/RadioToggle-test.tsx
@@ -48,5 +48,5 @@ it('accepts advanced options fields', () => {
function getSample(props?: any) {
const options = [{ value: 'one', label: 'first' }, { value: 'two', label: 'second' }];
- return <RadioToggle options={options} name="sample" onCheck={() => true} {...props} />;
+ return <RadioToggle name="sample" onCheck={() => true} options={options} {...props} />;
}
diff --git a/server/sonar-web/src/main/js/components/controls/__tests__/ScreenPositionFixer-test.tsx b/server/sonar-web/src/main/js/components/controls/__tests__/ScreenPositionFixer-test.tsx
index 9e389326629..41fa47340bd 100644
--- a/server/sonar-web/src/main/js/components/controls/__tests__/ScreenPositionFixer-test.tsx
+++ b/server/sonar-web/src/main/js/components/controls/__tests__/ScreenPositionFixer-test.tsx
@@ -29,9 +29,7 @@ jest.mock('lodash', () => {
});
jest.mock('react-dom', () => ({
- findDOMNode: jest.fn(() => ({
- getBoundingClientRect: () => ({ width: 0, height: 0, left: 0, top: 0 })
- }))
+ findDOMNode: jest.fn()
}));
beforeEach(() => {
@@ -92,7 +90,7 @@ it('should re-position when window is resized', () => {
function setNodeRect(rect: { width: number; height: number; left: number; top: number }) {
const findDOMNode = require('react-dom').findDOMNode as jest.Mock<any>;
- findDOMNode.mockImplementation(() => ({
- getBoundingClientRect: () => rect
- }));
+ const element = document.createElement('div');
+ Object.defineProperty(element, 'getBoundingClientRect', { value: () => rect });
+ findDOMNode.mockReturnValue(element);
}
diff --git a/server/sonar-web/src/main/js/components/controls/__tests__/ValidationModal-test.tsx b/server/sonar-web/src/main/js/components/controls/__tests__/ValidationModal-test.tsx
index f3048542aa1..741736da349 100644
--- a/server/sonar-web/src/main/js/components/controls/__tests__/ValidationModal-test.tsx
+++ b/server/sonar-web/src/main/js/components/controls/__tests__/ValidationModal-test.tsx
@@ -40,15 +40,15 @@ function getWrapper(props = {}) {
initialValues={{ field: 'foo' }}
isInitialValid={true}
onClose={jest.fn()}
- validate={(values: Values) => ({ field: values.field.length < 2 && 'Too small' })}
onSubmit={jest.fn(() => Promise.resolve())}
+ validate={(values: Values) => ({ field: values.field.length < 2 && 'Too small' })}
{...props}>
{(props: FormikProps<Values>) => (
<form onSubmit={props.handleSubmit}>
<input
- onChange={props.handleChange}
- onBlur={props.handleBlur}
name="field"
+ onBlur={props.handleBlur}
+ onChange={props.handleChange}
type="text"
value={props.values.field}
/>
diff --git a/server/sonar-web/src/main/js/components/docs/DocCollapsibleBlock.tsx b/server/sonar-web/src/main/js/components/docs/DocCollapsibleBlock.tsx
index 47b8c96183d..081da9449ea 100644
--- a/server/sonar-web/src/main/js/components/docs/DocCollapsibleBlock.tsx
+++ b/server/sonar-web/src/main/js/components/docs/DocCollapsibleBlock.tsx
@@ -36,7 +36,7 @@ export default class DocCollapsibleBlock extends React.PureComponent<{}, State>
renderTitle(children: any) {
return (
<a
- aria-expanded={String(this.state.open)}
+ aria-expanded={this.state.open}
aria-haspopup={true}
className="link-no-underline"
href="#"
diff --git a/server/sonar-web/src/main/js/components/docs/__tests__/__snapshots__/DocCollapsibleBlock-test.tsx.snap b/server/sonar-web/src/main/js/components/docs/__tests__/__snapshots__/DocCollapsibleBlock-test.tsx.snap
index 763267113d6..67244fe808a 100644
--- a/server/sonar-web/src/main/js/components/docs/__tests__/__snapshots__/DocCollapsibleBlock-test.tsx.snap
+++ b/server/sonar-web/src/main/js/components/docs/__tests__/__snapshots__/DocCollapsibleBlock-test.tsx.snap
@@ -7,7 +7,7 @@ exports[`should render a collapsible block 1`] = `
className="collapse-container"
>
<a
- aria-expanded="false"
+ aria-expanded={false}
aria-haspopup={true}
className="link-no-underline"
href="#"
@@ -27,7 +27,7 @@ exports[`should render a collapsible block 2`] = `
className="collapse-container"
>
<a
- aria-expanded="true"
+ aria-expanded={true}
aria-haspopup={true}
className="link-no-underline"
href="#"
diff --git a/server/sonar-web/src/main/js/components/icons-components/DropdownIcon.tsx b/server/sonar-web/src/main/js/components/icons-components/DropdownIcon.tsx
index 50990b4f72c..30ff382cf5c 100644
--- a/server/sonar-web/src/main/js/components/icons-components/DropdownIcon.tsx
+++ b/server/sonar-web/src/main/js/components/icons-components/DropdownIcon.tsx
@@ -36,7 +36,7 @@ export default function DropdownIcon({
height={size}
style={turned ? { transform: 'rotate(180deg)' } : undefined}
viewBox="0 0 7 16"
- width={size / 16 * 7}>
+ width={(size / 16) * 7}>
<path
d="M7 6.469a.42.42 0 0 1-.13.307L3.808 9.84a.42.42 0 0 1-.308.13.42.42 0 0 1-.308-.13L.13 6.776A.42.42 0 0 1 0 6.47a.42.42 0 0 1 .13-.308.42.42 0 0 1 .307-.13h6.126a.42.42 0 0 1 .307.13.42.42 0 0 1 .13.308z"
style={{ fill }}
diff --git a/server/sonar-web/src/main/js/components/icons-components/Icon.tsx b/server/sonar-web/src/main/js/components/icons-components/Icon.tsx
index 40a3f9ccdaa..25560e4eac8 100644
--- a/server/sonar-web/src/main/js/components/icons-components/Icon.tsx
+++ b/server/sonar-web/src/main/js/components/icons-components/Icon.tsx
@@ -55,7 +55,7 @@ export default function Icon({
fillRule: 'evenodd',
clipRule: 'evenodd',
strokeLinejoin: 'round',
- strokeMiterlimit: '1.41421',
+ strokeMiterlimit: 1.41421,
...style
}}
version="1.1"
diff --git a/server/sonar-web/src/main/js/components/issue/components/__tests__/IssueMessage-test.js b/server/sonar-web/src/main/js/components/issue/components/__tests__/IssueMessage-test.js
index 0edabcb727f..8371d6376b0 100644
--- a/server/sonar-web/src/main/js/components/issue/components/__tests__/IssueMessage-test.js
+++ b/server/sonar-web/src/main/js/components/issue/components/__tests__/IssueMessage-test.js
@@ -25,9 +25,9 @@ it('should render with the message and a link to open the rule', () => {
const element = shallow(
<IssueMessage
manualVulnerability={false}
- rule="javascript:S1067"
message="Reduce the number of conditional operators (4) used in the expression"
organization="myorg"
+ rule="javascript:S1067"
/>,
{ context: { workspace: {} } }
);
diff --git a/server/sonar-web/src/main/js/components/issue/components/__tests__/IssueTitleBar-test.js b/server/sonar-web/src/main/js/components/issue/components/__tests__/IssueTitleBar-test.js
index 38e804a1cd5..4a917cf1ead 100644
--- a/server/sonar-web/src/main/js/components/issue/components/__tests__/IssueTitleBar-test.js
+++ b/server/sonar-web/src/main/js/components/issue/components/__tests__/IssueTitleBar-test.js
@@ -50,8 +50,8 @@ it('should render the titlebar correctly', () => {
const element = shallow(
<IssueTitleBar
branchLike={{ isMain: false, name: 'feature-1.0', type: 'SHORT' }}
- issue={issue}
currentPopup={null}
+ issue={issue}
onFail={jest.fn()}
togglePopup={jest.fn()}
/>
@@ -62,8 +62,8 @@ it('should render the titlebar correctly', () => {
it('should render the titlebar with the filter', () => {
const element = shallow(
<IssueTitleBar
- issue={issue}
currentPopup={null}
+ issue={issue}
onFail={jest.fn()}
onFilter={jest.fn()}
togglePopup={jest.fn()}
diff --git a/server/sonar-web/src/main/js/components/issue/popups/ChangelogPopup.js b/server/sonar-web/src/main/js/components/issue/popups/ChangelogPopup.js
index 3c60cad23a2..a9ec681f27b 100644
--- a/server/sonar-web/src/main/js/components/issue/popups/ChangelogPopup.js
+++ b/server/sonar-web/src/main/js/components/issue/popups/ChangelogPopup.js
@@ -110,7 +110,9 @@ export default class ChangelogPopup extends React.PureComponent {
{item.userName}
</p>
)}
- {item.diffs.map(diff => <IssueChangelogDiff diff={diff} key={diff.key} />)}
+ {item.diffs.map(diff => (
+ <IssueChangelogDiff diff={diff} key={diff.key} />
+ ))}
</td>
</tr>
))}
diff --git a/server/sonar-web/src/main/js/components/preview-graph/PreviewGraph.js b/server/sonar-web/src/main/js/components/preview-graph/PreviewGraph.js
index 9f790afa5cf..b98fb9b22ff 100644
--- a/server/sonar-web/src/main/js/components/preview-graph/PreviewGraph.js
+++ b/server/sonar-web/src/main/js/components/preview-graph/PreviewGraph.js
@@ -168,9 +168,7 @@ export default class PreviewGraph extends React.PureComponent {
<div>
<AdvancedTimeline
endDate={null}
- startDate={null}
height={80}
- width={width}
hideGrid={true}
hideXAxis={true}
interpolate="linear"
@@ -178,7 +176,9 @@ export default class PreviewGraph extends React.PureComponent {
padding={GRAPH_PADDING}
series={series}
showAreas={['coverage', 'duplications'].includes(graph)}
+ startDate={null}
updateTooltip={this.updateTooltip}
+ width={width}
/>
{selectedDate != null &&
tooltipXPos != null &&
@@ -210,8 +210,8 @@ export default class PreviewGraph extends React.PureComponent {
<div
className="overview-analysis-graph big-spacer-bottom spacer-top"
onClick={this.handleClick}
- tabIndex={0}
- role="link">
+ role="link"
+ tabIndex={0}>
{this.renderTimeline()}
</div>
);
diff --git a/server/sonar-web/src/main/js/components/shared/DrilldownLink.tsx b/server/sonar-web/src/main/js/components/shared/DrilldownLink.tsx
index 8836780c7f9..8081a2c76d3 100644
--- a/server/sonar-web/src/main/js/components/shared/DrilldownLink.tsx
+++ b/server/sonar-web/src/main/js/components/shared/DrilldownLink.tsx
@@ -127,7 +127,7 @@ export default class DrilldownLink extends React.PureComponent<Props> {
});
return (
- <Link to={url} className={this.props.className}>
+ <Link className={this.props.className} to={url}>
{this.props.children}
</Link>
);
diff --git a/server/sonar-web/src/main/js/components/workspace/Workspace.tsx b/server/sonar-web/src/main/js/components/workspace/Workspace.tsx
index ea0cc484b7f..3f35a5fdf9b 100644
--- a/server/sonar-web/src/main/js/components/workspace/Workspace.tsx
+++ b/server/sonar-web/src/main/js/components/workspace/Workspace.tsx
@@ -97,7 +97,7 @@ export default class Workspace extends React.PureComponent<{}, State> {
};
openComponent = (component: ComponentDescriptor) => {
- this.setState((state: State): Partial<State> => ({
+ this.setState((state: State) => ({
components: uniqBy([...state.components, component], component => component.key),
open: { component: component.key }
}));
@@ -108,7 +108,7 @@ export default class Workspace extends React.PureComponent<{}, State> {
};
openRule = (rule: RuleDescriptor) => {
- this.setState((state: State): Partial<State> => ({
+ this.setState((state: State) => ({
open: { rule: rule.key },
rules: uniqBy([...state.rules, rule], rule => rule.key)
}));
@@ -119,7 +119,7 @@ export default class Workspace extends React.PureComponent<{}, State> {
};
closeComponent = (componentKey: string) => {
- this.setState((state: State): Partial<State> => ({
+ this.setState((state: State) => ({
components: state.components.filter(x => x.key !== componentKey),
open: {
...state.open,
@@ -129,7 +129,7 @@ export default class Workspace extends React.PureComponent<{}, State> {
};
closeRule = (ruleKey: string) => {
- this.setState((state: State): Partial<State> => ({
+ this.setState((state: State) => ({
rules: state.rules.filter(x => x.key !== ruleKey),
open: {
...state.open,
@@ -141,7 +141,7 @@ export default class Workspace extends React.PureComponent<{}, State> {
handleComponentLoad = (details: { key: string; name: string; qualifier: string }) => {
if (this.mounted) {
const { key, name, qualifier } = details;
- this.setState((state: State): Partial<State> => ({
+ this.setState((state: State) => ({
components: state.components.map(
component => (component.key === key ? { ...component, name, qualifier } : component)
)
@@ -152,7 +152,7 @@ export default class Workspace extends React.PureComponent<{}, State> {
handleRuleLoad = (details: { key: string; name: string }) => {
if (this.mounted) {
const { key, name } = details;
- this.setState((state: State): Partial<State> => ({
+ this.setState((state: State) => ({
rules: state.rules.map(rule => (rule.key === key ? { ...rule, name } : rule))
}));
}
@@ -173,7 +173,7 @@ export default class Workspace extends React.PureComponent<{}, State> {
resize = (deltaY: number) => {
const minHeight = window.innerHeight * MIN_HEIGHT;
const maxHeight = window.innerHeight * MAX_HEIGHT;
- this.setState((state: State): Partial<State> => ({
+ this.setState((state: State) => ({
height: Math.min(maxHeight, Math.max(minHeight, state.height - deltaY))
}));
};
diff --git a/server/sonar-web/src/main/js/helpers/cookies.ts b/server/sonar-web/src/main/js/helpers/cookies.ts
index 9d6dabbe266..3c37516c6fd 100644
--- a/server/sonar-web/src/main/js/helpers/cookies.ts
+++ b/server/sonar-web/src/main/js/helpers/cookies.ts
@@ -19,15 +19,17 @@
*/
import { memoize } from 'lodash';
-const parseCookies = memoize((documentCookie: string): { [key: string]: string } => {
- const rawCookies = documentCookie.split('; ');
- const cookies: { [key: string]: string } = {};
- rawCookies.forEach(candidate => {
- const [key, value] = candidate.split('=');
- cookies[key] = value;
- });
- return cookies;
-});
+const parseCookies = memoize(
+ (documentCookie: string): { [key: string]: string } => {
+ const rawCookies = documentCookie.split('; ');
+ const cookies: { [key: string]: string } = {};
+ rawCookies.forEach(candidate => {
+ const [key, value] = candidate.split('=');
+ cookies[key] = value;
+ });
+ return cookies;
+ }
+);
export function getCookie(name: string): string | undefined {
return parseCookies(document.cookie)[name];
diff --git a/server/sonar-web/src/main/js/store/marketplace/actions.ts b/server/sonar-web/src/main/js/store/marketplace/actions.ts
index 3f007ae52e1..5ac8d4d81eb 100644
--- a/server/sonar-web/src/main/js/store/marketplace/actions.ts
+++ b/server/sonar-web/src/main/js/store/marketplace/actions.ts
@@ -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 { Dispatch } from 'react-redux';
+import { Dispatch } from 'redux';
import { getPendingPlugins, PluginPendingResult } from '../../api/plugins';
interface SetPendingPluginsAction {
diff --git a/server/sonar-web/src/main/js/store/utils/configureStore.js b/server/sonar-web/src/main/js/store/utils/configureStore.js
index a41ada6d570..75bb516bfbe 100644
--- a/server/sonar-web/src/main/js/store/utils/configureStore.js
+++ b/server/sonar-web/src/main/js/store/utils/configureStore.js
@@ -30,7 +30,10 @@ if (process.env.NODE_ENV === 'development') {
composed.push(window.devToolsExtension ? window.devToolsExtension() : f => f);
}
-const finalCreateStore = compose(applyMiddleware(...middlewares), ...composed)(createStore);
+const finalCreateStore = compose(
+ applyMiddleware(...middlewares),
+ ...composed
+)(createStore);
export default function configureStore(rootReducer, initialState) {
return finalCreateStore(rootReducer, initialState);
diff --git a/server/sonar-web/src/main/js/store/withCurrentUser.tsx b/server/sonar-web/src/main/js/store/withCurrentUser.tsx
deleted file mode 100644
index 6656a746931..00000000000
--- a/server/sonar-web/src/main/js/store/withCurrentUser.tsx
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2018 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 { connect } from 'react-redux';
-import * as React from 'react';
-import { getCurrentUser } from './rootReducer';
-import { CurrentUser } from '../app/types';
-
-interface StateProps {
- currentUser: CurrentUser;
-}
-
-export function withCurrentUser<P extends StateProps>(Component: React.ComponentClass<P>) {
- function mapStateToProps(state: any): StateProps {
- return { currentUser: getCurrentUser(state) };
- }
-
- return connect<StateProps>(mapStateToProps)(Component);
-}
diff --git a/server/sonar-web/yarn.lock b/server/sonar-web/yarn.lock
index b54ea2c88e9..ad5afff92e9 100644
--- a/server/sonar-web/yarn.lock
+++ b/server/sonar-web/yarn.lock
@@ -56,11 +56,7 @@
dependencies:
"@types/d3-time" "*"
-"@types/d3-selection@*":
- version "1.3.1"
- resolved "https://registry.yarnpkg.com/@types/d3-selection/-/d3-selection-1.3.1.tgz#c6227f4e39d429cc429ce3882fd533facc7f014c"
-
-"@types/d3-selection@1.3.0":
+"@types/d3-selection@*", "@types/d3-selection@1.3.0":
version "1.3.0"
resolved "https://registry.yarnpkg.com/@types/d3-selection/-/d3-selection-1.3.0.tgz#acede3d22c18ec085cc401d4fdab9f040e1a73c7"
@@ -104,9 +100,9 @@
version "3.2.2"
resolved "https://registry.yarnpkg.com/@types/history/-/history-3.2.2.tgz#b6affa240cb10b5f841c6443d8a24d7f3fc8bb0c"
-"@types/jest@22.2.3":
- version "22.2.3"
- resolved "https://registry.yarnpkg.com/@types/jest/-/jest-22.2.3.tgz#0157c0316dc3722c43a7b71de3fdf3acbccef10d"
+"@types/jest@23.3.1":
+ version "23.3.1"
+ resolved "https://registry.yarnpkg.com/@types/jest/-/jest-23.3.1.tgz#a4319aedb071d478e6f407d1c4578ec8156829cf"
"@types/keymaster@1.6.28":
version "1.6.28"
@@ -124,13 +120,15 @@
version "6.0.90"
resolved "https://registry.yarnpkg.com/@types/node/-/node-6.0.90.tgz#0ed74833fa1b73dcdb9409dcb1c97ec0a8b13b02"
-"@types/prop-types@*", "@types/prop-types@15.5.2":
- version "15.5.2"
- resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.5.2.tgz#3c6b8dceb2906cc87fe4358e809f9d20c8d59be1"
+"@types/prop-types@*", "@types/prop-types@15.5.4":
+ version "15.5.4"
+ resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.5.4.tgz#9e6199bad131786e24c2baa2a82705a02139fbf8"
+ dependencies:
+ "@types/react" "*"
-"@types/react-dom@16.0.3":
- version "16.0.3"
- resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-16.0.3.tgz#8accad7eabdab4cca3e1a56f5ccb57de2da0ff64"
+"@types/react-dom@16.0.7":
+ version "16.0.7"
+ resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-16.0.7.tgz#54d0f867a76b90597e8432030d297982f25c20ba"
dependencies:
"@types/node" "*"
"@types/react" "*"
@@ -151,12 +149,12 @@
dependencies:
"@types/react" "*"
-"@types/react-redux@5.0.12":
- version "5.0.12"
- resolved "https://registry.yarnpkg.com/@types/react-redux/-/react-redux-5.0.12.tgz#c066812eb970009b373372f439d08265ed2a6f8e"
+"@types/react-redux@6.0.6":
+ version "6.0.6"
+ resolved "https://registry.yarnpkg.com/@types/react-redux/-/react-redux-6.0.6.tgz#87f1d0a6ea901b93fcaf95fa57641ff64079d277"
dependencies:
"@types/react" "*"
- redux "^3.6.0"
+ redux "^4.0.0"
"@types/react-router@3.0.13":
version "3.0.13"
@@ -178,9 +176,12 @@
"@types/prop-types" "*"
"@types/react" "*"
-"@types/react@*", "@types/react@16.0.29":
- version "16.0.29"
- resolved "https://registry.yarnpkg.com/@types/react/-/react-16.0.29.tgz#4eea6a8de9f40ca71d580ae7a9f3b4b77b368de8"
+"@types/react@*", "@types/react@16.4.8":
+ version "16.4.8"
+ resolved "https://registry.yarnpkg.com/@types/react/-/react-16.4.8.tgz#ff0440429783df0927bdcd430fa1225f7c08cf36"
+ dependencies:
+ "@types/prop-types" "*"
+ csstype "^2.2.0"
"@webassemblyjs/ast@1.5.13":
version "1.5.13"
@@ -355,11 +356,7 @@ acorn@^3.0.4:
version "3.3.0"
resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a"
-acorn@^5.0.0, acorn@^5.1.2, acorn@^5.3.0, acorn@^5.5.0:
- version "5.5.3"
- resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.5.3.tgz#f473dd47e0277a08e28e9bec5aeeb04751f0b8c9"
-
-acorn@^5.6.2:
+acorn@^5.0.0, acorn@^5.1.2, acorn@^5.3.0, acorn@^5.5.0, acorn@^5.6.2:
version "5.7.1"
resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.1.tgz#f095829297706a7c9776958c0afc8930a9b9d9d8"
@@ -711,7 +708,7 @@ babel-code-frame@6.26.0, babel-code-frame@^6.22.0, babel-code-frame@^6.26.0:
esutils "^2.0.2"
js-tokens "^3.0.2"
-babel-core@6.26.3, babel-core@^6.0.0, babel-core@^6.26.0, babel-core@^6.26.3:
+babel-core@6.26.3, babel-core@^6.0.0, babel-core@^6.26.0:
version "6.26.3"
resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.3.tgz#b2e2f09e342d0f0c88e2f02e067794125e75c207"
dependencies:
@@ -864,12 +861,12 @@ babel-helpers@^6.24.1:
babel-runtime "^6.22.0"
babel-template "^6.24.1"
-babel-jest@23.0.1, babel-jest@^23.0.1:
- version "23.0.1"
- resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-23.0.1.tgz#bbad3bf523fb202da05ed0a6540b48c84eed13a6"
+babel-jest@23.4.2, babel-jest@^23.4.2:
+ version "23.4.2"
+ resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-23.4.2.tgz#f276de67798a5d68f2d6e87ff518c2f6e1609877"
dependencies:
babel-plugin-istanbul "^4.1.6"
- babel-preset-jest "^23.0.1"
+ babel-preset-jest "^23.2.0"
babel-loader@7.1.4:
version "7.1.4"
@@ -906,13 +903,9 @@ babel-plugin-istanbul@^4.1.6:
istanbul-lib-instrument "^1.10.1"
test-exclude "^4.2.1"
-babel-plugin-jest-hoist@^22.4.3:
- version "22.4.3"
- resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-22.4.3.tgz#7d8bcccadc2667f96a0dcc6afe1891875ee6c14a"
-
-babel-plugin-jest-hoist@^23.0.1:
- version "23.0.1"
- resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-23.0.1.tgz#eaa11c964563aea9c21becef2bdf7853f7f3c148"
+babel-plugin-jest-hoist@^23.2.0:
+ version "23.2.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-23.2.0.tgz#e61fae05a1ca8801aadee57a6d66b8cefaf44167"
babel-plugin-lodash@3.3.2:
version "3.3.2"
@@ -1057,7 +1050,7 @@ babel-plugin-transform-es2015-modules-amd@^6.22.0, babel-plugin-transform-es2015
babel-runtime "^6.22.0"
babel-template "^6.24.1"
-babel-plugin-transform-es2015-modules-commonjs@^6.23.0, babel-plugin-transform-es2015-modules-commonjs@^6.24.1, babel-plugin-transform-es2015-modules-commonjs@^6.26.2:
+babel-plugin-transform-es2015-modules-commonjs@^6.23.0, babel-plugin-transform-es2015-modules-commonjs@^6.24.1:
version "6.26.2"
resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz#58a793863a9e7ca870bdc5a881117ffac27db6f3"
dependencies:
@@ -1259,18 +1252,11 @@ babel-preset-flow@^6.23.0:
dependencies:
babel-plugin-transform-flow-strip-types "^6.22.0"
-babel-preset-jest@^22.4.3:
- version "22.4.3"
- resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-22.4.3.tgz#e92eef9813b7026ab4ca675799f37419b5a44156"
- dependencies:
- babel-plugin-jest-hoist "^22.4.3"
- babel-plugin-syntax-object-rest-spread "^6.13.0"
-
-babel-preset-jest@^23.0.1:
- version "23.0.1"
- resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-23.0.1.tgz#631cc545c6cf021943013bcaf22f45d87fe62198"
+babel-preset-jest@^23.2.0:
+ version "23.2.0"
+ resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-23.2.0.tgz#8ec7a03a138f001a1a8fb1e8113652bf1a55da46"
dependencies:
- babel-plugin-jest-hoist "^23.0.1"
+ babel-plugin-jest-hoist "^23.2.0"
babel-plugin-syntax-object-rest-spread "^6.13.0"
babel-preset-react@^6.22.0:
@@ -1303,7 +1289,7 @@ babel-runtime@6.23.0:
core-js "^2.4.0"
regenerator-runtime "^0.10.0"
-babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0, babel-runtime@^6.9.2:
+babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0:
version "6.26.0"
resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe"
dependencies:
@@ -1320,7 +1306,7 @@ babel-template@^6.16.0, babel-template@^6.24.1, babel-template@^6.26.0:
babylon "^6.18.0"
lodash "^4.17.4"
-babel-traverse@^6.18.0, babel-traverse@^6.24.1, babel-traverse@^6.26.0:
+babel-traverse@^6.0.0, babel-traverse@^6.18.0, babel-traverse@^6.24.1, babel-traverse@^6.26.0:
version "6.26.0"
resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee"
dependencies:
@@ -1342,7 +1328,7 @@ babel-types@7.0.0-beta.3:
lodash "^4.2.0"
to-fast-properties "^2.0.0"
-babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26.0:
+babel-types@^6.0.0, babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26.0:
version "6.26.0"
resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497"
dependencies:
@@ -1511,9 +1497,9 @@ browser-process-hrtime@^0.1.2:
version "0.1.2"
resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-0.1.2.tgz#425d68a58d3447f02a04aa894187fce8af8b7b8e"
-browser-resolve@^1.11.2:
- version "1.11.2"
- resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.2.tgz#8ff09b0a2c421718a1051c260b32e48f442938ce"
+browser-resolve@^1.11.3:
+ version "1.11.3"
+ resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.3.tgz#9b7cbb3d0f510e4cb86bdbd796124d28b5890af6"
dependencies:
resolve "1.1.7"
@@ -1774,21 +1760,6 @@ cheerio@^1.0.0-rc.2:
lodash "^4.15.0"
parse5 "^3.0.1"
-chokidar@^1.6.0:
- version "1.7.0"
- resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468"
- dependencies:
- anymatch "^1.3.0"
- async-each "^1.0.0"
- glob-parent "^2.0.0"
- inherits "^2.0.1"
- is-binary-path "^1.0.0"
- is-glob "^2.0.0"
- path-is-absolute "^1.0.0"
- readdirp "^2.0.0"
- optionalDependencies:
- fsevents "^1.0.0"
-
chokidar@^2.0.0, chokidar@^2.0.2:
version "2.0.2"
resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.0.2.tgz#4dc65139eeb2714977735b6a35d06e97b494dfd7"
@@ -1919,6 +1890,10 @@ clone@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.2.tgz#260b7a99ebb1edfe247538175f783243cb19d149"
+closest-file-data@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/closest-file-data/-/closest-file-data-0.1.4.tgz#975f87c132f299d24a0375b9f63ca3fb88f72b3a"
+
co@^4.6.0:
version "4.6.0"
resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"
@@ -2162,22 +2137,6 @@ cosmiconfig@^2.1.0, cosmiconfig@^2.1.1:
parse-json "^2.2.0"
require-from-string "^1.1.0"
-cpx@^1.5.0:
- version "1.5.0"
- resolved "https://registry.yarnpkg.com/cpx/-/cpx-1.5.0.tgz#185be018511d87270dedccc293171e37655ab88f"
- dependencies:
- babel-runtime "^6.9.2"
- chokidar "^1.6.0"
- duplexer "^0.1.1"
- glob "^7.0.5"
- glob2base "^0.0.12"
- minimatch "^3.0.2"
- mkdirp "^0.5.1"
- resolve "^1.1.7"
- safe-buffer "^5.0.1"
- shell-quote "^1.6.1"
- subarg "^1.0.0"
-
create-ecdh@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.0.tgz#888c723596cdf7612f6498233eebd7a35301737d"
@@ -2354,6 +2313,10 @@ cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0":
dependencies:
cssom "0.3.x"
+csstype@^2.2.0:
+ version "2.5.6"
+ resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.5.6.tgz#2ae1db2319642d8b80a668d2d025c6196071e788"
+
currently-unhandled@^0.4.1:
version "0.4.1"
resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea"
@@ -2808,14 +2771,10 @@ elliptic@^6.0.0:
minimalistic-assert "^1.0.0"
minimalistic-crypto-utils "^1.0.0"
-"emoji-regex@>=6.0.0 <=6.1.1":
+"emoji-regex@>=6.0.0 <=6.1.1", emoji-regex@^6.1.0:
version "6.1.1"
resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-6.1.1.tgz#c6cd0ec1b0642e2a3c67a1137efc5e796da4f88e"
-emoji-regex@^6.1.0:
- version "6.5.1"
- resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-6.5.1.tgz#9baea929b155565c11ea41c6626eaa65cef992c2"
-
emojis-list@^2.0.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389"
@@ -2836,15 +2795,7 @@ end-of-stream@^1.0.0, end-of-stream@^1.1.0:
dependencies:
once "^1.4.0"
-enhanced-resolve@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.0.0.tgz#e34a6eaa790f62fccd71d93959f56b2b432db10a"
- dependencies:
- graceful-fs "^4.1.2"
- memory-fs "^0.4.0"
- tapable "^1.0.0"
-
-enhanced-resolve@^4.1.0:
+enhanced-resolve@^4.0.0, enhanced-resolve@^4.1.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz#41c7e0bfdfe74ac1ffe1e57ad6a5c6c9f3742a7f"
dependencies:
@@ -3205,27 +3156,16 @@ expand-tilde@^2.0.0, expand-tilde@^2.0.2:
dependencies:
homedir-polyfill "^1.0.1"
-expect@^22.4.3:
- version "22.4.3"
- resolved "https://registry.yarnpkg.com/expect/-/expect-22.4.3.tgz#d5a29d0a0e1fb2153557caef2674d4547e914674"
- dependencies:
- ansi-styles "^3.2.0"
- jest-diff "^22.4.3"
- jest-get-type "^22.4.3"
- jest-matcher-utils "^22.4.3"
- jest-message-util "^22.4.3"
- jest-regex-util "^22.4.3"
-
-expect@^23.1.0:
- version "23.1.0"
- resolved "https://registry.yarnpkg.com/expect/-/expect-23.1.0.tgz#bfdfd57a2a20170d875999ee9787cc71f01c205f"
+expect@^23.4.0:
+ version "23.4.0"
+ resolved "https://registry.yarnpkg.com/expect/-/expect-23.4.0.tgz#6da4ecc99c1471253e7288338983ad1ebadb60c3"
dependencies:
ansi-styles "^3.2.0"
- jest-diff "^23.0.1"
+ jest-diff "^23.2.0"
jest-get-type "^22.1.0"
- jest-matcher-utils "^23.0.1"
- jest-message-util "^23.1.0"
- jest-regex-util "^23.0.0"
+ jest-matcher-utils "^23.2.0"
+ jest-message-util "^23.4.0"
+ jest-regex-util "^23.3.0"
expose-loader@0.7.5:
version "0.7.5"
@@ -3442,10 +3382,6 @@ find-cache-dir@^1.0.0:
make-dir "^1.0.0"
pkg-dir "^2.0.0"
-find-index@^0.1.1:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/find-index/-/find-index-0.1.1.tgz#675d358b2ca3892d795a1ab47232f8b6e2e0dde4"
-
find-up@^1.0.0:
version "1.1.2"
resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f"
@@ -3548,9 +3484,9 @@ from2@^2.1.0:
inherits "^2.0.1"
readable-stream "^2.0.0"
-fs-extra@6.0.0:
- version "6.0.0"
- resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-6.0.0.tgz#0f0afb290bb3deb87978da816fcd3c7797f3a817"
+fs-extra@6.0.1:
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-6.0.1.tgz#8abc128f7946e310135ddc93b98bddb410e7a34b"
dependencies:
graceful-fs "^4.1.2"
jsonfile "^4.0.0"
@@ -3680,12 +3616,6 @@ glob-promise@3.4.0:
dependencies:
"@types/glob" "*"
-glob2base@^0.0.12:
- version "0.0.12"
- resolved "https://registry.yarnpkg.com/glob2base/-/glob2base-0.0.12.tgz#9d419b3e28f12e83a362164a277055922c9c0d56"
- dependencies:
- find-index "^0.1.1"
-
glob@7.1.2, glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2:
version "7.1.2"
resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15"
@@ -4118,14 +4048,10 @@ icss-utils@^2.1.0:
dependencies:
postcss "^6.0.1"
-ieee754@^1.1.11:
+ieee754@^1.1.11, ieee754@^1.1.4:
version "1.1.12"
resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.12.tgz#50bf24e5b9c8bb98af4964c941cdb0918da7b60b"
-ieee754@^1.1.4:
- version "1.1.8"
- resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.8.tgz#be33d40ac10ef1926701f6f08a2d86fbfd1ad3e4"
-
iferr@^0.1.5:
version "0.1.5"
resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501"
@@ -4676,15 +4602,15 @@ istanbul-reports@^1.3.0:
dependencies:
handlebars "^4.0.3"
-jest-changed-files@^23.0.1:
- version "23.0.1"
- resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-23.0.1.tgz#f79572d0720844ea5df84c2a448e862c2254f60c"
+jest-changed-files@^23.4.2:
+ version "23.4.2"
+ resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-23.4.2.tgz#1eed688370cd5eebafe4ae93d34bb3b64968fe83"
dependencies:
throat "^4.0.0"
-jest-cli@^23.1.0:
- version "23.1.0"
- resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-23.1.0.tgz#eb8bdd4ce0d15250892e31ad9b69bc99d2a8f6bf"
+jest-cli@^23.4.2:
+ version "23.4.2"
+ resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-23.4.2.tgz#49d56bcfe6cf01871bfcc4a0494e08edaf2b61d0"
dependencies:
ansi-escapes "^3.0.0"
chalk "^2.0.1"
@@ -4697,23 +4623,24 @@ jest-cli@^23.1.0:
istanbul-lib-coverage "^1.2.0"
istanbul-lib-instrument "^1.10.1"
istanbul-lib-source-maps "^1.2.4"
- jest-changed-files "^23.0.1"
- jest-config "^23.1.0"
- jest-environment-jsdom "^23.1.0"
+ jest-changed-files "^23.4.2"
+ jest-config "^23.4.2"
+ jest-environment-jsdom "^23.4.0"
jest-get-type "^22.1.0"
- jest-haste-map "^23.1.0"
- jest-message-util "^23.1.0"
- jest-regex-util "^23.0.0"
- jest-resolve-dependencies "^23.0.1"
- jest-runner "^23.1.0"
- jest-runtime "^23.1.0"
- jest-snapshot "^23.0.1"
- jest-util "^23.1.0"
- jest-validate "^23.0.1"
- jest-watcher "^23.1.0"
- jest-worker "^23.0.1"
+ jest-haste-map "^23.4.1"
+ jest-message-util "^23.4.0"
+ jest-regex-util "^23.3.0"
+ jest-resolve-dependencies "^23.4.2"
+ jest-runner "^23.4.2"
+ jest-runtime "^23.4.2"
+ jest-snapshot "^23.4.2"
+ jest-util "^23.4.0"
+ jest-validate "^23.4.0"
+ jest-watcher "^23.4.0"
+ jest-worker "^23.2.0"
micromatch "^2.3.11"
node-notifier "^5.2.1"
+ prompts "^0.1.9"
realpath-native "^1.0.0"
rimraf "^2.5.4"
slash "^1.0.0"
@@ -4722,178 +4649,115 @@ jest-cli@^23.1.0:
which "^1.2.12"
yargs "^11.0.0"
-jest-config@^22.4.3:
- version "22.4.3"
- resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-22.4.3.tgz#0e9d57db267839ea31309119b41dc2fa31b76403"
- dependencies:
- chalk "^2.0.1"
- glob "^7.1.1"
- jest-environment-jsdom "^22.4.3"
- jest-environment-node "^22.4.3"
- jest-get-type "^22.4.3"
- jest-jasmine2 "^22.4.3"
- jest-regex-util "^22.4.3"
- jest-resolve "^22.4.3"
- jest-util "^22.4.3"
- jest-validate "^22.4.3"
- pretty-format "^22.4.3"
-
-jest-config@^23.1.0:
- version "23.1.0"
- resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-23.1.0.tgz#708ca0f431d356ee424fb4895d3308006bdd8241"
+jest-config@^23.4.2:
+ version "23.4.2"
+ resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-23.4.2.tgz#62a105e14b8266458f2bf4d32403b2c44418fa77"
dependencies:
babel-core "^6.0.0"
- babel-jest "^23.0.1"
+ babel-jest "^23.4.2"
chalk "^2.0.1"
glob "^7.1.1"
- jest-environment-jsdom "^23.1.0"
- jest-environment-node "^23.1.0"
+ jest-environment-jsdom "^23.4.0"
+ jest-environment-node "^23.4.0"
jest-get-type "^22.1.0"
- jest-jasmine2 "^23.1.0"
- jest-regex-util "^23.0.0"
- jest-resolve "^23.1.0"
- jest-util "^23.1.0"
- jest-validate "^23.0.1"
- pretty-format "^23.0.1"
-
-jest-diff@^22.4.3:
- version "22.4.3"
- resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-22.4.3.tgz#e18cc3feff0aeef159d02310f2686d4065378030"
- dependencies:
- chalk "^2.0.1"
- diff "^3.2.0"
- jest-get-type "^22.4.3"
- pretty-format "^22.4.3"
+ jest-jasmine2 "^23.4.2"
+ jest-regex-util "^23.3.0"
+ jest-resolve "^23.4.1"
+ jest-util "^23.4.0"
+ jest-validate "^23.4.0"
+ pretty-format "^23.2.0"
-jest-diff@^23.0.1:
- version "23.0.1"
- resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-23.0.1.tgz#3d49137cee12c320a4b4d2b4a6fa6e82d491a16a"
+jest-diff@^23.2.0:
+ version "23.2.0"
+ resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-23.2.0.tgz#9f2cf4b51e12c791550200abc16b47130af1062a"
dependencies:
chalk "^2.0.1"
diff "^3.2.0"
jest-get-type "^22.1.0"
- pretty-format "^23.0.1"
+ pretty-format "^23.2.0"
-jest-docblock@^23.0.1:
- version "23.0.1"
- resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-23.0.1.tgz#deddd18333be5dc2415260a04ef3fce9276b5725"
+jest-docblock@^23.2.0:
+ version "23.2.0"
+ resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-23.2.0.tgz#f085e1f18548d99fdd69b20207e6fd55d91383a7"
dependencies:
detect-newline "^2.1.0"
-jest-each@^23.1.0:
- version "23.1.0"
- resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-23.1.0.tgz#16146b592c354867a5ae5e13cdf15c6c65b696c6"
+jest-each@^23.4.0:
+ version "23.4.0"
+ resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-23.4.0.tgz#2fa9edd89daa1a4edc9ff9bf6062a36b71345143"
dependencies:
chalk "^2.0.1"
- pretty-format "^23.0.1"
-
-jest-environment-jsdom@^22.4.3:
- version "22.4.3"
- resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-22.4.3.tgz#d67daa4155e33516aecdd35afd82d4abf0fa8a1e"
- dependencies:
- jest-mock "^22.4.3"
- jest-util "^22.4.3"
- jsdom "^11.5.1"
+ pretty-format "^23.2.0"
-jest-environment-jsdom@^23.1.0:
- version "23.1.0"
- resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-23.1.0.tgz#85929914e23bed3577dac9755f4106d0697c479c"
+jest-environment-jsdom@^23.4.0:
+ version "23.4.0"
+ resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-23.4.0.tgz#056a7952b3fea513ac62a140a2c368c79d9e6023"
dependencies:
- jest-mock "^23.1.0"
- jest-util "^23.1.0"
+ jest-mock "^23.2.0"
+ jest-util "^23.4.0"
jsdom "^11.5.1"
-jest-environment-node@^22.4.3:
- version "22.4.3"
- resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-22.4.3.tgz#54c4eaa374c83dd52a9da8759be14ebe1d0b9129"
- dependencies:
- jest-mock "^22.4.3"
- jest-util "^22.4.3"
-
-jest-environment-node@^23.1.0:
- version "23.1.0"
- resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-23.1.0.tgz#452c0bf949cfcbbacda1e1762eeed70bc784c7d5"
+jest-environment-node@^23.4.0:
+ version "23.4.0"
+ resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-23.4.0.tgz#57e80ed0841dea303167cce8cd79521debafde10"
dependencies:
- jest-mock "^23.1.0"
- jest-util "^23.1.0"
+ jest-mock "^23.2.0"
+ jest-util "^23.4.0"
jest-get-type@^21.2.0:
version "21.2.0"
resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-21.2.0.tgz#f6376ab9db4b60d81e39f30749c6c466f40d4a23"
-jest-get-type@^22.1.0, jest-get-type@^22.4.3:
+jest-get-type@^22.1.0:
version "22.4.3"
resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-22.4.3.tgz#e3a8504d8479342dd4420236b322869f18900ce4"
-jest-haste-map@^23.1.0:
- version "23.1.0"
- resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-23.1.0.tgz#18e6c7d5a8d27136f91b7d9852f85de0c7074c49"
+jest-haste-map@^23.4.1:
+ version "23.4.1"
+ resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-23.4.1.tgz#43a174ba7ac079ae1dd74eaf5a5fe78989474dd2"
dependencies:
fb-watchman "^2.0.0"
graceful-fs "^4.1.11"
- jest-docblock "^23.0.1"
+ jest-docblock "^23.2.0"
jest-serializer "^23.0.1"
- jest-worker "^23.0.1"
+ jest-worker "^23.2.0"
micromatch "^2.3.11"
sane "^2.0.0"
-jest-jasmine2@^22.4.3:
- version "22.4.3"
- resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-22.4.3.tgz#4daf64cd14c793da9db34a7c7b8dcfe52a745965"
+jest-jasmine2@^23.4.2:
+ version "23.4.2"
+ resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-23.4.2.tgz#2fbf52f93e43ed4c5e7326a90bb1d785be4321ac"
dependencies:
+ babel-traverse "^6.0.0"
chalk "^2.0.1"
co "^4.6.0"
- expect "^22.4.3"
- graceful-fs "^4.1.11"
+ expect "^23.4.0"
is-generator-fn "^1.0.0"
- jest-diff "^22.4.3"
- jest-matcher-utils "^22.4.3"
- jest-message-util "^22.4.3"
- jest-snapshot "^22.4.3"
- jest-util "^22.4.3"
- source-map-support "^0.5.0"
+ jest-diff "^23.2.0"
+ jest-each "^23.4.0"
+ jest-matcher-utils "^23.2.0"
+ jest-message-util "^23.4.0"
+ jest-snapshot "^23.4.2"
+ jest-util "^23.4.0"
+ pretty-format "^23.2.0"
-jest-jasmine2@^23.1.0:
- version "23.1.0"
- resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-23.1.0.tgz#4afab31729b654ddcd2b074add849396f13b30b8"
+jest-leak-detector@^23.2.0:
+ version "23.2.0"
+ resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-23.2.0.tgz#c289d961dc638f14357d4ef96e0431ecc1aa377d"
dependencies:
- chalk "^2.0.1"
- co "^4.6.0"
- expect "^23.1.0"
- is-generator-fn "^1.0.0"
- jest-diff "^23.0.1"
- jest-each "^23.1.0"
- jest-matcher-utils "^23.0.1"
- jest-message-util "^23.1.0"
- jest-snapshot "^23.0.1"
- jest-util "^23.1.0"
- pretty-format "^23.0.1"
-
-jest-leak-detector@^23.0.1:
- version "23.0.1"
- resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-23.0.1.tgz#9dba07505ac3495c39d3ec09ac1e564599e861a0"
- dependencies:
- pretty-format "^23.0.1"
+ pretty-format "^23.2.0"
-jest-matcher-utils@^22.4.3:
- version "22.4.3"
- resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-22.4.3.tgz#4632fe428ebc73ebc194d3c7b65d37b161f710ff"
- dependencies:
- chalk "^2.0.1"
- jest-get-type "^22.4.3"
- pretty-format "^22.4.3"
-
-jest-matcher-utils@^23.0.1:
- version "23.0.1"
- resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-23.0.1.tgz#0c6c0daedf9833c2a7f36236069efecb4c3f6e5f"
+jest-matcher-utils@^23.2.0:
+ version "23.2.0"
+ resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-23.2.0.tgz#4d4981f23213e939e3cedf23dc34c747b5ae1913"
dependencies:
chalk "^2.0.1"
jest-get-type "^22.1.0"
- pretty-format "^23.0.1"
+ pretty-format "^23.2.0"
-jest-message-util@^22.4.3:
- version "22.4.3"
- resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-22.4.3.tgz#cf3d38aafe4befddbfc455e57d65d5239e399eb7"
+jest-message-util@^23.4.0:
+ version "23.4.0"
+ resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-23.4.0.tgz#17610c50942349508d01a3d1e0bda2c079086a9f"
dependencies:
"@babel/code-frame" "^7.0.0-beta.35"
chalk "^2.0.1"
@@ -4901,75 +4765,50 @@ jest-message-util@^22.4.3:
slash "^1.0.0"
stack-utils "^1.0.1"
-jest-message-util@^23.1.0:
- version "23.1.0"
- resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-23.1.0.tgz#9a809ba487ecac5ce511d4e698ee3b5ee2461ea9"
- dependencies:
- "@babel/code-frame" "^7.0.0-beta.35"
- chalk "^2.0.1"
- micromatch "^2.3.11"
- slash "^1.0.0"
- stack-utils "^1.0.1"
-
-jest-mock@^22.4.3:
- version "22.4.3"
- resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-22.4.3.tgz#f63ba2f07a1511772cdc7979733397df770aabc7"
+jest-mock@^23.2.0:
+ version "23.2.0"
+ resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-23.2.0.tgz#ad1c60f29e8719d47c26e1138098b6d18b261134"
-jest-mock@^23.1.0:
- version "23.1.0"
- resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-23.1.0.tgz#a381c31b121ab1f60c462a2dadb7b86dcccac487"
+jest-regex-util@^23.3.0:
+ version "23.3.0"
+ resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-23.3.0.tgz#5f86729547c2785c4002ceaa8f849fe8ca471bc5"
-jest-regex-util@^22.4.3:
- version "22.4.3"
- resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-22.4.3.tgz#a826eb191cdf22502198c5401a1fc04de9cef5af"
-
-jest-regex-util@^23.0.0:
- version "23.0.0"
- resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-23.0.0.tgz#dd5c1fde0c46f4371314cf10f7a751a23f4e8f76"
-
-jest-resolve-dependencies@^23.0.1:
- version "23.0.1"
- resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-23.0.1.tgz#d01a10ddad9152c4cecdf5eac2b88571c4b6a64d"
+jest-resolve-dependencies@^23.4.2:
+ version "23.4.2"
+ resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-23.4.2.tgz#0675ba876a5b819deffc449ad72e9985c2592048"
dependencies:
- jest-regex-util "^23.0.0"
- jest-snapshot "^23.0.1"
+ jest-regex-util "^23.3.0"
+ jest-snapshot "^23.4.2"
-jest-resolve@^22.4.3:
- version "22.4.3"
- resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-22.4.3.tgz#0ce9d438c8438229aa9b916968ec6b05c1abb4ea"
+jest-resolve@^23.4.1:
+ version "23.4.1"
+ resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-23.4.1.tgz#7f3c17104732a2c0c940a01256025ed745814982"
dependencies:
- browser-resolve "^1.11.2"
- chalk "^2.0.1"
-
-jest-resolve@^23.1.0:
- version "23.1.0"
- resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-23.1.0.tgz#b9e316eecebd6f00bc50a3960d1527bae65792d2"
- dependencies:
- browser-resolve "^1.11.2"
+ browser-resolve "^1.11.3"
chalk "^2.0.1"
realpath-native "^1.0.0"
-jest-runner@^23.1.0:
- version "23.1.0"
- resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-23.1.0.tgz#fa20a933fff731a5432b3561e7f6426594fa29b5"
+jest-runner@^23.4.2:
+ version "23.4.2"
+ resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-23.4.2.tgz#579a88524ac52c846075b0129a21c7b483e75a7e"
dependencies:
exit "^0.1.2"
graceful-fs "^4.1.11"
- jest-config "^23.1.0"
- jest-docblock "^23.0.1"
- jest-haste-map "^23.1.0"
- jest-jasmine2 "^23.1.0"
- jest-leak-detector "^23.0.1"
- jest-message-util "^23.1.0"
- jest-runtime "^23.1.0"
- jest-util "^23.1.0"
- jest-worker "^23.0.1"
+ jest-config "^23.4.2"
+ jest-docblock "^23.2.0"
+ jest-haste-map "^23.4.1"
+ jest-jasmine2 "^23.4.2"
+ jest-leak-detector "^23.2.0"
+ jest-message-util "^23.4.0"
+ jest-runtime "^23.4.2"
+ jest-util "^23.4.0"
+ jest-worker "^23.2.0"
source-map-support "^0.5.6"
throat "^4.0.0"
-jest-runtime@^23.1.0:
- version "23.1.0"
- resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-23.1.0.tgz#b4ae0e87259ecacfd4a884b639db07cf4dd620af"
+jest-runtime@^23.4.2:
+ version "23.4.2"
+ resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-23.4.2.tgz#00c3bb8385253d401a394a27d1112d3615e5a65c"
dependencies:
babel-core "^6.0.0"
babel-plugin-istanbul "^4.1.6"
@@ -4978,14 +4817,14 @@ jest-runtime@^23.1.0:
exit "^0.1.2"
fast-json-stable-stringify "^2.0.0"
graceful-fs "^4.1.11"
- jest-config "^23.1.0"
- jest-haste-map "^23.1.0"
- jest-message-util "^23.1.0"
- jest-regex-util "^23.0.0"
- jest-resolve "^23.1.0"
- jest-snapshot "^23.0.1"
- jest-util "^23.1.0"
- jest-validate "^23.0.1"
+ jest-config "^23.4.2"
+ jest-haste-map "^23.4.1"
+ jest-message-util "^23.4.0"
+ jest-regex-util "^23.3.0"
+ jest-resolve "^23.4.1"
+ jest-snapshot "^23.4.2"
+ jest-util "^23.4.0"
+ jest-validate "^23.4.0"
micromatch "^2.3.11"
realpath-native "^1.0.0"
slash "^1.0.0"
@@ -4997,49 +4836,30 @@ jest-serializer@^23.0.1:
version "23.0.1"
resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-23.0.1.tgz#a3776aeb311e90fe83fab9e533e85102bd164165"
-jest-snapshot@^22.4.3:
- version "22.4.3"
- resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-22.4.3.tgz#b5c9b42846ffb9faccb76b841315ba67887362d2"
- dependencies:
- chalk "^2.0.1"
- jest-diff "^22.4.3"
- jest-matcher-utils "^22.4.3"
- mkdirp "^0.5.1"
- natural-compare "^1.4.0"
- pretty-format "^22.4.3"
-
-jest-snapshot@^23.0.1:
- version "23.0.1"
- resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-23.0.1.tgz#6674fa19b9eb69a99cabecd415bddc42d6af3e7e"
+jest-snapshot@^23.4.2:
+ version "23.4.2"
+ resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-23.4.2.tgz#8fa6130feb5a527dac73e5fa80d86f29f7c42ab6"
dependencies:
+ babel-types "^6.0.0"
chalk "^2.0.1"
- jest-diff "^23.0.1"
- jest-matcher-utils "^23.0.1"
+ jest-diff "^23.2.0"
+ jest-matcher-utils "^23.2.0"
+ jest-message-util "^23.4.0"
+ jest-resolve "^23.4.1"
mkdirp "^0.5.1"
natural-compare "^1.4.0"
- pretty-format "^23.0.1"
+ pretty-format "^23.2.0"
+ semver "^5.5.0"
-jest-util@^22.4.3:
- version "22.4.3"
- resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-22.4.3.tgz#c70fec8eec487c37b10b0809dc064a7ecf6aafac"
- dependencies:
- callsites "^2.0.0"
- chalk "^2.0.1"
- graceful-fs "^4.1.11"
- is-ci "^1.0.10"
- jest-message-util "^22.4.3"
- mkdirp "^0.5.1"
- source-map "^0.6.0"
-
-jest-util@^23.1.0:
- version "23.1.0"
- resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-23.1.0.tgz#c0251baf34644c6dd2fea78a962f4263ac55772d"
+jest-util@^23.4.0:
+ version "23.4.0"
+ resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-23.4.0.tgz#4d063cb927baf0a23831ff61bec2cbbf49793561"
dependencies:
callsites "^2.0.0"
chalk "^2.0.1"
graceful-fs "^4.1.11"
is-ci "^1.0.10"
- jest-message-util "^23.1.0"
+ jest-message-util "^23.4.0"
mkdirp "^0.5.1"
slash "^1.0.0"
source-map "^0.6.0"
@@ -5053,45 +4873,35 @@ jest-validate@^21.1.0:
leven "^2.1.0"
pretty-format "^21.2.1"
-jest-validate@^22.4.3:
- version "22.4.3"
- resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-22.4.3.tgz#0780954a5a7daaeec8d3c10834b9280865976b30"
- dependencies:
- chalk "^2.0.1"
- jest-config "^22.4.3"
- jest-get-type "^22.4.3"
- leven "^2.1.0"
- pretty-format "^22.4.3"
-
-jest-validate@^23.0.1:
- version "23.0.1"
- resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-23.0.1.tgz#cd9f01a89d26bb885f12a8667715e9c865a5754f"
+jest-validate@^23.4.0:
+ version "23.4.0"
+ resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-23.4.0.tgz#d96eede01ef03ac909c009e9c8e455197d48c201"
dependencies:
chalk "^2.0.1"
jest-get-type "^22.1.0"
leven "^2.1.0"
- pretty-format "^23.0.1"
+ pretty-format "^23.2.0"
-jest-watcher@^23.1.0:
- version "23.1.0"
- resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-23.1.0.tgz#a8d5842e38d9fb4afff823df6abb42a58ae6cdbd"
+jest-watcher@^23.4.0:
+ version "23.4.0"
+ resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-23.4.0.tgz#d2e28ce74f8dad6c6afc922b92cabef6ed05c91c"
dependencies:
ansi-escapes "^3.0.0"
chalk "^2.0.1"
string-length "^2.0.0"
-jest-worker@^23.0.1:
- version "23.0.1"
- resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-23.0.1.tgz#9e649dd963ff4046026f91c4017f039a6aa4a7bc"
+jest-worker@^23.2.0:
+ version "23.2.0"
+ resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-23.2.0.tgz#faf706a8da36fae60eb26957257fa7b5d8ea02b9"
dependencies:
merge-stream "^1.0.1"
-jest@23.1.0:
- version "23.1.0"
- resolved "https://registry.yarnpkg.com/jest/-/jest-23.1.0.tgz#bbb7f893100a11a742dd8bd0d047a54b0968ad1a"
+jest@23.4.2:
+ version "23.4.2"
+ resolved "https://registry.yarnpkg.com/jest/-/jest-23.4.2.tgz#1fae3ed832192143070ae85156b25cea891a1260"
dependencies:
import-local "^1.0.0"
- jest-cli "^23.1.0"
+ jest-cli "^23.4.2"
js-base64@^2.1.9:
version "2.3.2"
@@ -5251,6 +5061,10 @@ kind-of@^6.0.0, kind-of@^6.0.2:
version "6.0.2"
resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051"
+kleur@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/kleur/-/kleur-2.0.1.tgz#7cc64b0d188d0dcbc98bdcdfdda2cc10619ddce8"
+
lazy-cache@^1.0.3:
version "1.0.4"
resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e"
@@ -5761,7 +5575,7 @@ minimist@0.0.8:
version "0.0.8"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
-minimist@^1.1.0, minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0:
+minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
@@ -6751,9 +6565,9 @@ preserve@^0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b"
-prettier@1.11.1:
- version "1.11.1"
- resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.11.1.tgz#61e43fc4cd44e68f2b0dfc2c38cd4bb0fccdcc75"
+prettier@1.14.0:
+ version "1.14.0"
+ resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.14.0.tgz#847c235522035fd988100f1f43cf20a7d24f9372"
pretty-error@^2.0.2:
version "2.1.1"
@@ -6769,16 +6583,9 @@ pretty-format@^21.2.1:
ansi-regex "^3.0.0"
ansi-styles "^3.2.0"
-pretty-format@^22.4.3:
- version "22.4.3"
- resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-22.4.3.tgz#f873d780839a9c02e9664c8a082e9ee79eaac16f"
- dependencies:
- ansi-regex "^3.0.0"
- ansi-styles "^3.2.0"
-
-pretty-format@^23.0.1:
- version "23.0.1"
- resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-23.0.1.tgz#d61d065268e4c759083bccbca27a01ad7c7601f4"
+pretty-format@^23.2.0:
+ version "23.2.0"
+ resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-23.2.0.tgz#3b0aaa63c018a53583373c1cb3a5d96cc5e83017"
dependencies:
ansi-regex "^3.0.0"
ansi-styles "^3.2.0"
@@ -6809,6 +6616,13 @@ promise@^7.1.1:
dependencies:
asap "~2.0.3"
+prompts@^0.1.9:
+ version "0.1.14"
+ resolved "https://registry.yarnpkg.com/prompts/-/prompts-0.1.14.tgz#a8e15c612c5c9ec8f8111847df3337c9cbd443b2"
+ dependencies:
+ kleur "^2.0.1"
+ sisteransi "^0.1.1"
+
prop-types@15.6.1, prop-types@^15.5.10, prop-types@^15.5.4, prop-types@^15.5.6, prop-types@^15.5.8, prop-types@^15.6.0, prop-types@^15.6.1:
version "15.6.1"
resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.6.1.tgz#36644453564255ddda391191fb3a125cbdf654ca"
@@ -7017,9 +6831,9 @@ react-dev-utils@^3.0.0:
strip-ansi "3.0.1"
text-table "0.2.0"
-react-dom@16.2.0:
- version "16.2.0"
- resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.2.0.tgz#69003178601c0ca19b709b33a83369fe6124c044"
+react-dom@16.4.2:
+ version "16.4.2"
+ resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.4.2.tgz#4afed569689f2c561d2b8da0b819669c38a0bda4"
dependencies:
fbjs "^0.8.16"
loose-envify "^1.1.0"
@@ -7079,6 +6893,10 @@ react-intl@2.4.0:
intl-relativeformat "^2.0.0"
invariant "^2.1.1"
+react-is@^16.4.2:
+ version "16.4.2"
+ resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.4.2.tgz#84891b56c2b6d9efdee577cc83501dfc5ecead88"
+
react-lifecycles-compat@^3.0.0:
version "3.0.3"
resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.3.tgz#473820154732f1ccd762e89324abab154255da6b"
@@ -7139,13 +6957,14 @@ react-side-effect@^1.1.0:
exenv "^1.2.1"
shallowequal "^1.0.1"
-react-test-renderer@16.2.0, react-test-renderer@^16.0.0-0:
- version "16.2.0"
- resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-16.2.0.tgz#bddf259a6b8fcd8555f012afc8eacc238872a211"
+react-test-renderer@16.4.2, react-test-renderer@^16.0.0-0:
+ version "16.4.2"
+ resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-16.4.2.tgz#4e03eca9359bb3210d4373f7547d1364218ef74e"
dependencies:
fbjs "^0.8.16"
object-assign "^4.1.1"
prop-types "^15.6.0"
+ react-is "^16.4.2"
react-virtualized@9.18.5:
version "9.18.5"
@@ -7157,18 +6976,9 @@ react-virtualized@9.18.5:
loose-envify "^1.3.0"
prop-types "^15.6.0"
-react@16.2.0:
- version "16.2.0"
- resolved "https://registry.yarnpkg.com/react/-/react-16.2.0.tgz#a31bd2dab89bff65d42134fa187f24d054c273ba"
- dependencies:
- fbjs "^0.8.16"
- loose-envify "^1.1.0"
- object-assign "^4.1.1"
- prop-types "^15.6.0"
-
-"react@^15.6.2 || ^16.0":
- version "16.4.1"
- resolved "https://registry.yarnpkg.com/react/-/react-16.4.1.tgz#de51ba5764b5dbcd1f9079037b862bd26b82fe32"
+react@16.4.2, "react@^15.6.2 || ^16.0":
+ version "16.4.2"
+ resolved "https://registry.yarnpkg.com/react/-/react-16.4.2.tgz#2cd90154e3a9d9dd8da2991149fdca3c260e129f"
dependencies:
fbjs "^0.8.16"
loose-envify "^1.1.0"
@@ -7285,7 +7095,7 @@ redux-thunk@2.2.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-2.2.0.tgz#e615a16e16b47a19a515766133d1e3e99b7852e5"
-redux@3.7.2, redux@^3.6.0:
+redux@3.7.2:
version "3.7.2"
resolved "https://registry.yarnpkg.com/redux/-/redux-3.7.2.tgz#06b73123215901d25d065be342eb026bc1c8537b"
dependencies:
@@ -7294,6 +7104,13 @@ redux@3.7.2, redux@^3.6.0:
loose-envify "^1.1.0"
symbol-observable "^1.0.3"
+redux@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/redux/-/redux-4.0.0.tgz#aa698a92b729315d22b34a0553d7e6533555cc03"
+ dependencies:
+ loose-envify "^1.1.0"
+ symbol-observable "^1.2.0"
+
regenerate@^1.2.1:
version "1.3.3"
resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.3.tgz#0c336d3980553d755c39b586ae3b20aa49c82b7f"
@@ -7594,7 +7411,7 @@ resolve@1.1.7:
version "1.1.7"
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b"
-resolve@^1.1.7, resolve@^1.2.0, resolve@^1.6.0:
+resolve@^1.2.0, resolve@^1.6.0:
version "1.7.1"
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.7.1.tgz#aadd656374fd298aee895bc026b8297418677fd3"
dependencies:
@@ -7721,7 +7538,7 @@ selfsigned@^1.9.1:
dependencies:
node-forge "0.6.33"
-"semver@2 || 3 || 4 || 5", semver@5.5.0, semver@^5.0.1, semver@^5.3.0, semver@^5.4.1:
+"semver@2 || 3 || 4 || 5", semver@5.5.0, semver@^5.0.1, semver@^5.3.0, semver@^5.4.1, semver@^5.5.0:
version "5.5.0"
resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab"
@@ -7837,7 +7654,7 @@ shebang-regex@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3"
-shell-quote@1.6.1, shell-quote@^1.6.1:
+shell-quote@1.6.1:
version "1.6.1"
resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.6.1.tgz#f4781949cce402697127430ea3b3c5476f481767"
dependencies:
@@ -7854,6 +7671,10 @@ signal-exit@^3.0.0, signal-exit@^3.0.2:
version "3.0.2"
resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
+sisteransi@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-0.1.1.tgz#5431447d5f7d1675aac667ccd0b865a4994cb3ce"
+
slash@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55"
@@ -7951,13 +7772,7 @@ source-map-support@^0.4.15:
dependencies:
source-map "^0.5.6"
-source-map-support@^0.5.0:
- version "0.5.0"
- resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.0.tgz#2018a7ad2bdf8faf2691e5fddab26bed5a2bacab"
- dependencies:
- source-map "^0.6.0"
-
-source-map-support@^0.5.5, source-map-support@^0.5.6:
+source-map-support@^0.5.6:
version "0.5.6"
resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.6.tgz#4435cee46b1aab62b8e8610ce60f788091c51c13"
dependencies:
@@ -8218,12 +8033,6 @@ style-loader@0.21.0:
loader-utils "^1.1.0"
schema-utils "^0.4.5"
-subarg@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/subarg/-/subarg-1.0.0.tgz#f62cf17581e996b48fc965699f54c06ae268b8d2"
- dependencies:
- minimist "^1.1.0"
-
supports-color@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
@@ -8252,7 +8061,7 @@ svgo@^0.7.0:
sax "~1.2.1"
whet.extend "~0.9.9"
-symbol-observable@^1.0.1, symbol-observable@^1.0.3:
+symbol-observable@^1.0.1, symbol-observable@^1.0.3, symbol-observable@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804"
@@ -8431,21 +8240,13 @@ tryit@^1.0.1:
version "1.0.3"
resolved "https://registry.yarnpkg.com/tryit/-/tryit-1.0.3.tgz#393be730a9446fd1ead6da59a014308f36c289cb"
-ts-jest@22.4.6:
- version "22.4.6"
- resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-22.4.6.tgz#a5d7f5e8b809626d1f4143209d301287472ec344"
+ts-jest@23.1.3:
+ version "23.1.3"
+ resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-23.1.3.tgz#33e3187d3ef0d42adada6347acf2c3539ac56107"
dependencies:
- babel-core "^6.26.3"
- babel-plugin-istanbul "^4.1.6"
- babel-plugin-transform-es2015-modules-commonjs "^6.26.2"
- babel-preset-jest "^22.4.3"
- cpx "^1.5.0"
- fs-extra "6.0.0"
- jest-config "^22.4.3"
+ closest-file-data "^0.1.4"
+ fs-extra "6.0.1"
lodash "^4.17.10"
- pkg-dir "^2.0.0"
- source-map-support "^0.5.5"
- yargs "^11.0.0"
ts-loader@4.3.0:
version "4.3.0"
@@ -8492,16 +8293,16 @@ typedarray@^0.0.6:
version "0.0.6"
resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
-typescript-eslint-parser@15.0.0:
- version "15.0.0"
- resolved "https://registry.yarnpkg.com/typescript-eslint-parser/-/typescript-eslint-parser-15.0.0.tgz#882fd3d7aabffbab0a7f98d2a59fb9a989c2b37f"
+typescript-eslint-parser@18.0.0:
+ version "18.0.0"
+ resolved "https://registry.yarnpkg.com/typescript-eslint-parser/-/typescript-eslint-parser-18.0.0.tgz#3e5055a44980d69e4154350fc5d8b1ab4e2332a8"
dependencies:
lodash.unescape "4.0.1"
semver "5.5.0"
-typescript@2.8.3:
- version "2.8.3"
- resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.8.3.tgz#5d817f9b6f31bb871835f4edf0089f21abe6c170"
+typescript@3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.0.1.tgz#43738f29585d3a87575520a4b93ab6026ef11fdb"
ua-parser-js@^0.7.9:
version "0.7.17"