123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- <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>
|