Covivo/mobicoop

View on GitHub
client/src/MobicoopBundle/Resources/assets/js/components/home/Home.vue

Summary

Maintainability
Test Coverage
<template>
  <v-container
    text-center
    fluid
    :style="
      'background-image:url(\'' +
        $t('urlBackground') +
        '\');background-size:contain;width:100%;'
    "
    pa-0
  >
    <v-row v-if="displayVerifiedMessagePhone">
      <v-col class="pa-0">
        <v-snackbar
          v-model="snackbar"
          top
          multi-line
          color="info"
          vertical
          :timeout="10000"
        >
          <div>
            {{ $t("snackbar1") }}
            <a
              :href="$t('profileLink')"
              :title="$t('myProfile')"
            >
              " {{ $t("myProfile") }} "
            </a>
            {{ $t("snackbar2") }}
          </div>
          <v-btn
            color="info"
            elevation="0"
            @click="snackbar = false"
          >
            <v-icon color="primary">
              mdi-close
            </v-icon>
          </v-btn>
        </v-snackbar>
      </v-col>
    </v-row>

    <v-row v-if="displayVerifiedMessageEmail">
      <v-col class="pa-0">
        <v-snackbar
          v-model="snackbar"
          top
          multi-line
          color="info"
          vertical
          :timeout="10000"
        >
          <div>
            {{ $t("snackbar3") }}
          </div>
          <v-btn
            color="info"
            elevation="0"
            @click="snackbar = false"
          >
            <v-icon color="primary">
              mdi-close
            </v-icon>
          </v-btn>
        </v-snackbar>
      </v-col>
    </v-row>

    <v-row v-if="displayDeleteAccount">
      <v-col>
        <v-snackbar
          v-model="snackbar"
          top
          multi-line
          color="info"
          vertical
        >
          <div>
            {{ $t("snackbar-account-logout") }}
          </div>
          <v-btn
            color="info"
            elevation="0"
            @click="snackbar = false"
          >
            <v-icon color="primary">
              mdi-close
            </v-icon>
          </v-btn>
        </v-snackbar>
      </v-col>
    </v-row>
    <v-row v-if="displayUnsubscribeEmail">
      <v-col>
        <v-snackbar
          v-model="snackbar"
          top
          multi-line
          color="info"
          vertical
        >
          <div>
            {{ displayUnsubscribeEmail }}
          </div>
          <v-btn
            color="info"
            elevation="0"
            @click="snackbar = false"
          >
            <v-icon color="primary">
              mdi-close
            </v-icon>
          </v-btn>
        </v-snackbar>
      </v-col>
    </v-row>

    <!-- Title and subtitle -->

    <v-row justify="center">
      <v-col
        class="text-center mt-md-n8 pt-md-16 mt-lg-n4 white--text"
        :style="'font-size:1.25rem;line-height:1.25;'"
      >
        <h1 v-html="$t('title')" />
      </v-col>
    </v-row>
    <!-- end Title and subtitle -->

    <!-- search -->
    <v-row
      class="mt-5 mt-md-n16 pt-md-16 mt-lg-16 pt-lg-16"
      justify="center"
    >
      <v-col class=" mt-md-10 mt-lg-8">
        <search
          :geo-search-url="geoSearchUrl"
          :user="user"
          :regular="regular"
          :punctual-date-optional="punctualDateOptional"
          :publish-button-always-active="publishButtonAlwaysActive"
          :image-swap="$t('urlImageSwap')"
          :horizontal="searchComponentHorizontal"
          :geo-complete-results-order="geoCompleteResultsOrder"
          :geo-complete-palette="geoCompletePalette"
          :geo-complete-chip="geoCompleteChip"
          :date-time-picker="dateTimePicker"
        />
      </v-col>
    </v-row>
    <!-- end search -->

    <!-- homeContent -->
    <home-content
      :community-display="communityDisplay"
      :event-display="eventDisplay"
      :solidary-display="solidaryDisplay"
      :url-mobile="mobileUrl"
      :user-id="user && user.id ? user.id : null"
    />
    <v-snackbar
      v-model="mobConnectSnackbar"
      :timeout="10000"
      top
    >
      {{ mobConnect_snackbar_text }}
      <template v-slot:action="{ attrs }">
        <v-btn
          color="pink"
          text
          v-bind="attrs"
          @click="mobConnectSnackbar = false"
        >
          {{ $t('mobConnect-snackbar.close-btn') }}
        </v-btn>
      </template>
    </v-snackbar>
    <m-dialog
      v-if="isEecAvailable"
      :eec-instance="eecInstance"
    />
    <!-- end homeBottom -->
  </v-container>
