added vue-infinite-loading loading to base search results

This commit is contained in:
2019-06-12 12:16:15 +02:00
parent a771fd9d74
commit 7acac41863
10 changed files with 142 additions and 21 deletions

View File

@@ -13,6 +13,12 @@
<Card :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>
@@ -35,13 +41,20 @@ export default {
computed: {
...mapState({
items: state => state.Search.items,
searchinfos: state => state.Search.infos
searchinfos: state => state.Search.infos,
count: state => state.Search.count,
limit: state => state.Search.limit
})
},
methods: {
...mapActions({
newSearch: 'Search/newSearch'
})
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
@@ -72,4 +85,5 @@ export default {
</script>
<style lang="scss" scoped>
</style>

View File

@@ -70,7 +70,7 @@ export default {
// lazy load images on mouseover
this.$el.addEventListener('mouseover', function(event) {
let imgs = this.querySelectorAll('.images figure img.lazy')
console.log('mouseover', this, imgs);
// console.log('mouseover', this, imgs);
imgs.forEach((img) => {
// console.log('forEach img',img);
img.setAttribute('src', img.getAttribute('data-src'))

View File

@@ -14,7 +14,10 @@ export default {
offset: 0,
limit: 15,
infos: null,
count: 0
count: 0,
// infinteState will come from vue-infinite-loading plugin
// implemented in vuejs/components/Content/Base.vue
infiniteState: null
},
// getters
@@ -23,13 +26,13 @@ export default {
// mutations
mutations : {
setUuids (state, uuids) {
state.uuids = uuids
state.uuids = state.uuids.concat(uuids)
},
resetUuids (state) {
state.uuids = []
},
setItems (state, items) {
state.items = items
state.items = state.items.concat(items)
},
resetItems (state) {
state.items = []
@@ -51,6 +54,9 @@ export default {
},
incrementOffset(state) {
state.offset += state.limit
},
setInfiniteState(state, s){
state.infiniteState = s
}
},
@@ -63,6 +69,12 @@ export default {
commit('resetOffset')
dispatch('getResults')
},
nextPage ({ dispatch, commit, state }, $state) {
console.log("Search nextPage", $state);
commit('incrementOffset')
commit('setInfiniteState', $state)
dispatch('getResults')
},
getResults ({ dispatch, commit, state }) {
let params = {
keys: state.keys,
@@ -98,7 +110,7 @@ export default {
params[`filter[${uuid}][condition][operator]`] = '='
params[`filter[${uuid}][condition][memberOf]`] = 'uuids-groupe'
}
console.log('search JSONAPI params', params);
// console.log('search JSONAPI params', params);
let q = qs.stringify(params)
return JSONAPI.get('node/materiau?'+q)
.then(({ data }) => {
@@ -119,6 +131,7 @@ export default {
// for (var i = 0; i < data.length; i++) {
for (var i = 0; i < uuids.length; i++) {
let uuid = uuids[i]
// https://stackoverflow.com/questions/11258077/how-to-find-index-of-an-object-by-key-and-value-in-an-javascript-array
let item_index = data.findIndex(p => p.id == uuid)
let item_src = data[item_index]
let attrs = item_src.attributes
@@ -137,19 +150,28 @@ export default {
let img_src = relations.images.data
item.images = []
for (var j = 0; j < img_src.length; j++) {
// // https://stackoverflow.com/questions/11258077/how-to-find-index-of-an-object-by-key-and-value-in-an-javascript-array
// let index = included.findIndex(p => p.id == img_src[j].id)
// let img = included[index]
item.images.push({
title: img_src[j].meta.title,
// meta.imageDerivatives.style.href link is provided by drupal consumers_image_styles module
url: img_src[j].meta.imageDerivatives.links.card_medium.href
})
}
items.push(item)
}
console.log('items', items);
commit('setItems', items);
console.log('items', items)
commit('setItems', items)
if(state.infiniteState){
if (state.offset + state.limit > state.count) {
console.log('Search infinite completed');
// tell to vue-infinite-loading plugin that there si no new page
state.infiniteState.complete()
}else{
console.log('Search infinite loaded');
// tell to vue-infinite-loading plugin that newpage is loaded
state.infiniteState.loaded()
}
}
}
}
}