diff --git a/package.json b/package.json
index ec8df08b..9b7c33b5 100644
--- a/package.json
+++ b/package.json
@@ -18,6 +18,8 @@
"react-router": "4.0.0-alpha.6",
"react-test-renderer": "^15.4.2",
"redux": "^3.6.0",
+ "redux-form": "^6.4.3",
+ "sanitize.css": "^4.1.0",
"sharetribe-scripts": "0.8.6",
"source-map-support": "^0.4.10"
},
diff --git a/src/Routes.js b/src/Routes.js
index 17e2b086..77ed92b2 100644
--- a/src/Routes.js
+++ b/src/Routes.js
@@ -48,7 +48,6 @@ const MatchWithSubRoutes = props => {
);
};
/* eslint-enable arrow-body-style */
-
MatchWithSubRoutes.defaultProps = { auth: false, exactly: false };
const { any, array, bool, func, node, oneOfType, string } = PropTypes;
diff --git a/src/components/Hello/Hello.example.js b/src/components/Hello/Hello.example.js
deleted file mode 100644
index b109e6af..00000000
--- a/src/components/Hello/Hello.example.js
+++ /dev/null
@@ -1,13 +0,0 @@
-import Hello from './Hello';
-
-export const HelloWorld = {
- component: Hello,
- description: 'Hello to world',
- props: { name: 'world' },
-};
-
-export const HelloMars = {
- component: Hello,
- description: 'Hello to mars',
- props: { name: 'mars' },
-};
diff --git a/src/components/Hello/Hello.js b/src/components/Hello/Hello.js
deleted file mode 100644
index 3cb026de..00000000
--- a/src/components/Hello/Hello.js
+++ /dev/null
@@ -1,9 +0,0 @@
-import React, { PropTypes } from 'react';
-
-const Hello = ({ name }) =>
hello, {name}!
;
-
-const { string } = PropTypes;
-
-Hello.propTypes = { name: string.isRequired };
-
-export default Hello;
diff --git a/src/components/examples.js b/src/components/examples.js
deleted file mode 100644
index 0d0b9135..00000000
--- a/src/components/examples.js
+++ /dev/null
@@ -1,4 +0,0 @@
-/* eslint-disable import/prefer-default-export*/
-import * as Hello from './Hello/Hello.example';
-
-export { Hello };
diff --git a/src/components/index.js b/src/components/index.js
index 01b7ea37..6629c16f 100644
--- a/src/components/index.js
+++ b/src/components/index.js
@@ -1,4 +1,3 @@
-/* eslint-disable import/prefer-default-export */
import NamedLink from './NamedLink/NamedLink';
import PageLayout from './PageLayout/PageLayout';
import RouterProvider from './RouterProvider/RouterProvider';
diff --git a/src/containers/ChangeAccountPasswordForm/ChangeAccountPasswordForm.example.js b/src/containers/ChangeAccountPasswordForm/ChangeAccountPasswordForm.example.js
new file mode 100644
index 00000000..5e480a54
--- /dev/null
+++ b/src/containers/ChangeAccountPasswordForm/ChangeAccountPasswordForm.example.js
@@ -0,0 +1,11 @@
+/* eslint-disable no-console, import/prefer-default-export */
+import ChangeAccountPasswordForm from './ChangeAccountPasswordForm';
+
+export const Empty = {
+ component: ChangeAccountPasswordForm,
+ props: {
+ onSubmit(values) {
+ console.log('submit new password form values:', values);
+ },
+ },
+};
diff --git a/src/containers/ChangeAccountPasswordForm/ChangeAccountPasswordForm.js b/src/containers/ChangeAccountPasswordForm/ChangeAccountPasswordForm.js
new file mode 100644
index 00000000..2d6a4cf5
--- /dev/null
+++ b/src/containers/ChangeAccountPasswordForm/ChangeAccountPasswordForm.js
@@ -0,0 +1,24 @@
+import React from 'react';
+import { Field, reduxForm, propTypes as formPropTypes } from 'redux-form';
+
+const ChangeAccountPasswordForm = props => {
+ const { handleSubmit, pristine, submitting } = props;
+ return (
+
+ );
+};
+
+ChangeAccountPasswordForm.propTypes = { ...formPropTypes };
+
+export default reduxForm({ form: 'changeAccountPassword' })(ChangeAccountPasswordForm)
diff --git a/src/containers/ChangeAccountPasswordForm/ChangeAccountPasswordForm.test.js b/src/containers/ChangeAccountPasswordForm/ChangeAccountPasswordForm.test.js
new file mode 100644
index 00000000..cd31f15d
--- /dev/null
+++ b/src/containers/ChangeAccountPasswordForm/ChangeAccountPasswordForm.test.js
@@ -0,0 +1,20 @@
+import React from 'react';
+import renderer from 'react-test-renderer';
+import { Provider } from 'react-redux';
+import configureStore from '../../store';
+import ChangeAccountPasswordForm from './ChangeAccountPasswordForm';
+
+describe('ChangeAccountPasswordForm', () => {
+ it('matches snapshot', () => {
+ const store = configureStore();
+ const component = renderer.create(
+ (
+
+
+
+ ),
+ );
+ const tree = component.toJSON();
+ expect(tree).toMatchSnapshot();
+ });
+});
diff --git a/src/containers/ChangeAccountPasswordForm/__snapshots__/ChangeAccountPasswordForm.test.js.snap b/src/containers/ChangeAccountPasswordForm/__snapshots__/ChangeAccountPasswordForm.test.js.snap
new file mode 100644
index 00000000..66b6a708
--- /dev/null
+++ b/src/containers/ChangeAccountPasswordForm/__snapshots__/ChangeAccountPasswordForm.test.js.snap
@@ -0,0 +1,65 @@
+exports[`ChangeAccountPasswordForm matches snapshot 1`] = `
+
+`;
diff --git a/src/containers/ChangePasswordForm/ChangePasswordForm.example.js b/src/containers/ChangePasswordForm/ChangePasswordForm.example.js
new file mode 100644
index 00000000..dbbc6b91
--- /dev/null
+++ b/src/containers/ChangePasswordForm/ChangePasswordForm.example.js
@@ -0,0 +1,11 @@
+/* eslint-disable no-console, import/prefer-default-export */
+import ChangePasswordForm from './ChangePasswordForm';
+
+export const Empty = {
+ component: ChangePasswordForm,
+ props: {
+ onSubmit(values) {
+ console.log('submit new password form values:', values);
+ },
+ },
+};
diff --git a/src/containers/ChangePasswordForm/ChangePasswordForm.js b/src/containers/ChangePasswordForm/ChangePasswordForm.js
new file mode 100644
index 00000000..a98e635c
--- /dev/null
+++ b/src/containers/ChangePasswordForm/ChangePasswordForm.js
@@ -0,0 +1,23 @@
+import React from 'react';
+import { Field, reduxForm, propTypes as formPropTypes } from 'redux-form';
+
+const ChangePasswordForm = props => {
+ const { handleSubmit, pristine, submitting } = props;
+ return (
+
+ );
+};
+
+ChangePasswordForm.propTypes = { ...formPropTypes };
+
+export default reduxForm({ form: 'changePassword' })(ChangePasswordForm)
diff --git a/src/containers/ChangePasswordForm/ChangePasswordForm.test.js b/src/containers/ChangePasswordForm/ChangePasswordForm.test.js
new file mode 100644
index 00000000..27917da0
--- /dev/null
+++ b/src/containers/ChangePasswordForm/ChangePasswordForm.test.js
@@ -0,0 +1,20 @@
+import React from 'react';
+import renderer from 'react-test-renderer';
+import { Provider } from 'react-redux';
+import configureStore from '../../store';
+import ChangePasswordForm from './ChangePasswordForm';
+
+describe('ChangePasswordForm', () => {
+ it('matches snapshot', () => {
+ const store = configureStore();
+ const component = renderer.create(
+ (
+
+
+
+ ),
+ );
+ const tree = component.toJSON();
+ expect(tree).toMatchSnapshot();
+ });
+});
diff --git a/src/containers/ChangePasswordForm/__snapshots__/ChangePasswordForm.test.js.snap b/src/containers/ChangePasswordForm/__snapshots__/ChangePasswordForm.test.js.snap
new file mode 100644
index 00000000..e664778d
--- /dev/null
+++ b/src/containers/ChangePasswordForm/__snapshots__/ChangePasswordForm.test.js.snap
@@ -0,0 +1,62 @@
+exports[`ChangePasswordForm matches snapshot 1`] = `
+
+`;
diff --git a/src/containers/LoginForm/LoginForm.example.js b/src/containers/LoginForm/LoginForm.example.js
new file mode 100644
index 00000000..922121e5
--- /dev/null
+++ b/src/containers/LoginForm/LoginForm.example.js
@@ -0,0 +1,11 @@
+/* eslint-disable no-console, import/prefer-default-export */
+import LoginForm from './LoginForm';
+
+export const Empty = {
+ component: LoginForm,
+ props: {
+ onSubmit(values) {
+ console.log('log in with form values:', values);
+ },
+ },
+};
diff --git a/src/containers/LoginForm/LoginForm.js b/src/containers/LoginForm/LoginForm.js
new file mode 100644
index 00000000..dca94677
--- /dev/null
+++ b/src/containers/LoginForm/LoginForm.js
@@ -0,0 +1,20 @@
+import React from 'react';
+import { Field, reduxForm, propTypes as formPropTypes } from 'redux-form';
+
+const LoginForm = props => {
+ const { handleSubmit, pristine, submitting } = props;
+ return (
+
+ );
+};
+
+LoginForm.propTypes = { ...formPropTypes };
+
+export default reduxForm({ form: 'login' })(LoginForm)
diff --git a/src/containers/LoginForm/LoginForm.test.js b/src/containers/LoginForm/LoginForm.test.js
new file mode 100644
index 00000000..7f05b48f
--- /dev/null
+++ b/src/containers/LoginForm/LoginForm.test.js
@@ -0,0 +1,20 @@
+import React from 'react';
+import renderer from 'react-test-renderer';
+import { Provider } from 'react-redux';
+import configureStore from '../../store';
+import LoginForm from './LoginForm';
+
+describe('LoginForm', () => {
+ it('matches snapshot', () => {
+ const store = configureStore();
+ const component = renderer.create(
+ (
+
+
+
+ ),
+ );
+ const tree = component.toJSON();
+ expect(tree).toMatchSnapshot();
+ });
+});
diff --git a/src/containers/LoginForm/__snapshots__/LoginForm.test.js.snap b/src/containers/LoginForm/__snapshots__/LoginForm.test.js.snap
new file mode 100644
index 00000000..9a34ff08
--- /dev/null
+++ b/src/containers/LoginForm/__snapshots__/LoginForm.test.js.snap
@@ -0,0 +1,39 @@
+exports[`LoginForm matches snapshot 1`] = `
+
+`;
diff --git a/src/containers/PasswordForgottenForm/PasswordForgottenForm.example.js b/src/containers/PasswordForgottenForm/PasswordForgottenForm.example.js
new file mode 100644
index 00000000..0312b51b
--- /dev/null
+++ b/src/containers/PasswordForgottenForm/PasswordForgottenForm.example.js
@@ -0,0 +1,11 @@
+/* eslint-disable no-console, import/prefer-default-export */
+import PasswordForgottenForm from './PasswordForgottenForm';
+
+export const Empty = {
+ component: PasswordForgottenForm,
+ props: {
+ onSubmit(values) {
+ console.log('submit forgotten password email:', values);
+ },
+ },
+};
diff --git a/src/containers/PasswordForgottenForm/PasswordForgottenForm.js b/src/containers/PasswordForgottenForm/PasswordForgottenForm.js
new file mode 100644
index 00000000..fd85b4ce
--- /dev/null
+++ b/src/containers/PasswordForgottenForm/PasswordForgottenForm.js
@@ -0,0 +1,18 @@
+import React from 'react';
+import { Field, reduxForm, propTypes as formPropTypes } from 'redux-form';
+
+const PasswordForgottenForm = props => {
+ const { handleSubmit, pristine, submitting } = props;
+ return (
+
+ );
+};
+
+PasswordForgottenForm.propTypes = { ...formPropTypes };
+
+export default reduxForm({ form: 'passwordForgotten' })(PasswordForgottenForm)
diff --git a/src/containers/PasswordForgottenForm/PasswordForgottenForm.test.js b/src/containers/PasswordForgottenForm/PasswordForgottenForm.test.js
new file mode 100644
index 00000000..cbcd3b40
--- /dev/null
+++ b/src/containers/PasswordForgottenForm/PasswordForgottenForm.test.js
@@ -0,0 +1,20 @@
+import React from 'react';
+import renderer from 'react-test-renderer';
+import { Provider } from 'react-redux';
+import configureStore from '../../store';
+import PasswordForgottenForm from './PasswordForgottenForm';
+
+describe('PasswordForgottenForm', () => {
+ it('matches snapshot', () => {
+ const store = configureStore();
+ const component = renderer.create(
+ (
+
+
+
+ ),
+ );
+ const tree = component.toJSON();
+ expect(tree).toMatchSnapshot();
+ });
+});
diff --git a/src/containers/PasswordForgottenForm/__snapshots__/PasswordForgottenForm.test.js.snap b/src/containers/PasswordForgottenForm/__snapshots__/PasswordForgottenForm.test.js.snap
new file mode 100644
index 00000000..a474ddec
--- /dev/null
+++ b/src/containers/PasswordForgottenForm/__snapshots__/PasswordForgottenForm.test.js.snap
@@ -0,0 +1,26 @@
+exports[`PasswordForgottenForm matches snapshot 1`] = `
+
+`;
diff --git a/src/containers/SignUpForm/SignUpForm.example.js b/src/containers/SignUpForm/SignUpForm.example.js
new file mode 100644
index 00000000..aeac9bdc
--- /dev/null
+++ b/src/containers/SignUpForm/SignUpForm.example.js
@@ -0,0 +1,11 @@
+/* eslint-disable no-console, import/prefer-default-export */
+import SignUpForm from './SignUpForm';
+
+export const Empty = {
+ component: SignUpForm,
+ props: {
+ onSubmit(values) {
+ console.log('sign up with form values:', values);
+ },
+ },
+};
diff --git a/src/containers/SignUpForm/SignUpForm.js b/src/containers/SignUpForm/SignUpForm.js
new file mode 100644
index 00000000..de4e0643
--- /dev/null
+++ b/src/containers/SignUpForm/SignUpForm.js
@@ -0,0 +1,24 @@
+import React from 'react';
+import { Field, reduxForm, propTypes as formPropTypes } from 'redux-form';
+
+const SignUpForm = props => {
+ const { handleSubmit, pristine, submitting } = props;
+ return (
+
+ );
+};
+
+SignUpForm.propTypes = { ...formPropTypes };
+
+export default reduxForm({ form: 'signup' })(SignUpForm)
diff --git a/src/containers/SignUpForm/SignUpForm.test.js b/src/containers/SignUpForm/SignUpForm.test.js
new file mode 100644
index 00000000..b0398022
--- /dev/null
+++ b/src/containers/SignUpForm/SignUpForm.test.js
@@ -0,0 +1,20 @@
+import React from 'react';
+import renderer from 'react-test-renderer';
+import { Provider } from 'react-redux';
+import configureStore from '../../store';
+import SignUpForm from './SignUpForm';
+
+describe('SignUpForm', () => {
+ it('matches snapshot', () => {
+ const store = configureStore();
+ const component = renderer.create(
+ (
+
+
+
+ ),
+ );
+ const tree = component.toJSON();
+ expect(tree).toMatchSnapshot();
+ });
+});
diff --git a/src/containers/SignUpForm/__snapshots__/SignUpForm.test.js.snap b/src/containers/SignUpForm/__snapshots__/SignUpForm.test.js.snap
new file mode 100644
index 00000000..b3b81e62
--- /dev/null
+++ b/src/containers/SignUpForm/__snapshots__/SignUpForm.test.js.snap
@@ -0,0 +1,63 @@
+exports[`SignUpForm matches snapshot 1`] = `
+
+`;
diff --git a/src/containers/StyleguidePage/StyleguidePage.css b/src/containers/StyleguidePage/StyleguidePage.css
index b5367cc9..ba196371 100644
--- a/src/containers/StyleguidePage/StyleguidePage.css
+++ b/src/containers/StyleguidePage/StyleguidePage.css
@@ -1,6 +1,3 @@
.root {
- & ul {
- list-style: none;
- padding: 0;
- }
+ padding: 1rem;
}
diff --git a/src/containers/StyleguidePage/StyleguidePage.js b/src/containers/StyleguidePage/StyleguidePage.js
index 131c291f..2005efd5 100644
--- a/src/containers/StyleguidePage/StyleguidePage.js
+++ b/src/containers/StyleguidePage/StyleguidePage.js
@@ -1,7 +1,7 @@
import React, { PropTypes } from 'react';
import { Link } from 'react-router';
import { map, size } from 'lodash';
-import * as allExamples from '../../components/examples';
+import * as allExamples from '../../examples';
import css from './StyleguidePage.css';
diff --git a/src/containers/index.js b/src/containers/index.js
index c2a99d14..451075e1 100644
--- a/src/containers/index.js
+++ b/src/containers/index.js
@@ -1,41 +1,51 @@
import AuthenticationPage from './AuthenticationPage/AuthenticationPage';
+import ChangeAccountPasswordForm from './ChangeAccountPasswordForm/ChangeAccountPasswordForm';
+import ChangePasswordForm from './ChangePasswordForm/ChangePasswordForm';
import CheckoutPage from './CheckoutPage/CheckoutPage';
import ContactDetailsPage from './ContactDetailsPage/ContactDetailsPage';
import EditProfilePage from './EditProfilePage/EditProfilePage';
import InboxPage from './InboxPage/InboxPage';
import LandingPage from './LandingPage/LandingPage';
import ListingPage from './ListingPage/ListingPage';
+import LoginForm from './LoginForm/LoginForm';
import ManageListingsPage from './ManageListingsPage/ManageListingsPage';
import NotFoundPage from './NotFoundPage/NotFoundPage';
import OrderPage from './OrderPage/OrderPage';
import PasswordChangePage from './PasswordChangePage/PasswordChangePage';
+import PasswordForgottenForm from './PasswordForgottenForm/PasswordForgottenForm';
import PasswordForgottenPage from './PasswordForgottenPage/PasswordForgottenPage';
import PayoutPreferencesPage from './PayoutPreferencesPage/PayoutPreferencesPage';
import ProfilePage from './ProfilePage/ProfilePage';
import SalesConversationPage from './SalesConversationPage/SalesConversationPage';
import SearchPage from './SearchPage/SearchPage';
import SecurityPage from './SecurityPage/SecurityPage';
+import SignUpForm from './SignUpForm/SignUpForm';
import StyleguidePage from './StyleguidePage/StyleguidePage';
import Topbar from './Topbar/Topbar';
export {
AuthenticationPage,
+ ChangeAccountPasswordForm,
+ ChangePasswordForm,
CheckoutPage,
ContactDetailsPage,
EditProfilePage,
InboxPage,
LandingPage,
ListingPage,
+ LoginForm,
ManageListingsPage,
NotFoundPage,
OrderPage,
PasswordChangePage,
+ PasswordForgottenForm,
PasswordForgottenPage,
PayoutPreferencesPage,
ProfilePage,
SalesConversationPage,
SearchPage,
SecurityPage,
+ SignUpForm,
StyleguidePage,
Topbar,
};
diff --git a/src/ducks/index.js b/src/ducks/index.js
index 739c6c30..6d774136 100644
--- a/src/ducks/index.js
+++ b/src/ducks/index.js
@@ -4,6 +4,7 @@
* https://github.com/erikras/ducks-modular-redux
*/
+import { reducer as formReducer } from 'redux-form';
import FlashNotification from './FlashNotification.ducks';
-export { FlashNotification }; // eslint-disable-line import/prefer-default-export
+export { formReducer as form, FlashNotification };
diff --git a/src/examples.js b/src/examples.js
new file mode 100644
index 00000000..8881760b
--- /dev/null
+++ b/src/examples.js
@@ -0,0 +1,13 @@
+import * as ChangeAccountPasswordForm from './containers/ChangeAccountPasswordForm/ChangeAccountPasswordForm.example';
+import * as ChangePasswordForm from './containers/ChangePasswordForm/ChangePasswordForm.example';
+import * as LoginForm from './containers/LoginForm/LoginForm.example';
+import * as PasswordForgottenForm from './containers/PasswordForgottenForm/PasswordForgottenForm.example';
+import * as SignUpForm from './containers/SignUpForm/SignUpForm.example';
+
+export {
+ ChangeAccountPasswordForm,
+ ChangePasswordForm,
+ LoginForm,
+ PasswordForgottenForm,
+ SignUpForm,
+};
diff --git a/src/index.css b/src/index.css
index b4cc7250..f616e36a 100644
--- a/src/index.css
+++ b/src/index.css
@@ -1,5 +1,46 @@
-body {
- margin: 0;
+@import "sanitize.css";
+
+ul {
+ list-style: none;
padding: 0;
- font-family: sans-serif;
+}
+
+label {
+ display: block;
+ font-weight: bold;
+ margin-top: 1rem;
+}
+
+input {
+ display: block;
+ width: 100%;
+ font-size: 1.4rem;
+ border: 1px solid #ddd;
+}
+
+button {
+ display: block;
+ width: 100%;
+ font-size: 1.4rem;
+ padding: 0.5rem;
+ margin: 1rem 0;
+ background-color: #eee;
+ border: 1px solid #ddd;
+ cursor: pointer;
+
+ &:hover {
+ background-color: #ddd;
+ }
+ &:active {
+ background-color: #ccc;
+ }
+ &:disabled {
+ cursor: auto;
+ color: #aaa;
+
+ &:hover,
+ &:active {
+ background-color: #eee;
+ }
+ }
}
diff --git a/src/routesConfiguration.js b/src/routesConfiguration.js
index 0a8ae658..34ea3f9a 100644
--- a/src/routesConfiguration.js
+++ b/src/routesConfiguration.js
@@ -197,12 +197,7 @@ const routesConfiguration = [
},
],
},
- {
- pattern: '/styleguide',
- exactly: true,
- name: 'Styleguide',
- component: StyleguidePage,
- },
+ { pattern: '/styleguide', exactly: true, name: 'Styleguide', component: StyleguidePage },
{
pattern: '/styleguide/:component',
exactly: true,
diff --git a/yarn.lock b/yarn.lock
index b2e19905..1ca4fa97 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -136,6 +136,10 @@ array-equal@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93"
+array-findindex-polyfill@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/array-findindex-polyfill/-/array-findindex-polyfill-0.1.0.tgz#c362665bec7645f22d7a3c3aac9793f71c3622ef"
+
array-flatten@1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2"
@@ -1645,7 +1649,7 @@ 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-equal@1.0.1:
+deep-equal@1.0.1, deep-equal@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5"
@@ -1872,6 +1876,10 @@ es5-ext@^0.10.7, es5-ext@^0.10.8, es5-ext@~0.10.11, es5-ext@~0.10.2, es5-ext@~0.
es6-iterator "2"
es6-symbol "~3.1"
+es6-error@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/es6-error/-/es6-error-4.0.1.tgz#eeb3e280f57e2ec48d72a9fccaf6247d3c1f5719"
+
es6-iterator@2:
version "2.0.0"
resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.0.tgz#bd968567d61635e33c0b80727613c9cb4b096bac"
@@ -2632,7 +2640,7 @@ 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.0.3, 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"
@@ -2849,7 +2857,7 @@ intl-relativeformat@^1.3.0:
dependencies:
intl-messageformat "1.3.0"
-invariant@^2.0.0, invariant@^2.1.1, invariant@^2.2.0, invariant@^2.2.1:
+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"
dependencies:
@@ -2998,6 +3006,10 @@ is-primitive@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575"
+is-promise@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa"
+
is-property@^1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84"
@@ -3499,7 +3511,7 @@ loader-utils@0.2.x, loader-utils@^0.2.11, loader-utils@^0.2.16, loader-utils@^0.
json5 "^0.5.0"
object-assign "^4.0.1"
-lodash-es@^4.2.0, lodash-es@^4.2.1:
+lodash-es@^4.17.3, lodash-es@^4.2.0, lodash-es@^4.2.1:
version "4.17.4"
resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.4.tgz#dcc1d7552e150a0640073ba9cb31d70f032950e7"
@@ -3648,7 +3660,7 @@ lodash.uniq@^4.3.0:
version "4.5.0"
resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773"
-"lodash@>=3.5 <5", lodash@^4.0.0, lodash@^4.14.0, lodash@^4.16.2, lodash@^4.16.4, lodash@^4.17.4, lodash@^4.2.0, lodash@^4.2.1, lodash@^4.3.0:
+"lodash@>=3.5 <5", lodash@^4.0.0, lodash@^4.14.0, lodash@^4.16.2, lodash@^4.16.4, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.2.0, lodash@^4.2.1, lodash@^4.3.0:
version "4.17.4"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae"
@@ -5081,6 +5093,20 @@ reduce-function-call@^1.0.1:
dependencies:
balanced-match "^0.4.2"
+redux-form@^6.4.3:
+ version "6.4.3"
+ resolved "https://registry.yarnpkg.com/redux-form/-/redux-form-6.4.3.tgz#bd83a77770d9805f7b595a4ff18f00fe4267d3c8"
+ dependencies:
+ array-findindex-polyfill "^0.1.0"
+ deep-equal "^1.0.1"
+ es6-error "^4.0.0"
+ hoist-non-react-statics "^1.2.0"
+ invariant "^2.2.2"
+ is-promise "^2.1.0"
+ lodash "^4.17.3"
+ lodash-es "^4.17.3"
+ shallowequal "^0.2.2"
+
redux@^3.6.0:
version "3.6.0"
resolved "https://registry.yarnpkg.com/redux/-/redux-3.6.0.tgz#887c2b3d0b9bd86eca2be70571c27654c19e188d"
@@ -5303,6 +5329,10 @@ sane@~1.4.1:
walker "~1.0.5"
watch "~0.10.0"
+sanitize.css@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/sanitize.css/-/sanitize.css-4.1.0.tgz#0bafc3c513699f2fe8c7980c6d37edf21d3f5448"
+
sax@^1.1.4, sax@~1.2.1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.1.tgz#7b8e656190b228e81a66aea748480d828cd2d37a"