%PDF- %PDF-
| Direktori : /home/dopla/www/wp-content/plugins/ml-slider/admin/assets/js/app/store/modules/ |
| Current File : /home/dopla/www/wp-content/plugins/ml-slider/admin/assets/js/app/store/modules/slideshows.js |
import slideshow from '../../api/Slideshow'
// initial state
const state = {
all: [],
locked: false,
remainingPages: 1,
totalSlideshows: 0,
fetchingAll: false,
currentId: null
}
const slideshowStub = () => {
return {
title: '',
theme: '',
id: '',
settings: {},
slides: {}
}
}
// getters
const getters = {
getCurrent: (state, getters) => {
if (!state.all.length) return slideshowStub()
const current = state.all.find(slideshow => (slideshow.id === state.currentId))
if (!current) return slideshowStub()
return current
},
}
// actions
const actions = {
getSingleSlideshow({ commit }, id) {
slideshow.single(id).then(({ data }) => {
commit('addSlideshows', data.data)
}).catch(error => {
window.metaslider.app.MetaSlider.notifyError('metaslider/fetching-single-slideshows-error', error, true)
})
},
getRecentSlideshows({ commit }) {
const page = 1
slideshow.all(page).then(({ data }) => {
if (data.data.hasOwnProperty('remaining_pages')) {
commit('updateRemainingPagesCount', data.data.remaining_pages)
delete data.data.remaining_pages
delete data.data.page
}
if (data.data.hasOwnProperty('totalSlideshows')) {
commit('setTotalSlideshows', data.data.totalSlideshows)
delete data.data.totalSlideshows
}
commit('addSlideshows', data.data)
}).catch(error => {
window.metaslider.app.MetaSlider.notifyError('metaslider/fetching-recent-slideshows-error', error, true)
})
},
getAllSlideshows({ commit }) {
const page = 1
return fetchAllSlideshows(page, commit).catch(error => {
window.metaslider.app.MetaSlider.notifyError('metaslider/fetching-all-slideshows-error', error, true)
})
}
}
const fetchAllSlideshows = (page, commit) => {
commit('setFetchingAll', true)
return new Promise((resolve) => {
slideshow.all(page, 200).then(({ data }) => {
let nextPage = false
// If there are remaining pages we need to send another request with the next page
if (data.data.hasOwnProperty('remaining_pages')) {
nextPage = data.data.page + 1
commit('updateRemainingPagesCount', data.data.remaining_pages)
delete data.data.remaining_pages
delete data.data.page
} else {
commit('updateRemainingPagesCount', 0)
}
if (data.data.hasOwnProperty('totalSlideshows')) {
commit('setTotalSlideshows', data.data.totalSlideshows)
delete data.data.totalSlideshows
}
commit('addSlideshows', data.data)
// Only make a request every 2 seconds to cut down on processing load
setTimeout(() => {
!nextPage && commit('setFetchingAll', false)
resolve(nextPage ? fetchAllSlideshows(nextPage, commit) : data)
}, 2000);
})
})
}
// mutations
const mutations = {
setCurrent(state, id) {
state.currentId = id
},
setTotalSlideshows(state, count) {
state.totalSlideshows = count
},
updateRemainingPagesCount(state, count) {
state.remainingPages = count
},
addSlideshows(state, slideshows) {
slideshows && Object.keys(slideshows).forEach(key => {
// Check if the slideshow already exists in the store
const index = state.all.findIndex(slideshow => (slideshow.id === slideshows[key].id))
if (index > -1) {
// If the two objects are not identical, replace with the new one
if (JSON.stringify(state.all[index]) !== JSON.stringify(slideshows[key])) {
Object.assign(state.all[index], slideshows[key])
console.log('MetaSlider:', 'Updated slideshow id #' + slideshows[key].id + ' in local storage.')
}
} else {
// It's new, so push to the store
state.all.push(slideshows[key])
}
})
},
updateTheme(state, theme) {
const index = state.all.findIndex(slideshow => (slideshow.id === state.currentId))
state.all[index]['theme'] = theme
},
updateTitle(state, title) {
const index = state.all.findIndex(slideshow => (slideshow.id === state.currentId))
state.all[index]['title'] = title
},
setLocked(state, locked) {
state.locked = locked
},
setFetchingAll(state, status) {
state.fetchingAll = status
}
}
export default {
namespaced: true,
state,
getters,
actions,
mutations
}