chatboxes.js 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. import { Collection } from "@converse/skeletor/src/collection";
  2. import { _converse, api } from "../../index.js";
  3. import { initStorage } from '@converse/headless/utils/storage.js';
  4. const ChatBoxes = Collection.extend({
  5. comparator: 'time_opened',
  6. model (attrs, options) {
  7. return new _converse.ChatBox(attrs, options);
  8. },
  9. onChatBoxesFetched (collection) {
  10. collection.filter(c => !c.isValid()).forEach(c => c.destroy());
  11. /**
  12. * Triggered once all chat boxes have been recreated from the browser cache
  13. * @event _converse#chatBoxesFetched
  14. * @type { object }
  15. * @property { _converse.ChatBox | _converse.ChatRoom } chatbox
  16. * @property { Element } stanza
  17. * @example _converse.api.listen.on('chatBoxesFetched', obj => { ... });
  18. * @example _converse.api.waitUntil('chatBoxesFetched').then(() => { ... });
  19. */
  20. api.trigger('chatBoxesFetched');
  21. },
  22. onConnected (reconnecting) {
  23. if (reconnecting) { return; }
  24. initStorage(this, `converse.chatboxes-${_converse.bare_jid}`);
  25. this.fetch({
  26. 'add': true,
  27. 'success': c => this.onChatBoxesFetched(c)
  28. });
  29. }
  30. });
  31. export default ChatBoxes;