hummingbird-me/kitsu-web

View on GitHub
app/components/application/auth-onboarding/rate-content.js

Summary

Maintainability
A
0 mins
Test Coverage
F
0%
import Component from '@ember/component';
import { get, set, computed } from '@ember/object';
import { task, timeout } from 'ember-concurrency';
import { inject as service } from '@ember/service';
import { isEmpty } from '@ember/utils';
import { invokeAction } from 'ember-invoke-action';
import { concat } from 'client/utils/computed-macros';
import Pagination from 'kitsu-shared/mixins/pagination';

export default Component.extend(Pagination, {
  activeTab: 'anime',
  searchQuery: '',
  numRated: 0,
  store: service(),
  media: concat('queryTask.lastSuccessful.value', 'paginatedRecords'),

  numRatedLeft: computed('numRated', function() {
    if (get(this, 'numRated') > 5) {
      return 0;
    }
    return 5 - get(this, 'numRated');
  }),

  init() {
    this._super(...arguments);
    get(this, 'queryTask').perform();
  },

  queryTask: task(function* () {
    set(this, 'paginatedRecords', []);
    const mediaType = get(this, 'activeTab');
    const filters = { page: { limit: 20 } };
    const query = get(this, 'searchQuery');
    if (isEmpty(query) === true) {
      filters.sort = '-user_count';
    } else {
      filters.filter = { text: query };
    }
    return yield this.queryPaginated(mediaType, filters).then(records => {
      set(this, 'paginatedRecords', []);
      return records;
    });
  }).restartable(),

  updateSearchQuery: task(function* (query) {
    set(this, 'searchQuery', query);
    yield timeout(1000);
    yield get(this, 'queryTask').perform();
  }).restartable(),

  actions: {
    changeComponent(component) {
      invokeAction(this, 'changeComponent', component);
    },

    updateTab(tab) {
      set(this, 'activeTab', tab);
      get(this, 'queryTask').perform();
    },

    libraryEntryDoingUpdate(entry, task) {
      if (get(entry, 'rating')) {
        this.incrementProperty('numRated');
        task.catch(() => this.decrementProperty('numRated'));
      }
    }
  }
});