diff options
231 files changed, 2723 insertions, 1702 deletions
diff --git a/server/sonar-web/.flowconfig b/server/sonar-web/.flowconfig index 77637514195..d5f3a8e2503 100644 --- a/server/sonar-web/.flowconfig +++ b/server/sonar-web/.flowconfig @@ -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/.* diff --git a/server/sonar-web/package.json b/server/sonar-web/package.json index 5bd751a3547..7d82399d2ad 100644 --- a/server/sonar-web/package.json +++ b/server/sonar-web/package.json @@ -5,110 +5,109 @@ "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", diff --git a/server/sonar-web/scripts/analyze.js b/server/sonar-web/scripts/analyze.js index dd1121b38c2..c821eb19790 100644 --- a/server/sonar-web/scripts/analyze.js +++ b/server/sonar-web/scripts/analyze.js @@ -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 }); diff --git a/server/sonar-web/scripts/start.js b/server/sonar-web/scripts/start.js index c34df111987..21776e5036b 100644 --- a/server/sonar-web/scripts/start.js +++ b/server/sonar-web/scripts/start.js @@ -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(); diff --git a/server/sonar-web/src/main/js/app/components/ComponentContainer.tsx b/server/sonar-web/src/main/js/app/components/ComponentContainer.tsx index b1b2ac07fad..f790ab376fe 100644 --- a/server/sonar-web/src/main/js/app/components/ComponentContainer.tsx +++ b/server/sonar-web/src/main/js/app/components/ComponentContainer.tsx @@ -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.tsx index 8d68f322369..e9b31253cdd 100644 --- a/server/sonar-web/src/main/js/app/components/GlobalFooterContainer.js +++ b/server/sonar-web/src/main/js/app/components/GlobalFooterContainer.tsx @@ -17,12 +17,11 @@ * 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 => ({ +const mapStateToProps = (state: any) => ({ sonarqubeVersion: getAppState(state).version, productionDatabase: getAppState(state).productionDatabase, onSonarCloud: getGlobalSettingValue(state, 'sonar.sonarcloud.enabled') diff --git a/server/sonar-web/src/main/js/app/components/extensions/Extension.js b/server/sonar-web/src/main/js/app/components/extensions/Extension.js index d7657b83365..f1bfbf9756a 100644 --- a/server/sonar-web/src/main/js/app/components/extensions/Extension.js +++ b/server/sonar-web/src/main/js/app/components/extensions/Extension.js @@ -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 index 00000000000..6e72ebb376d --- /dev/null +++ b/server/sonar-web/src/main/js/app/components/extensions/ExtensionContainer.tsx @@ -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); diff --git a/server/sonar-web/src/main/js/app/components/extensions/GlobalAdminPageExtension.js b/server/sonar-web/src/main/js/app/components/extensions/GlobalAdminPageExtension.js index eff718d6168..ea9b2191b02 100644 --- a/server/sonar-web/src/main/js/app/components/extensions/GlobalAdminPageExtension.js +++ b/server/sonar-web/src/main/js/app/components/extensions/GlobalAdminPageExtension.js @@ -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 => ({ diff --git a/server/sonar-web/src/main/js/app/components/extensions/GlobalPageExtension.js b/server/sonar-web/src/main/js/app/components/extensions/GlobalPageExtension.js index 5d82eae4917..acc4d25948c 100644 --- a/server/sonar-web/src/main/js/app/components/extensions/GlobalPageExtension.js +++ b/server/sonar-web/src/main/js/app/components/extensions/GlobalPageExtension.js @@ -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 => ({ diff --git a/server/sonar-web/src/main/js/app/components/extensions/OrganizationPageExtension.js b/server/sonar-web/src/main/js/app/components/extensions/OrganizationPageExtension.js index e5d38f46800..9236726d428 100644 --- a/server/sonar-web/src/main/js/app/components/extensions/OrganizationPageExtension.js +++ b/server/sonar-web/src/main/js/app/components/extensions/OrganizationPageExtension.js @@ -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 }} diff --git a/server/sonar-web/src/main/js/app/components/extensions/ProjectAdminPageExtension.js b/server/sonar-web/src/main/js/app/components/extensions/ProjectAdminPageExtension.js index 3881206d667..e2ce3c79d06 100644 --- a/server/sonar-web/src/main/js/app/components/extensions/ProjectAdminPageExtension.js +++ b/server/sonar-web/src/main/js/app/components/extensions/ProjectAdminPageExtension.js @@ -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 /> ); diff --git a/server/sonar-web/src/main/js/app/components/extensions/ProjectPageExtension.tsx b/server/sonar-web/src/main/js/app/components/extensions/ProjectPageExtension.tsx index dc23ec8df22..4c76b21a7e7 100644 --- a/server/sonar-web/src/main/js/app/components/extensions/ProjectPageExtension.tsx +++ b/server/sonar-web/src/main/js/app/components/extensions/ProjectPageExtension.tsx @@ -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 /> ); diff --git a/server/sonar-web/src/main/js/app/components/help/GlobalHelp.js b/server/sonar-web/src/main/js/app/components/help/GlobalHelp.js index 9df12c7801c..43f4616f8b8 100644 --- a/server/sonar-web/src/main/js/app/components/help/GlobalHelp.js +++ b/server/sonar-web/src/main/js/app/components/help/GlobalHelp.js @@ -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> ); diff --git a/server/sonar-web/src/main/js/app/components/help/__tests__/__snapshots__/GlobalHelp-test.js.snap b/server/sonar-web/src/main/js/app/components/help/__tests__/__snapshots__/GlobalHelp-test.js.snap index e9a2ed0ec03..5aaa41aa5f8 100644 --- a/server/sonar-web/src/main/js/app/components/help/__tests__/__snapshots__/GlobalHelp-test.js.snap +++ b/server/sonar-web/src/main/js/app/components/help/__tests__/__snapshots__/GlobalHelp-test.js.snap @@ -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" diff --git a/server/sonar-web/src/main/js/app/components/nav/component/ComponentNavBreadcrumbs.js b/server/sonar-web/src/main/js/app/components/nav/component/ComponentNavBreadcrumbs.js index 8bbd0a0c5ce..8129eeb98fd 100644 --- a/server/sonar-web/src/main/js/app/components/nav/component/ComponentNavBreadcrumbs.js +++ b/server/sonar-web/src/main/js/app/components/nav/component/ComponentNavBreadcrumbs.js @@ -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 } }} diff --git a/server/sonar-web/src/main/js/app/components/nav/component/ComponentNavMenu.tsx b/server/sonar-web/src/main/js/app/components/nav/component/ComponentNavMenu.tsx index ef2234c896d..4f64dbba6ff 100644 --- a/server/sonar-web/src/main/js/app/components/nav/component/ComponentNavMenu.tsx +++ b/server/sonar-web/src/main/js/app/components/nav/component/ComponentNavMenu.tsx @@ -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> ); diff --git a/server/sonar-web/src/main/js/app/components/nav/component/__tests__/__snapshots__/ComponentNavBranchesMenu-test.tsx.snap b/server/sonar-web/src/main/js/app/components/nav/component/__tests__/__snapshots__/ComponentNavBranchesMenu-test.tsx.snap index d7e28b0846b..7a01722ba4c 100644 --- a/server/sonar-web/src/main/js/app/components/nav/component/__tests__/__snapshots__/ComponentNavBranchesMenu-test.tsx.snap +++ b/server/sonar-web/src/main/js/app/components/nav/component/__tests__/__snapshots__/ComponentNavBranchesMenu-test.tsx.snap @@ -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} /> diff --git a/server/sonar-web/src/main/js/app/components/nav/component/__tests__/__snapshots__/ComponentNavBranchesMenuItem-test.tsx.snap b/server/sonar-web/src/main/js/app/components/nav/component/__tests__/__snapshots__/ComponentNavBranchesMenuItem-test.tsx.snap index 1f6d81e9883..ceba812e99c 100644 --- a/server/sonar-web/src/main/js/app/components/nav/component/__tests__/__snapshots__/ComponentNavBranchesMenuItem-test.tsx.snap +++ b/server/sonar-web/src/main/js/app/components/nav/component/__tests__/__snapshots__/ComponentNavBranchesMenuItem-test.tsx.snap @@ -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 diff --git a/server/sonar-web/src/main/js/app/components/nav/component/__tests__/__snapshots__/ComponentNavBreadcrumbs-test.js.snap b/server/sonar-web/src/main/js/app/components/nav/component/__tests__/__snapshots__/ComponentNavBreadcrumbs-test.js.snap index 1588ae83e8a..259c976fd11 100644 --- a/server/sonar-web/src/main/js/app/components/nav/component/__tests__/__snapshots__/ComponentNavBreadcrumbs-test.js.snap +++ b/server/sonar-web/src/main/js/app/components/nav/component/__tests__/__snapshots__/ComponentNavBreadcrumbs-test.js.snap @@ -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} diff --git a/server/sonar-web/src/main/js/app/components/nav/component/__tests__/__snapshots__/ComponentNavMenu-test.tsx.snap b/server/sonar-web/src/main/js/app/components/nav/component/__tests__/__snapshots__/ComponentNavMenu-test.tsx.snap index 80521551658..56558732e74 100644 --- a/server/sonar-web/src/main/js/app/components/nav/component/__tests__/__snapshots__/ComponentNavMenu-test.tsx.snap +++ b/server/sonar-web/src/main/js/app/components/nav/component/__tests__/__snapshots__/ComponentNavMenu-test.tsx.snap @@ -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} diff --git a/server/sonar-web/src/main/js/app/components/nav/component/__tests__/__snapshots__/ComponentNavMeta-test.tsx.snap b/server/sonar-web/src/main/js/app/components/nav/component/__tests__/__snapshots__/ComponentNavMeta-test.tsx.snap index a1dd339dfce..dea4abcd294 100644 --- a/server/sonar-web/src/main/js/app/components/nav/component/__tests__/__snapshots__/ComponentNavMeta-test.tsx.snap +++ b/server/sonar-web/src/main/js/app/components/nav/component/__tests__/__snapshots__/ComponentNavMeta-test.tsx.snap @@ -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" /> diff --git a/server/sonar-web/src/main/js/app/components/nav/global/__tests__/__snapshots__/GlobalNavMenu-test.js.snap b/server/sonar-web/src/main/js/app/components/nav/global/__tests__/__snapshots__/GlobalNavMenu-test.js.snap index c72f7259205..673cc003e3c 100644 --- a/server/sonar-web/src/main/js/app/components/nav/global/__tests__/__snapshots__/GlobalNavMenu-test.js.snap +++ b/server/sonar-web/src/main/js/app/components/nav/global/__tests__/__snapshots__/GlobalNavMenu-test.js.snap @@ -159,7 +159,9 @@ exports[`should work with extensions 1`] = ` <ul className="dropdown-menu" > - <li> + <li + key="foo" + > <Link onlyActiveOnIndex={false} style={Object {}} diff --git a/server/sonar-web/src/main/js/app/components/nav/global/__tests__/__snapshots__/GlobalNavUser-test.js.snap b/server/sonar-web/src/main/js/app/components/nav/global/__tests__/__snapshots__/GlobalNavUser-test.js.snap index 034d6700b8a..e77bc5d2d8d 100644 --- a/server/sonar-web/src/main/js/app/components/nav/global/__tests__/__snapshots__/GlobalNavUser-test.js.snap +++ b/server/sonar-web/src/main/js/app/components/nav/global/__tests__/__snapshots__/GlobalNavUser-test.js.snap @@ -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={ diff --git a/server/sonar-web/src/main/js/app/components/nav/settings/SettingsEditionsNotif.tsx b/server/sonar-web/src/main/js/app/components/nav/settings/SettingsEditionsNotif.tsx index 527b8479ada..b0340d6730a 100644 --- a/server/sonar-web/src/main/js/app/components/nav/settings/SettingsEditionsNotif.tsx +++ b/server/sonar-web/src/main/js/app/components/nav/settings/SettingsEditionsNotif.tsx @@ -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}> diff --git a/server/sonar-web/src/main/js/app/components/nav/settings/__tests__/__snapshots__/SettingsNav-test.tsx.snap b/server/sonar-web/src/main/js/app/components/nav/settings/__tests__/__snapshots__/SettingsNav-test.tsx.snap index bded1f0a092..e33f8690286 100644 --- a/server/sonar-web/src/main/js/app/components/nav/settings/__tests__/__snapshots__/SettingsNav-test.tsx.snap +++ b/server/sonar-web/src/main/js/app/components/nav/settings/__tests__/__snapshots__/SettingsNav-test.tsx.snap @@ -55,7 +55,9 @@ exports[`should work with extensions 1`] = ` custom_metrics.page </IndexLink> </li> - <li> + <li + key="foo" + > <Link activeClassName="active" onlyActiveOnIndex={false} diff --git a/server/sonar-web/src/main/js/app/components/search/Search.js b/server/sonar-web/src/main/js/app/components/search/Search.js index 7f0e355d0ce..5ea8a0f915d 100644 --- a/server/sonar-web/src/main/js/app/components/search/Search.js +++ b/server/sonar-web/src/main/js/app/components/search/Search.js @@ -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> ); } diff --git a/server/sonar-web/src/main/js/app/components/search/__tests__/__snapshots__/SearchResult-test.js.snap b/server/sonar-web/src/main/js/app/components/search/__tests__/__snapshots__/SearchResult-test.js.snap index a99f95bc210..57349cfbdf5 100644 --- a/server/sonar-web/src/main/js/app/components/search/__tests__/__snapshots__/SearchResult-test.js.snap +++ b/server/sonar-web/src/main/js/app/components/search/__tests__/__snapshots__/SearchResult-test.js.snap @@ -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} diff --git a/server/sonar-web/src/main/js/app/components/search/__tests__/__snapshots__/SearchResults-test.js.snap b/server/sonar-web/src/main/js/app/components/search/__tests__/__snapshots__/SearchResults-test.js.snap index b93d9ef64b5..aa88bea94d8 100644 --- a/server/sonar-web/src/main/js/app/components/search/__tests__/__snapshots__/SearchResults-test.js.snap +++ b/server/sonar-web/src/main/js/app/components/search/__tests__/__snapshots__/SearchResults-test.js.snap @@ -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> diff --git a/server/sonar-web/src/main/js/app/styles/components/search-navigator.css b/server/sonar-web/src/main/js/app/styles/components/search-navigator.css index b89d2bab0ce..8f9294c9b77 100644 --- a/server/sonar-web/src/main/js/app/styles/components/search-navigator.css +++ b/server/sonar-web/src/main/js/app/styles/components/search-navigator.css @@ -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 { diff --git a/server/sonar-web/src/main/js/apps/about/components/AboutApp.js b/server/sonar-web/src/main/js/apps/about/components/AboutApp.js index cc3556ca910..267d0fc7cf1 100644 --- a/server/sonar-web/src/main/js/apps/about/components/AboutApp.js +++ b/server/sonar-web/src/main/js/apps/about/components/AboutApp.js @@ -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 /> diff --git a/server/sonar-web/src/main/js/apps/account/notifications/__tests__/__snapshots__/GlobalNotifications-test.js.snap b/server/sonar-web/src/main/js/apps/account/notifications/__tests__/__snapshots__/GlobalNotifications-test.js.snap index 2135246ecb6..4a7d7d10c5a 100644 --- a/server/sonar-web/src/main/js/apps/account/notifications/__tests__/__snapshots__/GlobalNotifications-test.js.snap +++ b/server/sonar-web/src/main/js/apps/account/notifications/__tests__/__snapshots__/GlobalNotifications-test.js.snap @@ -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 diff --git a/server/sonar-web/src/main/js/apps/account/notifications/__tests__/__snapshots__/Notifications-test.js.snap b/server/sonar-web/src/main/js/apps/account/notifications/__tests__/__snapshots__/Notifications-test.js.snap index 978e4038e91..8541cc01be7 100644 --- a/server/sonar-web/src/main/js/apps/account/notifications/__tests__/__snapshots__/Notifications-test.js.snap +++ b/server/sonar-web/src/main/js/apps/account/notifications/__tests__/__snapshots__/Notifications-test.js.snap @@ -5,6 +5,7 @@ exports[`should match snapshot 1`] = ` className="account-body account-container" > <HelmetWrapper + defer={true} encodeSpecialCharacters={true} title="my_account.notifications" /> diff --git a/server/sonar-web/src/main/js/apps/account/notifications/__tests__/__snapshots__/NotificationsList-test.js.snap b/server/sonar-web/src/main/js/apps/account/notifications/__tests__/__snapshots__/NotificationsList-test.js.snap index 3ca417ef0a0..13a18bff3c7 100644 --- a/server/sonar-web/src/main/js/apps/account/notifications/__tests__/__snapshots__/NotificationsList-test.js.snap +++ b/server/sonar-web/src/main/js/apps/account/notifications/__tests__/__snapshots__/NotificationsList-test.js.snap @@ -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} diff --git a/server/sonar-web/src/main/js/apps/account/notifications/__tests__/__snapshots__/ProjectNotifications-test.js.snap b/server/sonar-web/src/main/js/apps/account/notifications/__tests__/__snapshots__/ProjectNotifications-test.js.snap index 3a5f1bb6f42..2fb0f7c15d1 100644 --- a/server/sonar-web/src/main/js/apps/account/notifications/__tests__/__snapshots__/ProjectNotifications-test.js.snap +++ b/server/sonar-web/src/main/js/apps/account/notifications/__tests__/__snapshots__/ProjectNotifications-test.js.snap @@ -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 diff --git a/server/sonar-web/src/main/js/apps/account/notifications/__tests__/__snapshots__/Projects-test.js.snap b/server/sonar-web/src/main/js/apps/account/notifications/__tests__/__snapshots__/Projects-test.js.snap index 0a6bbf5f267..ed54ae19c4d 100644 --- a/server/sonar-web/src/main/js/apps/account/notifications/__tests__/__snapshots__/Projects-test.js.snap +++ b/server/sonar-web/src/main/js/apps/account/notifications/__tests__/__snapshots__/Projects-test.js.snap @@ -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", diff --git a/server/sonar-web/src/main/js/apps/account/profile/Profile.js b/server/sonar-web/src/main/js/apps/account/profile/Profile.js index 1022a377f33..4996bfcd124 100644 --- a/server/sonar-web/src/main/js/apps/account/profile/Profile.js +++ b/server/sonar-web/src/main/js/apps/account/profile/Profile.js @@ -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"> diff --git a/server/sonar-web/src/main/js/apps/background-tasks/components/ScannerContext.tsx b/server/sonar-web/src/main/js/apps/background-tasks/components/ScannerContext.tsx index c5fa551f142..1e01f0ce5a2 100644 --- a/server/sonar-web/src/main/js/apps/background-tasks/components/ScannerContext.tsx +++ b/server/sonar-web/src/main/js/apps/background-tasks/components/ScannerContext.tsx @@ -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'; diff --git a/server/sonar-web/src/main/js/apps/background-tasks/components/Stacktrace.tsx b/server/sonar-web/src/main/js/apps/background-tasks/components/Stacktrace.tsx index 7156099b54c..56c5a82e0da 100644 --- a/server/sonar-web/src/main/js/apps/background-tasks/components/Stacktrace.tsx +++ b/server/sonar-web/src/main/js/apps/background-tasks/components/Stacktrace.tsx @@ -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'; diff --git a/server/sonar-web/src/main/js/apps/background-tasks/components/TaskActions.tsx b/server/sonar-web/src/main/js/apps/background-tasks/components/TaskActions.tsx index 285e7a4d50f..d6510541fc2 100644 --- a/server/sonar-web/src/main/js/apps/background-tasks/components/TaskActions.tsx +++ b/server/sonar-web/src/main/js/apps/background-tasks/components/TaskActions.tsx @@ -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}> diff --git a/server/sonar-web/src/main/js/apps/background-tasks/components/TaskComponent.tsx b/server/sonar-web/src/main/js/apps/background-tasks/components/TaskComponent.tsx index d94228bde20..8d297463b7e 100644 --- a/server/sonar-web/src/main/js/apps/background-tasks/components/TaskComponent.tsx +++ b/server/sonar-web/src/main/js/apps/background-tasks/components/TaskComponent.tsx @@ -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} />} diff --git a/server/sonar-web/src/main/js/apps/background-tasks/components/Workers.tsx b/server/sonar-web/src/main/js/apps/background-tasks/components/Workers.tsx index a3da79ab51f..60312ec8927 100644 --- a/server/sonar-web/src/main/js/apps/background-tasks/components/Workers.tsx +++ b/server/sonar-web/src/main/js/apps/background-tasks/components/Workers.tsx @@ -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> diff --git a/server/sonar-web/src/main/js/apps/background-tasks/components/WorkersForm.tsx b/server/sonar-web/src/main/js/apps/background-tasks/components/WorkersForm.tsx index 1d4854b74d2..b0849315a4e 100644 --- a/server/sonar-web/src/main/js/apps/background-tasks/components/WorkersForm.tsx +++ b/server/sonar-web/src/main/js/apps/background-tasks/components/WorkersForm.tsx @@ -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'; diff --git a/server/sonar-web/src/main/js/apps/background-tasks/components/__tests__/TaskActions-test.tsx b/server/sonar-web/src/main/js/apps/background-tasks/components/__tests__/TaskActions-test.tsx index 940fe3341da..4c86aa33142 100644 --- a/server/sonar-web/src/main/js/apps/background-tasks/components/__tests__/TaskActions-test.tsx +++ b/server/sonar-web/src/main/js/apps/background-tasks/components/__tests__/TaskActions-test.tsx @@ -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) { diff --git a/server/sonar-web/src/main/js/apps/background-tasks/components/__tests__/__snapshots__/ScannerContext-test.tsx.snap b/server/sonar-web/src/main/js/apps/background-tasks/components/__tests__/__snapshots__/ScannerContext-test.tsx.snap index 791da5f3492..d456c84d89e 100644 --- a/server/sonar-web/src/main/js/apps/background-tasks/components/__tests__/__snapshots__/ScannerContext-test.tsx.snap +++ b/server/sonar-web/src/main/js/apps/background-tasks/components/__tests__/__snapshots__/ScannerContext-test.tsx.snap @@ -12,7 +12,9 @@ exports[`renders 1`] = ` overlayClassName="modal-overlay" parentSelector={[Function]} portalClassName="ReactModalPortal" + shouldCloseOnEsc={true} shouldCloseOnOverlayClick={true} + shouldFocusAfterRender={true} > <div className="modal-head" diff --git a/server/sonar-web/src/main/js/apps/background-tasks/components/__tests__/__snapshots__/Stacktrace-test.tsx.snap b/server/sonar-web/src/main/js/apps/background-tasks/components/__tests__/__snapshots__/Stacktrace-test.tsx.snap index 983e455792a..77022e03f21 100644 --- a/server/sonar-web/src/main/js/apps/background-tasks/components/__tests__/__snapshots__/Stacktrace-test.tsx.snap +++ b/server/sonar-web/src/main/js/apps/background-tasks/components/__tests__/__snapshots__/Stacktrace-test.tsx.snap @@ -12,7 +12,9 @@ exports[`renders 1`] = ` overlayClassName="modal-overlay" parentSelector={[Function]} portalClassName="ReactModalPortal" + shouldCloseOnEsc={true} shouldCloseOnOverlayClick={true} + shouldFocusAfterRender={true} > <div className="modal-head" diff --git a/server/sonar-web/src/main/js/apps/background-tasks/components/__tests__/__snapshots__/TaskActions-test.tsx.snap b/server/sonar-web/src/main/js/apps/background-tasks/components/__tests__/__snapshots__/TaskActions-test.tsx.snap index 9de3ec891a0..aabe0783b3d 100644 --- a/server/sonar-web/src/main/js/apps/background-tasks/components/__tests__/__snapshots__/TaskActions-test.tsx.snap +++ b/server/sonar-web/src/main/js/apps/background-tasks/components/__tests__/__snapshots__/TaskActions-test.tsx.snap @@ -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`; diff --git a/server/sonar-web/src/main/js/apps/background-tasks/components/__tests__/__snapshots__/WorkersForm-test.tsx.snap b/server/sonar-web/src/main/js/apps/background-tasks/components/__tests__/__snapshots__/WorkersForm-test.tsx.snap index 8ff615ea5e0..379c4e1d9b1 100644 --- a/server/sonar-web/src/main/js/apps/background-tasks/components/__tests__/__snapshots__/WorkersForm-test.tsx.snap +++ b/server/sonar-web/src/main/js/apps/background-tasks/components/__tests__/__snapshots__/WorkersForm-test.tsx.snap @@ -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 [ diff --git a/server/sonar-web/src/main/js/apps/code/components/App.tsx b/server/sonar-web/src/main/js/apps/code/components/App.tsx index 2fd66d70ad7..13718a6f520 100644 --- a/server/sonar-web/src/main/js/apps/code/components/App.tsx +++ b/server/sonar-web/src/main/js/apps/code/components/App.tsx @@ -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"> diff --git a/server/sonar-web/src/main/js/apps/component-measures/components/App.js b/server/sonar-web/src/main/js/apps/component-measures/components/App.js index a33340530ea..e5a483dcac8 100644 --- a/server/sonar-web/src/main/js/apps/component-measures/components/App.js +++ b/server/sonar-web/src/main/js/apps/component-measures/components/App.js @@ -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> ); } diff --git a/server/sonar-web/src/main/js/apps/component-measures/components/MeasureContent.js b/server/sonar-web/src/main/js/apps/component-measures/components/MeasureContent.js index 12f3616697d..b27e5ad74c6 100644 --- a/server/sonar-web/src/main/js/apps/component-measures/components/MeasureContent.js +++ b/server/sonar-web/src/main/js/apps/component-measures/components/MeasureContent.js @@ -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> ); } diff --git a/server/sonar-web/src/main/js/apps/component-measures/components/MeasureHeader.js b/server/sonar-web/src/main/js/apps/component-measures/components/MeasureHeader.js index 695c68ea26b..bbbded8e6c1 100644 --- a/server/sonar-web/src/main/js/apps/component-measures/components/MeasureHeader.js +++ b/server/sonar-web/src/main/js/apps/component-measures/components/MeasureHeader.js @@ -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> ); } diff --git a/server/sonar-web/src/main/js/apps/component-measures/components/MeasureOverview.js b/server/sonar-web/src/main/js/apps/component-measures/components/MeasureOverview.js index 91d5cf8d669..8dd310c8a10 100644 --- a/server/sonar-web/src/main/js/apps/component-measures/components/MeasureOverview.js +++ b/server/sonar-web/src/main/js/apps/component-measures/components/MeasureOverview.js @@ -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} diff --git a/server/sonar-web/src/main/js/apps/component-measures/components/__tests__/__snapshots__/App-test.js.snap b/server/sonar-web/src/main/js/apps/component-measures/components/__tests__/__snapshots__/App-test.js.snap index 24354987bd6..0477a149877 100644 --- a/server/sonar-web/src/main/js/apps/component-measures/components/__tests__/__snapshots__/App-test.js.snap +++ b/server/sonar-web/src/main/js/apps/component-measures/components/__tests__/__snapshots__/App-test.js.snap @@ -6,6 +6,7 @@ exports[`should render correctly 1`] = ` id="component-measures" > <HelmetWrapper + defer={true} encodeSpecialCharacters={true} title="layout.measures" /> diff --git a/server/sonar-web/src/main/js/apps/component-measures/components/__tests__/__snapshots__/MeasureViewSelect-test.js.snap b/server/sonar-web/src/main/js/apps/component-measures/components/__tests__/__snapshots__/MeasureViewSelect-test.js.snap index 7ab0276dde2..c007678dbab 100644 --- a/server/sonar-web/src/main/js/apps/component-measures/components/__tests__/__snapshots__/MeasureViewSelect-test.js.snap +++ b/server/sonar-web/src/main/js/apps/component-measures/components/__tests__/__snapshots__/MeasureViewSelect-test.js.snap @@ -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", }, ] diff --git a/server/sonar-web/src/main/js/apps/component-measures/drilldown/FilesView.js b/server/sonar-web/src/main/js/apps/component-measures/drilldown/FilesView.js index 1d7be5e5b3b..702dd80038e 100644 --- a/server/sonar-web/src/main/js/apps/component-measures/drilldown/FilesView.js +++ b/server/sonar-web/src/main/js/apps/component-measures/drilldown/FilesView.js @@ -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> ); } diff --git a/server/sonar-web/src/main/js/apps/component-measures/drilldown/TreeMapView.js b/server/sonar-web/src/main/js/apps/component-measures/drilldown/TreeMapView.js index b836d061c7d..875f750d7db 100644 --- a/server/sonar-web/src/main/js/apps/component-measures/drilldown/TreeMapView.js +++ b/server/sonar-web/src/main/js/apps/component-measures/drilldown/TreeMapView.js @@ -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} diff --git a/server/sonar-web/src/main/js/apps/component-measures/sidebar/__tests__/__snapshots__/DomainFacet-test.js.snap b/server/sonar-web/src/main/js/apps/component-measures/sidebar/__tests__/__snapshots__/DomainFacet-test.js.snap index fd5ddec46a2..9c88f409c2d 100644 --- a/server/sonar-web/src/main/js/apps/component-measures/sidebar/__tests__/__snapshots__/DomainFacet-test.js.snap +++ b/server/sonar-web/src/main/js/apps/component-measures/sidebar/__tests__/__snapshots__/DomainFacet-test.js.snap @@ -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" diff --git a/server/sonar-web/src/main/js/apps/component-measures/sidebar/__tests__/__snapshots__/Sidebar-test.js.snap b/server/sonar-web/src/main/js/apps/component-measures/sidebar/__tests__/__snapshots__/Sidebar-test.js.snap index 2472444bb70..2a3aab950cb 100644 --- a/server/sonar-web/src/main/js/apps/component-measures/sidebar/__tests__/__snapshots__/Sidebar-test.js.snap +++ b/server/sonar-web/src/main/js/apps/component-measures/sidebar/__tests__/__snapshots__/Sidebar-test.js.snap @@ -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} diff --git a/server/sonar-web/src/main/js/apps/issues/components/App.js b/server/sonar-web/src/main/js/apps/issues/components/App.js index 864ca2b5d09..94b226cb89d 100644 --- a/server/sonar-web/src/main/js/apps/issues/components/App.js +++ b/server/sonar-web/src/main/js/apps/issues/components/App.js @@ -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> ); } diff --git a/server/sonar-web/src/main/js/apps/issues/components/ComponentBreadcrumbs.tsx b/server/sonar-web/src/main/js/apps/issues/components/ComponentBreadcrumbs.tsx index b086fb5a125..22332785306 100644 --- a/server/sonar-web/src/main/js/apps/issues/components/ComponentBreadcrumbs.tsx +++ b/server/sonar-web/src/main/js/apps/issues/components/ComponentBreadcrumbs.tsx @@ -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> diff --git a/server/sonar-web/src/main/js/apps/issues/conciseIssuesList/__tests__/__snapshots__/ConciseIssueLocations-test.js.snap b/server/sonar-web/src/main/js/apps/issues/conciseIssuesList/__tests__/__snapshots__/ConciseIssueLocations-test.js.snap index b66e4a8d097..f9973b06e0c 100644 --- a/server/sonar-web/src/main/js/apps/issues/conciseIssuesList/__tests__/__snapshots__/ConciseIssueLocations-test.js.snap +++ b/server/sonar-web/src/main/js/apps/issues/conciseIssuesList/__tests__/__snapshots__/ConciseIssueLocations-test.js.snap @@ -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} /> diff --git a/server/sonar-web/src/main/js/apps/issues/conciseIssuesList/__tests__/__snapshots__/ConciseIssuesList-test.js.snap b/server/sonar-web/src/main/js/apps/issues/conciseIssuesList/__tests__/__snapshots__/ConciseIssuesList-test.js.snap index 1c8a20f3792..b6bc2b99242 100644 --- a/server/sonar-web/src/main/js/apps/issues/conciseIssuesList/__tests__/__snapshots__/ConciseIssuesList-test.js.snap +++ b/server/sonar-web/src/main/js/apps/issues/conciseIssuesList/__tests__/__snapshots__/ConciseIssuesList-test.js.snap @@ -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", diff --git a/server/sonar-web/src/main/js/apps/issues/sidebar/__tests__/__snapshots__/AssigneeFacet-test.js.snap b/server/sonar-web/src/main/js/apps/issues/sidebar/__tests__/__snapshots__/AssigneeFacet-test.js.snap index d6d4ef6ac7b..d384037257b 100644 --- a/server/sonar-web/src/main/js/apps/issues/sidebar/__tests__/__snapshots__/AssigneeFacet-test.js.snap +++ b/server/sonar-web/src/main/js/apps/issues/sidebar/__tests__/__snapshots__/AssigneeFacet-test.js.snap @@ -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" diff --git a/server/sonar-web/src/main/js/apps/marketplace/__tests__/__snapshots__/EditionBoxes-test.tsx.snap b/server/sonar-web/src/main/js/apps/marketplace/__tests__/__snapshots__/EditionBoxes-test.tsx.snap index 952e8dc78c1..bd62c3de370 100644 --- a/server/sonar-web/src/main/js/apps/marketplace/__tests__/__snapshots__/EditionBoxes-test.tsx.snap +++ b/server/sonar-web/src/main/js/apps/marketplace/__tests__/__snapshots__/EditionBoxes-test.tsx.snap @@ -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]} /> diff --git a/server/sonar-web/src/main/js/apps/marketplace/__tests__/__snapshots__/PendingActions-test.tsx.snap b/server/sonar-web/src/main/js/apps/marketplace/__tests__/__snapshots__/PendingActions-test.tsx.snap index b30e1e22d36..7e8801a1e0c 100644 --- a/server/sonar-web/src/main/js/apps/marketplace/__tests__/__snapshots__/PendingActions-test.tsx.snap +++ b/server/sonar-web/src/main/js/apps/marketplace/__tests__/__snapshots__/PendingActions-test.tsx.snap @@ -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>, } } /> diff --git a/server/sonar-web/src/main/js/apps/marketplace/components/LicenseEditionForm.tsx b/server/sonar-web/src/main/js/apps/marketplace/components/LicenseEditionForm.tsx index abab7c84ed4..ee86ac11596 100644 --- a/server/sonar-web/src/main/js/apps/marketplace/components/LicenseEditionForm.tsx +++ b/server/sonar-web/src/main/js/apps/marketplace/components/LicenseEditionForm.tsx @@ -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}> diff --git a/server/sonar-web/src/main/js/apps/marketplace/components/PluginActions.tsx b/server/sonar-web/src/main/js/apps/marketplace/components/PluginActions.tsx index 501631edadc..df898dbdbeb 100644 --- a/server/sonar-web/src/main/js/apps/marketplace/components/PluginActions.tsx +++ b/server/sonar-web/src/main/js/apps/marketplace/components/PluginActions.tsx @@ -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"> diff --git a/server/sonar-web/src/main/js/apps/marketplace/components/UninstallEditionForm.tsx b/server/sonar-web/src/main/js/apps/marketplace/components/UninstallEditionForm.tsx index 37b76edc83e..1af1ee86295 100644 --- a/server/sonar-web/src/main/js/apps/marketplace/components/UninstallEditionForm.tsx +++ b/server/sonar-web/src/main/js/apps/marketplace/components/UninstallEditionForm.tsx @@ -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'; diff --git a/server/sonar-web/src/main/js/apps/marketplace/components/__tests__/__snapshots__/LicenseEditionForm-test.tsx.snap b/server/sonar-web/src/main/js/apps/marketplace/components/__tests__/__snapshots__/LicenseEditionForm-test.tsx.snap index 9e07155c292..bd4aa78eb6a 100644 --- a/server/sonar-web/src/main/js/apps/marketplace/components/__tests__/__snapshots__/LicenseEditionForm-test.tsx.snap +++ b/server/sonar-web/src/main/js/apps/marketplace/components/__tests__/__snapshots__/LicenseEditionForm-test.tsx.snap @@ -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" diff --git a/server/sonar-web/src/main/js/apps/marketplace/components/__tests__/__snapshots__/PluginLicense-test.tsx.snap b/server/sonar-web/src/main/js/apps/marketplace/components/__tests__/__snapshots__/PluginLicense-test.tsx.snap index 5c6e0ab7138..5a77d6923b2 100644 --- a/server/sonar-web/src/main/js/apps/marketplace/components/__tests__/__snapshots__/PluginLicense-test.tsx.snap +++ b/server/sonar-web/src/main/js/apps/marketplace/components/__tests__/__snapshots__/PluginLicense-test.tsx.snap @@ -15,9 +15,9 @@ exports[`should display the license field 1`] = ` Object { "license": <span className="js-plugin-license" - > + > SonarSource license - </span>, + </span>, } } /> diff --git a/server/sonar-web/src/main/js/apps/marketplace/components/__tests__/__snapshots__/UninstallEditionForm-test.tsx.snap b/server/sonar-web/src/main/js/apps/marketplace/components/__tests__/__snapshots__/UninstallEditionForm-test.tsx.snap index 507f7e4fe73..05cefbe37c2 100644 --- a/server/sonar-web/src/main/js/apps/marketplace/components/__tests__/__snapshots__/UninstallEditionForm-test.tsx.snap +++ b/server/sonar-web/src/main/js/apps/marketplace/components/__tests__/__snapshots__/UninstallEditionForm-test.tsx.snap @@ -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" diff --git a/server/sonar-web/src/main/js/apps/organizations/components/__tests__/__snapshots__/MembersList-test.js.snap b/server/sonar-web/src/main/js/apps/organizations/components/__tests__/__snapshots__/MembersList-test.js.snap index a472b00b798..4bc29637672 100644 --- a/server/sonar-web/src/main/js/apps/organizations/components/__tests__/__snapshots__/MembersList-test.js.snap +++ b/server/sonar-web/src/main/js/apps/organizations/components/__tests__/__snapshots__/MembersList-test.js.snap @@ -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", diff --git a/server/sonar-web/src/main/js/apps/organizations/components/__tests__/__snapshots__/OrganizationDelete-test.js.snap b/server/sonar-web/src/main/js/apps/organizations/components/__tests__/__snapshots__/OrganizationDelete-test.js.snap index 508cdecb71b..b34a9e508da 100644 --- a/server/sonar-web/src/main/js/apps/organizations/components/__tests__/__snapshots__/OrganizationDelete-test.js.snap +++ b/server/sonar-web/src/main/js/apps/organizations/components/__tests__/__snapshots__/OrganizationDelete-test.js.snap @@ -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" diff --git a/server/sonar-web/src/main/js/apps/organizations/components/__tests__/__snapshots__/OrganizationEdit-test.js.snap b/server/sonar-web/src/main/js/apps/organizations/components/__tests__/__snapshots__/OrganizationEdit-test.js.snap index 6c13ca615a2..9dc712473f2 100644 --- a/server/sonar-web/src/main/js/apps/organizations/components/__tests__/__snapshots__/OrganizationEdit-test.js.snap +++ b/server/sonar-web/src/main/js/apps/organizations/components/__tests__/__snapshots__/OrganizationEdit-test.js.snap @@ -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" /> diff --git a/server/sonar-web/src/main/js/apps/organizations/components/__tests__/__snapshots__/OrganizationMembers-test.js.snap b/server/sonar-web/src/main/js/apps/organizations/components/__tests__/__snapshots__/OrganizationMembers-test.js.snap index 17ab36b7540..9a13da1aa21 100644 --- a/server/sonar-web/src/main/js/apps/organizations/components/__tests__/__snapshots__/OrganizationMembers-test.js.snap +++ b/server/sonar-web/src/main/js/apps/organizations/components/__tests__/__snapshots__/OrganizationMembers-test.js.snap @@ -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" /> diff --git a/server/sonar-web/src/main/js/apps/organizations/components/__tests__/__snapshots__/OrganizationPage-test.js.snap b/server/sonar-web/src/main/js/apps/organizations/components/__tests__/__snapshots__/OrganizationPage-test.js.snap index f63164ef1e0..350cc9b5d80 100644 --- a/server/sonar-web/src/main/js/apps/organizations/components/__tests__/__snapshots__/OrganizationPage-test.js.snap +++ b/server/sonar-web/src/main/js/apps/organizations/components/__tests__/__snapshots__/OrganizationPage-test.js.snap @@ -16,6 +16,7 @@ exports[`smoke test 2`] = ` <div> <HelmetWrapper defaultTitle="Foo" + defer={true} encodeSpecialCharacters={true} titleTemplate="%s - Foo" /> diff --git a/server/sonar-web/src/main/js/apps/organizations/components/forms/__tests__/__snapshots__/AddMemberForm-test.js.snap b/server/sonar-web/src/main/js/apps/organizations/components/forms/__tests__/__snapshots__/AddMemberForm-test.js.snap index b00ff229314..96d42f26097 100644 --- a/server/sonar-web/src/main/js/apps/organizations/components/forms/__tests__/__snapshots__/AddMemberForm-test.js.snap +++ b/server/sonar-web/src/main/js/apps/organizations/components/forms/__tests__/__snapshots__/AddMemberForm-test.js.snap @@ -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" diff --git a/server/sonar-web/src/main/js/apps/organizations/components/forms/__tests__/__snapshots__/ManageMemberGroupsForm-test.js.snap b/server/sonar-web/src/main/js/apps/organizations/components/forms/__tests__/__snapshots__/ManageMemberGroupsForm-test.js.snap index 3f450483d13..751d905c910 100644 --- a/server/sonar-web/src/main/js/apps/organizations/components/forms/__tests__/__snapshots__/ManageMemberGroupsForm-test.js.snap +++ b/server/sonar-web/src/main/js/apps/organizations/components/forms/__tests__/__snapshots__/ManageMemberGroupsForm-test.js.snap @@ -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> diff --git a/server/sonar-web/src/main/js/apps/organizations/components/forms/__tests__/__snapshots__/RemoveMemberForm-test.js.snap b/server/sonar-web/src/main/js/apps/organizations/components/forms/__tests__/__snapshots__/RemoveMemberForm-test.js.snap index 5b298e526ba..b1b8bdb072d 100644 --- a/server/sonar-web/src/main/js/apps/organizations/components/forms/__tests__/__snapshots__/RemoveMemberForm-test.js.snap +++ b/server/sonar-web/src/main/js/apps/organizations/components/forms/__tests__/__snapshots__/RemoveMemberForm-test.js.snap @@ -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" diff --git a/server/sonar-web/src/main/js/apps/overview/components/__tests__/__snapshots__/ApplicationLeakPeriodLegend-test.js.snap b/server/sonar-web/src/main/js/apps/overview/components/__tests__/__snapshots__/ApplicationLeakPeriodLegend-test.js.snap index cb842597822..f7c73f3b9fb 100644 --- a/server/sonar-web/src/main/js/apps/overview/components/__tests__/__snapshots__/ApplicationLeakPeriodLegend-test.js.snap +++ b/server/sonar-web/src/main/js/apps/overview/components/__tests__/__snapshots__/ApplicationLeakPeriodLegend-test.js.snap @@ -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 diff --git a/server/sonar-web/src/main/js/apps/overview/events/__tests__/__snapshots__/Analysis-test.js.snap b/server/sonar-web/src/main/js/apps/overview/events/__tests__/__snapshots__/Analysis-test.js.snap index 33bc4e28c18..a9296187266 100644 --- a/server/sonar-web/src/main/js/apps/overview/events/__tests__/__snapshots__/Analysis-test.js.snap +++ b/server/sonar-web/src/main/js/apps/overview/events/__tests__/__snapshots__/Analysis-test.js.snap @@ -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> diff --git a/server/sonar-web/src/main/js/apps/overview/meta/__tests__/MetaTagsSelector-test.js b/server/sonar-web/src/main/js/apps/overview/meta/__tests__/MetaTagsSelector-test.js index bc22697f5f3..fc0fe817dc1 100644 --- a/server/sonar-web/src/main/js/apps/overview/meta/__tests__/MetaTagsSelector-test.js +++ b/server/sonar-web/src/main/js/apps/overview/meta/__tests__/MetaTagsSelector-test.js @@ -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'; diff --git a/server/sonar-web/src/main/js/apps/overview/qualityGate/QualityGateCondition.js b/server/sonar-web/src/main/js/apps/overview/qualityGate/QualityGateCondition.js index d88d0e76e97..bc49256f055 100644 --- a/server/sonar-web/src/main/js/apps/overview/qualityGate/QualityGateCondition.js +++ b/server/sonar-web/src/main/js/apps/overview/qualityGate/QualityGateCondition.js @@ -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> diff --git a/server/sonar-web/src/main/js/apps/overview/qualityGate/__tests__/__snapshots__/ApplicationQualityGate-test.js.snap b/server/sonar-web/src/main/js/apps/overview/qualityGate/__tests__/__snapshots__/ApplicationQualityGate-test.js.snap index 326b9ecefb1..5a7f39cf4d9 100644 --- a/server/sonar-web/src/main/js/apps/overview/qualityGate/__tests__/__snapshots__/ApplicationQualityGate-test.js.snap +++ b/server/sonar-web/src/main/js/apps/overview/qualityGate/__tests__/__snapshots__/ApplicationQualityGate-test.js.snap @@ -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 { diff --git a/server/sonar-web/src/main/js/apps/overview/qualityGate/__tests__/__snapshots__/ApplicationQualityGateProject-test.js.snap b/server/sonar-web/src/main/js/apps/overview/qualityGate/__tests__/__snapshots__/ApplicationQualityGateProject-test.js.snap index 7538c3934a6..64d2bf86cfb 100644 --- a/server/sonar-web/src/main/js/apps/overview/qualityGate/__tests__/__snapshots__/ApplicationQualityGateProject-test.js.snap +++ b/server/sonar-web/src/main/js/apps/overview/qualityGate/__tests__/__snapshots__/ApplicationQualityGateProject-test.js.snap @@ -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" diff --git a/server/sonar-web/src/main/js/apps/permissions/project/components/App.js b/server/sonar-web/src/main/js/apps/permissions/project/components/App.js index 5802a33d217..4ab52668b98 100644 --- a/server/sonar-web/src/main/js/apps/permissions/project/components/App.js +++ b/server/sonar-web/src/main/js/apps/permissions/project/components/App.js @@ -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} diff --git a/server/sonar-web/src/main/js/apps/permissions/shared/components/SearchForm.js b/server/sonar-web/src/main/js/apps/permissions/shared/components/SearchForm.js index 14c6018180f..0fdb5568931 100644 --- a/server/sonar-web/src/main/js/apps/permissions/shared/components/SearchForm.js +++ b/server/sonar-web/src/main/js/apps/permissions/shared/components/SearchForm.js @@ -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> ); diff --git a/server/sonar-web/src/main/js/apps/portfolio/components/App.tsx b/server/sonar-web/src/main/js/apps/portfolio/components/App.tsx index 7d3efb507bf..993345e2319 100644 --- a/server/sonar-web/src/main/js/apps/portfolio/components/App.tsx +++ b/server/sonar-web/src/main/js/apps/portfolio/components/App.tsx @@ -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> diff --git a/server/sonar-web/src/main/js/apps/portfolio/components/ReleasabilityBox.tsx b/server/sonar-web/src/main/js/apps/portfolio/components/ReleasabilityBox.tsx index e71c0aed894..798e7b16dd2 100644 --- a/server/sonar-web/src/main/js/apps/portfolio/components/ReleasabilityBox.tsx +++ b/server/sonar-web/src/main/js/apps/portfolio/components/ReleasabilityBox.tsx @@ -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> ); } diff --git a/server/sonar-web/src/main/js/apps/portfolio/components/WorstProjects.tsx b/server/sonar-web/src/main/js/apps/portfolio/components/WorstProjects.tsx index 421eea14c96..ae676759a5a 100644 --- a/server/sonar-web/src/main/js/apps/portfolio/components/WorstProjects.tsx +++ b/server/sonar-web/src/main/js/apps/portfolio/components/WorstProjects.tsx @@ -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')} diff --git a/server/sonar-web/src/main/js/apps/portfolio/components/__tests__/__snapshots__/Effort-test.tsx.snap b/server/sonar-web/src/main/js/apps/portfolio/components/__tests__/__snapshots__/Effort-test.tsx.snap index 79fce89982d..989531cad1e 100644 --- a/server/sonar-web/src/main/js/apps/portfolio/components/__tests__/__snapshots__/Effort-test.tsx.snap +++ b/server/sonar-web/src/main/js/apps/portfolio/components/__tests__/__snapshots__/Effort-test.tsx.snap @@ -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} - />, + />, } } /> diff --git a/server/sonar-web/src/main/js/apps/portfolio/components/__tests__/__snapshots__/RatingFreshness-test.tsx.snap b/server/sonar-web/src/main/js/apps/portfolio/components/__tests__/__snapshots__/RatingFreshness-test.tsx.snap index ca9124758dc..7e0c44f1ca4 100644 --- a/server/sonar-web/src/main/js/apps/portfolio/components/__tests__/__snapshots__/RatingFreshness-test.tsx.snap +++ b/server/sonar-web/src/main/js/apps/portfolio/components/__tests__/__snapshots__/RatingFreshness-test.tsx.snap @@ -11,11 +11,11 @@ exports[`renders 1`] = ` Object { "date": <DateFromNow date="2017-01-02T00:00:00.000Z" - />, + />, "rating": <Rating small={true} value={2} - />, + />, } } /> diff --git a/server/sonar-web/src/main/js/apps/portfolio/components/__tests__/__snapshots__/WorstProjects-test.tsx.snap b/server/sonar-web/src/main/js/apps/portfolio/components/__tests__/__snapshots__/WorstProjects-test.tsx.snap index 1eaa2c0bdb9..c36279d6709 100644 --- a/server/sonar-web/src/main/js/apps/portfolio/components/__tests__/__snapshots__/WorstProjects-test.tsx.snap +++ b/server/sonar-web/src/main/js/apps/portfolio/components/__tests__/__snapshots__/WorstProjects-test.tsx.snap @@ -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" diff --git a/server/sonar-web/src/main/js/apps/projectActivity/components/GraphHistory.js b/server/sonar-web/src/main/js/apps/projectActivity/components/GraphHistory.js index 29fe837acfa..3bc95c78ff9 100644 --- a/server/sonar-web/src/main/js/apps/projectActivity/components/GraphHistory.js +++ b/server/sonar-web/src/main/js/apps/projectActivity/components/GraphHistory.js @@ -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> diff --git a/server/sonar-web/src/main/js/apps/projectActivity/components/GraphsTooltips.js b/server/sonar-web/src/main/js/apps/projectActivity/components/GraphsTooltips.js index 69065f1b708..2aa4137cc1d 100644 --- a/server/sonar-web/src/main/js/apps/projectActivity/components/GraphsTooltips.js +++ b/server/sonar-web/src/main/js/apps/projectActivity/components/GraphsTooltips.js @@ -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> diff --git a/server/sonar-web/src/main/js/apps/projectActivity/components/ProjectActivityAnalysis.js b/server/sonar-web/src/main/js/apps/projectActivity/components/ProjectActivityAnalysis.js index 88bf5483c11..517e60cc26f 100644 --- a/server/sonar-web/src/main/js/apps/projectActivity/components/ProjectActivityAnalysis.js +++ b/server/sonar-web/src/main/js/apps/projectActivity/components/ProjectActivityAnalysis.js @@ -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 diff --git a/server/sonar-web/src/main/js/apps/projectActivity/components/__tests__/__snapshots__/GraphHistory-test.js.snap b/server/sonar-web/src/main/js/apps/projectActivity/components/__tests__/__snapshots__/GraphHistory-test.js.snap index 2b9e964ae1d..b83cc033e28 100644 --- a/server/sonar-web/src/main/js/apps/projectActivity/components/__tests__/__snapshots__/GraphHistory-test.js.snap +++ b/server/sonar-web/src/main/js/apps/projectActivity/components/__tests__/__snapshots__/GraphHistory-test.js.snap @@ -32,6 +32,8 @@ exports[`should correctly render a graph 1`] = ` className="project-activity-graph" > <AutoSizer + disableHeight={false} + disableWidth={false} onResize={[Function]} /> </div> diff --git a/server/sonar-web/src/main/js/apps/projectActivity/components/__tests__/__snapshots__/GraphsHistory-test.js.snap b/server/sonar-web/src/main/js/apps/projectActivity/components/__tests__/__snapshots__/GraphsHistory-test.js.snap index fb809d1f599..b7de2ea3cfe 100644 --- a/server/sonar-web/src/main/js/apps/projectActivity/components/__tests__/__snapshots__/GraphsHistory-test.js.snap +++ b/server/sonar-web/src/main/js/apps/projectActivity/components/__tests__/__snapshots__/GraphsHistory-test.js.snap @@ -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]} diff --git a/server/sonar-web/src/main/js/apps/projectActivity/components/__tests__/__snapshots__/GraphsLegendCustom-test.js.snap b/server/sonar-web/src/main/js/apps/projectActivity/components/__tests__/__snapshots__/GraphsLegendCustom-test.js.snap index cd8ec0cc2f4..b50a253ae4c 100644 --- a/server/sonar-web/src/main/js/apps/projectActivity/components/__tests__/__snapshots__/GraphsLegendCustom-test.js.snap +++ b/server/sonar-web/src/main/js/apps/projectActivity/components/__tests__/__snapshots__/GraphsLegendCustom-test.js.snap @@ -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" > diff --git a/server/sonar-web/src/main/js/apps/projectActivity/components/__tests__/__snapshots__/GraphsLegendStatic-test.js.snap b/server/sonar-web/src/main/js/apps/projectActivity/components/__tests__/__snapshots__/GraphsLegendStatic-test.js.snap index 47cc682d03f..c8d7df8f28a 100644 --- a/server/sonar-web/src/main/js/apps/projectActivity/components/__tests__/__snapshots__/GraphsLegendStatic-test.js.snap +++ b/server/sonar-web/src/main/js/apps/projectActivity/components/__tests__/__snapshots__/GraphsLegendStatic-test.js.snap @@ -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" diff --git a/server/sonar-web/src/main/js/apps/projectActivity/components/__tests__/__snapshots__/GraphsTooltips-test.js.snap b/server/sonar-web/src/main/js/apps/projectActivity/components/__tests__/__snapshots__/GraphsTooltips-test.js.snap index e2ab4b039a8..96758777f80 100644 --- a/server/sonar-web/src/main/js/apps/projectActivity/components/__tests__/__snapshots__/GraphsTooltips-test.js.snap +++ b/server/sonar-web/src/main/js/apps/projectActivity/components/__tests__/__snapshots__/GraphsTooltips-test.js.snap @@ -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" diff --git a/server/sonar-web/src/main/js/apps/projectActivity/components/__tests__/__snapshots__/GraphsTooltipsContent-test.js.snap b/server/sonar-web/src/main/js/apps/projectActivity/components/__tests__/__snapshots__/GraphsTooltipsContent-test.js.snap index 353f07cdac3..7f818adb4c6 100644 --- a/server/sonar-web/src/main/js/apps/projectActivity/components/__tests__/__snapshots__/GraphsTooltipsContent-test.js.snap +++ b/server/sonar-web/src/main/js/apps/projectActivity/components/__tests__/__snapshots__/GraphsTooltipsContent-test.js.snap @@ -3,6 +3,7 @@ exports[`should render correctly 1`] = ` <tr className="project-activity-graph-tooltip-line" + key="code_smells" > <td className="thin" diff --git a/server/sonar-web/src/main/js/apps/projectActivity/components/__tests__/__snapshots__/GraphsTooltipsContentEvents-test.js.snap b/server/sonar-web/src/main/js/apps/projectActivity/components/__tests__/__snapshots__/GraphsTooltipsContentEvents-test.js.snap index 95e4c4b18a1..29401d4397d 100644 --- a/server/sonar-web/src/main/js/apps/projectActivity/components/__tests__/__snapshots__/GraphsTooltipsContentEvents-test.js.snap +++ b/server/sonar-web/src/main/js/apps/projectActivity/components/__tests__/__snapshots__/GraphsTooltipsContentEvents-test.js.snap @@ -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" diff --git a/server/sonar-web/src/main/js/apps/projectActivity/components/__tests__/__snapshots__/GraphsTooltipsContentIssues-test.js.snap b/server/sonar-web/src/main/js/apps/projectActivity/components/__tests__/__snapshots__/GraphsTooltipsContentIssues-test.js.snap index 91f9b47f6f5..f5712ca5b76 100644 --- a/server/sonar-web/src/main/js/apps/projectActivity/components/__tests__/__snapshots__/GraphsTooltipsContentIssues-test.js.snap +++ b/server/sonar-web/src/main/js/apps/projectActivity/components/__tests__/__snapshots__/GraphsTooltipsContentIssues-test.js.snap @@ -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" diff --git a/server/sonar-web/src/main/js/apps/projectActivity/components/__tests__/__snapshots__/ProjectActivityAnalysesList-test.js.snap b/server/sonar-web/src/main/js/apps/projectActivity/components/__tests__/__snapshots__/ProjectActivityAnalysesList-test.js.snap index f2a64234ead..468f7b7ddec 100644 --- a/server/sonar-web/src/main/js/apps/projectActivity/components/__tests__/__snapshots__/ProjectActivityAnalysesList-test.js.snap +++ b/server/sonar-web/src/main/js/apps/projectActivity/components/__tests__/__snapshots__/ProjectActivityAnalysesList-test.js.snap @@ -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]} /> diff --git a/server/sonar-web/src/main/js/apps/projectActivity/components/__tests__/__snapshots__/ProjectActivityApp-test.js.snap b/server/sonar-web/src/main/js/apps/projectActivity/components/__tests__/__snapshots__/ProjectActivityApp-test.js.snap index 0e51a64862b..71e18479081 100644 --- a/server/sonar-web/src/main/js/apps/projectActivity/components/__tests__/__snapshots__/ProjectActivityApp-test.js.snap +++ b/server/sonar-web/src/main/js/apps/projectActivity/components/__tests__/__snapshots__/ProjectActivityApp-test.js.snap @@ -6,6 +6,7 @@ exports[`should render correctly 1`] = ` id="project-activity" > <HelmetWrapper + defer={true} encodeSpecialCharacters={true} title="project_activity.page" /> diff --git a/server/sonar-web/src/main/js/apps/projectActivity/components/__tests__/__snapshots__/ProjectActivityPageHeader-test.js.snap b/server/sonar-web/src/main/js/apps/projectActivity/components/__tests__/__snapshots__/ProjectActivityPageHeader-test.js.snap index 1112cfa4ea8..12ff75c5342 100644 --- a/server/sonar-web/src/main/js/apps/projectActivity/components/__tests__/__snapshots__/ProjectActivityPageHeader-test.js.snap +++ b/server/sonar-web/src/main/js/apps/projectActivity/components/__tests__/__snapshots__/ProjectActivityPageHeader-test.js.snap @@ -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 [ diff --git a/server/sonar-web/src/main/js/apps/projectActivity/components/forms/AddGraphMetric.js b/server/sonar-web/src/main/js/apps/projectActivity/components/forms/AddGraphMetric.js index ece4bdad6d7..bf9c646b599 100644 --- a/server/sonar-web/src/main/js/apps/projectActivity/components/forms/AddGraphMetric.js +++ b/server/sonar-web/src/main/js/apps/projectActivity/components/forms/AddGraphMetric.js @@ -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> diff --git a/server/sonar-web/src/main/js/apps/projectBranches/components/DeleteBranchModal.tsx b/server/sonar-web/src/main/js/apps/projectBranches/components/DeleteBranchModal.tsx index 66d14ed260f..5b8e9cb8c7f 100644 --- a/server/sonar-web/src/main/js/apps/projectBranches/components/DeleteBranchModal.tsx +++ b/server/sonar-web/src/main/js/apps/projectBranches/components/DeleteBranchModal.tsx @@ -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'; diff --git a/server/sonar-web/src/main/js/apps/projectBranches/components/LeakPeriodForm.tsx b/server/sonar-web/src/main/js/apps/projectBranches/components/LeakPeriodForm.tsx index 26d0c82f668..ac05eabcc07 100644 --- a/server/sonar-web/src/main/js/apps/projectBranches/components/LeakPeriodForm.tsx +++ b/server/sonar-web/src/main/js/apps/projectBranches/components/LeakPeriodForm.tsx @@ -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'; diff --git a/server/sonar-web/src/main/js/apps/projectBranches/components/LongBranchesPatternForm.tsx b/server/sonar-web/src/main/js/apps/projectBranches/components/LongBranchesPatternForm.tsx index c773b3c737f..8a683b25529 100644 --- a/server/sonar-web/src/main/js/apps/projectBranches/components/LongBranchesPatternForm.tsx +++ b/server/sonar-web/src/main/js/apps/projectBranches/components/LongBranchesPatternForm.tsx @@ -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'; diff --git a/server/sonar-web/src/main/js/apps/projectBranches/components/RenameBranchModal.tsx b/server/sonar-web/src/main/js/apps/projectBranches/components/RenameBranchModal.tsx index 02bd8572c9c..52a381eb90c 100644 --- a/server/sonar-web/src/main/js/apps/projectBranches/components/RenameBranchModal.tsx +++ b/server/sonar-web/src/main/js/apps/projectBranches/components/RenameBranchModal.tsx @@ -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'; diff --git a/server/sonar-web/src/main/js/apps/projectBranches/components/SettingForm.tsx b/server/sonar-web/src/main/js/apps/projectBranches/components/SettingForm.tsx index 41e8c9d439e..ba43512af0a 100644 --- a/server/sonar-web/src/main/js/apps/projectBranches/components/SettingForm.tsx +++ b/server/sonar-web/src/main/js/apps/projectBranches/components/SettingForm.tsx @@ -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')} diff --git a/server/sonar-web/src/main/js/apps/projectBranches/components/__tests__/__snapshots__/App-test.tsx.snap b/server/sonar-web/src/main/js/apps/projectBranches/components/__tests__/__snapshots__/App-test.tsx.snap index a3281058f51..4914db6ffce 100644 --- a/server/sonar-web/src/main/js/apps/projectBranches/components/__tests__/__snapshots__/App-test.tsx.snap +++ b/server/sonar-web/src/main/js/apps/projectBranches/components/__tests__/__snapshots__/App-test.tsx.snap @@ -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> diff --git a/server/sonar-web/src/main/js/apps/projectBranches/components/__tests__/__snapshots__/DeleteBranchModal-test.tsx.snap b/server/sonar-web/src/main/js/apps/projectBranches/components/__tests__/__snapshots__/DeleteBranchModal-test.tsx.snap index 934f8ed2d7d..fe8762c945f 100644 --- a/server/sonar-web/src/main/js/apps/projectBranches/components/__tests__/__snapshots__/DeleteBranchModal-test.tsx.snap +++ b/server/sonar-web/src/main/js/apps/projectBranches/components/__tests__/__snapshots__/DeleteBranchModal-test.tsx.snap @@ -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" diff --git a/server/sonar-web/src/main/js/apps/projectBranches/components/__tests__/__snapshots__/LongBranchesPatternForm-test.tsx.snap b/server/sonar-web/src/main/js/apps/projectBranches/components/__tests__/__snapshots__/LongBranchesPatternForm-test.tsx.snap index d1c5ef0c609..8e0e2e2d8ca 100644 --- a/server/sonar-web/src/main/js/apps/projectBranches/components/__tests__/__snapshots__/LongBranchesPatternForm-test.tsx.snap +++ b/server/sonar-web/src/main/js/apps/projectBranches/components/__tests__/__snapshots__/LongBranchesPatternForm-test.tsx.snap @@ -12,7 +12,9 @@ exports[`renders 1`] = ` overlayClassName="modal-overlay" parentSelector={[Function]} portalClassName="ReactModalPortal" + shouldCloseOnEsc={true} shouldCloseOnOverlayClick={true} + shouldFocusAfterRender={true} > <header className="modal-head" diff --git a/server/sonar-web/src/main/js/apps/projectBranches/components/__tests__/__snapshots__/RenameBranchModal-test.tsx.snap b/server/sonar-web/src/main/js/apps/projectBranches/components/__tests__/__snapshots__/RenameBranchModal-test.tsx.snap index 7867fa4785a..1f190cd94c5 100644 --- a/server/sonar-web/src/main/js/apps/projectBranches/components/__tests__/__snapshots__/RenameBranchModal-test.tsx.snap +++ b/server/sonar-web/src/main/js/apps/projectBranches/components/__tests__/__snapshots__/RenameBranchModal-test.tsx.snap @@ -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" diff --git a/server/sonar-web/src/main/js/apps/projectQualityGate/Form.tsx b/server/sonar-web/src/main/js/apps/projectQualityGate/Form.tsx index b5a034ccd68..aa0b8bea116 100644 --- a/server/sonar-web/src/main/js/apps/projectQualityGate/Form.tsx +++ b/server/sonar-web/src/main/js/apps/projectQualityGate/Form.tsx @@ -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'; diff --git a/server/sonar-web/src/main/js/apps/projectQualityGate/__tests__/__snapshots__/Form-test.tsx.snap b/server/sonar-web/src/main/js/apps/projectQualityGate/__tests__/__snapshots__/Form-test.tsx.snap index afa45f5e3ba..4d448e7a8cb 100644 --- a/server/sonar-web/src/main/js/apps/projectQualityGate/__tests__/__snapshots__/Form-test.tsx.snap +++ b/server/sonar-web/src/main/js/apps/projectQualityGate/__tests__/__snapshots__/Form-test.tsx.snap @@ -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={ diff --git a/server/sonar-web/src/main/js/apps/projectQualityProfiles/ProfileRow.tsx b/server/sonar-web/src/main/js/apps/projectQualityProfiles/ProfileRow.tsx index ad8340c2c20..9a3febf80ad 100644 --- a/server/sonar-web/src/main/js/apps/projectQualityProfiles/ProfileRow.tsx +++ b/server/sonar-web/src/main/js/apps/projectQualityProfiles/ProfileRow.tsx @@ -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'; diff --git a/server/sonar-web/src/main/js/apps/projectQualityProfiles/__tests__/__snapshots__/ProfileRow-test.tsx.snap b/server/sonar-web/src/main/js/apps/projectQualityProfiles/__tests__/__snapshots__/ProfileRow-test.tsx.snap index 541a117c889..12542749c1f 100644 --- a/server/sonar-web/src/main/js/apps/projectQualityProfiles/__tests__/__snapshots__/ProfileRow-test.tsx.snap +++ b/server/sonar-web/src/main/js/apps/projectQualityProfiles/__tests__/__snapshots__/ProfileRow-test.tsx.snap @@ -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={ diff --git a/server/sonar-web/src/main/js/apps/projectQualityProfiles/__tests__/__snapshots__/Table-test.tsx.snap b/server/sonar-web/src/main/js/apps/projectQualityProfiles/__tests__/__snapshots__/Table-test.tsx.snap index b4b991157eb..5ac9cea89da 100644 --- a/server/sonar-web/src/main/js/apps/projectQualityProfiles/__tests__/__snapshots__/Table-test.tsx.snap +++ b/server/sonar-web/src/main/js/apps/projectQualityProfiles/__tests__/__snapshots__/Table-test.tsx.snap @@ -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 [ diff --git a/server/sonar-web/src/main/js/apps/projects/components/PerspectiveSelect.tsx b/server/sonar-web/src/main/js/apps/projects/components/PerspectiveSelect.tsx index c27d1fce861..5b2e8af4056 100644 --- a/server/sonar-web/src/main/js/apps/projects/components/PerspectiveSelect.tsx +++ b/server/sonar-web/src/main/js/apps/projects/components/PerspectiveSelect.tsx @@ -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'; diff --git a/server/sonar-web/src/main/js/apps/projects/components/ProjectCardLeak.tsx b/server/sonar-web/src/main/js/apps/projects/components/ProjectCardLeak.tsx index 1505bef784b..d8ce816507c 100644 --- a/server/sonar-web/src/main/js/apps/projects/components/ProjectCardLeak.tsx +++ b/server/sonar-web/src/main/js/apps/projects/components/ProjectCardLeak.tsx @@ -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> )} diff --git a/server/sonar-web/src/main/js/apps/projects/components/ProjectsList.tsx b/server/sonar-web/src/main/js/apps/projects/components/ProjectsList.tsx index 423da0dcd26..21101667187 100644 --- a/server/sonar-web/src/main/js/apps/projects/components/ProjectsList.tsx +++ b/server/sonar-web/src/main/js/apps/projects/components/ProjectsList.tsx @@ -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> ); } diff --git a/server/sonar-web/src/main/js/apps/projects/components/ProjectsSortingSelect.tsx b/server/sonar-web/src/main/js/apps/projects/components/ProjectsSortingSelect.tsx index eb84d21caed..434c1818eeb 100644 --- a/server/sonar-web/src/main/js/apps/projects/components/ProjectsSortingSelect.tsx +++ b/server/sonar-web/src/main/js/apps/projects/components/ProjectsSortingSelect.tsx @@ -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'; diff --git a/server/sonar-web/src/main/js/apps/projects/components/__tests__/PageSidebar-test.tsx b/server/sonar-web/src/main/js/apps/projects/components/__tests__/PageSidebar-test.tsx index 6d071b47da5..b6ba776c0da 100644 --- a/server/sonar-web/src/main/js/apps/projects/components/__tests__/PageSidebar-test.tsx +++ b/server/sonar-web/src/main/js/apps/projects/components/__tests__/PageSidebar-test.tsx @@ -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(); }); diff --git a/server/sonar-web/src/main/js/apps/projects/components/__tests__/__snapshots__/AllProjects-test.tsx.snap b/server/sonar-web/src/main/js/apps/projects/components/__tests__/__snapshots__/AllProjects-test.tsx.snap index fc7e90eddd2..5ac9039df25 100644 --- a/server/sonar-web/src/main/js/apps/projects/components/__tests__/__snapshots__/AllProjects-test.tsx.snap +++ b/server/sonar-web/src/main/js/apps/projects/components/__tests__/__snapshots__/AllProjects-test.tsx.snap @@ -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" /> diff --git a/server/sonar-web/src/main/js/apps/projects/components/__tests__/__snapshots__/PageSidebar-test.tsx.snap b/server/sonar-web/src/main/js/apps/projects/components/__tests__/__snapshots__/PageSidebar-test.tsx.snap index 5cd3d236fb0..78961fde19f 100644 --- a/server/sonar-web/src/main/js/apps/projects/components/__tests__/__snapshots__/PageSidebar-test.tsx.snap +++ b/server/sonar-web/src/main/js/apps/projects/components/__tests__/__snapshots__/PageSidebar-test.tsx.snap @@ -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", diff --git a/server/sonar-web/src/main/js/apps/projects/components/__tests__/__snapshots__/PerspectiveSelect-test.tsx.snap b/server/sonar-web/src/main/js/apps/projects/components/__tests__/__snapshots__/PerspectiveSelect-test.tsx.snap index 7671abced29..1c5a0c3e47a 100644 --- a/server/sonar-web/src/main/js/apps/projects/components/__tests__/__snapshots__/PerspectiveSelect-test.tsx.snap +++ b/server/sonar-web/src/main/js/apps/projects/components/__tests__/__snapshots__/PerspectiveSelect-test.tsx.snap @@ -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 [ diff --git a/server/sonar-web/src/main/js/apps/projects/components/__tests__/__snapshots__/ProjectCardLanguages-test.tsx.snap b/server/sonar-web/src/main/js/apps/projects/components/__tests__/__snapshots__/ProjectCardLanguages-test.tsx.snap index bf50df65a84..5b18aee0615 100644 --- a/server/sonar-web/src/main/js/apps/projects/components/__tests__/__snapshots__/ProjectCardLanguages-test.tsx.snap +++ b/server/sonar-web/src/main/js/apps/projects/components/__tests__/__snapshots__/ProjectCardLanguages-test.tsx.snap @@ -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> diff --git a/server/sonar-web/src/main/js/apps/projects/components/__tests__/__snapshots__/ProjectsList-test.tsx.snap b/server/sonar-web/src/main/js/apps/projects/components/__tests__/__snapshots__/ProjectsList-test.tsx.snap index b5a2c7729c5..93fb447b814 100644 --- a/server/sonar-web/src/main/js/apps/projects/components/__tests__/__snapshots__/ProjectsList-test.tsx.snap +++ b/server/sonar-web/src/main/js/apps/projects/components/__tests__/__snapshots__/ProjectsList-test.tsx.snap @@ -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", diff --git a/server/sonar-web/src/main/js/apps/projects/components/__tests__/__snapshots__/ProjectsSortingSelect-test.tsx.snap b/server/sonar-web/src/main/js/apps/projects/components/__tests__/__snapshots__/ProjectsSortingSelect-test.tsx.snap index dfa78f606fc..d1c569d9601 100644 --- a/server/sonar-web/src/main/js/apps/projects/components/__tests__/__snapshots__/ProjectsSortingSelect-test.tsx.snap +++ b/server/sonar-web/src/main/js/apps/projects/components/__tests__/__snapshots__/ProjectsSortingSelect-test.tsx.snap @@ -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 [ diff --git a/server/sonar-web/src/main/js/apps/projects/filters/IssuesFilter.tsx b/server/sonar-web/src/main/js/apps/projects/filters/IssuesFilter.tsx index 5e14ac24774..65539aae09c 100644 --- a/server/sonar-web/src/main/js/apps/projects/filters/IssuesFilter.tsx +++ b/server/sonar-web/src/main/js/apps/projects/filters/IssuesFilter.tsx @@ -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> ); } diff --git a/server/sonar-web/src/main/js/apps/projects/filters/SearchableFilterFooter.tsx b/server/sonar-web/src/main/js/apps/projects/filters/SearchableFilterFooter.tsx index b81830abbb7..5b45e79a6f5 100644 --- a/server/sonar-web/src/main/js/apps/projects/filters/SearchableFilterFooter.tsx +++ b/server/sonar-web/src/main/js/apps/projects/filters/SearchableFilterFooter.tsx @@ -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'; diff --git a/server/sonar-web/src/main/js/apps/projects/filters/__tests__/__snapshots__/Filter-test.tsx.snap b/server/sonar-web/src/main/js/apps/projects/filters/__tests__/__snapshots__/Filter-test.tsx.snap index 684a65f0ce8..3c6f588c192 100644 --- a/server/sonar-web/src/main/js/apps/projects/filters/__tests__/__snapshots__/Filter-test.tsx.snap +++ b/server/sonar-web/src/main/js/apps/projects/filters/__tests__/__snapshots__/Filter-test.tsx.snap @@ -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 {}} diff --git a/server/sonar-web/src/main/js/apps/projects/filters/__tests__/__snapshots__/LanguagesFilter-test.tsx.snap b/server/sonar-web/src/main/js/apps/projects/filters/__tests__/__snapshots__/LanguagesFilter-test.tsx.snap index 38b72391839..3de7fafe747 100644 --- a/server/sonar-web/src/main/js/apps/projects/filters/__tests__/__snapshots__/LanguagesFilter-test.tsx.snap +++ b/server/sonar-web/src/main/js/apps/projects/filters/__tests__/__snapshots__/LanguagesFilter-test.tsx.snap @@ -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 {}} diff --git a/server/sonar-web/src/main/js/apps/projects/filters/__tests__/__snapshots__/TagsFilter-test.tsx.snap b/server/sonar-web/src/main/js/apps/projects/filters/__tests__/__snapshots__/TagsFilter-test.tsx.snap index 22f13a9b832..66d789e0a75 100644 --- a/server/sonar-web/src/main/js/apps/projects/filters/__tests__/__snapshots__/TagsFilter-test.tsx.snap +++ b/server/sonar-web/src/main/js/apps/projects/filters/__tests__/__snapshots__/TagsFilter-test.tsx.snap @@ -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 {}} diff --git a/server/sonar-web/src/main/js/apps/projectsManagement/BulkApplyTemplateModal.tsx b/server/sonar-web/src/main/js/apps/projectsManagement/BulkApplyTemplateModal.tsx index 3e81e28cb5c..f446bc626ef 100644 --- a/server/sonar-web/src/main/js/apps/projectsManagement/BulkApplyTemplateModal.tsx +++ b/server/sonar-web/src/main/js/apps/projectsManagement/BulkApplyTemplateModal.tsx @@ -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> diff --git a/server/sonar-web/src/main/js/apps/projectsManagement/ChangeVisibilityForm.tsx b/server/sonar-web/src/main/js/apps/projectsManagement/ChangeVisibilityForm.tsx index 148172bb3c4..b464112c980 100644 --- a/server/sonar-web/src/main/js/apps/projectsManagement/ChangeVisibilityForm.tsx +++ b/server/sonar-web/src/main/js/apps/projectsManagement/ChangeVisibilityForm.tsx @@ -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'; diff --git a/server/sonar-web/src/main/js/apps/projectsManagement/CreateProjectForm.tsx b/server/sonar-web/src/main/js/apps/projectsManagement/CreateProjectForm.tsx index 26c90c857b2..07352fda839 100644 --- a/server/sonar-web/src/main/js/apps/projectsManagement/CreateProjectForm.tsx +++ b/server/sonar-web/src/main/js/apps/projectsManagement/CreateProjectForm.tsx @@ -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'; diff --git a/server/sonar-web/src/main/js/apps/projectsManagement/DeleteModal.tsx b/server/sonar-web/src/main/js/apps/projectsManagement/DeleteModal.tsx index ae0640d1c1e..04ae04af7bc 100644 --- a/server/sonar-web/src/main/js/apps/projectsManagement/DeleteModal.tsx +++ b/server/sonar-web/src/main/js/apps/projectsManagement/DeleteModal.tsx @@ -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> ); diff --git a/server/sonar-web/src/main/js/apps/projectsManagement/Search.tsx b/server/sonar-web/src/main/js/apps/projectsManagement/Search.tsx index 94318dbae7c..2c9b0684090 100644 --- a/server/sonar-web/src/main/js/apps/projectsManagement/Search.tsx +++ b/server/sonar-web/src/main/js/apps/projectsManagement/Search.tsx @@ -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'; diff --git a/server/sonar-web/src/main/js/apps/projectsManagement/__tests__/__snapshots__/BulkApplyTemplateModal-test.tsx.snap b/server/sonar-web/src/main/js/apps/projectsManagement/__tests__/__snapshots__/BulkApplyTemplateModal-test.tsx.snap index 4cadeebb4a0..02eab945bf9 100644 --- a/server/sonar-web/src/main/js/apps/projectsManagement/__tests__/__snapshots__/BulkApplyTemplateModal-test.tsx.snap +++ b/server/sonar-web/src/main/js/apps/projectsManagement/__tests__/__snapshots__/BulkApplyTemplateModal-test.tsx.snap @@ -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" diff --git a/server/sonar-web/src/main/js/apps/projectsManagement/__tests__/__snapshots__/ChangeVisibilityForm-test.tsx.snap b/server/sonar-web/src/main/js/apps/projectsManagement/__tests__/__snapshots__/ChangeVisibilityForm-test.tsx.snap index d46e88f161f..2eaf4fb187d 100644 --- a/server/sonar-web/src/main/js/apps/projectsManagement/__tests__/__snapshots__/ChangeVisibilityForm-test.tsx.snap +++ b/server/sonar-web/src/main/js/apps/projectsManagement/__tests__/__snapshots__/ChangeVisibilityForm-test.tsx.snap @@ -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 diff --git a/server/sonar-web/src/main/js/apps/projectsManagement/__tests__/__snapshots__/CreateProjectForm-test.tsx.snap b/server/sonar-web/src/main/js/apps/projectsManagement/__tests__/__snapshots__/CreateProjectForm-test.tsx.snap index 7a9c5c62141..322cdd80dda 100644 --- a/server/sonar-web/src/main/js/apps/projectsManagement/__tests__/__snapshots__/CreateProjectForm-test.tsx.snap +++ b/server/sonar-web/src/main/js/apps/projectsManagement/__tests__/__snapshots__/CreateProjectForm-test.tsx.snap @@ -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" diff --git a/server/sonar-web/src/main/js/apps/projectsManagement/__tests__/__snapshots__/DeleteModal-test.tsx.snap b/server/sonar-web/src/main/js/apps/projectsManagement/__tests__/__snapshots__/DeleteModal-test.tsx.snap index 12d6e222a77..9e568644af0 100644 --- a/server/sonar-web/src/main/js/apps/projectsManagement/__tests__/__snapshots__/DeleteModal-test.tsx.snap +++ b/server/sonar-web/src/main/js/apps/projectsManagement/__tests__/__snapshots__/DeleteModal-test.tsx.snap @@ -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" diff --git a/server/sonar-web/src/main/js/apps/projectsManagement/__tests__/__snapshots__/Projects-test.tsx.snap b/server/sonar-web/src/main/js/apps/projectsManagement/__tests__/__snapshots__/Projects-test.tsx.snap index 2c60880eb28..6705b982c5a 100644 --- a/server/sonar-web/src/main/js/apps/projectsManagement/__tests__/__snapshots__/Projects-test.tsx.snap +++ b/server/sonar-web/src/main/js/apps/projectsManagement/__tests__/__snapshots__/Projects-test.tsx.snap @@ -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={ diff --git a/server/sonar-web/src/main/js/apps/projectsManagement/__tests__/__snapshots__/Search-test.tsx.snap b/server/sonar-web/src/main/js/apps/projectsManagement/__tests__/__snapshots__/Search-test.tsx.snap index cebeb62f2c9..5e8bdfddf0d 100644 --- a/server/sonar-web/src/main/js/apps/projectsManagement/__tests__/__snapshots__/Search-test.tsx.snap +++ b/server/sonar-web/src/main/js/apps/projectsManagement/__tests__/__snapshots__/Search-test.tsx.snap @@ -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={ diff --git a/server/sonar-web/src/main/js/apps/quality-gates/components/DetailsHeader.js b/server/sonar-web/src/main/js/apps/quality-gates/components/DetailsHeader.js index 6acb20708d8..073ce138746 100644 --- a/server/sonar-web/src/main/js/apps/quality-gates/components/DetailsHeader.js +++ b/server/sonar-web/src/main/js/apps/quality-gates/components/DetailsHeader.js @@ -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" diff --git a/server/sonar-web/src/main/js/apps/quality-profiles/changelog/ChangelogContainer.tsx b/server/sonar-web/src/main/js/apps/quality-profiles/changelog/ChangelogContainer.tsx index 9d05395586e..77329207900 100644 --- a/server/sonar-web/src/main/js/apps/quality-profiles/changelog/ChangelogContainer.tsx +++ b/server/sonar-web/src/main/js/apps/quality-profiles/changelog/ChangelogContainer.tsx @@ -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"> diff --git a/server/sonar-web/src/main/js/apps/quality-profiles/changelog/ParameterChange.tsx b/server/sonar-web/src/main/js/apps/quality-profiles/changelog/ParameterChange.tsx index e8d2ec75551..40e0fa89018 100644 --- a/server/sonar-web/src/main/js/apps/quality-profiles/changelog/ParameterChange.tsx +++ b/server/sonar-web/src/main/js/apps/quality-profiles/changelog/ParameterChange.tsx @@ -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> ); } diff --git a/server/sonar-web/src/main/js/apps/quality-profiles/compare/ComparisonContainer.tsx b/server/sonar-web/src/main/js/apps/quality-profiles/compare/ComparisonContainer.tsx index a71123b1927..173d1d0dbb3 100644 --- a/server/sonar-web/src/main/js/apps/quality-profiles/compare/ComparisonContainer.tsx +++ b/server/sonar-web/src/main/js/apps/quality-profiles/compare/ComparisonContainer.tsx @@ -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> ); } diff --git a/server/sonar-web/src/main/js/apps/quality-profiles/compare/ComparisonForm.tsx b/server/sonar-web/src/main/js/apps/quality-profiles/compare/ComparisonForm.tsx index bee2e948e07..384c0cf3525 100644 --- a/server/sonar-web/src/main/js/apps/quality-profiles/compare/ComparisonForm.tsx +++ b/server/sonar-web/src/main/js/apps/quality-profiles/compare/ComparisonForm.tsx @@ -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'; diff --git a/server/sonar-web/src/main/js/apps/quality-profiles/components/CopyProfileForm.tsx b/server/sonar-web/src/main/js/apps/quality-profiles/components/CopyProfileForm.tsx index 70f58f01ea6..963b09cd24e 100644 --- a/server/sonar-web/src/main/js/apps/quality-profiles/components/CopyProfileForm.tsx +++ b/server/sonar-web/src/main/js/apps/quality-profiles/components/CopyProfileForm.tsx @@ -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'; diff --git a/server/sonar-web/src/main/js/apps/quality-profiles/components/DeleteProfileForm.tsx b/server/sonar-web/src/main/js/apps/quality-profiles/components/DeleteProfileForm.tsx index 9a25f9c3007..99b85e7aad9 100644 --- a/server/sonar-web/src/main/js/apps/quality-profiles/components/DeleteProfileForm.tsx +++ b/server/sonar-web/src/main/js/apps/quality-profiles/components/DeleteProfileForm.tsx @@ -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'; diff --git a/server/sonar-web/src/main/js/apps/quality-profiles/components/ProfileActions.tsx b/server/sonar-web/src/main/js/apps/quality-profiles/components/ProfileActions.tsx index 164943c43c4..8906db09a3b 100644 --- a/server/sonar-web/src/main/js/apps/quality-profiles/components/ProfileActions.tsx +++ b/server/sonar-web/src/main/js/apps/quality-profiles/components/ProfileActions.tsx @@ -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 diff --git a/server/sonar-web/src/main/js/apps/quality-profiles/components/RenameProfileForm.tsx b/server/sonar-web/src/main/js/apps/quality-profiles/components/RenameProfileForm.tsx index d8c4951f02c..33cc3e4c9f8 100644 --- a/server/sonar-web/src/main/js/apps/quality-profiles/components/RenameProfileForm.tsx +++ b/server/sonar-web/src/main/js/apps/quality-profiles/components/RenameProfileForm.tsx @@ -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'; diff --git a/server/sonar-web/src/main/js/apps/quality-profiles/details/ChangeParentForm.tsx b/server/sonar-web/src/main/js/apps/quality-profiles/details/ChangeParentForm.tsx index 2327cd7acc0..204d6ff0348 100644 --- a/server/sonar-web/src/main/js/apps/quality-profiles/details/ChangeParentForm.tsx +++ b/server/sonar-web/src/main/js/apps/quality-profiles/details/ChangeParentForm.tsx @@ -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> diff --git a/server/sonar-web/src/main/js/apps/quality-profiles/details/ChangeProjectsForm.tsx b/server/sonar-web/src/main/js/apps/quality-profiles/details/ChangeProjectsForm.tsx index 3467fb01b19..6e1095c4eac 100644 --- a/server/sonar-web/src/main/js/apps/quality-profiles/details/ChangeProjectsForm.tsx +++ b/server/sonar-web/src/main/js/apps/quality-profiles/details/ChangeProjectsForm.tsx @@ -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'; diff --git a/server/sonar-web/src/main/js/apps/quality-profiles/details/ProfileDetails.tsx b/server/sonar-web/src/main/js/apps/quality-profiles/details/ProfileDetails.tsx index 524a148dadd..4ffed5d56cc 100644 --- a/server/sonar-web/src/main/js/apps/quality-profiles/details/ProfileDetails.tsx +++ b/server/sonar-web/src/main/js/apps/quality-profiles/details/ProfileDetails.tsx @@ -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} /> diff --git a/server/sonar-web/src/main/js/apps/quality-profiles/details/ProfileInheritance.tsx b/server/sonar-web/src/main/js/apps/quality-profiles/details/ProfileInheritance.tsx index 77f8a92a7f1..290ea8f3bb0 100644 --- a/server/sonar-web/src/main/js/apps/quality-profiles/details/ProfileInheritance.tsx +++ b/server/sonar-web/src/main/js/apps/quality-profiles/details/ProfileInheritance.tsx @@ -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> diff --git a/server/sonar-web/src/main/js/apps/quality-profiles/details/ProfilePermissionsForm.tsx b/server/sonar-web/src/main/js/apps/quality-profiles/details/ProfilePermissionsForm.tsx index 8d892127fc7..2431856c53c 100644 --- a/server/sonar-web/src/main/js/apps/quality-profiles/details/ProfilePermissionsForm.tsx +++ b/server/sonar-web/src/main/js/apps/quality-profiles/details/ProfilePermissionsForm.tsx @@ -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, diff --git a/server/sonar-web/src/main/js/apps/quality-profiles/details/ProfilePermissionsFormSelect.tsx b/server/sonar-web/src/main/js/apps/quality-profiles/details/ProfilePermissionsFormSelect.tsx index 911bf55cca4..fcf87c6cbe7 100644 --- a/server/sonar-web/src/main/js/apps/quality-profiles/details/ProfilePermissionsFormSelect.tsx +++ b/server/sonar-web/src/main/js/apps/quality-profiles/details/ProfilePermissionsFormSelect.tsx @@ -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'; diff --git a/server/sonar-web/src/main/js/apps/quality-profiles/details/ProfileProjects.tsx b/server/sonar-web/src/main/js/apps/quality-profiles/details/ProfileProjects.tsx index b809abd6a6f..9b1acd46c8e 100644 --- a/server/sonar-web/src/main/js/apps/quality-profiles/details/ProfileProjects.tsx +++ b/server/sonar-web/src/main/js/apps/quality-profiles/details/ProfileProjects.tsx @@ -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> diff --git a/server/sonar-web/src/main/js/apps/quality-profiles/details/ProfileRules.tsx b/server/sonar-web/src/main/js/apps/quality-profiles/details/ProfileRules.tsx index b2ab6732921..facde0a4a34 100644 --- a/server/sonar-web/src/main/js/apps/quality-profiles/details/ProfileRules.tsx +++ b/server/sonar-web/src/main/js/apps/quality-profiles/details/ProfileRules.tsx @@ -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> ); } diff --git a/server/sonar-web/src/main/js/apps/quality-profiles/details/__tests__/__snapshots__/ProfilePermissions-test.tsx.snap b/server/sonar-web/src/main/js/apps/quality-profiles/details/__tests__/__snapshots__/ProfilePermissions-test.tsx.snap index 806ca57c73c..9dd2c1d6c47 100644 --- a/server/sonar-web/src/main/js/apps/quality-profiles/details/__tests__/__snapshots__/ProfilePermissions-test.tsx.snap +++ b/server/sonar-web/src/main/js/apps/quality-profiles/details/__tests__/__snapshots__/ProfilePermissions-test.tsx.snap @@ -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 { diff --git a/server/sonar-web/src/main/js/apps/quality-profiles/details/__tests__/__snapshots__/ProfilePermissionsForm-test.tsx.snap b/server/sonar-web/src/main/js/apps/quality-profiles/details/__tests__/__snapshots__/ProfilePermissionsForm-test.tsx.snap index d8b0f2354d0..7acbdb7e005 100644 --- a/server/sonar-web/src/main/js/apps/quality-profiles/details/__tests__/__snapshots__/ProfilePermissionsForm-test.tsx.snap +++ b/server/sonar-web/src/main/js/apps/quality-profiles/details/__tests__/__snapshots__/ProfilePermissionsForm-test.tsx.snap @@ -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" diff --git a/server/sonar-web/src/main/js/apps/quality-profiles/details/__tests__/__snapshots__/ProfilePermissionsFormSelect-test.tsx.snap b/server/sonar-web/src/main/js/apps/quality-profiles/details/__tests__/__snapshots__/ProfilePermissionsFormSelect-test.tsx.snap index 10e1ea582f7..818fc5af342 100644 --- a/server/sonar-web/src/main/js/apps/quality-profiles/details/__tests__/__snapshots__/ProfilePermissionsFormSelect-test.tsx.snap +++ b/server/sonar-web/src/main/js/apps/quality-profiles/details/__tests__/__snapshots__/ProfilePermissionsFormSelect-test.tsx.snap @@ -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 []} diff --git a/server/sonar-web/src/main/js/apps/quality-profiles/details/__tests__/__snapshots__/ProfileRules-test.tsx.snap b/server/sonar-web/src/main/js/apps/quality-profiles/details/__tests__/__snapshots__/ProfileRules-test.tsx.snap index 315e117ffba..6d92fb9ab26 100644 --- a/server/sonar-web/src/main/js/apps/quality-profiles/details/__tests__/__snapshots__/ProfileRules-test.tsx.snap +++ b/server/sonar-web/src/main/js/apps/quality-profiles/details/__tests__/__snapshots__/ProfileRules-test.tsx.snap @@ -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} diff --git a/server/sonar-web/src/main/js/apps/quality-profiles/home/CreateProfileForm.tsx b/server/sonar-web/src/main/js/apps/quality-profiles/home/CreateProfileForm.tsx index ed4dbb325ac..a58a721f00e 100644 --- a/server/sonar-web/src/main/js/apps/quality-profiles/home/CreateProfileForm.tsx +++ b/server/sonar-web/src/main/js/apps/quality-profiles/home/CreateProfileForm.tsx @@ -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'; diff --git a/server/sonar-web/src/main/js/apps/quality-profiles/home/EvolutionRules.tsx b/server/sonar-web/src/main/js/apps/quality-profiles/home/EvolutionRules.tsx index 9ff9410a37c..bc4c085d89e 100644 --- a/server/sonar-web/src/main/js/apps/quality-profiles/home/EvolutionRules.tsx +++ b/server/sonar-web/src/main/js/apps/quality-profiles/home/EvolutionRules.tsx @@ -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> diff --git a/server/sonar-web/src/main/js/apps/quality-profiles/home/ProfilesList.tsx b/server/sonar-web/src/main/js/apps/quality-profiles/home/ProfilesList.tsx index 49674ef4d46..da5b8b61732 100644 --- a/server/sonar-web/src/main/js/apps/quality-profiles/home/ProfilesList.tsx +++ b/server/sonar-web/src/main/js/apps/quality-profiles/home/ProfilesList.tsx @@ -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> ); } diff --git a/server/sonar-web/src/main/js/apps/quality-profiles/home/RestoreProfileForm.tsx b/server/sonar-web/src/main/js/apps/quality-profiles/home/RestoreProfileForm.tsx index 021f5951af8..b63924e5a28 100644 --- a/server/sonar-web/src/main/js/apps/quality-profiles/home/RestoreProfileForm.tsx +++ b/server/sonar-web/src/main/js/apps/quality-profiles/home/RestoreProfileForm.tsx @@ -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"> diff --git a/server/sonar-web/src/main/js/apps/sessions/components/__tests__/LoginForm-test.tsx b/server/sonar-web/src/main/js/apps/sessions/components/__tests__/LoginForm-test.tsx index 29a5edfb341..2bebbea19e1 100644 --- a/server/sonar-web/src/main/js/apps/sessions/components/__tests__/LoginForm-test.tsx +++ b/server/sonar-web/src/main/js/apps/sessions/components/__tests__/LoginForm-test.tsx @@ -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(); diff --git a/server/sonar-web/src/main/js/apps/settings/components/Definition.js b/server/sonar-web/src/main/js/apps/settings/components/Definition.js index 5c1f7f0b45f..29250dd1a4f 100644 --- a/server/sonar-web/src/main/js/apps/settings/components/Definition.js +++ b/server/sonar-web/src/main/js/apps/settings/components/Definition.js @@ -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 diff --git a/server/sonar-web/src/main/js/apps/settings/encryption/EncryptionApp.js b/server/sonar-web/src/main/js/apps/settings/encryption/EncryptionApp.js index 7c9727e99f4..73557269222 100644 --- a/server/sonar-web/src/main/js/apps/settings/encryption/EncryptionApp.js +++ b/server/sonar-web/src/main/js/apps/settings/encryption/EncryptionApp.js @@ -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 diff --git a/server/sonar-web/src/main/js/apps/system/components/ChangeLogLevelForm.tsx b/server/sonar-web/src/main/js/apps/system/components/ChangeLogLevelForm.tsx index 045142edbf9..932f008b324 100644 --- a/server/sonar-web/src/main/js/apps/system/components/ChangeLogLevelForm.tsx +++ b/server/sonar-web/src/main/js/apps/system/components/ChangeLogLevelForm.tsx @@ -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'; diff --git a/server/sonar-web/src/main/js/apps/system/components/__tests__/__snapshots__/ChangeLogLevelForm-test.tsx.snap b/server/sonar-web/src/main/js/apps/system/components/__tests__/__snapshots__/ChangeLogLevelForm-test.tsx.snap index 26e85fbe63e..a3cd26a208b 100644 --- a/server/sonar-web/src/main/js/apps/system/components/__tests__/__snapshots__/ChangeLogLevelForm-test.tsx.snap +++ b/server/sonar-web/src/main/js/apps/system/components/__tests__/__snapshots__/ChangeLogLevelForm-test.tsx.snap @@ -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} diff --git a/server/sonar-web/src/main/js/apps/system/components/__tests__/__snapshots__/ClusterSysInfos-test.tsx.snap b/server/sonar-web/src/main/js/apps/system/components/__tests__/__snapshots__/ClusterSysInfos-test.tsx.snap index 6db92bdf46b..4cee8e00890 100644 --- a/server/sonar-web/src/main/js/apps/system/components/__tests__/__snapshots__/ClusterSysInfos-test.tsx.snap +++ b/server/sonar-web/src/main/js/apps/system/components/__tests__/__snapshots__/ClusterSysInfos-test.tsx.snap @@ -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} diff --git a/server/sonar-web/src/main/js/apps/system/components/__tests__/__snapshots__/StandaloneSysInfos-test.tsx.snap b/server/sonar-web/src/main/js/apps/system/components/__tests__/__snapshots__/StandaloneSysInfos-test.tsx.snap index ba562c42b3b..13877f72b86 100644 --- a/server/sonar-web/src/main/js/apps/system/components/__tests__/__snapshots__/StandaloneSysInfos-test.tsx.snap +++ b/server/sonar-web/src/main/js/apps/system/components/__tests__/__snapshots__/StandaloneSysInfos-test.tsx.snap @@ -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} diff --git a/server/sonar-web/src/main/js/apps/system/components/info-items/__tests__/__snapshots__/HealthCard-test.tsx.snap b/server/sonar-web/src/main/js/apps/system/components/info-items/__tests__/__snapshots__/HealthCard-test.tsx.snap index 77afaf39ea2..fe7c59a4286 100644 --- a/server/sonar-web/src/main/js/apps/system/components/info-items/__tests__/__snapshots__/HealthCard-test.tsx.snap +++ b/server/sonar-web/src/main/js/apps/system/components/info-items/__tests__/__snapshots__/HealthCard-test.tsx.snap @@ -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> diff --git a/server/sonar-web/src/main/js/apps/system/components/info-items/__tests__/__snapshots__/HealthItem-test.tsx.snap b/server/sonar-web/src/main/js/apps/system/components/info-items/__tests__/__snapshots__/HealthItem-test.tsx.snap index 81f4aa9ba6a..6b224445797 100644 --- a/server/sonar-web/src/main/js/apps/system/components/info-items/__tests__/__snapshots__/HealthItem-test.tsx.snap +++ b/server/sonar-web/src/main/js/apps/system/components/info-items/__tests__/__snapshots__/HealthItem-test.tsx.snap @@ -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" diff --git a/server/sonar-web/src/main/js/apps/system/components/info-items/__tests__/__snapshots__/Section-test.tsx.snap b/server/sonar-web/src/main/js/apps/system/components/info-items/__tests__/__snapshots__/Section-test.tsx.snap index 20fce92a9b7..ecbb9a4b5b3 100644 --- a/server/sonar-web/src/main/js/apps/system/components/info-items/__tests__/__snapshots__/Section-test.tsx.snap +++ b/server/sonar-web/src/main/js/apps/system/components/info-items/__tests__/__snapshots__/Section-test.tsx.snap @@ -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" > diff --git a/server/sonar-web/src/main/js/apps/system/components/info-items/__tests__/__snapshots__/SysInfoItem-test.tsx.snap b/server/sonar-web/src/main/js/apps/system/components/info-items/__tests__/__snapshots__/SysInfoItem-test.tsx.snap index b02b9854bdf..86c9310e1d7 100644 --- a/server/sonar-web/src/main/js/apps/system/components/info-items/__tests__/__snapshots__/SysInfoItem-test.tsx.snap +++ b/server/sonar-web/src/main/js/apps/system/components/info-items/__tests__/__snapshots__/SysInfoItem-test.tsx.snap @@ -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>, ] `; diff --git a/server/sonar-web/src/main/js/apps/system/components/system-upgrade/SystemUpgradeForm.tsx b/server/sonar-web/src/main/js/apps/system/components/system-upgrade/SystemUpgradeForm.tsx index 0c508a86706..d69ff53c19b 100644 --- a/server/sonar-web/src/main/js/apps/system/components/system-upgrade/SystemUpgradeForm.tsx +++ b/server/sonar-web/src/main/js/apps/system/components/system-upgrade/SystemUpgradeForm.tsx @@ -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'; diff --git a/server/sonar-web/src/main/js/apps/system/components/system-upgrade/SystemUpgradeIntermediate.tsx b/server/sonar-web/src/main/js/apps/system/components/system-upgrade/SystemUpgradeIntermediate.tsx index ccafec8a1aa..01d546ecdb1 100644 --- a/server/sonar-web/src/main/js/apps/system/components/system-upgrade/SystemUpgradeIntermediate.tsx +++ b/server/sonar-web/src/main/js/apps/system/components/system-upgrade/SystemUpgradeIntermediate.tsx @@ -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, diff --git a/server/sonar-web/src/main/js/apps/system/components/system-upgrade/__tests__/__snapshots__/SystemUpgradeForm-test.tsx.snap b/server/sonar-web/src/main/js/apps/system/components/system-upgrade/__tests__/__snapshots__/SystemUpgradeForm-test.tsx.snap index 0f84689c104..86dfdda674a 100644 --- a/server/sonar-web/src/main/js/apps/system/components/system-upgrade/__tests__/__snapshots__/SystemUpgradeForm-test.tsx.snap +++ b/server/sonar-web/src/main/js/apps/system/components/system-upgrade/__tests__/__snapshots__/SystemUpgradeForm-test.tsx.snap @@ -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 { diff --git a/server/sonar-web/src/main/js/apps/system/components/system-upgrade/__tests__/__snapshots__/SystemUpgradeIntermediate-test.tsx.snap b/server/sonar-web/src/main/js/apps/system/components/system-upgrade/__tests__/__snapshots__/SystemUpgradeIntermediate-test.tsx.snap index 9217e8cb640..80a70b6f48e 100644 --- a/server/sonar-web/src/main/js/apps/system/components/system-upgrade/__tests__/__snapshots__/SystemUpgradeIntermediate-test.tsx.snap +++ b/server/sonar-web/src/main/js/apps/system/components/system-upgrade/__tests__/__snapshots__/SystemUpgradeIntermediate-test.tsx.snap @@ -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" diff --git a/server/sonar-web/src/main/js/apps/system/components/system-upgrade/__tests__/__snapshots__/SystemUpgradeItem-test.tsx.snap b/server/sonar-web/src/main/js/apps/system/components/system-upgrade/__tests__/__snapshots__/SystemUpgradeItem-test.tsx.snap index 15f11c439b6..e6e4afad432 100644 --- a/server/sonar-web/src/main/js/apps/system/components/system-upgrade/__tests__/__snapshots__/SystemUpgradeItem-test.tsx.snap +++ b/server/sonar-web/src/main/js/apps/system/components/system-upgrade/__tests__/__snapshots__/SystemUpgradeItem-test.tsx.snap @@ -13,7 +13,7 @@ exports[`should display correctly 1`] = ` "version": <b> SonarQube 5.6.7 - </b>, + </b>, } } /> diff --git a/server/sonar-web/src/main/js/apps/system/utils.ts b/server/sonar-web/src/main/js/apps/system/utils.ts index 7d6ccca5a0d..613dccb9a93 100644 --- a/server/sonar-web/src/main/js/apps/system/utils.ts +++ b/server/sonar-web/src/main/js/apps/system/utils.ts @@ -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 }; } diff --git a/server/sonar-web/src/main/js/apps/tutorials/onboarding/OrganizationStep.js b/server/sonar-web/src/main/js/apps/tutorials/onboarding/OrganizationStep.js index 116b4c7d8c4..c890c3d9b38 100644 --- a/server/sonar-web/src/main/js/apps/tutorials/onboarding/OrganizationStep.js +++ b/server/sonar-web/src/main/js/apps/tutorials/onboarding/OrganizationStep.js @@ -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> ); }; diff --git a/server/sonar-web/src/main/js/apps/tutorials/onboarding/__tests__/__snapshots__/Onboarding-test.js.snap b/server/sonar-web/src/main/js/apps/tutorials/onboarding/__tests__/__snapshots__/Onboarding-test.js.snap index 55409e86250..9c24b5b42a4 100644 --- a/server/sonar-web/src/main/js/apps/tutorials/onboarding/__tests__/__snapshots__/Onboarding-test.js.snap +++ b/server/sonar-web/src/main/js/apps/tutorials/onboarding/__tests__/__snapshots__/Onboarding-test.js.snap @@ -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" diff --git a/server/sonar-web/src/main/js/apps/tutorials/onboarding/commands/__tests__/__snapshots__/Command-test.js.snap b/server/sonar-web/src/main/js/apps/tutorials/onboarding/commands/__tests__/__snapshots__/Command-test.js.snap index 9ce1c887f5f..f456088c24a 100644 --- a/server/sonar-web/src/main/js/apps/tutorials/onboarding/commands/__tests__/__snapshots__/Command-test.js.snap +++ b/server/sonar-web/src/main/js/apps/tutorials/onboarding/commands/__tests__/__snapshots__/Command-test.js.snap @@ -6,11 +6,11 @@ exports[`renders correctly 1`] = ` > <pre> foo - bar +bar </pre> <button data-clipboard-text="foo - bar" +bar" > copy </button> diff --git a/server/sonar-web/src/main/js/apps/tutorials/onboarding/commands/__tests__/__snapshots__/JavaGradle-test.js.snap b/server/sonar-web/src/main/js/apps/tutorials/onboarding/commands/__tests__/__snapshots__/JavaGradle-test.js.snap index 559864e0d90..9361ccc33a3 100644 --- a/server/sonar-web/src/main/js/apps/tutorials/onboarding/commands/__tests__/__snapshots__/JavaGradle-test.js.snap +++ b/server/sonar-web/src/main/js/apps/tutorials/onboarding/commands/__tests__/__snapshots__/JavaGradle-test.js.snap @@ -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" diff --git a/server/sonar-web/src/main/js/apps/users/components/UsersSelectSearchValue.js b/server/sonar-web/src/main/js/apps/users/components/UsersSelectSearchValue.js index a420dad822c..4354b75b1e0 100644 --- a/server/sonar-web/src/main/js/apps/users/components/UsersSelectSearchValue.js +++ b/server/sonar-web/src/main/js/apps/users/components/UsersSelectSearchValue.js @@ -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> ); } diff --git a/server/sonar-web/src/main/js/apps/users/components/__tests__/__snapshots__/UsersSelectSearch-test.js.snap b/server/sonar-web/src/main/js/apps/users/components/__tests__/__snapshots__/UsersSelectSearch-test.js.snap index 483f49d3ea0..900354c4376 100644 --- a/server/sonar-web/src/main/js/apps/users/components/__tests__/__snapshots__/UsersSelectSearch-test.js.snap +++ b/server/sonar-web/src/main/js/apps/users/components/__tests__/__snapshots__/UsersSelectSearch-test.js.snap @@ -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 [ diff --git a/server/sonar-web/src/main/js/apps/web-api/components/Action.tsx b/server/sonar-web/src/main/js/apps/web-api/components/Action.tsx index 06bce67949d..f0b5eed39e6 100644 --- a/server/sonar-web/src/main/js/apps/web-api/components/Action.tsx +++ b/server/sonar-web/src/main/js/apps/web-api/components/Action.tsx @@ -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> diff --git a/server/sonar-web/src/main/js/apps/web-api/components/Params.tsx b/server/sonar-web/src/main/js/apps/web-api/components/Params.tsx index 9f32210fc63..4dbacf06bd0 100644 --- a/server/sonar-web/src/main/js/apps/web-api/components/Params.tsx +++ b/server/sonar-web/src/main/js/apps/web-api/components/Params.tsx @@ -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'} diff --git a/server/sonar-web/src/main/js/apps/web-api/components/__tests__/__snapshots__/ActionChangelog-test.tsx.snap b/server/sonar-web/src/main/js/apps/web-api/components/__tests__/__snapshots__/ActionChangelog-test.tsx.snap index 8c3eb7ace6d..b86b69c795d 100644 --- a/server/sonar-web/src/main/js/apps/web-api/components/__tests__/__snapshots__/ActionChangelog-test.tsx.snap +++ b/server/sonar-web/src/main/js/apps/web-api/components/__tests__/__snapshots__/ActionChangelog-test.tsx.snap @@ -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" diff --git a/server/sonar-web/src/main/js/apps/web-api/components/__tests__/__snapshots__/Domain-test.tsx.snap b/server/sonar-web/src/main/js/apps/web-api/components/__tests__/__snapshots__/Domain-test.tsx.snap index e1c93d26f4a..2bed8feb6db 100644 --- a/server/sonar-web/src/main/js/apps/web-api/components/__tests__/__snapshots__/Domain-test.tsx.snap +++ b/server/sonar-web/src/main/js/apps/web-api/components/__tests__/__snapshots__/Domain-test.tsx.snap @@ -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} /> diff --git a/server/sonar-web/src/main/js/apps/web-api/components/__tests__/__snapshots__/Menu-test.tsx.snap b/server/sonar-web/src/main/js/apps/web-api/components/__tests__/__snapshots__/Menu-test.tsx.snap index 34329aa2fbf..87783ec3cf9 100644 --- a/server/sonar-web/src/main/js/apps/web-api/components/__tests__/__snapshots__/Menu-test.tsx.snap +++ b/server/sonar-web/src/main/js/apps/web-api/components/__tests__/__snapshots__/Menu-test.tsx.snap @@ -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" diff --git a/server/sonar-web/src/main/js/apps/web-api/components/__tests__/__snapshots__/Params-test.tsx.snap b/server/sonar-web/src/main/js/apps/web-api/components/__tests__/__snapshots__/Params-test.tsx.snap index c6a75522309..5d33f4f9613 100644 --- a/server/sonar-web/src/main/js/apps/web-api/components/__tests__/__snapshots__/Params-test.tsx.snap +++ b/server/sonar-web/src/main/js/apps/web-api/components/__tests__/__snapshots__/Params-test.tsx.snap @@ -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={ diff --git a/server/sonar-web/src/main/js/components/SourceViewer/components/Line.js b/server/sonar-web/src/main/js/components/SourceViewer/components/Line.js index 5da88260309..1f6aaeeef25 100644 --- a/server/sonar-web/src/main/js/components/SourceViewer/components/Line.js +++ b/server/sonar-web/src/main/js/components/SourceViewer/components/Line.js @@ -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} diff --git a/server/sonar-web/src/main/js/components/SourceViewer/components/LineCode.js b/server/sonar-web/src/main/js/components/SourceViewer/components/LineCode.js index f3aea8272c9..a71c07d8002 100644 --- a/server/sonar-web/src/main/js/components/SourceViewer/components/LineCode.js +++ b/server/sonar-web/src/main/js/components/SourceViewer/components/LineCode.js @@ -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> ); } diff --git a/server/sonar-web/src/main/js/components/SourceViewer/components/__tests__/__snapshots__/LineCode-test.js.snap b/server/sonar-web/src/main/js/components/SourceViewer/components/__tests__/__snapshots__/LineCode-test.js.snap index 9f6da3b0b4b..2cfc320db91 100644 --- a/server/sonar-web/src/main/js/components/SourceViewer/components/__tests__/__snapshots__/LineCode-test.js.snap +++ b/server/sonar-web/src/main/js/components/SourceViewer/components/__tests__/__snapshots__/LineCode-test.js.snap @@ -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> diff --git a/server/sonar-web/src/main/js/components/SourceViewer/components/__tests__/__snapshots__/LineDuplicationBlock-test.js.snap b/server/sonar-web/src/main/js/components/SourceViewer/components/__tests__/__snapshots__/LineDuplicationBlock-test.js.snap index 96f320c4382..c8a4ee23981 100644 --- a/server/sonar-web/src/main/js/components/SourceViewer/components/__tests__/__snapshots__/LineDuplicationBlock-test.js.snap +++ b/server/sonar-web/src/main/js/components/SourceViewer/components/__tests__/__snapshots__/LineDuplicationBlock-test.js.snap @@ -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" diff --git a/server/sonar-web/src/main/js/components/SourceViewer/components/__tests__/__snapshots__/LineIssuesList-test.js.snap b/server/sonar-web/src/main/js/components/SourceViewer/components/__tests__/__snapshots__/LineIssuesList-test.js.snap index 6bd44307b2f..1bae77158dd 100644 --- a/server/sonar-web/src/main/js/components/SourceViewer/components/__tests__/__snapshots__/LineIssuesList-test.js.snap +++ b/server/sonar-web/src/main/js/components/SourceViewer/components/__tests__/__snapshots__/LineIssuesList-test.js.snap @@ -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} diff --git a/server/sonar-web/src/main/js/components/charts/__tests__/__snapshots__/BubbleChart-test.js.snap b/server/sonar-web/src/main/js/components/charts/__tests__/__snapshots__/BubbleChart-test.js.snap index 0c35f6f5ce5..e5854e7792f 100644 --- a/server/sonar-web/src/main/js/components/charts/__tests__/__snapshots__/BubbleChart-test.js.snap +++ b/server/sonar-web/src/main/js/components/charts/__tests__/__snapshots__/BubbleChart-test.js.snap @@ -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} diff --git a/server/sonar-web/src/main/js/components/charts/__tests__/__snapshots__/Histogram-test.tsx.snap b/server/sonar-web/src/main/js/components/charts/__tests__/__snapshots__/Histogram-test.tsx.snap index e7885c89cad..04aacd7b139 100644 --- a/server/sonar-web/src/main/js/components/charts/__tests__/__snapshots__/Histogram-test.tsx.snap +++ b/server/sonar-web/src/main/js/components/charts/__tests__/__snapshots__/Histogram-test.tsx.snap @@ -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" > diff --git a/server/sonar-web/src/main/js/components/common/RestartForm.tsx b/server/sonar-web/src/main/js/components/common/RestartForm.tsx index 98f4301ef39..ea72ec34478 100644 --- a/server/sonar-web/src/main/js/components/common/RestartForm.tsx +++ b/server/sonar-web/src/main/js/components/common/RestartForm.tsx @@ -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> diff --git a/server/sonar-web/src/main/js/components/common/__tests__/__snapshots__/MultiSelect-test.js.snap b/server/sonar-web/src/main/js/components/common/__tests__/__snapshots__/MultiSelect-test.js.snap index e9a5eca76b5..2fa03425675 100644 --- a/server/sonar-web/src/main/js/components/common/__tests__/__snapshots__/MultiSelect-test.js.snap +++ b/server/sonar-web/src/main/js/components/common/__tests__/__snapshots__/MultiSelect-test.js.snap @@ -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} diff --git a/server/sonar-web/src/main/js/components/common/__tests__/__snapshots__/SelectList-test.js.snap b/server/sonar-web/src/main/js/components/common/__tests__/__snapshots__/SelectList-test.js.snap index 29ae52e453a..c1c91a2ba8e 100644 --- a/server/sonar-web/src/main/js/components/common/__tests__/__snapshots__/SelectList-test.js.snap +++ b/server/sonar-web/src/main/js/components/common/__tests__/__snapshots__/SelectList-test.js.snap @@ -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]} /> diff --git a/server/sonar-web/src/main/js/components/controls/DateInput.tsx b/server/sonar-web/src/main/js/components/controls/DateInput.tsx index 265643354e6..1bb65c64457 100644 --- a/server/sonar-web/src/main/js/components/controls/DateInput.tsx +++ b/server/sonar-web/src/main/js/components/controls/DateInput.tsx @@ -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)}> diff --git a/server/sonar-web/src/main/js/components/controls/SearchSelect.js b/server/sonar-web/src/main/js/components/controls/SearchSelect.js index 39ca6539c59..496f039ca82 100644 --- a/server/sonar-web/src/main/js/components/controls/SearchSelect.js +++ b/server/sonar-web/src/main/js/components/controls/SearchSelect.js @@ -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} diff --git a/server/sonar-web/src/main/js/components/controls/SimpleModal.tsx b/server/sonar-web/src/main/js/components/controls/SimpleModal.tsx index 825ace80a34..057fdf5b323 100644 --- a/server/sonar-web/src/main/js/components/controls/SimpleModal.tsx +++ b/server/sonar-web/src/main/js/components/controls/SimpleModal.tsx @@ -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; diff --git a/server/sonar-web/src/main/js/components/controls/__tests__/__snapshots__/RadioToggle-test.tsx.snap b/server/sonar-web/src/main/js/components/controls/__tests__/__snapshots__/RadioToggle-test.tsx.snap index c0aa0d1ab89..d9c8fa8d1f9 100644 --- a/server/sonar-web/src/main/js/components/controls/__tests__/__snapshots__/RadioToggle-test.tsx.snap +++ b/server/sonar-web/src/main/js/components/controls/__tests__/__snapshots__/RadioToggle-test.tsx.snap @@ -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" diff --git a/server/sonar-web/src/main/js/components/controls/__tests__/__snapshots__/SearchSelect-test.js.snap b/server/sonar-web/src/main/js/components/controls/__tests__/__snapshots__/SearchSelect-test.js.snap index d3ea2edb7b0..7013269949a 100644 --- a/server/sonar-web/src/main/js/components/controls/__tests__/__snapshots__/SearchSelect-test.js.snap +++ b/server/sonar-web/src/main/js/components/controls/__tests__/__snapshots__/SearchSelect-test.js.snap @@ -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} diff --git a/server/sonar-web/src/main/js/components/controls/__tests__/__snapshots__/SimpleModal-test.tsx.snap b/server/sonar-web/src/main/js/components/controls/__tests__/__snapshots__/SimpleModal-test.tsx.snap index 4778ef47dbc..ea433bf1532 100644 --- a/server/sonar-web/src/main/js/components/controls/__tests__/__snapshots__/SimpleModal-test.tsx.snap +++ b/server/sonar-web/src/main/js/components/controls/__tests__/__snapshots__/SimpleModal-test.tsx.snap @@ -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} diff --git a/server/sonar-web/src/main/js/components/issue/IssueView.js b/server/sonar-web/src/main/js/components/issue/IssueView.js index 5141e4d8032..6b8b4fd94c8 100644 --- a/server/sonar-web/src/main/js/components/issue/IssueView.js +++ b/server/sonar-web/src/main/js/components/issue/IssueView.js @@ -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" /> diff --git a/server/sonar-web/src/main/js/components/issue/popups/SimilarIssuesPopup.js b/server/sonar-web/src/main/js/components/issue/popups/SimilarIssuesPopup.js index fa66812411b..bb80c21b786 100644 --- a/server/sonar-web/src/main/js/components/issue/popups/SimilarIssuesPopup.js +++ b/server/sonar-web/src/main/js/components/issue/popups/SimilarIssuesPopup.js @@ -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"> diff --git a/server/sonar-web/src/main/js/components/issue/popups/__tests__/__snapshots__/ChangelogPopup-test.js.snap b/server/sonar-web/src/main/js/components/issue/popups/__tests__/__snapshots__/ChangelogPopup-test.js.snap index 1e649d62abb..65cade73cf8 100644 --- a/server/sonar-web/src/main/js/components/issue/popups/__tests__/__snapshots__/ChangelogPopup-test.js.snap +++ b/server/sonar-web/src/main/js/components/issue/popups/__tests__/__snapshots__/ChangelogPopup-test.js.snap @@ -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> diff --git a/server/sonar-web/src/main/js/components/issue/popups/__tests__/__snapshots__/SetSeverityPopup-test.js.snap b/server/sonar-web/src/main/js/components/issue/popups/__tests__/__snapshots__/SetSeverityPopup-test.js.snap index 8d0995dce23..bc4c8e02c7f 100644 --- a/server/sonar-web/src/main/js/components/issue/popups/__tests__/__snapshots__/SetSeverityPopup-test.js.snap +++ b/server/sonar-web/src/main/js/components/issue/popups/__tests__/__snapshots__/SetSeverityPopup-test.js.snap @@ -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" diff --git a/server/sonar-web/src/main/js/components/issue/popups/__tests__/__snapshots__/SetTransitionPopup-test.js.snap b/server/sonar-web/src/main/js/components/issue/popups/__tests__/__snapshots__/SetTransitionPopup-test.js.snap index 249ca05ae77..4c67a6da4ec 100644 --- a/server/sonar-web/src/main/js/components/issue/popups/__tests__/__snapshots__/SetTransitionPopup-test.js.snap +++ b/server/sonar-web/src/main/js/components/issue/popups/__tests__/__snapshots__/SetTransitionPopup-test.js.snap @@ -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 diff --git a/server/sonar-web/src/main/js/components/issue/popups/__tests__/__snapshots__/SetTypePopup-test.js.snap b/server/sonar-web/src/main/js/components/issue/popups/__tests__/__snapshots__/SetTypePopup-test.js.snap index fb727840075..6313549adb2 100644 --- a/server/sonar-web/src/main/js/components/issue/popups/__tests__/__snapshots__/SetTypePopup-test.js.snap +++ b/server/sonar-web/src/main/js/components/issue/popups/__tests__/__snapshots__/SetTypePopup-test.js.snap @@ -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" diff --git a/server/sonar-web/src/main/js/components/preview-graph/PreviewGraph.js b/server/sonar-web/src/main/js/components/preview-graph/PreviewGraph.js index c7544325517..8597c393103 100644 --- a/server/sonar-web/src/main/js/components/preview-graph/PreviewGraph.js +++ b/server/sonar-web/src/main/js/components/preview-graph/PreviewGraph.js @@ -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> diff --git a/server/sonar-web/src/main/js/components/preview-graph/__tests__/__snapshots__/PreviewGraphTooltips-test.js.snap b/server/sonar-web/src/main/js/components/preview-graph/__tests__/__snapshots__/PreviewGraphTooltips-test.js.snap index 64d9d39a3e4..bd558730f26 100644 --- a/server/sonar-web/src/main/js/components/preview-graph/__tests__/__snapshots__/PreviewGraphTooltips-test.js.snap +++ b/server/sonar-web/src/main/js/components/preview-graph/__tests__/__snapshots__/PreviewGraphTooltips-test.js.snap @@ -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" diff --git a/server/sonar-web/src/main/js/helpers/urls.ts b/server/sonar-web/src/main/js/helpers/urls.ts index aae5afb93bc..5de3cb928fb 100644 --- a/server/sonar-web/src/main/js/helpers/urls.ts +++ b/server/sonar-web/src/main/js/helpers/urls.ts @@ -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 { diff --git a/server/sonar-web/src/main/js/store/utils/configureStore.js b/server/sonar-web/src/main/js/store/utils/configureStore.js index 8c5e2d8150b..e356fffe796 100644 --- a/server/sonar-web/src/main/js/store/utils/configureStore.js +++ b/server/sonar-web/src/main/js/store/utils/configureStore.js @@ -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); diff --git a/server/sonar-web/yarn.lock b/server/sonar-web/yarn.lock index af0001fc633..c164d2c3872 100644 --- a/server/sonar-web/yarn.lock +++ b/server/sonar-web/yarn.lock @@ -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" @@ -44,25 +37,25 @@ "@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" @@ -89,19 +82,19 @@ 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" @@ -113,9 +106,9 @@ "@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" |