diff --git a/client/coral-embed-stream/src/containers/Embed.js b/client/coral-embed-stream/src/containers/Embed.js index 12e05eed8..d5399fc60 100644 --- a/client/coral-embed-stream/src/containers/Embed.js +++ b/client/coral-embed-stream/src/containers/Embed.js @@ -3,6 +3,8 @@ import {compose, gql, graphql} from 'react-apollo'; import {connect} from 'react-redux'; import {bindActionCreators} from 'redux'; import isEqual from 'lodash/isEqual'; +import branch from 'recompose/branch'; +import renderComponent from 'recompose/renderComponent'; import {Spinner} from 'coral-ui'; import {authActions, assetActions, pym} from 'coral-framework'; @@ -19,7 +21,6 @@ class EmbedContainer extends React.Component { componentDidMount() { pym.sendMessage('childReady'); - this.props.checkLogin(); } componentWillReceiveProps(nextProps) { @@ -108,6 +109,10 @@ const mapDispatchToProps = dispatch => export default compose( connect(mapStateToProps, mapDispatchToProps), + branch( + props => !props.auth.checkedInitialLogin, + renderComponent(Spinner), + ), withQuery, )(EmbedContainer); diff --git a/client/coral-embed-stream/src/containers/Stream.js b/client/coral-embed-stream/src/containers/Stream.js index 4df7fc960..4415f5f94 100644 --- a/client/coral-embed-stream/src/containers/Stream.js +++ b/client/coral-embed-stream/src/containers/Stream.js @@ -118,7 +118,9 @@ class StreamContainer extends React.Component { }; componentDidMount() { - this.props.data.refetch(); + if (this.props.previousTab) { + this.props.data.refetch(); + } this.countPoll = setInterval(() => { const {asset} = this.props.root; this.getCounts({ @@ -236,6 +238,7 @@ const mapStateToProps = state => ({ assetId: state.stream.assetId, assetUrl: state.stream.assetUrl, activeTab: state.embed.activeTab, + previousTab: state.embed.previousTab, }); const mapDispatchToProps = dispatch => diff --git a/client/coral-embed-stream/src/index.js b/client/coral-embed-stream/src/index.js index f3f6075b6..2fd1e2731 100644 --- a/client/coral-embed-stream/src/index.js +++ b/client/coral-embed-stream/src/index.js @@ -3,6 +3,7 @@ import {render} from 'react-dom'; import {ApolloProvider} from 'react-apollo'; import {client} from 'coral-framework/services/client'; +import {checkLogin} from 'coral-framework/actions/auth'; import reducers from './reducers'; import localStore, {injectReducers} from 'coral-framework/services/store'; @@ -12,6 +13,11 @@ injectReducers(reducers); const store = (window.opener && window.opener.coralStore) ? window.opener.coralStore : localStore; +// Don't run this in the popup. +if (store === localStore) { + store.dispatch(checkLogin()); +} + render( diff --git a/client/coral-embed-stream/src/reducers/embed.js b/client/coral-embed-stream/src/reducers/embed.js index e7fe5a533..0fd661543 100644 --- a/client/coral-embed-stream/src/reducers/embed.js +++ b/client/coral-embed-stream/src/reducers/embed.js @@ -2,6 +2,7 @@ import * as actions from '../constants/embed'; const initialState = { activeTab: 'stream', + previousTab: '', }; export default function stream(state = initialState, action) { @@ -10,6 +11,7 @@ export default function stream(state = initialState, action) { return { ...state, activeTab: action.tab, + previousTab: state.activeTab, }; default: return state; diff --git a/client/coral-framework/reducers/auth.js b/client/coral-framework/reducers/auth.js index 6e678cab9..83ea49ce5 100644 --- a/client/coral-framework/reducers/auth.js +++ b/client/coral-framework/reducers/auth.js @@ -8,6 +8,7 @@ const initialState = Map({ user: null, showSignInDialog: false, showCreateUsernameDialog: false, + checkedInitialLogin: false, view: 'SIGNIN', error: '', passwordRequestSuccess: null, @@ -71,10 +72,12 @@ export default function auth (state = initialState, action) { .set('isLoading', true); case actions.CHECK_LOGIN_FAILURE: return state + .set('checkedInitialLogin', true) .set('loggedIn', false) .set('user', null); case actions.CHECK_LOGIN_SUCCESS: return state + .set('checkedInitialLogin', true) .set('loggedIn', true) .set('isAdmin', action.isAdmin) .set('user', purge(action.user)); @@ -114,7 +117,11 @@ export default function auth (state = initialState, action) { .set('isLoading', false) .set('successSignUp', true); case actions.LOGOUT_SUCCESS: - return initialState; + return state + .set('user', null) + .set('isLoading', false) + .set('loggedIn', false) + .set('isAdmin', false); case actions.INVALID_FORM: return state .set('error', action.error); diff --git a/package.json b/package.json index 5fd619639..250c0549f 100644 --- a/package.json +++ b/package.json @@ -96,12 +96,15 @@ "prop-types": "^15.5.8", "react-apollo": "^1.1.0", "react-recaptcha": "^2.2.6", + "recompose": "^0.23.1", "redis": "^2.7.1", "uuid": "^3.0.1", "simplemde": "^1.11.2", "subscriptions-transport-ws": "^0.5.5-alpha.0", "resolve": "^1.3.2", - "semver": "^5.3.0" + "semver": "^5.3.0", + "simplemde": "^1.11.2", + "uuid": "^3.0.1" }, "devDependencies": { "apollo-client": "^1.0.4", @@ -181,6 +184,7 @@ "regenerator": "^0.8.46", "selenium-standalone": "^5.11.2", "style-loader": "^0.16.0", + "subscriptions-transport-ws": "^0.5.5-alpha.0", "supertest": "^2.0.1", "timeago.js": "^2.0.3", "webpack": "^2.3.1" diff --git a/yarn.lock b/yarn.lock index 5db3de1d3..30276f62b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1486,6 +1486,10 @@ chalk@1.1.3, chalk@^1.0.0, chalk@^1.1.0, chalk@^1.1.1, chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" +change-emitter@^0.1.2: + version "0.1.6" + resolved "https://registry.yarnpkg.com/change-emitter/-/change-emitter-0.1.6.tgz#e8b2fe3d7f1ab7d69a32199aff91ea6931409515" + character-parser@^2.1.1: version "2.2.0" resolved "https://registry.yarnpkg.com/character-parser/-/character-parser-2.2.0.tgz#c7ce28f36d4bcd9744e5ffc2c5fcde1c73261fc0" @@ -2995,6 +2999,7 @@ fastparse@^1.1.1: resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.1.tgz#d1e2643b38a94d7583b479060e6c4affc94071f8" fbjs@^0.8.4, fbjs@^0.8.9: + version "0.8.12" resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.12.tgz#10b5d92f76d45575fd63a217d4ea02bea2f8ed04" dependencies: @@ -3739,7 +3744,7 @@ hoek@4.x.x: version "4.1.1" resolved "https://registry.yarnpkg.com/hoek/-/hoek-4.1.1.tgz#9cc573ffba2b7b408fb5e9c2a13796be94cddce9" -hoist-non-react-statics@^1.0.3, hoist-non-react-statics@^1.2.0: +hoist-non-react-statics@^1.0.0, 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" @@ -6931,6 +6936,15 @@ rechoir@^0.6.2: dependencies: resolve "^1.1.6" +recompose@^0.23.1: + version "0.23.1" + resolved "https://registry.yarnpkg.com/recompose/-/recompose-0.23.1.tgz#577613e24a7ff56f9ca6b899190f8a9c0857fc20" + dependencies: + change-emitter "^0.1.2" + fbjs "^0.8.1" + hoist-non-react-statics "^1.0.0" + symbol-observable "^1.0.4" + redis-commands@^1.2.0: version "1.3.1" resolved "https://registry.yarnpkg.com/redis-commands/-/redis-commands-1.3.1.tgz#81d826f45fa9c8b2011f4cd7a0fe597d241d442b" @@ -7778,7 +7792,7 @@ svgo@^0.7.0: version "0.0.21" resolved "https://registry.yarnpkg.com/sylvester/-/sylvester-0.0.21.tgz#2987b1ce2bd2f38b0dce2a34388884bfa4400ea7" -symbol-observable@^1.0.2: +symbol-observable@^1.0.2, symbol-observable@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.4.tgz#29bf615d4aa7121bdd898b22d4b3f9bc4e2aa03d"