loomio/loomio

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

Summary

Maintainability
C
1 day
Test Coverage
import Session       from '@/shared/services/session';
import Records       from '@/shared/services/records';
import Flash         from '@/shared/services/flash';
import EventBus       from '@/shared/services/event_bus';
import AbilityService from '@/shared/services/ability_service';
import { hardReload } from '@/shared/helpers/window';

export default new class UserService {
  actions(user, vm) {
    return {
      change_password: {
        icon: 'mdi-lock-reset',
        name: 'profile_page.change_password_link',
        canPerform() { return true; },
        perform() {
          return EventBus.$emit('openModal', {
            component: 'ChangePasswordForm',
            props: {
              user
            }
          }
          );
        }
      },

      merge_accounts: {
        icon: 'mdi-account-multiple',
        name: 'profile_page.merge_accounts',
        canPerform() { return true; },
        perform() {
          return EventBus.$emit('openModal', {
            component: 'ConfirmModal',
            props: {
              confirm: {
                text: {
                  title: 'merge_accounts.modal.title',
                  raw_helptext: vm.$t('merge_accounts.placeholder_modal_text')
                }
              }
            }
          }
          );
        }
      },

      deactivate: {
        icon: 'mdi-pause-circle',
        name: 'profile_page.deactivate_account',
        subtitle: 'profile_page.deactivate_account_subtitle',
        canPerform() { return !user.deactivatedAt; },
        perform() {
          return EventBus.$emit('openModal', {
            component: 'ConfirmModal',
            props: {
              confirm: {
                text: {
                  title: 'profile_page.deactivate_account',
                  raw_helptext: `\
                    <p>${vm.$t('deactivation_modal.deactivate_introduction')}</p> \
                    <ul> \
                    <li>${vm.$t('deactivation_modal.you_will_be_deactivated')}</li> \
                    <li>${vm.$t('deactivation_modal.name_not_removed')}</li> \
                    <li>${vm.$t('deactivation_modal.no_longer_group_member')}</li> \
                    <li>${vm.$t('deactivation_modal.no_emails')}</li> \
                    </ul>`,
                  submit: 'deactivation_modal.submit_deactivate'
                },
                submit:() => Records.remote.post('/profile/deactivate'),
                successCallback: () => hardReload("/dashboard")
              }
            }
          }
          );
        }
      },

      redact_user: {
        icon: 'mdi-delete-circle',
        name: 'profile_page.delete_user_link',
        subtitle: 'profile_page.delete_account_subtitle',
        canPerform() { return !user.deactivatedAt; },
        perform() {
          return EventBus.$emit('openModal', {
            component: 'ConfirmModal',
            props: {
              confirm: {
                text: {
                  title: 'profile_page.delete_account',
                  raw_helptext: `\
                    <p>${vm.$t('deactivation_modal.introduction')}</p> \
                    <ul> \
                    <li>${vm.$t('deactivation_modal.you_will_be_deleted')}</li> \
                    <li>${vm.$t('deactivation_modal.name_removed')}</li> \
                    <li>${vm.$t('deactivation_modal.no_longer_group_member')}</li> \
                    <li>${vm.$t('deactivation_modal.no_emails')}</li> \
                    </ul>`,
                  submit: 'deactivation_modal.submit_delete'
                },
                submit() { return Records.users.destroy(); },
                successCallback: () => hardReload("/dashboard")
              }
            }
          }
          );
        }
      }
    };
  }
};