/* global Whisper, _ */ /* eslint-disable more/no-then */ // eslint-disable-next-line func-names (function() { 'use strict'; window.Whisper = window.Whisper || {}; Whisper.NewGroupUpdateView = Whisper.View.extend({ tagName: 'div', className: 'new-group-update', templateName: 'new-group-update', initialize(options) { this.render(); this.avatarInput = new Whisper.FileInputView({ el: this.$('.group-avatar'), window: options.window, }); this.recipients_view = new Whisper.RecipientsInputView(); this.listenTo(this.recipients_view.typeahead, 'sync', () => this.model.contactCollection.models.forEach(model => { if (this.recipients_view.typeahead.get(model)) { this.recipients_view.typeahead.remove(model); } }) ); this.recipients_view.$el.insertBefore(this.$('.container')); this.member_list_view = new Whisper.ContactListView({ collection: this.model.contactCollection, className: 'members', }); this.member_list_view.render(); this.$('.scrollable').append(this.member_list_view.el); }, events: { 'click .back': 'goBack', 'click .send': 'send', 'focusin input.search': 'showResults', 'focusout input.search': 'hideResults', }, hideResults() { this.$('.results').hide(); }, showResults() { this.$('.results').show(); }, goBack() { this.trigger('back'); }, render_attributes() { return { name: this.model.getTitle(), avatar: this.model.getAvatar(), }; }, async send() { // When we turn this view on again, need to handle avatars in the new way // const avatarFile = await this.avatarInput.getThumbnail(); const now = Date.now(); const attrs = { timestamp: now, active_at: now, name: this.$('.name').val(), members: _.union( this.model.get('members'), this.recipients_view.recipients.pluck('id') ), }; // if (avatarFile) { // attrs.avatar = avatarFile; // } // Because we're no longer using Backbone-integrated saves, we need to manually // clear the changed fields here so model.changed is accurate. this.model.changed = {}; this.model.set(attrs); const groupUpdate = this.model.changed; await window.Signal.Data.updateConversation( this.model.id, this.model.attributes, { Conversation: Whisper.Conversation } ); if (groupUpdate.avatar) { this.model.trigger('change:avatar'); } this.model.updateGroup(groupUpdate); this.goBack(); }, }); })();