hummingbird-me/kitsu-web

View on GitHub
app/components/groups/dashboard/audit-log-item.js

Summary

Maintainability
B
4 hrs
Test Coverage
F
0%
import Component from '@ember/component';
import { get, set } from '@ember/object';
import { inject as service } from '@ember/service';
import { task } from 'ember-concurrency';
import { hrefTo } from 'ember-href-to/helpers/href-to';

export default Component.extend({
  classNames: ['audit-log-item'],
  intl: service(),

  init() {
    this._super(...arguments);
    get(this, 'buildMessageTask').perform().then(message => {
      set(this, 'message', message);
    });
  },

  buildMessageTask: task(function* () {
    const targetType = get(this, 'item.target.modelType');
    const verb = get(this, 'item.verb');
    switch (targetType) {
      // ban, invite, permission
      case 'user': {
        const user = get(this, 'item.target.name');
        return get(this, 'intl').t(`groups.dashboard.audit.${targetType}.${verb}`, {
          user,
          link: hrefTo(this, 'users.index', get(user, 'url'))
        });
      }

      // neighbor
      case 'group': {
        const group = get(this, 'item.target.name');
        return get(this, 'intl').t(`groups.dashboard.audit.${targetType}.${verb}`, {
          group,
          link: hrefTo(this, 'groups.group.group-page.index', get(this, 'item.target.slug'))
        });
      }

      // reports
      case 'group-report': {
        return get(this, 'intl').t(`groups.dashboard.audit.${targetType}.${verb}`);
      }

      // tickets
      case 'group-ticket': {
        if (verb === 'assigned') {
          yield this._loadRelationship('assignee');
          const user = get(this, 'item.target.assignee.name');
          return get(this, 'intl').t(`groups.dashboard.audit.${targetType}.${verb}`, {
            user,
            link: hrefTo(this, 'users.index', get(user, 'url'))
          });
        }
        return get(this, 'intl').t(`groups.dashboard.audit.${targetType}.${verb}`);
      }

      default: {
        return '';
      }
    }
  }),

  _loadRelationship(relationship, target = 'item.target.content') {
    return get(this, target).belongsTo(relationship).load();
  }
});