%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 }