loomio/loomio

View on GitHub
vue/src/shared/services/webhook_service.js

Summary

Maintainability
A
3 hrs
Test Coverage
import Records        from '@/shared/services/records';
import AppConfig      from '@/shared/services/app_config';
import openModal      from '@/shared/helpers/open_modal';
import EventBus from '@/shared/services/event_bus';
import I18n from '@/i18n';

export default new class WebhookService {
  addAction(group) {
    return {
      name: 'webhook.add_integration',
      icon: 'mdi-plus',
      canPerform() { return true; },
      perform() {
        return EventBus.$emit('openModal', {
          component: 'WebhookForm',
          props: {
            webhook: Records.webhooks.build({groupId: group.id})
          }
        }
        );
      }
    };
  }

  webhookActions(webhook) {
    return {
      showApiDocs: {
        name: 'webhook.show_docs',
        icon: 'mdi-key-variant',
        canPerform() {
          return webhook.permissions.length;
        },
        perform() {
          return window.open(AppConfig.baseUrl + `help/api?api_key=${webhook.token}`, '_blank');
        }
      },

      editWebhook: {
        name: 'common.action.edit',
        icon: 'mdi-pencil',
        canPerform() { return true; },
        perform() {
          return EventBus.$emit('openModal', {
            component: 'WebhookForm',
            props: {
              webhook
            }
          }
          );
        }
      },

      destroyWebhook: {
        name: 'common.action.delete',
        icon: 'mdi-delete',
        canPerform() { return true; },
        perform() {
          return EventBus.$emit('openModal', {
            component: 'ConfirmModal',
            props: {
              confirm: {
                submit: webhook.destroy,
                text: {
                  title: 'webhook.remove',
                  raw_helptext: I18n.t('webhook.confirm_remove', {name: webhook.name}),
                  flash: 'webhook.removed'
                }
              }
            }
          }
          );
        }
      }
    };
  }
};