<template> <div id="Base"> <div class="loading" v-if="!searchinfos"> <span>{{ $t('default.Loading…') }}</span> </div> <div class="cards-list" v-else> <aside class="search-info"> {{ searchinfos }} </aside> <div class="loading" v-if="!items.length & !noresults"> <span>{{ $t('default.Loading…') }}</span> </div> <ul v-else> <li v-for="item in items" v-bind:key="item.id"> <Card v-if="item.bundle == 'materiau'" :item="item"/> <CardThematique v-if="item.bundle == 'thematique'" :item="item"/> </li> </ul> <infinite-loading v-if="count > limit" @infinite="nextPage" > <div slot="no-more">No more results</div> </infinite-loading> </div> </div> </template> <script> import Card from 'vuejs/components/Content/Card' import CardThematique from 'vuejs/components/Content/CardThematique' import { mapState, mapActions } from 'vuex' export default { name: "Base", data() { return { pagetitle:"Base", // searchinfos: null } }, computed: { ...mapState({ items: state => state.Search.items, searchinfos: state => state.Search.infos, count: state => state.Search.count, noresults: state => state.Search.noresults, limit: state => state.Search.limit }) }, methods: { ...mapActions({ newSearch: 'Search/newSearch', nextPage: 'Search/nextPage' }), // infiniteHandler($state){ // console.log('inifiniteHandler', $state) // this.nextPage() // } }, created() { // at first page load or first route entering launch a search if params exists in url query console.log('Base created() location',window.location) let params = new URLSearchParams(window.location.search) if (params.has('keys')) { const r = /,\s?$/ let keys = params.get('keys').replace(r,'').split(', ') console.log('Base created, keys', keys) this.$store.commit('Search/setKeys', keys) this.pagetitle = keys.join(', ') //params.get('keys') } else { this.$store.commit('Search/reSetKeys') this.pagetitle = 'Base' } if (params.has('terms')) { console.log('Base created, has terms', params.get('terms')) // this.$store.commit('Search/setTerms', params.get('terms').split(',')) this.$store.commit('Search/setTerms', JSON.parse(params.get('terms'))) } else { this.$store.commit('Search/reSetTerms') } if (params.has('filters')) { this.$store.commit('Search/setFilters', params.get('filters').split(',')) } else { this.$store.commit('Search/reSetFilters') } this.newSearch() }, beforeRouteUpdate (to, from, next) { // when query change launch a new search console.log('Base beforeRouteUpdate', to, from, next) // todo text field of search form is not emptying on clicking on base after a search // this.$store.commit('Search/setKeys', to.query.keys) if (to.query.hasOwnProperty('terms')) { this.$store.commit('Search/setTerms', to.query.terms) }else{ this.$store.commit('Search/reSetTerms') } if (to.query.hasOwnProperty('filters')) { this.$store.commit('Search/setFilters', to.query.filters) }else{ this.$store.commit('Search/reSetFilters') } if (to.query.hasOwnProperty('keys')) { const r = /,\s?$/ let keys = to.query.keys.replace(r,'').split(', ') console.log('Base created, keys', keys) this.$store.commit('Search/setKeys', keys) this.pagetitle = to.query.keys }else{ this.$store.commit('Search/reSetKeys') } this.newSearch() next() }, components: { Card, CardThematique } } </script> <style lang="scss" scoped> </style>