hummingbird-me/kitsu-web

View on GitHub
app/components/search-results/group.js

Summary

Maintainability
A
25 mins
Test Coverage
F
0%
import Component from '@ember/component';
import { get, set } from '@ember/object';
import { inject as service } from '@ember/service';
import { typeOf } from '@ember/utils';
import { invokeAction } from 'ember-invoke-action';

export default Component.extend({
  page: 0,
  router: service(),

  didReceiveAttrs() {
    this._super(...arguments);
    const items = get(this, 'items');
    const pages = get(items, 'nbPages');
    const hasNextPage = (pages > 1) && (get(this, 'page') !== (pages - 1));
    set(this, 'hasNextPage', hasNextPage);
  },

  actions: {
    onPagination() {
      set(this, 'isLoadingMore', true);
      const page = get(this, 'page') + 1;
      invokeAction(this, 'onPagination', page).then(() => {
        set(this, 'page', page);
        const hasNextPage = page !== (get(this, 'items.nbPages') - 1);
        set(this, 'hasNextPage', hasNextPage);
      }).finally(() => {
        set(this, 'isLoadingMore', false);
      });
    },

    transitionTo(item) {
      invokeAction(this, 'close');
      if (typeOf(item) === 'string') {
        get(this, 'router').transitionTo(item);
      } else {
        const type = get(item, 'kind');
        if (type === 'user') {
          get(this, 'router').transitionTo('users.index', get(item, 'slug'));
        } else if (type === 'group') {
          get(this, 'router').transitionTo('groups.group.group-page.index', get(item, 'slug'));
        } else {
          get(this, 'router').transitionTo(`${type}.show`, get(item, 'slug'));
        }
      }
    }
  }
});