allow navigation information to be cached
This commit is contained in:
parent
43e0d4a856
commit
e73c6e6019
@ -25,7 +25,12 @@ const state = {
|
|||||||
showMessage: null,
|
showMessage: null,
|
||||||
showConfirm: null,
|
showConfirm: null,
|
||||||
previewMode: false,
|
previewMode: false,
|
||||||
hash: ''
|
hash: '',
|
||||||
|
lastViewed: {
|
||||||
|
path: '',
|
||||||
|
clicked: '',
|
||||||
|
pageOffset: 0
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export default new Vuex.Store({
|
export default new Vuex.Store({
|
||||||
|
|||||||
@ -88,6 +88,7 @@ const mutations = {
|
|||||||
state.previewMode = value
|
state.previewMode = value
|
||||||
},
|
},
|
||||||
setHash: (state, value) => (state.hash = value),
|
setHash: (state, value) => (state.hash = value),
|
||||||
|
setLastViewed: (state, value) => (state.lastViewed = value)
|
||||||
}
|
}
|
||||||
|
|
||||||
export default mutations
|
export default mutations
|
||||||
|
|||||||
@ -63,7 +63,8 @@ export default {
|
|||||||
'reload',
|
'reload',
|
||||||
'multiple',
|
'multiple',
|
||||||
'loading',
|
'loading',
|
||||||
'show'
|
'show',
|
||||||
|
'lastViewed'
|
||||||
]),
|
]),
|
||||||
isPreview () {
|
isPreview () {
|
||||||
return !this.loading && !this.isListing && !this.isEditor || this.loading && this.$store.state.previewMode
|
return !this.loading && !this.isListing && !this.isEditor || this.loading && this.$store.state.previewMode
|
||||||
@ -111,7 +112,7 @@ export default {
|
|||||||
this.fetchData()
|
this.fetchData()
|
||||||
},
|
},
|
||||||
watch: {
|
watch: {
|
||||||
'$route': 'fetchData',
|
'$route': 'nav',
|
||||||
'reload': function () {
|
'reload': function () {
|
||||||
this.fetchData()
|
this.fetchData()
|
||||||
}
|
}
|
||||||
@ -129,6 +130,43 @@ export default {
|
|||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
...mapMutations([ 'setLoading' ]),
|
...mapMutations([ 'setLoading' ]),
|
||||||
|
async nav() {
|
||||||
|
if (!this.isPreview && !this.isEditor && clean(`/${this.$route.params.pathMatch}`) !== clean(this.lastViewed.path) && clean(`/${this.$route.params.pathMatch}`).startsWith(clean(this.lastViewed.path))) {
|
||||||
|
let dirs = clean(this.$route.fullPath).split("/")
|
||||||
|
|
||||||
|
this.$store.commit('setLastViewed', {
|
||||||
|
path: this.req.path,
|
||||||
|
clicked: decodeURIComponent(dirs[dirs.length - 1]),
|
||||||
|
pageOffset: window.pageYOffset
|
||||||
|
})
|
||||||
|
this.fetchData()
|
||||||
|
} else if (clean(this.lastViewed.path) === clean(`/${this.$route.params.pathMatch}`)) {
|
||||||
|
await this.fetchData()
|
||||||
|
|
||||||
|
let offset = 1000, oldPageOffset = 0, pageOffset = window.pageYOffset, _this = this
|
||||||
|
let int = setInterval(function() {
|
||||||
|
window.scrollTo(0, offset)
|
||||||
|
oldPageOffset = pageOffset
|
||||||
|
pageOffset = window.pageYOffset
|
||||||
|
if (offset >= _this.lastViewed.pageOffset || oldPageOffset === pageOffset) clearInterval(int);
|
||||||
|
offset += Math.min(1000, _this.lastViewed.pageOffset - offset)
|
||||||
|
}, 20);
|
||||||
|
|
||||||
|
for (let i = 0; i < this.req.items.length; i++) {
|
||||||
|
if (this.req.items[i].name === this.lastViewed.clicked) {
|
||||||
|
this.$store.commit('addSelected', i)
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
this.$store.commit('setLastViewed', {
|
||||||
|
path: '',
|
||||||
|
clicked: '',
|
||||||
|
pageOffset: 0
|
||||||
|
})
|
||||||
|
this.fetchData()
|
||||||
|
}
|
||||||
|
},
|
||||||
async fetchData () {
|
async fetchData () {
|
||||||
// Reset view information.
|
// Reset view information.
|
||||||
this.$store.commit('setReload', false)
|
this.$store.commit('setReload', false)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user