hummingbird-me/kitsu-web

View on GitHub
app/components/users/edit-profile.js

Summary

Maintainability
A
2 hrs
Test Coverage
F
0%
import Component from '@ember/component';
import { get, set } from '@ember/object';
import { filterBy } from '@ember/object/computed';
import { inject as service } from '@ember/service';
import { task } from 'ember-concurrency';
import { invokeAction } from 'ember-invoke-action';
import RSVP from 'rsvp';

export default Component.extend({
  tab: 'about-me',
  router: service(),
  isDirty: filterBy('records', 'hasDirtyAttributes'),

  updateProfileTask: task(function* () {
    const records = get(this, 'records');
    const saving = records.filterBy('hasDirtyAttributes').map(record => record.save());
    return yield new RSVP.Promise((resolve, reject) => {
      RSVP.allSettled(saving).then(data => {
        const failed = data.filterBy('state', 'rejected');
        return failed.length > 0 ? reject(failed) : resolve();
      });
    });
  }).drop(),

  init() {
    this._super(...arguments);
    set(this, 'records', []);
  },

  actions: {
    onClose() {
      get(this, 'records').filterBy('hasDirtyAttributes').forEach(record => {
        if (get(record, 'isNew') === false) {
          record.rollbackAttributes();
        }
      });
      invokeAction(this, 'onClose');
    },

    addRecord(record) {
      get(this, 'records').addObject(record);
    },

    removeRecord(record) {
      get(this, 'records').removeObject(record);
    },

    hideModal() {
      this.$('.modal').modal('hide');
    },

    transitionToSettings() {
      this.$('.modal').on('hidden.bs.modal', () => {
        get(this, 'router').transitionTo('settings');
      }).modal('hide');
    }
  }
});