UNPKG

apeman-react-mixins

Version:
89 lines (74 loc) 1.85 kB
/** * Server mixin. * @module ApServerMixin * * Generated by coz on 3/6/2016, * from a template provided by apeman-bud-react. * * @see https://facebook.github.io/react/ */ 'use strict' import defaults from 'defaults' import assert from 'assert' import Promise, {untilResolved} from 'apemanpromise' /** @lends ApServerMixin */ let ApServerMixin = { // -------------------- // Custom // -------------------- $apServerMixed: true, // -------------------- // Lifecycle // -------------------- componentWillMount () { const s = this assert(s.getServerEventSource, '.getServerEventSource() is required.') assert(s.getServerPollingConfig, '.getServerPollingConfig() is required.') assert(s.knockServer, '.knockServer() is required.') let noop = (value) => value defaults(s, { serverWillRestart: noop, serverDidRestart: noop, serverDidGone: noop }) }, componentDidMount () { const s = this let es = s.getServerEventSource() if (es) { es.addEventListener('server:restart', s.handleServerRestart) s._serverES = es } }, componentWillUnmount () { const s = this let es = s._serverES if (es) { es.removeEventListener('server:restart', s.handleServerRestart) es.close() } }, // -------------------- // Custom // -------------------- handleServerRestart (e) { const s = this s.serverWillRestart() let pollingConfig = s.getServerPollingConfig() untilResolved( () => Promise.resolve(s.knockServer()), pollingConfig ) .then((res) => { s.serverDidRestart() }) .catch((err) => { s.serverDidGone() }) }, // -------------------- // Private // -------------------- _serverES: undefined } export default Object.freeze(ApServerMixin)