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 (