added vue-infinite-loading loading to base search results
This commit is contained in:
@@ -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>
|
||||
|
@@ -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'))
|
||||
|
@@ -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()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user