loomio/loomio

View on GitHub
vue/src/components/auth/provider_form.vue

Summary

Maintainability
Test Coverage
<script lang="js">
import AppConfig from '@/shared/services/app_config';
import { capitalize } from 'lodash-es';

export default {
  props: {
    user: Object
  },

  methods: {
    capitalize,

    select(provider) {
      window.location = `${provider.href}?back_to=${window.location.href}`;
    },

    iconClass(provider) {
      return "mdi-" + ((['saml', 'oauth'].includes(provider)) ? 'key-variant' : provider);
    },

    providerColor(provider) {
      switch (provider) {
      case 'facebook': return '#3b5998';
      case 'google': return '#dd4b39';
      case 'slack': return '#e9a820';
      case 'saml': return this.$vuetify.theme.themes.light.primary;
      case 'oauth': return this.$vuetify.theme.themes.light.primary;
      }
    },
    providerName(name) {
      if (AppConfig.theme.saml_login_provider_name && name == 'saml'){
        return AppConfig.theme.saml_login_provider_name;
      } else if (AppConfig.theme.oauth_login_provider_name && name == 'oauth'){
        return AppConfig.theme.oauth_login_provider_name;
      } else {
        return capitalize(name);
      }
    }
  },

  computed: {
    emailLogin() { return AppConfig.features.app.email_login; },
    providers() { return AppConfig.identityProviders.filter(provider => provider.name !== 'slack'); }
  }
}
</script>

<template lang="pug">
.auth-provider-form(v-if='providers.length')
  v-layout.auth-provider-form__providers(column)
    v-btn.auth-provider-form__provider.my-2(v-for='provider in providers' :key="provider.id" outlined :color="providerColor(provider.name)" @click='select(provider)')
      common-icon(:name="iconClass(provider.name)")
      space
      span(v-t="{ path: 'auth_form.continue_with_provider', args: { provider: providerName(provider.name) } }")
    p.my-2.text-center.auth-email-form__or-enter-email(v-if='emailLogin', v-t="'auth_form.or_enter_your_email'")
</template>

<style lang="sass">
.auth-provider-form__providers
  max-width: 400px
  margin: 0 auto

</style>