86 lines
2.2 KiB
JavaScript
86 lines
2.2 KiB
JavaScript
import axios from 'axios'
|
|
|
|
export const formsEndpoint = '/api/open/workspaces/{workspaceId}/forms'
|
|
export const namespaced = true
|
|
export let currentPage = 1
|
|
|
|
// state
|
|
export const state = {
|
|
content: [],
|
|
loading: false
|
|
}
|
|
|
|
// getters
|
|
export const getters = {
|
|
getById: (state) => (id) => {
|
|
if (state.content.length === 0) return null
|
|
return state.content.find(item => item.id === id)
|
|
},
|
|
getBySlug: (state) => (slug) => {
|
|
if (state.content.length === 0) return null
|
|
return state.content.find(item => item.slug === slug)
|
|
},
|
|
getAllTags: (state) => {
|
|
if (state.content.length === 0) return []
|
|
let allTags = []
|
|
state.content.forEach(form => {
|
|
if(form.tags && form.tags.length > 0){
|
|
allTags = allTags.concat(form.tags)
|
|
}
|
|
})
|
|
return allTags.filter((item, i, ar) => ar.indexOf(item) === i)
|
|
}
|
|
}
|
|
|
|
// mutations
|
|
export const mutations = {
|
|
set (state, items) {
|
|
state.content = items
|
|
},
|
|
append (state, items) {
|
|
state.content = state.content.concat(items)
|
|
},
|
|
addOrUpdate (state, item) {
|
|
state.content = state.content.filter((val) => val.id !== item.id)
|
|
state.content.push(item)
|
|
},
|
|
remove (state, item) {
|
|
state.content = state.content.filter((val) => val.id !== item.id)
|
|
},
|
|
startLoading (state) {
|
|
state.loading = true
|
|
},
|
|
stopLoading (state) {
|
|
state.loading = false
|
|
}
|
|
}
|
|
|
|
// actions
|
|
export const actions = {
|
|
resetState (context) {
|
|
context.commit('set', [])
|
|
context.commit('stopLoading')
|
|
currentPage = 1
|
|
},
|
|
load (context, workspaceId) {
|
|
context.commit('startLoading')
|
|
return axios.get(formsEndpoint.replace('{workspaceId}', workspaceId)+'?page='+currentPage).then((response) => {
|
|
context.commit((currentPage == 1) ? 'set' : 'append', response.data.data)
|
|
if (currentPage < response.data.meta.last_page) {
|
|
currentPage += 1
|
|
context.dispatch('load', workspaceId)
|
|
} else {
|
|
context.commit('stopLoading')
|
|
currentPage = 1
|
|
}
|
|
})
|
|
},
|
|
loadIfEmpty (context, workspaceId) {
|
|
if (context.state.content.length === 0) {
|
|
return context.dispatch('load', workspaceId)
|
|
}
|
|
context.commit('stopLoading')
|
|
return Promise.resolve()
|
|
}
|
|
}
|