diff --git a/superset/assets/.babelrc b/superset/assets/.babelrc
index bb026bc1b36c2..0c426be741d9a 100644
--- a/superset/assets/.babelrc
+++ b/superset/assets/.babelrc
@@ -1,4 +1,4 @@
{
"presets" : ["airbnb", "react", "env"],
- "plugins": ["syntax-dynamic-import"],
+ "plugins": ["syntax-dynamic-import", "react-hot-loader/babel"]
}
diff --git a/superset/assets/package.json b/superset/assets/package.json
index c01a74ab4eb03..f767d70e550e9 100644
--- a/superset/assets/package.json
+++ b/superset/assets/package.json
@@ -102,6 +102,7 @@
"react-dnd-html5-backend": "^2.5.4",
"react-dom": "^15.6.2",
"react-gravatar": "^2.6.1",
+ "react-hot-loader": "^4.3.6",
"react-map-gl": "^3.0.4",
"react-markdown": "^3.3.0",
"react-redux": "^5.0.2",
diff --git a/superset/assets/spec/javascripts/welcome/App_spec.jsx b/superset/assets/spec/javascripts/welcome/Welcome_spec.jsx
similarity index 71%
rename from superset/assets/spec/javascripts/welcome/App_spec.jsx
rename to superset/assets/spec/javascripts/welcome/Welcome_spec.jsx
index 46c6fdb90600f..a0a3982608237 100644
--- a/superset/assets/spec/javascripts/welcome/App_spec.jsx
+++ b/superset/assets/spec/javascripts/welcome/Welcome_spec.jsx
@@ -4,17 +4,17 @@ import { shallow } from 'enzyme';
import { describe, it } from 'mocha';
import { expect } from 'chai';
-import App from '../../../src/welcome/App';
+import Welcome from '../../../src/welcome/Welcome';
-describe('App', () => {
+describe('Welcome', () => {
const mockedProps = {};
it('is valid', () => {
expect(
- React.isValidElement(),
+ React.isValidElement(),
).to.equal(true);
});
it('renders 4 Tab, Panel, and Row components', () => {
- const wrapper = shallow();
+ const wrapper = shallow();
expect(wrapper.find(Tab)).to.have.length(3);
expect(wrapper.find(Panel)).to.have.length(3);
expect(wrapper.find(Row)).to.have.length(3);
diff --git a/superset/assets/src/SqlLab/App.jsx b/superset/assets/src/SqlLab/App.jsx
new file mode 100644
index 0000000000000..f86966a1c3f69
--- /dev/null
+++ b/superset/assets/src/SqlLab/App.jsx
@@ -0,0 +1,45 @@
+import React from 'react';
+import { createStore, compose, applyMiddleware } from 'redux';
+import { Provider } from 'react-redux';
+import thunkMiddleware from 'redux-thunk';
+import { hot } from 'react-hot-loader';
+
+import getInitialState from './getInitialState';
+import rootReducer from './reducers';
+import { initEnhancer } from '../reduxUtils';
+import { initJQueryAjax } from '../modules/utils';
+import App from './components/App';
+import { appSetup } from '../common';
+
+import './main.less';
+import '../../stylesheets/reactable-pagination.css';
+import '../components/FilterableTable/FilterableTableStyles.css';
+
+appSetup();
+initJQueryAjax();
+
+const appContainer = document.getElementById('app');
+const bootstrapData = JSON.parse(appContainer.getAttribute('data-bootstrap'));
+const state = getInitialState(bootstrapData);
+
+const store = createStore(
+ rootReducer,
+ state,
+ compose(
+ applyMiddleware(thunkMiddleware),
+ initEnhancer(),
+ ),
+);
+
+// jquery hack to highlight the navbar menu
+$('a:contains("SQL Lab")')
+ .parent()
+ .addClass('active');
+
+const Application = () => (
+
+
+
+);
+
+export default hot(module)(Application);
diff --git a/superset/assets/src/SqlLab/index.jsx b/superset/assets/src/SqlLab/index.jsx
index 24983de9bc47c..3088170f013dd 100644
--- a/superset/assets/src/SqlLab/index.jsx
+++ b/superset/assets/src/SqlLab/index.jsx
@@ -1,44 +1,8 @@
import React from 'react';
-import { render } from 'react-dom';
-import { createStore, compose, applyMiddleware } from 'redux';
-import { Provider } from 'react-redux';
-import thunkMiddleware from 'redux-thunk';
+import ReactDOM from 'react-dom';
+import App from './App';
-import getInitialState from './getInitialState';
-import rootReducer from './reducers';
-import { initEnhancer } from '../reduxUtils';
-import { initJQueryAjax } from '../modules/utils';
-import App from './components/App';
-import { appSetup } from '../common';
-
-import './main.less';
-import '../../stylesheets/reactable-pagination.css';
-import '../components/FilterableTable/FilterableTableStyles.css';
-
-appSetup();
-initJQueryAjax();
-
-const appContainer = document.getElementById('app');
-const bootstrapData = JSON.parse(appContainer.getAttribute('data-bootstrap'));
-const state = getInitialState(bootstrapData);
-
-const store = createStore(
- rootReducer,
- state,
- compose(
- applyMiddleware(thunkMiddleware),
- initEnhancer(),
- ),
-);
-
-// jquery hack to highlight the navbar menu
-$('a:contains("SQL Lab")')
- .parent()
- .addClass('active');
-
-render(
-
-
- ,
- appContainer,
+ReactDOM.render(
+ ,
+ document.getElementById('app'),
);
diff --git a/superset/assets/src/addSlice/App.jsx b/superset/assets/src/addSlice/App.jsx
new file mode 100644
index 0000000000000..56469cc1d95eb
--- /dev/null
+++ b/superset/assets/src/addSlice/App.jsx
@@ -0,0 +1,15 @@
+import React from 'react';
+import { hot } from 'react-hot-loader';
+import { appSetup } from '../common';
+import AddSliceContainer from './AddSliceContainer';
+
+appSetup();
+
+const addSliceContainer = document.getElementById('js-add-slice-container');
+const bootstrapData = JSON.parse(addSliceContainer.getAttribute('data-bootstrap'));
+
+const App = () => (
+
+);
+
+export default hot(module)(App);
diff --git a/superset/assets/src/addSlice/index.jsx b/superset/assets/src/addSlice/index.jsx
index f83c2d5272a49..6bf2decfe6c34 100644
--- a/superset/assets/src/addSlice/index.jsx
+++ b/superset/assets/src/addSlice/index.jsx
@@ -1,14 +1,8 @@
import React from 'react';
import ReactDOM from 'react-dom';
-import { appSetup } from '../common';
-import AddSliceContainer from './AddSliceContainer';
-
-appSetup();
-
-const addSliceContainer = document.getElementById('js-add-slice-container');
-const bootstrapData = JSON.parse(addSliceContainer.getAttribute('data-bootstrap'));
+import App from './App';
ReactDOM.render(
- ,
- addSliceContainer,
+ ,
+ document.getElementById('js-add-slice-container'),
);
diff --git a/superset/assets/src/dashboard/App.jsx b/superset/assets/src/dashboard/App.jsx
new file mode 100644
index 0000000000000..1167e9bfa6b3b
--- /dev/null
+++ b/superset/assets/src/dashboard/App.jsx
@@ -0,0 +1,36 @@
+import React from 'react';
+import thunk from 'redux-thunk';
+import { createStore, applyMiddleware, compose } from 'redux';
+import { Provider } from 'react-redux';
+import { hot } from 'react-hot-loader';
+
+import { initEnhancer } from '../reduxUtils';
+import { appSetup } from '../common';
+import { initJQueryAjax } from '../modules/utils';
+import DashboardContainer from './containers/Dashboard';
+import getInitialState from './reducers/getInitialState';
+import rootReducer from './reducers/index';
+
+appSetup();
+initJQueryAjax();
+
+const appContainer = document.getElementById('app');
+const bootstrapData = JSON.parse(appContainer.getAttribute('data-bootstrap'));
+const initState = getInitialState(bootstrapData);
+
+const store = createStore(
+ rootReducer,
+ initState,
+ compose(
+ applyMiddleware(thunk),
+ initEnhancer(false),
+ ),
+);
+
+const App = () => (
+
+
+
+);
+
+export default hot(module)(App);
diff --git a/superset/assets/src/dashboard/index.jsx b/superset/assets/src/dashboard/index.jsx
index e0e98301a76a4..a22f17594a2b3 100644
--- a/superset/assets/src/dashboard/index.jsx
+++ b/superset/assets/src/dashboard/index.jsx
@@ -1,35 +1,5 @@
import React from 'react';
import ReactDOM from 'react-dom';
-import { createStore, applyMiddleware, compose } from 'redux';
-import { Provider } from 'react-redux';
-import thunk from 'redux-thunk';
+import App from './App';
-import { initEnhancer } from '../reduxUtils';
-import { appSetup } from '../common';
-import { initJQueryAjax } from '../modules/utils';
-import DashboardContainer from './containers/Dashboard';
-import getInitialState from './reducers/getInitialState';
-import rootReducer from './reducers/index';
-
-appSetup();
-initJQueryAjax();
-
-const appContainer = document.getElementById('app');
-const bootstrapData = JSON.parse(appContainer.getAttribute('data-bootstrap'));
-const initState = getInitialState(bootstrapData);
-
-const store = createStore(
- rootReducer,
- initState,
- compose(
- applyMiddleware(thunk),
- initEnhancer(false),
- ),
-);
-
-ReactDOM.render(
-
-
- ,
- appContainer,
-);
+ReactDOM.render(, document.getElementById('app'));
diff --git a/superset/assets/src/explore/App.jsx b/superset/assets/src/explore/App.jsx
new file mode 100644
index 0000000000000..2f279897754a1
--- /dev/null
+++ b/superset/assets/src/explore/App.jsx
@@ -0,0 +1,92 @@
+/* eslint no-undef: 2 */
+import React from 'react';
+import { hot } from 'react-hot-loader';
+import { createStore, applyMiddleware, compose } from 'redux';
+import { Provider } from 'react-redux';
+import thunk from 'redux-thunk';
+
+import shortid from 'shortid';
+import { now } from '../modules/dates';
+import { initEnhancer } from '../reduxUtils';
+import { getChartKey } from './exploreUtils';
+import ToastPresenter from '../messageToasts/containers/ToastPresenter';
+import { getControlsState, getFormDataFromControls } from './store';
+import { initJQueryAjax } from '../modules/utils';
+import ExploreViewContainer from './components/ExploreViewContainer';
+import rootReducer from './reducers/index';
+import getToastsFromPyFlashMessages from '../messageToasts/utils/getToastsFromPyFlashMessages';
+
+import { appSetup } from '../common';
+import './main.css';
+import '../../stylesheets/reactable-pagination.css';
+
+appSetup();
+initJQueryAjax();
+
+const exploreViewContainer = document.getElementById('app');
+const bootstrapData = JSON.parse(exploreViewContainer.getAttribute('data-bootstrap'));
+const controls = getControlsState(bootstrapData, bootstrapData.form_data);
+const rawFormData = { ...bootstrapData.form_data };
+
+delete bootstrapData.form_data;
+delete bootstrapData.common.locale;
+delete bootstrapData.common.language_pack;
+
+// Initial state
+const bootstrappedState = {
+ ...bootstrapData,
+ rawFormData,
+ controls,
+ filterColumnOpts: [],
+ isDatasourceMetaLoading: false,
+ isStarred: false,
+};
+const slice = bootstrappedState.slice;
+const sliceFormData = slice
+ ? getFormDataFromControls(getControlsState(bootstrapData, slice.form_data))
+ : null;
+const chartKey = getChartKey(bootstrappedState);
+const initState = {
+ charts: {
+ [chartKey]: {
+ id: chartKey,
+ chartAlert: null,
+ chartStatus: 'loading',
+ chartUpdateEndTime: null,
+ chartUpdateStartTime: now(),
+ latestQueryFormData: getFormDataFromControls(controls),
+ sliceFormData,
+ queryRequest: null,
+ queryResponse: null,
+ triggerQuery: true,
+ lastRendered: 0,
+ },
+ },
+ saveModal: {
+ dashboards: [],
+ saveModalAlert: null,
+ },
+ explore: bootstrappedState,
+ impressionId: shortid.generate(),
+ messageToasts: getToastsFromPyFlashMessages((bootstrapData.common || {}).flash_messages || []),
+};
+
+const store = createStore(
+ rootReducer,
+ initState,
+ compose(
+ applyMiddleware(thunk),
+ initEnhancer(false),
+ ),
+);
+
+const App = () => (
+
+
+
+
+
+
+);
+
+export default hot(module)(App);
diff --git a/superset/assets/src/explore/index.jsx b/superset/assets/src/explore/index.jsx
index 283b5f5297e9b..3088170f013dd 100644
--- a/superset/assets/src/explore/index.jsx
+++ b/superset/assets/src/explore/index.jsx
@@ -1,91 +1,8 @@
-/* eslint no-undef: 2 */
import React from 'react';
import ReactDOM from 'react-dom';
-import { createStore, applyMiddleware, compose } from 'redux';
-import { Provider } from 'react-redux';
-import thunk from 'redux-thunk';
-
-import shortid from 'shortid';
-import { now } from '../modules/dates';
-import { initEnhancer } from '../reduxUtils';
-import { getChartKey } from './exploreUtils';
-import ToastPresenter from '../messageToasts/containers/ToastPresenter';
-import { getControlsState, getFormDataFromControls } from './store';
-import { initJQueryAjax } from '../modules/utils';
-import ExploreViewContainer from './components/ExploreViewContainer';
-import rootReducer from './reducers/index';
-import getToastsFromPyFlashMessages from '../messageToasts/utils/getToastsFromPyFlashMessages';
-
-import { appSetup } from '../common';
-import './main.css';
-import '../../stylesheets/reactable-pagination.css';
-
-appSetup();
-initJQueryAjax();
-
-const exploreViewContainer = document.getElementById('app');
-const bootstrapData = JSON.parse(exploreViewContainer.getAttribute('data-bootstrap'));
-const controls = getControlsState(bootstrapData, bootstrapData.form_data);
-const rawFormData = { ...bootstrapData.form_data };
-
-delete bootstrapData.form_data;
-delete bootstrapData.common.locale;
-delete bootstrapData.common.language_pack;
-
-// Initial state
-const bootstrappedState = {
- ...bootstrapData,
- rawFormData,
- controls,
- filterColumnOpts: [],
- isDatasourceMetaLoading: false,
- isStarred: false,
-};
-const slice = bootstrappedState.slice;
-const sliceFormData = slice
- ? getFormDataFromControls(getControlsState(bootstrapData, slice.form_data))
- : null;
-const chartKey = getChartKey(bootstrappedState);
-const initState = {
- charts: {
- [chartKey]: {
- id: chartKey,
- chartAlert: null,
- chartStatus: 'loading',
- chartUpdateEndTime: null,
- chartUpdateStartTime: now(),
- latestQueryFormData: getFormDataFromControls(controls),
- sliceFormData,
- queryRequest: null,
- queryResponse: null,
- triggerQuery: true,
- lastRendered: 0,
- },
- },
- saveModal: {
- dashboards: [],
- saveModalAlert: null,
- },
- explore: bootstrappedState,
- impressionId: shortid.generate(),
- messageToasts: getToastsFromPyFlashMessages((bootstrapData.common || {}).flash_messages || []),
-};
-
-const store = createStore(
- rootReducer,
- initState,
- compose(
- applyMiddleware(thunk),
- initEnhancer(false),
- ),
-);
+import App from './App';
ReactDOM.render(
-
-
-
-
-
- ,
- exploreViewContainer,
+ ,
+ document.getElementById('app'),
);
diff --git a/superset/assets/src/profile/App.jsx b/superset/assets/src/profile/App.jsx
new file mode 100644
index 0000000000000..13146ec225306
--- /dev/null
+++ b/superset/assets/src/profile/App.jsx
@@ -0,0 +1,17 @@
+import React from 'react';
+import { hot } from 'react-hot-loader';
+import App from './components/App';
+import { appSetup } from '../common';
+
+import './main.css';
+
+appSetup();
+
+const profileViewContainer = document.getElementById('app');
+const bootstrap = JSON.parse(profileViewContainer.getAttribute('data-bootstrap'));
+
+const Application = () => (
+
+);
+
+export default hot(module)(Application);
diff --git a/superset/assets/src/profile/index.jsx b/superset/assets/src/profile/index.jsx
index e9ed59bd719b2..3088170f013dd 100644
--- a/superset/assets/src/profile/index.jsx
+++ b/superset/assets/src/profile/index.jsx
@@ -1,19 +1,8 @@
-/* eslint no-unused-vars: 0 */
import React from 'react';
import ReactDOM from 'react-dom';
+import App from './App';
-import App from './components/App';
-import { appSetup } from '../common';
-
-import './main.css';
-
-appSetup();
-
-const profileViewContainer = document.getElementById('app');
-const bootstrap = JSON.parse(profileViewContainer.getAttribute('data-bootstrap'));
-
-const user = bootstrap.user;
ReactDOM.render(
- ,
- profileViewContainer,
+ ,
+ document.getElementById('app'),
);
diff --git a/superset/assets/src/visualizations/PairedTTest/PairedTTest.jsx b/superset/assets/src/visualizations/PairedTTest/PairedTTest.jsx
index 3a26e9d399467..3fd9f61c25811 100644
--- a/superset/assets/src/visualizations/PairedTTest/PairedTTest.jsx
+++ b/superset/assets/src/visualizations/PairedTTest/PairedTTest.jsx
@@ -67,8 +67,6 @@ function adaptor(slice, payload) {
significance_level: alpha,
} = formData;
- console.log('groups', groups, payload.data);
-
ReactDOM.render(
-
-
-
-
- {t('Dashboards')}
-
-
-
-
-
-
-
-
-
-
-
- {t('Recently Viewed')}
-
-
-
-
-
-
-
-
- {t('Favorites')}
-
-
-
-
-
-
-
- );
- }
-}
+const container = document.getElementById('app');
+const bootstrap = JSON.parse(container.getAttribute('data-bootstrap'));
+const user = { ...bootstrap.user };
-App.propTypes = propTypes;
+const App = () => (
+
+);
+
+export default hot(module)(App);
diff --git a/superset/assets/src/welcome/Welcome.jsx b/superset/assets/src/welcome/Welcome.jsx
new file mode 100644
index 0000000000000..2f4de973ae34a
--- /dev/null
+++ b/superset/assets/src/welcome/Welcome.jsx
@@ -0,0 +1,71 @@
+import React from 'react';
+import PropTypes from 'prop-types';
+import { Panel, Row, Col, Tabs, Tab, FormControl } from 'react-bootstrap';
+import RecentActivity from '../profile/components/RecentActivity';
+import Favorites from '../profile/components/Favorites';
+import DashboardTable from './DashboardTable';
+import { t } from '../locales';
+
+const propTypes = {
+ user: PropTypes.object.isRequired,
+};
+
+export default class Welcome extends React.PureComponent {
+ constructor(props) {
+ super(props);
+ this.state = {
+ search: '',
+ };
+ this.onSearchChange = this.onSearchChange.bind(this);
+ }
+ onSearchChange(event) {
+ this.setState({ search: event.target.value });
+ }
+ render() {
+ return (
+
+
+
+
+
+ {t('Dashboards')}
+
+
+
+
+
+
+
+
+
+
+
+ {t('Recently Viewed')}
+
+
+
+
+
+
+
+
+ {t('Favorites')}
+
+
+
+
+
+
+
+ );
+ }
+}
+
+Welcome.propTypes = propTypes;
diff --git a/superset/assets/src/welcome/index.jsx b/superset/assets/src/welcome/index.jsx
index df0f774a81bf5..3088170f013dd 100644
--- a/superset/assets/src/welcome/index.jsx
+++ b/superset/assets/src/welcome/index.jsx
@@ -1,22 +1,8 @@
-/* eslint no-unused-vars: 0 */
import React from 'react';
import ReactDOM from 'react-dom';
-import { Panel, Row, Col, FormControl } from 'react-bootstrap';
-
-import { appSetup } from '../common';
import App from './App';
-appSetup();
-
-const container = document.getElementById('app');
-const bootstrap = JSON.parse(container.getAttribute('data-bootstrap'));
-const user = {
- ...bootstrap.user,
-};
-
ReactDOM.render(
- ,
- container,
+ ,
+ document.getElementById('app'),
);
diff --git a/superset/assets/yarn.lock b/superset/assets/yarn.lock
index 2b330defcffd9..09c327e191b07 100644
--- a/superset/assets/yarn.lock
+++ b/superset/assets/yarn.lock
@@ -1061,7 +1061,7 @@ ajv@^4.9.1:
co "^4.6.0"
json-stable-stringify "^1.0.1"
-ajv@^5.2.3, ajv@^5.3.0:
+ajv@^5.1.0, ajv@^5.2.3, ajv@^5.3.0:
version "5.5.2"
resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965"
dependencies:
@@ -1418,7 +1418,7 @@ aws-sign@~0.3.0:
version "0.3.0"
resolved "https://registry.yarnpkg.com/aws-sign/-/aws-sign-0.3.0.tgz#3d81ca69b474b1e16518728b51c24ff0bbedc6e9"
-aws4@^1.2.1, aws4@^1.8.0:
+aws4@^1.2.1, aws4@^1.6.0, aws4@^1.8.0:
version "1.8.0"
resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f"
@@ -4872,7 +4872,7 @@ extend-shallow@^3.0.0, extend-shallow@^3.0.2:
assign-symbols "^1.0.0"
is-extendable "^1.0.1"
-extend@^3.0.0, extend@~3.0.0, extend@~3.0.2:
+extend@^3.0.0, extend@~3.0.0, extend@~3.0.1, extend@~3.0.2:
version "3.0.2"
resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa"
@@ -4968,7 +4968,7 @@ 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:
+fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.4:
version "2.0.6"
resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
@@ -5210,7 +5210,7 @@ form-data@~2.1.1:
combined-stream "^1.0.5"
mime-types "^2.1.12"
-form-data@~2.3.2:
+form-data@~2.3.1, form-data@~2.3.2:
version "2.3.2"
resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.2.tgz#4970498be604c20c005d4f5c23aecd21d6b49099"
dependencies:
@@ -5642,7 +5642,7 @@ global-prefix@^1.0.1:
is-windows "^1.0.1"
which "^1.2.14"
-global@~4.3.0:
+global@^4.3.0, global@~4.3.0:
version "4.3.2"
resolved "https://registry.yarnpkg.com/global/-/global-4.3.2.tgz#e76989268a6c74c38908b1305b10fc0e394e9d0f"
dependencies:
@@ -5837,6 +5837,13 @@ har-validator@~4.2.1:
ajv "^4.9.1"
har-schema "^1.0.5"
+har-validator@~5.0.3:
+ version "5.0.3"
+ resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.0.3.tgz#ba402c266194f15956ef15e0fcf242993f6a7dfd"
+ dependencies:
+ ajv "^5.1.0"
+ har-schema "^2.0.0"
+
har-validator@~5.1.0:
version "5.1.0"
resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.0.tgz#44657f5688a22cfd4b72486e81b3a3fb11742c29"
@@ -8617,7 +8624,7 @@ oauth-sign@~0.3.0:
version "0.3.0"
resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.3.0.tgz#cb540f93bb2b22a7d5941691a288d60e8ea9386e"
-oauth-sign@~0.8.1:
+oauth-sign@~0.8.1, oauth-sign@~0.8.2:
version "0.8.2"
resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43"
@@ -9864,7 +9871,7 @@ qs@~6.4.0:
version "6.4.0"
resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233"
-qs@~6.5.2:
+qs@~6.5.1, qs@~6.5.2:
version "6.5.2"
resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36"
@@ -10105,6 +10112,17 @@ react-gravatar@^2.6.1:
md5 "^2.1.0"
query-string "^4.2.2"
+react-hot-loader@^4.3.6:
+ version "4.3.6"
+ resolved "https://registry.yarnpkg.com/react-hot-loader/-/react-hot-loader-4.3.6.tgz#26e1491f08daf2bad99d141b1927c9faadef2fb4"
+ dependencies:
+ fast-levenshtein "^2.0.6"
+ global "^4.3.0"
+ hoist-non-react-statics "^2.5.0"
+ prop-types "^15.6.1"
+ react-lifecycles-compat "^3.0.4"
+ shallowequal "^1.0.2"
+
react-input-autosize@^2.1.2:
version "2.2.1"
resolved "https://registry.yarnpkg.com/react-input-autosize/-/react-input-autosize-2.2.1.tgz#ec428fa15b1592994fb5f9aa15bb1eb6baf420f8"
@@ -11229,6 +11247,10 @@ shallow-copy@~0.0.1:
version "0.0.1"
resolved "https://registry.yarnpkg.com/shallow-copy/-/shallow-copy-0.0.1.tgz#415f42702d73d810330292cc5ee86eae1a11a170"
+shallowequal@^1.0.2:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/shallowequal/-/shallowequal-1.1.0.tgz#188d521de95b9087404fd4dcb68b13df0ae4e7f8"
+
shapefile@0.3:
version "0.3.1"
resolved "https://registry.yarnpkg.com/shapefile/-/shapefile-0.3.1.tgz#9bb9a429bd6086a0cfb03962d14cfdf420ffba12"
@@ -12030,7 +12052,7 @@ tough-cookie@^2.3.2, tough-cookie@~2.4.3:
psl "^1.1.24"
punycode "^1.4.1"
-tough-cookie@~2.3.0:
+tough-cookie@~2.3.0, tough-cookie@~2.3.3:
version "2.3.4"
resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.4.tgz#ec60cee38ac675063ffc97a5c18970578ee83655"
dependencies:
@@ -12408,7 +12430,7 @@ utils-merge@1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713"
-uuid@^3.0.0, uuid@^3.0.1, uuid@^3.3.2:
+uuid@^3.0.0, uuid@^3.0.1, uuid@^3.1.0, uuid@^3.3.2:
version "3.3.2"
resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131"