</template>

<script>
import { merge } from "lodash";
import {
  messages_en,
  messages_fr,
  messages_eu,
  messages_nl
} from "@translations/components/home/Home/";
import {
  messages_client_en,
  messages_client_fr,
  messages_client_eu,
  messages_client_nl
} from "@clientTranslations/components/home/Home/";
import Search from "@components/carpool/search/Search";
import HomeContent from "@components/home/HomeContent";
import MDialog from "@components/utilities/MDialog";

let MessagesMergedEn = merge(messages_en, messages_client_en);
let MessagesMergedNl = merge(messages_nl, messages_client_nl);
let MessagesMergedFr = merge(messages_fr, messages_client_fr);
let MessagesMergedEu = merge(messages_eu, messages_client_eu);

export default {
  i18n: {
    messages: {
      en: MessagesMergedEn,
      nl: MessagesMergedNl,
      fr: MessagesMergedFr,
      eu: MessagesMergedEu
    }
  },
  components: {
    Search,
    HomeContent,
    MDialog
  },
  props: {
    geoSearchUrl: {
      type: String,
      default: ""
    },
    user: {
      type: Object,
      default: null
    },
    regular: {
      type: Boolean,
      default: false
    },
    punctualDateOptional: {
      type: Boolean,
      default: false
    },
    debug: {
      type: Boolean,
      default: false
    },
    position: {
      type: String,
      default: ""
    },
    transitionName: {
      type: String,
      default: ""
    },
    solidaryDisplay: {
      type: Boolean,
      default: false
    },
    eventDisplay: {
      type: Boolean,
      default: false
    },
    displayDeleteAccount: {
      type: Number,
      default: 0
    },
    displayUnsubscribeEmail: {
      type: String,
      default: ""
    },
    communityDisplay: {
      type: Boolean,
      default: false
    },
    publishButtonAlwaysActive: {
      type: Boolean,
      default: false
    },
    // params to add to the publish and search routes
    params: {
      type: Object,
      default: null
    },
    urlMobile: {
      type: String,
      default: null
    },
    informativeMessageActive: {
      type: Boolean,
      default: false
    },
    informativeMessageText: {
      type: String,
      default: null
    },
    searchComponentHorizontal: {
      type: Boolean,
      default: false
    },
    geoCompleteResultsOrder: {
      type: Array,
      default: null
    },
    geoCompletePalette: {
      type: Object,
      default: () => ({})
    },
    geoCompleteChip: {
      type: Boolean,
      default: false
    },
    territoryId: {
      type: String,
      default: null
    },
    dateTimePicker: {
      type: Boolean,
      default: false
    },
    eecInstance: {
      type: Object,
      default: () => ({})
    }
  },
  data() {
    return {
      snackbar: true,
      displayVerifiedMessagePhone: false,
      mobileUrl: this.urlMobile,
      displayVerifiedMessageEmail: false,
      mobConnectSnackbar: false,
      mobConnect_snackbar_text: null
    };
  },
  computed: {
    isEecAvailable() {
      return this.eecInstance && this.eecInstance.available;
    }
  },
  mounted() {
    if (this.user !== null && this.user.validatedDate !== null) {
      this.checkVerifiedPhone();
    } else {
      this.checkVerifiedEmail();
    }
  },
  methods: {
    checkVerifiedPhone() {
      if (this.user !== null && this.user.telephone !== null) {
        this.displayVerifiedMessagePhone = this.user.phoneValidatedDate
          ? false
          : true;
      }
    },
    checkVerifiedEmail() {
      if (this.user !== null && this.user.email !== null) {
        this.displayVerifiedMessageEmail = this.user.validatedDate
          ? false
          : true;
      }
    }
  }
};
</script>