From c8b112b63fd1de78e01484e3a0d8d821ff304e25 Mon Sep 17 00:00:00 2001 From: SleepWalker Date: Thu, 10 Mar 2016 11:25:21 +0200 Subject: [PATCH 1/6] react-intl 2-rc1 --- package.json | 2 +- src/index.js | 13 ------------- 2 files changed, 1 insertion(+), 14 deletions(-) diff --git a/package.json b/package.json index 5e4a4dc..219f1a5 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,7 @@ "react-dom": "^0.14.3", "react-height": "^2.0.3", "react-helmet": "^2.3.1", - "react-intl": "=2.0.0-beta-2", + "react-intl": "=v2.0.0-rc-1", "react-motion": "^0.4.0", "react-redux": "^4.0.0", "react-router": "^2.0.0", diff --git a/src/index.js b/src/index.js index 34aae70..2ef133f 100644 --- a/src/index.js +++ b/src/index.js @@ -22,19 +22,6 @@ import routesFactory from 'routes'; import 'index.scss'; -// TODO: временная мера против Intl, который беспощадно спамит консоль -if (process.env.NODE_ENV !== 'production') { - const originalConsoleError = console.error; - if (console.error === originalConsoleError) { - console.error = (...args) => { - if (args[0].indexOf('[React Intl] Missing message:') === 0) { - return; - } - originalConsoleError.call(console, ...args); - }; - } -} - const reducer = combineReducers({ ...reducers, routing: routeReducer From da5f684467b9dde04719ec9f672c9f7ce1517b4b Mon Sep 17 00:00:00 2001 From: SleepWalker Date: Thu, 10 Mar 2016 12:00:19 +0200 Subject: [PATCH 2/6] react 15.0.0-rc.1 --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 219f1a5..0610b7d 100644 --- a/package.json +++ b/package.json @@ -18,8 +18,8 @@ "history": "^1.17.0", "intl-format-cache": "^2.0.4", "intl-messageformat": "^1.1.0", - "react": "^0.14.0", - "react-dom": "^0.14.3", + "react": "^15.0.0-rc.1", + "react-dom": "^15.0.0-rc.1", "react-height": "^2.0.3", "react-helmet": "^2.3.1", "react-intl": "=v2.0.0-rc-1", From a88e958c7c038ae304e24c85281cf65936b51eae Mon Sep 17 00:00:00 2001 From: SleepWalker Date: Sat, 12 Mar 2016 16:23:55 +0200 Subject: [PATCH 3/6] =?UTF-8?q?=D0=9F=D0=BE=D1=84=D0=B8=D0=BA=D1=81=D0=B8?= =?UTF-8?q?=D0=BB=20=D0=BF=D1=80=D1=8B=D0=B3=D0=B0=D1=8E=D1=89=D1=83=D1=8E?= =?UTF-8?q?=20=D0=B0=D0=BD=D0=B8=D0=BC=D0=B0=D1=86=D0=B8=D1=8E=20=D0=BF?= =?UTF-8?q?=D0=B5=D1=80=D0=B5=D1=85=D0=BE=D0=B4=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/auth/Activation.jsx | 1 + src/components/auth/BaseAuthBody.jsx | 29 +++++++++++++++++++++++++ src/components/auth/ForgotPassword.jsx | 1 + src/components/auth/Login.jsx | 1 + src/components/auth/PanelTransition.jsx | 7 +++--- src/components/auth/Password.jsx | 1 + src/components/auth/PasswordChange.jsx | 1 + src/components/auth/Register.jsx | 1 + 8 files changed, 39 insertions(+), 3 deletions(-) diff --git a/src/components/auth/Activation.jsx b/src/components/auth/Activation.jsx index b02bf18..d1b62b8 100644 --- a/src/components/auth/Activation.jsx +++ b/src/components/auth/Activation.jsx @@ -40,6 +40,7 @@ class Body extends BaseAuthBody { color="blue" className={styles.activationCodeInput} autoFocus + onFocus={this.fixAutoFocus} required placeholder={messages.enterTheCode} /> diff --git a/src/components/auth/BaseAuthBody.jsx b/src/components/auth/BaseAuthBody.jsx index f83412a..b745466 100644 --- a/src/components/auth/BaseAuthBody.jsx +++ b/src/components/auth/BaseAuthBody.jsx @@ -39,6 +39,35 @@ export default class BaseAuthBody extends Component { }; } + /** + * Fixes some issues with scroll, when input beeing focused + * + * When an element is focused, by default browsers will scroll its parents to display + * focused item to user. This behavior may cause unexpected visual effects, when + * you animating apearing of an input (e.g. transform) and auto focusing it. In + * that case the browser will scroll the parent container so that input will be + * visible. + * This method will fix that issue by finding parent with overflow: hidden and + * reseting its scrollLeft value to 0. + * + * Usage: + * + * + * @param {Object} event + */ + fixAutoFocus = (event) => { + let el = event.target; + + while (el.parentNode) { + el = el.parentNode; + + if (getComputedStyle(el).overflow === 'hidden') { + el.scrollLeft = 0; + break; + } + } + }; + serialize() { return Object.keys(this.form).reduce((acc, key) => { acc[key] = this.form[key].getValue(); diff --git a/src/components/auth/ForgotPassword.jsx b/src/components/auth/ForgotPassword.jsx index 6f86f13..4f5dbc5 100644 --- a/src/components/auth/ForgotPassword.jsx +++ b/src/components/auth/ForgotPassword.jsx @@ -37,6 +37,7 @@ class Body extends BaseAuthBody { icon="envelope" color="lightViolet" autoFocus + onFocus={this.fixAutoFocus} required placeholder={messages.accountEmail} /> diff --git a/src/components/auth/Login.jsx b/src/components/auth/Login.jsx index 0bcf7bc..7dace24 100644 --- a/src/components/auth/Login.jsx +++ b/src/components/auth/Login.jsx @@ -30,6 +30,7 @@ class Body extends BaseAuthBody { diff --git a/src/components/auth/PanelTransition.jsx b/src/components/auth/PanelTransition.jsx index 84aac19..d3f4400 100644 --- a/src/components/auth/PanelTransition.jsx +++ b/src/components/auth/PanelTransition.jsx @@ -91,7 +91,7 @@ class PanelTransition extends Component { const contentHeight = { overflow: 'hidden', - height: forceHeight ? common.switchContextHeightSpring : 'auto' + height: forceHeight ? common.style.switchContextHeightSpring : 'auto' }; const bodyHeight = { @@ -141,6 +141,7 @@ class PanelTransition extends Component { /** * @param {Object} config + * @param {string} config.key * @param {Object} [options] * @param {Object} [options.isLeave=false] - true, if this is a leave transition * @@ -298,8 +299,8 @@ class PanelTransition extends Component { /** * @param {string} key - * @param {Object} props - * @param {number} props.opacitySpring + * @param {Object} style + * @param {number} style.opacitySpring * * @return {Object} */ diff --git a/src/components/auth/Password.jsx b/src/components/auth/Password.jsx index 2c3913f..ad94865 100644 --- a/src/components/auth/Password.jsx +++ b/src/components/auth/Password.jsx @@ -46,6 +46,7 @@ class Body extends BaseAuthBody { icon="key" type="password" autoFocus + onFocus={this.fixAutoFocus} required placeholder={messages.accountPassword} /> diff --git a/src/components/auth/PasswordChange.jsx b/src/components/auth/PasswordChange.jsx index a326232..fb09742 100644 --- a/src/components/auth/PasswordChange.jsx +++ b/src/components/auth/PasswordChange.jsx @@ -35,6 +35,7 @@ class Body extends BaseAuthBody { icon="key" color="darkBlue" autoFocus + onFocus={this.fixAutoFocus} required placeholder={passwordChangedMessages.newPassword} /> diff --git a/src/components/auth/Register.jsx b/src/components/auth/Register.jsx index 7afb324..7284064 100644 --- a/src/components/auth/Register.jsx +++ b/src/components/auth/Register.jsx @@ -38,6 +38,7 @@ class Body extends BaseAuthBody { color="blue" type="text" autoFocus + onFocus={this.fixAutoFocus} required placeholder={messages.yourNickname} /> From 518901fb5709daa8624c614d79c9e3c5bf3109f6 Mon Sep 17 00:00:00 2001 From: SleepWalker Date: Sun, 13 Mar 2016 10:36:31 +0200 Subject: [PATCH 4/6] =?UTF-8?q?=D0=98=D1=81=D0=BF=D0=BE=D0=BB=D1=8C=D0=B7?= =?UTF-8?q?=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5=20=D0=BA=D0=BE=D0=BD=D1=82?= =?UTF-8?q?=D0=B5=D0=BA=D1=81=D1=82=D0=B0=20=D0=B2=D0=BC=D0=B5=D1=81=D1=82?= =?UTF-8?q?=D0=BE=20props=20=D0=B2=20=D0=BA=D0=BE=D0=BC=D0=BF=D0=BE=D0=BD?= =?UTF-8?q?=D0=B5=D0=BD=D1=82=D0=B0=D1=85=20=D0=B0=D1=83=D1=82=D0=B5=D0=BD?= =?UTF-8?q?=D1=82=D0=B8=D1=84=D0=B8=D0=BA=D0=B0=D1=86=D0=B8=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/auth/Activation.jsx | 14 ++------- src/components/auth/AppInfo.jsx | 4 +-- src/components/auth/BaseAuthBody.jsx | 17 ++++++----- src/components/auth/ForgotPassword.jsx | 14 ++------- src/components/auth/Login.jsx | 12 ++------ src/components/auth/PanelTransition.jsx | 38 ++++++++++++++++++++++--- src/components/auth/Password.jsx | 15 ++-------- src/components/auth/PasswordChange.jsx | 17 ++++++----- src/components/auth/Permissions.jsx | 24 ++++++++-------- src/components/auth/Register.jsx | 17 ++--------- src/components/ui/Form.jsx | 2 +- 11 files changed, 81 insertions(+), 93 deletions(-) diff --git a/src/components/auth/Activation.jsx b/src/components/auth/Activation.jsx index d1b62b8..23da91f 100644 --- a/src/components/auth/Activation.jsx +++ b/src/components/auth/Activation.jsx @@ -1,4 +1,4 @@ -import React, { PropTypes } from 'react'; +import React from 'react'; import { FormattedMessage as Message } from 'react-intl'; import Helmet from 'react-helmet'; @@ -11,15 +11,7 @@ import styles from './activation.scss'; import messages from './Activation.messages'; class Body extends BaseAuthBody { - static propTypes = { - ...BaseAuthBody.propTypes, - auth: PropTypes.shape({ - error: PropTypes.string, - login: PropTypes.shape({ - login: PropTypes.stirng - }) - }) - }; + static displayName = 'ActivationBody'; render() { return ( @@ -31,7 +23,7 @@ class Body extends BaseAuthBody {
{this.props.user.email}) + email: ({this.context.user.email}) }} />
diff --git a/src/components/auth/AppInfo.jsx b/src/components/auth/AppInfo.jsx index 9a91306..1f0c9b6 100644 --- a/src/components/auth/AppInfo.jsx +++ b/src/components/auth/AppInfo.jsx @@ -11,8 +11,8 @@ export default class AppInfo extends Component { static displayName = 'AppInfo'; static propTypes = { - name: PropTypes.string.isRequired, - description: PropTypes.string.isRequired, + name: PropTypes.string, + description: PropTypes.string, onGoToAuth: PropTypes.func.isRequired }; diff --git a/src/components/auth/BaseAuthBody.jsx b/src/components/auth/BaseAuthBody.jsx index b745466..13dc089 100644 --- a/src/components/auth/BaseAuthBody.jsx +++ b/src/components/auth/BaseAuthBody.jsx @@ -4,29 +4,32 @@ import React, { Component, PropTypes } from 'react'; import AuthError from './AuthError'; +import { userShape } from 'components/user/User'; export default class BaseAuthBody extends Component { - static propTypes = { + static contextTypes = { clearErrors: PropTypes.func.isRequired, resolve: PropTypes.func.isRequired, reject: PropTypes.func.isRequired, auth: PropTypes.shape({ - error: PropTypes.string - }) + error: PropTypes.string, + scopes: PropTypes.array + }), + user: userShape }; renderErrors() { - return this.props.auth.error - ? + return this.context.auth.error + ? : '' ; } onFormSubmit() { - this.props.resolve(this.serialize()); + this.context.resolve(this.serialize()); } - onClearErrors = this.props.clearErrors; + onClearErrors = this.context.clearErrors; form = {}; diff --git a/src/components/auth/ForgotPassword.jsx b/src/components/auth/ForgotPassword.jsx index 4f5dbc5..dbb78c1 100644 --- a/src/components/auth/ForgotPassword.jsx +++ b/src/components/auth/ForgotPassword.jsx @@ -1,4 +1,4 @@ -import React, { PropTypes } from 'react'; +import React from 'react'; import { FormattedMessage as Message } from 'react-intl'; import Helmet from 'react-helmet'; @@ -12,16 +12,7 @@ import messages from './ForgotPassword.messages'; import styles from './forgotPassword.scss'; class Body extends BaseAuthBody { - static propTypes = { - ...BaseAuthBody.propTypes, - //login: PropTypes.func.isRequired, - auth: PropTypes.shape({ - error: PropTypes.string, - login: PropTypes.shape({ - email: PropTypes.stirng - }) - }) - }; + static displayName = 'ForgotPasswordBody'; // Если юзер вводил своё мыло во время попытки авторизации, то почему бы его сюда автоматически не подставить? render() { @@ -50,7 +41,6 @@ class Body extends BaseAuthBody { onFormSubmit() { // TODO: обработчик отправки письма с инструкцией по смене аккаунта - //this.props.login(this.serialize()); } } diff --git a/src/components/auth/Login.jsx b/src/components/auth/Login.jsx index 7dace24..d35da39 100644 --- a/src/components/auth/Login.jsx +++ b/src/components/auth/Login.jsx @@ -1,4 +1,4 @@ -import React, { PropTypes } from 'react'; +import React from 'react'; import { FormattedMessage as Message } from 'react-intl'; import Helmet from 'react-helmet'; @@ -12,15 +12,7 @@ import messages from './Login.messages'; import passwordMessages from './Password.messages'; class Body extends BaseAuthBody { - static propTypes = { - ...BaseAuthBody.propTypes, - auth: PropTypes.shape({ - error: PropTypes.string, - login: PropTypes.shape({ - login: PropTypes.stirng - }) - }) - }; + static displayName = 'LoginBody'; render() { return ( diff --git a/src/components/auth/PanelTransition.jsx b/src/components/auth/PanelTransition.jsx index d3f4400..54a3b67 100644 --- a/src/components/auth/PanelTransition.jsx +++ b/src/components/auth/PanelTransition.jsx @@ -10,6 +10,7 @@ import {helpLinks as helpLinksStyles} from 'components/auth/helpLinks.scss'; import panelStyles from 'components/ui/panel.scss'; import icons from 'components/ui/icons.scss'; import authFlow from 'services/authFlow'; +import { userShape } from 'components/user/User'; import * as actions from './actions'; @@ -21,6 +22,7 @@ class PanelTransition extends Component { static displayName = 'PanelTransition'; static propTypes = { + // context props auth: PropTypes.shape({ error: PropTypes.string, login: PropTypes.shape({ @@ -28,8 +30,13 @@ class PanelTransition extends Component { password: PropTypes.string }) }).isRequired, + user: userShape.isRequired, setError: React.PropTypes.func.isRequired, clearErrors: React.PropTypes.func.isRequired, + resolve: React.PropTypes.func.isRequired, + reject: React.PropTypes.func.isRequired, + + // local props path: PropTypes.string.isRequired, Title: PropTypes.element.isRequired, Body: PropTypes.element.isRequired, @@ -37,6 +44,30 @@ class PanelTransition extends Component { Links: PropTypes.element.isRequired }; + static childContextTypes = { + auth: PropTypes.shape({ + error: PropTypes.string, + login: PropTypes.shape({ + login: PropTypes.string, + password: PropTypes.string + }) + }), + user: userShape, + clearErrors: React.PropTypes.func, + resolve: PropTypes.func, + reject: PropTypes.func + }; + + getChildContext() { + return { + auth: this.props.auth, + user: this.props.user, + clearErrors: this.props.clearErrors, + resolve: this.props.resolve, + reject: this.props.reject + }; + } + state = { height: {}, contextHeight: 0 @@ -236,7 +267,7 @@ class PanelTransition extends Component {
{hasBackButton ? backButton : null}
- {React.cloneElement(Title, this.props)} + {Title}
); @@ -264,7 +295,6 @@ class PanelTransition extends Component { return ( {React.cloneElement(Body, { - ...this.props, ref: (body) => { this.body = body; } @@ -280,7 +310,7 @@ class PanelTransition extends Component { return (
- {React.cloneElement(Footer, this.props)} + {Footer}
); } @@ -292,7 +322,7 @@ class PanelTransition extends Component { return (
- {React.cloneElement(Links, this.props)} + {Links}
); } diff --git a/src/components/auth/Password.jsx b/src/components/auth/Password.jsx index ad94865..ddad4ae 100644 --- a/src/components/auth/Password.jsx +++ b/src/components/auth/Password.jsx @@ -1,4 +1,4 @@ -import React, { PropTypes } from 'react'; +import React from 'react'; import { FormattedMessage as Message } from 'react-intl'; import Helmet from 'react-helmet'; @@ -13,19 +13,10 @@ import styles from './password.scss'; import messages from './Password.messages'; class Body extends BaseAuthBody { - static propTypes = { - ...BaseAuthBody.propTypes, - auth: PropTypes.shape({ - error: PropTypes.string, - login: PropTypes.shape({ - login: PropTypes.stirng, - password: PropTypes.stirng - }) - }) - }; + static displayName = 'PasswordBody'; render() { - const {user} = this.props; + const {user} = this.context; return (
diff --git a/src/components/auth/PasswordChange.jsx b/src/components/auth/PasswordChange.jsx index fb09742..bf22477 100644 --- a/src/components/auth/PasswordChange.jsx +++ b/src/components/auth/PasswordChange.jsx @@ -2,7 +2,6 @@ import React, { PropTypes } from 'react'; import { FormattedMessage as Message } from 'react-intl'; import Helmet from 'react-helmet'; -import { Link } from 'react-router'; import buttons from 'components/ui/buttons.scss'; import { Input } from 'components/ui/Form'; @@ -14,9 +13,7 @@ import icons from 'components/ui/icons.scss'; import styles from './passwordChange.scss'; class Body extends BaseAuthBody { - static propTypes = { - ...BaseAuthBody.propTypes - }; + static displayName = 'PasswordChangeBody'; render() { return ( @@ -52,7 +49,7 @@ class Body extends BaseAuthBody { } export default function PasswordChange() { - return { + const componentsMap = { Title: () => ( // TODO: separate component for PageTitle {(msg) => {msg}} @@ -64,14 +61,20 @@ export default function PasswordChange() { ), - Links: (props) => ( + Links: (props, context) => ( { event.preventDefault(); - props.reject(); + context.reject(); }}> ) }; + + componentsMap.Links.contextTypes = { + reject: PropTypes.func.isRequired + }; + + return componentsMap; } diff --git a/src/components/auth/Permissions.jsx b/src/components/auth/Permissions.jsx index effe588..2ab2f8d 100644 --- a/src/components/auth/Permissions.jsx +++ b/src/components/auth/Permissions.jsx @@ -12,17 +12,11 @@ import styles from './permissions.scss'; import messages from './Permissions.messages'; class Body extends BaseAuthBody { - static propTypes = { - ...BaseAuthBody.propTypes, - auth: PropTypes.shape({ - error: PropTypes.string, - scopes: PropTypes.array.isRequired - }) - }; + static displayName = 'PermissionsBody'; render() { - const {user} = this.props; - const scopes = this.props.auth.scopes; + const {user} = this.context; + const scopes = this.context.auth.scopes; return (
@@ -61,7 +55,7 @@ class Body extends BaseAuthBody { } export default function Permissions() { - return { + const componentsMap = { Title: () => ( // TODO: separate component for PageTitle {(msg) => {msg}} @@ -73,14 +67,20 @@ export default function Permissions() { ), - Links: (props) => ( + Links: (props, context) => ( { event.preventDefault(); - props.reject(); + context.reject(); }}> ) }; + + componentsMap.Links.contextTypes = { + reject: PropTypes.func.isRequired + }; + + return componentsMap; } diff --git a/src/components/auth/Register.jsx b/src/components/auth/Register.jsx index 7284064..48643e3 100644 --- a/src/components/auth/Register.jsx +++ b/src/components/auth/Register.jsx @@ -1,4 +1,4 @@ -import React, { PropTypes } from 'react'; +import React from 'react'; import { FormattedMessage as Message } from 'react-intl'; import Helmet from 'react-helmet'; @@ -13,20 +13,7 @@ import activationMessages from './Activation.messages'; // TODO: password and username can be validate for length and sameness class Body extends BaseAuthBody { - static propTypes = { - ...BaseAuthBody.propTypes, - register: PropTypes.func.isRequired, - auth: PropTypes.shape({ - error: PropTypes.string, - register: PropTypes.shape({ - email: PropTypes.string, - username: PropTypes.stirng, - password: PropTypes.stirng, - rePassword: PropTypes.stirng, - rulesAgreement: PropTypes.boolean - }) - }) - }; + static displayName = 'RegisterBody'; render() { return ( diff --git a/src/components/ui/Form.jsx b/src/components/ui/Form.jsx index 7dd2a25..bb59b15 100644 --- a/src/components/ui/Form.jsx +++ b/src/components/ui/Form.jsx @@ -14,7 +14,7 @@ export class Input extends Component { id: PropTypes.string }), icon: PropTypes.string, - color: PropTypes.oneOf(['green', 'blue', 'red']) + color: PropTypes.oneOf(['green', 'blue', 'red', 'lightViolet', 'darkBlue']) }; static contextTypes = { From 41015ca336f9cf4741ebeeeb7faac4dcc5b384b3 Mon Sep 17 00:00:00 2001 From: SleepWalker Date: Sun, 13 Mar 2016 10:50:09 +0200 Subject: [PATCH 5/6] =?UTF-8?q?=D0=A1=D0=BE=D0=B7=D0=B4=D0=B0=D0=BB=20?= =?UTF-8?q?=D0=B4=D0=B8=D1=80=D0=B5=D0=BA=D1=82=D0=BE=D1=80=D0=B8=D0=B8=20?= =?UTF-8?q?=D0=B4=D0=BB=D1=8F=20=D0=BA=D0=B0=D0=B6=D0=B4=D0=BE=D0=B3=D0=BE?= =?UTF-8?q?=20=D0=BA=D0=BE=D0=BC=D0=BF=D0=BE=D0=BD=D0=B5=D0=BD=D1=82=D0=B0?= =?UTF-8?q?=20auth?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/auth/BaseAuthBody.jsx | 2 +- .../auth/{ => activation}/Activation.jsx | 2 +- .../auth/{ => activation}/Activation.messages.js | 0 .../auth/{ => activation}/activation.scss | 0 src/components/auth/{ => appInfo}/AppInfo.jsx | 0 .../auth/{ => appInfo}/AppInfo.messages.js | 0 src/components/auth/{ => appInfo}/appInfo.scss | 0 src/components/auth/{ => authError}/AuthError.jsx | 0 .../auth/{ => authError}/AuthError.messages.js | 0 .../auth/{ => forgotPassword}/ForgotPassword.jsx | 2 +- .../ForgotPassword.messages.js | 0 .../auth/{ => forgotPassword}/forgotPassword.scss | 0 src/components/auth/{ => login}/Login.jsx | 4 ++-- src/components/auth/{ => login}/Login.messages.js | 0 src/components/auth/{ => password}/Password.jsx | 2 +- .../auth/{ => password}/Password.messages.js | 0 src/components/auth/{ => password}/password.scss | 0 .../auth/{ => passwordChange}/PasswordChange.jsx | 2 +- .../PasswordChange.messages.js | 0 .../auth/{ => passwordChange}/passwordChange.scss | 0 .../auth/{ => permissions}/Permissions.jsx | 2 +- .../auth/{ => permissions}/Permissions.messages.js | 0 .../auth/{ => permissions}/permissions.scss | 0 src/components/auth/{ => register}/Register.jsx | 4 ++-- .../auth/{ => register}/Register.messages.js | 0 src/pages/auth/AuthPage.jsx | 2 +- src/routes.js | 14 +++++++------- 27 files changed, 18 insertions(+), 18 deletions(-) rename src/components/auth/{ => activation}/Activation.jsx (97%) rename src/components/auth/{ => activation}/Activation.messages.js (100%) rename src/components/auth/{ => activation}/activation.scss (100%) rename src/components/auth/{ => appInfo}/AppInfo.jsx (100%) rename src/components/auth/{ => appInfo}/AppInfo.messages.js (100%) rename src/components/auth/{ => appInfo}/appInfo.scss (100%) rename src/components/auth/{ => authError}/AuthError.jsx (100%) rename src/components/auth/{ => authError}/AuthError.messages.js (100%) rename src/components/auth/{ => forgotPassword}/ForgotPassword.jsx (97%) rename src/components/auth/{ => forgotPassword}/ForgotPassword.messages.js (100%) rename src/components/auth/{ => forgotPassword}/forgotPassword.scss (100%) rename src/components/auth/{ => login}/Login.jsx (91%) rename src/components/auth/{ => login}/Login.messages.js (100%) rename src/components/auth/{ => password}/Password.jsx (97%) rename src/components/auth/{ => password}/Password.messages.js (100%) rename src/components/auth/{ => password}/password.scss (100%) rename src/components/auth/{ => passwordChange}/PasswordChange.jsx (97%) rename src/components/auth/{ => passwordChange}/PasswordChange.messages.js (100%) rename src/components/auth/{ => passwordChange}/passwordChange.scss (100%) rename src/components/auth/{ => permissions}/Permissions.jsx (98%) rename src/components/auth/{ => permissions}/Permissions.messages.js (100%) rename src/components/auth/{ => permissions}/permissions.scss (100%) rename src/components/auth/{ => register}/Register.jsx (95%) rename src/components/auth/{ => register}/Register.messages.js (100%) diff --git a/src/components/auth/BaseAuthBody.jsx b/src/components/auth/BaseAuthBody.jsx index 13dc089..e0253f9 100644 --- a/src/components/auth/BaseAuthBody.jsx +++ b/src/components/auth/BaseAuthBody.jsx @@ -3,7 +3,7 @@ */ import React, { Component, PropTypes } from 'react'; -import AuthError from './AuthError'; +import AuthError from 'components/auth/authError/AuthError'; import { userShape } from 'components/user/User'; export default class BaseAuthBody extends Component { diff --git a/src/components/auth/Activation.jsx b/src/components/auth/activation/Activation.jsx similarity index 97% rename from src/components/auth/Activation.jsx rename to src/components/auth/activation/Activation.jsx index 23da91f..1c20d53 100644 --- a/src/components/auth/Activation.jsx +++ b/src/components/auth/activation/Activation.jsx @@ -6,7 +6,7 @@ import Helmet from 'react-helmet'; import buttons from 'components/ui/buttons.scss'; import { Input } from 'components/ui/Form'; -import BaseAuthBody from './BaseAuthBody'; +import BaseAuthBody from 'components/auth/BaseAuthBody'; import styles from './activation.scss'; import messages from './Activation.messages'; diff --git a/src/components/auth/Activation.messages.js b/src/components/auth/activation/Activation.messages.js similarity index 100% rename from src/components/auth/Activation.messages.js rename to src/components/auth/activation/Activation.messages.js diff --git a/src/components/auth/activation.scss b/src/components/auth/activation/activation.scss similarity index 100% rename from src/components/auth/activation.scss rename to src/components/auth/activation/activation.scss diff --git a/src/components/auth/AppInfo.jsx b/src/components/auth/appInfo/AppInfo.jsx similarity index 100% rename from src/components/auth/AppInfo.jsx rename to src/components/auth/appInfo/AppInfo.jsx diff --git a/src/components/auth/AppInfo.messages.js b/src/components/auth/appInfo/AppInfo.messages.js similarity index 100% rename from src/components/auth/AppInfo.messages.js rename to src/components/auth/appInfo/AppInfo.messages.js diff --git a/src/components/auth/appInfo.scss b/src/components/auth/appInfo/appInfo.scss similarity index 100% rename from src/components/auth/appInfo.scss rename to src/components/auth/appInfo/appInfo.scss diff --git a/src/components/auth/AuthError.jsx b/src/components/auth/authError/AuthError.jsx similarity index 100% rename from src/components/auth/AuthError.jsx rename to src/components/auth/authError/AuthError.jsx diff --git a/src/components/auth/AuthError.messages.js b/src/components/auth/authError/AuthError.messages.js similarity index 100% rename from src/components/auth/AuthError.messages.js rename to src/components/auth/authError/AuthError.messages.js diff --git a/src/components/auth/ForgotPassword.jsx b/src/components/auth/forgotPassword/ForgotPassword.jsx similarity index 97% rename from src/components/auth/ForgotPassword.jsx rename to src/components/auth/forgotPassword/ForgotPassword.jsx index dbb78c1..b6f33ba 100644 --- a/src/components/auth/ForgotPassword.jsx +++ b/src/components/auth/forgotPassword/ForgotPassword.jsx @@ -6,7 +6,7 @@ import Helmet from 'react-helmet'; import buttons from 'components/ui/buttons.scss'; import { Input } from 'components/ui/Form'; -import BaseAuthBody from './BaseAuthBody'; +import BaseAuthBody from 'components/auth/BaseAuthBody'; import messages from './ForgotPassword.messages'; import styles from './forgotPassword.scss'; diff --git a/src/components/auth/ForgotPassword.messages.js b/src/components/auth/forgotPassword/ForgotPassword.messages.js similarity index 100% rename from src/components/auth/ForgotPassword.messages.js rename to src/components/auth/forgotPassword/ForgotPassword.messages.js diff --git a/src/components/auth/forgotPassword.scss b/src/components/auth/forgotPassword/forgotPassword.scss similarity index 100% rename from src/components/auth/forgotPassword.scss rename to src/components/auth/forgotPassword/forgotPassword.scss diff --git a/src/components/auth/Login.jsx b/src/components/auth/login/Login.jsx similarity index 91% rename from src/components/auth/Login.jsx rename to src/components/auth/login/Login.jsx index d35da39..db0e611 100644 --- a/src/components/auth/Login.jsx +++ b/src/components/auth/login/Login.jsx @@ -7,9 +7,9 @@ import { Link } from 'react-router'; import buttons from 'components/ui/buttons.scss'; import { Input } from 'components/ui/Form'; -import BaseAuthBody from './BaseAuthBody'; +import BaseAuthBody from 'components/auth/BaseAuthBody'; +import passwordMessages from 'components/auth/password/Password.messages'; import messages from './Login.messages'; -import passwordMessages from './Password.messages'; class Body extends BaseAuthBody { static displayName = 'LoginBody'; diff --git a/src/components/auth/Login.messages.js b/src/components/auth/login/Login.messages.js similarity index 100% rename from src/components/auth/Login.messages.js rename to src/components/auth/login/Login.messages.js diff --git a/src/components/auth/Password.jsx b/src/components/auth/password/Password.jsx similarity index 97% rename from src/components/auth/Password.jsx rename to src/components/auth/password/Password.jsx index ddad4ae..0297a76 100644 --- a/src/components/auth/Password.jsx +++ b/src/components/auth/password/Password.jsx @@ -8,7 +8,7 @@ import buttons from 'components/ui/buttons.scss'; import icons from 'components/ui/icons.scss'; import { Input, Checkbox } from 'components/ui/Form'; -import BaseAuthBody from './BaseAuthBody'; +import BaseAuthBody from 'components/auth/BaseAuthBody'; import styles from './password.scss'; import messages from './Password.messages'; diff --git a/src/components/auth/Password.messages.js b/src/components/auth/password/Password.messages.js similarity index 100% rename from src/components/auth/Password.messages.js rename to src/components/auth/password/Password.messages.js diff --git a/src/components/auth/password.scss b/src/components/auth/password/password.scss similarity index 100% rename from src/components/auth/password.scss rename to src/components/auth/password/password.scss diff --git a/src/components/auth/PasswordChange.jsx b/src/components/auth/passwordChange/PasswordChange.jsx similarity index 97% rename from src/components/auth/PasswordChange.jsx rename to src/components/auth/passwordChange/PasswordChange.jsx index bf22477..ec043f1 100644 --- a/src/components/auth/PasswordChange.jsx +++ b/src/components/auth/passwordChange/PasswordChange.jsx @@ -6,7 +6,7 @@ import Helmet from 'react-helmet'; import buttons from 'components/ui/buttons.scss'; import { Input } from 'components/ui/Form'; -import BaseAuthBody from './BaseAuthBody'; +import BaseAuthBody from 'components/auth/BaseAuthBody'; import passwordChangedMessages from './PasswordChange.messages'; import icons from 'components/ui/icons.scss'; diff --git a/src/components/auth/PasswordChange.messages.js b/src/components/auth/passwordChange/PasswordChange.messages.js similarity index 100% rename from src/components/auth/PasswordChange.messages.js rename to src/components/auth/passwordChange/PasswordChange.messages.js diff --git a/src/components/auth/passwordChange.scss b/src/components/auth/passwordChange/passwordChange.scss similarity index 100% rename from src/components/auth/passwordChange.scss rename to src/components/auth/passwordChange/passwordChange.scss diff --git a/src/components/auth/Permissions.jsx b/src/components/auth/permissions/Permissions.jsx similarity index 98% rename from src/components/auth/Permissions.jsx rename to src/components/auth/permissions/Permissions.jsx index 2ab2f8d..1ef715e 100644 --- a/src/components/auth/Permissions.jsx +++ b/src/components/auth/permissions/Permissions.jsx @@ -7,7 +7,7 @@ import buttons from 'components/ui/buttons.scss'; import icons from 'components/ui/icons.scss'; import { PanelBodyHeader } from 'components/ui/Panel'; -import BaseAuthBody from './BaseAuthBody'; +import BaseAuthBody from 'components/auth/BaseAuthBody'; import styles from './permissions.scss'; import messages from './Permissions.messages'; diff --git a/src/components/auth/Permissions.messages.js b/src/components/auth/permissions/Permissions.messages.js similarity index 100% rename from src/components/auth/Permissions.messages.js rename to src/components/auth/permissions/Permissions.messages.js diff --git a/src/components/auth/permissions.scss b/src/components/auth/permissions/permissions.scss similarity index 100% rename from src/components/auth/permissions.scss rename to src/components/auth/permissions/permissions.scss diff --git a/src/components/auth/Register.jsx b/src/components/auth/register/Register.jsx similarity index 95% rename from src/components/auth/Register.jsx rename to src/components/auth/register/Register.jsx index 48643e3..e4ed0a1 100644 --- a/src/components/auth/Register.jsx +++ b/src/components/auth/register/Register.jsx @@ -6,9 +6,9 @@ import Helmet from 'react-helmet'; import buttons from 'components/ui/buttons.scss'; import { Input, Checkbox } from 'components/ui/Form'; -import BaseAuthBody from './BaseAuthBody'; +import BaseAuthBody from 'components/auth/BaseAuthBody'; +import activationMessages from 'components/auth/activation/Activation.messages'; import messages from './Register.messages'; -import activationMessages from './Activation.messages'; // TODO: password and username can be validate for length and sameness diff --git a/src/components/auth/Register.messages.js b/src/components/auth/register/Register.messages.js similarity index 100% rename from src/components/auth/Register.messages.js rename to src/components/auth/register/Register.messages.js diff --git a/src/pages/auth/AuthPage.jsx b/src/pages/auth/AuthPage.jsx index d31bcc2..4ee6fbd 100644 --- a/src/pages/auth/AuthPage.jsx +++ b/src/pages/auth/AuthPage.jsx @@ -2,7 +2,7 @@ import React, { Component, PropTypes } from 'react'; import { connect } from 'react-redux'; -import AppInfo from 'components/auth/AppInfo'; +import AppInfo from 'components/auth/appInfo/AppInfo'; import PanelTransition from 'components/auth/PanelTransition'; import styles from './auth.scss'; diff --git a/src/routes.js b/src/routes.js index 679c4e1..69d5c90 100644 --- a/src/routes.js +++ b/src/routes.js @@ -8,14 +8,14 @@ import AuthPage from 'pages/auth/AuthPage'; import { authenticate } from 'components/user/actions'; import OAuthInit from 'components/auth/OAuthInit'; -import Register from 'components/auth/Register'; -import Login from 'components/auth/Login'; -import Permissions from 'components/auth/Permissions'; -import Activation from 'components/auth/Activation'; -import Password from 'components/auth/Password'; +import Register from 'components/auth/register/Register'; +import Login from 'components/auth/login/Login'; +import Permissions from 'components/auth/permissions/Permissions'; +import Activation from 'components/auth/activation/Activation'; +import Password from 'components/auth/password/Password'; import Logout from 'components/auth/Logout'; -import PasswordChange from 'components/auth/PasswordChange'; -import ForgotPassword from 'components/auth/ForgotPassword'; +import PasswordChange from 'components/auth/passwordChange/PasswordChange'; +import ForgotPassword from 'components/auth/forgotPassword/ForgotPassword'; import authFlow from 'services/authFlow'; From 2ad00d27ff1cd3653259bcbabd0c811c46b79cb7 Mon Sep 17 00:00:00 2001 From: SleepWalker Date: Sun, 13 Mar 2016 11:02:24 +0200 Subject: [PATCH 6/6] =?UTF-8?q?=D0=9F=D0=BE=D1=84=D0=B8=D0=BA=D1=81=D0=B8?= =?UTF-8?q?=D0=BB=20=D0=B1=D0=B0=D0=B3,=20=D0=BA=D0=BE=D0=B3=D0=B4=D0=B0?= =?UTF-8?q?=20=D0=B3=D0=BE=D1=81=D1=82=D1=8C=20=D0=BC=D0=BE=D0=B3=20=D0=BF?= =?UTF-8?q?=D0=BE=D0=BF=D0=B0=D1=81=D1=82=D1=8C=20=D0=BD=D0=B0=20=D1=81?= =?UTF-8?q?=D1=82=D1=80=D0=B0=D0=BD=D0=B8=D1=86=D1=83=20=D0=BF=D1=80=D0=BE?= =?UTF-8?q?=D1=84=D0=B8=D0=BB=D1=8F=20=D0=BF=D1=80=D0=B8=20=D0=BA=D0=BB?= =?UTF-8?q?=D0=B8=D0=BA=D0=B5=20=D0=BF=D0=BE=20=D0=BB=D0=BE=D0=B3=D0=BE=20?= =?UTF-8?q?=D1=81=D0=B0=D0=B9=D1=82=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/index/IndexPage.jsx | 8 -------- src/routes.js | 2 +- src/services/authFlow/AuthFlow.js | 14 +++++--------- 3 files changed, 6 insertions(+), 18 deletions(-) diff --git a/src/pages/index/IndexPage.jsx b/src/pages/index/IndexPage.jsx index 427985f..9ac770e 100644 --- a/src/pages/index/IndexPage.jsx +++ b/src/pages/index/IndexPage.jsx @@ -2,17 +2,9 @@ import React, { Component } from 'react'; import { connect } from 'react-redux'; -import authFlow from 'services/authFlow'; - class IndexPage extends Component { displayName = 'IndexPage'; - componentWillMount() { - if (this.props.user.isGuest) { - authFlow.login(); - } - } - render() { const {user, children} = this.props; diff --git a/src/routes.js b/src/routes.js index 69d5c90..20ddaf6 100644 --- a/src/routes.js +++ b/src/routes.js @@ -34,7 +34,7 @@ export default function routesFactory(store) { return ( - + diff --git a/src/services/authFlow/AuthFlow.js b/src/services/authFlow/AuthFlow.js index c071050..b00da93 100644 --- a/src/services/authFlow/AuthFlow.js +++ b/src/services/authFlow/AuthFlow.js @@ -23,7 +23,6 @@ export default class AuthFlow { const {routing} = this.getState(); if (routing.location.pathname !== route) { - this.ignoreRequest = true; // TODO: remove me if (this.replace) { this.replace(route); } @@ -62,10 +61,10 @@ export default class AuthFlow { throw new Error('State is required'); } - if (this.state instanceof state.constructor) { - // already in this state - return; - } + // if (this.state instanceof state.constructor) { + // // already in this state + // return; + // } this.state && this.state.leave(this); this.state = state; @@ -74,10 +73,6 @@ export default class AuthFlow { handleRequest(path, replace) { this.replace = replace; - if (this.ignoreRequest) { - this.ignoreRequest = false; - return; - } switch (path) { case '/oauth': @@ -92,6 +87,7 @@ export default class AuthFlow { this.setState(new ForgotPasswordState()); break; + case '/': case '/login': case '/password': case '/activation':