diff --git a/bin/main.js b/bin/main.js
index 1029f7045..a2fd1ebbe 100644
--- a/bin/main.js
+++ b/bin/main.js
@@ -61,15 +61,15 @@
var history = __webpack_require__(231);
var store = __webpack_require__(235);
- var Article = __webpack_require__(255);
- var Editor = __webpack_require__(257);
- var Header = __webpack_require__(259);
- var Home = __webpack_require__(260);
- var Login = __webpack_require__(263);
- var Profile = __webpack_require__(264);
- var ProfileFavorites = __webpack_require__(265);
- var Register = __webpack_require__(266);
- var Settings = __webpack_require__(267);
+ var Article = __webpack_require__(256);
+ var Editor = __webpack_require__(258);
+ var Header = __webpack_require__(260);
+ var Home = __webpack_require__(261);
+ var Login = __webpack_require__(264);
+ var Profile = __webpack_require__(265);
+ var ProfileFavorites = __webpack_require__(266);
+ var Register = __webpack_require__(267);
+ var Settings = __webpack_require__(268);
var App = function (_React$Component) {
_inherits(App, _React$Component);
@@ -21866,7 +21866,7 @@
function isNestedObject(object) {
for (var p in object) {
- if (object.hasOwnProperty(p) && _typeof(object[p]) === 'object' && !Array.isArray(object[p]) && object[p] !== null) return true;
+ if (Object.prototype.hasOwnProperty.call(object, p) && _typeof(object[p]) === 'object' && !Array.isArray(object[p]) && object[p] !== null) return true;
}return false;
}
@@ -24796,7 +24796,7 @@
/* 216 */
/***/ function(module, exports, __webpack_require__) {
- 'use strict';
+ /* WEBPACK VAR INJECTION */(function(process) {'use strict';
exports.__esModule = true;
@@ -24814,6 +24814,10 @@
return obj && obj.__esModule ? obj : { 'default': obj };
}
+ var _warning = __webpack_require__(169);
+
+ var _warning2 = _interopRequireDefault(_warning);
+
var _ExecutionEnvironment = __webpack_require__(173);
var _PathUtils = __webpack_require__(172);
@@ -24839,7 +24843,11 @@
if (basename == null && _ExecutionEnvironment.canUseDOM) {
var base = document.getElementsByTagName('base')[0];
- if (base) basename = _PathUtils.extractPath(base.href);
+ if (base) {
+ process.env.NODE_ENV !== 'production' ? _warning2['default'](false, 'Automatically setting basename using is deprecated and will ' + 'be removed in the next major release. The semantics of are ' + 'subtly different from basename. Please pass the basename explicitly in ' + 'the options to createHistory') : undefined;
+
+ basename = base.getAttribute('href');
+ }
}
function addBasename(location) {
@@ -24941,6 +24949,7 @@
exports['default'] = useBasename;
module.exports = exports['default'];
+ /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3)))
/***/ },
/* 217 */
@@ -25241,7 +25250,7 @@
state = null;
key = history.createKey();
- if (isSupported) window.history.replaceState(_extends({}, historyState, { key: key }), null, path);
+ if (isSupported) window.history.replaceState(_extends({}, historyState, { key: key }), null);
}
var location = _PathUtils.parsePath(path);
@@ -26764,32 +26773,34 @@
/***/ },
/* 226 */
-/***/ function(module, exports) {
+/***/ function(module, exports, __webpack_require__) {
'use strict';
- /**
- * Expose `Emitter`.
+ /**
+ * Expose `Emitter`.
*/
- module.exports = Emitter;
+ if (true) {
+ module.exports = Emitter;
+ }
- /**
- * Initialize a new `Emitter`.
- *
- * @api public
+ /**
+ * Initialize a new `Emitter`.
+ *
+ * @api public
*/
function Emitter(obj) {
if (obj) return mixin(obj);
};
- /**
- * Mixin the emitter properties.
- *
- * @param {Object} obj
- * @return {Object}
- * @api private
+ /**
+ * Mixin the emitter properties.
+ *
+ * @param {Object} obj
+ * @return {Object}
+ * @api private
*/
function mixin(obj) {
@@ -26799,13 +26810,13 @@
return obj;
}
- /**
- * Listen on the given `event` with `fn`.
- *
- * @param {String} event
- * @param {Function} fn
- * @return {Emitter}
- * @api public
+ /**
+ * Listen on the given `event` with `fn`.
+ *
+ * @param {String} event
+ * @param {Function} fn
+ * @return {Emitter}
+ * @api public
*/
Emitter.prototype.on = Emitter.prototype.addEventListener = function (event, fn) {
@@ -26814,14 +26825,14 @@
return this;
};
- /**
- * Adds an `event` listener that will be invoked a single
- * time then automatically removed.
- *
- * @param {String} event
- * @param {Function} fn
- * @return {Emitter}
- * @api public
+ /**
+ * Adds an `event` listener that will be invoked a single
+ * time then automatically removed.
+ *
+ * @param {String} event
+ * @param {Function} fn
+ * @return {Emitter}
+ * @api public
*/
Emitter.prototype.once = function (event, fn) {
@@ -26835,14 +26846,14 @@
return this;
};
- /**
- * Remove the given callback for `event` or all
- * registered callbacks.
- *
- * @param {String} event
- * @param {Function} fn
- * @return {Emitter}
- * @api public
+ /**
+ * Remove the given callback for `event` or all
+ * registered callbacks.
+ *
+ * @param {String} event
+ * @param {Function} fn
+ * @return {Emitter}
+ * @api public
*/
Emitter.prototype.off = Emitter.prototype.removeListener = Emitter.prototype.removeAllListeners = Emitter.prototype.removeEventListener = function (event, fn) {
@@ -26876,12 +26887,12 @@
return this;
};
- /**
- * Emit `event` with the given args.
- *
- * @param {String} event
- * @param {Mixed} ...
- * @return {Emitter}
+ /**
+ * Emit `event` with the given args.
+ *
+ * @param {String} event
+ * @param {Mixed} ...
+ * @return {Emitter}
*/
Emitter.prototype.emit = function (event) {
@@ -26899,12 +26910,12 @@
return this;
};
- /**
- * Return array of callbacks for `event`.
- *
- * @param {String} event
- * @return {Array}
- * @api public
+ /**
+ * Return array of callbacks for `event`.
+ *
+ * @param {String} event
+ * @return {Array}
+ * @api public
*/
Emitter.prototype.listeners = function (event) {
@@ -26912,12 +26923,12 @@
return this._callbacks['$' + event] || [];
};
- /**
- * Check if this emitter has `event` handlers.
- *
- * @param {String} event
- * @return {Boolean}
- * @api public
+ /**
+ * Check if this emitter has `event` handlers.
+ *
+ * @param {String} event
+ * @return {Boolean}
+ * @api public
*/
Emitter.prototype.hasListeners = function (event) {
@@ -28225,27 +28236,44 @@
'use strict';
+ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; };
+
var agent = __webpack_require__(223);
exports.promiseMiddleware = function (store) {
return function (next) {
return function (action) {
if (isPromise(action.payload)) {
- store.dispatch({ type: 'ASYNC_START', subtype: action.type });
- action.payload.then(function (res) {
- console.log('RESULT', res);
- action.payload = res;
- store.dispatch(action);
- }, function (error) {
- console.log('ERROR', error);
- action.error = true;
- action.payload = error.response.body;
- store.dispatch(action);
- });
+ var _ret = function () {
+ store.dispatch({ type: 'ASYNC_START', subtype: action.type });
+ var initialView = store.getState().viewChangeCounter;
+ action.payload.then(function (res) {
+ // The view might have changed mid-promise, so if the view unloaded,
+ // don't dispatch the action.
+ var finalView = store.getState().viewChangeCounter;
+ if (finalView !== initialView) {
+ return;
+ }
+ console.log('RESULT', res);
+ action.payload = res;
+ store.dispatch(action);
+ }, function (error) {
+ var finalView = store.getState().viewChangeCounter;
+ if (finalView !== initialView) {
+ return;
+ }
+ console.log('ERROR', error);
+ action.error = true;
+ action.payload = error.response.body;
+ store.dispatch(action);
+ });
- store.dispatch({ type: 'LOADING' });
+ return {
+ v: void 0
+ };
+ }();
- return;
+ if ((typeof _ret === 'undefined' ? 'undefined' : _typeof(_ret)) === "object") return _ret.v;
}
next(action);
@@ -28288,11 +28316,13 @@
var editor = __webpack_require__(251);
var home = __webpack_require__(252);
var profile = __webpack_require__(253);
- var settings = __webpack_require__(254);
+ var profileFavorites = __webpack_require__(254);
+ var settings = __webpack_require__(255);
var defaultState = {
appName: 'Conduit',
- token: null
+ token: null,
+ viewChangeCounter: 0
};
module.exports = function () {
@@ -28304,6 +28334,7 @@
state = editor(state, action);
state = home(state, action);
state = profile(state, action);
+ state = profileFavorites(state, action);
state = settings(state, action);
switch (action.type) {
case 'APP_LOAD':
@@ -28332,7 +28363,9 @@
state = Object.assign({}, state, { redirectTo: '/' });
break;
case 'ARTICLE_PAGE_UNLOADED':
- state = Object.assign({}, state);
+ state = Object.assign({}, state, {
+ viewChangeCounter: state.viewChangeCounter + 1
+ });
delete state.article;
delete state.comments;
delete state.commentErrors;
@@ -28422,7 +28455,9 @@
break;
case 'LOGIN_PAGE_UNLOADED':
case 'REGISTER_PAGE_UNLOADED':
- state = Object.assign({}, state);
+ state = Object.assign({}, state, {
+ viewChangeCounter: state.viewChangeCounter + 1
+ });
var props = ['errors', 'username', 'email', 'password', 'inProgress'];
var _iteratorNormalCompletion = true;
var _didIteratorError = false;
@@ -28497,7 +28532,9 @@
}
break;
case 'EDITOR_PAGE_UNLOADED':
- state = Object.assign({}, state);
+ state = Object.assign({}, state, {
+ viewChangeCounter: state.viewChangeCounter + 1
+ });
var keys = ['title', 'description', 'body', 'tagInput', 'tagList', 'errors', 'articleSlug', 'inProgress'];
var _iteratorNormalCompletion = true;
var _didIteratorError = false;
@@ -28562,7 +28599,9 @@
});
break;
case 'HOME_PAGE_UNLOADED':
- state = Object.assign({}, state);
+ state = Object.assign({}, state, {
+ viewChangeCounter: state.viewChangeCounter + 1
+ });
delete state.articles;
delete state.tags;
delete state.tab;
@@ -28612,7 +28651,9 @@
});
break;
case 'PROFILE_PAGE_UNLOADED':
- state = Object.assign({}, state);
+ state = Object.assign({}, state, {
+ viewChangeCounter: state.viewChangeCounter + 1
+ });
delete state.profile;
delete state.articles;
delete state.articlesCount;
@@ -28635,6 +28676,26 @@
'use strict';
+ module.exports = function () {
+ var state = arguments.length <= 0 || arguments[0] === undefined ? defaultState : arguments[0];
+ var action = arguments[1];
+
+ switch (action.type) {
+ case 'PROFILE_FAVORITES_PAGE_UNLOADED':
+ return Object.assign({}, state, {
+ viewChangeCounter: state.viewChangeCounter + 1
+ });
+ }
+
+ return state;
+ };
+
+/***/ },
+/* 255 */
+/***/ function(module, exports) {
+
+ 'use strict';
+
module.exports = function (state, action) {
switch (action.type) {
case 'SETTINGS_SAVED':
@@ -28648,7 +28709,9 @@
}
break;
case 'SETTINGS_PAGE_UNLOADED':
- state = Object.assign({}, state);
+ state = Object.assign({}, state, {
+ viewChangeCounter: state.viewChangeCounter + 1
+ });
var _arr = ['errors', 'inProgress'];
for (var _i = 0; _i < _arr.length; _i++) {
var key = _arr[_i];
@@ -28666,7 +28729,7 @@
};
/***/ },
-/* 255 */
+/* 256 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
@@ -28682,7 +28745,7 @@
var React = __webpack_require__(160);
var Router = __webpack_require__(166);
var agent = __webpack_require__(223);
- var marked = __webpack_require__(256);
+ var marked = __webpack_require__(257);
var store = __webpack_require__(235);
var DeleteButton = function DeleteButton(props) {
@@ -28701,7 +28764,7 @@
React.createElement('i', { className: 'ion-trash-a', onClick: del })
);
}
- return;
+ return null;
};
var Comment = function Comment(props) {
@@ -29035,7 +29098,7 @@
module.exports = Article;
/***/ },
-/* 256 */
+/* 257 */
/***/ function(module, exports, __webpack_require__) {
var __WEBPACK_AMD_DEFINE_RESULT__;/* WEBPACK VAR INJECTION */(function(global) {'use strict';
@@ -30224,7 +30287,7 @@
/* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))
/***/ },
-/* 257 */
+/* 258 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
@@ -30237,7 +30300,7 @@
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
- var ListErrors = __webpack_require__(258);
+ var ListErrors = __webpack_require__(259);
var React = __webpack_require__(160);
var agent = __webpack_require__(223);
var store = __webpack_require__(235);
@@ -30425,7 +30488,7 @@
module.exports = Editor;
/***/ },
-/* 258 */
+/* 259 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
@@ -30479,7 +30542,7 @@
module.exports = ListErrors;
/***/ },
-/* 259 */
+/* 260 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
@@ -30621,7 +30684,7 @@
module.exports = Header;
/***/ },
-/* 260 */
+/* 261 */
/***/ function(module, exports, __webpack_require__) {
/* WEBPACK VAR INJECTION */(function(global) {'use strict';
@@ -30634,7 +30697,7 @@
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
- var ArticleList = __webpack_require__(261);
+ var ArticleList = __webpack_require__(262);
var React = __webpack_require__(160);
var Router = __webpack_require__(166);
var agent = __webpack_require__(223);
@@ -30896,12 +30959,12 @@
/* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))
/***/ },
-/* 261 */
+/* 262 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
- var ArticlePreview = __webpack_require__(262);
+ var ArticlePreview = __webpack_require__(263);
var React = __webpack_require__(160);
var agent = __webpack_require__(223);
var store = __webpack_require__(235);
@@ -30981,7 +31044,7 @@
module.exports = ArticleList;
/***/ },
-/* 262 */
+/* 263 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
@@ -31086,7 +31149,7 @@
module.exports = ArticlePreview;
/***/ },
-/* 263 */
+/* 264 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
@@ -31099,7 +31162,7 @@
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
- var ListErrors = __webpack_require__(258);
+ var ListErrors = __webpack_require__(259);
var React = __webpack_require__(160);
var Router = __webpack_require__(166);
var agent = __webpack_require__(223);
@@ -31232,7 +31295,7 @@
module.exports = Login;
/***/ },
-/* 264 */
+/* 265 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
@@ -31245,7 +31308,7 @@
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
- var ArticleList = __webpack_require__(261);
+ var ArticleList = __webpack_require__(262);
var React = __webpack_require__(160);
var Router = __webpack_require__(166);
var agent = __webpack_require__(223);
@@ -31443,7 +31506,7 @@
module.exports = Profile;
/***/ },
-/* 265 */
+/* 266 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
@@ -31456,7 +31519,7 @@
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
- var Profile = __webpack_require__(264);
+ var Profile = __webpack_require__(265);
var React = __webpack_require__(160);
var Router = __webpack_require__(166);
var agent = __webpack_require__(223);
@@ -31475,10 +31538,15 @@
key: 'componentWillMount',
value: function componentWillMount() {
store.dispatch({
- type: 'PROFILE_PAGE_LOADED',
+ type: 'PROFILE_FAVORITES_PAGE_LOADED',
payload: Promise.all([agent.Profile.get(this.props.params.username), agent.Articles.favoritedBy(this.props.params.username)])
});
}
+ }, {
+ key: 'componentWillUnmount',
+ value: function componentWillUnmount() {
+ store.dispatch({ type: 'PROFILE_FAVORITES_PAGE_UNLOADED' });
+ }
}, {
key: 'renderTabs',
value: function renderTabs() {
@@ -31517,7 +31585,7 @@
module.exports = ProfileFavorites;
/***/ },
-/* 266 */
+/* 267 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
@@ -31530,7 +31598,7 @@
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
- var ListErrors = __webpack_require__(258);
+ var ListErrors = __webpack_require__(259);
var React = __webpack_require__(160);
var Router = __webpack_require__(166);
var agent = __webpack_require__(223);
@@ -31680,7 +31748,7 @@
module.exports = Register;
/***/ },
-/* 267 */
+/* 268 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
@@ -31695,7 +31763,7 @@
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
- var ListErrors = __webpack_require__(258);
+ var ListErrors = __webpack_require__(259);
var React = __webpack_require__(160);
var Router = __webpack_require__(166);
var agent = __webpack_require__(223);
diff --git a/src/components/ProfileFavorites.js b/src/components/ProfileFavorites.js
index f9ff8e3fd..6d5f0ed4e 100644
--- a/src/components/ProfileFavorites.js
+++ b/src/components/ProfileFavorites.js
@@ -9,7 +9,7 @@ const store = require('../store');
class ProfileFavorites extends Profile {
componentWillMount() {
store.dispatch({
- type: 'PROFILE_PAGE_LOADED',
+ type: 'PROFILE_FAVORITES_PAGE_LOADED',
payload: Promise.all([
agent.Profile.get(this.props.params.username),
agent.Articles.favoritedBy(this.props.params.username)
@@ -17,6 +17,10 @@ class ProfileFavorites extends Profile {
});
}
+ componentWillUnmount() {
+ store.dispatch({ type: 'PROFILE_FAVORITES_PAGE_UNLOADED' });
+ }
+
renderTabs() {
return (
diff --git a/src/middleware.js b/src/middleware.js
index 4f02c7e6b..628deffc7 100644
--- a/src/middleware.js
+++ b/src/middleware.js
@@ -5,13 +5,24 @@ const agent = require('./agent');
exports.promiseMiddleware = store => next => action => {
if (isPromise(action.payload)) {
store.dispatch({ type: 'ASYNC_START', subtype: action.type });
+ const initialView = store.getState().viewChangeCounter;
action.payload.then(
res => {
+ // The view might have changed mid-promise, so if the view unloaded,
+ // don't dispatch the action.
+ const finalView = store.getState().viewChangeCounter;
+ if (finalView !== initialView) {
+ return;
+ }
console.log('RESULT', res);
action.payload = res;
store.dispatch(action);
},
error => {
+ const finalView = store.getState().viewChangeCounter;
+ if (finalView !== initialView) {
+ return;
+ }
console.log('ERROR', error);
action.error = true;
action.payload = error.response.body;
@@ -19,8 +30,6 @@ exports.promiseMiddleware = store => next => action => {
}
);
- store.dispatch({ type: 'LOADING' });
-
return;
}
diff --git a/src/reducer.js b/src/reducer.js
index 856a91711..6b4e40db5 100644
--- a/src/reducer.js
+++ b/src/reducer.js
@@ -5,11 +5,13 @@ const auth = require('./reducers/auth');
const editor = require('./reducers/editor');
const home = require('./reducers/home');
const profile = require('./reducers/profile');
+const profileFavorites = require('./reducers/profileFavorites');
const settings = require('./reducers/settings');
const defaultState = {
appName: 'Conduit',
- token: null
+ token: null,
+ viewChangeCounter: 0
};
module.exports = (state = defaultState, action) => {
@@ -18,6 +20,7 @@ module.exports = (state = defaultState, action) => {
state = editor(state, action);
state = home(state, action);
state = profile(state, action);
+ state = profileFavorites(state, action);
state = settings(state, action);
switch (action.type) {
case 'APP_LOAD':
@@ -46,7 +49,9 @@ module.exports = (state = defaultState, action) => {
state = Object.assign({}, state, { redirectTo: '/' });
break;
case 'ARTICLE_PAGE_UNLOADED':
- state = Object.assign({}, state);
+ state = Object.assign({}, state, {
+ viewChangeCounter: state.viewChangeCounter + 1
+ });
delete state.article;
delete state.comments;
delete state.commentErrors;
diff --git a/src/reducers/auth.js b/src/reducers/auth.js
index e99ee1a8d..7d3c77bf3 100644
--- a/src/reducers/auth.js
+++ b/src/reducers/auth.js
@@ -16,7 +16,9 @@ module.exports = (state, action) => {
break;
case 'LOGIN_PAGE_UNLOADED':
case 'REGISTER_PAGE_UNLOADED':
- state = Object.assign({}, state);
+ state = Object.assign({}, state, {
+ viewChangeCounter: state.viewChangeCounter + 1
+ });
const props = ['errors', 'username', 'email', 'password', 'inProgress']
for (const key of props) {
delete state[key];
diff --git a/src/reducers/editor.js b/src/reducers/editor.js
index ac22bf40f..655545d2c 100644
--- a/src/reducers/editor.js
+++ b/src/reducers/editor.js
@@ -23,7 +23,9 @@ module.exports = (state, action) => {
}
break;
case 'EDITOR_PAGE_UNLOADED':
- state = Object.assign({}, state);
+ state = Object.assign({}, state, {
+ viewChangeCounter: state.viewChangeCounter + 1
+ });
const keys = [
'title',
'description',
diff --git a/src/reducers/home.js b/src/reducers/home.js
index 084364475..d1e35b208 100644
--- a/src/reducers/home.js
+++ b/src/reducers/home.js
@@ -12,7 +12,9 @@ module.exports = (state, action) => {
});
break;
case 'HOME_PAGE_UNLOADED':
- state = Object.assign({}, state);
+ state = Object.assign({}, state, {
+ viewChangeCounter: state.viewChangeCounter + 1
+ });
delete state.articles;
delete state.tags;
delete state.tab;
diff --git a/src/reducers/profile.js b/src/reducers/profile.js
index 6d7880ed8..2b44bd61b 100644
--- a/src/reducers/profile.js
+++ b/src/reducers/profile.js
@@ -11,7 +11,9 @@ module.exports = (state = defaultState, action) => {
});
break;
case 'PROFILE_PAGE_UNLOADED':
- state = Object.assign({}, state);
+ state = Object.assign({}, state, {
+ viewChangeCounter: state.viewChangeCounter + 1
+ });
delete state.profile;
delete state.articles;
delete state.articlesCount;
diff --git a/src/reducers/profileFavorites.js b/src/reducers/profileFavorites.js
new file mode 100644
index 000000000..548fb6e9a
--- /dev/null
+++ b/src/reducers/profileFavorites.js
@@ -0,0 +1,12 @@
+'use strict';
+
+module.exports = (state = defaultState, action) => {
+ switch (action.type) {
+ case 'PROFILE_FAVORITES_PAGE_UNLOADED':
+ return Object.assign({}, state, {
+ viewChangeCounter: state.viewChangeCounter + 1
+ });
+ }
+
+ return state;
+};
diff --git a/src/reducers/settings.js b/src/reducers/settings.js
index 0ff3f082e..ee5e53840 100644
--- a/src/reducers/settings.js
+++ b/src/reducers/settings.js
@@ -13,7 +13,9 @@ module.exports = (state, action) => {
}
break;
case 'SETTINGS_PAGE_UNLOADED':
- state = Object.assign({}, state);
+ state = Object.assign({}, state, {
+ viewChangeCounter: state.viewChangeCounter + 1
+ });
for (const key of ['errors', 'inProgress']) {
delete state[key];
}