import { fetchLabelsUrl, removeLabelUrl, saveLabelUrl } from '../../../../planner/src/config/APIUtils'
import { LABEL_COLOR_MISSING, LABEL_NAME_MISSING, UNKNOWN_ERROR } from '../../../../common/constants/messages'
import proxy from '../../../../common/lib/http-common'
let defaultPublishLabels = {
fetchLabels: false,
items: [],
current_label: [],
loaders: {
visible: false,
save: false,
retrieve: false
}
}
export default{
state: {
labels: {
fetchLabels: false,
items: [],
current_label: [],
loaders: {
visible: false,
save: false,
retrieve: false
}
}
},
actions: {
/**
* Get the labels based on a workspace id
* @param commit
* @param getters
* @param state
*/
fetchLabels ({ commit, getters, state }) {
if (getters.getWorkspaces.activeWorkspace._id) {
commit('SET_RETRIEVE_LABEL', true)
proxy.post(fetchLabelsUrl, { workspace_id: getters.getWorkspaces.activeWorkspace._id }).then(
resp => {
if (resp.data.status) {
commit('SET_LABELS', resp.data.labels)
commit('SET_RETRIEVE_LABEL', true)
} else {
commit('SET_LABELS', [])
commit('SET_RETRIEVE_LABEL', false)
}
console.log(resp)
}
).catch()
}
},
/**
* Save a new label to the account
* @param commit
* @param state
* @param dispatch
* @param getters
*/
saveLabel ({ commit, state, dispatch, getters }) {
if (!getters.getNewLabel.name) {
dispatch('toastNotification', { message: LABEL_NAME_MISSING, type: 'error' })
return
}
if (!getters.getNewLabel.color) {
dispatch('toastNotification', { message: LABEL_COLOR_MISSING, type: 'error' })
return
}
// prepare payload
let payload = {
workspace_id: getters.getWorkspaces.activeWorkspace._id,
name: getters.getNewLabel.name,
color: getters.getNewLabel.color
}
// if it is existing item
if (getters.getNewLabel._id) {
payload['label'] = getters.getNewLabel._id
}
commit('SET_SAVE_LABEL_LOADER', true)
proxy.post(saveLabelUrl, payload).then(resp => {
if (resp.data.status) {
commit('SET_SAVE_LABEL_LOADER', false)
document.getElementById('labelcancel').click()
// if the label already exists, update by index
if (payload.label) {
commit('UPDATE_LABEL_BY_INDEX', resp.data.label)
} else {
commit('ADD_LABEL', resp.data.label)
}
}
}).catch()
},
/**
* Delete a label.
* @param commit
* @param getters
* @param dipsatch
* @param label
*/
deleteLabel ({ commit, getters, dipsatch }, label) {
proxy.post(removeLabelUrl, {
workspace_id: getters.getWorkspaces.activeWorkspace._id,
label: label._id
}).then(
resp => {
if (resp.data.status) {
getters.getLabels.splice(getters.getLabels.indexOf(label), 1)
}
}
)
},
/** Reset labels when someone changes the workspace
*
* @param commit
*/
resetLabels ({ commit }) {
commit('resetLabels')
}
},
mutations: {
SET_RETRIEVE_LABEL (state, status) {
state.labels.loaders.retrieve = status
},
SET_LABELS (state, labels) {
state.labels.items = labels
},
ADD_LABEL (state, label) {
state.labels.items.unshift(label)
},
UPDATE_LABEL_BY_INDEX (state, label) {
if (state.labels.items) {
let index = state.labels.items.findIndex(item => label._id === item._id)
console.log('Existing label index', index)
state.labels.items[index] = label
}
},
SET_NEW_LABEL (state, label) {
if (label) {
state.labels.current_label = label
} else state.labels.current_label = {}
},
RESET_LABELS_STATE (state) {
state.labels = JSON.parse(JSON.stringify(defaultPublishLabels))
},
resetLabels (state) {
state.labels.fetchLabels = false
state.labels.items = []
},
// loaders
SET_SAVE_LABEL_LOADER (state, value) {
state.labels.loaders.save = value
}
},
getters: {
getLabels: state => {
return state.labels.items
},
getNewLabel: state => {
return state.labels.current_label
},
getSaveLabelLoader: state => {
return state.labels.loaders.save
}
}
}