hummingbird-me/kitsu-web

View on GitHub
app/components/explore/favorite-button.js

Summary

Maintainability
A
35 mins
Test Coverage
F
0%
import Component from '@ember/component';
import { get, set } from '@ember/object';
import { inject as service } from '@ember/service';
import { bool } from '@ember/object/computed';
import { task } from 'ember-concurrency';

export default Component.extend({
  tagName: '',
  store: service(),
  isFavorited: bool('_favoriteRecord'),

  didReceiveAttrs() {
    this._super(...arguments);
    set(this, '_favoriteRecord', null);
    if (get(this, 'session.hasUser')) {
      get(this, 'getFavoriteTask').perform();
    }
  },

  getFavoriteTask: task(function* () {
    const record = yield get(this, 'store').query('category-favorite', {
      filter: {
        user_id: get(this, 'session.account.id'),
        category_id: get(this, 'category.id')
      }
    }).then(records => get(records, 'firstObject'));
    set(this, '_favoriteRecord', record);
  }).drop(),

  createFavoriteTask: task(function* () {
    if (!get(this, 'session.hasUser')) { return get(this, 'session').signUpModal(); }
    if (get(this, 'getFavoriteTask.isRunning')) { return; }
    const record = get(this, 'store').createRecord('category-favorite', {
      user: get(this, 'session.account'),
      category: get(this, 'category')
    });
    yield record.save();
    set(this, '_favoriteRecord', record);
  }).drop(),

  destroyFavoriteTask: task(function* () {
    if (get(this, 'getFavoriteTask.isRunning')) { return; }
    const record = get(this, '_favoriteRecord');
    yield record.destroyRecord();
    set(this, '_favoriteRecord', null);
  }).drop()
});