connection.addHandler(safeCB(presenceEl => { const showEl = presenceEl.querySelector('show'); let show = 'online'; if (presenceEl.getAttribute('type') === 'unavailable') { show = 'offline'; } else if (showEl) { show = showEl.textContent; } const statusEl = presenceEl.querySelector('status'); const bareJID = Strophe.getBareJidFromJid(presenceEl.getAttribute('from')); const presence = { jid: presenceEl.getAttribute('from'), show, status: statusEl ? statusEl.textContent : undefined }; if (this.state.presences.bareJID) { this.setState({ presences: update(this.state.presences, { [bareJID]: { [presence.jid]: { $set: presence } } })}); } else { this.setState({ presences: update(this.state.presences, { [bareJID]: { $set: { [presence.jid]: presence } } })}); } return true; }), null, 'presence', null, null, null);