Skip to content

Commit 545f1e8

Browse files
committed
add store actions, update templates
1 parent 59ea67b commit 545f1e8

5 files changed

Lines changed: 73 additions & 94 deletions

File tree

pages/_feed/_page.vue

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -50,10 +50,10 @@ export default {
5050
return feeds[this.feed].pages
5151
},
5252
pageData() {
53-
return this.$store.state.feeds[this.feed][this.page]
53+
return this.$state.feeds[this.feed][this.page]
5454
},
5555
displayedItems() {
56-
return this.pageData.map(id => this.$store.state.items[id])
56+
return this.pageData.map(id => this.$state.items[id])
5757
},
5858
loading() {
5959
return this.displayedItems.length === 0
@@ -64,9 +64,10 @@ export default {
6464
page: 'pageChanged'
6565
},
6666
67-
fetch({ store, params: { feed, page = 1 } }) {
67+
fetch({ $actions, params: { feed, page = 1 } }) {
6868
page = Number(page) || 1
69-
return store.dispatch('FETCH_FEED', { feed, page })
69+
console.log('{ feed, page }', { feed, page })
70+
return $actions.fetchFeed({ feed, page })
7071
},
7172
7273
head() {
@@ -87,13 +88,11 @@ export default {
8788
}
8889
8990
// Prefetch next page
90-
this.$store
91-
.dispatch('FETCH_FEED', {
92-
feed: this.feed,
93-
page: this.page + 1,
94-
prefetch: true
95-
})
96-
.catch(() => {})
91+
this.$actions.fetchFeed({
92+
feed: this.feed,
93+
page: this.page + 1,
94+
prefetch: true
95+
})
9796
9897
this.transition =
9998
from === -1 ? null : to > from ? 'slide-left' : 'slide-right'

pages/item/_id.vue

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -48,12 +48,12 @@ export default {
4848
return this.$route.params.id
4949
},
5050
item() {
51-
return this.$store.state.items[this.id]
51+
return this.$state.items[this.id]
5252
}
5353
},
5454
55-
fetch({ store, params: { id } }) {
56-
return store.dispatch('FETCH_ITEM', { id })
55+
fetch({ $actions, params: { id } }) {
56+
return $actions.fetchItem({ id })
5757
},
5858
5959
methods: {

pages/user/_id.vue

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ export default {
3434
3535
computed: {
3636
user() {
37-
return this.$store.state.users[this.$route.params.id]
37+
return this.$state.users[this.$route.params.id]
3838
}
3939
},
4040
@@ -44,8 +44,8 @@ export default {
4444
}
4545
},
4646
47-
fetch({ store, route: { params: { id } } }) {
48-
return store.dispatch('FETCH_USER', { id })
47+
fetch({ $actions, route: { params: { id } } }) {
48+
return $actions.fetchUser({ id })
4949
}
5050
}
5151
</script>

store/actions.js

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
import { $set } from 'vue-stator'
2+
import { CancelToken } from 'axios'
3+
import { lazy } from '~/common/utils'
4+
5+
// =================================================
6+
// Actions
7+
// =================================================
8+
export function fetchFeed({ $axios }, state, { feed, page, prefetch }) {
9+
// Don't priorotize already fetched feeds
10+
if (state.feeds[feed][page] && state.feeds[feed][page].length) {
11+
prefetch = true
12+
}
13+
if (!prefetch) {
14+
if (this.feedCancelSource) {
15+
this.feedCancelSource.cancel(
16+
'priorotize feed: ' + feed + ' page: ' + page
17+
)
18+
}
19+
this.feedCancelSource = CancelToken.source()
20+
}
21+
return lazy(
22+
(items) => {
23+
const ids = items.map(item => item.id)
24+
$set(state.feeds[feed], page, ids)
25+
for (const item of items) {
26+
if (item) {
27+
$set(state.items, item.id, item)
28+
}
29+
}
30+
},
31+
() =>
32+
$axios.$get(`/${feed}?page=${page}`, {
33+
cancelToken: this.feedCancelSource && this.feedCancelSource.token
34+
}),
35+
(state.feeds[feed][page] || []).map(id => state.items[id])
36+
)
37+
}
38+
39+
export function fetchItem({ $axios }, state, { id }) {
40+
return lazy(
41+
(item) => {
42+
if (item) {
43+
$set(state.items, item.id, item)
44+
}
45+
},
46+
() => $axios.$get(`/item/${id}`),
47+
Object.assign({ id, loading: true, comments: [] }, state.items[id])
48+
)
49+
}
50+
51+
export function fetchUser({ $axios }, state, { id }) {
52+
return lazy(
53+
user => $set(state.users, id, user || false), /* false means user not found */
54+
() => $axios.$get(`/user/${id}`),
55+
Object.assign({ id, loading: true }, state.users[id])
56+
)
57+
}

store/index.js

Lines changed: 0 additions & 77 deletions
This file was deleted.

0 commit comments

Comments
 (0)