Skip to content

Commit 81c3ad4

Browse files
committed
Using Vuex to handle pagination and list size
1 parent 49f9d7b commit 81c3ad4

File tree

4 files changed

+33
-26
lines changed

4 files changed

+33
-26
lines changed

client/src/components/PaginatedList.vue

+11-15
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<template>
2-
<div class="paginated-list" @resetPageNumber="pageNumber = $event">
2+
<div class="paginated-list" >
33
<div class="row">
44
<ListItem class="col-md-3"
55
v-for="repo in paginatedData"
@@ -27,29 +27,19 @@
2727
components:{
2828
ListItem,
2929
},
30-
data() {
31-
return {
32-
pageNumber: 0
33-
}
34-
},
3530
props:{
3631
list:{
3732
type:Array,
3833
required:true
3934
},
40-
size:{
41-
type:Number,
42-
required:false,
43-
default: 10
44-
},
4535
},
4636
methods: {
4737
nextPage() {
48-
this.pageNumber++;
38+
this.$store.commit('incrementSearchPageNumber')
4939
},
5040
prevPage(){
51-
this.pageNumber--;
52-
}
41+
this.$store.commit('decrementSearchPageNumber')
42+
},
5343
},
5444
computed: {
5545
pageCount() {
@@ -64,7 +54,13 @@
6454
if (start > len ) { start = len - this.size; }
6555
const end = start + this.size;
6656
return this.list.slice(start, end);
67-
}
57+
},
58+
size() {
59+
return this.$store.state.searchListSize
60+
},
61+
pageNumber() {
62+
return this.$store.state.searchPageNumber
63+
},
6864
}
6965
};
7066
</script>

client/src/components/PaginationSelect.vue

+3-2
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,9 @@
2020
},
2121
methods: {
2222
changeSearchPagination(event) {
23-
const size = parseInt(event.target.value);
24-
this.$emit('changeSearchPagination', size)
23+
const size = parseInt(event.target.value);
24+
this.$store.commit('setSearchListSize', size);
25+
this.$store.commit('resetSearchPageNumber')
2526
}
2627
}
2728
}

client/src/components/SearchForm.vue

+3-7
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,14 @@
33
<div>
44
<input type="text" v-model="project" class="form-control" placeholder="search projects...">
55
<ProviderSelect/>
6-
<PaginationSelect @changeSearchPagination="size = $event" />
6+
<PaginationSelect/>
77
<div v-if="$apollo.queries.gitRepos.loading">Searching...</div>
88
<div v-if="error">{{ error }}</div>
99
<br/>
1010
<PaginatedList
1111
v-if="gitRepoResults.length > 0"
1212
:list="gitRepoResults"
13-
:size="size"
14-
:pageNumber="pageNumber"
15-
@resetPageNumber="pageNumber = $event" />
13+
/>
1614
</div>
1715
</div>
1816

@@ -30,8 +28,6 @@
3028
return {
3129
project: '',
3230
error: null,
33-
size: 10,
34-
pageNumber: 0,
3531
}
3632
},
3733
components:{
@@ -50,7 +46,7 @@
5046
}
5147
},
5248
result ({ data }) {
53-
this.$emit('resetPageNumber', 0);
49+
this.$store.commit('resetSearchPageNumber')
5450
return this.gitRepoResults = data.gitRepos.items;
5551
},
5652
options: () => ({ errorPolicy: 'all' }),

client/src/store.js

+16-2
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,29 @@ Vue.use(Vuex)
66
export default new Vuex.Store({
77
state: {
88
provider: 'GITHUB',
9-
gitRepos: []
9+
gitRepos: [],
10+
searchPageNumber: 0,
11+
searchListSize: 10,
1012
},
1113
mutations: {
1214
setProvider(state, provider) {
1315
state.provider = provider;
1416
},
1517
setGitRepos(state, gitRepos) {
1618
state.gitRepos = gitRepos;
17-
}
19+
},
20+
incrementSearchPageNumber(state) {
21+
state.searchPageNumber++;
22+
},
23+
decrementSearchPageNumber(state) {
24+
state.searchPageNumber--;
25+
},
26+
resetSearchPageNumber(state) {
27+
state.searchPageNumber = 0;
28+
},
29+
setSearchListSize(state, searchListSize) {
30+
state.searchListSize = searchListSize;
31+
},
1832
},
1933
actions: {
2034

0 commit comments

Comments
 (0)