Skip to content
App.vue 2.02 KiB
Newer Older
<template>
Sonia Zorba's avatar
Sonia Zorba committed
<div id="app" v-if="model">
  <TopMenu v-bind:user="model.user" />
  <div class="container">
    <Main v-if="page === 'main'" />
    <GenericSearchResults v-if="page === 'search'" />
    <UserSearchResult v-if="page === 'userSearch'" />
  </div>
  <div id="loading" v-if="loading">
    <div id="spinner-wrapper">
      <b-spinner variant="primary" style="width: 3rem; height: 3rem;" label="Loading"></b-spinner>
  </div>
Sonia Zorba's avatar
Sonia Zorba committed
</div>
</template>

<script>
import TopMenu from './components/TopMenu.vue';
import Main from './components/Main.vue';
Sonia Zorba's avatar
Sonia Zorba committed
import GenericSearchResults from './components/GenericSearchResults.vue';
import UserSearchResult from './components/UserSearchResult.vue';
import {
  mapState
} from 'vuex';

export default {
  name: 'app',
  components: {
    TopMenu,
Sonia Zorba's avatar
Sonia Zorba committed
    Main,
    GenericSearchResults,
    UserSearchResult
    model: state => state.model,
    input: state => state.input,
Sonia Zorba's avatar
Sonia Zorba committed
    loading: state => state.loading,
    page: state => state.page
  mounted: function() {
Sonia Zorba's avatar
Sonia Zorba committed
    document.addEventListener('apiError', function(event) {
      self.$bvToast.toast(event.message, {
        title: "Error",
        variant: 'danger',
        solid: true
      });
Sonia Zorba's avatar
Sonia Zorba committed
    document.addEventListener('loading', function(event) {
      self.$store.commit('setLoading', event.value);
    });

    // retrieve the initial model
    client.fetchHomePageModel(this.input)
      .then(model => {
        this.$store.commit('updateHomePageModel', model);
      });
#app {
  font-family: 'Avenir', Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
}
Sonia Zorba's avatar
Sonia Zorba committed
  position: fixed;
  top: 0;
  bottom: 0;
  right: 0;
  left: 0;
  background-color: rgba(255, 255, 255, 0.7);
  z-index: 1000;
}

#spinner-wrapper {
  display: flex;
  justify-content: center;
  align-items: center;
  height: 100%;
  width: 100%;
}
</style>