]> source.dussan.org Git - sonarqube.git/commitdiff
update web dependencies (#2752)
authorStas Vilchik <stas.vilchik@sonarsource.com>
Wed, 25 Oct 2017 14:53:22 +0000 (16:53 +0200)
committerStas Vilchik <stas.vilchik@sonarsource.com>
Mon, 30 Oct 2017 08:20:37 +0000 (09:20 +0100)
232 files changed:
server/sonar-web/.flowconfig
server/sonar-web/package.json
server/sonar-web/scripts/analyze.js
server/sonar-web/scripts/start.js
server/sonar-web/src/main/js/app/components/ComponentContainer.tsx
server/sonar-web/src/main/js/app/components/GlobalFooterContainer.js [deleted file]
server/sonar-web/src/main/js/app/components/GlobalFooterContainer.tsx [new file with mode: 0644]
server/sonar-web/src/main/js/app/components/extensions/Extension.js
server/sonar-web/src/main/js/app/components/extensions/ExtensionContainer.tsx [new file with mode: 0644]
server/sonar-web/src/main/js/app/components/extensions/GlobalAdminPageExtension.js
server/sonar-web/src/main/js/app/components/extensions/GlobalPageExtension.js
server/sonar-web/src/main/js/app/components/extensions/OrganizationPageExtension.js
server/sonar-web/src/main/js/app/components/extensions/ProjectAdminPageExtension.js
server/sonar-web/src/main/js/app/components/extensions/ProjectPageExtension.tsx
server/sonar-web/src/main/js/app/components/help/GlobalHelp.js
server/sonar-web/src/main/js/app/components/help/__tests__/__snapshots__/GlobalHelp-test.js.snap
server/sonar-web/src/main/js/app/components/nav/component/ComponentNavBreadcrumbs.js
server/sonar-web/src/main/js/app/components/nav/component/ComponentNavMenu.tsx
server/sonar-web/src/main/js/app/components/nav/component/__tests__/__snapshots__/ComponentNavBranchesMenu-test.tsx.snap
server/sonar-web/src/main/js/app/components/nav/component/__tests__/__snapshots__/ComponentNavBranchesMenuItem-test.tsx.snap
server/sonar-web/src/main/js/app/components/nav/component/__tests__/__snapshots__/ComponentNavBreadcrumbs-test.js.snap
server/sonar-web/src/main/js/app/components/nav/component/__tests__/__snapshots__/ComponentNavMenu-test.tsx.snap
server/sonar-web/src/main/js/app/components/nav/component/__tests__/__snapshots__/ComponentNavMeta-test.tsx.snap
server/sonar-web/src/main/js/app/components/nav/global/__tests__/__snapshots__/GlobalNavMenu-test.js.snap
server/sonar-web/src/main/js/app/components/nav/global/__tests__/__snapshots__/GlobalNavUser-test.js.snap
server/sonar-web/src/main/js/app/components/nav/settings/SettingsEditionsNotif.tsx
server/sonar-web/src/main/js/app/components/nav/settings/__tests__/__snapshots__/SettingsNav-test.tsx.snap
server/sonar-web/src/main/js/app/components/search/Search.js
server/sonar-web/src/main/js/app/components/search/__tests__/__snapshots__/SearchResult-test.js.snap
server/sonar-web/src/main/js/app/components/search/__tests__/__snapshots__/SearchResults-test.js.snap
server/sonar-web/src/main/js/app/styles/components/search-navigator.css
server/sonar-web/src/main/js/apps/about/components/AboutApp.js
server/sonar-web/src/main/js/apps/account/notifications/__tests__/__snapshots__/GlobalNotifications-test.js.snap
server/sonar-web/src/main/js/apps/account/notifications/__tests__/__snapshots__/Notifications-test.js.snap
server/sonar-web/src/main/js/apps/account/notifications/__tests__/__snapshots__/NotificationsList-test.js.snap
server/sonar-web/src/main/js/apps/account/notifications/__tests__/__snapshots__/ProjectNotifications-test.js.snap
server/sonar-web/src/main/js/apps/account/notifications/__tests__/__snapshots__/Projects-test.js.snap
server/sonar-web/src/main/js/apps/account/profile/Profile.js
server/sonar-web/src/main/js/apps/background-tasks/components/ScannerContext.tsx
server/sonar-web/src/main/js/apps/background-tasks/components/Stacktrace.tsx
server/sonar-web/src/main/js/apps/background-tasks/components/TaskActions.tsx
server/sonar-web/src/main/js/apps/background-tasks/components/TaskComponent.tsx
server/sonar-web/src/main/js/apps/background-tasks/components/Workers.tsx
server/sonar-web/src/main/js/apps/background-tasks/components/WorkersForm.tsx
server/sonar-web/src/main/js/apps/background-tasks/components/__tests__/TaskActions-test.tsx
server/sonar-web/src/main/js/apps/background-tasks/components/__tests__/__snapshots__/ScannerContext-test.tsx.snap
server/sonar-web/src/main/js/apps/background-tasks/components/__tests__/__snapshots__/Stacktrace-test.tsx.snap
server/sonar-web/src/main/js/apps/background-tasks/components/__tests__/__snapshots__/TaskActions-test.tsx.snap
server/sonar-web/src/main/js/apps/background-tasks/components/__tests__/__snapshots__/WorkersForm-test.tsx.snap
server/sonar-web/src/main/js/apps/code/components/App.tsx
server/sonar-web/src/main/js/apps/component-measures/components/App.js
server/sonar-web/src/main/js/apps/component-measures/components/MeasureContent.js
server/sonar-web/src/main/js/apps/component-measures/components/MeasureHeader.js
server/sonar-web/src/main/js/apps/component-measures/components/MeasureOverview.js
server/sonar-web/src/main/js/apps/component-measures/components/__tests__/__snapshots__/App-test.js.snap
server/sonar-web/src/main/js/apps/component-measures/components/__tests__/__snapshots__/MeasureViewSelect-test.js.snap
server/sonar-web/src/main/js/apps/component-measures/drilldown/FilesView.js
server/sonar-web/src/main/js/apps/component-measures/drilldown/TreeMapView.js
server/sonar-web/src/main/js/apps/component-measures/sidebar/__tests__/__snapshots__/DomainFacet-test.js.snap
server/sonar-web/src/main/js/apps/component-measures/sidebar/__tests__/__snapshots__/Sidebar-test.js.snap
server/sonar-web/src/main/js/apps/issues/components/App.js
server/sonar-web/src/main/js/apps/issues/components/ComponentBreadcrumbs.tsx
server/sonar-web/src/main/js/apps/issues/conciseIssuesList/__tests__/__snapshots__/ConciseIssueLocations-test.js.snap
server/sonar-web/src/main/js/apps/issues/conciseIssuesList/__tests__/__snapshots__/ConciseIssuesList-test.js.snap
server/sonar-web/src/main/js/apps/issues/sidebar/__tests__/__snapshots__/AssigneeFacet-test.js.snap
server/sonar-web/src/main/js/apps/marketplace/__tests__/__snapshots__/EditionBoxes-test.tsx.snap
server/sonar-web/src/main/js/apps/marketplace/__tests__/__snapshots__/PendingActions-test.tsx.snap
server/sonar-web/src/main/js/apps/marketplace/components/LicenseEditionForm.tsx
server/sonar-web/src/main/js/apps/marketplace/components/PluginActions.tsx
server/sonar-web/src/main/js/apps/marketplace/components/UninstallEditionForm.tsx
server/sonar-web/src/main/js/apps/marketplace/components/__tests__/__snapshots__/LicenseEditionForm-test.tsx.snap
server/sonar-web/src/main/js/apps/marketplace/components/__tests__/__snapshots__/PluginLicense-test.tsx.snap
server/sonar-web/src/main/js/apps/marketplace/components/__tests__/__snapshots__/UninstallEditionForm-test.tsx.snap
server/sonar-web/src/main/js/apps/organizations/components/__tests__/__snapshots__/MembersList-test.js.snap
server/sonar-web/src/main/js/apps/organizations/components/__tests__/__snapshots__/OrganizationDelete-test.js.snap
server/sonar-web/src/main/js/apps/organizations/components/__tests__/__snapshots__/OrganizationEdit-test.js.snap
server/sonar-web/src/main/js/apps/organizations/components/__tests__/__snapshots__/OrganizationMembers-test.js.snap
server/sonar-web/src/main/js/apps/organizations/components/__tests__/__snapshots__/OrganizationPage-test.js.snap
server/sonar-web/src/main/js/apps/organizations/components/forms/__tests__/__snapshots__/AddMemberForm-test.js.snap
server/sonar-web/src/main/js/apps/organizations/components/forms/__tests__/__snapshots__/ManageMemberGroupsForm-test.js.snap
server/sonar-web/src/main/js/apps/organizations/components/forms/__tests__/__snapshots__/RemoveMemberForm-test.js.snap
server/sonar-web/src/main/js/apps/overview/components/__tests__/__snapshots__/ApplicationLeakPeriodLegend-test.js.snap
server/sonar-web/src/main/js/apps/overview/events/__tests__/__snapshots__/Analysis-test.js.snap
server/sonar-web/src/main/js/apps/overview/meta/__tests__/MetaTagsSelector-test.js
server/sonar-web/src/main/js/apps/overview/qualityGate/QualityGateCondition.js
server/sonar-web/src/main/js/apps/overview/qualityGate/__tests__/__snapshots__/ApplicationQualityGate-test.js.snap
server/sonar-web/src/main/js/apps/overview/qualityGate/__tests__/__snapshots__/ApplicationQualityGateProject-test.js.snap
server/sonar-web/src/main/js/apps/permissions/project/components/App.js
server/sonar-web/src/main/js/apps/permissions/shared/components/SearchForm.js
server/sonar-web/src/main/js/apps/portfolio/components/App.tsx
server/sonar-web/src/main/js/apps/portfolio/components/ReleasabilityBox.tsx
server/sonar-web/src/main/js/apps/portfolio/components/WorstProjects.tsx
server/sonar-web/src/main/js/apps/portfolio/components/__tests__/__snapshots__/Effort-test.tsx.snap
server/sonar-web/src/main/js/apps/portfolio/components/__tests__/__snapshots__/RatingFreshness-test.tsx.snap
server/sonar-web/src/main/js/apps/portfolio/components/__tests__/__snapshots__/WorstProjects-test.tsx.snap
server/sonar-web/src/main/js/apps/projectActivity/components/GraphHistory.js
server/sonar-web/src/main/js/apps/projectActivity/components/GraphsTooltips.js
server/sonar-web/src/main/js/apps/projectActivity/components/ProjectActivityAnalysis.js
server/sonar-web/src/main/js/apps/projectActivity/components/__tests__/__snapshots__/GraphHistory-test.js.snap
server/sonar-web/src/main/js/apps/projectActivity/components/__tests__/__snapshots__/GraphsHistory-test.js.snap
server/sonar-web/src/main/js/apps/projectActivity/components/__tests__/__snapshots__/GraphsLegendCustom-test.js.snap
server/sonar-web/src/main/js/apps/projectActivity/components/__tests__/__snapshots__/GraphsLegendStatic-test.js.snap
server/sonar-web/src/main/js/apps/projectActivity/components/__tests__/__snapshots__/GraphsTooltips-test.js.snap
server/sonar-web/src/main/js/apps/projectActivity/components/__tests__/__snapshots__/GraphsTooltipsContent-test.js.snap
server/sonar-web/src/main/js/apps/projectActivity/components/__tests__/__snapshots__/GraphsTooltipsContentEvents-test.js.snap
server/sonar-web/src/main/js/apps/projectActivity/components/__tests__/__snapshots__/GraphsTooltipsContentIssues-test.js.snap
server/sonar-web/src/main/js/apps/projectActivity/components/__tests__/__snapshots__/ProjectActivityAnalysesList-test.js.snap
server/sonar-web/src/main/js/apps/projectActivity/components/__tests__/__snapshots__/ProjectActivityApp-test.js.snap
server/sonar-web/src/main/js/apps/projectActivity/components/__tests__/__snapshots__/ProjectActivityPageHeader-test.js.snap
server/sonar-web/src/main/js/apps/projectActivity/components/forms/AddGraphMetric.js
server/sonar-web/src/main/js/apps/projectBranches/components/DeleteBranchModal.tsx
server/sonar-web/src/main/js/apps/projectBranches/components/LeakPeriodForm.tsx
server/sonar-web/src/main/js/apps/projectBranches/components/LongBranchesPatternForm.tsx
server/sonar-web/src/main/js/apps/projectBranches/components/RenameBranchModal.tsx
server/sonar-web/src/main/js/apps/projectBranches/components/SettingForm.tsx
server/sonar-web/src/main/js/apps/projectBranches/components/__tests__/__snapshots__/App-test.tsx.snap
server/sonar-web/src/main/js/apps/projectBranches/components/__tests__/__snapshots__/DeleteBranchModal-test.tsx.snap
server/sonar-web/src/main/js/apps/projectBranches/components/__tests__/__snapshots__/LongBranchesPatternForm-test.tsx.snap
server/sonar-web/src/main/js/apps/projectBranches/components/__tests__/__snapshots__/RenameBranchModal-test.tsx.snap
server/sonar-web/src/main/js/apps/projectQualityGate/Form.tsx
server/sonar-web/src/main/js/apps/projectQualityGate/__tests__/__snapshots__/Form-test.tsx.snap
server/sonar-web/src/main/js/apps/projectQualityProfiles/ProfileRow.tsx
server/sonar-web/src/main/js/apps/projectQualityProfiles/__tests__/__snapshots__/ProfileRow-test.tsx.snap
server/sonar-web/src/main/js/apps/projectQualityProfiles/__tests__/__snapshots__/Table-test.tsx.snap
server/sonar-web/src/main/js/apps/projects/components/PerspectiveSelect.tsx
server/sonar-web/src/main/js/apps/projects/components/ProjectCardLeak.tsx
server/sonar-web/src/main/js/apps/projects/components/ProjectsList.tsx
server/sonar-web/src/main/js/apps/projects/components/ProjectsSortingSelect.tsx
server/sonar-web/src/main/js/apps/projects/components/__tests__/PageSidebar-test.tsx
server/sonar-web/src/main/js/apps/projects/components/__tests__/__snapshots__/AllProjects-test.tsx.snap
server/sonar-web/src/main/js/apps/projects/components/__tests__/__snapshots__/PageSidebar-test.tsx.snap
server/sonar-web/src/main/js/apps/projects/components/__tests__/__snapshots__/PerspectiveSelect-test.tsx.snap
server/sonar-web/src/main/js/apps/projects/components/__tests__/__snapshots__/ProjectCardLanguages-test.tsx.snap
server/sonar-web/src/main/js/apps/projects/components/__tests__/__snapshots__/ProjectsList-test.tsx.snap
server/sonar-web/src/main/js/apps/projects/components/__tests__/__snapshots__/ProjectsSortingSelect-test.tsx.snap
server/sonar-web/src/main/js/apps/projects/filters/IssuesFilter.tsx
server/sonar-web/src/main/js/apps/projects/filters/SearchableFilterFooter.tsx
server/sonar-web/src/main/js/apps/projects/filters/__tests__/__snapshots__/Filter-test.tsx.snap
server/sonar-web/src/main/js/apps/projects/filters/__tests__/__snapshots__/LanguagesFilter-test.tsx.snap
server/sonar-web/src/main/js/apps/projects/filters/__tests__/__snapshots__/TagsFilter-test.tsx.snap
server/sonar-web/src/main/js/apps/projectsManagement/BulkApplyTemplateModal.tsx
server/sonar-web/src/main/js/apps/projectsManagement/ChangeVisibilityForm.tsx
server/sonar-web/src/main/js/apps/projectsManagement/CreateProjectForm.tsx
server/sonar-web/src/main/js/apps/projectsManagement/DeleteModal.tsx
server/sonar-web/src/main/js/apps/projectsManagement/Search.tsx
server/sonar-web/src/main/js/apps/projectsManagement/__tests__/__snapshots__/BulkApplyTemplateModal-test.tsx.snap
server/sonar-web/src/main/js/apps/projectsManagement/__tests__/__snapshots__/ChangeVisibilityForm-test.tsx.snap
server/sonar-web/src/main/js/apps/projectsManagement/__tests__/__snapshots__/CreateProjectForm-test.tsx.snap
server/sonar-web/src/main/js/apps/projectsManagement/__tests__/__snapshots__/DeleteModal-test.tsx.snap
server/sonar-web/src/main/js/apps/projectsManagement/__tests__/__snapshots__/Projects-test.tsx.snap
server/sonar-web/src/main/js/apps/projectsManagement/__tests__/__snapshots__/Search-test.tsx.snap
server/sonar-web/src/main/js/apps/quality-gates/components/DetailsHeader.js
server/sonar-web/src/main/js/apps/quality-profiles/changelog/ChangelogContainer.tsx
server/sonar-web/src/main/js/apps/quality-profiles/changelog/ParameterChange.tsx
server/sonar-web/src/main/js/apps/quality-profiles/compare/ComparisonContainer.tsx
server/sonar-web/src/main/js/apps/quality-profiles/compare/ComparisonForm.tsx
server/sonar-web/src/main/js/apps/quality-profiles/components/CopyProfileForm.tsx
server/sonar-web/src/main/js/apps/quality-profiles/components/DeleteProfileForm.tsx
server/sonar-web/src/main/js/apps/quality-profiles/components/ProfileActions.tsx
server/sonar-web/src/main/js/apps/quality-profiles/components/RenameProfileForm.tsx
server/sonar-web/src/main/js/apps/quality-profiles/details/ChangeParentForm.tsx
server/sonar-web/src/main/js/apps/quality-profiles/details/ChangeProjectsForm.tsx
server/sonar-web/src/main/js/apps/quality-profiles/details/ProfileDetails.tsx
server/sonar-web/src/main/js/apps/quality-profiles/details/ProfileInheritance.tsx
server/sonar-web/src/main/js/apps/quality-profiles/details/ProfilePermissionsForm.tsx
server/sonar-web/src/main/js/apps/quality-profiles/details/ProfilePermissionsFormSelect.tsx
server/sonar-web/src/main/js/apps/quality-profiles/details/ProfileProjects.tsx
server/sonar-web/src/main/js/apps/quality-profiles/details/ProfileRules.tsx
server/sonar-web/src/main/js/apps/quality-profiles/details/__tests__/__snapshots__/ProfilePermissions-test.tsx.snap
server/sonar-web/src/main/js/apps/quality-profiles/details/__tests__/__snapshots__/ProfilePermissionsForm-test.tsx.snap
server/sonar-web/src/main/js/apps/quality-profiles/details/__tests__/__snapshots__/ProfilePermissionsFormSelect-test.tsx.snap
server/sonar-web/src/main/js/apps/quality-profiles/details/__tests__/__snapshots__/ProfileRules-test.tsx.snap
server/sonar-web/src/main/js/apps/quality-profiles/home/CreateProfileForm.tsx
server/sonar-web/src/main/js/apps/quality-profiles/home/EvolutionRules.tsx
server/sonar-web/src/main/js/apps/quality-profiles/home/ProfilesList.tsx
server/sonar-web/src/main/js/apps/quality-profiles/home/RestoreProfileForm.tsx
server/sonar-web/src/main/js/apps/sessions/components/__tests__/LoginForm-test.tsx
server/sonar-web/src/main/js/apps/settings/components/Definition.js
server/sonar-web/src/main/js/apps/settings/encryption/EncryptionApp.js
server/sonar-web/src/main/js/apps/system/components/ChangeLogLevelForm.tsx
server/sonar-web/src/main/js/apps/system/components/__tests__/__snapshots__/ChangeLogLevelForm-test.tsx.snap
server/sonar-web/src/main/js/apps/system/components/__tests__/__snapshots__/ClusterSysInfos-test.tsx.snap
server/sonar-web/src/main/js/apps/system/components/__tests__/__snapshots__/StandaloneSysInfos-test.tsx.snap
server/sonar-web/src/main/js/apps/system/components/info-items/__tests__/__snapshots__/HealthCard-test.tsx.snap
server/sonar-web/src/main/js/apps/system/components/info-items/__tests__/__snapshots__/HealthItem-test.tsx.snap
server/sonar-web/src/main/js/apps/system/components/info-items/__tests__/__snapshots__/Section-test.tsx.snap
server/sonar-web/src/main/js/apps/system/components/info-items/__tests__/__snapshots__/SysInfoItem-test.tsx.snap
server/sonar-web/src/main/js/apps/system/components/system-upgrade/SystemUpgradeForm.tsx
server/sonar-web/src/main/js/apps/system/components/system-upgrade/SystemUpgradeIntermediate.tsx
server/sonar-web/src/main/js/apps/system/components/system-upgrade/__tests__/__snapshots__/SystemUpgradeForm-test.tsx.snap
server/sonar-web/src/main/js/apps/system/components/system-upgrade/__tests__/__snapshots__/SystemUpgradeIntermediate-test.tsx.snap
server/sonar-web/src/main/js/apps/system/components/system-upgrade/__tests__/__snapshots__/SystemUpgradeItem-test.tsx.snap
server/sonar-web/src/main/js/apps/system/utils.ts
server/sonar-web/src/main/js/apps/tutorials/onboarding/OrganizationStep.js
server/sonar-web/src/main/js/apps/tutorials/onboarding/__tests__/__snapshots__/Onboarding-test.js.snap
server/sonar-web/src/main/js/apps/tutorials/onboarding/commands/__tests__/__snapshots__/Command-test.js.snap
server/sonar-web/src/main/js/apps/tutorials/onboarding/commands/__tests__/__snapshots__/JavaGradle-test.js.snap
server/sonar-web/src/main/js/apps/users/components/UsersSelectSearchValue.js
server/sonar-web/src/main/js/apps/users/components/__tests__/__snapshots__/UsersSelectSearch-test.js.snap
server/sonar-web/src/main/js/apps/web-api/components/Action.tsx
server/sonar-web/src/main/js/apps/web-api/components/Params.tsx
server/sonar-web/src/main/js/apps/web-api/components/__tests__/__snapshots__/ActionChangelog-test.tsx.snap
server/sonar-web/src/main/js/apps/web-api/components/__tests__/__snapshots__/Domain-test.tsx.snap
server/sonar-web/src/main/js/apps/web-api/components/__tests__/__snapshots__/Menu-test.tsx.snap
server/sonar-web/src/main/js/apps/web-api/components/__tests__/__snapshots__/Params-test.tsx.snap
server/sonar-web/src/main/js/components/SourceViewer/components/Line.js
server/sonar-web/src/main/js/components/SourceViewer/components/LineCode.js
server/sonar-web/src/main/js/components/SourceViewer/components/__tests__/__snapshots__/LineCode-test.js.snap
server/sonar-web/src/main/js/components/SourceViewer/components/__tests__/__snapshots__/LineDuplicationBlock-test.js.snap
server/sonar-web/src/main/js/components/SourceViewer/components/__tests__/__snapshots__/LineIssuesList-test.js.snap
server/sonar-web/src/main/js/components/charts/__tests__/__snapshots__/BubbleChart-test.js.snap
server/sonar-web/src/main/js/components/charts/__tests__/__snapshots__/Histogram-test.tsx.snap
server/sonar-web/src/main/js/components/common/RestartForm.tsx
server/sonar-web/src/main/js/components/common/__tests__/__snapshots__/MultiSelect-test.js.snap
server/sonar-web/src/main/js/components/common/__tests__/__snapshots__/SelectList-test.js.snap
server/sonar-web/src/main/js/components/controls/DateInput.tsx
server/sonar-web/src/main/js/components/controls/SearchSelect.js
server/sonar-web/src/main/js/components/controls/SimpleModal.tsx
server/sonar-web/src/main/js/components/controls/__tests__/__snapshots__/RadioToggle-test.tsx.snap
server/sonar-web/src/main/js/components/controls/__tests__/__snapshots__/SearchSelect-test.js.snap
server/sonar-web/src/main/js/components/controls/__tests__/__snapshots__/SimpleModal-test.tsx.snap
server/sonar-web/src/main/js/components/issue/IssueView.js
server/sonar-web/src/main/js/components/issue/popups/SimilarIssuesPopup.js
server/sonar-web/src/main/js/components/issue/popups/__tests__/__snapshots__/ChangelogPopup-test.js.snap
server/sonar-web/src/main/js/components/issue/popups/__tests__/__snapshots__/SetSeverityPopup-test.js.snap
server/sonar-web/src/main/js/components/issue/popups/__tests__/__snapshots__/SetTransitionPopup-test.js.snap
server/sonar-web/src/main/js/components/issue/popups/__tests__/__snapshots__/SetTypePopup-test.js.snap
server/sonar-web/src/main/js/components/preview-graph/PreviewGraph.js
server/sonar-web/src/main/js/components/preview-graph/__tests__/__snapshots__/PreviewGraphTooltips-test.js.snap
server/sonar-web/src/main/js/helpers/urls.ts
server/sonar-web/src/main/js/store/utils/configureStore.js
server/sonar-web/yarn.lock

index 77637514195c03139137e32eab4ed9f32f6ba34d..d5f3a8e2503ad7fd8bfe700957e0854065872c1d 100644 (file)
@@ -1,5 +1,6 @@
 [ignore]
 <PROJECT_ROOT>/node_modules/fbjs.*
+<PROJECT_ROOT>/node_modules/react-draggable
 <PROJECT_ROOT>/node_modules/react-side-effect.*
 <PROJECT_ROOT>/node/.*
 <PROJECT_ROOT>/.vscode/.*
index 5bd751a354779115c28abb8bf8a2cf4e03b27284..7d82399d2adc7d32624ce2335b893879eecef2ab 100644 (file)
   "repository": "SonarSource/sonarqube",
   "license": "LGPL-3.0",
   "dependencies": {
-    "babel-polyfill": "6.23.0",
+    "babel-polyfill": "6.26.0",
     "backbone": "1.2.3",
     "backbone.marionette": "2.4.3",
     "blueimp-md5": "1.1.1",
-    "classnames": "2.2.0",
-    "clipboard": "1.5.5",
-    "create-react-class": "15.6.0",
-    "d3-array": "1.1.1",
-    "d3-hierarchy": "1.1.4",
-    "d3-scale": "1.0.5",
-    "d3-selection": "1.0.5",
-    "d3-shape": "1.0.6",
-    "date-fns": "1.28.5",
+    "classnames": "2.2.5",
+    "clipboard": "1.7.1",
+    "create-react-class": "15.6.2",
+    "d3-array": "1.2.1",
+    "d3-hierarchy": "1.1.5",
+    "d3-scale": "1.0.6",
+    "d3-selection": "1.1.0",
+    "d3-shape": "1.2.0",
+    "date-fns": "1.29.0",
     "escape-html": "1.0.3",
     "handlebars": "2.0.0",
     "history": "3.3.0",
-    "intl-relativeformat": "2.0.0",
+    "intl-relativeformat": "2.1.0",
     "jquery": "2.2.0",
     "keymaster": "1.6.2",
     "lodash": "4.17.4",
     "numeral": "1.5.3",
-    "prop-types": "15.5.10",
-    "rc-tooltip": "3.4.7",
+    "prop-types": "15.6.0",
+    "rc-tooltip": "3.5.0",
     "react": "15.6.2",
     "react-dom": "15.6.2",
-    "react-draggable": "2.2.6",
-    "react-helmet": "5.1.3",
-    "react-intl": "2.3.0",
-    "react-modal": "2.2.2",
-    "react-redux": "5.0.5",
+    "react-draggable": "3.0.3",
+    "react-helmet": "5.2.0",
+    "react-intl": "2.4.0",
+    "react-modal": "3.0.4",
+    "react-redux": "5.0.6",
     "react-router": "3.0.5",
-    "react-select": "1.0.0-rc.5",
-    "react-virtualized": "9.9.0",
-    "redux": "3.3.1",
-    "redux-logger": "2.2.1",
-    "redux-thunk": "1.0.2",
+    "react-select": "1.0.0-rc.10",
+    "react-virtualized": "9.12.0",
+    "redux": "3.7.2",
+    "redux-logger": "3.0.6",
+    "redux-thunk": "2.2.0",
     "underscore": "1.8.3",
-    "whatwg-fetch": "1.0.0"
+    "whatwg-fetch": "2.0.3"
   },
   "devDependencies": {
-    "@types/classnames": "2.2.0",
+    "@types/classnames": "2.2.3",
     "@types/d3-array": "1.2.1",
     "@types/d3-scale": "1.0.10",
     "@types/date-fns": "2.6.0",
     "@types/enzyme": "2.8.6",
-    "@types/escape-html": "0.0.19",
-    "@types/jest": "20.0.7",
+    "@types/escape-html": "0.0.20",
+    "@types/jest": "21.1.5",
     "@types/jquery": "3.2.11",
-    "@types/lodash": "4.14.73",
+    "@types/lodash": "4.14.79",
     "@types/numeral": "0.0.22",
-    "@types/prop-types": "15.5.1",
+    "@types/prop-types": "15.5.2",
     "@types/react": "16.0.2",
     "@types/react-dom": "15.5.2",
     "@types/react-helmet": "5.0.3",
-    "@types/react-intl": "2.3.1",
-    "@types/react-modal": "2.2.0",
-    "@types/react-redux": "5.0.3",
+    "@types/react-intl": "2.3.2",
+    "@types/react-modal": "2.2.2",
+    "@types/react-redux": "5.0.10",
     "@types/react-router": "3.0.5",
-    "@types/react-select": "1.0.51",
+    "@types/react-select": "1.0.59",
     "autoprefixer": "7.1.6",
     "awesome-typescript-loader": "3.2.3",
-    "babel-core": "^6.22.1",
-    "babel-jest": "20.0.3",
-    "babel-loader": "7.0.0",
-    "babel-plugin-dynamic-import-node": "1.0.2",
+    "babel-core": "6.26.0",
+    "babel-jest": "21.2.0",
+    "babel-loader": "7.1.2",
+    "babel-plugin-dynamic-import-node": "1.1.0",
     "babel-plugin-syntax-dynamic-import": "6.18.0",
     "babel-plugin-transform-class-properties": "^6.22.0",
-    "babel-plugin-transform-object-rest-spread": "^6.22.0",
+    "babel-plugin-transform-object-rest-spread": "6.26.0",
     "babel-plugin-transform-react-constant-elements": "^6.22.0",
     "babel-plugin-transform-react-jsx-self": "^6.22.0",
     "babel-plugin-transform-react-jsx-source": "^6.22.0",
-    "babel-preset-env": "^1.1.8",
+    "babel-preset-env": "1.6.1",
     "babel-preset-react": "^6.22.0",
-    "chalk": "1.1.3",
-    "css-loader": "0.28.4",
+    "chalk": "2.3.0",
+    "css-loader": "0.28.7",
     "enzyme": "2.9.1",
-    "enzyme-to-json": "1.5.1",
+    "enzyme-to-json": "2.0.1",
     "eslint": "4.9.0",
-    "eslint-loader": "1.8.0",
+    "eslint-loader": "1.9.0",
     "eslint-plugin-import": "2.8.0",
     "eslint-plugin-jsx-a11y": "6.0.2",
     "eslint-plugin-promise": "3.6.0",
     "eslint-plugin-react": "7.4.0",
     "expose-loader": "0.7.3",
-    "extract-text-webpack-plugin": "2.1.2",
+    "extract-text-webpack-plugin": "3.0.1",
     "flow-bin": "^0.52.0",
     "fs-extra": "0.30.0",
-    "handlebars-loader": "1.5.0",
-    "html-webpack-plugin": "2.28.0",
-    "jest": "20.0.4",
+    "handlebars-loader": "1.6.0",
+    "html-webpack-plugin": "2.30.1",
+    "jest": "21.2.1",
     "postcss-custom-properties": "6.2.0",
     "postcss-loader": "2.0.8",
-    "prettier": "1.6.1",
-    "react-dev-utils": "3.0.0",
+    "prettier": "1.7.4",
     "react-error-overlay": "1.0.7",
     "react-test-renderer": "15.6.2",
-    "rimraf": "2.5.4",
-    "style-loader": "0.18.2",
-    "ts-jest": "20.0.10",
+    "rimraf": "2.6.2",
+    "style-loader": "0.19.0",
+    "ts-jest": "21.1.3",
     "typescript": "2.5.3",
-    "typescript-eslint-parser": "8.0.0",
-    "webpack": "2.6.1",
-    "webpack-bundle-analyzer": "2.8.2",
-    "webpack-dev-server": "2.4.5"
+    "typescript-eslint-parser": "8.0.1",
+    "webpack": "3.8.1",
+    "webpack-bundle-analyzer": "2.9.0",
+    "webpack-dev-server": "2.9.3"
   },
   "scripts": {
     "start": "node scripts/start.js",
index dd1121b38c2f2260bd20dd6f6854607304562b6e..c821eb1979039fa3674a6475e6fa84f555a22b08 100644 (file)
@@ -21,7 +21,7 @@
 process.env.NODE_ENV = 'production';
 
 const webpack = require('webpack');
-const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin;
+const { BundleAnalyzerPlugin } = require('webpack-bundle-analyzer');
 const getConfig = require('../config/webpack.config');
 
 const config = getConfig({ production: true });
index c34df1119870a9f58141d9e4c451401cdce27cf1..21776e5036b9315d16436d8a64bb16d0df7a03a8 100644 (file)
@@ -72,7 +72,6 @@ function setupCompiler(host, port, protocol) {
         console.log(message);
         console.log();
       });
-      return;
     }
   });
 
@@ -81,6 +80,14 @@ function setupCompiler(host, port, protocol) {
 
 function runDevServer(compiler, host, port, protocol) {
   const devServer = new WebpackDevServer(compiler, {
+    before(app) {
+      app.use(errorOverlayMiddleware());
+      app.get('/api/l10n/index', (req, res) => {
+        getMessages()
+          .then(messages => res.json({ effectiveLocale: 'en', messages }))
+          .catch(() => res.status(500));
+      });
+    },
     compress: true,
     clientLogLevel: 'none',
     contentBase: paths.appPublic,
@@ -102,18 +109,13 @@ function runDevServer(compiler, host, port, protocol) {
       '/fonts': proxy,
       '/images': proxy,
       '/static': proxy
-    },
-    setup(app) {
-      app.use(errorOverlayMiddleware());
-      app.get('/api/l10n/index', (req, res) => {
-        getMessages().then(messages => res.json({ effectiveLocale: 'en', messages }));
-      });
     }
   });
 
   devServer.listen(port, err => {
     if (err) {
-      return console.log(err);
+      console.log(err);
+      return;
     }
 
     clearConsole();
index b1b2ac07fad6c6045b0acc8444eb69801ae23432..f790ab376fef667959db2743690d9a6e46efcc78 100644 (file)
@@ -144,14 +144,14 @@ export class ComponentContainer extends React.PureComponent<Props, State> {
     return (
       <div>
         {component &&
-        !['FIL', 'UTS'].includes(component.qualifier) && (
-          <ComponentNav
-            branches={branches}
-            currentBranch={branch}
-            component={component}
-            location={this.props.location}
-          />
-        )}
+          !['FIL', 'UTS'].includes(component.qualifier) && (
+            <ComponentNav
+              branches={branches}
+              currentBranch={branch}
+              component={component}
+              location={this.props.location}
+            />
+          )}
         {loading ? (
           <div className="page page-limited">
             <i className="spinner" />
diff --git a/server/sonar-web/src/main/js/app/components/GlobalFooterContainer.js b/server/sonar-web/src/main/js/app/components/GlobalFooterContainer.js
deleted file mode 100644 (file)
index 8d68f32..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2017 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.
- */
-// @flow
-import { connect } from 'react-redux';
-import { getAppState, getGlobalSettingValue } from '../../store/rootReducer';
-import GlobalFooter from './GlobalFooter';
-
-const mapStateToProps = state => ({
-  sonarqubeVersion: getAppState(state).version,
-  productionDatabase: getAppState(state).productionDatabase,
-  onSonarCloud: getGlobalSettingValue(state, 'sonar.sonarcloud.enabled')
-});
-
-export default connect(mapStateToProps)(GlobalFooter);
diff --git a/server/sonar-web/src/main/js/app/components/GlobalFooterContainer.tsx b/server/sonar-web/src/main/js/app/components/GlobalFooterContainer.tsx
new file mode 100644 (file)
index 0000000..e9b3125
--- /dev/null
@@ -0,0 +1,30 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2017 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 { getAppState, getGlobalSettingValue } from '../../store/rootReducer';
+import GlobalFooter from './GlobalFooter';
+
+const mapStateToProps = (state: any) => ({
+  sonarqubeVersion: getAppState(state).version,
+  productionDatabase: getAppState(state).productionDatabase,
+  onSonarCloud: getGlobalSettingValue(state, 'sonar.sonarcloud.enabled')
+});
+
+export default connect(mapStateToProps)(GlobalFooter);
index d7657b83365215891b9865d41c3544d83440d9d0..f1bfbf9756afb4cff9b8d4f5809e24df95362905 100644 (file)
@@ -93,8 +93,10 @@ class Extension extends React.PureComponent {
   }
 
   stopExtension() {
-    this.stop && this.stop();
-    this.stop = null;
+    if (this.stop) {
+      this.stop();
+      this.stop = null;
+    }
   }
 
   render() {
@@ -107,10 +109,4 @@ class Extension extends React.PureComponent {
   }
 }
 
-const mapStateToProps = state => ({
-  currentUser: getCurrentUser(state)
-});
-
-const mapDispatchToProps = { onFail: addGlobalErrorMessage };
-
-export default connect(mapStateToProps, mapDispatchToProps)(injectIntl(withRouter(Extension)));
+export default injectIntl(withRouter(Extension));
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
new file mode 100644 (file)
index 0000000..6e72ebb
--- /dev/null
@@ -0,0 +1,31 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2017 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 { getCurrentUser } from '../../../store/rootReducer';
+import { addGlobalErrorMessage } from '../../../store/globalMessages/duck';
+import Extension from './Extension';
+
+const mapStateToProps = (state: any) => ({
+  currentUser: getCurrentUser(state)
+});
+
+const mapDispatchToProps = { onFail: addGlobalErrorMessage };
+
+export default connect<any, any, any>(mapStateToProps, mapDispatchToProps)(Extension);
index eff718d6168791c1550f3c5ad806dbf8f678fdd7..ea9b2191b02d059f737d04402c2308d13ecdd583 100644 (file)
@@ -20,7 +20,7 @@
 // @flow
 import React from 'react';
 import { connect } from 'react-redux';
-import Extension from './Extension';
+import ExtensionContainer from './ExtensionContainer';
 import ExtensionNotFound from './ExtensionNotFound';
 import { getAppState } from '../../../store/rootReducer';
 
@@ -37,7 +37,7 @@ type Props = {
 function GlobalAdminPageExtension(props /*: Props */) {
   const { extensionKey, pluginKey } = props.params;
   const extension = props.adminPages.find(p => p.key === `${pluginKey}/${extensionKey}`);
-  return extension ? <Extension extension={extension} /> : <ExtensionNotFound />;
+  return extension ? <ExtensionContainer extension={extension} /> : <ExtensionNotFound />;
 }
 
 const mapStateToProps = state => ({
index 5d82eae491718801f1a1070862ac83e104affdcb..acc4d25948c5eb3cee3691b49b46026b701d2958 100644 (file)
@@ -20,7 +20,7 @@
 // @flow
 import React from 'react';
 import { connect } from 'react-redux';
-import Extension from './Extension';
+import ExtensionContainer from './ExtensionContainer';
 import ExtensionNotFound from './ExtensionNotFound';
 import { getAppState } from '../../../store/rootReducer';
 
@@ -37,7 +37,7 @@ type Props = {
 function GlobalPageExtension(props /*: Props */) {
   const { extensionKey, pluginKey } = props.params;
   const extension = props.globalPages.find(p => p.key === `${pluginKey}/${extensionKey}`);
-  return extension ? <Extension extension={extension} /> : <ExtensionNotFound />;
+  return extension ? <ExtensionContainer extension={extension} /> : <ExtensionNotFound />;
 }
 
 const mapStateToProps = state => ({
index e5d38f46800741985f1b1990269bedb70fb81f45..9236726d4286c11e56e6ef3f099a53dde558c722 100644 (file)
@@ -20,7 +20,7 @@
 // @flow
 import React from 'react';
 import { connect } from 'react-redux';
-import Extension from './Extension';
+import ExtensionContainer from './ExtensionContainer';
 import ExtensionNotFound from './ExtensionNotFound';
 import { getOrganizationByKey } from '../../../store/rootReducer';
 import { fetchOrganization } from '../../../apps/organizations/actions';
@@ -55,7 +55,7 @@ class OrganizationPageExtension extends React.PureComponent {
 
     const extension = pages.find(p => p.key === `${pluginKey}/${extensionKey}`);
     return extension ? (
-      <Extension
+      <ExtensionContainer
         extension={extension}
         location={this.props.location}
         options={{ organization, refreshOrganization: this.refreshOrganization }}
index 3881206d667b8b6bcaaf67a91a1f623ef9950829..e2ce3c79d062e49516cecb4122f4e480ed55391d 100644 (file)
@@ -20,7 +20,7 @@
 // @flow
 import React from 'react';
 import { connect } from 'react-redux';
-import Extension from './Extension';
+import ExtensionContainer from './ExtensionContainer';
 import ExtensionNotFound from './ExtensionNotFound';
 import { addGlobalErrorMessage } from '../../../store/globalMessages/duck';
 
@@ -46,7 +46,7 @@ function ProjectAdminPageExtension(props /*: Props */) {
     component.configuration &&
     component.configuration.extensions.find(p => p.key === `${pluginKey}/${extensionKey}`);
   return extension ? (
-    <Extension extension={extension} options={{ component }} />
+    <ExtensionContainer extension={extension} options={{ component }} />
   ) : (
     <ExtensionNotFound />
   );
index dc23ec8df225b2627afa6b5d56081e6f75ff7321..4c76b21a7e74b88758cfcd80be272f073f06f083 100644 (file)
@@ -18,7 +18,7 @@
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  */
 import * as React from 'react';
-import Extension from './Extension';
+import ExtensionContainer from './ExtensionContainer';
 import ExtensionNotFound from './ExtensionNotFound';
 import { Component } from '../../types';
 
@@ -38,7 +38,7 @@ export default function ProjectPageExtension(props: Props) {
     component.extensions &&
     component.extensions.find(p => p.key === `${pluginKey}/${extensionKey}`);
   return extension ? (
-    <Extension extension={extension} options={{ component }} />
+    <ExtensionContainer extension={extension} options={{ component }} />
   ) : (
     <ExtensionNotFound />
   );
index 9df12c7801cf0277e21063e3bd2d432f18d894b9..43f4616f8b83ca5825b211d092f87587ce84e3d9 100644 (file)
@@ -90,7 +90,8 @@ export default class GlobalHelp extends React.PureComponent {
     <ul className="side-tabs-menu">
       {(this.props.currentUser.isLoggedIn
         ? ['shortcuts', 'tutorials', 'links']
-        : ['shortcuts', 'links']).map(this.renderMenuItem)}
+        : ['shortcuts', 'links']
+      ).map(this.renderMenuItem)}
     </ul>
   );
 
index e9a2ed0ec038b51cb8a7c3bdd9756ab53669dce0..5aaa41aa5f87a52b5df8feb33a6dbd49f559b415 100644 (file)
@@ -12,7 +12,9 @@ exports[`does not show tutorials for anonymous 1`] = `
   overlayClassName="modal-overlay"
   parentSelector={[Function]}
   portalClassName="ReactModalPortal"
+  shouldCloseOnEsc={true}
   shouldCloseOnOverlayClick={true}
+  shouldFocusAfterRender={true}
 >
   <div
     className="modal-head"
@@ -30,7 +32,9 @@ exports[`does not show tutorials for anonymous 1`] = `
       <ul
         className="side-tabs-menu"
       >
-        <li>
+        <li
+          key="shortcuts"
+        >
           <a
             className="active"
             data-section="shortcuts"
@@ -40,7 +44,9 @@ exports[`does not show tutorials for anonymous 1`] = `
             help.section.shortcuts
           </a>
         </li>
-        <li>
+        <li
+          key="links"
+        >
           <a
             className=""
             data-section="links"
index 8bbd0a0c5cec38199e759bbdaf9a61df259f64cb..8129eeb98fdf12c8817affb9dd57e73704a31e25 100644 (file)
@@ -53,11 +53,11 @@ class ComponentNavBreadcrumbs extends React.PureComponent {
       return (
         <span key={item.key}>
           {!displayOrganization &&
-          index === 0 && (
-            <span className="navbar-context-title-qualifier little-spacer-right">
-              <QualifierIcon qualifier={lastItem.qualifier} />
-            </span>
-          )}
+            index === 0 && (
+              <span className="navbar-context-title-qualifier little-spacer-right">
+                <QualifierIcon qualifier={lastItem.qualifier} />
+              </span>
+            )}
           <Link
             title={item.name}
             to={{ pathname: '/dashboard', query: { id: item.key } }}
index ef2234c896d6de462cb8405f33f92c3aeefb7ca9..4f64dbba6ff2d5a59905f95e2cc826012595375c 100644 (file)
@@ -116,11 +116,9 @@ export default class ComponentNavMenu extends React.PureComponent<Props> {
             }
           }}
           activeClassName="active">
-          {this.isPortfolio() || this.isApplication() ? (
-            translate('view_projects.page')
-          ) : (
-            translate('code.page')
-          )}
+          {this.isPortfolio() || this.isApplication()
+            ? translate('view_projects.page')
+            : translate('code.page')}
         </Link>
       </li>
     );
index d7e28b0846bdcbf52f56c47d4fa690e23aae3de8..7a01722ba4cc69b3262faca63c398e1f27159846 100644 (file)
@@ -39,14 +39,17 @@ exports[`renders list 1`] = `
           "key": "component",
         }
       }
+      key="master"
       onSelect={[Function]}
       selected={true}
     />
     <li
       className="divider"
+      key="divider-baz"
     />
     <li
       className="dropdown-header"
+      key="orphans"
     >
       branches.orphan_branches
       <Tooltip
@@ -78,6 +81,7 @@ exports[`renders list 1`] = `
           "key": "component",
         }
       }
+      key="baz"
       onSelect={[Function]}
       selected={false}
     />
@@ -101,11 +105,13 @@ exports[`renders list 1`] = `
           "key": "component",
         }
       }
+      key="foo"
       onSelect={[Function]}
       selected={false}
     />
     <li
       className="divider"
+      key="divider-bar"
     />
     <ComponentNavBranchesMenuItem
       branch={
@@ -120,14 +126,17 @@ exports[`renders list 1`] = `
           "key": "component",
         }
       }
+      key="bar"
       onSelect={[Function]}
       selected={false}
     />
     <li
       className="divider"
+      key="divider-baz"
     />
     <li
       className="dropdown-header"
+      key="orphans"
     >
       branches.orphan_branches
       <Tooltip
@@ -159,6 +168,7 @@ exports[`renders list 1`] = `
           "key": "component",
         }
       }
+      key="baz"
       onSelect={[Function]}
       selected={false}
     />
@@ -213,11 +223,13 @@ exports[`searches 1`] = `
           "key": "component",
         }
       }
+      key="foobar"
       onSelect={[Function]}
       selected={true}
     />
     <li
       className="divider"
+      key="divider-bar"
     />
     <ComponentNavBranchesMenuItem
       branch={
@@ -232,6 +244,7 @@ exports[`searches 1`] = `
           "key": "component",
         }
       }
+      key="bar"
       onSelect={[Function]}
       selected={false}
     />
index 1f6d81e9883f1d23df5dfdf3d2623aca2eca0759..ceba812e99c423bfd335658abac5c6ab9cbcf675 100644 (file)
@@ -2,6 +2,7 @@
 
 exports[`renders main branch 1`] = `
 <li
+  key="master"
   onMouseEnter={[Function]}
 >
   <Tooltip
@@ -61,6 +62,7 @@ exports[`renders main branch 1`] = `
 
 exports[`renders short-living branch 1`] = `
 <li
+  key="foo"
   onMouseEnter={[Function]}
 >
   <Tooltip
@@ -131,6 +133,7 @@ exports[`renders short-living branch 1`] = `
 
 exports[`renders short-living orhpan branch 1`] = `
 <li
+  key="foo"
   onMouseEnter={[Function]}
 >
   <Tooltip
index 1588ae83e8a60adec5617334b22f1b872b7c1fc9..259c976fd1111feefe138f2db9822a486d55fc7d 100644 (file)
@@ -8,7 +8,9 @@ exports[`should not render breadcrumbs with one element 1`] = `
     organization={null}
     title="My Project"
   />
-  <span>
+  <span
+    key="my-project"
+  >
     <span
       className="navbar-context-title-qualifier little-spacer-right"
     >
@@ -74,7 +76,9 @@ exports[`should render organization 1`] = `
       className="slash-separator"
     />
   </span>
-  <span>
+  <span
+    key="my-project"
+  >
     <Link
       className="link-base-color link-no-underline"
       onlyActiveOnIndex={false}
index 80521551658a08fc2f30da886f989d2c390d2f90..56558732e7429aff2d5020080b3c7c8a79ab7653 100644 (file)
@@ -111,7 +111,9 @@ exports[`should work for all qualifiers 1`] = `
     <ul
       className="dropdown-menu"
     >
-      <li>
+      <li
+        key="settings"
+      >
         <Link
           activeClassName="active"
           onlyActiveOnIndex={false}
@@ -129,7 +131,9 @@ exports[`should work for all qualifiers 1`] = `
           project_settings.page
         </Link>
       </li>
-      <li>
+      <li
+        key="branches"
+      >
         <Link
           activeClassName="active"
           onlyActiveOnIndex={false}
@@ -146,7 +150,9 @@ exports[`should work for all qualifiers 1`] = `
           project_branches.page
         </Link>
       </li>
-      <li>
+      <li
+        key="project_delete"
+      >
         <Link
           activeClassName="active"
           onlyActiveOnIndex={false}
@@ -279,7 +285,9 @@ exports[`should work for all qualifiers 2`] = `
     <ul
       className="dropdown-menu"
     >
-      <li>
+      <li
+        key="settings"
+      >
         <Link
           activeClassName="active"
           onlyActiveOnIndex={false}
@@ -413,7 +421,9 @@ exports[`should work for all qualifiers 3`] = `
     <ul
       className="dropdown-menu"
     >
-      <li>
+      <li
+        key="project_delete"
+      >
         <Link
           activeClassName="active"
           onlyActiveOnIndex={false}
@@ -642,7 +652,9 @@ exports[`should work for all qualifiers 5`] = `
     <ul
       className="dropdown-menu"
     >
-      <li>
+      <li
+        key="project_delete"
+      >
         <Link
           activeClassName="active"
           onlyActiveOnIndex={false}
@@ -1009,7 +1021,9 @@ exports[`should work with extensions 1`] = `
     <ul
       className="dropdown-menu"
     >
-      <li>
+      <li
+        key="settings"
+      >
         <Link
           activeClassName="active"
           onlyActiveOnIndex={false}
@@ -1027,7 +1041,9 @@ exports[`should work with extensions 1`] = `
           project_settings.page
         </Link>
       </li>
-      <li>
+      <li
+        key="branches"
+      >
         <Link
           activeClassName="active"
           onlyActiveOnIndex={false}
@@ -1044,7 +1060,9 @@ exports[`should work with extensions 1`] = `
           project_branches.page
         </Link>
       </li>
-      <li>
+      <li
+        key="foo"
+      >
         <Link
           activeClassName="active"
           onlyActiveOnIndex={false}
@@ -1061,7 +1079,9 @@ exports[`should work with extensions 1`] = `
           Foo
         </Link>
       </li>
-      <li>
+      <li
+        key="project_delete"
+      >
         <Link
           activeClassName="active"
           onlyActiveOnIndex={false}
@@ -1098,7 +1118,9 @@ exports[`should work with extensions 1`] = `
     <ul
       className="dropdown-menu"
     >
-      <li>
+      <li
+        key="component-foo"
+      >
         <Link
           activeClassName="active"
           onlyActiveOnIndex={false}
@@ -1231,7 +1253,9 @@ exports[`should work with multiple extensions 1`] = `
     <ul
       className="dropdown-menu"
     >
-      <li>
+      <li
+        key="settings"
+      >
         <Link
           activeClassName="active"
           onlyActiveOnIndex={false}
@@ -1249,7 +1273,9 @@ exports[`should work with multiple extensions 1`] = `
           project_settings.page
         </Link>
       </li>
-      <li>
+      <li
+        key="branches"
+      >
         <Link
           activeClassName="active"
           onlyActiveOnIndex={false}
@@ -1266,7 +1292,9 @@ exports[`should work with multiple extensions 1`] = `
           project_branches.page
         </Link>
       </li>
-      <li>
+      <li
+        key="foo"
+      >
         <Link
           activeClassName="active"
           onlyActiveOnIndex={false}
@@ -1283,7 +1311,9 @@ exports[`should work with multiple extensions 1`] = `
           Foo
         </Link>
       </li>
-      <li>
+      <li
+        key="bar"
+      >
         <Link
           activeClassName="active"
           onlyActiveOnIndex={false}
@@ -1300,7 +1330,9 @@ exports[`should work with multiple extensions 1`] = `
           Bar
         </Link>
       </li>
-      <li>
+      <li
+        key="project_delete"
+      >
         <Link
           activeClassName="active"
           onlyActiveOnIndex={false}
@@ -1337,7 +1369,9 @@ exports[`should work with multiple extensions 1`] = `
     <ul
       className="dropdown-menu"
     >
-      <li>
+      <li
+        key="component-foo"
+      >
         <Link
           activeClassName="active"
           onlyActiveOnIndex={false}
@@ -1354,7 +1388,9 @@ exports[`should work with multiple extensions 1`] = `
           ComponentFoo
         </Link>
       </li>
-      <li>
+      <li
+        key="component-bar"
+      >
         <Link
           activeClassName="active"
           onlyActiveOnIndex={false}
index a1dd339dfce14c0256dc20b675311057231e92b7..dea4abcd294842b52559ec01228e9c428d35c1b8 100644 (file)
@@ -7,12 +7,16 @@ exports[`renders meta for long-living branch 1`] = `
   <ul
     className="list-inline"
   >
-    <li>
+    <li
+      key="analysisDate"
+    >
       <DateTimeFormatter
         date="2017-01-02T00:00:00.000Z"
       />
     </li>
-    <li>
+    <li
+      key="version"
+    >
       <Tooltip
         mouseEnterDelay={0.5}
         overlay="version 0.0.1"
@@ -38,7 +42,9 @@ exports[`renders status of short-living branch 1`] = `
   <ul
     className="list-inline"
   >
-    <li>
+    <li
+      key="analysisDate"
+    >
       <DateTimeFormatter
         date="2017-01-02T00:00:00.000Z"
       />
index c72f7259205bf41d9208b4868e29b88dd9cea3c8..673cc003e3ceeb5b6e71fe53f8628f229d63bb35 100644 (file)
@@ -159,7 +159,9 @@ exports[`should work with extensions 1`] = `
     <ul
       className="dropdown-menu"
     >
-      <li>
+      <li
+        key="foo"
+      >
         <Link
           onlyActiveOnIndex={false}
           style={Object {}}
index 034d6700b8a3b72170ff4e91bb8e17ce6644072a..e77bc5d2d8d5ef3e2f07b6105fe458c462569dd1 100644 (file)
@@ -197,7 +197,9 @@ exports[`should render the users organizations 1`] = `
         my_organizations
       </Link>
     </li>
-    <li>
+    <li
+      key="bar"
+    >
       <OrganizationLink
         onClick={[Function]}
         organization={
@@ -215,7 +217,9 @@ exports[`should render the users organizations 1`] = `
         </span>
       </OrganizationLink>
     </li>
-    <li>
+    <li
+      key="foo"
+    >
       <OrganizationLink
         onClick={[Function]}
         organization={
@@ -233,7 +237,9 @@ exports[`should render the users organizations 1`] = `
         </span>
       </OrganizationLink>
     </li>
-    <li>
+    <li
+      key="myorg"
+    >
       <OrganizationLink
         onClick={[Function]}
         organization={
index 527b8479adab67dd260b5e287f5ff6fece9b7856..b0340d6730a8cf3af8de4e57d2443d96a110f360 100644 (file)
@@ -51,14 +51,12 @@ export default class SettingsEditionsNotif extends React.PureComponent<Props, St
     return (
       <NavBarNotif className="alert alert-success">
         <span>
-          {edition ? (
-            translateWithParameters(
-              'marketplace.status_x.' + editionStatus.installationStatus,
-              edition.name
-            )
-          ) : (
-            translate('marketplace.status', editionStatus.installationStatus)
-          )}
+          {edition
+            ? translateWithParameters(
+                'marketplace.status_x.' + editionStatus.installationStatus,
+                edition.name
+              )
+            : translate('marketplace.status', editionStatus.installationStatus)}
         </span>
         {!preventRestart && (
           <button className="js-restart spacer-left" onClick={this.handleOpenRestart}>
index bded1f0a092584bfe61564adbc696606a2888b76..e33f869028629541dd3932a949b9d2b00b6bb77c 100644 (file)
@@ -55,7 +55,9 @@ exports[`should work with extensions 1`] = `
             custom_metrics.page
           </IndexLink>
         </li>
-        <li>
+        <li
+          key="foo"
+        >
           <Link
             activeClassName="active"
             onlyActiveOnIndex={false}
index 7f0e355d0cebc46db8228e7fcbca09fdb7c9eeb2..5ea8a0f915da9d7fa182654c960dc4cf64630add 100644 (file)
@@ -355,37 +355,37 @@ export default class Search extends React.PureComponent {
         )}
 
         {this.state.open &&
-        Object.keys(this.state.results).length > 0 && (
-          <div
-            className="dropdown-menu dropdown-menu-right global-navbar-search-dropdown"
-            ref={node => (this.node = node)}>
-            <SearchResults
-              allowMore={this.state.query.length !== 1}
-              loadingMore={this.state.loadingMore}
-              more={this.state.more}
-              onMoreClick={this.searchMore}
-              onSelect={this.handleSelect}
-              renderNoResults={this.renderNoResults}
-              renderResult={this.renderResult}
-              results={this.state.results}
-              selected={this.state.selected}
-            />
-            <div className="dropdown-bottom-hint">
-              <div className="pull-right">
-                <ClockIcon className="little-spacer-right" size={12} />
-                {translate('recently_browsed')}
-              </div>
-              <div
-                dangerouslySetInnerHTML={{
-                  __html: translateWithParameters(
-                    'search.shortcut_hint',
-                    '<span class="shortcut-button shortcut-button-small">s</span>'
-                  )
-                }}
+          Object.keys(this.state.results).length > 0 && (
+            <div
+              className="dropdown-menu dropdown-menu-right global-navbar-search-dropdown"
+              ref={node => (this.node = node)}>
+              <SearchResults
+                allowMore={this.state.query.length !== 1}
+                loadingMore={this.state.loadingMore}
+                more={this.state.more}
+                onMoreClick={this.searchMore}
+                onSelect={this.handleSelect}
+                renderNoResults={this.renderNoResults}
+                renderResult={this.renderResult}
+                results={this.state.results}
+                selected={this.state.selected}
               />
+              <div className="dropdown-bottom-hint">
+                <div className="pull-right">
+                  <ClockIcon className="little-spacer-right" size={12} />
+                  {translate('recently_browsed')}
+                </div>
+                <div
+                  dangerouslySetInnerHTML={{
+                    __html: translateWithParameters(
+                      'search.shortcut_hint',
+                      '<span class="shortcut-button shortcut-button-small">s</span>'
+                    )
+                  }}
+                />
+              </div>
             </div>
-          </div>
-        )}
+          )}
       </li>
     );
   }
index a99f95bc210906f9fe142ad9779d676a51c4e8f1..57349cfbdf5b610cbb72a58bdc54b8a479a8048f 100644 (file)
@@ -1,7 +1,9 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
 exports[`renders favorite 1`] = `
-<li>
+<li
+  key="foo"
+>
   <Tooltip
     mouseEnterDelay={1}
     overlay="foo"
@@ -48,7 +50,9 @@ exports[`renders favorite 1`] = `
 `;
 
 exports[`renders match 1`] = `
-<li>
+<li
+  key="foo"
+>
   <Tooltip
     mouseEnterDelay={1}
     overlay="foo"
@@ -94,7 +98,9 @@ exports[`renders match 1`] = `
 `;
 
 exports[`renders organizations 1`] = `
-<li>
+<li
+  key="foo"
+>
   <Tooltip
     mouseEnterDelay={1}
     overlay="foo"
@@ -145,7 +151,9 @@ exports[`renders organizations 1`] = `
 `;
 
 exports[`renders organizations 2`] = `
-<li>
+<li
+  key="foo"
+>
   <Tooltip
     mouseEnterDelay={1}
     overlay="foo"
@@ -191,7 +199,9 @@ exports[`renders organizations 2`] = `
 `;
 
 exports[`renders projects 1`] = `
-<li>
+<li
+  key="qwe"
+>
   <Tooltip
     mouseEnterDelay={1}
     overlay="qwe"
@@ -242,7 +252,9 @@ exports[`renders projects 1`] = `
 `;
 
 exports[`renders recently browsed 1`] = `
-<li>
+<li
+  key="foo"
+>
   <Tooltip
     mouseEnterDelay={1}
     overlay="foo"
@@ -288,7 +300,9 @@ exports[`renders recently browsed 1`] = `
 `;
 
 exports[`renders selected 1`] = `
-<li>
+<li
+  key="foo"
+>
   <Tooltip
     mouseEnterDelay={1}
     overlay="foo"
@@ -333,6 +347,7 @@ exports[`renders selected 1`] = `
 exports[`renders selected 2`] = `
 <li
   className="active"
+  key="foo"
 >
   <Tooltip
     mouseEnterDelay={1}
index b93d9ef64b50680152fc722b6457b7cae53e3136..aa88bea94d8c09650179943ec2d1ca9fbaf275da 100644 (file)
@@ -6,17 +6,23 @@ exports[`renders "Show More" link 1`] = `
 >
   <li
     className="dropdown-header"
+    key="header-TRK"
   >
     qualifiers.TRK
   </li>
-  <span>
+  <span
+    key="foo"
+  >
     foo
   </span>
-  <span>
+  <span
+    key="bar"
+  >
     bar
   </span>
   <SearchShowMore
     allowMore={true}
+    key="more-TRK"
     loadingMore={null}
     onMoreClick={[Function]}
     onSelect={[Function]}
@@ -25,16 +31,22 @@ exports[`renders "Show More" link 1`] = `
   />
   <li
     className="divider"
+    key="divider-BRC"
   />
   <li
     className="dropdown-header"
+    key="header-BRC"
   >
     qualifiers.BRC
   </li>
-  <span>
+  <span
+    key="qwe"
+  >
     qwe
   </span>
-  <span>
+  <span
+    key="qux"
+  >
     qux
   </span>
 </ul>
@@ -46,38 +58,53 @@ exports[`renders different components and dividers between them 1`] = `
 >
   <li
     className="dropdown-header"
+    key="header-TRK"
   >
     qualifiers.TRK
   </li>
-  <span>
+  <span
+    key="foo"
+  >
     foo
   </span>
-  <span>
+  <span
+    key="bar"
+  >
     bar
   </span>
   <li
     className="divider"
+    key="divider-BRC"
   />
   <li
     className="dropdown-header"
+    key="header-BRC"
   >
     qualifiers.BRC
   </li>
-  <span>
+  <span
+    key="qwe"
+  >
     qwe
   </span>
-  <span>
+  <span
+    key="qux"
+  >
     qux
   </span>
   <li
     className="divider"
+    key="divider-FIL"
   />
   <li
     className="dropdown-header"
+    key="header-FIL"
   >
     qualifiers.FIL
   </li>
-  <span>
+  <span
+    key="zux"
+  >
     zux
   </span>
 </ul>
index b89d2bab0ceb6e62b2d6cc04fcd31c60b07ef2bf..8f9294c9b77f260243c034b0768585dbd14b5319 100644 (file)
@@ -188,7 +188,11 @@ a.search-navigator-facet:focus .facet-stat {
   bottom: 0;
   right: 100%;
   width: 10px;
-  background-image: linear-gradient(to right, rgba(243, 243, 243, 0), var(--barBackgroundColor) 75%);
+  background-image: linear-gradient(
+    to right,
+    rgba(243, 243, 243, 0),
+    var(--barBackgroundColor) 75%
+  );
 }
 
 .search-navigator-facet .facet-toggle {
@@ -766,7 +770,11 @@ a.search-navigator-facet:focus .facet-stat {
   bottom: 0;
   right: 100%;
   width: 10px;
-  background-image: linear-gradient(to right, rgba(243, 243, 243, 0), var(--barBackgroundColor) 75%);
+  background-image: linear-gradient(
+    to right,
+    rgba(243, 243, 243, 0),
+    var(--barBackgroundColor) 75%
+  );
 }
 
 .search-navigator-header-pagination {
index cc3556ca91029a15a39a5c2fe4563099ae1fd7a0..267d0fc7cf1b87d4ee291321eb725958e01c65ba 100644 (file)
@@ -156,12 +156,12 @@ class AboutApp extends React.PureComponent {
         </div>
 
         {customText != null &&
-        customText.value && (
-          <div
-            className="about-page-section"
-            dangerouslySetInnerHTML={{ __html: customText.value }}
-          />
-        )}
+          customText.value && (
+            <div
+              className="about-page-section"
+              dangerouslySetInnerHTML={{ __html: customText.value }}
+            />
+          )}
 
         <AboutLanguages />
 
index 2135246ecb691c76df1d034be7b2fcfa1d343a0c..4a7d7d10c5a6ec4878cc18282aac8270c0632c76 100644 (file)
@@ -15,6 +15,7 @@ exports[`should match snapshot 1`] = `
         <th />
         <th
           className="text-center"
+          key="channel1"
         >
           <h4>
             notification.channel.channel1
@@ -22,6 +23,7 @@ exports[`should match snapshot 1`] = `
         </th>
         <th
           className="text-center"
+          key="channel2"
         >
           <h4>
             notification.channel.channel2
index 978e4038e91a3a33c585313953e1e1994dea8bf8..8541cc01be747eb11d7fa17a983300099aac5d47 100644 (file)
@@ -5,6 +5,7 @@ exports[`should match snapshot 1`] = `
   className="account-body account-container"
 >
   <HelmetWrapper
+    defer={true}
     encodeSpecialCharacters={true}
     title="my_account.notifications"
   />
index 3ca417ef0a0e646eccfb7a19c03eccfaef6ea9d0..13a18bff3c7db33d721b2a4bbfcbba7dd667c4a4 100644 (file)
@@ -2,12 +2,15 @@
 
 exports[`renders project-specific labels 1`] = `
 <tbody>
-  <tr>
+  <tr
+    key="type1"
+  >
     <td>
       notification.dispatcher.type1.project
     </td>
     <td
       className="text-center"
+      key="channel1"
     >
       <Checkbox
         checked={true}
@@ -18,6 +21,7 @@ exports[`renders project-specific labels 1`] = `
     </td>
     <td
       className="text-center"
+      key="channel2"
     >
       <Checkbox
         checked={false}
@@ -27,12 +31,15 @@ exports[`renders project-specific labels 1`] = `
       />
     </td>
   </tr>
-  <tr>
+  <tr
+    key="type2"
+  >
     <td>
       notification.dispatcher.type2.project
     </td>
     <td
       className="text-center"
+      key="channel1"
     >
       <Checkbox
         checked={true}
@@ -43,6 +50,7 @@ exports[`renders project-specific labels 1`] = `
     </td>
     <td
       className="text-center"
+      key="channel2"
     >
       <Checkbox
         checked={true}
@@ -57,12 +65,15 @@ exports[`renders project-specific labels 1`] = `
 
 exports[`should match snapshot 1`] = `
 <tbody>
-  <tr>
+  <tr
+    key="type1"
+  >
     <td>
       notification.dispatcher.type1
     </td>
     <td
       className="text-center"
+      key="channel1"
     >
       <Checkbox
         checked={true}
@@ -73,6 +84,7 @@ exports[`should match snapshot 1`] = `
     </td>
     <td
       className="text-center"
+      key="channel2"
     >
       <Checkbox
         checked={false}
@@ -82,12 +94,15 @@ exports[`should match snapshot 1`] = `
       />
     </td>
   </tr>
-  <tr>
+  <tr
+    key="type2"
+  >
     <td>
       notification.dispatcher.type2
     </td>
     <td
       className="text-center"
+      key="channel1"
     >
       <Checkbox
         checked={true}
@@ -98,6 +113,7 @@ exports[`should match snapshot 1`] = `
     </td>
     <td
       className="text-center"
+      key="channel2"
     >
       <Checkbox
         checked={true}
index 3a5f1bb6f427eb770ae104a2f47d82a96b7d1b3a..2fb0f7c15d1cb3e52ee377ec2f896c9bfc76dcfb 100644 (file)
@@ -3,6 +3,7 @@
 exports[`should match snapshot 1`] = `
 <table
   className="form big-spacer-bottom"
+  key="foo"
 >
   <thead>
     <tr>
@@ -34,6 +35,7 @@ exports[`should match snapshot 1`] = `
       </th>
       <th
         className="text-center"
+        key="channel1"
       >
         <h4>
           notification.channel.channel1
@@ -41,6 +43,7 @@ exports[`should match snapshot 1`] = `
       </th>
       <th
         className="text-center"
+        key="channel2"
       >
         <h4>
           notification.channel.channel2
index 0a6bbf5f26765ebade6d3eeb5ec0fe916635eb50..ed54ae19c4daf9d9f0ead37a0c1f1ac856404c83 100644 (file)
@@ -8,6 +8,7 @@ exports[`should render projects 1`] = `
     my_profile.per_project_notifications.title
   </h2>
   <Connect(ProjectNotifications)
+    key="foo"
     project={
       Object {
         "key": "foo",
@@ -16,6 +17,7 @@ exports[`should render projects 1`] = `
     }
   />
   <Connect(ProjectNotifications)
+    key="bar"
     project={
       Object {
         "key": "bar",
@@ -64,6 +66,7 @@ exports[`should render projects 2`] = `
     my_profile.per_project_notifications.title
   </h2>
   <Connect(ProjectNotifications)
+    key="foo"
     project={
       Object {
         "key": "foo",
@@ -72,6 +75,7 @@ exports[`should render projects 2`] = `
     }
   />
   <Connect(ProjectNotifications)
+    key="bar"
     project={
       Object {
         "key": "bar",
@@ -80,6 +84,7 @@ exports[`should render projects 2`] = `
     }
   />
   <Connect(ProjectNotifications)
+    key="qux"
     project={
       Object {
         "key": "qux",
@@ -128,6 +133,7 @@ exports[`should render projects 3`] = `
     my_profile.per_project_notifications.title
   </h2>
   <Connect(ProjectNotifications)
+    key="foo"
     project={
       Object {
         "key": "foo",
@@ -136,6 +142,7 @@ exports[`should render projects 3`] = `
     }
   />
   <Connect(ProjectNotifications)
+    key="bar"
     project={
       Object {
         "key": "bar",
@@ -144,6 +151,7 @@ exports[`should render projects 3`] = `
     }
   />
   <Connect(ProjectNotifications)
+    key="qux"
     project={
       Object {
         "key": "qux",
index 1022a377f331b99552359648cf5e0487ecbed22d..4996bfcd124e96e4ea9e1a71de9f039c610d59ef 100644 (file)
@@ -50,11 +50,11 @@ function Profile(props /*: Props */) {
       </div>
 
       {!user.local &&
-      user.externalProvider !== 'sonarqube' && (
-        <div id="identity-provider" className="spacer-bottom">
-          <UserExternalIdentity user={user} />
-        </div>
-      )}
+        user.externalProvider !== 'sonarqube' && (
+          <div id="identity-provider" className="spacer-bottom">
+            <UserExternalIdentity user={user} />
+          </div>
+        )}
 
       {!!user.email && (
         <div className="spacer-bottom">
index c5fa551f1429c369c6a20e858f9fc0d9ab3adb34..1e01f0ce5a231f7c7803bce3645f94bbe8fe5d82 100644 (file)
@@ -18,7 +18,7 @@
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  */
 import * as React from 'react';
-import Modal from 'react-modal';
+import * as Modal from 'react-modal';
 import { getTask } from '../../../api/ce';
 import { translate } from '../../../helpers/l10n';
 import { Task } from '../types';
index 7156099b54c8bc449888b17930377c8346bab74c..56c5a82e0da3056a21a405c71933ea7e89b7ada6 100644 (file)
@@ -18,7 +18,7 @@
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  */
 import * as React from 'react';
-import Modal from 'react-modal';
+import * as Modal from 'react-modal';
 import { getTask } from '../../../api/ce';
 import { translate } from '../../../helpers/l10n';
 import { Task } from '../types';
index 285e7a4d50fa947059713402c66cab297a43ee06..d6510541fc2c902fc785d035833555bb0f0512fe 100644 (file)
@@ -86,17 +86,17 @@ export default class TaskActions extends React.PureComponent<Props, State> {
           </button>
           <ul className="dropdown-menu dropdown-menu-right">
             {canFilter &&
-            task.componentName && (
-              <li>
-                <a className="js-task-filter" href="#" onClick={this.handleFilterClick}>
-                  <i className="spacer-right icon-filter icon-gray" />
-                  {translateWithParameters(
-                    'background_tasks.filter_by_component_x',
-                    task.componentName
-                  )}
-                </a>
-              </li>
-            )}
+              task.componentName && (
+                <li>
+                  <a className="js-task-filter" href="#" onClick={this.handleFilterClick}>
+                    <i className="spacer-right icon-filter icon-gray" />
+                    {translateWithParameters(
+                      'background_tasks.filter_by_component_x',
+                      task.componentName
+                    )}
+                  </a>
+                </li>
+              )}
             {canCancel && (
               <li>
                 <a className="js-task-cancel" href="#" onClick={this.handleCancelClick}>
index d94228bde20086cf22a08371c03719cefe63bc36..8d297463b7e65a615332353ad7bd6d2c4eff8f0a 100644 (file)
@@ -47,11 +47,11 @@ export default function TaskComponent({ task }: Props) {
       {task.branchType === 'LONG' && <LongLivingBranchIcon className="little-spacer-right" />}
 
       {!task.branchType &&
-      task.componentQualifier && (
-        <span className="little-spacer-right">
-          <QualifierIcon qualifier={task.componentQualifier} />
-        </span>
-      )}
+        task.componentQualifier && (
+          <span className="little-spacer-right">
+            <QualifierIcon qualifier={task.componentQualifier} />
+          </span>
+        )}
 
       {task.organization && <Organization organizationKey={task.organization} />}
 
index a3da79ab51f497d4fc1a83a246bb7e4d7eed9b84..60312ec89271c02246af2a831069b29828cfc187 100644 (file)
@@ -97,11 +97,11 @@ export default class Workers extends React.PureComponent<{}, State> {
     return (
       <div>
         {!loading &&
-        workerCount > 1 && (
-          <Tooltip overlay={translate('background_tasks.number_of_workers.warning')}>
-            <i className="icon-alert-warn little-spacer-right bt-workers-warning-icon" />
-          </Tooltip>
-        )}
+          workerCount > 1 && (
+            <Tooltip overlay={translate('background_tasks.number_of_workers.warning')}>
+              <i className="icon-alert-warn little-spacer-right bt-workers-warning-icon" />
+            </Tooltip>
+          )}
 
         {translate('background_tasks.number_of_workers')}
 
@@ -112,26 +112,26 @@ export default class Workers extends React.PureComponent<{}, State> {
         )}
 
         {!loading &&
-        canSetWorkerCount && (
-          <Tooltip overlay={translate('background_tasks.change_number_of_workers')}>
-            <a className="icon-edit spacer-left" href="#" onClick={this.handleChangeClick} />
-          </Tooltip>
-        )}
+          canSetWorkerCount && (
+            <Tooltip overlay={translate('background_tasks.change_number_of_workers')}>
+              <a className="icon-edit spacer-left" href="#" onClick={this.handleChangeClick} />
+            </Tooltip>
+          )}
 
         {!loading &&
-        !canSetWorkerCount && (
-          <span className="spacer-left">
-            <a className="link-no-underline" href="#" onClick={this.handleHelpClick}>
-              <HelpIcon className="text-text-bottom" fill={theme.gray80} />
-            </a>
-            <BubblePopupHelper
-              isOpen={this.state.noSupportPopup}
-              position="bottomright"
-              popup={<NoWorkersSupportPopup />}
-              togglePopup={this.toggleNoSupportPopup}
-            />
-          </span>
-        )}
+          !canSetWorkerCount && (
+            <span className="spacer-left">
+              <a className="link-no-underline" href="#" onClick={this.handleHelpClick}>
+                <HelpIcon className="text-text-bottom" fill={theme.gray80} />
+              </a>
+              <BubblePopupHelper
+                isOpen={this.state.noSupportPopup}
+                position="bottomright"
+                popup={<NoWorkersSupportPopup />}
+                togglePopup={this.toggleNoSupportPopup}
+              />
+            </span>
+          )}
 
         {formOpen && <WorkersForm onClose={this.closeForm} workerCount={this.state.workerCount} />}
       </div>
index 1d4854b74d26289d161960a8bc1d029c297ef936..b0849315a4e3c4481d1851fc2abd685c9cac10ae 100644 (file)
@@ -18,8 +18,8 @@
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  */
 import * as React from 'react';
-import Modal from 'react-modal';
-import * as Select from 'react-select';
+import * as Modal from 'react-modal';
+import Select from 'react-select';
 import { times } from 'lodash';
 import { setWorkerCount } from '../../../api/ce';
 import { translate } from '../../../helpers/l10n';
index 940fe3341da3ffd7d7fe19e986e35666811a46c8..4c86aa331423ac80e1d4c79de003bbced2e64625 100644 (file)
@@ -35,7 +35,7 @@ it('shows stack trace', () => {
   click(wrapper.find('.js-task-show-stacktrace'));
   expect(wrapper.find('Stacktrace')).toMatchSnapshot();
   wrapper.find('Stacktrace').prop<Function>('onClose')();
-  expect(wrapper.find('Stacktrace')).toMatchSnapshot();
+  expect(wrapper.find('Stacktrace').exists()).toBeFalsy();
 });
 
 it('shows scanner context', () => {
@@ -43,7 +43,7 @@ it('shows scanner context', () => {
   click(wrapper.find('.js-task-show-scanner-context'));
   expect(wrapper.find('ScannerContext')).toMatchSnapshot();
   wrapper.find('ScannerContext').prop<Function>('onClose')();
-  expect(wrapper.find('ScannerContext')).toMatchSnapshot();
+  expect(wrapper.find('ScannerContext').exists()).toBeFalsy();
 });
 
 function shallowRender(fields?: any, props?: any) {
index 791da5f34920fbcd67d2c418bffc45a5b5dac2d8..d456c84d89ec6f0ffb10e747364f98f65545fdf2 100644 (file)
@@ -12,7 +12,9 @@ exports[`renders 1`] = `
   overlayClassName="modal-overlay"
   parentSelector={[Function]}
   portalClassName="ReactModalPortal"
+  shouldCloseOnEsc={true}
   shouldCloseOnOverlayClick={true}
+  shouldFocusAfterRender={true}
 >
   <div
     className="modal-head"
index 983e455792af7c7539edc179071e0e1391af7273..77022e03f216cbe8f865950f06f0ff9620637075 100644 (file)
@@ -12,7 +12,9 @@ exports[`renders 1`] = `
   overlayClassName="modal-overlay"
   parentSelector={[Function]}
   portalClassName="ReactModalPortal"
+  shouldCloseOnEsc={true}
   shouldCloseOnOverlayClick={true}
+  shouldFocusAfterRender={true}
 >
   <div
     className="modal-head"
index 9de3ec891a0e6368b8e000b81705b32ae4cadf9e..aabe0783b3db34269ce61df4b6d8f13b2467a26f 100644 (file)
@@ -251,8 +251,6 @@ exports[`shows scanner context 1`] = `
 />
 `;
 
-exports[`shows scanner context 2`] = `undefined`;
-
 exports[`shows stack trace 1`] = `
 <Stacktrace
   onClose={[Function]}
@@ -268,5 +266,3 @@ exports[`shows stack trace 1`] = `
   }
 />
 `;
-
-exports[`shows stack trace 2`] = `undefined`;
index 8ff615ea5e07e16eb39a22f0648f963fcd29a665..379c4e1d9b17be9b5d83e0ea45a9135d41b08062 100644 (file)
@@ -12,7 +12,9 @@ exports[`changes select 1`] = `
   overlayClassName="modal-overlay"
   parentSelector={[Function]}
   portalClassName="ReactModalPortal"
+  shouldCloseOnEsc={true}
   shouldCloseOnOverlayClick={true}
+  shouldFocusAfterRender={true}
 >
   <header
     className="modal-head"
@@ -38,6 +40,7 @@ exports[`changes select 1`] = `
         clearRenderer={[Function]}
         clearValueText="Clear value"
         clearable={false}
+        closeOnSelect={true}
         deleteRemoves={true}
         delimiter=","
         disabled={false}
@@ -58,6 +61,8 @@ exports[`changes select 1`] = `
         onBlurResetsInput={true}
         onChange={[Function]}
         onCloseResetsInput={true}
+        onSelectResetsInput={true}
+        openOnClick={true}
         optionComponent={[Function]}
         options={
           Array [
@@ -155,7 +160,9 @@ exports[`changes select 2`] = `
   overlayClassName="modal-overlay"
   parentSelector={[Function]}
   portalClassName="ReactModalPortal"
+  shouldCloseOnEsc={true}
   shouldCloseOnOverlayClick={true}
+  shouldFocusAfterRender={true}
 >
   <header
     className="modal-head"
@@ -181,6 +188,7 @@ exports[`changes select 2`] = `
         clearRenderer={[Function]}
         clearValueText="Clear value"
         clearable={false}
+        closeOnSelect={true}
         deleteRemoves={true}
         delimiter=","
         disabled={false}
@@ -201,6 +209,8 @@ exports[`changes select 2`] = `
         onBlurResetsInput={true}
         onChange={[Function]}
         onCloseResetsInput={true}
+        onSelectResetsInput={true}
+        openOnClick={true}
         optionComponent={[Function]}
         options={
           Array [
index 2fd66d70ad7bfd032c57b734a11c0e1bd13bef39..13718a6f52015e57c724abad4b84e8c06c9d905e 100644 (file)
@@ -223,21 +223,21 @@ export default class App extends React.PureComponent<Props, State> {
           )}
 
           {sourceViewer === undefined &&
-          components !== undefined && (
-            <div className={componentsClassName}>
-              <Components
-                baseComponent={baseComponent}
-                branch={branchName}
-                components={components}
-                rootComponent={component}
-              />
-            </div>
-          )}
+            components !== undefined && (
+              <div className={componentsClassName}>
+                <Components
+                  baseComponent={baseComponent}
+                  branch={branchName}
+                  components={components}
+                  rootComponent={component}
+                />
+              </div>
+            )}
 
           {sourceViewer === undefined &&
-          components !== undefined && (
-            <ListFooter count={components.length} total={total} loadMore={this.handleLoadMore} />
-          )}
+            components !== undefined && (
+              <ListFooter count={components.length} total={total} loadMore={this.handleLoadMore} />
+            )}
 
           {sourceViewer !== undefined && (
             <div className="spacer-top">
index a33340530ea1d96b1df0b45122c8b0a223670dc5..e5a483dcac8aa457d873b8aa261152c106bb5470 100644 (file)
@@ -182,20 +182,20 @@ export default class App extends React.PureComponent {
           />
         )}
         {metric == null &&
-        hasBubbleChart(query.metric) && (
-          <MeasureOverviewContainer
-            branch={branch && getBranchName(branch)}
-            className="layout-page-main"
-            rootComponent={component}
-            currentUser={this.props.currentUser}
-            domain={query.metric}
-            leakPeriod={leakPeriod}
-            metrics={metrics}
-            router={this.props.router}
-            selected={query.selected}
-            updateQuery={this.updateQuery}
-          />
-        )}
+          hasBubbleChart(query.metric) && (
+            <MeasureOverviewContainer
+              branch={branch && getBranchName(branch)}
+              className="layout-page-main"
+              rootComponent={component}
+              currentUser={this.props.currentUser}
+              domain={query.metric}
+              leakPeriod={leakPeriod}
+              metrics={metrics}
+              router={this.props.router}
+              selected={query.selected}
+              updateQuery={this.updateQuery}
+            />
+          )}
       </div>
     );
   }
index 12f3616697daf89f5b894b3db4d9afd41a363a54..b27e5ad74c67de410bff73f7ee0e38bcef83778f 100644 (file)
@@ -295,12 +295,12 @@ export default class MeasureContent extends React.PureComponent {
                 rootComponent={rootComponent}
               />
               {component.key !== rootComponent.key &&
-              isLoggedIn && (
-                <MeasureFavoriteContainer
-                  component={component.key}
-                  className="measure-favorite spacer-right"
-                />
-              )}
+                isLoggedIn && (
+                  <MeasureFavoriteContainer
+                    component={component.key}
+                    className="measure-favorite spacer-right"
+                  />
+                )}
               {!isFile && (
                 <MeasureViewSelect
                   className="measure-view-select"
@@ -324,19 +324,19 @@ export default class MeasureContent extends React.PureComponent {
           <MetricNotFound className="layout-page-main-inner measure-details-content" />
         )}
         {metric != null &&
-        measure != null && (
-          <div className="layout-page-main-inner measure-details-content">
-            <MeasureHeader
-              branch={branch}
-              component={component}
-              components={this.state.components}
-              leakPeriod={this.props.leakPeriod}
-              measure={measure}
-              secondaryMeasure={this.props.secondaryMeasure}
-            />
-            {isFileType(component) ? this.renderCode() : this.renderMeasure()}
-          </div>
-        )}
+          measure != null && (
+            <div className="layout-page-main-inner measure-details-content">
+              <MeasureHeader
+                branch={branch}
+                component={component}
+                components={this.state.components}
+                leakPeriod={this.props.leakPeriod}
+                measure={measure}
+                secondaryMeasure={this.props.secondaryMeasure}
+              />
+              {isFileType(component) ? this.renderCode() : this.renderMeasure()}
+            </div>
+          )}
       </div>
     );
   }
index 695c68ea26beb42ce21cf224ecbd4c2061405b2f..bbbded8e6c1177a4eec5da7d722f6571733e6368 100644 (file)
@@ -80,27 +80,27 @@ export default function MeasureHeader(props /*: Props*/) {
         </div>
       </div>
       {secondaryMeasure &&
-      secondaryMeasure.metric.key === 'ncloc_language_distribution' && (
-        <div className="measure-details-secondary">
-          <LanguageDistributionContainer
-            alignTicks={true}
-            distribution={secondaryMeasure.value}
-            width={260}
-          />
-        </div>
-      )}
+        secondaryMeasure.metric.key === 'ncloc_language_distribution' && (
+          <div className="measure-details-secondary">
+            <LanguageDistributionContainer
+              alignTicks={true}
+              distribution={secondaryMeasure.value}
+              width={260}
+            />
+          </div>
+        )}
       {secondaryMeasure &&
-      secondaryMeasure.metric.key === 'function_complexity_distribution' && (
-        <div className="measure-details-secondary">
-          <ComplexityDistribution distribution={secondaryMeasure.value} of="function" />
-        </div>
-      )}
+        secondaryMeasure.metric.key === 'function_complexity_distribution' && (
+          <div className="measure-details-secondary">
+            <ComplexityDistribution distribution={secondaryMeasure.value} of="function" />
+          </div>
+        )}
       {secondaryMeasure &&
-      secondaryMeasure.metric.key === 'file_complexity_distribution' && (
-        <div className="measure-details-secondary">
-          <ComplexityDistribution distribution={secondaryMeasure.value} of="file" />
-        </div>
-      )}
+        secondaryMeasure.metric.key === 'file_complexity_distribution' && (
+          <div className="measure-details-secondary">
+            <ComplexityDistribution distribution={secondaryMeasure.value} of="file" />
+          </div>
+        )}
     </div>
   );
 }
index 91d5cf8d669d74ba2262df8afb642e427f5371c9..8dd310c8a1070ccc0083c6ee0a69aaa9ca8c6c30 100644 (file)
@@ -152,12 +152,12 @@ export default class MeasureOverview extends React.PureComponent {
                 rootComponent={rootComponent}
               />
               {component.key !== rootComponent.key &&
-              isLoggedIn && (
-                <MeasureFavoriteContainer
-                  component={component.key}
-                  className="measure-favorite spacer-right"
-                />
-              )}
+                isLoggedIn && (
+                  <MeasureFavoriteContainer
+                    component={component.key}
+                    className="measure-favorite spacer-right"
+                  />
+                )}
               <PageActions
                 current={this.state.components.length}
                 loading={this.props.loading}
index 24354987bd69a7d6eab58423287d2c516190694d..0477a1498770467f2bb00eaac226a9e624127419 100644 (file)
@@ -6,6 +6,7 @@ exports[`should render correctly 1`] = `
   id="component-measures"
 >
   <HelmetWrapper
+    defer={true}
     encodeSpecialCharacters={true}
     title="layout.measures"
   />
index 7ab0276dde246f7cf4a74eb51ca924329e6afc4d..c007678dbabd3059b835a67c85a9316441797544 100644 (file)
@@ -12,6 +12,7 @@ exports[`should display correctly with treemap option 1`] = `
   clearRenderer={[Function]}
   clearValueText="Clear value"
   clearable={false}
+  closeOnSelect={true}
   deleteRemoves={true}
   delimiter=","
   disabled={false}
@@ -32,6 +33,8 @@ exports[`should display correctly with treemap option 1`] = `
   onBlurResetsInput={true}
   onChange={[Function]}
   onCloseResetsInput={true}
+  onSelectResetsInput={true}
+  openOnClick={true}
   optionComponent={[Function]}
   options={
     Array [
@@ -39,30 +42,30 @@ exports[`should display correctly with treemap option 1`] = `
         "icon": <ListIcon />,
         "label": <div>
           <ListIcon
-                className="little-spacer-right"
+            className="little-spacer-right"
           />
           component_measures.tab.list
-    </div>,
+        </div>,
         "value": "list",
       },
       Object {
         "icon": <TreeIcon />,
         "label": <div>
           <TreeIcon
-                className="little-spacer-right"
+            className="little-spacer-right"
           />
           component_measures.tab.tree
-    </div>,
+        </div>,
         "value": "tree",
       },
       Object {
         "icon": <TreemapIcon />,
         "label": <div>
           <TreemapIcon
-                className="little-spacer-right"
+            className="little-spacer-right"
           />
           component_measures.tab.treemap
-    </div>,
+        </div>,
         "value": "treemap",
       },
     ]
index 1d7be5e5b3b73fb664429d18ed15c08fa0f80f3f..702dd80038e2b69b409d78403ce0c0cfb5909369 100644 (file)
@@ -131,13 +131,13 @@ export default class ListView extends React.PureComponent {
           selectedComponent={this.props.selectedKey}
         />
         {this.props.paging &&
-        this.props.components.length > 0 && (
-          <ListFooter
-            count={this.props.components.length}
-            total={this.props.paging.total}
-            loadMore={this.props.fetchMore}
-          />
-        )}
+          this.props.components.length > 0 && (
+            <ListFooter
+              count={this.props.components.length}
+              total={this.props.paging.total}
+              loadMore={this.props.fetchMore}
+            />
+          )}
       </div>
     );
   }
index b836d061c7dee78c36254c89edde7ac46734edcc..875f750d7db2a6b6e90f678cc13ef0443defa8e9 100644 (file)
@@ -202,7 +202,7 @@ export default class TreeMapView extends React.PureComponent {
           </li>
           <li className="pull-right">{this.renderLegend()}</li>
         </ul>
-        <AutoSizer>
+        <AutoSizer disableHeight={true}>
           {({ width }) => (
             <TreeMap
               items={treemapItems}
index fd5ddec46a2061d1a004809c4dff474308a726a3..9c88f409c2deb303dd84659c4c8ca08355aac2e8 100644 (file)
@@ -13,6 +13,7 @@ exports[`should display facet item list 1`] = `
       active={false}
       disabled={false}
       halfWidth={false}
+      key="Reliability"
       name={
         <span
           id="measure-overview-Reliability-name"
@@ -30,6 +31,7 @@ exports[`should display facet item list 1`] = `
     />
     <span
       className="facet search-navigator-facet facet-category"
+      key="new_code_category"
     >
       <span
         className="facet-name"
@@ -41,6 +43,7 @@ exports[`should display facet item list 1`] = `
       active={false}
       disabled={false}
       halfWidth={false}
+      key="new_bugs"
       name={
         <span
           className="big-spacer-left"
@@ -75,6 +78,7 @@ exports[`should display facet item list 1`] = `
     />
     <span
       className="facet search-navigator-facet facet-category"
+      key="overall_category"
     >
       <span
         className="facet-name"
@@ -86,6 +90,7 @@ exports[`should display facet item list 1`] = `
       active={false}
       disabled={false}
       halfWidth={false}
+      key="bugs"
       name={
         <span
           className="big-spacer-left"
@@ -140,6 +145,7 @@ exports[`should display facet item list with bugs selected 1`] = `
       active={false}
       disabled={false}
       halfWidth={false}
+      key="Reliability"
       name={
         <span
           id="measure-overview-Reliability-name"
@@ -157,6 +163,7 @@ exports[`should display facet item list with bugs selected 1`] = `
     />
     <span
       className="facet search-navigator-facet facet-category"
+      key="new_code_category"
     >
       <span
         className="facet-name"
@@ -168,6 +175,7 @@ exports[`should display facet item list with bugs selected 1`] = `
       active={false}
       disabled={false}
       halfWidth={false}
+      key="new_bugs"
       name={
         <span
           className="big-spacer-left"
@@ -202,6 +210,7 @@ exports[`should display facet item list with bugs selected 1`] = `
     />
     <span
       className="facet search-navigator-facet facet-category"
+      key="overall_category"
     >
       <span
         className="facet-name"
@@ -213,6 +222,7 @@ exports[`should display facet item list with bugs selected 1`] = `
       active={true}
       disabled={false}
       halfWidth={false}
+      key="bugs"
       name={
         <span
           className="big-spacer-left"
index 2472444bb70692247b53257e473dbdc4215adc3a..2a3aab950cb6a13b4d128b1a92f4733930d74d1a 100644 (file)
@@ -49,6 +49,7 @@ exports[`should display two facets 1`] = `
         "name": "Coverage",
       }
     }
+    key="Coverage"
     onChange={[Function]}
     onToggle={[Function]}
     open={false}
@@ -78,6 +79,7 @@ exports[`should display two facets 1`] = `
         "name": "Duplications",
       }
     }
+    key="Duplications"
     onChange={[Function]}
     onToggle={[Function]}
     open={true}
index 864ca2b5d09adadc23d657b0b47796ab397a806f..94b226cb89dd19f17eaa6ca643eb9a93728351f6 100644 (file)
@@ -806,9 +806,13 @@ export default class App extends React.PureComponent {
           selectedLocationIndex={this.state.selectedLocationIndex}
         />
         {paging != null &&
-        paging.total > 0 && (
-          <ListFooter total={paging.total} count={issues.length} loadMore={this.fetchMoreIssues} />
-        )}
+          paging.total > 0 && (
+            <ListFooter
+              total={paging.total}
+              count={issues.length}
+              loadMore={this.fetchMoreIssues}
+            />
+          )}
       </div>
     );
   }
index b086fb5a12534ac65b76e93a2dcdd58b0ecc53f6..2233278530682cd21740ebd728a394f319e7953e 100644 (file)
@@ -61,15 +61,15 @@ export default function ComponentBreadcrumbs({ branch, component, issue, organiz
       )}
 
       {displaySubProject &&
-      issue.subProject !== undefined &&
-      issue.subProjectName !== undefined && (
-        <span title={issue.subProjectName}>
-          <Link to={getProjectUrl(issue.subProject, branch)} className="link-no-underline">
-            {limitComponentName(issue.subProjectName)}
-          </Link>
-          <span className="slash-separator" />
-        </span>
-      )}
+        issue.subProject !== undefined &&
+        issue.subProjectName !== undefined && (
+          <span title={issue.subProjectName}>
+            <Link to={getProjectUrl(issue.subProject, branch)} className="link-no-underline">
+              {limitComponentName(issue.subProjectName)}
+            </Link>
+            <span className="slash-separator" />
+          </span>
+        )}
 
       <Link to={getProjectUrl(issue.component, branch)} className="link-no-underline">
         <span title={issue.componentLongName}>{collapsePath(issue.componentLongName)}</span>
index b66e4a8d0974cac28cfada00d7ad9c25593e2462..f9973b06e0c456a75c56aeebfc76aaf09fba5004 100644 (file)
@@ -6,6 +6,7 @@ exports[`should render one flow 1`] = `
 >
   <ConciseIssueLocationBadge
     count={3}
+    key="0"
     onClick={[Function]}
     selected={false}
   />
@@ -18,6 +19,7 @@ exports[`should render secondary locations 1`] = `
 >
   <ConciseIssueLocationBadge
     count={3}
+    key="-1"
     selected={true}
   />
 </div>
@@ -29,16 +31,19 @@ exports[`should render several flows 1`] = `
 >
   <ConciseIssueLocationBadge
     count={3}
+    key="0"
     onClick={[Function]}
     selected={false}
   />
   <ConciseIssueLocationBadge
     count={2}
+    key="1"
     onClick={[Function]}
     selected={false}
   />
   <ConciseIssueLocationBadge
     count={3}
+    key="2"
     onClick={[Function]}
     selected={false}
   />
index 1c8a20f37928750a66a1c80f58782466aa468cd1..b6bc2b9924214d5cc997b38fda8f9b52b6c8265f 100644 (file)
@@ -8,6 +8,7 @@ exports[`should render 1`] = `
         "key": "foo",
       }
     }
+    key="foo"
     previousIssue={null}
     scroll={[Function]}
     selected={false}
@@ -18,6 +19,7 @@ exports[`should render 1`] = `
         "key": "bar",
       }
     }
+    key="bar"
     previousIssue={
       Object {
         "key": "foo",
index d6d4ef6ac7b96666a454680fc07db7466de9485c..d384037257b435a180a2ce36f2ae73743c81547a 100644 (file)
@@ -23,6 +23,7 @@ exports[`should render 1`] = `
       active={false}
       disabled={false}
       halfWidth={false}
+      key="foo"
       name={
         <span>
           <Connect(Avatar)
@@ -42,6 +43,7 @@ exports[`should render 1`] = `
       active={false}
       disabled={false}
       halfWidth={false}
+      key="bar"
       name="bar"
       onClick={[Function]}
       stat="7"
@@ -107,6 +109,7 @@ exports[`should select unassigned 1`] = `
       active={false}
       disabled={false}
       halfWidth={false}
+      key="foo"
       name={
         <span>
           <Connect(Avatar)
@@ -126,6 +129,7 @@ exports[`should select unassigned 1`] = `
       active={false}
       disabled={false}
       halfWidth={false}
+      key="bar"
       name="bar"
       onClick={[Function]}
       stat="7"
@@ -167,6 +171,7 @@ exports[`should select user 1`] = `
       active={true}
       disabled={false}
       halfWidth={false}
+      key="foo"
       name={
         <span>
           <Connect(Avatar)
@@ -186,6 +191,7 @@ exports[`should select user 1`] = `
       active={false}
       disabled={false}
       halfWidth={false}
+      key="bar"
       name="bar"
       onClick={[Function]}
       stat="7"
index 952e8dc78c165d1e4f1f407cb967af06932e1502..bd62c3de370a087893ba6976e17fda975cf5b6d8 100644 (file)
@@ -15,9 +15,9 @@ exports[`should display an error message 1`] = `
           "url": <a
             href="https://redirect.sonarsource.com/editions/editions.html"
             target="_blank"
-        >
+          >
             SonarSource.com
-        </a>,
+          </a>,
         }
       }
     />
@@ -56,6 +56,7 @@ exports[`should display the edition boxes correctly 2`] = `
       }
     }
     isDowngrade={true}
+    key="comunity"
     onInstall={[Function]}
     onUninstall={[Function]}
   />
@@ -80,6 +81,7 @@ exports[`should display the edition boxes correctly 2`] = `
       }
     }
     isDowngrade={false}
+    key="developer"
     onInstall={[Function]}
     onUninstall={[Function]}
   />
index b30e1e22d36b9fc7358b96ceb3316652807553b8..7e8801a1e0c99943af7442f3cf5256f14e76f3ce 100644 (file)
@@ -21,7 +21,7 @@ exports[`should display pending actions 1`] = `
             Object {
               "nb": <strong>
                 2
-            </strong>,
+              </strong>,
             }
           }
         />
@@ -34,7 +34,7 @@ exports[`should display pending actions 1`] = `
             Object {
               "nb": <strong>
                 1
-            </strong>,
+              </strong>,
             }
           }
         />
index abab7c84ed4a8858a6f6c9f1945936498702e502..ee86ac1159617e4c69b9311378efc61ec80af498 100644 (file)
@@ -18,7 +18,7 @@
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  */
 import * as React from 'react';
-import Modal from 'react-modal';
+import * as Modal from 'react-modal';
 import LicenseEditionSet from './LicenseEditionSet';
 import { Edition, EditionStatus, applyLicense } from '../../../api/marketplace';
 import { translate, translateWithParameters } from '../../../helpers/l10n';
@@ -108,11 +108,9 @@ export default class LicenseEditionForm extends React.PureComponent<Props, State
           {submitting && <i className="spinner spacer-right" />}
           {status && (
             <button className="js-confirm" onClick={this.handleConfirmClick} disabled={submitting}>
-              {status === 'AUTOMATIC_INSTALL' ? (
-                translate('marketplace.install')
-              ) : (
-                translate('save')
-              )}
+              {status === 'AUTOMATIC_INSTALL'
+                ? translate('marketplace.install')
+                : translate('save')}
             </button>
           )}
           <a className="js-modal-close" href="#" onClick={this.handleCancelClick}>
index 501631edadc921a176aca2b730c7109fc06c571c..df898dbdbeb8d22252c42115891744ec48a540bf 100644 (file)
@@ -91,19 +91,19 @@ export default class PluginActions extends React.PureComponent<Props, State> {
           </p>
         )}
         {isPluginInstalled(plugin) &&
-        plugin.updates &&
-        plugin.updates.length > 0 && (
-          <div className="spacer-top button-group">
-            {plugin.updates.map((update, idx) => (
-              <PluginUpdateButton
-                key={idx}
-                onClick={this.handleUpdate}
-                update={update}
-                disabled={this.state.loading}
-              />
-            ))}
-          </div>
-        )}
+          plugin.updates &&
+          plugin.updates.length > 0 && (
+            <div className="spacer-top button-group">
+              {plugin.updates.map((update, idx) => (
+                <PluginUpdateButton
+                  key={idx}
+                  onClick={this.handleUpdate}
+                  update={update}
+                  disabled={this.state.loading}
+                />
+              ))}
+            </div>
+          )}
       </div>
     );
   }
@@ -119,25 +119,25 @@ export default class PluginActions extends React.PureComponent<Props, State> {
     return (
       <div className="js-actions">
         {isPluginAvailable(plugin) &&
-        plugin.termsAndConditionsUrl && (
-          <p className="little-spacer-bottom">
-            <Checkbox
-              checked={this.state.acceptTerms}
-              className="js-terms"
-              id={'plugin-terms-' + plugin.key}
-              onCheck={this.handleTermsCheck}>
-              <label className="little-spacer-left" htmlFor={'plugin-terms-' + plugin.key}>
-                {translate('marketplace.i_accept_the')}
-              </label>
-            </Checkbox>
-            <a
-              className="js-plugin-terms nowrap little-spacer-left"
-              href={plugin.termsAndConditionsUrl}
-              target="_blank">
-              {translate('marketplace.terms_and_conditions')}
-            </a>
-          </p>
-        )}
+          plugin.termsAndConditionsUrl && (
+            <p className="little-spacer-bottom">
+              <Checkbox
+                checked={this.state.acceptTerms}
+                className="js-terms"
+                id={'plugin-terms-' + plugin.key}
+                onCheck={this.handleTermsCheck}>
+                <label className="little-spacer-left" htmlFor={'plugin-terms-' + plugin.key}>
+                  {translate('marketplace.i_accept_the')}
+                </label>
+              </Checkbox>
+              <a
+                className="js-plugin-terms nowrap little-spacer-left"
+                href={plugin.termsAndConditionsUrl}
+                target="_blank">
+                {translate('marketplace.terms_and_conditions')}
+              </a>
+            </p>
+          )}
         {loading && <i className="spinner spacer-right" />}
         {isPluginInstalled(plugin) && (
           <div className="display-inlin-block">
index 37b76edc83e4a0758a0cfe634bdd172dbb8983b6..1af1ee86295a3a1b72431e13b69f2351d4015dfc 100644 (file)
@@ -18,7 +18,7 @@
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  */
 import * as React from 'react';
-import Modal from 'react-modal';
+import * as Modal from 'react-modal';
 import { Edition, EditionStatus, uninstallEdition } from '../../../api/marketplace';
 import { translate, translateWithParameters } from '../../../helpers/l10n';
 
index 9e07155c2924b563661a27bdbfe560a5601b9c3f..bd4aa78eb6adce9df0332d99e89672bf072b2d22 100644 (file)
@@ -42,7 +42,9 @@ exports[`should display correctly 1`] = `
   overlayClassName="modal-overlay"
   parentSelector={[Function]}
   portalClassName="ReactModalPortal"
+  shouldCloseOnEsc={true}
   shouldCloseOnOverlayClick={true}
+  shouldFocusAfterRender={true}
 >
   <header
     className="modal-head"
index 5c6e0ab7138409441b0b00e2c43fda23e31e8481..5a77d6923b22d679eacde5d045fbe124ee8f822b 100644 (file)
@@ -15,9 +15,9 @@ exports[`should display the license field 1`] = `
         Object {
           "license": <span
             className="js-plugin-license"
-        >
+          >
             SonarSource license
-        </span>,
+          </span>,
         }
       }
     />
index 507f7e4fe73a0ef3711f88174c187f9bea0150b4..05cefbe37c2ea45cfa58830c04ddc2811695cb43 100644 (file)
@@ -12,7 +12,9 @@ exports[`should display correctly 1`] = `
   overlayClassName="modal-overlay"
   parentSelector={[Function]}
   portalClassName="ReactModalPortal"
+  shouldCloseOnEsc={true}
   shouldCloseOnOverlayClick={true}
+  shouldFocusAfterRender={true}
 >
   <header
     className="modal-head"
index a472b00b7985bdd559e3f170b0ad417a5853edaf..4bc29637672f2e1a486b09559e79524e4d00592f 100644 (file)
@@ -6,6 +6,7 @@ exports[`should render a list of members of an organization 1`] = `
 >
   <tbody>
     <MembersListItem
+      key="admin"
       member={
         Object {
           "avatar": "",
@@ -22,6 +23,7 @@ exports[`should render a list of members of an organization 1`] = `
       }
     />
     <MembersListItem
+      key="john"
       member={
         Object {
           "avatar": "7daf6c79d4802916d83f6266e24850af",
index 508cdecb71b732eb3dfe21d2830923f1dbefd7bd..b34a9e508da4a7e884c5c73d8d383dfdb53e045a 100644 (file)
@@ -5,6 +5,7 @@ exports[`smoke test 1`] = `
   className="page page-limited"
 >
   <HelmetWrapper
+    defer={true}
     encodeSpecialCharacters={true}
     title="organization.delete"
   />
@@ -39,6 +40,7 @@ exports[`smoke test 2`] = `
   className="page page-limited"
 >
   <HelmetWrapper
+    defer={true}
     encodeSpecialCharacters={true}
     title="organization.delete"
   />
@@ -75,7 +77,9 @@ exports[`smoke test 2`] = `
       overlayClassName="modal-overlay"
       parentSelector={[Function]}
       portalClassName="ReactModalPortal"
+      shouldCloseOnEsc={true}
       shouldCloseOnOverlayClick={true}
+      shouldFocusAfterRender={true}
     >
       <header
         className="modal-head"
@@ -122,6 +126,7 @@ exports[`smoke test 3`] = `
   className="page page-limited"
 >
   <HelmetWrapper
+    defer={true}
     encodeSpecialCharacters={true}
     title="organization.delete"
   />
@@ -158,7 +163,9 @@ exports[`smoke test 3`] = `
       overlayClassName="modal-overlay"
       parentSelector={[Function]}
       portalClassName="ReactModalPortal"
+      shouldCloseOnEsc={true}
       shouldCloseOnOverlayClick={true}
+      shouldFocusAfterRender={true}
     >
       <header
         className="modal-head"
index 6c13ca615a218aa62f2a06f0c364dffa94fc07fa..9dc712473f27df1ece253944eabd3174fab0279c 100644 (file)
@@ -5,6 +5,7 @@ exports[`smoke test 1`] = `
   className="page page-limited"
 >
   <HelmetWrapper
+    defer={true}
     encodeSpecialCharacters={true}
     title="organization.edit"
   />
@@ -137,6 +138,7 @@ exports[`smoke test 2`] = `
   className="page page-limited"
 >
   <HelmetWrapper
+    defer={true}
     encodeSpecialCharacters={true}
     title="organization.edit"
   />
@@ -284,6 +286,7 @@ exports[`smoke test 3`] = `
   className="page page-limited"
 >
   <HelmetWrapper
+    defer={true}
     encodeSpecialCharacters={true}
     title="organization.edit"
   />
index 17ab36b754027d0e029d2ff3bbc1dadf382159e5..9a13da1aa2137bfba1064a56e4b836cb6100cc56 100644 (file)
@@ -5,6 +5,7 @@ exports[`should not render actions for non admin 1`] = `
   className="page page-limited"
 >
   <HelmetWrapper
+    defer={true}
     encodeSpecialCharacters={true}
     title="organization.members.page"
   />
@@ -55,6 +56,7 @@ exports[`should render actions for admin 1`] = `
   className="page page-limited"
 >
   <HelmetWrapper
+    defer={true}
     encodeSpecialCharacters={true}
     title="organization.members.page"
   />
index f63164ef1e0e2b936cb58cb9a0d20d59b9ba0ac3..350cc9b5d80518716c8320aa7a3a9af3a2a5ce2e 100644 (file)
@@ -16,6 +16,7 @@ exports[`smoke test 2`] = `
 <div>
   <HelmetWrapper
     defaultTitle="Foo"
+    defer={true}
     encodeSpecialCharacters={true}
     titleTemplate="%s - Foo"
   />
index b00ff229314009978df06cf21b9bb2f51d85ab17..96d42f260975f442eb9ff5a2758de17a08d971d9 100644 (file)
@@ -24,7 +24,9 @@ exports[`should render and open the modal 2`] = `
     overlayClassName="modal-overlay"
     parentSelector={[Function]}
     portalClassName="ReactModalPortal"
+    shouldCloseOnEsc={true}
     shouldCloseOnOverlayClick={true}
+    shouldFocusAfterRender={true}
   >
     <header
       className="modal-head"
index 3f450483d133f320ccaf6969c711a5eb9c5afb78..751d905c910320291cf817909e09a4f7999e6286 100644 (file)
@@ -94,7 +94,9 @@ exports[`should render and open the modal 2`] = `
     overlayClassName="modal-overlay"
     parentSelector={[Function]}
     portalClassName="ReactModalPortal"
+    shouldCloseOnEsc={true}
     shouldCloseOnOverlayClick={true}
+    shouldFocusAfterRender={true}
   >
     <header
       className="modal-head"
@@ -126,6 +128,7 @@ exports[`should render and open the modal 2`] = `
                 "name": "professionals",
               }
             }
+            key="7"
             onCheck={[Function]}
           />
           <OrganizationGroupCheckbox
@@ -138,6 +141,7 @@ exports[`should render and open the modal 2`] = `
                 "name": "pull-request-analysers",
               }
             }
+            key="11"
             onCheck={[Function]}
           />
           <OrganizationGroupCheckbox
@@ -150,6 +154,7 @@ exports[`should render and open the modal 2`] = `
                 "name": "sonar-administrators",
               }
             }
+            key="1"
             onCheck={[Function]}
           />
         </ul>
index 5b298e526bad7ed5440d3c5435295e87a6d59673..b1b8bdb072d61592059cbd3161183a18a48fbf1f 100644 (file)
@@ -39,7 +39,9 @@ exports[`should render and open the modal 2`] = `
     overlayClassName="modal-overlay"
     parentSelector={[Function]}
     portalClassName="ReactModalPortal"
+    shouldCloseOnEsc={true}
     shouldCloseOnOverlayClick={true}
+    shouldFocusAfterRender={true}
   >
     <header
       className="modal-head"
index cb842597822d143fbad8714c359a16cef0ea630b..f7c73f3b9fbd5580e452c097e9f49a01b1f58a63 100644 (file)
@@ -25,14 +25,18 @@ exports[`renders 2`] = `
     <ul
       className="text-left"
     >
-      <li>
+      <li
+        key="foo"
+      >
         Foo
         : 
         <DateTooltipFormatter
           date="2017-01-01T11:39:03+0100"
         />
       </li>
-      <li>
+      <li
+        key="bar"
+      >
         Bar
         : 
         <DateTooltipFormatter
index 33bc4e28c18612060bc5447a9cee0c00eb83152b..a9296187266dfce71b2b502b3f53058f65e34352 100644 (file)
@@ -25,6 +25,7 @@ exports[`should sort the events with version first 1`] = `
           "name": "6.5-SNAPSHOT",
         }
       }
+      key="2"
     />
     <Event
       event={
@@ -34,6 +35,7 @@ exports[`should sort the events with version first 1`] = `
           "name": "test",
         }
       }
+      key="1"
     />
   </div>
 </li>
index bc22697f5f33d2c772d5545352e64db1f99464ec..fc0fe817dc1de8f400d8edec2e895c83b51cc84b 100644 (file)
@@ -18,7 +18,7 @@
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  */
 /* eslint-disable import/order, import/first */
-import * as React from 'react';
+import React from 'react';
 import { mount, shallow } from 'enzyme';
 import MetaTagsSelector from '../MetaTagsSelector';
 
index d88d0e76e977b9a412e78e0ae573b202564f349a..bc49256f055de7aee5a3cbd35f1c09e6ecdf51ce 100644 (file)
@@ -155,11 +155,11 @@ export default class QualityGateCondition extends React.PureComponent {
             {metric.name}
           </div>
           {!isDiff &&
-          condition.period != null && (
-            <div className="overview-quality-gate-condition-period">
-              {translate('quality_gates.conditions.leak')}
-            </div>
-          )}
+            condition.period != null && (
+              <div className="overview-quality-gate-condition-period">
+                {translate('quality_gates.conditions.leak')}
+              </div>
+            )}
           <div className="overview-quality-gate-threshold">
             {operator} {formatMeasure(threshold, metric.type)}
           </div>
index 326b9ecefb11ea8f6696db24911915d9361cd53c..5a7f39cf4d9abad28b8a4b62c49bb8822a7c621c 100644 (file)
@@ -34,6 +34,7 @@ exports[`renders 2`] = `
     id="overview-quality-gate-conditions-list"
   >
     <ApplicationQualityGateProject
+      key="project1"
       metrics={Object {}}
       project={
         Object {
@@ -45,6 +46,7 @@ exports[`renders 2`] = `
       }
     />
     <ApplicationQualityGateProject
+      key="project3"
       metrics={Object {}}
       project={
         Object {
index 7538c3934a6516ad91c6712f500d6e0822cacfb5..64d2bf86cfb68d35e4d9b027f42c8f1bd4d99a63 100644 (file)
@@ -26,6 +26,7 @@ exports[`renders 1`] = `
     >
       <li
         className="is-on-leak"
+        key="new_coverage"
       >
         <span
           className="text-limited"
@@ -46,6 +47,7 @@ exports[`renders 1`] = `
       </li>
       <li
         className=""
+        key="bugs"
       >
         <span
           className="text-limited"
@@ -66,6 +68,7 @@ exports[`renders 1`] = `
       </li>
       <li
         className=""
+        key="bugs"
       >
         <span
           className="text-limited"
index 5802a33d217dc4446269bc9cb42a6510b6739406..4ab52668b98e0208e6c568d2e96db6e546aab3af 100644 (file)
@@ -360,9 +360,9 @@ export default class App extends React.PureComponent {
             visibility={this.props.component.visibility}
           />
           {this.props.component.qualifier === 'TRK' &&
-          !canTurnToPrivate && (
-            <UpgradeOrganizationBox organization={this.props.component.organization} />
-          )}
+            !canTurnToPrivate && (
+              <UpgradeOrganizationBox organization={this.props.component.organization} />
+            )}
           {this.state.disclaimer && (
             <PublicProjectDisclaimer
               component={this.props.component}
index 14c6018180f82ae71597b5543e603072265a4651..0fdb556893166e6b052b3bc8cce4f27adfaa5546 100644 (file)
@@ -83,12 +83,14 @@ export default class SearchForm extends React.PureComponent {
             onChange={this.handleSearch.bind(this)}
           />
           {query.length > 0 &&
-          query.length < 3 && (
-            <div className="search-box-input-note tooltip bottom fade in">
-              <div className="tooltip-inner">{translateWithParameters('select2.tooShort', 3)}</div>
-              <div className="tooltip-arrow" style={{ left: 23 }} />
-            </div>
-          )}
+            query.length < 3 && (
+              <div className="search-box-input-note tooltip bottom fade in">
+                <div className="tooltip-inner">
+                  {translateWithParameters('select2.tooShort', 3)}
+                </div>
+                <div className="tooltip-arrow" style={{ left: 23 }} />
+              </div>
+            )}
         </form>
       </div>
     );
index 7d3efb507bf0d1703ea8dba17564871c68f7ea8b..993345e23198e29b29160e930622da9352d133fb 100644 (file)
@@ -152,13 +152,13 @@ export default class App extends React.PureComponent<Props, State> {
         </div>
 
         {subComponents !== undefined &&
-        totalSubComponents !== undefined && (
-          <WorstProjects
-            component={component.key}
-            subComponents={subComponents}
-            total={totalSubComponents}
-          />
-        )}
+          totalSubComponents !== undefined && (
+            <WorstProjects
+              component={component.key}
+              subComponents={subComponents}
+              total={totalSubComponents}
+            />
+          )}
       </div>
     );
   }
@@ -178,7 +178,7 @@ export default class App extends React.PureComponent<Props, State> {
 
           <aside className="page-sidebar-fixed">
             {!this.isEmpty() &&
-            !this.isNotComputed() && <Summary component={component} measures={measures!} />}
+              !this.isNotComputed() && <Summary component={component} measures={measures!} />}
             <Activity component={component.key} />
             <Report component={component} />
           </aside>
index e71c0aed8948cade92c4be159caa2eea9293ec6f..798e7b16dd269f7cddf70b67a52caebde613ecd0 100644 (file)
@@ -50,19 +50,19 @@ export default function ReleasabilityBox({ component, measures }: Props) {
       <RatingFreshness lastChange={lastReleasabilityChange} />
 
       {effort &&
-      Number(effort) > 0 && (
-        <div className="portfolio-effort">
-          <Link to={getComponentDrilldownUrl(component, 'alert_status')}>
-            <span>
-              <Measure
-                measure={{ metric: { key: 'projects', type: 'SHORT_INT' }, value: effort }}
-              />{' '}
-              {Number(effort) === 1 ? 'project' : 'projects'}
-            </span>
-          </Link>{' '}
-          <span className="level level-ERROR level-small">{translate('metric.level.ERROR')}</span>
-        </div>
-      )}
+        Number(effort) > 0 && (
+          <div className="portfolio-effort">
+            <Link to={getComponentDrilldownUrl(component, 'alert_status')}>
+              <span>
+                <Measure
+                  measure={{ metric: { key: 'projects', type: 'SHORT_INT' }, value: effort }}
+                />{' '}
+                {Number(effort) === 1 ? 'project' : 'projects'}
+              </span>
+            </Link>{' '}
+            <span className="level level-ERROR level-small">{translate('metric.level.ERROR')}</span>
+          </div>
+        )}
     </div>
   );
 }
index 421eea14c96b4df46992d45059b6c679c9fe27f1..ae676759a5a7e8efcabc6f079ac047f06a117ecc 100644 (file)
@@ -79,11 +79,9 @@ export default function WorstProjects({ component, subComponents, total }: Props
                   <QualifierIcon qualifier={component.qualifier} /> {component.name}
                 </Link>
               </td>
-              {component.qualifier === 'TRK' ? (
-                renderCell(component.measures, 'alert_status', 'LEVEL')
-              ) : (
-                renderCell(component.measures, 'releasability_rating', 'RATING')
-              )}
+              {component.qualifier === 'TRK'
+                ? renderCell(component.measures, 'alert_status', 'LEVEL')
+                : renderCell(component.measures, 'releasability_rating', 'RATING')}
               {renderCell(component.measures, 'reliability_rating', 'RATING')}
               {renderCell(component.measures, 'security_rating', 'RATING')}
               {renderCell(component.measures, 'sqale_rating', 'RATING')}
index 79fce89982d3d27e3c91be9b34c95549d24fc604..989531cad1e51817fff8419b3d239a4b9bb18106 100644 (file)
@@ -13,36 +13,36 @@ exports[`renders 1`] = `
           onlyActiveOnIndex={false}
           style={Object {}}
           to={
-              Object {
-                  "pathname": "/component_measures",
-                  "query": Object {
-                    "branch": undefined,
-                    "id": "foo",
-                    "metric": "security_rating",
-                  },
-                }
+            Object {
+              "pathname": "/component_measures",
+              "query": Object {
+                "branch": undefined,
+                "id": "foo",
+                "metric": "security_rating",
+              },
+            }
           }
-      >
+        >
           <span>
-              <Measure
-                  measure={
-                      Object {
-                          "metric": Object {
-                            "key": "projects",
-                            "type": "SHORT_INT",
-                          },
-                          "value": "3",
-                        }
-                  }
-              />
-               
-              projects_
+            <Measure
+              measure={
+                Object {
+                  "metric": Object {
+                    "key": "projects",
+                    "type": "SHORT_INT",
+                  },
+                  "value": "3",
+                }
+              }
+            />
+             
+            projects_
           </span>
-      </Link>,
+        </Link>,
         "rating": <Rating
           small={true}
           value={2}
-      />,
+        />,
       }
     }
   />
index ca9124758dca6908a1a1aa25d98b3845168399ea..7e0c44f1ca47451a8fc7ee09111147df1a39fad2 100644 (file)
@@ -11,11 +11,11 @@ exports[`renders 1`] = `
       Object {
         "date": <DateFromNow
           date="2017-01-02T00:00:00.000Z"
-      />,
+        />,
         "rating": <Rating
           small={true}
           value={2}
-      />,
+        />,
       }
     }
   />
index 1eaa2c0bdb9e04dab2874091c4f6f2ecfa82d6ab..c36279d6709f2afab64eb7b70eab5a4d83cb5d0c 100644 (file)
@@ -41,7 +41,9 @@ exports[`renders 1`] = `
       </tr>
     </thead>
     <tbody>
-      <tr>
+      <tr
+        key="foo"
+      >
         <td>
           <Link
             className="link-with-icon"
@@ -157,7 +159,9 @@ exports[`renders 1`] = `
           </svg>
         </td>
       </tr>
-      <tr>
+      <tr
+        key="bar"
+      >
         <td>
           <Link
             className="link-with-icon"
@@ -273,7 +277,9 @@ exports[`renders 1`] = `
           </svg>
         </td>
       </tr>
-      <tr>
+      <tr
+        key="baz"
+      >
         <td>
           <Link
             className="link-with-icon"
index 29fe837acfa2f94bd2338a68320e004e5e179c50..3bc95c78ff96280b540702f67963ef8a135499aa 100644 (file)
@@ -107,19 +107,19 @@ export default class GraphHistory extends React.PureComponent {
                   updateZoom={this.props.updateGraphZoom}
                 />
                 {selectedDate != null &&
-                tooltipXPos != null && (
-                  <GraphsTooltips
-                    events={this.props.events}
-                    formatValue={this.formatTooltipValue}
-                    graph={graph}
-                    graphWidth={width}
-                    measuresHistory={this.props.measuresHistory}
-                    selectedDate={selectedDate}
-                    series={series}
-                    tooltipIdx={tooltipIdx}
-                    tooltipPos={tooltipXPos}
-                  />
-                )}
+                  tooltipXPos != null && (
+                    <GraphsTooltips
+                      events={this.props.events}
+                      formatValue={this.formatTooltipValue}
+                      graph={graph}
+                      graphWidth={width}
+                      measuresHistory={this.props.measuresHistory}
+                      selectedDate={selectedDate}
+                      series={series}
+                      tooltipIdx={tooltipIdx}
+                      tooltipPos={tooltipXPos}
+                    />
+                  )}
               </div>
             )}
           </AutoSizer>
index 69065f1b708fce2c6a490ae99759c591aba7e12e..2aa4137cc1d9ade1ef37673b3ae2c62ca64c601c 100644 (file)
@@ -117,9 +117,9 @@ export default class GraphsTooltips extends React.PureComponent {
               />
             )}
             {events &&
-            events.length > 0 && (
-              <GraphsTooltipsContentEvents addSeparator={addSeparator} events={events} />
-            )}
+              events.length > 0 && (
+                <GraphsTooltipsContentEvents addSeparator={addSeparator} events={events} />
+              )}
           </table>
         </div>
       </BubblePopup>
index 88bf5483c11e589a197285e2a01d28ee1b8aaf61..517e60cc26f6b37f2d3941942b6b7ba2b413224b 100644 (file)
@@ -105,7 +105,7 @@ export default class ProjectActivityAnalysis extends React.PureComponent {
                   </li>
                 )}
                 {(canAddVersion || canAddEvent) &&
-                canDeleteAnalyses && <li role="separator" className="divider" />}
+                  canDeleteAnalyses && <li role="separator" className="divider" />}
                 {canDeleteAnalyses && (
                   <li>
                     <RemoveAnalysisForm
index 2b9e964ae1d9611c3a93f853cf7e350301caf0dd..b83cc033e28f9009bd17d7543d943526641f5580 100644 (file)
@@ -32,6 +32,8 @@ exports[`should correctly render a graph 1`] = `
     className="project-activity-graph"
   >
     <AutoSizer
+      disableHeight={false}
+      disableWidth={false}
       onResize={[Function]}
     />
   </div>
index fb809d1f599c3ea894958917a3eaf606f2bdef67..b7de2ea3cfe31a4d2132057cc128a6c4083da600 100644 (file)
@@ -35,6 +35,7 @@ exports[`should correctly render a graph 1`] = `
     graphEndDate={null}
     graphStartDate={null}
     isCustom={false}
+    key="0"
     leakPeriodDate="2017-05-16T13:50:02+0200"
     measuresHistory={Array []}
     removeCustomMetric={[Function]}
@@ -79,6 +80,7 @@ exports[`should correctly render multiple graphs 1`] = `
     graphEndDate={null}
     graphStartDate={null}
     isCustom={false}
+    key="0"
     leakPeriodDate="2017-05-16T13:50:02+0200"
     measuresHistory={Array []}
     removeCustomMetric={[Function]}
@@ -116,6 +118,7 @@ exports[`should correctly render multiple graphs 1`] = `
     graphEndDate={null}
     graphStartDate={null}
     isCustom={false}
+    key="1"
     leakPeriodDate="2017-05-16T13:50:02+0200"
     measuresHistory={Array []}
     removeCustomMetric={[Function]}
index cd8ec0cc2f46f644e287e56753fd1569417002bd..b50a253ae4ce5da9241f53ad7956c48575d3cd60 100644 (file)
@@ -6,6 +6,7 @@ exports[`should render correctly the list of series 1`] = `
 >
   <span
     className="spacer-left spacer-right"
+    key="bugs"
   >
     <GraphsLegendItem
       metric="bugs"
@@ -17,6 +18,7 @@ exports[`should render correctly the list of series 1`] = `
   </span>
   <span
     className="spacer-left spacer-right"
+    key="my_metric"
   >
     <GraphsLegendItem
       metric="my_metric"
@@ -27,6 +29,7 @@ exports[`should render correctly the list of series 1`] = `
     />
   </span>
   <Tooltip
+    key="foo"
     overlay="project_activity.graphs.custom.metric_no_history"
     placement="bottom"
   >
index 47cc682d03fdb3cb176c83c7fc4d49a075d6d8db..c8d7df8f28acc96ca1f3901cfc748d66b0b0fbcb 100644 (file)
@@ -6,12 +6,14 @@ exports[`should render correctly the list of series 1`] = `
 >
   <GraphsLegendItem
     className="big-spacer-left big-spacer-right"
+    key="bugs"
     metric="bugs"
     name="Bugs"
     style="0"
   />
   <GraphsLegendItem
     className="big-spacer-left big-spacer-right"
+    key="code_smells"
     metric="code_smells"
     name="Code Smells"
     style="1"
index e2ab4b039a81d6320803d34fb6fd51fc582f874a..96758777f80b1dc884c3f6db831fff2b0640b450 100644 (file)
@@ -61,6 +61,7 @@ exports[`should render correctly for issues graphs 1`] = `
     >
       <tbody>
         <GraphsTooltipsContentIssues
+          key="bugs"
           measuresHistory={Array []}
           name="bugs"
           style="0"
@@ -69,6 +70,7 @@ exports[`should render correctly for issues graphs 1`] = `
           value="Formated.3"
         />
         <GraphsTooltipsContentIssues
+          key="code_smells"
           measuresHistory={Array []}
           name="code_smells"
           style="1"
@@ -77,6 +79,7 @@ exports[`should render correctly for issues graphs 1`] = `
           value="Formated.18"
         />
         <GraphsTooltipsContentIssues
+          key="vulnerabilities"
           measuresHistory={Array []}
           name="vulnerabilities"
           style="2"
@@ -116,18 +119,21 @@ exports[`should render correctly for random graphs 1`] = `
     >
       <tbody>
         <GraphsTooltipsContent
+          key="bugs"
           name="bugs"
           style="0"
           translatedName="Bugs"
           value="Formated.0"
         />
         <GraphsTooltipsContent
+          key="code_smells"
           name="code_smells"
           style="1"
           translatedName="Code Smells"
           value="Formated.15"
         />
         <GraphsTooltipsContent
+          key="vulnerabilities"
           name="vulnerabilities"
           style="2"
           translatedName="Vulnerabilities"
index 95e4c4b18a1a4ddb7a9f8b66ae56d7e43cd825b2..29401d4397d1036ff2a74d478a2a6053d4a45768 100644 (file)
@@ -22,6 +22,7 @@ exports[`should render correctly 1`] = `
       </span>
       <span
         className="spacer-left"
+        key="1"
       >
         <ProjectEventIcon
           className="project-activity-event-icon VERSION"
@@ -29,6 +30,7 @@ exports[`should render correctly 1`] = `
       </span>
       <span
         className="spacer-left"
+        key="2"
       >
         <ProjectEventIcon
           className="project-activity-event-icon OTHER"
index 91f9b47f6f5906ecb57f670062bf82d141a14895..f5712ca5b762ab2af43f0acf424d7316dd4e68c9 100644 (file)
@@ -3,6 +3,7 @@
 exports[`should render correctly 1`] = `
 <tr
   className="project-activity-graph-tooltip-issues-line"
+  key="bugs"
 >
   <td
     className="thin"
@@ -34,6 +35,7 @@ exports[`should render correctly 1`] = `
 exports[`should render correctly when rating data is missing 1`] = `
 <tr
   className="project-activity-graph-tooltip-issues-line"
+  key="bugs"
 >
   <td
     className="thin"
index f2a64234ead24b23331153b469567c7439779a24..468f7b7ddec884442c2ba7b4bd56936d3b70be6d 100644 (file)
@@ -10,7 +10,9 @@ exports[`should correctly filter analyses by category 1`] = `
     }
   }
 >
-  <li>
+  <li
+    key="E2"
+  >
     <div
       className="project-activity-version-badge first"
     >
@@ -32,6 +34,7 @@ exports[`should correctly filter analyses by category 1`] = `
       <li
         className="project-activity-day"
         data-day="ISO.1477267200000"
+        key="1477267200000"
       >
         <div
           className="project-activity-date"
@@ -66,6 +69,7 @@ exports[`should correctly filter analyses by category 1`] = `
             deleteAnalysis={[Function]}
             deleteEvent={[Function]}
             isFirst={false}
+            key="A4"
             selected={false}
             updateSelectedDate={[Function]}
           />
@@ -86,7 +90,9 @@ exports[`should correctly filter analyses by date range 1`] = `
     }
   }
 >
-  <li>
+  <li
+    key="E1"
+  >
     <div
       className="project-activity-version-badge first"
     >
@@ -108,6 +114,7 @@ exports[`should correctly filter analyses by date range 1`] = `
       <li
         className="project-activity-day"
         data-day="ISO.1477526400000"
+        key="1477526400000"
       >
         <div
           className="project-activity-date"
@@ -142,6 +149,7 @@ exports[`should correctly filter analyses by date range 1`] = `
             deleteAnalysis={[Function]}
             deleteEvent={[Function]}
             isFirst={true}
+            key="A1"
             selected={false}
             updateSelectedDate={[Function]}
           />
@@ -162,7 +170,9 @@ exports[`should render correctly 1`] = `
     }
   }
 >
-  <li>
+  <li
+    key="E1"
+  >
     <div
       className="project-activity-version-badge first"
     >
@@ -184,6 +194,7 @@ exports[`should render correctly 1`] = `
       <li
         className="project-activity-day"
         data-day="ISO.1477526400000"
+        key="1477526400000"
       >
         <div
           className="project-activity-date"
@@ -218,6 +229,7 @@ exports[`should render correctly 1`] = `
             deleteAnalysis={[Function]}
             deleteEvent={[Function]}
             isFirst={true}
+            key="A1"
             selected={false}
             updateSelectedDate={[Function]}
           />
@@ -237,6 +249,7 @@ exports[`should render correctly 1`] = `
             deleteAnalysis={[Function]}
             deleteEvent={[Function]}
             isFirst={false}
+            key="A2"
             selected={false}
             updateSelectedDate={[Function]}
           />
@@ -244,7 +257,9 @@ exports[`should render correctly 1`] = `
       </li>
     </ul>
   </li>
-  <li>
+  <li
+    key="E2"
+  >
     <div
       className="project-activity-version-badge"
     >
@@ -266,6 +281,7 @@ exports[`should render correctly 1`] = `
       <li
         className="project-activity-day"
         data-day="ISO.1477440000000"
+        key="1477440000000"
       >
         <div
           className="project-activity-date"
@@ -305,6 +321,7 @@ exports[`should render correctly 1`] = `
             deleteAnalysis={[Function]}
             deleteEvent={[Function]}
             isFirst={false}
+            key="A3"
             selected={false}
             updateSelectedDate={[Function]}
           />
@@ -313,6 +330,7 @@ exports[`should render correctly 1`] = `
       <li
         className="project-activity-day"
         data-day="ISO.1477267200000"
+        key="1477267200000"
       >
         <div
           className="project-activity-date"
@@ -347,6 +365,7 @@ exports[`should render correctly 1`] = `
             deleteAnalysis={[Function]}
             deleteEvent={[Function]}
             isFirst={false}
+            key="A4"
             selected={false}
             updateSelectedDate={[Function]}
           />
index 0e51a64862b2f9655bf3a34993e2da5725982698..71e184790814ba5efbf44cac84e7a0ce1e55ce80 100644 (file)
@@ -6,6 +6,7 @@ exports[`should render correctly 1`] = `
   id="project-activity"
 >
   <HelmetWrapper
+    defer={true}
     encodeSpecialCharacters={true}
     title="project_activity.page"
   />
index 1112cfa4ea84c53002c87129ce85b77a09a70291..12ff75c53424e99a44d01fb1ec34d1f8ef9b4a8f 100644 (file)
@@ -15,6 +15,7 @@ exports[`should render correctly the list of series 1`] = `
     clearRenderer={[Function]}
     clearValueText="Clear value"
     clearable={true}
+    closeOnSelect={true}
     deleteRemoves={true}
     delimiter=","
     disabled={false}
@@ -35,6 +36,8 @@ exports[`should render correctly the list of series 1`] = `
     onBlurResetsInput={true}
     onChange={[Function]}
     onCloseResetsInput={true}
+    onSelectResetsInput={true}
+    openOnClick={true}
     optionComponent={[Function]}
     options={
       Array [
index ece4bdad6d73b8178f32fdaad48de9e05f42d037..bf9c646b599b0d754ca308e94ceab7ef58838e2d 100644 (file)
@@ -128,17 +128,15 @@ export default class AddGraphMetric extends React.PureComponent {
                 value={this.state.selectedMetric}
               />
               <span className="alert alert-info">
-                {metricsTypeFilter != null && metricsTypeFilter.length > 0 ? (
-                  translateWithParameters(
-                    'project_activity.graphs.custom.type_x_message',
-                    metricsTypeFilter
-                      .map(type => translate('metric.type', type))
-                      .sort()
-                      .join(', ')
-                  )
-                ) : (
-                  translate('project_activity.graphs.custom.add_metric_info')
-                )}
+                {metricsTypeFilter != null && metricsTypeFilter.length > 0
+                  ? translateWithParameters(
+                      'project_activity.graphs.custom.type_x_message',
+                      metricsTypeFilter
+                        .map(type => translate('metric.type', type))
+                        .sort()
+                        .join(', ')
+                    )
+                  : translate('project_activity.graphs.custom.add_metric_info')}
               </span>
             </div>
           </div>
index 66d14ed260f5f1006378f94b7e4601a11f5035de..5b8e9cb8c7fd7ab4af59d88b7225c1ea5af57140 100644 (file)
@@ -18,7 +18,7 @@
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  */
 import * as React from 'react';
-import Modal from 'react-modal';
+import * as Modal from 'react-modal';
 import { deleteBranch } from '../../../api/branches';
 import { Branch } from '../../../app/types';
 import { translate, translateWithParameters } from '../../../helpers/l10n';
index 26d0c82f6685e454611939a55533fece7ec80ca2..ac05eabcc074dd7fdafa237805d57b999200c6f8 100644 (file)
@@ -18,7 +18,7 @@
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  */
 import * as React from 'react';
-import Modal from 'react-modal';
+import * as Modal from 'react-modal';
 import SettingForm from './SettingForm';
 import { translate } from '../../../helpers/l10n';
 import { getValues, SettingValue } from '../../../api/settings';
index c773b3c737fd51ba399131273a5e8ec65521af26..8a683b25529221336b2e3029e3360a86e99af975 100644 (file)
@@ -18,7 +18,7 @@
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  */
 import * as React from 'react';
-import Modal from 'react-modal';
+import * as Modal from 'react-modal';
 import SettingForm from './SettingForm';
 import { translate } from '../../../helpers/l10n';
 import { SettingValue } from '../../../api/settings';
index 02bd8572c9cb95b0c0f5757aabd49330a28ca4e8..52a381eb90c8e5a4c954b2f695b56a728b13a078 100644 (file)
@@ -18,7 +18,7 @@
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  */
 import * as React from 'react';
-import Modal from 'react-modal';
+import * as Modal from 'react-modal';
 import { renameBranch } from '../../../api/branches';
 import { Branch } from '../../../app/types';
 import { translate } from '../../../helpers/l10n';
index 41e8c9d439e71133b981a42a3a54dd6b90dbd7e3..ba43512af0a42b07d8cb499aff12ae7e6f34fcbe 100644 (file)
@@ -118,24 +118,24 @@ export default class SettingForm extends React.PureComponent<Props, State> {
               <div className="note spacer-top">{translate('settings._default')}</div>
             )}
             {!setting.inherited &&
-            setting.parentValue && (
-              <div className="note spacer-top">
-                {translateWithParameters('settings.default_x', setting.parentValue)}
-              </div>
-            )}
+              setting.parentValue && (
+                <div className="note spacer-top">
+                  {translateWithParameters('settings.default_x', setting.parentValue)}
+                </div>
+              )}
           </div>
         </div>
         <footer className="modal-foot">
           {!setting.inherited &&
-          setting.parentValue && (
-            <button
-              className="pull-left"
-              disabled={this.state.submitting}
-              onClick={this.handleResetClick}
-              type="reset">
-              {translate('reset_to_default')}
-            </button>
-          )}
+            setting.parentValue && (
+              <button
+                className="pull-left"
+                disabled={this.state.submitting}
+                onClick={this.handleResetClick}
+                type="reset">
+                {translate('reset_to_default')}
+              </button>
+            )}
           {this.state.submitting && <i className="spinner spacer-right" />}
           <button disabled={submitDisabled} type="submit">
             {translate('save')}
index a3281058f5137f1be19b3613ffdce39a6829f62e..4914db6ffce4c74789cfbae889a427e3d14a9a66 100644 (file)
@@ -33,9 +33,9 @@ exports[`renders sorted list of branches 1`] = `
               onlyActiveOnIndex={false}
               style={Object {}}
               to="/admin/settings"
-          >
+            >
               settings.page
-          </Link>,
+            </Link>,
           }
         }
       />
@@ -75,6 +75,7 @@ exports[`renders sorted list of branches 1`] = `
           }
         }
         component="foo"
+        key="master"
         onChange={[Function]}
       />
       <BranchRow
@@ -87,6 +88,7 @@ exports[`renders sorted list of branches 1`] = `
           }
         }
         component="foo"
+        key="branch-1.0"
         onChange={[Function]}
       />
       <BranchRow
@@ -98,6 +100,7 @@ exports[`renders sorted list of branches 1`] = `
           }
         }
         component="foo"
+        key="branch-1.0"
         onChange={[Function]}
       />
     </tbody>
index 934f8ed2d7d7c9602b27d2970ca90427cedb9494..fe8762c945f98c6d0bb132fae775c9b47070afa4 100644 (file)
@@ -12,7 +12,9 @@ exports[`renders 1`] = `
   overlayClassName="modal-overlay"
   parentSelector={[Function]}
   portalClassName="ReactModalPortal"
+  shouldCloseOnEsc={true}
   shouldCloseOnOverlayClick={true}
+  shouldFocusAfterRender={true}
 >
   <header
     className="modal-head"
@@ -62,7 +64,9 @@ exports[`renders 2`] = `
   overlayClassName="modal-overlay"
   parentSelector={[Function]}
   portalClassName="ReactModalPortal"
+  shouldCloseOnEsc={true}
   shouldCloseOnOverlayClick={true}
+  shouldFocusAfterRender={true}
 >
   <header
     className="modal-head"
index d1c5ef0c609e6a2efdaf5cbfafe906975bc68592..8e0e2e2d8ca00d6450b705c6e18dee0774f8869e 100644 (file)
@@ -12,7 +12,9 @@ exports[`renders 1`] = `
   overlayClassName="modal-overlay"
   parentSelector={[Function]}
   portalClassName="ReactModalPortal"
+  shouldCloseOnEsc={true}
   shouldCloseOnOverlayClick={true}
+  shouldFocusAfterRender={true}
 >
   <header
     className="modal-head"
index 7867fa4785afdbbf90c11e9e8d17bf779e5b4ea8..1f190cd94c5dd6c19c436c13674071f95fc5f0af 100644 (file)
@@ -12,7 +12,9 @@ exports[`renders 1`] = `
   overlayClassName="modal-overlay"
   parentSelector={[Function]}
   portalClassName="ReactModalPortal"
+  shouldCloseOnEsc={true}
   shouldCloseOnOverlayClick={true}
+  shouldFocusAfterRender={true}
 >
   <header
     className="modal-head"
@@ -85,7 +87,9 @@ exports[`renders 2`] = `
   overlayClassName="modal-overlay"
   parentSelector={[Function]}
   portalClassName="ReactModalPortal"
+  shouldCloseOnEsc={true}
   shouldCloseOnOverlayClick={true}
+  shouldFocusAfterRender={true}
 >
   <header
     className="modal-head"
@@ -158,7 +162,9 @@ exports[`renders 3`] = `
   overlayClassName="modal-overlay"
   parentSelector={[Function]}
   portalClassName="ReactModalPortal"
+  shouldCloseOnEsc={true}
   shouldCloseOnOverlayClick={true}
+  shouldFocusAfterRender={true}
 >
   <header
     className="modal-head"
index b5a034ccd684188bbb3c2918d5fdd2b97fdf542b..aa0b8bea1160efed29a453229b22c4adce61b392 100644 (file)
@@ -18,7 +18,7 @@
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  */
 import * as React from 'react';
-import * as Select from 'react-select';
+import Select from 'react-select';
 import { some } from 'lodash';
 import { QualityGate } from '../../api/quality-gates';
 import { translate } from '../../helpers/l10n';
index afa45f5e3bacf6c6ede59f83a23f3d1fa5426554..4d448e7a8cbcd3d1622a819c8b3cd207e5895121 100644 (file)
@@ -12,6 +12,7 @@ exports[`renders 1`] = `
     clearRenderer={[Function]}
     clearValueText="Clear value"
     clearable={false}
+    closeOnSelect={true}
     deleteRemoves={true}
     delimiter=","
     disabled={false}
@@ -32,6 +33,8 @@ exports[`renders 1`] = `
     onBlurResetsInput={true}
     onChange={[Function]}
     onCloseResetsInput={true}
+    onSelectResetsInput={true}
+    openOnClick={true}
     optionComponent={[Function]}
     optionRenderer={[Function]}
     options={
index ad8340c2c200dbdd90b281f9c303a027eae6d9c3..9a3febf80ade3fd254713b94348a72f89d4ff136 100644 (file)
@@ -18,7 +18,7 @@
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  */
 import * as React from 'react';
-import * as Select from 'react-select';
+import Select from 'react-select';
 import { Profile } from '../../api/quality-profiles';
 import { translate } from '../../helpers/l10n';
 
index 541a117c8894d31c55d585388fa50fbf1c63a4c1..12542749c1ff23760a05477299819888884cde23 100644 (file)
@@ -22,6 +22,7 @@ exports[`renders 1`] = `
       clearRenderer={[Function]}
       clearValueText="Clear value"
       clearable={false}
+      closeOnSelect={true}
       deleteRemoves={true}
       delimiter=","
       disabled={false}
@@ -42,6 +43,8 @@ exports[`renders 1`] = `
       onBlurResetsInput={true}
       onChange={[Function]}
       onCloseResetsInput={true}
+      onSelectResetsInput={true}
+      openOnClick={true}
       optionComponent={[Function]}
       optionRenderer={[Function]}
       options={
index b4b991157ebc274ab7274d5a1745d1eed27c82a9..5ac9cea89da7a41769ea27242d3b9ce328890c97 100644 (file)
@@ -23,6 +23,7 @@ exports[`renders 1`] = `
   </thead>
   <tbody>
     <ProfileRow
+      key="java"
       onChangeProfile={[Function]}
       possibleProfiles={
         Array [
@@ -68,6 +69,7 @@ exports[`renders 1`] = `
       }
     />
     <ProfileRow
+      key="js"
       onChangeProfile={[Function]}
       possibleProfiles={
         Array [
index c27d1fce861ba7c3b7b7e88e72cf92d3d80734b6..5b2e8af40569c94dbc222b7492bcac5067b89981 100644 (file)
@@ -18,7 +18,7 @@
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  */
 import * as React from 'react';
-import * as Select from 'react-select';
+import Select from 'react-select';
 import PerspectiveSelectOption, { Option } from './PerspectiveSelectOption';
 import { translate } from '../../../helpers/l10n';
 import { VIEWS, VISUALIZATIONS } from '../utils';
index 1505bef784b4a6e9b589139fdac8caaa2f15349c..d8ce816507c5a92f91f99de3d7f7ceaaadb9d3a5 100644 (file)
@@ -63,22 +63,24 @@ export default function ProjectCardLeak({ organization, project }: Props) {
           {hasTags && <TagsList tags={project.tags} customClass="spacer-left" />}
         </div>
         {project.analysisDate &&
-        project.leakPeriodDate && (
-          <div className="project-card-dates note text-right pull-right">
-            <DateFromNow date={project.leakPeriodDate!}>
-              {fromNow => (
-                <span className="project-card-leak-date pull-right">
-                  {translateWithParameters('projects.leak_period_x', fromNow)}
-                </span>
-              )}
-            </DateFromNow>
-            <DateTimeFormatter date={project.analysisDate!}>
-              {formattedDate => (
-                <span>{translateWithParameters('projects.last_analysis_on_x', formattedDate)}</span>
-              )}
-            </DateTimeFormatter>
-          </div>
-        )}
+          project.leakPeriodDate && (
+            <div className="project-card-dates note text-right pull-right">
+              <DateFromNow date={project.leakPeriodDate!}>
+                {fromNow => (
+                  <span className="project-card-leak-date pull-right">
+                    {translateWithParameters('projects.leak_period_x', fromNow)}
+                  </span>
+                )}
+              </DateFromNow>
+              <DateTimeFormatter date={project.analysisDate!}>
+                {formattedDate => (
+                  <span>
+                    {translateWithParameters('projects.last_analysis_on_x', formattedDate)}
+                  </span>
+                )}
+              </DateTimeFormatter>
+            </div>
+          )}
       </div>
 
       {project.analysisDate && project.leakPeriodDate ? (
@@ -88,11 +90,9 @@ export default function ProjectCardLeak({ organization, project }: Props) {
       ) : (
         <div className="boxed-group-inner">
           <div className="note project-card-not-analyzed">
-            {project.analysisDate ? (
-              translate('projects.no_leak_period')
-            ) : (
-              translate('projects.not_analyzed')
-            )}
+            {project.analysisDate
+              ? translate('projects.no_leak_period')
+              : translate('projects.not_analyzed')}
           </div>
         </div>
       )}
index 423da0dcd2611150fe6770ad2b1f4b0eee589f0a..2110166718756f0bd75ba2dc288a7c3cffe49d59 100644 (file)
@@ -49,18 +49,16 @@ export default class ProjectsList extends React.PureComponent<Props> {
 
     return (
       <div className="projects-list">
-        {projects.length > 0 ? (
-          projects.map(project => (
-            <ProjectCard
-              key={project.key}
-              project={project}
-              organization={this.props.organization}
-              type={this.props.cardType}
-            />
-          ))
-        ) : (
-          this.renderNoProjects()
-        )}
+        {projects.length > 0
+          ? projects.map(project => (
+              <ProjectCard
+                key={project.key}
+                project={project}
+                organization={this.props.organization}
+                type={this.props.cardType}
+              />
+            ))
+          : this.renderNoProjects()}
       </div>
     );
   }
index eb84d21caed93b0c9b8e118ddf913db27bc2a4c3..434c1818eeb5d48376a5cd8ba338ec464c7880c9 100644 (file)
@@ -19,7 +19,7 @@
  */
 import * as React from 'react';
 import { sortBy } from 'lodash';
-import * as Select from 'react-select';
+import Select from 'react-select';
 import ProjectsSortingSelectOption, { Option } from './ProjectsSortingSelectOption';
 import SortAscIcon from '../../../components/icons-components/SortAscIcon';
 import SortDescIcon from '../../../components/icons-components/SortDescIcon';
index 6d071b47da523a69e1b0755d6218074ae14abc01..b6ba776c0da2b12c34f430f98afa9e793fdf1f29 100644 (file)
@@ -44,7 +44,7 @@ it('reset function should work correctly with view and visualizations', () => {
       isFavorite={false}
     />
   );
-  expect(sidebar.find('.projects-facets-reset')).toMatchSnapshot();
+  expect(sidebar.find('.projects-facets-reset').exists()).toBeFalsy();
   sidebar.setProps({ query: { size: '3' } });
   expect(sidebar.find('.projects-facets-reset')).toMatchSnapshot();
 });
index fc7e90eddd286f13edbf1b496d21dfc0cd5ea817..5ac9039df25f5f12faf3bf61bf2e3364684d1118 100644 (file)
@@ -5,6 +5,7 @@ exports[`renders 1`] = `
   className="layout-page projects-page"
 >
   <HelmetWrapper
+    defer={true}
     encodeSpecialCharacters={true}
     title="projects.page"
   />
@@ -109,6 +110,7 @@ exports[`renders 2`] = `
   className="layout-page projects-page"
 >
   <HelmetWrapper
+    defer={true}
     encodeSpecialCharacters={true}
     title="projects.page"
   />
index 5cd3d236fb0cc25c7a001f05054876f3d68cac57..78961fde19f5d08e789c82998035527712c4a370 100644 (file)
@@ -1,8 +1,6 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
-exports[`reset function should work correctly with view and visualizations 1`] = `undefined`;
-
-exports[`reset function should work correctly with view and visualizations 2`] = `
+exports[`reset function should work correctly with view and visualizations 1`] = `
 <div
   className="projects-facets-reset"
 >
@@ -51,6 +49,7 @@ exports[`should render \`leak\` view correctly 1`] = `
   />
   <NewReliabilityFilter
     isFavorite={false}
+    key="new_reliability"
     query={
       Object {
         "view": "leak",
@@ -59,6 +58,7 @@ exports[`should render \`leak\` view correctly 1`] = `
   />
   <NewSecurityFilter
     isFavorite={false}
+    key="new_security"
     query={
       Object {
         "view": "leak",
@@ -67,6 +67,7 @@ exports[`should render \`leak\` view correctly 1`] = `
   />
   <NewMaintainabilityFilter
     isFavorite={false}
+    key="new_maintainability"
     query={
       Object {
         "view": "leak",
@@ -75,6 +76,7 @@ exports[`should render \`leak\` view correctly 1`] = `
   />
   <NewCoverageFilter
     isFavorite={false}
+    key="new_coverage"
     query={
       Object {
         "view": "leak",
@@ -83,6 +85,7 @@ exports[`should render \`leak\` view correctly 1`] = `
   />
   <NewDuplicationsFilter
     isFavorite={false}
+    key="new_duplications"
     query={
       Object {
         "view": "leak",
@@ -91,6 +94,7 @@ exports[`should render \`leak\` view correctly 1`] = `
   />
   <NewLinesFilter
     isFavorite={false}
+    key="new_lines"
     query={
       Object {
         "view": "leak",
@@ -153,6 +157,7 @@ exports[`should render correctly 1`] = `
   />
   <ReliabilityFilter
     isFavorite={true}
+    key="reliability"
     query={
       Object {
         "size": "3",
@@ -161,6 +166,7 @@ exports[`should render correctly 1`] = `
   />
   <SecurityFilter
     isFavorite={true}
+    key="security"
     query={
       Object {
         "size": "3",
@@ -169,6 +175,7 @@ exports[`should render correctly 1`] = `
   />
   <MaintainabilityFilter
     isFavorite={true}
+    key="maintainability"
     query={
       Object {
         "size": "3",
@@ -177,6 +184,7 @@ exports[`should render correctly 1`] = `
   />
   <CoverageFilter
     isFavorite={true}
+    key="coverage"
     query={
       Object {
         "size": "3",
@@ -185,6 +193,7 @@ exports[`should render correctly 1`] = `
   />
   <DuplicationsFilter
     isFavorite={true}
+    key="duplications"
     query={
       Object {
         "size": "3",
@@ -193,6 +202,7 @@ exports[`should render correctly 1`] = `
   />
   <SizeFilter
     isFavorite={true}
+    key="size"
     query={
       Object {
         "size": "3",
index 7671abced29107af6f6c5c63b19f45715a6aa5de..1c5a0c3e47a83024632ba2839e48fc1d1a296abc 100644 (file)
@@ -38,6 +38,7 @@ exports[`should render correctly 1`] = `
     clearRenderer={[Function]}
     clearValueText="Clear value"
     clearable={false}
+    closeOnSelect={true}
     deleteRemoves={true}
     delimiter=","
     disabled={false}
@@ -58,6 +59,8 @@ exports[`should render correctly 1`] = `
     onBlurResetsInput={true}
     onChange={[Function]}
     onCloseResetsInput={true}
+    onSelectResetsInput={true}
+    openOnClick={true}
     optionComponent={[Function]}
     options={
       Array [
@@ -134,6 +137,7 @@ exports[`should render with coverage selected 1`] = `
     clearRenderer={[Function]}
     clearValueText="Clear value"
     clearable={false}
+    closeOnSelect={true}
     deleteRemoves={true}
     delimiter=","
     disabled={false}
@@ -154,6 +158,8 @@ exports[`should render with coverage selected 1`] = `
     onBlurResetsInput={true}
     onChange={[Function]}
     onCloseResetsInput={true}
+    onSelectResetsInput={true}
+    openOnClick={true}
     optionComponent={[Function]}
     options={
       Array [
index bf50df65a84385bab7bac23ea70ea34b0e731f63..5b18aee0615334446be864fa282a87c8bc6203e8 100644 (file)
@@ -9,11 +9,15 @@ exports[`handles unknown languages 1`] = `
   <Tooltip
     overlay={
       <span>
-        <span>
+        <span
+          key="cpp"
+        >
           cpp
           <br />
         </span>
-        <span>
+        <span
+          key="Java"
+        >
           Java
           <br />
         </span>
@@ -35,11 +39,15 @@ exports[`handles unknown languages 2`] = `
   <Tooltip
     overlay={
       <span>
-        <span>
+        <span
+          key="unknown"
+        >
           unknown
           <br />
         </span>
-        <span>
+        <span
+          key="Java"
+        >
           Java
           <br />
         </span>
@@ -61,11 +69,15 @@ exports[`renders 1`] = `
   <Tooltip
     overlay={
       <span>
-        <span>
+        <span
+          key="Java"
+        >
           Java
           <br />
         </span>
-        <span>
+        <span
+          key="JavaScript"
+        >
           JavaScript
           <br />
         </span>
@@ -87,11 +99,15 @@ exports[`sorts languages 1`] = `
   <Tooltip
     overlay={
       <span>
-        <span>
+        <span
+          key="JavaScript"
+        >
           JavaScript
           <br />
         </span>
-        <span>
+        <span
+          key="Java"
+        >
           Java
           <br />
         </span>
index b5a2c7729c5c1f11385b3764ef02c86a8e696739..93fb447b814a7df60ed284fda5c32b627960a78a 100644 (file)
@@ -5,6 +5,7 @@ exports[`renders 1`] = `
   className="projects-list"
 >
   <ProjectCard
+    key="foo"
     project={
       Object {
         "key": "foo",
@@ -14,6 +15,7 @@ exports[`renders 1`] = `
     type="overall"
   />
   <ProjectCard
+    key="bar"
     project={
       Object {
         "key": "bar",
index dfa78f606fc73a5224f6622e094851287a240399..d1c569d96012eb3531b32be1bd68b25f95c0abaa 100644 (file)
@@ -17,6 +17,7 @@ exports[`should handle the descending sort direction 1`] = `
     clearRenderer={[Function]}
     clearValueText="Clear value"
     clearable={false}
+    closeOnSelect={true}
     deleteRemoves={true}
     delimiter=","
     disabled={false}
@@ -37,6 +38,8 @@ exports[`should handle the descending sort direction 1`] = `
     onBlurResetsInput={true}
     onChange={[Function]}
     onCloseResetsInput={true}
+    onSelectResetsInput={true}
+    openOnClick={true}
     optionComponent={[Function]}
     options={
       Array [
@@ -127,6 +130,7 @@ exports[`should render correctly for leak view 1`] = `
     clearRenderer={[Function]}
     clearValueText="Clear value"
     clearable={false}
+    closeOnSelect={true}
     deleteRemoves={true}
     delimiter=","
     disabled={false}
@@ -147,6 +151,8 @@ exports[`should render correctly for leak view 1`] = `
     onBlurResetsInput={true}
     onChange={[Function]}
     onCloseResetsInput={true}
+    onSelectResetsInput={true}
+    openOnClick={true}
     optionComponent={[Function]}
     options={
       Array [
@@ -237,6 +243,7 @@ exports[`should render correctly for overall view 1`] = `
     clearRenderer={[Function]}
     clearValueText="Clear value"
     clearable={false}
+    closeOnSelect={true}
     deleteRemoves={true}
     delimiter=","
     disabled={false}
@@ -257,6 +264,8 @@ exports[`should render correctly for overall view 1`] = `
     onBlurResetsInput={true}
     onChange={[Function]}
     onCloseResetsInput={true}
+    onSelectResetsInput={true}
+    openOnClick={true}
     optionComponent={[Function]}
     options={
       Array [
index 5e14ac247744a426a2c071489b892877690d0cda..65539aae09c62dc40db64f7f38a2690eef572242 100644 (file)
@@ -70,7 +70,7 @@ function renderOption(option: number, selected: boolean) {
     <span>
       <Rating value={option} small={true} muted={!selected} />
       {option > 1 &&
-      option < 5 && <span className="note spacer-left">{translate('and_worse')}</span>}
+        option < 5 && <span className="note spacer-left">{translate('and_worse')}</span>}
     </span>
   );
 }
index b81830abbb797422842cc92a200749d0f0d3ff81..5b45e79a6f53669baeb1bab93368d9a10d8f4ed6 100644 (file)
@@ -18,7 +18,7 @@
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  */
 import * as React from 'react';
-import * as Select from 'react-select';
+import Select from 'react-select';
 import * as PropTypes from 'prop-types';
 import { getFilterUrl } from './utils';
 import { translate } from '../../../helpers/l10n';
index 684a65f0ce87ccdd00f186ef24f415adc6d7b179..3c6f588c1928afa560c038dcd39f621066d57b1a 100644 (file)
@@ -11,6 +11,7 @@ exports[`highlights under 1`] = `
     <Link
       className="facet search-navigator-facet projects-facet"
       data-key={1}
+      key="1"
       onClick={[Function]}
       onlyActiveOnIndex={false}
       style={Object {}}
@@ -35,6 +36,7 @@ exports[`highlights under 1`] = `
       <Link
         className="facet search-navigator-facet projects-facet"
         data-key={2}
+        key="2"
         onClick={[Function]}
         onlyActiveOnIndex={false}
         style={Object {}}
@@ -56,6 +58,7 @@ exports[`highlights under 1`] = `
       <Link
         className="facet search-navigator-facet projects-facet"
         data-key={3}
+        key="3"
         onClick={[Function]}
         onlyActiveOnIndex={false}
         style={Object {}}
@@ -90,6 +93,7 @@ exports[`hightlights under selected 1`] = `
     <Link
       className="facet search-navigator-facet projects-facet"
       data-key={1}
+      key="1"
       onClick={[Function]}
       onlyActiveOnIndex={false}
       style={Object {}}
@@ -114,6 +118,7 @@ exports[`hightlights under selected 1`] = `
       <Link
         className="facet search-navigator-facet projects-facet active"
         data-key={2}
+        key="2"
         onClick={[Function]}
         onlyActiveOnIndex={false}
         style={Object {}}
@@ -133,6 +138,7 @@ exports[`hightlights under selected 1`] = `
       <Link
         className="facet search-navigator-facet projects-facet"
         data-key={3}
+        key="3"
         onClick={[Function]}
         onlyActiveOnIndex={false}
         style={Object {}}
@@ -167,6 +173,7 @@ exports[`renders 1`] = `
     <Link
       className="facet search-navigator-facet projects-facet"
       data-key={1}
+      key="1"
       onClick={[Function]}
       onlyActiveOnIndex={false}
       style={Object {}}
@@ -188,6 +195,7 @@ exports[`renders 1`] = `
     <Link
       className="facet search-navigator-facet projects-facet"
       data-key={2}
+      key="2"
       onClick={[Function]}
       onlyActiveOnIndex={false}
       style={Object {}}
@@ -209,6 +217,7 @@ exports[`renders 1`] = `
     <Link
       className="facet search-navigator-facet projects-facet"
       data-key={3}
+      key="3"
       onClick={[Function]}
       onlyActiveOnIndex={false}
       style={Object {}}
@@ -242,6 +251,7 @@ exports[`renders facet bar chart 1`] = `
     <Link
       className="facet search-navigator-facet projects-facet"
       data-key="a"
+      key="a"
       onClick={[Function]}
       onlyActiveOnIndex={false}
       style={Object {}}
@@ -280,6 +290,7 @@ exports[`renders facet bar chart 1`] = `
     <Link
       className="facet search-navigator-facet projects-facet"
       data-key="b"
+      key="b"
       onClick={[Function]}
       onlyActiveOnIndex={false}
       style={Object {}}
@@ -318,6 +329,7 @@ exports[`renders facet bar chart 1`] = `
     <Link
       className="facet search-navigator-facet projects-facet"
       data-key="c"
+      key="c"
       onClick={[Function]}
       onlyActiveOnIndex={false}
       style={Object {}}
@@ -369,6 +381,7 @@ exports[`renders header and footer 1`] = `
     <Link
       className="facet search-navigator-facet projects-facet"
       data-key={1}
+      key="1"
       onClick={[Function]}
       onlyActiveOnIndex={false}
       style={Object {}}
@@ -390,6 +403,7 @@ exports[`renders header and footer 1`] = `
     <Link
       className="facet search-navigator-facet projects-facet"
       data-key={2}
+      key="2"
       onClick={[Function]}
       onlyActiveOnIndex={false}
       style={Object {}}
@@ -411,6 +425,7 @@ exports[`renders header and footer 1`] = `
     <Link
       className="facet search-navigator-facet projects-facet"
       data-key={3}
+      key="3"
       onClick={[Function]}
       onlyActiveOnIndex={false}
       style={Object {}}
@@ -445,6 +460,7 @@ exports[`renders multiple selected 1`] = `
     <Link
       className="facet search-navigator-facet projects-facet active"
       data-key={1}
+      key="1"
       onClick={[Function]}
       onlyActiveOnIndex={false}
       style={Object {}}
@@ -466,6 +482,7 @@ exports[`renders multiple selected 1`] = `
     <Link
       className="facet search-navigator-facet projects-facet active"
       data-key={2}
+      key="2"
       onClick={[Function]}
       onlyActiveOnIndex={false}
       style={Object {}}
@@ -487,6 +504,7 @@ exports[`renders multiple selected 1`] = `
     <Link
       className="facet search-navigator-facet projects-facet"
       data-key={3}
+      key="3"
       onClick={[Function]}
       onlyActiveOnIndex={false}
       style={Object {}}
@@ -533,6 +551,7 @@ exports[`renders selected 1`] = `
     <Link
       className="facet search-navigator-facet projects-facet"
       data-key={1}
+      key="1"
       onClick={[Function]}
       onlyActiveOnIndex={false}
       style={Object {}}
@@ -554,6 +573,7 @@ exports[`renders selected 1`] = `
     <Link
       className="facet search-navigator-facet projects-facet active"
       data-key={2}
+      key="2"
       onClick={[Function]}
       onlyActiveOnIndex={false}
       style={Object {}}
@@ -573,6 +593,7 @@ exports[`renders selected 1`] = `
     <Link
       className="facet search-navigator-facet projects-facet"
       data-key={3}
+      key="3"
       onClick={[Function]}
       onlyActiveOnIndex={false}
       style={Object {}}
index 38b723918390f844dc6354c2ad45af1a335b0655..3de7fafe7478c5a27fa6fdb8c8ab32cdb8af6c07 100644 (file)
@@ -188,6 +188,7 @@ exports[`should render the languages facet with the selected languages 2`] = `
     <Link
       className="facet search-navigator-facet projects-facet active"
       data-key="java"
+      key="java"
       onClick={[Function]}
       onlyActiveOnIndex={false}
       style={Object {}}
@@ -222,6 +223,7 @@ exports[`should render the languages facet with the selected languages 2`] = `
     <Link
       className="facet search-navigator-facet projects-facet active"
       data-key="cs"
+      key="cs"
       onClick={[Function]}
       onlyActiveOnIndex={false}
       style={Object {}}
@@ -256,6 +258,7 @@ exports[`should render the languages facet with the selected languages 2`] = `
     <Link
       className="facet search-navigator-facet projects-facet"
       data-key="js"
+      key="js"
       onClick={[Function]}
       onlyActiveOnIndex={false}
       style={Object {}}
index 22f13a9b832d1d657029e29d93a0796c92d65a20..66d789e0a75bccad584d305861aa4bff1e4272a7 100644 (file)
@@ -179,6 +179,7 @@ exports[`should render the tags facet with the selected tags 2`] = `
     <Link
       className="facet search-navigator-facet projects-facet active"
       data-key="lang"
+      key="lang"
       onClick={[Function]}
       onlyActiveOnIndex={false}
       style={Object {}}
@@ -207,6 +208,7 @@ exports[`should render the tags facet with the selected tags 2`] = `
     <Link
       className="facet search-navigator-facet projects-facet active"
       data-key="sonar"
+      key="sonar"
       onClick={[Function]}
       onlyActiveOnIndex={false}
       style={Object {}}
@@ -235,6 +237,7 @@ exports[`should render the tags facet with the selected tags 2`] = `
     <Link
       className="facet search-navigator-facet projects-facet"
       data-key="csharp"
+      key="csharp"
       onClick={[Function]}
       onlyActiveOnIndex={false}
       style={Object {}}
index 3e81e28cb5cd724a57f700839383817475a864a6..f446bc626ef0aaa6c21f803d37a689b1784709be 100644 (file)
@@ -18,8 +18,8 @@
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  */
 import * as React from 'react';
-import Modal from 'react-modal';
-import * as Select from 'react-select';
+import * as Modal from 'react-modal';
+import Select from 'react-select';
 import {
   getPermissionTemplates,
   bulkApplyTemplate,
@@ -126,17 +126,15 @@ export default class BulkApplyTemplateModal extends React.PureComponent<Props, S
   renderWarning = () => (
     <div className="alert alert-warning modal-alert">
       <AlertWarnIcon className="spacer-right" />
-      {this.props.selection.length ? (
-        translateWithParameters(
-          'permission_templates.bulk_apply_permission_template.apply_to_selected',
-          this.props.selection.length
-        )
-      ) : (
-        translateWithParameters(
-          'permission_templates.bulk_apply_permission_template.apply_to_all',
-          this.props.total
-        )
-      )}
+      {this.props.selection.length
+        ? translateWithParameters(
+            'permission_templates.bulk_apply_permission_template.apply_to_selected',
+            this.props.selection.length
+          )
+        : translateWithParameters(
+            'permission_templates.bulk_apply_permission_template.apply_to_all',
+            this.props.total
+          )}
     </div>
   );
 
@@ -188,12 +186,12 @@ export default class BulkApplyTemplateModal extends React.PureComponent<Props, S
         <footer className="modal-foot">
           {submitting && <i className="spinner spacer-right" />}
           {!loading &&
-          !done &&
-          permissionTemplates && (
-            <button disabled={submitting} onClick={this.handleConfirmClick}>
-              {translate('apply')}
-            </button>
-          )}
+            !done &&
+            permissionTemplates && (
+              <button disabled={submitting} onClick={this.handleConfirmClick}>
+                {translate('apply')}
+              </button>
+            )}
           <a className="js-modal-close" href="#" onClick={this.handleCancelClick}>
             {done ? translate('close') : translate('cancel')}
           </a>
index 148172bb3c43fa8eb0c661ca79d31740fd2112bb..b464112c980c36b211a99ea03048d221798a228d 100644 (file)
@@ -18,7 +18,7 @@
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  */
 import * as React from 'react';
-import Modal from 'react-modal';
+import * as Modal from 'react-modal';
 import * as classNames from 'classnames';
 import { Organization, Visibility } from '../../app/types';
 import UpgradeOrganizationBox from '../../components/common/UpgradeOrganizationBox';
index 26c90c857b2f33b4536bcdb05f5e83a0a7905f08..07352fda83984dcc12d1123dc1671a8646891845 100644 (file)
@@ -18,7 +18,7 @@
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  */
 import * as React from 'react';
-import Modal from 'react-modal';
+import * as Modal from 'react-modal';
 import { Link } from 'react-router';
 import { FormattedMessage } from 'react-intl';
 import { Organization } from '../../app/types';
index ae0640d1c1effaabf826ace25be97d397866ce65..04ae04af7bc6c71407bf0c01c7c9a40472e227fd 100644 (file)
@@ -18,7 +18,7 @@
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  */
 import * as React from 'react';
-import Modal from 'react-modal';
+import * as Modal from 'react-modal';
 import { bulkDeleteProjects } from '../../api/components';
 import { translate, translateWithParameters } from '../../helpers/l10n';
 import AlertWarnIcon from '../../components/icons-components/AlertWarnIcon';
@@ -87,14 +87,12 @@ export default class DeleteModal extends React.PureComponent<Props, State> {
   renderWarning = () => (
     <div className="alert alert-warning modal-alert">
       <AlertWarnIcon className="spacer-right" />
-      {this.props.selection.length ? (
-        translateWithParameters(
-          'projects_management.delete_selected_warning',
-          this.props.selection.length
-        )
-      ) : (
-        translateWithParameters('projects_management.delete_all_warning', this.props.total)
-      )}
+      {this.props.selection.length
+        ? translateWithParameters(
+            'projects_management.delete_selected_warning',
+            this.props.selection.length
+          )
+        : translateWithParameters('projects_management.delete_all_warning', this.props.total)}
     </div>
   );
 
index 94318dbae7c747acce6439080606ba3e337cee8b..2c9b0684090acace2641dd87cb45158f9c6f57eb 100644 (file)
@@ -18,7 +18,7 @@
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  */
 import * as React from 'react';
-import * as Select from 'react-select';
+import Select from 'react-select';
 import { sortBy } from 'lodash';
 import BulkApplyTemplateModal from './BulkApplyTemplateModal';
 import DeleteModal from './DeleteModal';
index 4cadeebb4a06fd0499b7949fa9a7b9bca30b2ca3..02eab945bf9055dfcfe70b7fbc0e820e772fa7c3 100644 (file)
@@ -12,7 +12,9 @@ exports[`bulk applies template to all results 1`] = `
   overlayClassName="modal-overlay"
   parentSelector={[Function]}
   portalClassName="ReactModalPortal"
+  shouldCloseOnEsc={true}
   shouldCloseOnOverlayClick={true}
+  shouldFocusAfterRender={true}
 >
   <header
     className="modal-head"
@@ -54,7 +56,9 @@ exports[`bulk applies template to all results 2`] = `
   overlayClassName="modal-overlay"
   parentSelector={[Function]}
   portalClassName="ReactModalPortal"
+  shouldCloseOnEsc={true}
   shouldCloseOnOverlayClick={true}
+  shouldFocusAfterRender={true}
 >
   <header
     className="modal-head"
@@ -95,6 +99,7 @@ exports[`bulk applies template to all results 2`] = `
         clearRenderer={[Function]}
         clearValueText="Clear value"
         clearable={false}
+        closeOnSelect={true}
         deleteRemoves={true}
         delimiter=","
         disabled={false}
@@ -115,6 +120,8 @@ exports[`bulk applies template to all results 2`] = `
         onBlurResetsInput={true}
         onChange={[Function]}
         onCloseResetsInput={true}
+        onSelectResetsInput={true}
+        openOnClick={true}
         optionComponent={[Function]}
         options={
           Array [
@@ -173,7 +180,9 @@ exports[`bulk applies template to all results 3`] = `
   overlayClassName="modal-overlay"
   parentSelector={[Function]}
   portalClassName="ReactModalPortal"
+  shouldCloseOnEsc={true}
   shouldCloseOnOverlayClick={true}
+  shouldFocusAfterRender={true}
 >
   <header
     className="modal-head"
@@ -214,6 +223,7 @@ exports[`bulk applies template to all results 3`] = `
         clearRenderer={[Function]}
         clearValueText="Clear value"
         clearable={false}
+        closeOnSelect={true}
         deleteRemoves={true}
         delimiter=","
         disabled={true}
@@ -234,6 +244,8 @@ exports[`bulk applies template to all results 3`] = `
         onBlurResetsInput={true}
         onChange={[Function]}
         onCloseResetsInput={true}
+        onSelectResetsInput={true}
+        openOnClick={true}
         optionComponent={[Function]}
         options={
           Array [
@@ -295,7 +307,9 @@ exports[`bulk applies template to all results 4`] = `
   overlayClassName="modal-overlay"
   parentSelector={[Function]}
   portalClassName="ReactModalPortal"
+  shouldCloseOnEsc={true}
   shouldCloseOnOverlayClick={true}
+  shouldFocusAfterRender={true}
 >
   <header
     className="modal-head"
@@ -339,7 +353,9 @@ exports[`bulk applies template to selected results 1`] = `
   overlayClassName="modal-overlay"
   parentSelector={[Function]}
   portalClassName="ReactModalPortal"
+  shouldCloseOnEsc={true}
   shouldCloseOnOverlayClick={true}
+  shouldFocusAfterRender={true}
 >
   <header
     className="modal-head"
@@ -381,7 +397,9 @@ exports[`bulk applies template to selected results 2`] = `
   overlayClassName="modal-overlay"
   parentSelector={[Function]}
   portalClassName="ReactModalPortal"
+  shouldCloseOnEsc={true}
   shouldCloseOnOverlayClick={true}
+  shouldFocusAfterRender={true}
 >
   <header
     className="modal-head"
@@ -422,6 +440,7 @@ exports[`bulk applies template to selected results 2`] = `
         clearRenderer={[Function]}
         clearValueText="Clear value"
         clearable={false}
+        closeOnSelect={true}
         deleteRemoves={true}
         delimiter=","
         disabled={false}
@@ -442,6 +461,8 @@ exports[`bulk applies template to selected results 2`] = `
         onBlurResetsInput={true}
         onChange={[Function]}
         onCloseResetsInput={true}
+        onSelectResetsInput={true}
+        openOnClick={true}
         optionComponent={[Function]}
         options={
           Array [
@@ -500,7 +521,9 @@ exports[`bulk applies template to selected results 3`] = `
   overlayClassName="modal-overlay"
   parentSelector={[Function]}
   portalClassName="ReactModalPortal"
+  shouldCloseOnEsc={true}
   shouldCloseOnOverlayClick={true}
+  shouldFocusAfterRender={true}
 >
   <header
     className="modal-head"
@@ -541,6 +564,7 @@ exports[`bulk applies template to selected results 3`] = `
         clearRenderer={[Function]}
         clearValueText="Clear value"
         clearable={false}
+        closeOnSelect={true}
         deleteRemoves={true}
         delimiter=","
         disabled={true}
@@ -561,6 +585,8 @@ exports[`bulk applies template to selected results 3`] = `
         onBlurResetsInput={true}
         onChange={[Function]}
         onCloseResetsInput={true}
+        onSelectResetsInput={true}
+        openOnClick={true}
         optionComponent={[Function]}
         options={
           Array [
@@ -622,7 +648,9 @@ exports[`bulk applies template to selected results 4`] = `
   overlayClassName="modal-overlay"
   parentSelector={[Function]}
   portalClassName="ReactModalPortal"
+  shouldCloseOnEsc={true}
   shouldCloseOnOverlayClick={true}
+  shouldFocusAfterRender={true}
 >
   <header
     className="modal-head"
index d46e88f161fd3aedeb0b46da65042039495e0871..2eaf4fb187dba5c4373caf354db5c199542a6ce0 100644 (file)
@@ -12,7 +12,9 @@ exports[`changes visibility 1`] = `
   overlayClassName="modal-overlay"
   parentSelector={[Function]}
   portalClassName="ReactModalPortal"
+  shouldCloseOnEsc={true}
   shouldCloseOnOverlayClick={true}
+  shouldFocusAfterRender={true}
 >
   <header
     className="modal-head"
@@ -26,6 +28,7 @@ exports[`changes visibility 1`] = `
   >
     <div
       className="big-spacer-bottom"
+      key="public"
     >
       <p>
         <a
@@ -53,6 +56,7 @@ exports[`changes visibility 1`] = `
     </div>
     <div
       className="big-spacer-bottom"
+      key="private"
     >
       <p>
         <a
@@ -116,7 +120,9 @@ exports[`changes visibility 2`] = `
   overlayClassName="modal-overlay"
   parentSelector={[Function]}
   portalClassName="ReactModalPortal"
+  shouldCloseOnEsc={true}
   shouldCloseOnOverlayClick={true}
+  shouldFocusAfterRender={true}
 >
   <header
     className="modal-head"
@@ -130,6 +136,7 @@ exports[`changes visibility 2`] = `
   >
     <div
       className="big-spacer-bottom"
+      key="public"
     >
       <p>
         <a
@@ -157,6 +164,7 @@ exports[`changes visibility 2`] = `
     </div>
     <div
       className="big-spacer-bottom"
+      key="private"
     >
       <p>
         <a
@@ -220,7 +228,9 @@ exports[`renders disabled 1`] = `
   overlayClassName="modal-overlay"
   parentSelector={[Function]}
   portalClassName="ReactModalPortal"
+  shouldCloseOnEsc={true}
   shouldCloseOnOverlayClick={true}
+  shouldFocusAfterRender={true}
 >
   <header
     className="modal-head"
@@ -234,6 +244,7 @@ exports[`renders disabled 1`] = `
   >
     <div
       className="big-spacer-bottom"
+      key="public"
     >
       <p>
         <a
@@ -261,6 +272,7 @@ exports[`renders disabled 1`] = `
     </div>
     <div
       className="big-spacer-bottom"
+      key="private"
     >
       <p>
         <span
index 7a9c5c62141e282ad1f541207086a1469f266030..322cdd80dda5c0857f87f88ae22134f4e9f58abe 100644 (file)
@@ -12,7 +12,9 @@ exports[`creates project 1`] = `
   overlayClassName="modal-overlay"
   parentSelector={[Function]}
   portalClassName="ReactModalPortal"
+  shouldCloseOnEsc={true}
   shouldCloseOnOverlayClick={true}
+  shouldFocusAfterRender={true}
 >
   <form
     id="create-project-form"
@@ -140,7 +142,9 @@ exports[`creates project 2`] = `
   overlayClassName="modal-overlay"
   parentSelector={[Function]}
   portalClassName="ReactModalPortal"
+  shouldCloseOnEsc={true}
   shouldCloseOnOverlayClick={true}
+  shouldFocusAfterRender={true}
 >
   <form
     id="create-project-form"
@@ -268,7 +272,9 @@ exports[`creates project 3`] = `
   overlayClassName="modal-overlay"
   parentSelector={[Function]}
   portalClassName="ReactModalPortal"
+  shouldCloseOnEsc={true}
   shouldCloseOnOverlayClick={true}
+  shouldFocusAfterRender={true}
 >
   <form
     id="create-project-form"
@@ -399,7 +405,9 @@ exports[`creates project 4`] = `
   overlayClassName="modal-overlay"
   parentSelector={[Function]}
   portalClassName="ReactModalPortal"
+  shouldCloseOnEsc={true}
   shouldCloseOnOverlayClick={true}
+  shouldFocusAfterRender={true}
 >
   <div>
     <header
@@ -424,17 +432,17 @@ exports[`creates project 4`] = `
                 onlyActiveOnIndex={false}
                 style={Object {}}
                 to={
-                    Object {
-                        "pathname": "/dashboard",
-                        "query": Object {
-                          "branch": undefined,
-                          "id": "name",
-                        },
-                      }
+                  Object {
+                    "pathname": "/dashboard",
+                    "query": Object {
+                      "branch": undefined,
+                      "id": "name",
+                    },
+                  }
                 }
-            >
+              >
                 name
-            </Link>,
+              </Link>,
             }
           }
         />
@@ -467,7 +475,9 @@ exports[`shows more 1`] = `
   overlayClassName="modal-overlay"
   parentSelector={[Function]}
   portalClassName="ReactModalPortal"
+  shouldCloseOnEsc={true}
   shouldCloseOnOverlayClick={true}
+  shouldFocusAfterRender={true}
 >
   <form
     id="create-project-form"
@@ -595,7 +605,9 @@ exports[`shows more 2`] = `
   overlayClassName="modal-overlay"
   parentSelector={[Function]}
   portalClassName="ReactModalPortal"
+  shouldCloseOnEsc={true}
   shouldCloseOnOverlayClick={true}
+  shouldFocusAfterRender={true}
 >
   <form
     id="create-project-form"
index 12d6e222a77c2121f3e820c9cf2416002ad71368..9e568644af0043f0dbf4240713a5b42b62e44c42 100644 (file)
@@ -12,7 +12,9 @@ exports[`deletes all projects 1`] = `
   overlayClassName="modal-overlay"
   parentSelector={[Function]}
   portalClassName="ReactModalPortal"
+  shouldCloseOnEsc={true}
   shouldCloseOnOverlayClick={true}
+  shouldFocusAfterRender={true}
 >
   <header
     className="modal-head"
@@ -67,7 +69,9 @@ exports[`deletes all projects 2`] = `
   overlayClassName="modal-overlay"
   parentSelector={[Function]}
   portalClassName="ReactModalPortal"
+  shouldCloseOnEsc={true}
   shouldCloseOnOverlayClick={true}
+  shouldFocusAfterRender={true}
 >
   <header
     className="modal-head"
@@ -125,7 +129,9 @@ exports[`deletes selected projects 1`] = `
   overlayClassName="modal-overlay"
   parentSelector={[Function]}
   portalClassName="ReactModalPortal"
+  shouldCloseOnEsc={true}
   shouldCloseOnOverlayClick={true}
+  shouldFocusAfterRender={true}
 >
   <header
     className="modal-head"
@@ -180,7 +186,9 @@ exports[`deletes selected projects 2`] = `
   overlayClassName="modal-overlay"
   parentSelector={[Function]}
   portalClassName="ReactModalPortal"
+  shouldCloseOnEsc={true}
   shouldCloseOnOverlayClick={true}
+  shouldFocusAfterRender={true}
 >
   <header
     className="modal-head"
index 2c60880eb28eb6f42a10757619b739b7651e8fab..6705b982c5aee5f20208d9a5d17f1e700d7698d7 100644 (file)
@@ -25,6 +25,7 @@ exports[`renders list of projects 1`] = `
   </thead>
   <tbody>
     <ProjectRow
+      key="a"
       onApplyTemplateClick={[Function]}
       onProjectCheck={[Function]}
       project={
@@ -38,6 +39,7 @@ exports[`renders list of projects 1`] = `
       selected={true}
     />
     <ProjectRow
+      key="b"
       onApplyTemplateClick={[Function]}
       onProjectCheck={[Function]}
       project={
index cebeb62f2c9d43135c4fe16a2a6aab65b40e434a..5e8bdfddf0dce056a026bc8bbb3a9532bf016293 100644 (file)
@@ -63,6 +63,7 @@ exports[`render qualifiers filter 1`] = `
             clearRenderer={[Function]}
             clearValueText="Clear value"
             clearable={false}
+            closeOnSelect={true}
             deleteRemoves={true}
             delimiter=","
             disabled={false}
@@ -84,6 +85,8 @@ exports[`render qualifiers filter 1`] = `
             onBlurResetsInput={true}
             onChange={[Function]}
             onCloseResetsInput={true}
+            onSelectResetsInput={true}
+            openOnClick={true}
             optionComponent={[Function]}
             optionRenderer={[Function]}
             options={
index 6acb20708d839e2293aacc00c89a731b4b6a707c..073ce1387460bf27df62152fb22fa1f4d95d37bc 100644 (file)
@@ -59,11 +59,9 @@ export default class DetailsHeader extends React.PureComponent {
                     {translate('copy')}
                   </button>
                   <button id="quality-gate-toggle-default" onClick={this.handleSetAsDefaultClick}>
-                    {qualityGate.isDefault ? (
-                      translate('unset_as_default')
-                    ) : (
-                      translate('set_as_default')
-                    )}
+                    {qualityGate.isDefault
+                      ? translate('unset_as_default')
+                      : translate('set_as_default')}
                   </button>
                   <button
                     id="quality-gate-delete"
index 9d05395586e81023adf067b423bcd751bf060121..773292079001b7589349fcb13aeac993525707da 100644 (file)
@@ -185,9 +185,9 @@ export default class ChangelogContainer extends React.PureComponent<Props, State
         {this.state.events != null && this.state.events.length === 0 && <ChangelogEmpty />}
 
         {this.state.events != null &&
-        this.state.events.length > 0 && (
-          <Changelog events={this.state.events} organization={this.props.organization} />
-        )}
+          this.state.events.length > 0 && (
+            <Changelog events={this.state.events} organization={this.props.organization} />
+          )}
 
         {shouldDisplayFooter && (
           <footer className="text-center spacer-top small">
index e8d2ec75551fc390ecb017c37a06acdbbb0891ea..40e0fa890182caa0246fbbc1300f64c15abd91bb 100644 (file)
@@ -28,11 +28,12 @@ interface Props {
 export default function ParameterChange({ name, value }: Props) {
   return (
     <div className="quality-profile-changelog-parameter">
-      {value == null ? (
-        translateWithParameters('quality_profiles.changelog.parameter_reset_to_default_value', name)
-      ) : (
-        translateWithParameters('quality_profiles.parameter_set_to', name, value)
-      )}
+      {value == null
+        ? translateWithParameters(
+            'quality_profiles.changelog.parameter_reset_to_default_value',
+            name
+          )
+        : translateWithParameters('quality_profiles.parameter_set_to', name, value)}
     </div>
   );
 }
index a71123b1927dbac3d33e96168d5c694aee11ce3f..173d1d0dbb32da8c9c3d1ef1fbf157d9a9cc4209 100644 (file)
@@ -126,21 +126,21 @@ export default class ComparisonContainer extends React.PureComponent<Props, Stat
         </header>
 
         {left != null &&
-        inLeft != null &&
-        right != null &&
-        inRight != null &&
-        modified != null && (
-          <div className="spacer-top">
-            <ComparisonResults
-              left={left}
-              right={right}
-              inLeft={inLeft}
-              inRight={inRight}
-              modified={modified}
-              organization={this.props.organization}
-            />
-          </div>
-        )}
+          inLeft != null &&
+          right != null &&
+          inRight != null &&
+          modified != null && (
+            <div className="spacer-top">
+              <ComparisonResults
+                left={left}
+                right={right}
+                inLeft={inLeft}
+                inRight={inRight}
+                modified={modified}
+                organization={this.props.organization}
+              />
+            </div>
+          )}
       </div>
     );
   }
index bee2e948e07351b0f2cf48363fd45698e4ff6a98..384c0cf35257dcefc4639aca3419c12d6e241ee1 100644 (file)
@@ -18,7 +18,7 @@
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  */
 import * as React from 'react';
-import * as Select from 'react-select';
+import Select from 'react-select';
 import { translate } from '../../../helpers/l10n';
 import { Profile } from '../types';
 
index 70f58f01ea64eb53679edc554e405f0940a7e998..963b09cd24e242943bcdb18a170af5b7d8d2a3c9 100644 (file)
@@ -18,7 +18,7 @@
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  */
 import * as React from 'react';
-import Modal from 'react-modal';
+import * as Modal from 'react-modal';
 import { copyProfile } from '../../../api/quality-profiles';
 import { translate, translateWithParameters } from '../../../helpers/l10n';
 import { Profile } from '../types';
index 9a25f9c30078ec7944995dbf4f9b5143c84f93f5..99b85e7aad9974998028097501a286b9602ba6be 100644 (file)
@@ -18,7 +18,7 @@
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  */
 import * as React from 'react';
-import Modal from 'react-modal';
+import * as Modal from 'react-modal';
 import { deleteProfile } from '../../../api/quality-profiles';
 import { translate, translateWithParameters } from '../../../helpers/l10n';
 import { Profile } from '../types';
index 164943c43c4171b91f351c31faf6bc1f5198b2c7..8906db09a3b4468d7e1b46efaa1af375bea8d960 100644 (file)
@@ -134,11 +134,11 @@ export default class ProfileActions extends React.PureComponent<Props, State> {
     return (
       <ul className="dropdown-menu dropdown-menu-right">
         {actions.edit &&
-        !profile.isBuiltIn && (
-          <li>
-            <Link to={activateMoreUrl}>{translate('quality_profiles.activate_more_rules')}</Link>
-          </li>
-        )}
+          !profile.isBuiltIn && (
+            <li>
+              <Link to={activateMoreUrl}>{translate('quality_profiles.activate_more_rules')}</Link>
+            </li>
+          )}
         {!profile.isBuiltIn && (
           <li>
             <a id="quality-profile-backup" href={backupUrl}>
@@ -161,30 +161,30 @@ export default class ProfileActions extends React.PureComponent<Props, State> {
           </li>
         )}
         {actions.edit &&
-        !profile.isBuiltIn && (
-          <li>
-            <a id="quality-profile-rename" href="#" onClick={this.handleRenameClick}>
-              {translate('rename')}
-            </a>
-          </li>
-        )}
+          !profile.isBuiltIn && (
+            <li>
+              <a id="quality-profile-rename" href="#" onClick={this.handleRenameClick}>
+                {translate('rename')}
+              </a>
+            </li>
+          )}
         {actions.setAsDefault &&
-        !profile.isDefault && (
-          <li>
-            <a id="quality-profile-set-as-default" href="#" onClick={this.handleSetDefaultClick}>
-              {translate('set_as_default')}
-            </a>
-          </li>
-        )}
+          !profile.isDefault && (
+            <li>
+              <a id="quality-profile-set-as-default" href="#" onClick={this.handleSetDefaultClick}>
+                {translate('set_as_default')}
+              </a>
+            </li>
+          )}
         {actions.edit &&
-        !profile.isDefault &&
-        !profile.isBuiltIn && (
-          <li>
-            <a id="quality-profile-delete" href="#" onClick={this.handleDeleteClick}>
-              {translate('delete')}
-            </a>
-          </li>
-        )}
+          !profile.isDefault &&
+          !profile.isBuiltIn && (
+            <li>
+              <a id="quality-profile-delete" href="#" onClick={this.handleDeleteClick}>
+                {translate('delete')}
+              </a>
+            </li>
+          )}
 
         {this.state.copyFormOpen && (
           <CopyProfileForm
index d8c4951f02ca60ff1c79333906012a124e952bbc..33cc3e4c9f821dff826803fd62757dd2bb417416 100644 (file)
@@ -18,7 +18,7 @@
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  */
 import * as React from 'react';
-import Modal from 'react-modal';
+import * as Modal from 'react-modal';
 import { renameProfile } from '../../../api/quality-profiles';
 import { translate, translateWithParameters } from '../../../helpers/l10n';
 import { Profile } from '../types';
index 2327cd7acc0ae784ad18352e36ac93db72227c26..204d6ff03485e07737d856276b28927c06e3f744 100644 (file)
@@ -18,8 +18,8 @@
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  */
 import * as React from 'react';
-import Modal from 'react-modal';
-import * as Select from 'react-select';
+import * as Modal from 'react-modal';
+import Select from 'react-select';
 import { sortBy } from 'lodash';
 import { changeProfileParent } from '../../../api/quality-profiles';
 import { translate } from '../../../helpers/l10n';
@@ -120,11 +120,9 @@ export default class ChangeParentForm extends React.PureComponent<Props, State>
                 onChange={this.handleSelectChange}
                 options={options}
                 value={
-                  this.state.selected != null ? (
-                    this.state.selected
-                  ) : (
-                    this.props.profile.parentKey || ''
-                  )
+                  this.state.selected != null
+                    ? this.state.selected
+                    : this.props.profile.parentKey || ''
                 }
               />
             </div>
index 3467fb01b190f84dbc7c232c6bc5b151a3d8d5cf..6e1095c4eac97c8eb097f780f49bd912cdd9c871 100644 (file)
@@ -18,7 +18,7 @@
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  */
 import * as React from 'react';
-import Modal from 'react-modal';
+import * as Modal from 'react-modal';
 import * as escapeHtml from 'escape-html';
 import SelectList from '../../../components/SelectList';
 import { translate } from '../../../helpers/l10n';
index 524a148dadd3abbbd1aea81a8e0183929efdaf05..4ffed5d56cc15b2c12f3da1e50bf5bd930d5076c 100644 (file)
@@ -43,10 +43,13 @@ export default function ProfileDetails(props: Props) {
           <ProfileRules {...props} />
           <ProfileExporters {...props} />
           {profile.actions &&
-          profile.actions.edit &&
-          !profile.isBuiltIn && (
-            <ProfilePermissions organization={props.organization || undefined} profile={profile} />
-          )}
+            profile.actions.edit &&
+            !profile.isBuiltIn && (
+              <ProfilePermissions
+                organization={props.organization || undefined}
+                profile={profile}
+              />
+            )}
         </div>
         <div className="quality-profile-grid-right">
           <ProfileInheritance {...props} />
index 77f8a92a7f1ba1e03b68adb1751581cd12d503b1..290ea8f3bb0405fa49aa82f70a7d5ccdaae5b7d7 100644 (file)
@@ -120,14 +120,16 @@ export default class ProfileInheritance extends React.PureComponent<Props, State
     return (
       <div className="boxed-group quality-profile-inheritance">
         {profile.actions &&
-        profile.actions.edit &&
-        !profile.isBuiltIn && (
-          <div className="boxed-group-actions">
-            <button className="pull-right js-change-parent" onClick={this.handleChangeParentClick}>
-              {translate('quality_profiles.change_parent')}
-            </button>
-          </div>
-        )}
+          profile.actions.edit &&
+          !profile.isBuiltIn && (
+            <div className="boxed-group-actions">
+              <button
+                className="pull-right js-change-parent"
+                onClick={this.handleChangeParentClick}>
+                {translate('quality_profiles.change_parent')}
+              </button>
+            </div>
+          )}
 
         <header className="boxed-group-header">
           <h2>{translate('quality_profiles.profile_inheritance')}</h2>
index 8d892127fc78f26a315ec3017a6461a02390c065..2431856c53c6479fb54bf8c5cdfae83558bc6209 100644 (file)
@@ -18,7 +18,7 @@
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  */
 import * as React from 'react';
-import Modal from 'react-modal';
+import * as Modal from 'react-modal';
 import ProfilePermissionsFormSelect from './ProfilePermissionsFormSelect';
 import {
   searchUsers,
index 911bf55cca4a9e6d4d97e02e10c03240a2244bba..fcf87c6cbe7dcaafed714be0bc801500009d285a 100644 (file)
@@ -18,7 +18,7 @@
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  */
 import * as React from 'react';
-import * as Select from 'react-select';
+import Select from 'react-select';
 import { debounce, identity } from 'lodash';
 import { User, Group } from './ProfilePermissions';
 import Avatar from '../../../components/ui/Avatar';
index b809abd6a6f186978bcca65dd9974fcc6951ee05..9b1acd46c8e1d9cdef7085b62fd10e259cbd5891 100644 (file)
@@ -130,14 +130,14 @@ export default class ProfileProjects extends React.PureComponent<Props, State> {
     return (
       <div className="boxed-group quality-profile-projects">
         {profile.actions &&
-        profile.actions.edit &&
-        !profile.isDefault && (
-          <div className="boxed-group-actions">
-            <button className="js-change-projects" onClick={this.handleChangeClick}>
-              {translate('quality_profiles.change_projects')}
-            </button>
-          </div>
-        )}
+          profile.actions.edit &&
+          !profile.isDefault && (
+            <div className="boxed-group-actions">
+              <button className="js-change-projects" onClick={this.handleChangeClick}>
+                {translate('quality_profiles.change_projects')}
+              </button>
+            </div>
+          )}
 
         <header className="boxed-group-header">
           <h2>{translate('projects')}</h2>
index b2ab673292117a8ce3663c55702ad1f202cf022b..facde0a4a34d9018c5ffdea1eb1beaae8d20f390 100644 (file)
@@ -184,14 +184,14 @@ export default class ProfileRules extends React.PureComponent<Props, State> {
           </table>
 
           {profile.actions &&
-          profile.actions.edit &&
-          !profile.isBuiltIn && (
-            <div className="text-right big-spacer-top">
-              <Link to={activateMoreUrl} className="button js-activate-rules">
-                {translate('quality_profiles.activate_more')}
-              </Link>
-            </div>
-          )}
+            profile.actions.edit &&
+            !profile.isBuiltIn && (
+              <div className="text-right big-spacer-top">
+                <Link to={activateMoreUrl} className="button js-activate-rules">
+                  {translate('quality_profiles.activate_more')}
+                </Link>
+              </div>
+            )}
         </div>
         {profile.activeDeprecatedRuleCount > 0 && (
           <ProfileRulesDeprecatedWarning
@@ -201,15 +201,15 @@ export default class ProfileRules extends React.PureComponent<Props, State> {
           />
         )}
         {compareToSonarWay != null &&
-        compareToSonarWay.missingRuleCount > 0 && (
-          <ProfileRulesSonarWayComparison
-            language={profile.language}
-            organization={organization}
-            profile={profile.key}
-            sonarway={compareToSonarWay.profile}
-            sonarWayMissingRules={compareToSonarWay.missingRuleCount}
-          />
-        )}
+          compareToSonarWay.missingRuleCount > 0 && (
+            <ProfileRulesSonarWayComparison
+              language={profile.language}
+              organization={organization}
+              profile={profile.key}
+              sonarway={compareToSonarWay.profile}
+              sonarWayMissingRules={compareToSonarWay.missingRuleCount}
+            />
+          )}
       </div>
     );
   }
index 806ca57c73c2f49b75bad4e5fafdf57f5e13c049..9dd2c1d6c4769c153dbcd845040affc6bca53e1c 100644 (file)
@@ -45,6 +45,7 @@ exports[`renders 2`] = `
       className="big-spacer-top"
     >
       <ProfilePermissionsUser
+        key="luke"
         onDelete={[Function]}
         profile={
           Object {
@@ -65,6 +66,7 @@ exports[`renders 2`] = `
             "name": "Lambda",
           }
         }
+        key="Lambda"
         onDelete={[Function]}
         profile={
           Object {
index d8b0f2354d07017e9c892fe2e64db36cdc706aeb..7acbdb7e0057fb5f2fd55b1c691c1bc06f23b2ff 100644 (file)
@@ -12,7 +12,9 @@ exports[`adds group 1`] = `
   overlayClassName="modal-overlay"
   parentSelector={[Function]}
   portalClassName="ReactModalPortal"
+  shouldCloseOnEsc={true}
   shouldCloseOnOverlayClick={true}
+  shouldFocusAfterRender={true}
 >
   <header
     className="modal-head"
@@ -72,7 +74,9 @@ exports[`adds group 2`] = `
   overlayClassName="modal-overlay"
   parentSelector={[Function]}
   portalClassName="ReactModalPortal"
+  shouldCloseOnEsc={true}
   shouldCloseOnOverlayClick={true}
+  shouldFocusAfterRender={true}
 >
   <header
     className="modal-head"
@@ -137,7 +141,9 @@ exports[`adds group 3`] = `
   overlayClassName="modal-overlay"
   parentSelector={[Function]}
   portalClassName="ReactModalPortal"
+  shouldCloseOnEsc={true}
   shouldCloseOnOverlayClick={true}
+  shouldFocusAfterRender={true}
 >
   <header
     className="modal-head"
@@ -205,7 +211,9 @@ exports[`adds user 1`] = `
   overlayClassName="modal-overlay"
   parentSelector={[Function]}
   portalClassName="ReactModalPortal"
+  shouldCloseOnEsc={true}
   shouldCloseOnOverlayClick={true}
+  shouldFocusAfterRender={true}
 >
   <header
     className="modal-head"
@@ -265,7 +273,9 @@ exports[`adds user 2`] = `
   overlayClassName="modal-overlay"
   parentSelector={[Function]}
   portalClassName="ReactModalPortal"
+  shouldCloseOnEsc={true}
   shouldCloseOnOverlayClick={true}
+  shouldFocusAfterRender={true}
 >
   <header
     className="modal-head"
@@ -330,7 +340,9 @@ exports[`adds user 3`] = `
   overlayClassName="modal-overlay"
   parentSelector={[Function]}
   portalClassName="ReactModalPortal"
+  shouldCloseOnEsc={true}
   shouldCloseOnOverlayClick={true}
+  shouldFocusAfterRender={true}
 >
   <header
     className="modal-head"
index 10e1ea582f76ed1eb451899d537d52ff2fa55637..818fc5af3421cd74bc884928c30f2894e63ddc83 100644 (file)
@@ -13,6 +13,7 @@ exports[`renders 1`] = `
   clearRenderer={[Function]}
   clearValueText="Clear value"
   clearable={false}
+  closeOnSelect={true}
   deleteRemoves={true}
   delimiter=","
   disabled={false}
@@ -34,6 +35,8 @@ exports[`renders 1`] = `
   onChange={[Function]}
   onCloseResetsInput={true}
   onInputChange={[Function]}
+  onSelectResetsInput={true}
+  openOnClick={true}
   optionComponent={[Function]}
   optionRenderer={[Function]}
   options={Array []}
index 315e117ffbad4f242799a2a16fd91f70c0af45fd..6d92fb9ab26cc264c753ec5ee5e7a89f03877230 100644 (file)
@@ -28,12 +28,14 @@ exports[`should render the quality profiles rules with sonarway comparison 1`] =
       <tbody>
         <ProfileRulesRowTotal
           count={68}
+          key="all"
           organization="foo"
           qprofile="foo"
           total={243}
         />
         <ProfileRulesRowOfType
           count={68}
+          key="BUG"
           organization="foo"
           qprofile="foo"
           total={68}
@@ -41,6 +43,7 @@ exports[`should render the quality profiles rules with sonarway comparison 1`] =
         />
         <ProfileRulesRowOfType
           count={0}
+          key="VULNERABILITY"
           organization="foo"
           qprofile="foo"
           total={7}
@@ -48,6 +51,7 @@ exports[`should render the quality profiles rules with sonarway comparison 1`] =
         />
         <ProfileRulesRowOfType
           count={0}
+          key="CODE_SMELL"
           organization="foo"
           qprofile="foo"
           total={168}
index ed4dbb325ac27799958e28c5d257590f5e72a7c5..a58a721f00ef625a7a560081d69dc2744c5078e8 100644 (file)
@@ -18,8 +18,8 @@
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  */
 import * as React from 'react';
-import Modal from 'react-modal';
-import * as Select from 'react-select';
+import * as Modal from 'react-modal';
+import Select from 'react-select';
 import { sortBy } from 'lodash';
 import { getImporters, createQualityProfile } from '../../../api/quality-profiles';
 import { translate } from '../../../helpers/l10n';
index 9ff9410a37c024e77e53f4f9534b92fd40bef899..bc4c085d89e53464783683176ef2c5d55b309082 100644 (file)
@@ -121,18 +121,16 @@ export default class EvolutionRules extends React.PureComponent<Props, State> {
                   {rule.name}
                 </Link>
                 <div className="note">
-                  {rule.activations ? (
-                    translateWithParameters(
-                      'quality_profiles.latest_new_rules.activated',
-                      rule.langName,
-                      rule.activations
-                    )
-                  ) : (
-                    translateWithParameters(
-                      'quality_profiles.latest_new_rules.not_activated',
-                      rule.langName
-                    )
-                  )}
+                  {rule.activations
+                    ? translateWithParameters(
+                        'quality_profiles.latest_new_rules.activated',
+                        rule.langName,
+                        rule.activations
+                      )
+                    : translateWithParameters(
+                        'quality_profiles.latest_new_rules.not_activated',
+                        rule.langName
+                      )}
                 </div>
               </div>
             </li>
index 49674ef4d46209dea41f7467a50e23a1a93fd8ee..da5b8b617327c25e5206f1151564d86470014b21 100644 (file)
@@ -71,6 +71,17 @@ export default class ProfilesList extends React.PureComponent<Props> {
     );
   }
 
+  renderLanguage = (languageKey: string, profiles: Profile[] | undefined) => {
+    return (
+      <div key={languageKey} className="boxed-group boxed-group-inner quality-profiles-table">
+        <table data-language={languageKey} className="data zebra zebra-hover">
+          {profiles !== undefined && this.renderHeader(languageKey, profiles.length)}
+          <tbody>{profiles !== undefined && this.renderProfiles(profiles)}</tbody>
+        </table>
+      </div>
+    );
+  };
+
   render() {
     const { profiles, languages } = this.props;
     const { language } = this.props.location.query;
@@ -80,9 +91,7 @@ export default class ProfilesList extends React.PureComponent<Props> {
       profile => profile.language
     );
 
-    const profilesToShow: { [language: string]: Profile[] } = language
-      ? pick(profilesIndex, language)
-      : profilesIndex;
+    const profilesToShow = language ? pick(profilesIndex, language) : profilesIndex;
 
     const languagesToShow = sortBy(Object.keys(profilesToShow));
 
@@ -98,19 +107,9 @@ export default class ProfilesList extends React.PureComponent<Props> {
           <div className="alert alert-warning spacer-top">{translate('no_results')}</div>
         )}
 
-        {languagesToShow.map(languageKey => (
-          <div key={languageKey} className="boxed-group boxed-group-inner quality-profiles-table">
-            <table data-language={languageKey} className="data zebra zebra-hover">
-              {profilesToShow[languageKey] != null &&
-                this.renderHeader(languageKey, profilesToShow[languageKey].length)}
-
-              <tbody>
-                {profilesToShow[languageKey] != null &&
-                  this.renderProfiles(profilesToShow[languageKey])}
-              </tbody>
-            </table>
-          </div>
-        ))}
+        {languagesToShow.map(languageKey =>
+          this.renderLanguage(languageKey, profilesToShow[languageKey])
+        )}
       </div>
     );
   }
index 021f5951af80b8e532a15e1b56749bcf0618bcbf..b63924e5a28c66444213851c74aad68fe90db2a9 100644 (file)
@@ -18,7 +18,7 @@
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  */
 import * as React from 'react';
-import Modal from 'react-modal';
+import * as Modal from 'react-modal';
 import { restoreQualityProfile } from '../../../api/quality-profiles';
 import { translate, translateWithParameters } from '../../../helpers/l10n';
 
@@ -102,23 +102,25 @@ export default class RestoreProfileForm extends React.PureComponent<Props, State
           </div>
 
           <div className="modal-body">
-            {profile != null && ruleSuccesses != null ? ruleFailures ? (
-              <div className="alert alert-warning">
-                {translateWithParameters(
-                  'quality_profiles.restore_profile.warning',
-                  profile.name,
-                  ruleSuccesses,
-                  ruleFailures
-                )}
-              </div>
-            ) : (
-              <div className="alert alert-success">
-                {translateWithParameters(
-                  'quality_profiles.restore_profile.success',
-                  profile.name,
-                  ruleSuccesses
-                )}
-              </div>
+            {profile != null && ruleSuccesses != null ? (
+              ruleFailures ? (
+                <div className="alert alert-warning">
+                  {translateWithParameters(
+                    'quality_profiles.restore_profile.warning',
+                    profile.name,
+                    ruleSuccesses,
+                    ruleFailures
+                  )}
+                </div>
+              ) : (
+                <div className="alert alert-success">
+                  {translateWithParameters(
+                    'quality_profiles.restore_profile.success',
+                    profile.name,
+                    ruleSuccesses
+                  )}
+                </div>
+              )
             ) : (
               <div className="modal-field">
                 <label htmlFor="restore-profile-backup">
index 29a5edfb34112d837ceae2f24c8899302f84fe9a..2bebbea19e1ec3ddca91fb65e7a2ad391ccdc6cb 100644 (file)
@@ -45,14 +45,24 @@ it('logs in with simple credentials', () => {
 
 it('logs in with identity provider', () => {
   const wrapper = shallow(
-    <LoginForm onSonarCloud={false} identityProviders={[identityProvider]} onSubmit={jest.fn()} returnTo="" />
+    <LoginForm
+      onSonarCloud={false}
+      identityProviders={[identityProvider]}
+      onSubmit={jest.fn()}
+      returnTo=""
+    />
   );
   expect(wrapper).toMatchSnapshot();
 });
 
 it('expands more options', () => {
   const wrapper = shallow(
-    <LoginForm onSonarCloud={false} identityProviders={[identityProvider]} onSubmit={jest.fn()} returnTo="" />
+    <LoginForm
+      onSonarCloud={false}
+      identityProviders={[identityProvider]}
+      onSubmit={jest.fn()}
+      returnTo=""
+    />
   );
   expect(wrapper).toMatchSnapshot();
 
index 5c1f7f0b45f35efac4e24ac2d2364f7bbc02d249..29250dd1a4f7c8bc95ad3503f13aaa078f41c04d 100644 (file)
@@ -164,25 +164,25 @@ class Definition extends React.PureComponent {
             )}
 
             {!loading &&
-            this.props.validationMessage != null && (
-              <span className="text-danger">
-                <i className="icon-alert-error spacer-right" />
-                <span>
-                  {translateWithParameters(
-                    'settings.state.validation_failed',
-                    this.props.validationMessage
-                  )}
+              this.props.validationMessage != null && (
+                <span className="text-danger">
+                  <i className="icon-alert-error spacer-right" />
+                  <span>
+                    {translateWithParameters(
+                      'settings.state.validation_failed',
+                      this.props.validationMessage
+                    )}
+                  </span>
                 </span>
-              </span>
-            )}
+              )}
 
             {!loading &&
-            this.state.success && (
-              <span className="text-success">
-                <i className="icon-check spacer-right" />
-                {translate('settings.state.saved')}
-              </span>
-            )}
+              this.state.success && (
+                <span className="text-success">
+                  <i className="icon-check spacer-right" />
+                  {translate('settings.state.saved')}
+                </span>
+              )}
           </div>
 
           <Input
index 7c9727e99f4e60695437af33c253860f50e9ad0e..73557269222d1d30a9ca9a5baaac88c9fc9e8289 100644 (file)
@@ -51,12 +51,12 @@ export default class EncryptionApp extends React.PureComponent {
         </header>
 
         {!this.props.loading &&
-        !this.props.secretKeyAvailable && (
-          <GenerateSecretKeyForm
-            secretKey={this.props.secretKey}
-            generateSecretKey={this.props.generateSecretKey}
-          />
-        )}
+          !this.props.secretKeyAvailable && (
+            <GenerateSecretKeyForm
+              secretKey={this.props.secretKey}
+              generateSecretKey={this.props.generateSecretKey}
+            />
+          )}
 
         {this.props.secretKeyAvailable && (
           <EncryptionForm
index 045142edbf9d3eb73f08b196c4ccabd0beb5a656..932f008b324ea13356406e9c5d5e0da94a69c773 100644 (file)
@@ -18,7 +18,7 @@
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  */
 import * as React from 'react';
-import Modal from 'react-modal';
+import * as Modal from 'react-modal';
 import { setLogLevel } from '../../../api/system';
 import { translate } from '../../../helpers/l10n';
 import { LOGS_LEVELS } from '../utils';
index 26e85fbe63e8649bc78aab2b682d9271cf297f90..a3cd26a208b23c8e395f5e77e7f1852fc4b69996 100644 (file)
@@ -12,7 +12,9 @@ exports[`should display some warning messages for non INFO levels 1`] = `
   overlayClassName="modal-overlay"
   parentSelector={[Function]}
   portalClassName="ReactModalPortal"
+  shouldCloseOnEsc={true}
   shouldCloseOnOverlayClick={true}
+  shouldFocusAfterRender={true}
 >
   <form
     id="set-log-level-form"
@@ -30,6 +32,7 @@ exports[`should display some warning messages for non INFO levels 1`] = `
     >
       <p
         className="spacer-bottom"
+        key="INFO"
       >
         <input
           checked={false}
@@ -49,6 +52,7 @@ exports[`should display some warning messages for non INFO levels 1`] = `
       </p>
       <p
         className="spacer-bottom"
+        key="DEBUG"
       >
         <input
           checked={true}
@@ -68,6 +72,7 @@ exports[`should display some warning messages for non INFO levels 1`] = `
       </p>
       <p
         className="spacer-bottom"
+        key="TRACE"
       >
         <input
           checked={false}
@@ -129,7 +134,9 @@ exports[`should render correctly 1`] = `
   overlayClassName="modal-overlay"
   parentSelector={[Function]}
   portalClassName="ReactModalPortal"
+  shouldCloseOnEsc={true}
   shouldCloseOnOverlayClick={true}
+  shouldFocusAfterRender={true}
 >
   <form
     id="set-log-level-form"
@@ -147,6 +154,7 @@ exports[`should render correctly 1`] = `
     >
       <p
         className="spacer-bottom"
+        key="INFO"
       >
         <input
           checked={true}
@@ -166,6 +174,7 @@ exports[`should render correctly 1`] = `
       </p>
       <p
         className="spacer-bottom"
+        key="DEBUG"
       >
         <input
           checked={false}
@@ -185,6 +194,7 @@ exports[`should render correctly 1`] = `
       </p>
       <p
         className="spacer-bottom"
+        key="TRACE"
       >
         <input
           checked={false}
index 6db92bdf46b7d36b84af49e3e9070e2bc59cabc5..4cee8e008900c88a5ce3e0fb0ab1d023084b4735 100644 (file)
@@ -28,6 +28,7 @@ exports[`should support more than two nodes 1`] = `
   <HealthCard
     health="GREEN"
     healthCauses={Array []}
+    key="Bar"
     name="Bar"
     onClick={[Function]}
     open={false}
@@ -50,6 +51,7 @@ exports[`should support more than two nodes 1`] = `
   <HealthCard
     health="YELLOW"
     healthCauses={Array []}
+    key="Baz"
     name="Baz"
     onClick={[Function]}
     open={false}
index ba562c42b3b86b8e1a8d17c55a3aa717a181e180..13877f72b8620635be233fe939dd38d3531e2e16 100644 (file)
@@ -21,6 +21,7 @@ exports[`should render correctly 1`] = `
     }
   />
   <HealthCard
+    key="Web"
     name="Web"
     onClick={[Function]}
     open={false}
@@ -33,6 +34,7 @@ exports[`should render correctly 1`] = `
     }
   />
   <HealthCard
+    key="Compute Engine"
     name="Compute Engine"
     onClick={[Function]}
     open={true}
@@ -45,6 +47,7 @@ exports[`should render correctly 1`] = `
     }
   />
   <HealthCard
+    key="Search Engine"
     name="Search Engine"
     onClick={[Function]}
     open={false}
index 77afaf39ea2e623b282fd0c32c5e7c1f096f2b77..fe7c59a4286d28f3b03b87cf5356afa3b487cfc4 100644 (file)
@@ -125,6 +125,7 @@ exports[`should show a main section and multiple sub sections 1`] = `
           "db": "test",
         }
       }
+      key="Database"
       name="Database"
     />
     <Section
@@ -133,6 +134,7 @@ exports[`should show a main section and multiple sub sections 1`] = `
           "Elastic": "search",
         }
       }
+      key="Elasticseach"
       name="Elasticseach"
     />
   </div>
index 81f4aa9ba6a85db347c3ae177e5faed2cd90d40d..6b2244457974e54e9c531a8aa2146b0b2adbf029 100644 (file)
@@ -28,6 +28,7 @@ exports[`should render correctly 1`] = `
     className="spacer-right"
     health="RED"
     healthCause="foo"
+    key="0"
   />
   <Tooltip
     overlay="system.current_health_of_x.Foo"
@@ -51,11 +52,13 @@ exports[`should render multiple health causes 1`] = `
     className="spacer-right"
     health="YELLOW"
     healthCause="foo"
+    key="0"
   />
   <HealthCauseItem
     className="spacer-right"
     health="YELLOW"
     healthCause="bar"
+    key="1"
   />
   <StatusIndicator
     color="yellow"
index 20fce92a9b79a82a9777d898170c817002bd439f..ecbb9a4b5b3b601380113a80494b07729a0515b5 100644 (file)
@@ -8,7 +8,9 @@ exports[`should not render a title 1`] = `
     className="data zebra"
   >
     <tbody>
-      <tr>
+      <tr
+        key="foo"
+      >
         <td
           className="thin"
         >
@@ -50,7 +52,9 @@ exports[`should render correctly 1`] = `
     id="foo"
   >
     <tbody>
-      <tr>
+      <tr
+        key="foo"
+      >
         <td
           className="thin"
         >
@@ -73,7 +77,9 @@ exports[`should render correctly 1`] = `
           />
         </td>
       </tr>
-      <tr>
+      <tr
+        key="bar"
+      >
         <td
           className="thin"
         >
@@ -96,7 +102,9 @@ exports[`should render correctly 1`] = `
           />
         </td>
       </tr>
-      <tr>
+      <tr
+        key="baz"
+      >
         <td
           className="thin"
         >
index b02b9854bdf641e33b5fa5202e85fbbed2775b8e..86c9310e1d7a4579deaef1f0907184a2627ec3f5 100644 (file)
@@ -4,192 +4,206 @@ exports[`should render object correctly 1`] = `
 Array [
   <ObjectItem
     value={
-        Object {
-            "bar": Object {
-              "a": 1,
-              "b": "b",
-            },
-            "baz": true,
-            "foo": "Far",
-          }
+      Object {
+        "bar": Object {
+          "a": 1,
+          "b": "b",
+        },
+        "baz": true,
+        "foo": "Far",
+      }
     }
->
+  >
     <table
-        className="data"
+      className="data"
     >
-        <tbody>
-            <tr>
-                <td
-                    className="thin nowrap"
+      <tbody>
+        <tr
+          key="foo"
+        >
+          <td
+            className="thin nowrap"
+          >
+            foo
+          </td>
+          <td>
+            <SysInfoItem
+              name="foo"
+              value="Far"
+            >
+              <code>
+                Far
+              </code>
+            </SysInfoItem>
+          </td>
+        </tr>
+        <tr
+          key="bar"
+        >
+          <td
+            className="thin nowrap"
+          >
+            bar
+          </td>
+          <td>
+            <SysInfoItem
+              name="bar"
+              value={
+                Object {
+                  "a": 1,
+                  "b": "b",
+                }
+              }
+            >
+              <ObjectItem
+                value={
+                  Object {
+                    "a": 1,
+                    "b": "b",
+                  }
+                }
+              >
+                <table
+                  className="data"
                 >
-                    foo
-                </td>
-                <td>
-                    <SysInfoItem
-                        name="foo"
-                        value="Far"
+                  <tbody>
+                    <tr
+                      key="a"
                     >
-                        <code>
-                            Far
-                        </code>
-                    </SysInfoItem>
-                </td>
-            </tr>
-            <tr>
-                <td
-                    className="thin nowrap"
-                >
-                    bar
-                </td>
-                <td>
-                    <SysInfoItem
-                        name="bar"
-                        value={
-                            Object {
-                                "a": 1,
-                                "b": "b",
-                              }
-                        }
-                    >
-                        <ObjectItem
-                            value={
-                                Object {
-                                    "a": 1,
-                                    "b": "b",
-                                  }
-                            }
+                      <td
+                        className="thin nowrap"
+                      >
+                        a
+                      </td>
+                      <td>
+                        <SysInfoItem
+                          name="a"
+                          value={1}
                         >
-                            <table
-                                className="data"
-                            >
-                                <tbody>
-                                    <tr>
-                                        <td
-                                            className="thin nowrap"
-                                        >
-                                            a
-                                        </td>
-                                        <td>
-                                            <SysInfoItem
-                                                name="a"
-                                                value={1}
-                                            >
-                                                <code>
-                                                    1
-                                                </code>
-                                            </SysInfoItem>
-                                        </td>
-                                    </tr>
-                                    <tr>
-                                        <td
-                                            className="thin nowrap"
-                                        >
-                                            b
-                                        </td>
-                                        <td>
-                                            <SysInfoItem
-                                                name="b"
-                                                value="b"
-                                            >
-                                                <code>
-                                                    b
-                                                </code>
-                                            </SysInfoItem>
-                                        </td>
-                                    </tr>
-                                </tbody>
-                            </table>
-                        </ObjectItem>
-                    </SysInfoItem>
-                </td>
-            </tr>
-            <tr>
-                <td
-                    className="thin nowrap"
-                >
-                    baz
-                </td>
-                <td>
-                    <SysInfoItem
-                        name="baz"
-                        value={true}
+                          <code>
+                            1
+                          </code>
+                        </SysInfoItem>
+                      </td>
+                    </tr>
+                    <tr
+                      key="b"
                     >
-                        <BooleanItem
-                            value={true}
+                      <td
+                        className="thin nowrap"
+                      >
+                        b
+                      </td>
+                      <td>
+                        <SysInfoItem
+                          name="b"
+                          value="b"
                         >
-                            <CheckIcon>
-                                <svg
-                                    height={16}
-                                    viewBox="0 0 16 16"
-                                    width={16}
-                                    xmlns="http://www.w3.org/2000/svg"
-                                >
-                                    <path
-                                        d="M14.92 4.804q0 0.357-0.25 0.607l-7.679 7.679q-0.25 0.25-0.607 0.25t-0.607-0.25l-4.446-4.446q-0.25-0.25-0.25-0.607t0.25-0.607l1.214-1.214q0.25-0.25 0.607-0.25t0.607 0.25l2.625 2.634 5.857-5.866q0.25-0.25 0.607-0.25t0.607 0.25l1.214 1.214q0.25 0.25 0.25 0.607z"
-                                        style={
-                                            Object {
-                                                "fill": "currentColor",
-                                              }
-                                        }
-                                    />
-                                    ;
-                                </svg>
-                            </CheckIcon>
-                        </BooleanItem>
-                    </SysInfoItem>
-                </td>
-            </tr>
-        </tbody>
+                          <code>
+                            b
+                          </code>
+                        </SysInfoItem>
+                      </td>
+                    </tr>
+                  </tbody>
+                </table>
+              </ObjectItem>
+            </SysInfoItem>
+          </td>
+        </tr>
+        <tr
+          key="baz"
+        >
+          <td
+            className="thin nowrap"
+          >
+            baz
+          </td>
+          <td>
+            <SysInfoItem
+              name="baz"
+              value={true}
+            >
+              <BooleanItem
+                value={true}
+              >
+                <CheckIcon>
+                  <svg
+                    height={16}
+                    viewBox="0 0 16 16"
+                    width={16}
+                    xmlns="http://www.w3.org/2000/svg"
+                  >
+                    <path
+                      d="M14.92 4.804q0 0.357-0.25 0.607l-7.679 7.679q-0.25 0.25-0.607 0.25t-0.607-0.25l-4.446-4.446q-0.25-0.25-0.25-0.607t0.25-0.607l1.214-1.214q0.25-0.25 0.607-0.25t0.607 0.25l2.625 2.634 5.857-5.866q0.25-0.25 0.607-0.25t0.607 0.25l1.214 1.214q0.25 0.25 0.25 0.607z"
+                      style={
+                        Object {
+                          "fill": "currentColor",
+                        }
+                      }
+                    />
+                    ;
+                  </svg>
+                </CheckIcon>
+              </BooleanItem>
+            </SysInfoItem>
+          </td>
+        </tr>
+      </tbody>
     </table>
-</ObjectItem>,
+  </ObjectItem>,
   <ObjectItem
     value={
-        Object {
-            "a": 1,
-            "b": "b",
-          }
+      Object {
+        "a": 1,
+        "b": "b",
+      }
     }
->
+  >
     <table
-        className="data"
+      className="data"
     >
-        <tbody>
-            <tr>
-                <td
-                    className="thin nowrap"
-                >
-                    a
-                </td>
-                <td>
-                    <SysInfoItem
-                        name="a"
-                        value={1}
-                    >
-                        <code>
-                            1
-                        </code>
-                    </SysInfoItem>
-                </td>
-            </tr>
-            <tr>
-                <td
-                    className="thin nowrap"
-                >
-                    b
-                </td>
-                <td>
-                    <SysInfoItem
-                        name="b"
-                        value="b"
-                    >
-                        <code>
-                            b
-                        </code>
-                    </SysInfoItem>
-                </td>
-            </tr>
-        </tbody>
+      <tbody>
+        <tr
+          key="a"
+        >
+          <td
+            className="thin nowrap"
+          >
+            a
+          </td>
+          <td>
+            <SysInfoItem
+              name="a"
+              value={1}
+            >
+              <code>
+                1
+              </code>
+            </SysInfoItem>
+          </td>
+        </tr>
+        <tr
+          key="b"
+        >
+          <td
+            className="thin nowrap"
+          >
+            b
+          </td>
+          <td>
+            <SysInfoItem
+              name="b"
+              value="b"
+            >
+              <code>
+                b
+              </code>
+            </SysInfoItem>
+          </td>
+        </tr>
+      </tbody>
     </table>
-</ObjectItem>,
+  </ObjectItem>,
 ]
 `;
index 0c508a86706ced364a8516887168ae65bbe67029..d69ff53c19bcce3f9df90f65002f4328f20782c5 100644 (file)
@@ -18,7 +18,7 @@
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  */
 import * as React from 'react';
-import Modal from 'react-modal';
+import * as Modal from 'react-modal';
 import SystemUpgradeItem from './SystemUpgradeItem';
 import { SystemUpgrade } from '../../../../api/system';
 import { translate } from '../../../../helpers/l10n';
index ccafec8a1aa6fae8a0346d583d7cc5e462726329..01d546ecdb1f9c06ba5c974652f426b37f34c2d2 100644 (file)
@@ -54,11 +54,9 @@ export default class SystemUpgradeIntermediate extends React.PureComponent<Props
           className="button-link little-spacer-bottom"
           href="#"
           onClick={this.toggleIntermediatVersions}>
-          {showMore ? (
-            translate('system.hide_intermediate_versions')
-          ) : (
-            translate('system.show_intermediate_versions')
-          )}
+          {showMore
+            ? translate('system.hide_intermediate_versions')
+            : translate('system.show_intermediate_versions')}
           <i
             className={classNames('little-spacer-left', {
               'icon-arrow-down': !showMore,
index 0f84689c1043080ee4f985b1e41b68d7261cb840..86dfdda674a84a2b9fbe847af9e740764e34d190 100644 (file)
@@ -12,7 +12,9 @@ exports[`should display correctly 1`] = `
   overlayClassName="modal-overlay"
   parentSelector={[Function]}
   portalClassName="ReactModalPortal"
+  shouldCloseOnEsc={true}
   shouldCloseOnOverlayClick={true}
+  shouldFocusAfterRender={true}
 >
   <div
     className="modal-head"
@@ -25,6 +27,7 @@ exports[`should display correctly 1`] = `
     className="modal-body"
   >
     <SystemUpgradeItem
+      key="6.3"
       systemUpgrades={
         Array [
           Object {
@@ -48,6 +51,7 @@ exports[`should display correctly 1`] = `
       type="system.latest_version"
     />
     <SystemUpgradeItem
+      key="5.6.5"
       systemUpgrades={
         Array [
           Object {
index 9217e8cb64092df31460d871cb287f6b2a05ce7e..80a70b6f48e4d6bf5baa180d47e1f0b84fae630e 100644 (file)
@@ -29,6 +29,7 @@ exports[`should display correctly 2`] = `
   </a>
   <div
     className="note system-upgrade-intermediate"
+    key="5.6.6"
   >
     <DateFormatter
       date="2017-04-02"
@@ -42,6 +43,7 @@ exports[`should display correctly 2`] = `
   </div>
   <div
     className="note system-upgrade-intermediate"
+    key="5.6.5"
   >
     <DateFormatter
       date="2017-03-01"
index 15f11c439b6fca770abbeb44c931280525d878d1..e6e4afad4326e43c03f6b84134d554823596df0c 100644 (file)
@@ -13,7 +13,7 @@ exports[`should display correctly 1`] = `
           "version": <b>
             SonarQube 
             5.6.7
-        </b>,
+          </b>,
         }
       }
     />
index 7d6ccca5a0dd6284543aac7abb6a36536d82fa94..613dccb9a93853f2f46e71815ed78a2bc8d884b1 100644 (file)
@@ -54,7 +54,7 @@ export function ignoreInfoFields(sysInfoObject: SysValueObject): SysValueObject
     'Name',
     PLUGINS_FIELD,
     SETTINGS_FIELD
-  ]);
+  ]) as SysValueObject;
 }
 
 export function getHealth(sysInfoObject: SysValueObject): HealthType {
@@ -130,21 +130,21 @@ function getSystemData(sysInfoData: SysInfo): SysValueObject {
 export function getClusterMainCardSection(sysInfoData: ClusterSysInfo): SysValueObject {
   return {
     ...getSystemData(sysInfoData),
-    ...omit(sysInfoData, [
+    ...(omit(sysInfoData, [
       'Application Nodes',
       PLUGINS_FIELD,
       'Search Nodes',
       SETTINGS_FIELD,
       'Statistics',
       'System'
-    ])
+    ]) as SysValueObject)
   };
 }
 
 export function getStandaloneMainSections(sysInfoData: SysInfo): SysValueObject {
   return {
     ...getSystemData(sysInfoData),
-    ...omitBy(
+    ...(omitBy(
       sysInfoData,
       (value, key) =>
         value == null ||
@@ -152,15 +152,17 @@ export function getStandaloneMainSections(sysInfoData: SysInfo): SysValueObject
         key.startsWith('Compute Engine') ||
         key.startsWith('Search') ||
         key.startsWith('Web')
-    )
+    ) as SysValueObject)
   };
 }
 
 export function getStandaloneSecondarySections(sysInfoData: SysInfo): SysInfoSection {
   return {
-    Web: pickBy(sysInfoData, (_, key) => key.startsWith('Web')),
-    'Compute Engine': pickBy(sysInfoData, (_, key) => key.startsWith('Compute Engine')),
-    'Search Engine': pickBy(sysInfoData, (_, key) => key.startsWith('Search'))
+    Web: pickBy(sysInfoData, (_, key) => key.startsWith('Web')) as SysValueObject,
+    'Compute Engine': pickBy(sysInfoData, (_, key) =>
+      key.startsWith('Compute Engine')
+    ) as SysValueObject,
+    'Search Engine': pickBy(sysInfoData, (_, key) => key.startsWith('Search')) as SysValueObject
   };
 }
 
index 116b4c7d8c40c7d981eda897938214c9dcfdfaef..c890c3d9b380b16f17ae9cfffad3ff87ce738587 100644 (file)
@@ -229,13 +229,13 @@ export default class OrganizationStep extends React.PureComponent {
         )}
 
         {this.getSelectedOrganization() != null &&
-        !this.state.loading && (
-          <div className="big-spacer-top">
-            <button className="js-continue" onClick={this.handleContinueClick}>
-              {translate('continue')}
-            </button>
-          </div>
-        )}
+          !this.state.loading && (
+            <div className="big-spacer-top">
+              <button className="js-continue" onClick={this.handleContinueClick}>
+                {translate('continue')}
+              </button>
+            </div>
+          )}
       </div>
     );
   };
index 55409e8625065674e3b5fd5ce537cd34097ac6ed..9c24b5b42a499bbe452f98a88bc9da9ff5705a20 100644 (file)
@@ -5,6 +5,7 @@ exports[`guides for on-premise 1`] = `
   className="modal-container"
 >
   <HelmetWrapper
+    defer={true}
     encodeSpecialCharacters={true}
     title="onboarding.header"
     titleTemplate="%s"
@@ -71,6 +72,7 @@ exports[`guides for on-premise 2`] = `
   className="modal-container"
 >
   <HelmetWrapper
+    defer={true}
     encodeSpecialCharacters={true}
     title="onboarding.header"
     titleTemplate="%s"
@@ -138,6 +140,7 @@ exports[`guides for sonarcloud 1`] = `
   className="modal-container"
 >
   <HelmetWrapper
+    defer={true}
     encodeSpecialCharacters={true}
     title="onboarding.header.sonarcloud"
     titleTemplate="%s"
@@ -217,6 +220,7 @@ exports[`guides for sonarcloud 2`] = `
   className="modal-container"
 >
   <HelmetWrapper
+    defer={true}
     encodeSpecialCharacters={true}
     title="onboarding.header.sonarcloud"
     titleTemplate="%s"
@@ -297,6 +301,7 @@ exports[`guides for sonarcloud 3`] = `
   className="modal-container"
 >
   <HelmetWrapper
+    defer={true}
     encodeSpecialCharacters={true}
     title="onboarding.header.sonarcloud"
     titleTemplate="%s"
index 9ce1c887f5f4c6e3cef01bce77031ddcf7965d2b..f456088c24aa3f54eed1e01c0c3bdf5633010d27 100644 (file)
@@ -6,11 +6,11 @@ exports[`renders correctly 1`] = `
 >
   <pre>
     foo
-    bar
+bar
   </pre>
   <button
     data-clipboard-text="foo
-  bar"
+bar"
   >
     copy
   </button>
index 559864e0d90d1cedeb92929231adad5c88635eb9..9361ccc33a321acf435ff5403c51e495e2f7bfd5 100644 (file)
@@ -17,8 +17,8 @@ exports[`renders correctly 1`] = `
   />
   <Command
     command="plugins {
-    id \\"org.sonarqube\\" version \\"2.5\\"
-  }"
+  id \\"org.sonarqube\\" version \\"2.5\\"
+}"
   />
   <p
     className="spacer-top spacer-bottom markdown"
@@ -71,8 +71,8 @@ exports[`renders correctly 2`] = `
   />
   <Command
     command="plugins {
-    id \\"org.sonarqube\\" version \\"2.5\\"
-  }"
+  id \\"org.sonarqube\\" version \\"2.5\\"
+}"
   />
   <p
     className="spacer-top spacer-bottom markdown"
index a420dad822ca5cb6a49956b4c2aca39bee32264a..4354b75b1e06621bb85a0557bc4296d709b541bf 100644 (file)
@@ -39,13 +39,13 @@ export default class UsersSelectSearchValue extends React.PureComponent {
     return (
       <div className="Select-value" title={user ? user.name : ''}>
         {user &&
-        user.login && (
-          <div className="Select-value-label">
-            <Avatar hash={user.avatar} email={user.email} name={user.name} size={AVATAR_SIZE} />
-            <strong className="spacer-left">{this.props.children}</strong>
-            <span className="note little-spacer-left">{user.login}</span>
-          </div>
-        )}
+          user.login && (
+            <div className="Select-value-label">
+              <Avatar hash={user.avatar} email={user.email} name={user.name} size={AVATAR_SIZE} />
+              <strong className="spacer-left">{this.props.children}</strong>
+              <span className="note little-spacer-left">{user.login}</span>
+            </div>
+          )}
       </div>
     );
   }
index 483f49d3ea08cd1f809a993978bbd33be3ac277b..900354c4376084a1749d3351dee186fe5a952226 100644 (file)
@@ -12,6 +12,7 @@ exports[`should render correctly 1`] = `
   clearRenderer={[Function]}
   clearValueText="Clear value"
   clearable={false}
+  closeOnSelect={true}
   deleteRemoves={true}
   delimiter=","
   disabled={false}
@@ -33,6 +34,8 @@ exports[`should render correctly 1`] = `
   onChange={[Function]}
   onCloseResetsInput={true}
   onInputChange={[Function]}
+  onSelectResetsInput={true}
+  openOnClick={true}
   optionComponent={[Function]}
   options={Array []}
   pageSize={5}
@@ -81,6 +84,7 @@ exports[`should render correctly 3`] = `
   clearRenderer={[Function]}
   clearValueText="Clear value"
   clearable={false}
+  closeOnSelect={true}
   deleteRemoves={true}
   delimiter=","
   disabled={false}
@@ -102,6 +106,8 @@ exports[`should render correctly 3`] = `
   onChange={[Function]}
   onCloseResetsInput={true}
   onInputChange={[Function]}
+  onSelectResetsInput={true}
+  openOnClick={true}
   optionComponent={[Function]}
   options={
     Array [
index 06bce67949d90f24ff32497365e09fc332c7950f..f0b5eed39e69606d465841df6d4ecc1ebd76b91b 100644 (file)
@@ -169,16 +169,16 @@ export default class Action extends React.PureComponent<Props, State> {
         {this.renderTabs()}
 
         {showParams &&
-        action.params && (
-          <Params
-            params={action.params}
-            showDeprecated={this.props.showDeprecated}
-            showInternal={this.props.showInternal}
-          />
-        )}
+          action.params && (
+            <Params
+              params={action.params}
+              showDeprecated={this.props.showDeprecated}
+              showInternal={this.props.showInternal}
+            />
+          )}
 
         {showResponse &&
-        action.hasResponseExample && <ResponseExample domain={domain} action={action} />}
+          action.hasResponseExample && <ResponseExample domain={domain} action={action} />}
 
         {showChangelog && <ActionChangelog changelog={action.changelog} />}
       </div>
index 9f32210fc63388520eff218a2982c71dccbde5c9..4dbacf06bd03c7c68b1cb62e3691997b77bd029f 100644 (file)
@@ -55,19 +55,19 @@ export default function Params({ params, showDeprecated, showInternal }: Props)
                 )}
 
                 {showDeprecated &&
-                param.deprecatedKey && (
-                  <div className="little-spacer-top">
-                    <code>{param.deprecatedKey}</code>
-                  </div>
-                )}
+                  param.deprecatedKey && (
+                    <div className="little-spacer-top">
+                      <code>{param.deprecatedKey}</code>
+                    </div>
+                  )}
 
                 {showDeprecated &&
-                param.deprecatedKey &&
-                param.deprecatedKeySince && (
-                  <div className="little-spacer-top">
-                    <DeprecatedBadge since={param.deprecatedKeySince} />
-                  </div>
-                )}
+                  param.deprecatedKey &&
+                  param.deprecatedKeySince && (
+                    <div className="little-spacer-top">
+                      <DeprecatedBadge since={param.deprecatedKeySince} />
+                    </div>
+                  )}
 
                 <div className="note little-spacer-top">
                   {param.required ? 'required' : 'optional'}
index 8c3eb7ace6d6361c6258afb5a88a68e56f33abfc..b86b69c795d075832d58bb5db93e178702bd61dc 100644 (file)
@@ -6,6 +6,7 @@ exports[`should render 1`] = `
 >
   <li
     className="spacer-top"
+    key="0"
   >
     <span
       className="spacer-right badge"
@@ -16,6 +17,7 @@ exports[`should render 1`] = `
   </li>
   <li
     className="spacer-top"
+    key="1"
   >
     <span
       className="spacer-right badge"
index e1c93d26f4aa6e30033b97cbcbca511845cfacad..2bed8feb6dba51e68d450321862b5eafe90bce70 100644 (file)
@@ -69,6 +69,7 @@ exports[`should also render actions with a description matching the query 1`] =
           "path": "api",
         }
       }
+      key="api/foo"
       showDeprecated={false}
       showInternal={false}
     />
@@ -117,6 +118,7 @@ exports[`should also render actions with a description matching the query 1`] =
           "path": "api",
         }
       }
+      key="api/baz"
       showDeprecated={false}
       showInternal={false}
     />
@@ -233,6 +235,7 @@ exports[`should render deprecated actions 1`] = `
           "path": "api",
         }
       }
+      key="api/foo"
       showDeprecated={true}
       showInternal={false}
     />
@@ -293,6 +296,7 @@ exports[`should render internal actions 1`] = `
           "path": "api",
         }
       }
+      key="api/foo"
       showDeprecated={false}
       showInternal={true}
     />
@@ -361,6 +365,7 @@ exports[`should render only actions matching the query 1`] = `
           "path": "api",
         }
       }
+      key="api/foo"
       showDeprecated={false}
       showInternal={false}
     />
index 34329aa2fbfc30015b9dcd0f9433f04b3c3a7ea0..87783ec3cf9657ebd66e67c60d847fee64f8e835 100644 (file)
@@ -9,6 +9,7 @@ exports[`should also render domains with an actions description matching the que
   >
     <Link
       className="list-group-item"
+      key="bar"
       onlyActiveOnIndex={false}
       style={Object {}}
       to="/web_api/bar"
@@ -29,6 +30,7 @@ exports[`should also render domains with an actions description matching the que
     </Link>
     <Link
       className="list-group-item"
+      key="baz"
       onlyActiveOnIndex={false}
       style={Object {}}
       to="/web_api/baz"
@@ -60,6 +62,7 @@ exports[`should not render deprecated domains 1`] = `
   >
     <Link
       className="list-group-item"
+      key="foo"
       onlyActiveOnIndex={false}
       style={Object {}}
       to="/web_api/foo"
@@ -91,6 +94,7 @@ exports[`should not render internal domains 1`] = `
   >
     <Link
       className="list-group-item"
+      key="foo"
       onlyActiveOnIndex={false}
       style={Object {}}
       to="/web_api/foo"
@@ -122,6 +126,7 @@ exports[`should render deprecated domains 1`] = `
   >
     <Link
       className="list-group-item"
+      key="foo"
       onlyActiveOnIndex={false}
       style={Object {}}
       to="/web_api/foo"
@@ -142,6 +147,7 @@ exports[`should render deprecated domains 1`] = `
     </Link>
     <Link
       className="list-group-item"
+      key="bar"
       onlyActiveOnIndex={false}
       style={Object {}}
       to="/web_api/bar"
@@ -173,6 +179,7 @@ exports[`should render internal domains 1`] = `
   >
     <Link
       className="list-group-item"
+      key="foo"
       onlyActiveOnIndex={false}
       style={Object {}}
       to="/web_api/foo"
@@ -193,6 +200,7 @@ exports[`should render internal domains 1`] = `
     </Link>
     <Link
       className="list-group-item"
+      key="bar"
       onlyActiveOnIndex={false}
       style={Object {}}
       to="/web_api/bar"
@@ -225,6 +233,7 @@ exports[`should render only domains with an action matching the query 1`] = `
   >
     <Link
       className="list-group-item"
+      key="foo"
       onlyActiveOnIndex={false}
       style={Object {}}
       to="/web_api/foo"
index c6a7552230950761e2de0a9ddf20d39649c6b85e..5d33f4f9613899bb9cfd9579016adade9eadf96c 100644 (file)
@@ -16,7 +16,9 @@ exports[`should render deprecated and internal parameters 1`] = `
 >
   <table>
     <tbody>
-      <tr>
+      <tr
+        key="foo"
+      >
         <td
           className="markdown"
           style={
@@ -59,7 +61,9 @@ exports[`should render deprecated and internal parameters 1`] = `
           }
         />
       </tr>
-      <tr>
+      <tr
+        key="foo"
+      >
         <td
           className="markdown"
           style={
@@ -118,7 +122,9 @@ exports[`should render deprecated key 1`] = `
 >
   <table>
     <tbody>
-      <tr>
+      <tr
+        key="foo"
+      >
         <td
           className="markdown"
           style={
index 5da88260309536ed0717a0118d25b469e3970ade..1f6aaeeef25c2e8074418136d6fc4212586f1223 100644 (file)
@@ -137,13 +137,13 @@ export default class Line extends React.PureComponent {
         ))}
 
         {this.props.displayIssues &&
-        !this.props.displayAllIssues && (
-          <LineIssuesIndicator
-            issues={this.props.issues}
-            line={line}
-            onClick={this.handleIssuesIndicatorClick}
-          />
-        )}
+          !this.props.displayAllIssues && (
+            <LineIssuesIndicator
+              issues={this.props.issues}
+              line={line}
+              onClick={this.handleIssuesIndicatorClick}
+            />
+          )}
 
         <LineCode
           branch={this.props.branch}
index f3aea8272c98f23956a3bd2e9e9d17aa2ef5a360..a71c07d8002e372c032f720f4b7830120f146022 100644 (file)
@@ -229,19 +229,19 @@ export default class LineCode extends React.PureComponent {
           <pre ref={node => (this.codeNode = node)}>{renderedTokens}</pre>
         </div>
         {showIssues &&
-        issues.length > 0 && (
-          <LineIssuesList
-            branch={this.props.branch}
-            displayIssueLocationsCount={this.props.displayIssueLocationsCount}
-            displayIssueLocationsLink={this.props.displayIssueLocationsLink}
-            issues={issues}
-            onIssueChange={this.props.onIssueChange}
-            onIssueClick={onIssueSelect}
-            onPopupToggle={this.props.onPopupToggle}
-            openPopup={this.props.openPopup}
-            selectedIssue={selectedIssue}
-          />
-        )}
+          issues.length > 0 && (
+            <LineIssuesList
+              branch={this.props.branch}
+              displayIssueLocationsCount={this.props.displayIssueLocationsCount}
+              displayIssueLocationsLink={this.props.displayIssueLocationsLink}
+              issues={issues}
+              onIssueChange={this.props.onIssueChange}
+              onIssueClick={onIssueSelect}
+              onPopupToggle={this.props.onPopupToggle}
+              openPopup={this.props.openPopup}
+              selectedIssue={selectedIssue}
+            />
+          )}
       </td>
     );
   }
index 9f6da3b0b4be2108e231dec1c3da5f14776b32cb..2cfc320db910481eb0e4b8edc7b893adf817fd36 100644 (file)
@@ -11,21 +11,25 @@ exports[`render code 1`] = `
     <pre>
       <span
         className="k source-line-code-issue"
+        key="0"
       >
         class
       </span>
       <span
         className=""
+        key="1"
       >
          
       </span>
       <span
         className="sym sym-1"
+        key="2"
       >
         Foo
       </span>
       <span
         className=""
+        key="3"
       >
          {
       </span>
index 96f320c438243b53c0084168ea3e2f9d4cdcee11..c8a4ee2398131f3172569d35d0d89e207cd5a69f 100644 (file)
@@ -9,6 +9,7 @@ exports[`render duplicated line 1`] = `
     className="source-meta source-line-duplications-extra source-line-duplicated"
     data-index={1}
     data-line-number={3}
+    key="1"
     onClick={[Function]}
     role="button"
     tabIndex="0"
@@ -25,6 +26,7 @@ exports[`render not duplicated line 1`] = `
   className="source-meta source-line-duplications-extra"
   data-index={1}
   data-line-number={3}
+  key="1"
 >
   <div
     className="source-line-bar"
index 6bd44307b2f855bc3ecaa30035e77d52d483418a..1bae77158ddee87442b4290f62d8bd8c99a66941 100644 (file)
@@ -12,6 +12,7 @@ exports[`render issues list 1`] = `
         "key": "foo",
       }
     }
+    key="foo"
     onClick={[Function]}
     onPopupToggle={[Function]}
     openPopup={null}
@@ -25,6 +26,7 @@ exports[`render issues list 1`] = `
         "key": "bar",
       }
     }
+    key="bar"
     onClick={[Function]}
     onPopupToggle={[Function]}
     openPopup={null}
index 0c35f6f5ce5dc11502b4540146e19ca777903e2f..e5854e7792fa2d960f806258acbb37d2d270909f 100644 (file)
@@ -2,6 +2,7 @@
 
 exports[`should display bubbles 1`] = `
 <Bubble
+  key="0"
   r={45}
   x={-10}
   y={52.3015873015873}
@@ -22,6 +23,7 @@ exports[`should display bubbles 1`] = `
 
 exports[`should display bubbles 2`] = `
 <Bubble
+  key="1"
   r={33.57142857142857}
   x={-75}
   y={33.57142857142857}
@@ -42,6 +44,7 @@ exports[`should display bubbles 2`] = `
 
 exports[`should render bubble links 1`] = `
 <Bubble
+  key="0"
   link="foo"
   r={45}
   x={-10}
@@ -74,6 +77,7 @@ exports[`should render bubble links 1`] = `
 
 exports[`should render bubble links 2`] = `
 <Bubble
+  key="1"
   link="bar"
   r={33.57142857142857}
   x={-75}
@@ -106,6 +110,7 @@ exports[`should render bubble links 2`] = `
 
 exports[`should render bubbles with click handlers 1`] = `
 <Bubble
+  key="0"
   link="foo"
   onClick={[Function]}
   r={45}
@@ -129,6 +134,7 @@ exports[`should render bubbles with click handlers 1`] = `
 
 exports[`should render bubbles with click handlers 2`] = `
 <Bubble
+  key="1"
   link="bar"
   onClick={[Function]}
   r={33.57142857142857}
index e7885c89cadc8f23292218ec8e0902c6154f1fd3..04aacd7b139aad13931d8b03ae5a053028d40a03 100644 (file)
@@ -10,7 +10,9 @@ exports[`renders 1`] = `
     transform="translate(10, 10)"
   >
     <g>
-      <g>
+      <g
+        key="0"
+      >
         <rect
           className="bar-chart-bar"
           height={10}
@@ -19,7 +21,9 @@ exports[`renders 1`] = `
           y={10}
         />
       </g>
-      <g>
+      <g
+        key="1"
+      >
         <rect
           className="bar-chart-bar"
           height={10}
@@ -28,7 +32,9 @@ exports[`renders 1`] = `
           y={28}
         />
       </g>
-      <g>
+      <g
+        key="2"
+      >
         <rect
           className="bar-chart-bar"
           height={10}
@@ -52,7 +58,9 @@ exports[`renders with yValues 1`] = `
     transform="translate(10, 10)"
   >
     <g>
-      <g>
+      <g
+        key="0"
+      >
         <rect
           className="bar-chart-bar"
           height={10}
@@ -70,7 +78,9 @@ exports[`renders with yValues 1`] = `
           100.0
         </text>
       </g>
-      <g>
+      <g
+        key="1"
+      >
         <rect
           className="bar-chart-bar"
           height={10}
@@ -88,7 +98,9 @@ exports[`renders with yValues 1`] = `
           75.0
         </text>
       </g>
-      <g>
+      <g
+        key="2"
+      >
         <rect
           className="bar-chart-bar"
           height={10}
@@ -121,7 +133,9 @@ exports[`renders with yValues and yTicks 1`] = `
     transform="translate(10, 10)"
   >
     <g>
-      <g>
+      <g
+        key="0"
+      >
         <rect
           className="bar-chart-bar"
           height={10}
@@ -148,7 +162,9 @@ exports[`renders with yValues and yTicks 1`] = `
           a
         </text>
       </g>
-      <g>
+      <g
+        key="1"
+      >
         <rect
           className="bar-chart-bar"
           height={10}
@@ -175,7 +191,9 @@ exports[`renders with yValues and yTicks 1`] = `
           b
         </text>
       </g>
-      <g>
+      <g
+        key="2"
+      >
         <rect
           className="bar-chart-bar"
           height={10}
@@ -217,7 +235,9 @@ exports[`renders with yValues, yTicks and yTooltips 1`] = `
     transform="translate(10, 10)"
   >
     <g>
-      <g>
+      <g
+        key="0"
+      >
         <rect
           className="bar-chart-bar"
           height={10}
@@ -226,6 +246,7 @@ exports[`renders with yValues, yTicks and yTooltips 1`] = `
           y={10}
         />
         <Tooltip
+          key="0"
           overlay="a - 100"
           placement="top"
         >
@@ -249,7 +270,9 @@ exports[`renders with yValues, yTicks and yTooltips 1`] = `
           a
         </text>
       </g>
-      <g>
+      <g
+        key="1"
+      >
         <rect
           className="bar-chart-bar"
           height={10}
@@ -258,6 +281,7 @@ exports[`renders with yValues, yTicks and yTooltips 1`] = `
           y={28}
         />
         <Tooltip
+          key="1"
           overlay="b - 75"
           placement="top"
         >
@@ -281,7 +305,9 @@ exports[`renders with yValues, yTicks and yTooltips 1`] = `
           b
         </text>
       </g>
-      <g>
+      <g
+        key="2"
+      >
         <rect
           className="bar-chart-bar"
           height={10}
@@ -290,6 +316,7 @@ exports[`renders with yValues, yTicks and yTooltips 1`] = `
           y={46}
         />
         <Tooltip
+          key="2"
           overlay="c - 150"
           placement="top"
         >
index 98f4301ef39bc2a5e4c9b629bcac1d4f9694d5fe..ea72ec344780e4e2e9930b21e34a269522090d3a 100644 (file)
@@ -19,7 +19,7 @@
  */
 import * as React from 'react';
 import * as classNames from 'classnames';
-import Modal from 'react-modal';
+import * as Modal from 'react-modal';
 import { restartAndWait } from '../../api/system';
 import { translate } from '../../helpers/l10n';
 
@@ -59,8 +59,7 @@ export default class RestartForm extends React.PureComponent<Props, State> {
         contentLabel={header}
         className="modal"
         overlayClassName="modal-overlay"
-        onRequestClose={this.props.onClose}
-        shouldCloseOnOverlayClick={!restarting}>
+        onRequestClose={restarting ? undefined : this.props.onClose}>
         <form id="restart-form" onSubmit={this.handleFormSubmit}>
           <div className="modal-head">
             <h2>{header}</h2>
index e9a5eca76b5b0b02083ecc201821a71687b3ca47..2fa034256751ece792eb87af92804a2c1ec7d229 100644 (file)
@@ -59,6 +59,7 @@ exports[`should render multiselect with selected elements 2`] = `
       active={false}
       custom={false}
       element="bar"
+      key="bar"
       onHover={[Function]}
       onSelectChange={[Function]}
       selected={true}
@@ -67,6 +68,7 @@ exports[`should render multiselect with selected elements 2`] = `
       active={false}
       custom={false}
       element="foo"
+      key="foo"
       onHover={[Function]}
       onSelectChange={[Function]}
       selected={false}
@@ -75,6 +77,7 @@ exports[`should render multiselect with selected elements 2`] = `
       active={false}
       custom={false}
       element="baz"
+      key="baz"
       onHover={[Function]}
       onSelectChange={[Function]}
       selected={false}
@@ -113,6 +116,7 @@ exports[`should render multiselect with selected elements 3`] = `
       active={false}
       custom={false}
       element="bar"
+      key="bar"
       onHover={[Function]}
       onSelectChange={[Function]}
       selected={true}
@@ -121,6 +125,7 @@ exports[`should render multiselect with selected elements 3`] = `
       active={false}
       custom={false}
       element="foo"
+      key="foo"
       onHover={[Function]}
       onSelectChange={[Function]}
       selected={false}
@@ -129,6 +134,7 @@ exports[`should render multiselect with selected elements 3`] = `
       active={true}
       custom={false}
       element="baz"
+      key="baz"
       onHover={[Function]}
       onSelectChange={[Function]}
       selected={false}
@@ -167,6 +173,7 @@ exports[`should render multiselect with selected elements 4`] = `
       active={false}
       custom={false}
       element="bar"
+      key="bar"
       onHover={[Function]}
       onSelectChange={[Function]}
       selected={true}
@@ -175,6 +182,7 @@ exports[`should render multiselect with selected elements 4`] = `
       active={false}
       custom={false}
       element="foo"
+      key="foo"
       onHover={[Function]}
       onSelectChange={[Function]}
       selected={false}
@@ -183,6 +191,7 @@ exports[`should render multiselect with selected elements 4`] = `
       active={true}
       custom={false}
       element="baz"
+      key="baz"
       onHover={[Function]}
       onSelectChange={[Function]}
       selected={false}
@@ -191,6 +200,7 @@ exports[`should render multiselect with selected elements 4`] = `
       active={false}
       custom={true}
       element="test"
+      key="test"
       onHover={[Function]}
       onSelectChange={[Function]}
       selected={false}
index 29ae52e453a79c046279acd9bd1a8bf126e2baea..c1c91a2ba8e2a8801d81e7e298e61d8fabada919 100644 (file)
@@ -33,6 +33,7 @@ exports[`should render correctly with children 1`] = `
   <SelectListItem
     active="seconditem"
     item="item"
+    key=".$item"
     onHover={[Function]}
     onSelect={[Function]}
   >
@@ -44,6 +45,7 @@ exports[`should render correctly with children 1`] = `
   <SelectListItem
     active="seconditem"
     item="seconditem"
+    key=".$seconditem"
     onHover={[Function]}
     onSelect={[Function]}
   >
@@ -55,6 +57,7 @@ exports[`should render correctly with children 1`] = `
   <SelectListItem
     active="seconditem"
     item="third"
+    key=".$third"
     onHover={[Function]}
     onSelect={[Function]}
   >
@@ -73,18 +76,21 @@ exports[`should render correctly without children 1`] = `
   <SelectListItem
     active="seconditem"
     item="item"
+    key="item"
     onHover={[Function]}
     onSelect={[Function]}
   />
   <SelectListItem
     active="seconditem"
     item="seconditem"
+    key="seconditem"
     onHover={[Function]}
     onSelect={[Function]}
   />
   <SelectListItem
     active="seconditem"
     item="third"
+    key="third"
     onHover={[Function]}
     onSelect={[Function]}
   />
index 265643354e67e760cd49aea978f472655f20cf04..1bb65c64457ada9283e500592696bcc7ff153ec9 100644 (file)
@@ -87,7 +87,10 @@ export default class DateInput extends React.PureComponent<Props> {
   }
 
   render() {
-    const inputProps = pick(this.props, ['placeholder', 'name']);
+    const inputProps: { name?: string; placeholder?: string } = pick(this.props, [
+      'placeholder',
+      'name'
+    ]);
 
     return (
       <span className={classNames('date-input-control', this.props.className)}>
index 39ca6539c59159f9de7331bd09fcba62e99aeac9..496f039ca82a49af0c1dea183823ef9f6508000b 100644 (file)
@@ -117,11 +117,9 @@ export default class SearchSelect extends React.PureComponent {
         filterOption={this.handleFilterOption}
         isLoading={this.state.loading}
         noResultsText={
-          this.state.query.length < this.props.minimumQueryLength ? (
-            translateWithParameters('select2.tooShort', this.props.minimumQueryLength)
-          ) : (
-            translate('select2.noMatches')
-          )
+          this.state.query.length < this.props.minimumQueryLength
+            ? translateWithParameters('select2.tooShort', this.props.minimumQueryLength)
+            : translate('select2.noMatches')
         }
         onBlur={this.props.resetOnBlur ? this.handleBlur : undefined}
         onChange={this.handleChange}
index 825ace80a34d76f9340ced8053cba87d6415cfdb..057fdf5b323c1b194c5881a6e3ee5c71fc96464f 100644 (file)
@@ -18,7 +18,7 @@
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  */
 import * as React from 'react';
-import Modal from 'react-modal';
+import * as Modal from 'react-modal';
 
 export interface ChildrenProps {
   onCloseClick: (event: React.SyntheticEvent<HTMLElement>) => void;
index c0aa0d1ab89d2b3ccd96d8f2da3748870fb82a5b..d9c8fa8d1f9c7e0d3b189548bc16666e7cb06ae2 100644 (file)
@@ -4,7 +4,9 @@ exports[`accepts advanced options fields 1`] = `
 <ul
   className="radio-toggle"
 >
-  <li>
+  <li
+    key="one"
+  >
     <input
       checked={false}
       id="sample__one"
@@ -24,7 +26,9 @@ exports[`accepts advanced options fields 1`] = `
       </label>
     </Tooltip>
   </li>
-  <li>
+  <li
+    key="two"
+  >
     <input
       checked={false}
       disabled={true}
@@ -52,7 +56,9 @@ exports[`renders 1`] = `
 <ul
   className="radio-toggle"
 >
-  <li>
+  <li
+    key="one"
+  >
     <input
       checked={false}
       id="sample__one"
@@ -67,7 +73,9 @@ exports[`renders 1`] = `
       first
     </label>
   </li>
-  <li>
+  <li
+    key="two"
+  >
     <input
       checked={false}
       id="sample__two"
index d3ea2edb7b0ff19269ec2467ab4cc19c3dcdf52b..7013269949a8355d7f7553188bdc99feae753684 100644 (file)
@@ -14,6 +14,7 @@ exports[`should render Select 1`] = `
   clearRenderer={[Function]}
   clearValueText="Clear value"
   clearable={false}
+  closeOnSelect={true}
   deleteRemoves={true}
   delimiter=","
   disabled={false}
@@ -37,6 +38,8 @@ exports[`should render Select 1`] = `
   onChange={[Function]}
   onCloseResetsInput={true}
   onInputChange={[Function]}
+  onSelectResetsInput={true}
+  openOnClick={true}
   optionComponent={[Function]}
   options={Array []}
   pageSize={5}
index 4778ef47dbc5efe33faaccafcfe32c6179edb7a9..ea433bf1532e53e82144f1a461fec37571d22189 100644 (file)
@@ -12,7 +12,9 @@ exports[`renders 1`] = `
   overlayClassName="modal-overlay"
   parentSelector={[Function]}
   portalClassName="ReactModalPortal"
+  shouldCloseOnEsc={true}
   shouldCloseOnOverlayClick={true}
+  shouldFocusAfterRender={true}
 >
   <div />
 </Modal>
@@ -30,7 +32,9 @@ exports[`submits 1`] = `
   overlayClassName="modal-overlay"
   parentSelector={[Function]}
   portalClassName="ReactModalPortal"
+  shouldCloseOnEsc={true}
   shouldCloseOnOverlayClick={true}
+  shouldFocusAfterRender={true}
 >
   <button
     disabled={false}
@@ -53,7 +57,9 @@ exports[`submits 2`] = `
   overlayClassName="modal-overlay"
   parentSelector={[Function]}
   portalClassName="ReactModalPortal"
+  shouldCloseOnEsc={true}
   shouldCloseOnOverlayClick={true}
+  shouldFocusAfterRender={true}
 >
   <button
     disabled={true}
@@ -76,7 +82,9 @@ exports[`submits 3`] = `
   overlayClassName="modal-overlay"
   parentSelector={[Function]}
   portalClassName="ReactModalPortal"
+  shouldCloseOnEsc={true}
   shouldCloseOnOverlayClick={true}
+  shouldFocusAfterRender={true}
 >
   <button
     disabled={false}
index 5141e4d803228f51eea0f75ad605d04fe849110b..6b8b4fd94c869c2d587814bbbf4dc15f93d9826f 100644 (file)
@@ -108,18 +108,18 @@ export default class IssueView extends React.PureComponent {
           onChange={this.props.onChange}
         />
         {issue.comments &&
-        issue.comments.length > 0 && (
-          <div className="issue-comments">
-            {issue.comments.map(comment => (
-              <IssueCommentLine
-                comment={comment}
-                key={comment.key}
-                onEdit={this.editComment}
-                onDelete={this.deleteComment}
-              />
-            ))}
-          </div>
-        )}
+          issue.comments.length > 0 && (
+            <div className="issue-comments">
+              {issue.comments.map(comment => (
+                <IssueCommentLine
+                  comment={comment}
+                  key={comment.key}
+                  onEdit={this.editComment}
+                  onDelete={this.deleteComment}
+                />
+              ))}
+            </div>
+          )}
         <a className="issue-navigate js-issue-navigate">
           <i className="issue-navigate-to-left icon-chevron-left" />
           <i className="issue-navigate-to-right icon-chevron-right" />
index fa66812411b1b45bfa921a81a61f9eb65c092696..bb80c21b7860d888295351c8f45f55bbc44707f7 100644 (file)
@@ -90,11 +90,9 @@ export default class SimilarIssuesPopup extends React.PureComponent {
           </SelectListItem>
 
           <SelectListItem item="resolution">
-            {issue.resolution != null ? (
-              translate('issue.resolution', issue.resolution)
-            ) : (
-              translate('unresolved')
-            )}
+            {issue.resolution != null
+              ? translate('issue.resolution', issue.resolution)
+              : translate('unresolved')}
           </SelectListItem>
 
           <SelectListItem item="assignee">
index 1e649d62abb5c47cb2fc6a8e2e7767f980dc1501..65cade73cf8ad20ebd52a05fd6e3cd045fa21cdd 100644 (file)
@@ -25,7 +25,9 @@ exports[`should render the changelog popup correctly 1`] = `
             created_by john.david.dalton@gmail.com
           </td>
         </tr>
-        <tr>
+        <tr
+          key="0"
+        >
           <td
             className="thin text-left text-top nowrap"
           >
@@ -53,6 +55,7 @@ exports[`should render the changelog popup correctly 1`] = `
                   "oldValue": "CRITICAL",
                 }
               }
+              key="severity"
             />
           </td>
         </tr>
index 8d0995dce239825ae05243dc572bfb68b7aa543c..bc4c8e02c7fd3655249a7fd46915d5512c0411af 100644 (file)
@@ -19,6 +19,7 @@ exports[`should render tags popup correctly 1`] = `
   >
     <SelectListItem
       item="BLOCKER"
+      key="BLOCKER"
     >
       <SeverityIcon
         className="little-spacer-right"
@@ -28,6 +29,7 @@ exports[`should render tags popup correctly 1`] = `
     </SelectListItem>
     <SelectListItem
       item="CRITICAL"
+      key="CRITICAL"
     >
       <SeverityIcon
         className="little-spacer-right"
@@ -37,6 +39,7 @@ exports[`should render tags popup correctly 1`] = `
     </SelectListItem>
     <SelectListItem
       item="MAJOR"
+      key="MAJOR"
     >
       <SeverityIcon
         className="little-spacer-right"
@@ -46,6 +49,7 @@ exports[`should render tags popup correctly 1`] = `
     </SelectListItem>
     <SelectListItem
       item="MINOR"
+      key="MINOR"
     >
       <SeverityIcon
         className="little-spacer-right"
@@ -55,6 +59,7 @@ exports[`should render tags popup correctly 1`] = `
     </SelectListItem>
     <SelectListItem
       item="INFO"
+      key="INFO"
     >
       <SeverityIcon
         className="little-spacer-right"
index 249ca05ae77ec842ceb1afe34362edb0a4fa3c7b..4c67a6da4ec3d7e4583b8bb0eeeef4f8f9d48663 100644 (file)
@@ -18,24 +18,28 @@ exports[`should render tags popup correctly 1`] = `
   >
     <SelectListItem
       item="confirm"
+      key="confirm"
       title="issue.transition.confirm.description"
     >
       issue.transition.confirm
     </SelectListItem>
     <SelectListItem
       item="resolve"
+      key="resolve"
       title="issue.transition.resolve.description"
     >
       issue.transition.resolve
     </SelectListItem>
     <SelectListItem
       item="falsepositive"
+      key="falsepositive"
       title="issue.transition.falsepositive.description"
     >
       issue.transition.falsepositive
     </SelectListItem>
     <SelectListItem
       item="wontfix"
+      key="wontfix"
       title="issue.transition.wontfix.description"
     >
       issue.transition.wontfix
index fb727840075d5a2c142b9f9abadbf3a01cadb0d7..6313549adb262b406e462fd8693e637ae621b0ce 100644 (file)
@@ -17,6 +17,7 @@ exports[`should render tags popup correctly 1`] = `
   >
     <SelectListItem
       item="BUG"
+      key="BUG"
     >
       <IssueTypeIcon
         className="little-spacer-right"
@@ -26,6 +27,7 @@ exports[`should render tags popup correctly 1`] = `
     </SelectListItem>
     <SelectListItem
       item="VULNERABILITY"
+      key="VULNERABILITY"
     >
       <IssueTypeIcon
         className="little-spacer-right"
@@ -35,6 +37,7 @@ exports[`should render tags popup correctly 1`] = `
     </SelectListItem>
     <SelectListItem
       item="CODE_SMELL"
+      key="CODE_SMELL"
     >
       <IssueTypeIcon
         className="little-spacer-right"
index c7544325517fa76d51926b4424a9b039bd7ed99c..8597c393103f2361e7b2aa90a533a67ac384a282 100644 (file)
@@ -175,19 +175,19 @@ export default class PreviewGraph extends React.PureComponent {
               updateTooltip={this.updateTooltip}
             />
             {selectedDate != null &&
-            tooltipXPos != null &&
-            tooltipIdx != null && (
-              <PreviewGraphTooltips
-                formatValue={this.formatValue}
-                graph={graph}
-                graphWidth={width}
-                metrics={this.props.metrics}
-                selectedDate={selectedDate}
-                series={series}
-                tooltipIdx={tooltipIdx}
-                tooltipPos={tooltipXPos}
-              />
-            )}
+              tooltipXPos != null &&
+              tooltipIdx != null && (
+                <PreviewGraphTooltips
+                  formatValue={this.formatValue}
+                  graph={graph}
+                  graphWidth={width}
+                  metrics={this.props.metrics}
+                  selectedDate={selectedDate}
+                  series={series}
+                  tooltipIdx={tooltipIdx}
+                  tooltipPos={tooltipXPos}
+                />
+              )}
           </div>
         )}
       </AutoSizer>
index 64d9d39a3e4aac84f856a9d3262127c084eed8bf..bd558730f2671b51879662eeb5ff39f262d4531a 100644 (file)
@@ -27,16 +27,19 @@ exports[`should render correctly 1`] = `
     >
       <tbody>
         <PreviewGraphTooltipsContent
+          key="code_smells"
           style="0"
           translatedName="Code Smells"
           value="Formated.15"
         />
         <PreviewGraphTooltipsContent
+          key="bugs"
           style="1"
           translatedName="Bugs"
           value="Formated.0"
         />
         <PreviewGraphTooltipsContent
+          key="vulnerabilities"
           style="2"
           translatedName="Vulnerabilities"
           value="Formated.1"
index aae5afb93bc47064c8fc3dda86db4396c14dc476..5de3cb928fb99f9652259a82496c67e62f006703 100644 (file)
@@ -76,7 +76,7 @@ export function getIssuesUrl(query: Query): Location {
  * Generate URL for a component's issues page
  */
 export function getComponentIssuesUrl(componentKey: string, query?: Query): Location {
-  return { pathname: '/project/issues', query: { ...query || {}, id: componentKey } };
+  return { pathname: '/project/issues', query: { ...(query || {}), id: componentKey } };
 }
 
 export function getComponentIssuesUrlAsString(componentKey: string, query?: Query): string {
index 8c5e2d8150b62f82742780c07489fa227117c0c1..e356fffe796a40d53619a1c2041e0a36a88a95e3 100644 (file)
@@ -24,7 +24,7 @@ const middlewares = [thunk];
 const composed = [];
 
 if (process.env.NODE_ENV !== 'production') {
-  const createLogger = require('redux-logger');
+  const { createLogger } = require('redux-logger');
   middlewares.push(createLogger());
 
   composed.push(window.devToolsExtension ? window.devToolsExtension() : f => f);
index af0001fc633c462b29ca2afa1c6ba44368f1e2b0..c164d2c3872f562dd09fed6fb7118f408e0ec15c 100644 (file)
@@ -2,20 +2,13 @@
 # yarn lockfile v1
 
 
-"@timer/detect-port@1.1.3":
-  version "1.1.3"
-  resolved "https://registry.yarnpkg.com/@timer/detect-port/-/detect-port-1.1.3.tgz#1383abd67f9a5d683df5276f8a92d60bdf9abb90"
-  dependencies:
-    address "^1.0.1"
-    debug "^2.6.0"
-
 "@types/cheerio@*":
   version "0.22.2"
   resolved "https://registry.yarnpkg.com/@types/cheerio/-/cheerio-0.22.2.tgz#539625874bc856086ad491c2fdc9b10c05ae308e"
 
-"@types/classnames@2.2.0":
-  version "2.2.0"
-  resolved "https://registry.yarnpkg.com/@types/classnames/-/classnames-2.2.0.tgz#f2312039e780bdf89d7d4102a26ec11de5ec58aa"
+"@types/classnames@2.2.3":
+  version "2.2.3"
+  resolved "https://registry.yarnpkg.com/@types/classnames/-/classnames-2.2.3.tgz#3f0ff6873da793870e20a260cada55982f38a9e5"
 
 "@types/d3-array@1.2.1":
   version "1.2.1"
     "@types/cheerio" "*"
     "@types/react" "*"
 
-"@types/escape-html@0.0.19":
-  version "0.0.19"
-  resolved "https://registry.yarnpkg.com/@types/escape-html/-/escape-html-0.0.19.tgz#595ff7bd7ee510af54517819de24abdcea6f3507"
+"@types/escape-html@0.0.20":
+  version "0.0.20"
+  resolved "https://registry.yarnpkg.com/@types/escape-html/-/escape-html-0.0.20.tgz#cae698714dd61ebee5ab3f2aeb9a34ba1011735a"
 
 "@types/history@^3":
   version "3.2.1"
   resolved "https://registry.yarnpkg.com/@types/history/-/history-3.2.1.tgz#0039ab0e0be2a0cc22bac171d27a44588103d123"
 
-"@types/jest@20.0.7":
-  version "20.0.7"
-  resolved "https://registry.yarnpkg.com/@types/jest/-/jest-20.0.7.tgz#39cd215db8bda03928dceb933a1e63eb2cbd210e"
+"@types/jest@21.1.5":
+  version "21.1.5"
+  resolved "https://registry.yarnpkg.com/@types/jest/-/jest-21.1.5.tgz#3db93d069d12602ca115d3604550e15131d8eb7a"
 
 "@types/jquery@3.2.11":
   version "3.2.11"
   resolved "https://registry.yarnpkg.com/@types/jquery/-/jquery-3.2.11.tgz#9119f91bb103b16ae8c4375b019a9b341b409f50"
 
-"@types/lodash@4.14.73":
-  version "4.14.73"
-  resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.73.tgz#9837e47db8643ba5bcef2c7921f37d90f9c24213"
+"@types/lodash@4.14.79":
+  version "4.14.79"
+  resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.79.tgz#125f9df9d8a1cc032c730681c62fb9efd74c0da7"
 
 "@types/node@*":
   version "8.0.22"
@@ -72,9 +65,9 @@
   version "0.0.22"
   resolved "https://registry.yarnpkg.com/@types/numeral/-/numeral-0.0.22.tgz#86bef1f0a2d743afdc2ef3168d45f2905e1a0b93"
 
-"@types/prop-types@15.5.1":
-  version "15.5.1"
-  resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.5.1.tgz#1ecf52621299e65b855374337fb11fd2d1066fc1"
+"@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/react-dom@15.5.2":
   version "15.5.2"
   dependencies:
     "@types/react" "*"
 
-"@types/react-intl@2.3.1":
-  version "2.3.1"
-  resolved "https://registry.yarnpkg.com/@types/react-intl/-/react-intl-2.3.1.tgz#d036dbe54f6ef29f2a150ed303a84f1693ddf905"
+"@types/react-intl@2.3.2":
+  version "2.3.2"
+  resolved "https://registry.yarnpkg.com/@types/react-intl/-/react-intl-2.3.2.tgz#a57433871dedf2f12ba8eeca645e5ce5a37d102a"
 
-"@types/react-modal@2.2.0":
-  version "2.2.0"
-  resolved "https://registry.yarnpkg.com/@types/react-modal/-/react-modal-2.2.0.tgz#e92bb8454e53030581f263e3fb7e7d27e3eb85b8"
+"@types/react-modal@2.2.2":
+  version "2.2.2"
+  resolved "https://registry.yarnpkg.com/@types/react-modal/-/react-modal-2.2.2.tgz#651157522ba45c1ffd8831a2e7bbd8094390a925"
   dependencies:
     "@types/react" "*"
 
-"@types/react-redux@5.0.3":
-  version "5.0.3"
-  resolved "https://registry.yarnpkg.com/@types/react-redux/-/react-redux-5.0.3.tgz#cd68de0c49c516b940fdc6f688535596b5d6eca4"
+"@types/react-redux@5.0.10":
+  version "5.0.10"
+  resolved "https://registry.yarnpkg.com/@types/react-redux/-/react-redux-5.0.10.tgz#f5c45a349f759d87d6b1f2aa096a756561a6d5c9"
   dependencies:
     "@types/react" "*"
     redux "^3.6.0"
     "@types/history" "^3"
     "@types/react" "*"
 
-"@types/react-select@1.0.51":
-  version "1.0.51"
-  resolved "https://registry.yarnpkg.com/@types/react-select/-/react-select-1.0.51.tgz#47e7787b068c34395251e95a0981cff8034eddcc"
+"@types/react-select@1.0.59":
+  version "1.0.59"
+  resolved "https://registry.yarnpkg.com/@types/react-select/-/react-select-1.0.59.tgz#791022e5b2c7cd5c86301949ea5e4cc94a55bc66"
   dependencies:
     "@types/react" "*"
 
@@ -164,7 +157,7 @@ acorn@^4.0.3, acorn@^4.0.4:
   version "4.0.13"
   resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787"
 
-acorn@^5.0.0, acorn@^5.0.3, acorn@^5.1.1:
+acorn@^5.0.0, acorn@^5.1.1:
   version "5.1.1"
   resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.1.1.tgz#53fe161111f912ab999ee887a90a0bc52822fd75"
 
@@ -174,23 +167,15 @@ add-dom-event-listener@1.x:
   dependencies:
     object-assign "4.x"
 
-address@1.0.1:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/address/-/address-1.0.1.tgz#363f5d3f2be26d0655d8afd5a9562e4fc2194537"
-
 address@1.0.2, address@^1.0.1:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/address/-/address-1.0.2.tgz#480081e82b587ba319459fef512f516fe03d58af"
 
-ajv-keywords@^1.1.1:
-  version "1.5.1"
-  resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-1.5.1.tgz#314dd0a4b3368fad3dfcdc54ede6171b886daf3c"
-
-ajv-keywords@^2.1.0:
+ajv-keywords@^2.0.0, ajv-keywords@^2.1.0:
   version "2.1.0"
   resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-2.1.0.tgz#a296e17f7bfae7c1ce4f7e0de53d29cb32162df0"
 
-ajv@^4.7.0, ajv@^4.9.1:
+ajv@^4.9.1:
   version "4.11.8"
   resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536"
   dependencies:
@@ -206,6 +191,15 @@ ajv@^5.0.0:
     json-schema-traverse "^0.3.0"
     json-stable-stringify "^1.0.1"
 
+ajv@^5.1.5:
+  version "5.3.0"
+  resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.3.0.tgz#4414ff74a50879c208ee5fdc826e32c303549eda"
+  dependencies:
+    co "^4.6.0"
+    fast-deep-equal "^1.0.0"
+    fast-json-stable-stringify "^2.0.0"
+    json-schema-traverse "^0.3.0"
+
 ajv@^5.2.0, ajv@^5.2.3:
   version "5.2.3"
   resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.2.3.tgz#c06f598778c44c6b161abafe3466b81ad1814ed2"
@@ -235,18 +229,10 @@ anser@1.2.5:
   version "1.2.5"
   resolved "https://registry.yarnpkg.com/anser/-/anser-1.2.5.tgz#5dcfc956eaa373b9c23010dd20dabec2ce19475b"
 
-anser@1.3.0:
-  version "1.3.0"
-  resolved "https://registry.yarnpkg.com/anser/-/anser-1.3.0.tgz#65b42f01119edb5a2fc8ea6f0892274cbcbec6b1"
-
 anser@1.4.1:
   version "1.4.1"
   resolved "https://registry.yarnpkg.com/anser/-/anser-1.4.1.tgz#c3641863a962cebef941ea2c8706f2cb4f0716bd"
 
-ansi-escapes@^1.1.0, ansi-escapes@^1.4.0:
-  version "1.4.0"
-  resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e"
-
 ansi-escapes@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-2.0.0.tgz#5bae52be424878dd9783e8910e3fc2922e83c81b"
@@ -259,7 +245,7 @@ ansi-html@0.0.7:
   version "0.0.7"
   resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e"
 
-ansi-regex@^2.0.0, ansi-regex@^2.1.1:
+ansi-regex@^2.0.0:
   version "2.1.1"
   resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
 
@@ -271,7 +257,7 @@ ansi-styles@^2.2.1:
   version "2.2.1"
   resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
 
-ansi-styles@^3.0.0, ansi-styles@^3.1.0:
+ansi-styles@^3.1.0, ansi-styles@^3.2.0:
   version "3.2.0"
   resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.0.tgz#c159b8d5be0f9e5a6f346dab94f16ce022161b88"
   dependencies:
@@ -339,10 +325,18 @@ array-filter@~0.0.0:
   version "0.0.1"
   resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-0.0.1.tgz#7da8cf2e26628ed732803581fd21f67cacd2eeec"
 
+array-find-index@^1.0.1:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1"
+
 array-flatten@1.1.1:
   version "1.1.1"
   resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2"
 
+array-flatten@^2.1.0:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.1.tgz#426bb9da84090c1838d812c8150af20a8331e296"
+
 array-includes@^3.0.3:
   version "3.0.3"
   resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.0.3.tgz#184b48f62d92d7452bb31b323165c7f8bd02266d"
@@ -414,6 +408,10 @@ ast-types-flow@0.0.7:
   version "0.0.7"
   resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad"
 
+astral-regex@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9"
+
 async-each@^1.0.0:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d"
@@ -422,7 +420,7 @@ async@^1.4.0, async@^1.5.2:
   version "1.5.2"
   resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a"
 
-async@^2.1.2, async@^2.1.4:
+async@^2.1.2, async@^2.1.4, async@^2.4.1:
   version "2.5.0"
   resolved "https://registry.yarnpkg.com/async/-/async-2.5.0.tgz#843190fd6b7357a0b9e1c956edddd5ec8462b54d"
   dependencies:
@@ -497,7 +495,39 @@ babel-code-frame@6.22.0, babel-code-frame@^6.11.0, babel-code-frame@^6.22.0:
     esutils "^2.0.2"
     js-tokens "^3.0.0"
 
-babel-core@^6.0.0, babel-core@^6.22.1, babel-core@^6.24.1:
+babel-code-frame@^6.26.0:
+  version "6.26.0"
+  resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b"
+  dependencies:
+    chalk "^1.1.3"
+    esutils "^2.0.2"
+    js-tokens "^3.0.2"
+
+babel-core@6.26.0, babel-core@^6.26.0:
+  version "6.26.0"
+  resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.0.tgz#af32f78b31a6fcef119c87b0fd8d9753f03a0bb8"
+  dependencies:
+    babel-code-frame "^6.26.0"
+    babel-generator "^6.26.0"
+    babel-helpers "^6.24.1"
+    babel-messages "^6.23.0"
+    babel-register "^6.26.0"
+    babel-runtime "^6.26.0"
+    babel-template "^6.26.0"
+    babel-traverse "^6.26.0"
+    babel-types "^6.26.0"
+    babylon "^6.18.0"
+    convert-source-map "^1.5.0"
+    debug "^2.6.8"
+    json5 "^0.5.1"
+    lodash "^4.17.4"
+    minimatch "^3.0.4"
+    path-is-absolute "^1.0.1"
+    private "^0.1.7"
+    slash "^1.0.0"
+    source-map "^0.5.6"
+
+babel-core@^6.0.0, babel-core@^6.24.1:
   version "6.25.0"
   resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.25.0.tgz#7dd42b0463c742e9d5296deb3ec67a9322dad729"
   dependencies:
@@ -534,6 +564,19 @@ babel-generator@^6.18.0, babel-generator@^6.25.0:
     source-map "^0.5.0"
     trim-right "^1.0.1"
 
+babel-generator@^6.26.0:
+  version "6.26.0"
+  resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.0.tgz#ac1ae20070b79f6e3ca1d3269613053774f20dc5"
+  dependencies:
+    babel-messages "^6.23.0"
+    babel-runtime "^6.26.0"
+    babel-types "^6.26.0"
+    detect-indent "^4.0.0"
+    jsesc "^1.3.0"
+    lodash "^4.17.4"
+    source-map "^0.5.6"
+    trim-right "^1.0.1"
+
 babel-helper-builder-binary-assignment-operator-visitor@^6.24.1:
   version "6.24.1"
   resolved "https://registry.yarnpkg.com/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz#cce4517ada356f4220bcae8a02c2b346f9a56664"
@@ -643,19 +686,18 @@ babel-helpers@^6.24.1:
     babel-runtime "^6.22.0"
     babel-template "^6.24.1"
 
-babel-jest@20.0.3, babel-jest@^20.0.3:
-  version "20.0.3"
-  resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-20.0.3.tgz#e4a03b13dc10389e140fc645d09ffc4ced301671"
+babel-jest@21.2.0, babel-jest@^21.2.0:
+  version "21.2.0"
+  resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-21.2.0.tgz#2ce059519a9374a2c46f2455b6fbef5ad75d863e"
   dependencies:
-    babel-core "^6.0.0"
     babel-plugin-istanbul "^4.0.0"
-    babel-preset-jest "^20.0.3"
+    babel-preset-jest "^21.2.0"
 
-babel-loader@7.0.0:
-  version "7.0.0"
-  resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-7.0.0.tgz#2e43a66bee1fff4470533d0402c8a4532fafbaf7"
+babel-loader@7.1.2:
+  version "7.1.2"
+  resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-7.1.2.tgz#f6cbe122710f1aa2af4d881c6d5b54358ca24126"
   dependencies:
-    find-cache-dir "^0.1.1"
+    find-cache-dir "^1.0.0"
     loader-utils "^1.0.2"
     mkdirp "^0.5.1"
 
@@ -671,13 +713,13 @@ babel-plugin-check-es2015-constants@^6.22.0:
   dependencies:
     babel-runtime "^6.22.0"
 
-babel-plugin-dynamic-import-node@1.0.2:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-1.0.2.tgz#adb5bc8f48a89311540395ae9f0cc3ed4b10bb2e"
+babel-plugin-dynamic-import-node@1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-1.1.0.tgz#bd1d88ac7aaf98df4917c384373b04d971a2b37a"
   dependencies:
     babel-plugin-syntax-dynamic-import "^6.18.0"
-    babel-template "^6.24.1"
-    babel-types "^6.24.1"
+    babel-template "^6.26.0"
+    babel-types "^6.26.0"
 
 babel-plugin-istanbul@^4.0.0, babel-plugin-istanbul@^4.1.4:
   version "4.1.4"
@@ -687,9 +729,9 @@ babel-plugin-istanbul@^4.0.0, babel-plugin-istanbul@^4.1.4:
     istanbul-lib-instrument "^1.7.2"
     test-exclude "^4.1.1"
 
-babel-plugin-jest-hoist@^20.0.3:
-  version "20.0.3"
-  resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-20.0.3.tgz#afedc853bd3f8dc3548ea671fbe69d03cc2c1767"
+babel-plugin-jest-hoist@^21.2.0:
+  version "21.2.0"
+  resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-21.2.0.tgz#2cef637259bd4b628a6cace039de5fcd14dbb006"
 
 babel-plugin-syntax-async-functions@^6.8.0:
   version "6.13.0"
@@ -715,7 +757,7 @@ babel-plugin-syntax-jsx@^6.3.13, babel-plugin-syntax-jsx@^6.8.0:
   version "6.18.0"
   resolved "https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946"
 
-babel-plugin-syntax-object-rest-spread@^6.8.0:
+babel-plugin-syntax-object-rest-spread@^6.13.0, babel-plugin-syntax-object-rest-spread@^6.8.0:
   version "6.13.0"
   resolved "https://registry.yarnpkg.com/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5"
 
@@ -923,12 +965,12 @@ babel-plugin-transform-flow-strip-types@^6.22.0:
     babel-plugin-syntax-flow "^6.18.0"
     babel-runtime "^6.22.0"
 
-babel-plugin-transform-object-rest-spread@^6.22.0:
-  version "6.23.0"
-  resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.23.0.tgz#875d6bc9be761c58a2ae3feee5dc4895d8c7f921"
+babel-plugin-transform-object-rest-spread@6.26.0:
+  version "6.26.0"
+  resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz#0f36692d50fef6b7e2d4b3ac1478137a963b7b06"
   dependencies:
     babel-plugin-syntax-object-rest-spread "^6.8.0"
-    babel-runtime "^6.22.0"
+    babel-runtime "^6.26.0"
 
 babel-plugin-transform-react-constant-elements@^6.22.0:
   version "6.23.0"
@@ -977,17 +1019,17 @@ babel-plugin-transform-strict-mode@^6.24.1:
     babel-runtime "^6.22.0"
     babel-types "^6.24.1"
 
-babel-polyfill@6.23.0:
-  version "6.23.0"
-  resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.23.0.tgz#8364ca62df8eafb830499f699177466c3b03499d"
+babel-polyfill@6.26.0:
+  version "6.26.0"
+  resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.26.0.tgz#379937abc67d7895970adc621f284cd966cf2153"
   dependencies:
-    babel-runtime "^6.22.0"
-    core-js "^2.4.0"
-    regenerator-runtime "^0.10.0"
+    babel-runtime "^6.26.0"
+    core-js "^2.5.0"
+    regenerator-runtime "^0.10.5"
 
-babel-preset-env@^1.1.8:
-  version "1.6.0"
-  resolved "https://registry.yarnpkg.com/babel-preset-env/-/babel-preset-env-1.6.0.tgz#2de1c782a780a0a5d605d199c957596da43c44e4"
+babel-preset-env@1.6.1:
+  version "1.6.1"
+  resolved "https://registry.yarnpkg.com/babel-preset-env/-/babel-preset-env-1.6.1.tgz#a18b564cc9b9afdf4aae57ae3c1b0d99188e6f48"
   dependencies:
     babel-plugin-check-es2015-constants "^6.22.0"
     babel-plugin-syntax-trailing-function-commas "^6.22.0"
@@ -1026,11 +1068,12 @@ babel-preset-flow@^6.23.0:
   dependencies:
     babel-plugin-transform-flow-strip-types "^6.22.0"
 
-babel-preset-jest@^20.0.3:
-  version "20.0.3"
-  resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-20.0.3.tgz#cbacaadecb5d689ca1e1de1360ebfc66862c178a"
+babel-preset-jest@^21.2.0:
+  version "21.2.0"
+  resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-21.2.0.tgz#ff9d2bce08abd98e8a36d9a8a5189b9173b85638"
   dependencies:
-    babel-plugin-jest-hoist "^20.0.3"
+    babel-plugin-jest-hoist "^21.2.0"
+    babel-plugin-syntax-object-rest-spread "^6.13.0"
 
 babel-preset-react@^6.22.0:
   version "6.24.1"
@@ -1055,6 +1098,18 @@ babel-register@^6.24.1:
     mkdirp "^0.5.1"
     source-map-support "^0.4.2"
 
+babel-register@^6.26.0:
+  version "6.26.0"
+  resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071"
+  dependencies:
+    babel-core "^6.26.0"
+    babel-runtime "^6.26.0"
+    core-js "^2.5.0"
+    home-or-tmp "^2.0.0"
+    lodash "^4.17.4"
+    mkdirp "^0.5.1"
+    source-map-support "^0.4.15"
+
 babel-runtime@6.23.0:
   version "6.23.0"
   resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.23.0.tgz#0a9489f144de70efb3ce4300accdb329e2fc543b"
@@ -1062,13 +1117,20 @@ babel-runtime@6.23.0:
     core-js "^2.4.0"
     regenerator-runtime "^0.10.0"
 
-babel-runtime@6.x, babel-runtime@^6.11.6, babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.23.0:
+babel-runtime@6.x, babel-runtime@^6.18.0, babel-runtime@^6.22.0:
   version "6.25.0"
   resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.25.0.tgz#33b98eaa5d482bb01a8d1aa6b437ad2b01aec41c"
   dependencies:
     core-js "^2.4.0"
     regenerator-runtime "^0.10.0"
 
+babel-runtime@^6.23.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:
+    core-js "^2.4.0"
+    regenerator-runtime "^0.11.0"
+
 babel-template@^6.16.0, babel-template@^6.24.1, babel-template@^6.25.0:
   version "6.25.0"
   resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.25.0.tgz#665241166b7c2aa4c619d71e192969552b10c071"
@@ -1079,6 +1141,16 @@ babel-template@^6.16.0, babel-template@^6.24.1, babel-template@^6.25.0:
     babylon "^6.17.2"
     lodash "^4.2.0"
 
+babel-template@^6.26.0:
+  version "6.26.0"
+  resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02"
+  dependencies:
+    babel-runtime "^6.26.0"
+    babel-traverse "^6.26.0"
+    babel-types "^6.26.0"
+    babylon "^6.18.0"
+    lodash "^4.17.4"
+
 babel-traverse@^6.18.0, babel-traverse@^6.24.1, babel-traverse@^6.25.0:
   version "6.25.0"
   resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.25.0.tgz#2257497e2fcd19b89edc13c4c91381f9512496f1"
@@ -1093,6 +1165,20 @@ babel-traverse@^6.18.0, babel-traverse@^6.24.1, babel-traverse@^6.25.0:
     invariant "^2.2.0"
     lodash "^4.2.0"
 
+babel-traverse@^6.26.0:
+  version "6.26.0"
+  resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee"
+  dependencies:
+    babel-code-frame "^6.26.0"
+    babel-messages "^6.23.0"
+    babel-runtime "^6.26.0"
+    babel-types "^6.26.0"
+    babylon "^6.18.0"
+    debug "^2.6.8"
+    globals "^9.18.0"
+    invariant "^2.2.2"
+    lodash "^4.17.4"
+
 babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.25.0:
   version "6.25.0"
   resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.25.0.tgz#70afb248d5660e5d18f811d91c8303b54134a18e"
@@ -1102,10 +1188,23 @@ babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.25
     lodash "^4.2.0"
     to-fast-properties "^1.0.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:
+    babel-runtime "^6.26.0"
+    esutils "^2.0.2"
+    lodash "^4.17.4"
+    to-fast-properties "^1.0.3"
+
 babylon@^6.17.2, babylon@^6.17.4:
   version "6.17.4"
   resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.17.4.tgz#3e8b7402b88d22c3423e137a1577883b15ff869a"
 
+babylon@^6.18.0:
+  version "6.18.0"
+  resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3"
+
 backbone.babysitter@^0.1.0:
   version "0.1.12"
   resolved "https://registry.yarnpkg.com/backbone.babysitter/-/backbone.babysitter-0.1.12.tgz#7ca946434eeefbde1a553605c74b7049b6dfafc1"
@@ -1197,6 +1296,17 @@ bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0:
   version "4.11.8"
   resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f"
 
+bonjour@^3.5.0:
+  version "3.5.0"
+  resolved "https://registry.yarnpkg.com/bonjour/-/bonjour-3.5.0.tgz#8e890a183d8ee9a2393b3844c691a42bcf7bc9f5"
+  dependencies:
+    array-flatten "^2.1.0"
+    deep-equal "^1.0.1"
+    dns-equal "^1.0.0"
+    dns-txt "^2.0.2"
+    multicast-dns "^6.0.1"
+    multicast-dns-service-types "^1.1.0"
+
 boolbase@~1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e"
@@ -1320,18 +1430,16 @@ browserslist@^2.5.1:
     caniuse-lite "^1.0.30000744"
     electron-to-chromium "^1.3.24"
 
-bser@1.0.2:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/bser/-/bser-1.0.2.tgz#381116970b2a6deea5646dd15dd7278444b56169"
-  dependencies:
-    node-int64 "^0.4.0"
-
 bser@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/bser/-/bser-2.0.0.tgz#9ac78d3ed5d915804fd87acb158bc797147a1719"
   dependencies:
     node-int64 "^0.4.0"
 
+buffer-indexof@^1.0.0:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz#52fabcc6a606d1a00302802648ef68f639da268c"
+
 buffer-xor@^1.0.2:
   version "1.0.3"
   resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9"
@@ -1392,10 +1500,21 @@ camel-case@3.0.x:
     no-case "^2.2.0"
     upper-case "^1.1.1"
 
+camelcase-keys@^2.0.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7"
+  dependencies:
+    camelcase "^2.0.0"
+    map-obj "^1.0.0"
+
 camelcase@^1.0.2:
   version "1.2.1"
   resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39"
 
+camelcase@^2.0.0:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f"
+
 camelcase@^3.0.0:
   version "3.0.0"
   resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a"
@@ -1436,7 +1555,7 @@ center-align@^0.1.1:
     align-text "^0.1.3"
     lazy-cache "^1.0.3"
 
-chalk@1.1.3, chalk@^1.0.0, chalk@^1.1.0, chalk@^1.1.3:
+chalk@1.1.3, chalk@^1.1.0, chalk@^1.1.3:
   version "1.1.3"
   resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
   dependencies:
@@ -1446,6 +1565,14 @@ chalk@1.1.3, chalk@^1.0.0, chalk@^1.1.0, chalk@^1.1.3:
     strip-ansi "^3.0.0"
     supports-color "^2.0.0"
 
+chalk@2.3.0, chalk@^2.0.1:
+  version "2.3.0"
+  resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.3.0.tgz#b5ea48efc9c1793dccc9b4767c93914d3f2d52ba"
+  dependencies:
+    ansi-styles "^3.1.0"
+    escape-string-regexp "^1.0.5"
+    supports-color "^4.0.0"
+
 chalk@^2.0.0, chalk@^2.1.0:
   version "2.1.0"
   resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.1.0.tgz#ac5becf14fa21b99c6c92ca7a7d7cfd5b17e743e"
@@ -1521,11 +1648,7 @@ class-utils@^0.3.4:
     lazy-cache "^2.0.2"
     static-extend "^0.1.1"
 
-classnames@2.2.0:
-  version "2.2.0"
-  resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.0.tgz#8f61df81f356c45d18a31d83fde4dfb194ea8722"
-
-classnames@^2.2.3, classnames@^2.2.4, classnames@^2.2.5:
+classnames@2.2.5, classnames@^2.2.3, classnames@^2.2.4, classnames@^2.2.5:
   version "2.2.5"
   resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.5.tgz#fb3801d453467649ef3603c7d61a02bd129bde6d"
 
@@ -1545,13 +1668,13 @@ cli-width@^2.0.0:
   version "2.1.0"
   resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.1.0.tgz#b234ca209b29ef66fc518d9b98d5847b00edf00a"
 
-clipboard@1.5.5:
-  version "1.5.5"
-  resolved "https://registry.yarnpkg.com/clipboard/-/clipboard-1.5.5.tgz#3b39c5148f5d5055aed9a319814f738454771015"
+clipboard@1.7.1:
+  version "1.7.1"
+  resolved "https://registry.yarnpkg.com/clipboard/-/clipboard-1.7.1.tgz#360d6d6946e99a7a1fef395e42ba92b5e9b5a16b"
   dependencies:
-    good-listener "^1.1.4"
-    select "^1.0.6"
-    tiny-emitter "^1.0.0"
+    good-listener "^1.2.2"
+    select "^1.1.2"
+    tiny-emitter "^2.0.0"
 
 cliui@^2.1.0:
   version "2.1.0"
@@ -1723,7 +1846,7 @@ content-type@~1.0.2:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.2.tgz#b7d113aee7a8dd27bd21133c4dc2529df1721eed"
 
-convert-source-map@^1.1.0, convert-source-map@^1.4.0:
+convert-source-map@^1.1.0, convert-source-map@^1.4.0, convert-source-map@^1.5.0:
   version "1.5.0"
   resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.0.tgz#9acd70851c6d5dfdd93d9282e5edf94a03ff46b5"
 
@@ -1747,6 +1870,10 @@ core-js@^2.4.0:
   version "2.5.0"
   resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.0.tgz#569c050918be6486b3837552028ae0466b717086"
 
+core-js@^2.5.0:
+  version "2.5.1"
+  resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.1.tgz#ae6874dc66937789b80754ff5428df66819ca50b"
+
 core-util-is@1.0.2, core-util-is@~1.0.0:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
@@ -1790,20 +1917,21 @@ create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4:
     safe-buffer "^5.0.1"
     sha.js "^2.4.8"
 
-create-react-class@15.6.0, create-react-class@15.x, create-react-class@^15.5.1, create-react-class@^15.5.2, create-react-class@^15.5.3, create-react-class@^15.6.0:
-  version "15.6.0"
-  resolved "https://registry.yarnpkg.com/create-react-class/-/create-react-class-15.6.0.tgz#ab448497c26566e1e29413e883207d57cfe7bed4"
+create-react-class@15.6.2:
+  version "15.6.2"
+  resolved "https://registry.yarnpkg.com/create-react-class/-/create-react-class-15.6.2.tgz#cf1ed15f12aad7f14ef5f2dfe05e6c42f91ef02a"
   dependencies:
     fbjs "^0.8.9"
     loose-envify "^1.3.1"
     object-assign "^4.1.1"
 
-cross-spawn@4.0.2:
-  version "4.0.2"
-  resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-4.0.2.tgz#7b9247621c23adfdd3856004a823cbe397424d41"
+create-react-class@15.x, create-react-class@^15.5.1, create-react-class@^15.5.2, create-react-class@^15.6.0:
+  version "15.6.0"
+  resolved "https://registry.yarnpkg.com/create-react-class/-/create-react-class-15.6.0.tgz#ab448497c26566e1e29413e883207d57cfe7bed4"
   dependencies:
-    lru-cache "^4.0.1"
-    which "^1.2.9"
+    fbjs "^0.8.9"
+    loose-envify "^1.3.1"
+    object-assign "^4.1.1"
 
 cross-spawn@5.1.0, cross-spawn@^5.0.1, cross-spawn@^5.1.0:
   version "5.1.0"
@@ -1844,9 +1972,9 @@ css-color-names@0.0.4:
   version "0.0.4"
   resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0"
 
-css-loader@0.28.4:
-  version "0.28.4"
-  resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-0.28.4.tgz#6cf3579192ce355e8b38d5f42dd7a1f2ec898d0f"
+css-loader@0.28.7:
+  version "0.28.7"
+  resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-0.28.7.tgz#5f2ee989dd32edd907717f953317656160999c1b"
   dependencies:
     babel-code-frame "^6.11.0"
     css-selector-tokenizer "^0.7.0"
@@ -1861,7 +1989,7 @@ css-loader@0.28.4:
     postcss-modules-scope "^1.0.0"
     postcss-modules-values "^1.1.0"
     postcss-value-parser "^3.3.0"
-    source-list-map "^0.1.7"
+    source-list-map "^2.0.0"
 
 css-select@^1.1.0, css-select@~1.2.0:
   version "1.2.0"
@@ -1942,13 +2070,15 @@ cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0":
   dependencies:
     cssom "0.3.x"
 
-d3-array@1:
-  version "1.2.0"
-  resolved "https://registry.yarnpkg.com/d3-array/-/d3-array-1.2.0.tgz#147d269720e174c4057a7f42be8b0f3f2ba53108"
+currently-unhandled@^0.4.1:
+  version "0.4.1"
+  resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea"
+  dependencies:
+    array-find-index "^1.0.1"
 
-d3-array@1.1.1:
-  version "1.1.1"
-  resolved "https://registry.yarnpkg.com/d3-array/-/d3-array-1.1.1.tgz#a01abe63a25ffb91d3423c3c6d051b4d36bc8a09"
+d3-array@1.2.1, d3-array@^1.2.0:
+  version "1.2.1"
+  resolved "https://registry.yarnpkg.com/d3-array/-/d3-array-1.2.1.tgz#d1ca33de2f6ac31efadb8e050a021d7e2396d5dc"
 
 d3-collection@1:
   version "1.0.4"
@@ -1962,9 +2092,9 @@ d3-format@1:
   version "1.2.0"
   resolved "https://registry.yarnpkg.com/d3-format/-/d3-format-1.2.0.tgz#6b480baa886885d4651dc248a8f4ac9da16db07a"
 
-d3-hierarchy@1.1.4:
-  version "1.1.4"
-  resolved "https://registry.yarnpkg.com/d3-hierarchy/-/d3-hierarchy-1.1.4.tgz#96c3942f3f21cf997a11b4edf00dde2a77b4c6d0"
+d3-hierarchy@1.1.5:
+  version "1.1.5"
+  resolved "https://registry.yarnpkg.com/d3-hierarchy/-/d3-hierarchy-1.1.5.tgz#a1c845c42f84a206bcf1c01c01098ea4ddaa7a26"
 
 d3-interpolate@1:
   version "1.1.5"
@@ -1976,11 +2106,11 @@ d3-path@1:
   version "1.0.5"
   resolved "https://registry.yarnpkg.com/d3-path/-/d3-path-1.0.5.tgz#241eb1849bd9e9e8021c0d0a799f8a0e8e441764"
 
-d3-scale@1.0.5:
-  version "1.0.5"
-  resolved "https://registry.yarnpkg.com/d3-scale/-/d3-scale-1.0.5.tgz#418506f0fb18eb052b385e196398acc2a4134858"
+d3-scale@1.0.6:
+  version "1.0.6"
+  resolved "https://registry.yarnpkg.com/d3-scale/-/d3-scale-1.0.6.tgz#bce19da80d3a0cf422c9543ae3322086220b34ed"
   dependencies:
-    d3-array "1"
+    d3-array "^1.2.0"
     d3-collection "1"
     d3-color "1"
     d3-format "1"
@@ -1988,13 +2118,13 @@ d3-scale@1.0.5:
     d3-time "1"
     d3-time-format "2"
 
-d3-selection@1.0.5:
-  version "1.0.5"
-  resolved "https://registry.yarnpkg.com/d3-selection/-/d3-selection-1.0.5.tgz#948c73b41a44e28d1742ae2ff207c2aebca2734b"
+d3-selection@1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/d3-selection/-/d3-selection-1.1.0.tgz#1998684896488f839ca0372123da34f1d318809c"
 
-d3-shape@1.0.6:
-  version "1.0.6"
-  resolved "https://registry.yarnpkg.com/d3-shape/-/d3-shape-1.0.6.tgz#b09e305cf0c7c6b9a98c90e6b42f62dac4bcfd5b"
+d3-shape@1.2.0:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/d3-shape/-/d3-shape-1.2.0.tgz#45d01538f064bafd05ea3d6d2cb748fd8c41f777"
   dependencies:
     d3-path "1"
 
@@ -2008,6 +2138,12 @@ d3-time@1:
   version "1.0.7"
   resolved "https://registry.yarnpkg.com/d3-time/-/d3-time-1.0.7.tgz#94caf6edbb7879bb809d0d1f7572bc48482f7270"
 
+d@1:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/d/-/d-1.0.0.tgz#754bb5bfe55451da69a58b94d45f4c5b0462d58f"
+  dependencies:
+    es5-ext "^0.10.9"
+
 damerau-levenshtein@^1.0.0:
   version "1.0.4"
   resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.4.tgz#03191c432cb6eea168bb77f3a55ffdccb8978514"
@@ -2018,10 +2154,14 @@ dashdash@^1.12.0:
   dependencies:
     assert-plus "^1.0.0"
 
-date-fns@*, date-fns@1.28.5:
+date-fns@*:
   version "1.28.5"
   resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.28.5.tgz#257cfc45d322df45ef5658665967ee841cd73faf"
 
+date-fns@1.29.0:
+  version "1.29.0"
+  resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.29.0.tgz#12e609cdcb935127311d04d33334e2960a2a54e6"
+
 date-now@^0.1.4:
   version "0.1.4"
   resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b"
@@ -2032,7 +2172,7 @@ debug@2.6.8, debug@^2.1.1, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0, debug@^2.6.
   dependencies:
     ms "2.0.0"
 
-debug@^3.0.1:
+debug@^3.0.1, debug@^3.1.0:
   version "3.1.0"
   resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261"
   dependencies:
@@ -2042,6 +2182,10 @@ decamelize@^1.0.0, decamelize@^1.1.1, decamelize@^1.1.2:
   version "1.2.0"
   resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
 
+deep-diff@^0.3.5:
+  version "0.3.8"
+  resolved "https://registry.yarnpkg.com/deep-diff/-/deep-diff-0.3.8.tgz#c01de63efb0eec9798801d40c7e0dae25b582c84"
+
 deep-equal@^1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5"
@@ -2095,6 +2239,17 @@ del@^2.0.2:
     pinkie-promise "^2.0.0"
     rimraf "^2.2.8"
 
+del@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/del/-/del-3.0.0.tgz#53ecf699ffcbcb39637691ab13baf160819766e5"
+  dependencies:
+    globby "^6.1.0"
+    is-path-cwd "^1.0.0"
+    is-path-in-cwd "^1.0.0"
+    p-map "^1.1.1"
+    pify "^3.0.0"
+    rimraf "^2.2.8"
+
 delayed-stream@~1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
@@ -2151,6 +2306,23 @@ diffie-hellman@^5.0.0:
     miller-rabin "^4.0.0"
     randombytes "^2.0.0"
 
+dns-equal@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d"
+
+dns-packet@^1.0.1:
+  version "1.2.2"
+  resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.2.2.tgz#a8a26bec7646438963fc86e06f8f8b16d6c8bf7a"
+  dependencies:
+    ip "^1.1.0"
+    safe-buffer "^5.0.1"
+
+dns-txt@^2.0.2:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/dns-txt/-/dns-txt-2.0.2.tgz#b91d806f5d27188e4ab3e7d107d881a1cc4642b6"
+  dependencies:
+    buffer-indexof "^1.0.0"
+
 doctrine@1.5.0:
   version "1.5.0"
   resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa"
@@ -2295,7 +2467,7 @@ enhanced-resolve@3.3.0:
     object-assign "^4.0.1"
     tapable "^0.2.5"
 
-enhanced-resolve@^3.0.0:
+enhanced-resolve@^3.4.0:
   version "3.4.1"
   resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz#0421e339fd71419b3da13d129b3979040230476e"
   dependencies:
@@ -2308,17 +2480,17 @@ entities@^1.1.1, entities@~1.1.1:
   version "1.1.1"
   resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0"
 
-enzyme-to-json@1.5.1:
-  version "1.5.1"
-  resolved "https://registry.yarnpkg.com/enzyme-to-json/-/enzyme-to-json-1.5.1.tgz#e34f4d126bb3f4696ce3800b51f9ed83df708799"
+enzyme-to-json@2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/enzyme-to-json/-/enzyme-to-json-2.0.1.tgz#e8b223040a7cc603bc678a4698c1a83c8c649932"
   dependencies:
     lodash.filter "^4.6.0"
     lodash.isnil "^4.0.0"
     lodash.isplainobject "^4.0.6"
-    lodash.omitby "^4.5.0"
+    lodash.omitby "^4.6.0"
     lodash.range "^3.2.0"
     object-values "^1.0.0"
-    object.entries "^1.0.3"
+    object.entries "^1.0.4"
 
 enzyme@2.9.1:
   version "2.9.1"
@@ -2365,6 +2537,58 @@ es-to-primitive@^1.1.1:
     is-date-object "^1.0.1"
     is-symbol "^1.0.1"
 
+es5-ext@^0.10.14, es5-ext@^0.10.35, es5-ext@^0.10.9, es5-ext@~0.10.14:
+  version "0.10.35"
+  resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.35.tgz#18ee858ce6a3c45c7d79e91c15fcca9ec568494f"
+  dependencies:
+    es6-iterator "~2.0.1"
+    es6-symbol "~3.1.1"
+
+es6-iterator@^2.0.1, es6-iterator@~2.0.1:
+  version "2.0.3"
+  resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7"
+  dependencies:
+    d "1"
+    es5-ext "^0.10.35"
+    es6-symbol "^3.1.1"
+
+es6-map@^0.1.3:
+  version "0.1.5"
+  resolved "https://registry.yarnpkg.com/es6-map/-/es6-map-0.1.5.tgz#9136e0503dcc06a301690f0bb14ff4e364e949f0"
+  dependencies:
+    d "1"
+    es5-ext "~0.10.14"
+    es6-iterator "~2.0.1"
+    es6-set "~0.1.5"
+    es6-symbol "~3.1.1"
+    event-emitter "~0.3.5"
+
+es6-set@~0.1.5:
+  version "0.1.5"
+  resolved "https://registry.yarnpkg.com/es6-set/-/es6-set-0.1.5.tgz#d2b3ec5d4d800ced818db538d28974db0a73ccb1"
+  dependencies:
+    d "1"
+    es5-ext "~0.10.14"
+    es6-iterator "~2.0.1"
+    es6-symbol "3.1.1"
+    event-emitter "~0.3.5"
+
+es6-symbol@3.1.1, es6-symbol@^3.1.1, es6-symbol@~3.1.1:
+  version "3.1.1"
+  resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.1.tgz#bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77"
+  dependencies:
+    d "1"
+    es5-ext "~0.10.14"
+
+es6-weak-map@^2.0.1:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.2.tgz#5e3ab32251ffd1538a1f8e5ffa1357772f92d96f"
+  dependencies:
+    d "1"
+    es5-ext "^0.10.14"
+    es6-iterator "^2.0.1"
+    es6-symbol "^3.1.1"
+
 escape-html@1.0.3, escape-html@~1.0.3:
   version "1.0.3"
   resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
@@ -2384,6 +2608,15 @@ escodegen@^1.6.1:
   optionalDependencies:
     source-map "~0.2.0"
 
+escope@^3.6.0:
+  version "3.6.0"
+  resolved "https://registry.yarnpkg.com/escope/-/escope-3.6.0.tgz#e01975e812781a163a6dadfdd80398dc64c889c3"
+  dependencies:
+    es6-map "^0.1.3"
+    es6-weak-map "^2.0.1"
+    esrecurse "^4.1.0"
+    estraverse "^4.1.1"
+
 eslint-import-resolver-node@^0.3.1:
   version "0.3.1"
   resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.1.tgz#4422574cde66a9a7b099938ee4d508a199e0e3cc"
@@ -2391,9 +2624,9 @@ eslint-import-resolver-node@^0.3.1:
     debug "^2.6.8"
     resolve "^1.2.0"
 
-eslint-loader@1.8.0:
-  version "1.8.0"
-  resolved "https://registry.yarnpkg.com/eslint-loader/-/eslint-loader-1.8.0.tgz#8261f08cca4bd2ea263b77733e93cf0f21e20aa9"
+eslint-loader@1.9.0:
+  version "1.9.0"
+  resolved "https://registry.yarnpkg.com/eslint-loader/-/eslint-loader-1.9.0.tgz#7e1be9feddca328d3dcfaef1ad49d5beffe83a13"
   dependencies:
     loader-fs-cache "^1.0.0"
     loader-utils "^1.0.2"
@@ -2541,6 +2774,13 @@ etag@~1.8.0:
   version "1.8.0"
   resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.0.tgz#6f631aef336d6c46362b51764044ce216be3c051"
 
+event-emitter@~0.3.5:
+  version "0.3.5"
+  resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39"
+  dependencies:
+    d "1"
+    es5-ext "~0.10.14"
+
 eventemitter3@1.x.x:
   version "1.2.0"
   resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-1.2.0.tgz#1c86991d816ad1e504750e73874224ecf3bec508"
@@ -2579,11 +2819,7 @@ execa@^0.7.0:
     signal-exit "^3.0.0"
     strip-eof "^1.0.0"
 
-exenv@1.2.0:
-  version "1.2.0"
-  resolved "https://registry.yarnpkg.com/exenv/-/exenv-1.2.0.tgz#3835f127abf075bfe082d0aed4484057c78e3c89"
-
-exenv@^1.2.1:
+exenv@^1.2.0, exenv@^1.2.1:
   version "1.2.2"
   resolved "https://registry.yarnpkg.com/exenv/-/exenv-1.2.2.tgz#2ae78e85d9894158670b03d47bec1f03bd91bb9d"
 
@@ -2617,6 +2853,17 @@ expand-tilde@^2.0.0, expand-tilde@^2.0.2:
   dependencies:
     homedir-polyfill "^1.0.1"
 
+expect@^21.2.1:
+  version "21.2.1"
+  resolved "https://registry.yarnpkg.com/expect/-/expect-21.2.1.tgz#003ac2ac7005c3c29e73b38a272d4afadd6d1d7b"
+  dependencies:
+    ansi-styles "^3.2.0"
+    jest-diff "^21.2.1"
+    jest-get-type "^21.2.0"
+    jest-matcher-utils "^21.2.1"
+    jest-message-util "^21.2.1"
+    jest-regex-util "^21.2.0"
+
 expose-loader@0.7.3:
   version "0.7.3"
   resolved "https://registry.yarnpkg.com/expose-loader/-/expose-loader-0.7.3.tgz#35fbd3659789e4faa81f59de8b7e9fc39e466d51"
@@ -2664,7 +2911,7 @@ extend@~3.0.0:
   version "3.0.1"
   resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444"
 
-external-editor@^2.0.1, external-editor@^2.0.4:
+external-editor@^2.0.4:
   version "2.0.4"
   resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.0.4.tgz#1ed9199da9cbfe2ef2f7a31b2fde8b0d12368972"
   dependencies:
@@ -2691,12 +2938,12 @@ extglob@^1.1.0:
     snapdragon "^0.8.1"
     to-regex "^2.1.0"
 
-extract-text-webpack-plugin@2.1.2:
-  version "2.1.2"
-  resolved "https://registry.yarnpkg.com/extract-text-webpack-plugin/-/extract-text-webpack-plugin-2.1.2.tgz#756ef4efa8155c3681833fbc34da53b941746d6c"
+extract-text-webpack-plugin@3.0.1:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/extract-text-webpack-plugin/-/extract-text-webpack-plugin-3.0.1.tgz#605a8893faca1dd49bb0d2ca87493f33fd43d102"
   dependencies:
-    async "^2.1.2"
-    loader-utils "^1.0.2"
+    async "^2.4.1"
+    loader-utils "^1.1.0"
     schema-utils "^0.3.0"
     webpack-sources "^1.0.1"
 
@@ -2708,6 +2955,10 @@ fast-deep-equal@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz#96256a3bc975595eb36d82e9929d060d893439ff"
 
+fast-json-stable-stringify@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2"
+
 fast-levenshtein@~2.0.4:
   version "2.0.6"
   resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
@@ -2728,18 +2979,24 @@ faye-websocket@~0.11.0:
   dependencies:
     websocket-driver ">=0.5.1"
 
-fb-watchman@^1.8.0:
-  version "1.9.2"
-  resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-1.9.2.tgz#a24cf47827f82d38fb59a69ad70b76e3b6ae7383"
-  dependencies:
-    bser "1.0.2"
-
 fb-watchman@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.0.tgz#54e9abf7dfa2f26cd9b1636c588c1afc05de5d58"
   dependencies:
     bser "^2.0.0"
 
+fbjs@^0.8.16:
+  version "0.8.16"
+  resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.16.tgz#5e67432f550dc41b572bf55847b8aca64e5337db"
+  dependencies:
+    core-js "^1.0.0"
+    isomorphic-fetch "^2.1.1"
+    loose-envify "^1.0.0"
+    object-assign "^4.1.0"
+    promise "^7.1.1"
+    setimmediate "^1.0.5"
+    ua-parser-js "^0.7.9"
+
 fbjs@^0.8.9:
   version "0.8.14"
   resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.14.tgz#d1dbe2be254c35a91e09f31f9cd50a40b2a0ed1c"
@@ -2776,10 +3033,6 @@ fileset@^2.0.2:
     glob "^7.0.3"
     minimatch "^3.0.3"
 
-filesize@3.3.0:
-  version "3.3.0"
-  resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.3.0.tgz#53149ea3460e3b2e024962a51648aa572cf98122"
-
 filesize@3.5.10, filesize@^3.5.9:
   version "3.5.10"
   resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.5.10.tgz#fc8fa23ddb4ef9e5e0ab6e1e64f679a24a56761f"
@@ -2823,6 +3076,14 @@ find-cache-dir@^0.1.1:
     mkdirp "^0.5.1"
     pkg-dir "^1.0.0"
 
+find-cache-dir@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-1.0.0.tgz#9288e3e9e3cc3748717d39eade17cf71fc30ee6f"
+  dependencies:
+    commondir "^1.0.1"
+    make-dir "^1.0.0"
+    pkg-dir "^2.0.0"
+
 find-up@^1.0.0:
   version "1.1.2"
   resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f"
@@ -2915,7 +3176,7 @@ fs.realpath@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
 
-fsevents@^1.0.0:
+fsevents@^1.0.0, fsevents@^1.1.1:
   version "1.1.2"
   resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.1.2.tgz#3282b713fb3ad80ede0e9fcf4611b5aa6fc033f4"
   dependencies:
@@ -2972,6 +3233,10 @@ get-caller-file@^1.0.1:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5"
 
+get-stdin@^4.0.1:
+  version "4.0.1"
+  resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe"
+
 get-stream@^3.0.0:
   version "3.0.0"
   resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14"
@@ -3028,7 +3293,7 @@ global-prefix@^1.0.1:
     is-windows "^1.0.1"
     which "^1.2.14"
 
-globals@^9.0.0, globals@^9.17.0:
+globals@^9.0.0, globals@^9.17.0, globals@^9.18.0:
   version "9.18.0"
   resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a"
 
@@ -3043,7 +3308,17 @@ globby@^5.0.0:
     pify "^2.0.0"
     pinkie-promise "^2.0.0"
 
-good-listener@^1.1.4:
+globby@^6.1.0:
+  version "6.1.0"
+  resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c"
+  dependencies:
+    array-union "^1.0.1"
+    glob "^7.0.3"
+    object-assign "^4.0.1"
+    pify "^2.0.0"
+    pinkie-promise "^2.0.0"
+
+good-listener@^1.2.2:
   version "1.2.2"
   resolved "https://registry.yarnpkg.com/good-listener/-/good-listener-1.2.2.tgz#d53b30cdf9313dffb7dc9a0d477096aa6d145c50"
   dependencies:
@@ -3067,9 +3342,9 @@ handle-thing@^1.2.5:
   version "1.2.5"
   resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-1.2.5.tgz#fd7aad726bf1a5fd16dfc29b2f7a6601d27139c4"
 
-handlebars-loader@1.5.0:
-  version "1.5.0"
-  resolved "https://registry.yarnpkg.com/handlebars-loader/-/handlebars-loader-1.5.0.tgz#9ebb33aa8066fc0733fb1679b441638ad91184bb"
+handlebars-loader@1.6.0:
+  version "1.6.0"
+  resolved "https://registry.yarnpkg.com/handlebars-loader/-/handlebars-loader-1.6.0.tgz#767a5843de30ffe795730f7d8a1ba3ce07af5b62"
   dependencies:
     async "~0.2.10"
     fastparse "^1.0.0"
@@ -3188,10 +3463,14 @@ hoek@2.x.x:
   version "2.16.3"
   resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed"
 
-hoist-non-react-statics@^1.0.3, hoist-non-react-statics@^1.2.0:
+hoist-non-react-statics@^1.2.0:
   version "1.2.0"
   resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-1.2.0.tgz#aa448cf0986d55cc40773b17174b7dd066cb7cfb"
 
+hoist-non-react-statics@^2.2.1:
+  version "2.3.1"
+  resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-2.3.1.tgz#343db84c6018c650778898240135a1420ee22ce0"
+
 home-or-tmp@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8"
@@ -3245,9 +3524,9 @@ html-minifier@^3.2.3:
     relateurl "0.2.x"
     uglify-js "3.0.x"
 
-html-webpack-plugin@2.28.0:
-  version "2.28.0"
-  resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-2.28.0.tgz#2e7863b57e5fd48fe263303e2ffc934c3064d009"
+html-webpack-plugin@2.30.1:
+  version "2.30.1"
+  resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-2.30.1.tgz#7f9c421b7ea91ec460f56527d78df484ee7537d5"
   dependencies:
     bluebird "^3.4.7"
     html-minifier "^3.2.3"
@@ -3343,10 +3622,23 @@ ignore@^3.3.3:
   version "3.3.5"
   resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.5.tgz#c4e715455f6073a8d7e5dae72d2fc9d71663dba6"
 
+import-local@^0.1.1:
+  version "0.1.1"
+  resolved "https://registry.yarnpkg.com/import-local/-/import-local-0.1.1.tgz#b1179572aacdc11c6a91009fb430dbcab5f668a8"
+  dependencies:
+    pkg-dir "^2.0.0"
+    resolve-cwd "^2.0.0"
+
 imurmurhash@^0.1.4:
   version "0.1.4"
   resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
 
+indent-string@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80"
+  dependencies:
+    repeating "^2.0.0"
+
 indexes-of@^1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607"
@@ -3374,24 +3666,6 @@ ini@^1.3.4, ini@~1.3.0:
   version "1.3.4"
   resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e"
 
-inquirer@3.0.6:
-  version "3.0.6"
-  resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.0.6.tgz#e04aaa9d05b7a3cb9b0f407d04375f0447190347"
-  dependencies:
-    ansi-escapes "^1.1.0"
-    chalk "^1.0.0"
-    cli-cursor "^2.1.0"
-    cli-width "^2.0.0"
-    external-editor "^2.0.1"
-    figures "^2.0.0"
-    lodash "^4.3.0"
-    mute-stream "0.0.7"
-    run-async "^2.2.0"
-    rx "^4.1.0"
-    string-width "^2.0.0"
-    strip-ansi "^3.0.0"
-    through "^2.3.6"
-
 inquirer@3.2.1:
   version "3.2.1"
   resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.2.1.tgz#06ceb0f540f45ca548c17d6840959878265fa175"
@@ -3430,6 +3704,12 @@ inquirer@^3.0.6:
     strip-ansi "^4.0.0"
     through "^2.3.6"
 
+internal-ip@1.2.0:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-1.2.0.tgz#ae9fbf93b984878785d50a8de1b356956058cf5c"
+  dependencies:
+    meow "^3.3.0"
+
 interpret@^1.0.0:
   version "1.0.3"
   resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.0.3.tgz#cbc35c62eeee73f19ab7b10a801511401afc0f90"
@@ -3442,30 +3722,18 @@ intl-messageformat-parser@1.2.0:
   version "1.2.0"
   resolved "https://registry.yarnpkg.com/intl-messageformat-parser/-/intl-messageformat-parser-1.2.0.tgz#5906b7f953ab7470e0dc8549097b648b991892ff"
 
-intl-messageformat@1.3.0, intl-messageformat@^1.3.0:
-  version "1.3.0"
-  resolved "https://registry.yarnpkg.com/intl-messageformat/-/intl-messageformat-1.3.0.tgz#f7d926aded7a3ab19b2dc601efd54e99a4bd4eae"
-  dependencies:
-    intl-messageformat-parser "1.2.0"
-
-intl-messageformat@^2.0.0:
+intl-messageformat@^2.0.0, intl-messageformat@^2.1.0:
   version "2.1.0"
   resolved "https://registry.yarnpkg.com/intl-messageformat/-/intl-messageformat-2.1.0.tgz#1c51da76f02a3f7b360654cdc51bbc4d3fa6c72c"
   dependencies:
     intl-messageformat-parser "1.2.0"
 
-intl-relativeformat@2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/intl-relativeformat/-/intl-relativeformat-2.0.0.tgz#d6ba9dc6c625819bc0abdb1d4e238138b7488f26"
+intl-relativeformat@2.1.0, intl-relativeformat@^2.0.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/intl-relativeformat/-/intl-relativeformat-2.1.0.tgz#010f1105802251f40ac47d0e3e1a201348a255df"
   dependencies:
     intl-messageformat "^2.0.0"
 
-intl-relativeformat@^1.3.0:
-  version "1.3.0"
-  resolved "https://registry.yarnpkg.com/intl-relativeformat/-/intl-relativeformat-1.3.0.tgz#893dc7076fccd380cf091a2300c380fa57ace45b"
-  dependencies:
-    intl-messageformat "1.3.0"
-
 invariant@^2.0.0, invariant@^2.1.1, invariant@^2.2.0, invariant@^2.2.1, invariant@^2.2.2:
   version "2.2.2"
   resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360"
@@ -3476,6 +3744,10 @@ invert-kv@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6"
 
+ip@^1.1.0, ip@^1.1.5:
+  version "1.1.5"
+  resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a"
+
 ipaddr.js@1.4.0:
   version "1.4.0"
   resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.4.0.tgz#296aca878a821816e5b85d0a285a99bcff4582f0"
@@ -3802,216 +4074,230 @@ istanbul-reports@^1.1.1:
   dependencies:
     handlebars "^4.0.3"
 
-jest-changed-files@^20.0.3:
-  version "20.0.3"
-  resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-20.0.3.tgz#9394d5cc65c438406149bef1bf4d52b68e03e3f8"
+jest-changed-files@^21.2.0:
+  version "21.2.0"
+  resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-21.2.0.tgz#5dbeecad42f5d88b482334902ce1cba6d9798d29"
+  dependencies:
+    throat "^4.0.0"
 
-jest-cli@^20.0.4:
-  version "20.0.4"
-  resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-20.0.4.tgz#e532b19d88ae5bc6c417e8b0593a6fe954b1dc93"
+jest-cli@^21.2.1:
+  version "21.2.1"
+  resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-21.2.1.tgz#9c528b6629d651911138d228bdb033c157ec8c00"
   dependencies:
-    ansi-escapes "^1.4.0"
-    callsites "^2.0.0"
-    chalk "^1.1.3"
+    ansi-escapes "^3.0.0"
+    chalk "^2.0.1"
+    glob "^7.1.2"
     graceful-fs "^4.1.11"
     is-ci "^1.0.10"
     istanbul-api "^1.1.1"
     istanbul-lib-coverage "^1.0.1"
     istanbul-lib-instrument "^1.4.2"
     istanbul-lib-source-maps "^1.1.0"
-    jest-changed-files "^20.0.3"
-    jest-config "^20.0.4"
-    jest-docblock "^20.0.3"
-    jest-environment-jsdom "^20.0.3"
-    jest-haste-map "^20.0.4"
-    jest-jasmine2 "^20.0.4"
-    jest-message-util "^20.0.3"
-    jest-regex-util "^20.0.3"
-    jest-resolve-dependencies "^20.0.3"
-    jest-runtime "^20.0.4"
-    jest-snapshot "^20.0.3"
-    jest-util "^20.0.3"
+    jest-changed-files "^21.2.0"
+    jest-config "^21.2.1"
+    jest-environment-jsdom "^21.2.1"
+    jest-haste-map "^21.2.0"
+    jest-message-util "^21.2.1"
+    jest-regex-util "^21.2.0"
+    jest-resolve-dependencies "^21.2.0"
+    jest-runner "^21.2.1"
+    jest-runtime "^21.2.1"
+    jest-snapshot "^21.2.1"
+    jest-util "^21.2.1"
     micromatch "^2.3.11"
     node-notifier "^5.0.2"
-    pify "^2.3.0"
+    pify "^3.0.0"
     slash "^1.0.0"
-    string-length "^1.0.1"
-    throat "^3.0.0"
+    string-length "^2.0.0"
+    strip-ansi "^4.0.0"
     which "^1.2.12"
     worker-farm "^1.3.1"
-    yargs "^7.0.2"
+    yargs "^9.0.0"
 
-jest-config@^20.0.0, jest-config@^20.0.4:
-  version "20.0.4"
-  resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-20.0.4.tgz#e37930ab2217c913605eff13e7bd763ec48faeea"
+jest-config@^21.2.1:
+  version "21.2.1"
+  resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-21.2.1.tgz#c7586c79ead0bcc1f38c401e55f964f13bf2a480"
   dependencies:
-    chalk "^1.1.3"
+    chalk "^2.0.1"
     glob "^7.1.1"
-    jest-environment-jsdom "^20.0.3"
-    jest-environment-node "^20.0.3"
-    jest-jasmine2 "^20.0.4"
-    jest-matcher-utils "^20.0.3"
-    jest-regex-util "^20.0.3"
-    jest-resolve "^20.0.4"
-    jest-validate "^20.0.3"
-    pretty-format "^20.0.3"
-
-jest-diff@^20.0.3:
-  version "20.0.3"
-  resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-20.0.3.tgz#81f288fd9e675f0fb23c75f1c2b19445fe586617"
-  dependencies:
-    chalk "^1.1.3"
+    jest-environment-jsdom "^21.2.1"
+    jest-environment-node "^21.2.1"
+    jest-get-type "^21.2.0"
+    jest-jasmine2 "^21.2.1"
+    jest-regex-util "^21.2.0"
+    jest-resolve "^21.2.0"
+    jest-util "^21.2.1"
+    jest-validate "^21.2.1"
+    pretty-format "^21.2.1"
+
+jest-diff@^21.2.1:
+  version "21.2.1"
+  resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-21.2.1.tgz#46cccb6cab2d02ce98bc314011764bb95b065b4f"
+  dependencies:
+    chalk "^2.0.1"
     diff "^3.2.0"
-    jest-matcher-utils "^20.0.3"
-    pretty-format "^20.0.3"
+    jest-get-type "^21.2.0"
+    pretty-format "^21.2.1"
 
-jest-docblock@^20.0.3:
-  version "20.0.3"
-  resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-20.0.3.tgz#17bea984342cc33d83c50fbe1545ea0efaa44712"
+jest-docblock@^21.2.0:
+  version "21.2.0"
+  resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-21.2.0.tgz#51529c3b30d5fd159da60c27ceedc195faf8d414"
 
-jest-environment-jsdom@^20.0.3:
-  version "20.0.3"
-  resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-20.0.3.tgz#048a8ac12ee225f7190417713834bb999787de99"
+jest-environment-jsdom@^21.2.1:
+  version "21.2.1"
+  resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-21.2.1.tgz#38d9980c8259b2a608ec232deee6289a60d9d5b4"
   dependencies:
-    jest-mock "^20.0.3"
-    jest-util "^20.0.3"
+    jest-mock "^21.2.0"
+    jest-util "^21.2.1"
     jsdom "^9.12.0"
 
-jest-environment-node@^20.0.3:
-  version "20.0.3"
-  resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-20.0.3.tgz#d488bc4612af2c246e986e8ae7671a099163d403"
+jest-environment-node@^21.2.1:
+  version "21.2.1"
+  resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-21.2.1.tgz#98c67df5663c7fbe20f6e792ac2272c740d3b8c8"
   dependencies:
-    jest-mock "^20.0.3"
-    jest-util "^20.0.3"
+    jest-mock "^21.2.0"
+    jest-util "^21.2.1"
+
+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-haste-map@^20.0.4:
-  version "20.0.5"
-  resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-20.0.5.tgz#abad74efb1a005974a7b6517e11010709cab9112"
+jest-haste-map@^21.2.0:
+  version "21.2.0"
+  resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-21.2.0.tgz#1363f0a8bb4338f24f001806571eff7a4b2ff3d8"
   dependencies:
     fb-watchman "^2.0.0"
     graceful-fs "^4.1.11"
-    jest-docblock "^20.0.3"
+    jest-docblock "^21.2.0"
     micromatch "^2.3.11"
-    sane "~1.6.0"
+    sane "^2.0.0"
     worker-farm "^1.3.1"
 
-jest-jasmine2@^20.0.4:
-  version "20.0.4"
-  resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-20.0.4.tgz#fcc5b1411780d911d042902ef1859e852e60d5e1"
+jest-jasmine2@^21.2.1:
+  version "21.2.1"
+  resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-21.2.1.tgz#9cc6fc108accfa97efebce10c4308548a4ea7592"
   dependencies:
-    chalk "^1.1.3"
+    chalk "^2.0.1"
+    expect "^21.2.1"
     graceful-fs "^4.1.11"
-    jest-diff "^20.0.3"
-    jest-matcher-utils "^20.0.3"
-    jest-matchers "^20.0.3"
-    jest-message-util "^20.0.3"
-    jest-snapshot "^20.0.3"
-    once "^1.4.0"
-    p-map "^1.1.1"
+    jest-diff "^21.2.1"
+    jest-matcher-utils "^21.2.1"
+    jest-message-util "^21.2.1"
+    jest-snapshot "^21.2.1"
+    p-cancelable "^0.3.0"
 
-jest-matcher-utils@^20.0.3:
-  version "20.0.3"
-  resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-20.0.3.tgz#b3a6b8e37ca577803b0832a98b164f44b7815612"
+jest-matcher-utils@^21.2.1:
+  version "21.2.1"
+  resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-21.2.1.tgz#72c826eaba41a093ac2b4565f865eb8475de0f64"
   dependencies:
-    chalk "^1.1.3"
-    pretty-format "^20.0.3"
+    chalk "^2.0.1"
+    jest-get-type "^21.2.0"
+    pretty-format "^21.2.1"
 
-jest-matchers@^20.0.3:
-  version "20.0.3"
-  resolved "https://registry.yarnpkg.com/jest-matchers/-/jest-matchers-20.0.3.tgz#ca69db1c32db5a6f707fa5e0401abb55700dfd60"
+jest-message-util@^21.2.1:
+  version "21.2.1"
+  resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-21.2.1.tgz#bfe5d4692c84c827d1dcf41823795558f0a1acbe"
   dependencies:
-    jest-diff "^20.0.3"
-    jest-matcher-utils "^20.0.3"
-    jest-message-util "^20.0.3"
-    jest-regex-util "^20.0.3"
-
-jest-message-util@^20.0.3:
-  version "20.0.3"
-  resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-20.0.3.tgz#6aec2844306fcb0e6e74d5796c1006d96fdd831c"
-  dependencies:
-    chalk "^1.1.3"
+    chalk "^2.0.1"
     micromatch "^2.3.11"
     slash "^1.0.0"
 
-jest-mock@^20.0.3:
-  version "20.0.3"
-  resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-20.0.3.tgz#8bc070e90414aa155c11a8d64c869a0d5c71da59"
+jest-mock@^21.2.0:
+  version "21.2.0"
+  resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-21.2.0.tgz#7eb0770e7317968165f61ea2a7281131534b3c0f"
 
-jest-regex-util@^20.0.3:
-  version "20.0.3"
-  resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-20.0.3.tgz#85bbab5d133e44625b19faf8c6aa5122d085d762"
+jest-regex-util@^21.2.0:
+  version "21.2.0"
+  resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-21.2.0.tgz#1b1e33e63143babc3e0f2e6c9b5ba1eb34b2d530"
 
-jest-resolve-dependencies@^20.0.3:
-  version "20.0.3"
-  resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-20.0.3.tgz#6e14a7b717af0f2cb3667c549de40af017b1723a"
+jest-resolve-dependencies@^21.2.0:
+  version "21.2.0"
+  resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-21.2.0.tgz#9e231e371e1a736a1ad4e4b9a843bc72bfe03d09"
   dependencies:
-    jest-regex-util "^20.0.3"
+    jest-regex-util "^21.2.0"
 
-jest-resolve@^20.0.4:
-  version "20.0.4"
-  resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-20.0.4.tgz#9448b3e8b6bafc15479444c6499045b7ffe597a5"
+jest-resolve@^21.2.0:
+  version "21.2.0"
+  resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-21.2.0.tgz#068913ad2ba6a20218e5fd32471f3874005de3a6"
   dependencies:
     browser-resolve "^1.11.2"
+    chalk "^2.0.1"
     is-builtin-module "^1.0.0"
-    resolve "^1.3.2"
 
-jest-runtime@^20.0.4:
-  version "20.0.4"
-  resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-20.0.4.tgz#a2c802219c4203f754df1404e490186169d124d8"
+jest-runner@^21.2.1:
+  version "21.2.1"
+  resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-21.2.1.tgz#194732e3e518bfb3d7cbfc0fd5871246c7e1a467"
+  dependencies:
+    jest-config "^21.2.1"
+    jest-docblock "^21.2.0"
+    jest-haste-map "^21.2.0"
+    jest-jasmine2 "^21.2.1"
+    jest-message-util "^21.2.1"
+    jest-runtime "^21.2.1"
+    jest-util "^21.2.1"
+    pify "^3.0.0"
+    throat "^4.0.0"
+    worker-farm "^1.3.1"
+
+jest-runtime@^21.2.1:
+  version "21.2.1"
+  resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-21.2.1.tgz#99dce15309c670442eee2ebe1ff53a3cbdbbb73e"
   dependencies:
     babel-core "^6.0.0"
-    babel-jest "^20.0.3"
+    babel-jest "^21.2.0"
     babel-plugin-istanbul "^4.0.0"
-    chalk "^1.1.3"
+    chalk "^2.0.1"
     convert-source-map "^1.4.0"
     graceful-fs "^4.1.11"
-    jest-config "^20.0.4"
-    jest-haste-map "^20.0.4"
-    jest-regex-util "^20.0.3"
-    jest-resolve "^20.0.4"
-    jest-util "^20.0.3"
+    jest-config "^21.2.1"
+    jest-haste-map "^21.2.0"
+    jest-regex-util "^21.2.0"
+    jest-resolve "^21.2.0"
+    jest-util "^21.2.1"
     json-stable-stringify "^1.0.1"
     micromatch "^2.3.11"
+    slash "^1.0.0"
     strip-bom "3.0.0"
-    yargs "^7.0.2"
+    write-file-atomic "^2.1.0"
+    yargs "^9.0.0"
 
-jest-snapshot@^20.0.3:
-  version "20.0.3"
-  resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-20.0.3.tgz#5b847e1adb1a4d90852a7f9f125086e187c76566"
+jest-snapshot@^21.2.1:
+  version "21.2.1"
+  resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-21.2.1.tgz#29e49f16202416e47343e757e5eff948c07fd7b0"
   dependencies:
-    chalk "^1.1.3"
-    jest-diff "^20.0.3"
-    jest-matcher-utils "^20.0.3"
-    jest-util "^20.0.3"
+    chalk "^2.0.1"
+    jest-diff "^21.2.1"
+    jest-matcher-utils "^21.2.1"
+    mkdirp "^0.5.1"
     natural-compare "^1.4.0"
-    pretty-format "^20.0.3"
+    pretty-format "^21.2.1"
 
-jest-util@^20.0.0, jest-util@^20.0.3:
-  version "20.0.3"
-  resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-20.0.3.tgz#0c07f7d80d82f4e5a67c6f8b9c3fe7f65cfd32ad"
+jest-util@^21.2.1:
+  version "21.2.1"
+  resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-21.2.1.tgz#a274b2f726b0897494d694a6c3d6a61ab819bb78"
   dependencies:
-    chalk "^1.1.3"
+    callsites "^2.0.0"
+    chalk "^2.0.1"
     graceful-fs "^4.1.11"
-    jest-message-util "^20.0.3"
-    jest-mock "^20.0.3"
-    jest-validate "^20.0.3"
-    leven "^2.1.0"
+    jest-message-util "^21.2.1"
+    jest-mock "^21.2.0"
+    jest-validate "^21.2.1"
     mkdirp "^0.5.1"
 
-jest-validate@^20.0.3:
-  version "20.0.3"
-  resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-20.0.3.tgz#d0cfd1de4f579f298484925c280f8f1d94ec3cab"
+jest-validate@^21.2.1:
+  version "21.2.1"
+  resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-21.2.1.tgz#cc0cbca653cd54937ba4f2a111796774530dd3c7"
   dependencies:
-    chalk "^1.1.3"
-    jest-matcher-utils "^20.0.3"
+    chalk "^2.0.1"
+    jest-get-type "^21.2.0"
     leven "^2.1.0"
-    pretty-format "^20.0.3"
+    pretty-format "^21.2.1"
 
-jest@20.0.4:
-  version "20.0.4"
-  resolved "https://registry.yarnpkg.com/jest/-/jest-20.0.4.tgz#3dd260c2989d6dad678b1e9cc4d91944f6d602ac"
+jest@21.2.1:
+  version "21.2.1"
+  resolved "https://registry.yarnpkg.com/jest/-/jest-21.2.1.tgz#c964e0b47383768a1438e3ccf3c3d470327604e1"
   dependencies:
-    jest-cli "^20.0.4"
+    jest-cli "^21.2.1"
 
 jquery@2.2.0:
   version "2.2.0"
@@ -4021,7 +4307,7 @@ js-base64@^2.1.9:
   version "2.1.9"
   resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.1.9.tgz#f0e80ae039a4bd654b5f281fc93f04a914a7fcce"
 
-js-tokens@^3.0.0:
+js-tokens@^3.0.0, js-tokens@^3.0.2:
   version "3.0.2"
   resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b"
 
@@ -4342,7 +4628,7 @@ lodash.merge@^4.4.0:
   version "4.6.0"
   resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.0.tgz#69884ba144ac33fe699737a6086deffadd0f89c5"
 
-lodash.omitby@^4.5.0:
+lodash.omitby@^4.6.0:
   version "4.6.0"
   resolved "https://registry.yarnpkg.com/lodash.omitby/-/lodash.omitby-4.6.0.tgz#5c15ff4754ad555016b53c041311e8f079204791"
 
@@ -4378,6 +4664,10 @@ lodash@4.17.4, lodash@^4.14.0, lodash@^4.17.2, lodash@^4.17.3, lodash@^4.17.4, l
   version "4.17.4"
   resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae"
 
+loglevel@^1.4.1:
+  version "1.5.1"
+  resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.5.1.tgz#189078c94ab9053ee215a0acdbf24244ea0f6502"
+
 longest@^1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097"
@@ -4388,6 +4678,13 @@ loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.3
   dependencies:
     js-tokens "^3.0.0"
 
+loud-rejection@^1.0.0:
+  version "1.6.0"
+  resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f"
+  dependencies:
+    currently-unhandled "^0.4.1"
+    signal-exit "^3.0.0"
+
 lower-case@^1.1.1:
   version "1.1.4"
   resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.4.tgz#9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac"
@@ -4403,6 +4700,12 @@ macaddress@^0.2.8:
   version "0.2.8"
   resolved "https://registry.yarnpkg.com/macaddress/-/macaddress-0.2.8.tgz#5904dc537c39ec6dbefeae902327135fa8511f12"
 
+make-dir@^1.0.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.1.0.tgz#19b4369fe48c116f53c2af95ad102c0e39e85d51"
+  dependencies:
+    pify "^3.0.0"
+
 makeerror@1.0.x:
   version "1.0.11"
   resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c"
@@ -4413,6 +4716,10 @@ map-cache@^0.2.2:
   version "0.2.2"
   resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf"
 
+map-obj@^1.0.0, map-obj@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d"
+
 map-visit@^0.1.5:
   version "0.1.5"
   resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-0.1.5.tgz#dbe43927ce5525b80dfc1573a44d68c51f26816b"
@@ -4441,6 +4748,21 @@ memory-fs@^0.4.0, memory-fs@~0.4.1:
     errno "^0.1.3"
     readable-stream "^2.0.1"
 
+meow@^3.3.0:
+  version "3.7.0"
+  resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb"
+  dependencies:
+    camelcase-keys "^2.0.0"
+    decamelize "^1.1.2"
+    loud-rejection "^1.0.0"
+    map-obj "^1.0.1"
+    minimist "^1.1.3"
+    normalize-package-data "^2.3.4"
+    object-assign "^4.0.1"
+    read-pkg-up "^1.0.1"
+    redent "^1.0.0"
+    trim-newlines "^1.0.0"
+
 merge-descriptors@1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61"
@@ -4542,7 +4864,7 @@ minimist@0.0.8:
   version "0.0.8"
   resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
 
-minimist@^1.1.1, 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"
 
@@ -4557,7 +4879,7 @@ mixin-deep@^1.1.3:
     for-in "^1.0.2"
     is-extendable "^0.1.1"
 
-mkdirp@0.5.1, mkdirp@0.5.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1:
+mkdirp@0.5.1, mkdirp@0.5.x, "mkdirp@>=0.5 0", mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1:
   version "0.5.1"
   resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
   dependencies:
@@ -4567,6 +4889,17 @@ ms@2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
 
+multicast-dns-service-types@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901"
+
+multicast-dns@^6.0.1:
+  version "6.1.1"
+  resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-6.1.1.tgz#6e7de86a570872ab17058adea7160bbeca814dde"
+  dependencies:
+    dns-packet "^1.0.1"
+    thunky "^0.1.0"
+
 mute-stream@0.0.7:
   version "0.0.7"
   resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab"
@@ -4619,6 +4952,10 @@ node-fetch@^1.0.1:
     encoding "^0.1.11"
     is-stream "^1.0.1"
 
+node-forge@0.6.33:
+  version "0.6.33"
+  resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.6.33.tgz#463811879f573d45155ad6a9f43dc296e8e85ebc"
+
 node-int64@^0.4.0:
   version "0.4.0"
   resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b"
@@ -4681,7 +5018,7 @@ nopt@^4.0.1:
     abbrev "1"
     osenv "^0.1.4"
 
-normalize-package-data@^2.3.2:
+normalize-package-data@^2.3.2, normalize-package-data@^2.3.4:
   version "2.4.0"
   resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f"
   dependencies:
@@ -4792,7 +5129,7 @@ object.assign@^4.0.4:
     function-bind "^1.1.0"
     object-keys "^1.0.10"
 
-object.entries@^1.0.3, object.entries@^1.0.4:
+object.entries@^1.0.4:
   version "1.0.4"
   resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.0.4.tgz#1bf9a4dd2288f5b33f3a993d257661f05d161a5f"
   dependencies:
@@ -4853,20 +5190,7 @@ opener@^1.4.3:
   version "1.4.3"
   resolved "https://registry.yarnpkg.com/opener/-/opener-1.4.3.tgz#5c6da2c5d7e5831e8ffa3964950f8d6674ac90b8"
 
-opn@4.0.2:
-  version "4.0.2"
-  resolved "https://registry.yarnpkg.com/opn/-/opn-4.0.2.tgz#7abc22e644dff63b0a96d5ab7f2790c0f01abc95"
-  dependencies:
-    object-assign "^4.0.1"
-    pinkie-promise "^2.0.0"
-
-opn@5.0.0:
-  version "5.0.0"
-  resolved "https://registry.yarnpkg.com/opn/-/opn-5.0.0.tgz#f8870d7cd969b218030cb6ce5a1285e795931df3"
-  dependencies:
-    is-wsl "^1.1.0"
-
-opn@5.1.0:
+opn@5.1.0, opn@^5.1.0:
   version "5.1.0"
   resolved "https://registry.yarnpkg.com/opn/-/opn-5.1.0.tgz#72ce2306a17dbea58ff1041853352b4a8fc77519"
   dependencies:
@@ -4935,6 +5259,10 @@ osenv@^0.1.4:
     os-homedir "^1.0.0"
     os-tmpdir "^1.0.0"
 
+p-cancelable@^0.3.0:
+  version "0.3.0"
+  resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-0.3.0.tgz#b9e123800bcebb7ac13a479be195b507b98d30fa"
+
 p-finally@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae"
@@ -4950,8 +5278,8 @@ p-locate@^2.0.0:
     p-limit "^1.1.0"
 
 p-map@^1.1.1:
-  version "1.1.1"
-  resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.1.1.tgz#05f5e4ae97a068371bc2a5cc86bfbdbc19c4ae7a"
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b"
 
 pako@~0.2.0:
   version "0.2.9"
@@ -5018,7 +5346,7 @@ path-exists@^3.0.0:
   version "3.0.0"
   resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"
 
-path-is-absolute@^1.0.0:
+path-is-absolute@^1.0.0, path-is-absolute@^1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
 
@@ -5066,10 +5394,14 @@ performance-now@^0.2.0:
   version "0.2.0"
   resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5"
 
-pify@^2.0.0, pify@^2.3.0:
+pify@^2.0.0:
   version "2.3.0"
   resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
 
+pify@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176"
+
 pinkie-promise@^2.0.0:
   version "2.0.1"
   resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa"
@@ -5413,9 +5745,9 @@ preserve@^0.2.0:
   version "0.2.0"
   resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b"
 
-prettier@1.6.1:
-  version "1.6.1"
-  resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.6.1.tgz#850f411a3116226193e32ea5acfc21c0f9a76d7d"
+prettier@1.7.4:
+  version "1.7.4"
+  resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.7.4.tgz#5e8624ae9363c80f95ec644584ecdf55d74f93fa"
 
 pretty-error@^2.0.2:
   version "2.1.1"
@@ -5424,17 +5756,21 @@ pretty-error@^2.0.2:
     renderkid "^2.0.1"
     utila "~0.4"
 
-pretty-format@^20.0.3:
-  version "20.0.3"
-  resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-20.0.3.tgz#020e350a560a1fe1a98dc3beb6ccffb386de8b14"
+pretty-format@^21.2.1:
+  version "21.2.1"
+  resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-21.2.1.tgz#ae5407f3cf21066cd011aa1ba5fce7b6a2eddb36"
   dependencies:
-    ansi-regex "^2.1.1"
-    ansi-styles "^3.0.0"
+    ansi-regex "^3.0.0"
+    ansi-styles "^3.2.0"
 
 private@^0.1.6:
   version "0.1.7"
   resolved "https://registry.yarnpkg.com/private/-/private-0.1.7.tgz#68ce5e8a1ef0a23bb570cc28537b5332aba63ef1"
 
+private@^0.1.7:
+  version "0.1.8"
+  resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff"
+
 process-nextick-args@~1.0.6:
   version "1.0.7"
   resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3"
@@ -5453,7 +5789,15 @@ promise@^7.1.1:
   dependencies:
     asap "~2.0.3"
 
-prop-types@15.5.10, prop-types@15.x, 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:
+  version "15.6.0"
+  resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.6.0.tgz#ceaf083022fc46b4a35f69e13ef75aed0d639856"
+  dependencies:
+    fbjs "^0.8.16"
+    loose-envify "^1.3.1"
+    object-assign "^4.1.1"
+
+prop-types@15.x, prop-types@^15.5.10, prop-types@^15.5.4, prop-types@^15.5.6, prop-types@^15.5.8:
   version "15.5.10"
   resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.5.10.tgz#2797dfc3126182e3a95e3dfbb2e893ddd7456154"
   dependencies:
@@ -5561,11 +5905,11 @@ rc-animate@2.x:
     css-animation "^1.3.2"
     prop-types "15.x"
 
-rc-tooltip@3.4.7:
-  version "3.4.7"
-  resolved "https://registry.yarnpkg.com/rc-tooltip/-/rc-tooltip-3.4.7.tgz#ec6cc39a962de96a9147de08a78fb38f93517ff3"
+rc-tooltip@3.5.0:
+  version "3.5.0"
+  resolved "https://registry.yarnpkg.com/rc-tooltip/-/rc-tooltip-3.5.0.tgz#f73e835ae174ecfa81cddda1b1fa318361f57dc1"
   dependencies:
-    babel-runtime "^6.23.0"
+    babel-runtime "6.x"
     prop-types "^15.5.8"
     rc-trigger "1.x"
 
@@ -5597,28 +5941,6 @@ rc@^1.1.7:
     minimist "^1.2.0"
     strip-json-comments "~2.0.1"
 
-react-dev-utils@3.0.0:
-  version "3.0.0"
-  resolved "https://registry.yarnpkg.com/react-dev-utils/-/react-dev-utils-3.0.0.tgz#3677f37718ba0cae892ba9c01fe54d1622e6ef7c"
-  dependencies:
-    "@timer/detect-port" "1.1.3"
-    address "1.0.1"
-    anser "1.3.0"
-    babel-code-frame "6.22.0"
-    chalk "1.1.3"
-    cross-spawn "4.0.2"
-    escape-string-regexp "1.0.5"
-    filesize "3.3.0"
-    gzip-size "3.0.0"
-    html-entities "1.2.1"
-    inquirer "3.0.6"
-    opn "5.0.0"
-    recursive-readdir "2.2.1"
-    shell-quote "1.6.1"
-    sockjs-client "1.1.4"
-    strip-ansi "3.0.1"
-    text-table "0.2.0"
-
 react-dev-utils@^3.0.0:
   version "3.1.1"
   resolved "https://registry.yarnpkg.com/react-dev-utils/-/react-dev-utils-3.1.1.tgz#09ae7209a81384248db56547e718e65bd3b20eb5"
@@ -5643,10 +5965,6 @@ react-dev-utils@^3.0.0:
     strip-ansi "3.0.1"
     text-table "0.2.0"
 
-react-dom-factories@^1.0.0:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/react-dom-factories/-/react-dom-factories-1.0.1.tgz#c50692ac5ff1adb39d86dfe6dbe3485dacf58455"
-
 react-dom@15.6.2:
   version "15.6.2"
   resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-15.6.2.tgz#41cfadf693b757faf2708443a1d1fd5a02bef730"
@@ -5656,11 +5974,12 @@ react-dom@15.6.2:
     object-assign "^4.1.0"
     prop-types "^15.5.10"
 
-react-draggable@2.2.6:
-  version "2.2.6"
-  resolved "https://registry.yarnpkg.com/react-draggable/-/react-draggable-2.2.6.tgz#3a806e10f2da6babfea4136be6510e89b0d76901"
+react-draggable@3.0.3:
+  version "3.0.3"
+  resolved "https://registry.yarnpkg.com/react-draggable/-/react-draggable-3.0.3.tgz#a6f9b3a7171981b76dadecf238316925cb9eacf4"
   dependencies:
     classnames "^2.2.5"
+    prop-types "^15.5.10"
 
 react-error-overlay@1.0.7:
   version "1.0.7"
@@ -5673,45 +5992,43 @@ react-error-overlay@1.0.7:
     settle-promise "1.0.0"
     source-map "0.5.6"
 
-react-helmet@5.1.3:
-  version "5.1.3"
-  resolved "https://registry.yarnpkg.com/react-helmet/-/react-helmet-5.1.3.tgz#cd40626593a29eecf684b6d38d711f44c48188af"
+react-helmet@5.2.0:
+  version "5.2.0"
+  resolved "https://registry.yarnpkg.com/react-helmet/-/react-helmet-5.2.0.tgz#a81811df21313a6d55c5f058c4aeba5d6f3d97a7"
   dependencies:
     deep-equal "^1.0.1"
     object-assign "^4.1.1"
     prop-types "^15.5.4"
     react-side-effect "^1.1.0"
 
-react-input-autosize@^1.1.3:
-  version "1.1.4"
-  resolved "https://registry.yarnpkg.com/react-input-autosize/-/react-input-autosize-1.1.4.tgz#cbc45072d4084ddc57806db8e3b34e644b8366ac"
+react-input-autosize@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/react-input-autosize/-/react-input-autosize-2.0.1.tgz#e92190497b4026c2780ad0f2fd703c835ba03e33"
   dependencies:
     create-react-class "^15.5.2"
     prop-types "^15.5.8"
 
-react-intl@2.3.0:
-  version "2.3.0"
-  resolved "https://registry.yarnpkg.com/react-intl/-/react-intl-2.3.0.tgz#e1df6af5667fdf01cbe4aab20e137251e2ae5142"
+react-intl@2.4.0:
+  version "2.4.0"
+  resolved "https://registry.yarnpkg.com/react-intl/-/react-intl-2.4.0.tgz#66c14dc9df9a73b2fbbfbd6021726e80a613eb15"
   dependencies:
     intl-format-cache "^2.0.5"
-    intl-messageformat "^1.3.0"
-    intl-relativeformat "^1.3.0"
+    intl-messageformat "^2.1.0"
+    intl-relativeformat "^2.0.0"
     invariant "^2.1.1"
 
-react-modal@2.2.2:
-  version "2.2.2"
-  resolved "https://registry.yarnpkg.com/react-modal/-/react-modal-2.2.2.tgz#4bbf98bc506e61c446c9f57329c7a488ea7d504b"
+react-modal@3.0.4:
+  version "3.0.4"
+  resolved "https://registry.yarnpkg.com/react-modal/-/react-modal-3.0.4.tgz#61f3c9a701b27d2015fe5ac0c419e3c977e4092a"
   dependencies:
-    exenv "1.2.0"
+    exenv "^1.2.0"
     prop-types "^15.5.10"
-    react-dom-factories "^1.0.0"
 
-react-redux@5.0.5:
-  version "5.0.5"
-  resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-5.0.5.tgz#f8e8c7b239422576e52d6b7db06439469be9846a"
+react-redux@5.0.6:
+  version "5.0.6"
+  resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-5.0.6.tgz#23ed3a4f986359d68b5212eaaa681e60d6574946"
   dependencies:
-    create-react-class "^15.5.3"
-    hoist-non-react-statics "^1.0.3"
+    hoist-non-react-statics "^2.2.1"
     invariant "^2.0.0"
     lodash "^4.2.0"
     lodash-es "^4.2.0"
@@ -5730,14 +6047,13 @@ react-router@3.0.5:
     prop-types "^15.5.6"
     warning "^3.0.0"
 
-react-select@1.0.0-rc.5:
-  version "1.0.0-rc.5"
-  resolved "https://registry.yarnpkg.com/react-select/-/react-select-1.0.0-rc.5.tgz#9d316f252b1adc372ddb5cdf1f119c6b7cfdb5d6"
+react-select@1.0.0-rc.10:
+  version "1.0.0-rc.10"
+  resolved "https://registry.yarnpkg.com/react-select/-/react-select-1.0.0-rc.10.tgz#f137346250f9255c979fbfa21860899928772350"
   dependencies:
     classnames "^2.2.4"
-    create-react-class "^15.5.2"
     prop-types "^15.5.8"
-    react-input-autosize "^1.1.3"
+    react-input-autosize "^2.0.1"
 
 react-side-effect@^1.1.0:
   version "1.1.3"
@@ -5753,11 +6069,11 @@ react-test-renderer@15.6.2:
     fbjs "^0.8.9"
     object-assign "^4.1.0"
 
-react-virtualized@9.9.0:
-  version "9.9.0"
-  resolved "https://registry.yarnpkg.com/react-virtualized/-/react-virtualized-9.9.0.tgz#799a6f23819eeb82860d59b82fad33d1d420325e"
+react-virtualized@9.12.0:
+  version "9.12.0"
+  resolved "https://registry.yarnpkg.com/react-virtualized/-/react-virtualized-9.12.0.tgz#1b4d3e5ab197ed1d832df8e6688b1b18f725b6c5"
   dependencies:
-    babel-runtime "^6.11.6"
+    babel-runtime "^6.23.0"
     classnames "^2.2.3"
     dom-helpers "^2.4.0 || ^3.0.0"
     loose-envify "^1.3.0"
@@ -5839,6 +6155,13 @@ recursive-readdir@2.2.1:
   dependencies:
     minimatch "3.0.3"
 
+redent@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde"
+  dependencies:
+    indent-string "^2.1.0"
+    strip-indent "^1.0.1"
+
 reduce-css-calc@^1.2.6:
   version "1.3.0"
   resolved "https://registry.yarnpkg.com/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz#747c914e049614a4c9cfbba629871ad1d2927716"
@@ -5853,23 +6176,17 @@ reduce-function-call@^1.0.1:
   dependencies:
     balanced-match "^0.4.2"
 
-redux-logger@2.2.1:
-  version "2.2.1"
-  resolved "https://registry.yarnpkg.com/redux-logger/-/redux-logger-2.2.1.tgz#f57dd1b3f48c0f48d4ad58ef8c026f753d6cb06c"
-
-redux-thunk@1.0.2:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-1.0.2.tgz#5911e5a25dab2649d860b0f1eeac261c9d130ece"
-
-redux@3.3.1:
-  version "3.3.1"
-  resolved "https://registry.yarnpkg.com/redux/-/redux-3.3.1.tgz#716df8004786deaf01c93ae396c84fc1041e424b"
+redux-logger@3.0.6:
+  version "3.0.6"
+  resolved "https://registry.yarnpkg.com/redux-logger/-/redux-logger-3.0.6.tgz#f7555966f3098f3c88604c449cf0baf5778274bf"
   dependencies:
-    lodash "^4.2.1"
-    lodash-es "^4.2.1"
-    loose-envify "^1.1.0"
+    deep-diff "^0.3.5"
+
+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.6.0:
+redux@3.7.2, redux@^3.6.0:
   version "3.7.2"
   resolved "https://registry.yarnpkg.com/redux/-/redux-3.7.2.tgz#06b73123215901d25d065be342eb026bc1c8537b"
   dependencies:
@@ -5882,10 +6199,14 @@ regenerate@^1.2.1:
   version "1.3.2"
   resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.2.tgz#d1941c67bad437e1be76433add5b385f95b19260"
 
-regenerator-runtime@^0.10.0:
+regenerator-runtime@^0.10.0, regenerator-runtime@^0.10.5:
   version "0.10.5"
   resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz#336c3efc1220adcedda2c9fab67b5a7955a33658"
 
+regenerator-runtime@^0.11.0:
+  version "0.11.0"
+  resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz#7e54fe5b5ccd5d6624ea6255c3473be090b802e1"
+
 regenerator-transform@0.9.11:
   version "0.9.11"
   resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.9.11.tgz#3a7d067520cb7b7176769eb5ff868691befe1283"
@@ -6019,6 +6340,12 @@ requires-port@1.0.x, requires-port@1.x.x:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff"
 
+resolve-cwd@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a"
+  dependencies:
+    resolve-from "^3.0.0"
+
 resolve-dir@^1.0.0:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43"
@@ -6030,6 +6357,10 @@ resolve-from@^1.0.0:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226"
 
+resolve-from@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748"
+
 resolve-url@^0.2.1:
   version "0.2.1"
   resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a"
@@ -6038,7 +6369,7 @@ resolve@1.1.7:
   version "1.1.7"
   resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b"
 
-resolve@^1.2.0, resolve@^1.3.2:
+resolve@^1.2.0:
   version "1.4.0"
   resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.4.0.tgz#a75be01c53da25d934a98ebd0e4c4a7312f92a86"
   dependencies:
@@ -6063,9 +6394,9 @@ rimraf@2, rimraf@^2.2.8, rimraf@^2.5.1, rimraf@^2.6.1:
   dependencies:
     glob "^7.0.5"
 
-rimraf@2.5.4:
-  version "2.5.4"
-  resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.5.4.tgz#96800093cbf1a0c86bd95b4625467535c29dfa04"
+rimraf@2.6.2:
+  version "2.6.2"
+  resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36"
   dependencies:
     glob "^7.0.5"
 
@@ -6092,10 +6423,6 @@ rx-lite@*, rx-lite@^4.0.8:
   version "4.0.8"
   resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444"
 
-rx@^4.1.0:
-  version "4.1.0"
-  resolved "https://registry.yarnpkg.com/rx/-/rx-4.1.0.tgz#a5f13ff79ef3b740fe30aa803fb09f98805d4782"
-
 safe-buffer@5.1.1, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
   version "5.1.1"
   resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853"
@@ -6104,17 +6431,19 @@ safe-buffer@~5.0.1:
   version "5.0.1"
   resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.0.1.tgz#d263ca54696cd8a306b5ca6551e92de57918fbe7"
 
-sane@~1.6.0:
-  version "1.6.0"
-  resolved "https://registry.yarnpkg.com/sane/-/sane-1.6.0.tgz#9610c452307a135d29c1fdfe2547034180c46775"
+sane@^2.0.0:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/sane/-/sane-2.2.0.tgz#d6d2e2fcab00e3d283c93b912b7c3a20846f1d56"
   dependencies:
     anymatch "^1.3.0"
     exec-sh "^0.2.0"
-    fb-watchman "^1.8.0"
+    fb-watchman "^2.0.0"
     minimatch "^3.0.2"
     minimist "^1.1.1"
     walker "~1.0.5"
-    watch "~0.10.0"
+    watch "~0.18.0"
+  optionalDependencies:
+    fsevents "^1.1.1"
 
 sax@^1.2.1, sax@~1.2.1:
   version "1.2.4"
@@ -6130,10 +6459,16 @@ select-hose@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca"
 
-select@^1.0.6:
+select@^1.1.2:
   version "1.1.2"
   resolved "https://registry.yarnpkg.com/select/-/select-1.1.2.tgz#0e7350acdec80b1108528786ec1d4418d11b396d"
 
+selfsigned@^1.9.1:
+  version "1.10.1"
+  resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.1.tgz#bf8cb7b83256c4551e31347c6311778db99eec52"
+  dependencies:
+    node-forge "0.6.33"
+
 "semver@2 || 3 || 4 || 5", semver@5.4.1, semver@^5.3.0:
   version "5.4.1"
   resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e"
@@ -6298,17 +6633,6 @@ sntp@1.x.x:
   dependencies:
     hoek "2.x.x"
 
-sockjs-client@1.1.2:
-  version "1.1.2"
-  resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.1.2.tgz#f0212a8550e4c9468c8cceaeefd2e3493c033ad5"
-  dependencies:
-    debug "^2.2.0"
-    eventsource "0.1.6"
-    faye-websocket "~0.11.0"
-    inherits "^2.0.1"
-    json3 "^3.3.2"
-    url-parse "^1.1.1"
-
 sockjs-client@1.1.4:
   version "1.1.4"
   resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.1.4.tgz#5babe386b775e4cf14e7520911452654016c8b12"
@@ -6333,14 +6657,6 @@ sort-keys@^1.0.0:
   dependencies:
     is-plain-obj "^1.0.0"
 
-source-list-map@^0.1.7:
-  version "0.1.8"
-  resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-0.1.8.tgz#c550b2ab5427f6b3f21f5afead88c4f5587b2106"
-
-source-list-map@^1.1.1:
-  version "1.1.2"
-  resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-1.1.2.tgz#9889019d1024cce55cdc069498337ef6186a11a1"
-
 source-list-map@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.0.tgz#aaa47403f7b245a92fbc97ea08f250d6087ed085"
@@ -6354,12 +6670,18 @@ source-map-resolve@^0.5.0:
     source-map-url "^0.4.0"
     urix "^0.1.0"
 
-source-map-support@^0.4.15, source-map-support@^0.4.2, source-map-support@^0.4.4:
+source-map-support@^0.4.15, source-map-support@^0.4.2:
   version "0.4.15"
   resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.15.tgz#03202df65c06d2bd8c7ec2362a193056fef8d3b1"
   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-url@^0.4.0:
   version "0.4.0"
   resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3"
@@ -6374,7 +6696,7 @@ source-map@^0.4.4:
   dependencies:
     amdefine ">=0.0.4"
 
-source-map@^0.6.1:
+source-map@^0.6.0, source-map@^0.6.1:
   version "0.6.1"
   resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
 
@@ -6483,11 +6805,12 @@ strict-uri-encode@^1.0.0:
   version "1.1.0"
   resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713"
 
-string-length@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/string-length/-/string-length-1.0.1.tgz#56970fb1c38558e9e70b728bf3de269ac45adfac"
+string-length@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/string-length/-/string-length-2.0.0.tgz#d40dbb686a3ace960c1cffca562bf2c45f8363ed"
   dependencies:
-    strip-ansi "^3.0.0"
+    astral-regex "^1.0.0"
+    strip-ansi "^4.0.0"
 
 string-width@^1.0.1, string-width@^1.0.2:
   version "1.0.2"
@@ -6544,13 +6867,19 @@ strip-eof@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf"
 
+strip-indent@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2"
+  dependencies:
+    get-stdin "^4.0.1"
+
 strip-json-comments@~2.0.1:
   version "2.0.1"
   resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
 
-style-loader@0.18.2:
-  version "0.18.2"
-  resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.18.2.tgz#cc31459afbcd6d80b7220ee54b291a9fd66ff5eb"
+style-loader@0.19.0:
+  version "0.19.0"
+  resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.19.0.tgz#7258e788f0fee6a42d710eaf7d6c2412a4c50759"
   dependencies:
     loader-utils "^1.0.2"
     schema-utils "^0.3.0"
@@ -6559,7 +6888,7 @@ supports-color@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
 
-supports-color@^3.1.0, supports-color@^3.1.1, supports-color@^3.1.2, supports-color@^3.2.3:
+supports-color@^3.1.2, supports-color@^3.2.3:
   version "3.2.3"
   resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6"
   dependencies:
@@ -6608,7 +6937,7 @@ table@^4.0.1:
     slice-ansi "1.0.0"
     string-width "^2.1.1"
 
-tapable@^0.2.5, tapable@^0.2.7, tapable@~0.2.5:
+tapable@^0.2.5, tapable@^0.2.7:
   version "0.2.8"
   resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.2.8.tgz#99372a5c999bf2df160afc0d74bed4f47948cd22"
 
@@ -6647,14 +6976,18 @@ text-table@0.2.0, text-table@~0.2.0:
   version "0.2.0"
   resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
 
-throat@^3.0.0:
-  version "3.2.0"
-  resolved "https://registry.yarnpkg.com/throat/-/throat-3.2.0.tgz#50cb0670edbc40237b9e347d7e1f88e4620af836"
+throat@^4.0.0:
+  version "4.1.0"
+  resolved "https://registry.yarnpkg.com/throat/-/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a"
 
 through@^2.3.6:
   version "2.3.8"
   resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
 
+thunky@^0.1.0:
+  version "0.1.0"
+  resolved "https://registry.yarnpkg.com/thunky/-/thunky-0.1.0.tgz#bf30146824e2b6e67b0f2d7a4ac8beb26908684e"
+
 time-stamp@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-2.0.0.tgz#95c6a44530e15ba8d6f4a3ecb8c3a3fac46da357"
@@ -6665,9 +6998,9 @@ timers-browserify@^2.0.2:
   dependencies:
     setimmediate "^1.0.4"
 
-tiny-emitter@^1.0.0:
-  version "1.2.0"
-  resolved "https://registry.yarnpkg.com/tiny-emitter/-/tiny-emitter-1.2.0.tgz#6dc845052cb08ebefc1874723b58f24a648c3b6f"
+tiny-emitter@^2.0.0:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/tiny-emitter/-/tiny-emitter-2.0.2.tgz#82d27468aca5ade8e5fd1e6d22b57dd43ebdfb7c"
 
 tmp@^0.0.31:
   version "0.0.31"
@@ -6683,7 +7016,7 @@ to-arraybuffer@^1.0.0:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43"
 
-to-fast-properties@^1.0.1:
+to-fast-properties@^1.0.1, to-fast-properties@^1.0.3:
   version "1.0.3"
   resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47"
 
@@ -6730,6 +7063,10 @@ tr46@~0.0.3:
   version "0.0.3"
   resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a"
 
+trim-newlines@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613"
+
 trim-right@^1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003"
@@ -6738,20 +7075,20 @@ tryit@^1.0.1:
   version "1.0.3"
   resolved "https://registry.yarnpkg.com/tryit/-/tryit-1.0.3.tgz#393be730a9446fd1ead6da59a014308f36c289cb"
 
-ts-jest@20.0.10:
-  version "20.0.10"
-  resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-20.0.10.tgz#19e9386e6c890d31c2a64e938edc0c84fc937ebc"
+ts-jest@21.1.3:
+  version "21.1.3"
+  resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-21.1.3.tgz#cc3c552e7e8a67db9ededc28c00ae98223614ddc"
   dependencies:
     babel-core "^6.24.1"
     babel-plugin-istanbul "^4.1.4"
     babel-plugin-transform-es2015-modules-commonjs "^6.24.1"
-    babel-preset-jest "^20.0.3"
+    babel-preset-jest "^21.2.0"
     fs-extra "^4.0.0"
-    jest-config "^20.0.0"
-    jest-util "^20.0.0"
+    jest-config "^21.2.1"
+    jest-util "^21.2.1"
     pkg-dir "^2.0.0"
-    source-map-support "^0.4.4"
-    yargs "^8.0.1"
+    source-map-support "^0.5.0"
+    yargs "^9.0.1"
 
 tty-browserify@0.0.0:
   version "0.0.0"
@@ -6784,9 +7121,9 @@ typedarray@^0.0.6:
   version "0.0.6"
   resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
 
-typescript-eslint-parser@8.0.0:
-  version "8.0.0"
-  resolved "https://registry.yarnpkg.com/typescript-eslint-parser/-/typescript-eslint-parser-8.0.0.tgz#81f70bbffca1139c1dc5a1301208a7fd8213f8b2"
+typescript-eslint-parser@8.0.1:
+  version "8.0.1"
+  resolved "https://registry.yarnpkg.com/typescript-eslint-parser/-/typescript-eslint-parser-8.0.1.tgz#e8cac537d996e16c3dbb0d7c4d509799e67afe0c"
   dependencies:
     lodash.unescape "4.0.1"
     semver "5.4.1"
@@ -6806,7 +7143,7 @@ uglify-js@3.0.x:
     commander "~2.11.0"
     source-map "~0.5.1"
 
-uglify-js@^2.6, uglify-js@^2.8.27:
+uglify-js@^2.6, uglify-js@^2.8.29:
   version "2.8.29"
   resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd"
   dependencies:
@@ -6827,6 +7164,14 @@ uglify-to-browserify@~1.0.0:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7"
 
+uglifyjs-webpack-plugin@^0.4.6:
+  version "0.4.6"
+  resolved "https://registry.yarnpkg.com/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-0.4.6.tgz#b951f4abb6bd617e66f63eb891498e391763e309"
+  dependencies:
+    source-map "^0.5.6"
+    uglify-js "^2.8.29"
+    webpack-sources "^1.0.1"
+
 uid-number@^0.0.6:
   version "0.0.6"
   resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81"
@@ -6892,7 +7237,7 @@ url-parse@1.0.x:
     querystringify "0.0.x"
     requires-port "1.0.x"
 
-url-parse@^1.1.1, url-parse@^1.1.8:
+url-parse@^1.1.8:
   version "1.1.9"
   resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.1.9.tgz#c67f1d775d51f0a18911dd7b3ffad27bb9e5bd19"
   dependencies:
@@ -6985,11 +7330,14 @@ warning@^3.0.0:
   dependencies:
     loose-envify "^1.0.0"
 
-watch@~0.10.0:
-  version "0.10.0"
-  resolved "https://registry.yarnpkg.com/watch/-/watch-0.10.0.tgz#77798b2da0f9910d595f1ace5b0c2258521f21dc"
+watch@~0.18.0:
+  version "0.18.0"
+  resolved "https://registry.yarnpkg.com/watch/-/watch-0.18.0.tgz#28095476c6df7c90c963138990c0a5423eb4b986"
+  dependencies:
+    exec-sh "^0.2.0"
+    minimist "^1.2.0"
 
-watchpack@^1.3.1:
+watchpack@^1.4.0:
   version "1.4.0"
   resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.4.0.tgz#4a1472bcbb952bd0a9bb4036801f954dfb39faac"
   dependencies:
@@ -7011,11 +7359,11 @@ webidl-conversions@^4.0.0:
   version "4.0.2"
   resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad"
 
-webpack-bundle-analyzer@2.8.2:
-  version "2.8.2"
-  resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-2.8.2.tgz#8b6240c29a9d63bc72f09d920fb050adbcce9fe8"
+webpack-bundle-analyzer@2.9.0:
+  version "2.9.0"
+  resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-2.9.0.tgz#b58bc34cc30b27ffdbaf3d00bf27aba6fa29c6e3"
   dependencies:
-    acorn "^5.0.3"
+    acorn "^5.1.1"
     chalk "^1.1.3"
     commander "^2.9.0"
     ejs "^2.5.6"
@@ -7027,7 +7375,7 @@ webpack-bundle-analyzer@2.8.2:
     opener "^1.4.3"
     ws "^2.3.1"
 
-webpack-dev-middleware@^1.10.2:
+webpack-dev-middleware@^1.11.0:
   version "1.12.0"
   resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-1.12.0.tgz#d34efefb2edda7e1d3b5dbe07289513219651709"
   dependencies:
@@ -7037,34 +7385,36 @@ webpack-dev-middleware@^1.10.2:
     range-parser "^1.0.3"
     time-stamp "^2.0.0"
 
-webpack-dev-server@2.4.5:
-  version "2.4.5"
-  resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-2.4.5.tgz#31384ce81136be1080b4b4cde0eb9b90e54ee6cf"
+webpack-dev-server@2.9.3:
+  version "2.9.3"
+  resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-2.9.3.tgz#f0554e88d129e87796a6f74a016b991743ca6f81"
   dependencies:
     ansi-html "0.0.7"
+    array-includes "^3.0.3"
+    bonjour "^3.5.0"
     chokidar "^1.6.0"
     compression "^1.5.2"
     connect-history-api-fallback "^1.3.0"
+    debug "^3.1.0"
+    del "^3.0.0"
     express "^4.13.3"
     html-entities "^1.2.0"
     http-proxy-middleware "~0.17.4"
-    opn "4.0.2"
+    import-local "^0.1.1"
+    internal-ip "1.2.0"
+    ip "^1.1.5"
+    loglevel "^1.4.1"
+    opn "^5.1.0"
     portfinder "^1.0.9"
+    selfsigned "^1.9.1"
     serve-index "^1.7.2"
     sockjs "0.3.18"
-    sockjs-client "1.1.2"
+    sockjs-client "1.1.4"
     spdy "^3.4.1"
-    strip-ansi "^3.0.0"
-    supports-color "^3.1.1"
-    webpack-dev-middleware "^1.10.2"
-    yargs "^6.0.0"
-
-webpack-sources@^0.2.3:
-  version "0.2.3"
-  resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-0.2.3.tgz#17c62bfaf13c707f9d02c479e0dcdde8380697fb"
-  dependencies:
-    source-list-map "^1.1.1"
-    source-map "~0.5.3"
+    strip-ansi "^3.0.1"
+    supports-color "^4.2.1"
+    webpack-dev-middleware "^1.11.0"
+    yargs "^6.6.0"
 
 webpack-sources@^1.0.1:
   version "1.0.1"
@@ -7073,31 +7423,32 @@ webpack-sources@^1.0.1:
     source-list-map "^2.0.0"
     source-map "~0.5.3"
 
-webpack@2.6.1:
-  version "2.6.1"
-  resolved "https://registry.yarnpkg.com/webpack/-/webpack-2.6.1.tgz#2e0457f0abb1ac5df3ab106c69c672f236785f07"
+webpack@3.8.1:
+  version "3.8.1"
+  resolved "https://registry.yarnpkg.com/webpack/-/webpack-3.8.1.tgz#b16968a81100abe61608b0153c9159ef8bb2bd83"
   dependencies:
     acorn "^5.0.0"
     acorn-dynamic-import "^2.0.0"
-    ajv "^4.7.0"
-    ajv-keywords "^1.1.1"
+    ajv "^5.1.5"
+    ajv-keywords "^2.0.0"
     async "^2.1.2"
-    enhanced-resolve "^3.0.0"
+    enhanced-resolve "^3.4.0"
+    escope "^3.6.0"
     interpret "^1.0.0"
     json-loader "^0.5.4"
     json5 "^0.5.1"
     loader-runner "^2.3.0"
-    loader-utils "^0.2.16"
+    loader-utils "^1.1.0"
     memory-fs "~0.4.1"
     mkdirp "~0.5.0"
     node-libs-browser "^2.0.0"
     source-map "^0.5.3"
-    supports-color "^3.1.0"
-    tapable "~0.2.5"
-    uglify-js "^2.8.27"
-    watchpack "^1.3.1"
-    webpack-sources "^0.2.3"
-    yargs "^6.0.0"
+    supports-color "^4.2.1"
+    tapable "^0.2.7"
+    uglifyjs-webpack-plugin "^0.4.6"
+    watchpack "^1.4.0"
+    webpack-sources "^1.0.1"
+    yargs "^8.0.2"
 
 websocket-driver@>=0.5.1:
   version "0.6.5"
@@ -7115,11 +7466,7 @@ whatwg-encoding@^1.0.1:
   dependencies:
     iconv-lite "0.4.13"
 
-whatwg-fetch@1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-1.0.0.tgz#01c2ac4df40e236aaa18480e3be74bd5c8eb798e"
-
-whatwg-fetch@>=0.10.0:
+whatwg-fetch@2.0.3, whatwg-fetch@>=0.10.0:
   version "2.0.3"
   resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.3.tgz#9c84ec2dcf68187ff00bc64e1274b442176e1c84"
 
@@ -7188,6 +7535,14 @@ wrappy@1:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
 
+write-file-atomic@^2.1.0:
+  version "2.3.0"
+  resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.3.0.tgz#1ff61575c2e2a4e8e510d6fa4e243cce183999ab"
+  dependencies:
+    graceful-fs "^4.1.11"
+    imurmurhash "^0.1.4"
+    signal-exit "^3.0.2"
+
 write@^0.2.1:
   version "0.2.1"
   resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757"
@@ -7227,19 +7582,13 @@ yargs-parser@^4.2.0:
   dependencies:
     camelcase "^3.0.0"
 
-yargs-parser@^5.0.0:
-  version "5.0.0"
-  resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-5.0.0.tgz#275ecf0d7ffe05c77e64e7c86e4cd94bf0e1228a"
-  dependencies:
-    camelcase "^3.0.0"
-
 yargs-parser@^7.0.0:
   version "7.0.0"
   resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-7.0.0.tgz#8d0ac42f16ea55debd332caf4c4038b3e3f5dfd9"
   dependencies:
     camelcase "^4.1.0"
 
-yargs@^6.0.0:
+yargs@^6.6.0:
   version "6.6.0"
   resolved "https://registry.yarnpkg.com/yargs/-/yargs-6.6.0.tgz#782ec21ef403345f830a808ca3d513af56065208"
   dependencies:
@@ -7257,27 +7606,27 @@ yargs@^6.0.0:
     y18n "^3.2.1"
     yargs-parser "^4.2.0"
 
-yargs@^7.0.2:
-  version "7.1.0"
-  resolved "https://registry.yarnpkg.com/yargs/-/yargs-7.1.0.tgz#6ba318eb16961727f5d284f8ea003e8d6154d0c8"
+yargs@^8.0.2:
+  version "8.0.2"
+  resolved "https://registry.yarnpkg.com/yargs/-/yargs-8.0.2.tgz#6299a9055b1cefc969ff7e79c1d918dceb22c360"
   dependencies:
-    camelcase "^3.0.0"
+    camelcase "^4.1.0"
     cliui "^3.2.0"
     decamelize "^1.1.1"
     get-caller-file "^1.0.1"
-    os-locale "^1.4.0"
-    read-pkg-up "^1.0.1"
+    os-locale "^2.0.0"
+    read-pkg-up "^2.0.0"
     require-directory "^2.1.1"
     require-main-filename "^1.0.1"
     set-blocking "^2.0.0"
-    string-width "^1.0.2"
-    which-module "^1.0.0"
+    string-width "^2.0.0"
+    which-module "^2.0.0"
     y18n "^3.2.1"
-    yargs-parser "^5.0.0"
+    yargs-parser "^7.0.0"
 
-yargs@^8.0.1:
-  version "8.0.2"
-  resolved "https://registry.yarnpkg.com/yargs/-/yargs-8.0.2.tgz#6299a9055b1cefc969ff7e79c1d918dceb22c360"
+yargs@^9.0.0, yargs@^9.0.1:
+  version "9.0.1"
+  resolved "https://registry.yarnpkg.com/yargs/-/yargs-9.0.1.tgz#52acc23feecac34042078ee78c0c007f5085db4c"
   dependencies:
     camelcase "^4.1.0"
     cliui "^3.2.0"