import Vue from 'vue'; import Vuex from 'vuex'; Vue.use(Vuex); export default new Vuex.Store({ state: { selectedSign: "all", callSigns: [], data: [] }, getters: { getSelectedSign(state) { return state.selectedSign; }, getSigns(state) { return state.callSigns; }, getData(state) { return state.data; }, getDataRow(state) { return (index) => _.cloneDeep(state.data[index]); } }, mutations: { setSelectedSign(state, sign) { state.selectedSign = sign; }, setSigns(state, signs) { state.callSigns = signs; }, setData(state, data) { state.data = data; }, setDataRow(state, row) { state.data[row.index] = _.cloneDeep(row.data); }, removeDataRow(state, index) { state.data.splice(index, 1); } }, actions: { setSelectedSign(context, sign) { context.commit('setSelectedSign', sign); }, async pullSigns(context) { await axios.get('/special-calls/show').then(response => { context.commit('setSigns', response.data); }).catch(error => { console.log(error); }); }, async pullActivities(context) { await axios.post('/api/activities', {'call-sign': this.state.selectedSign}).then(response => { context.commit('setData', response.data.data); }).catch(error => { console.log(error); }); }, async pullReservations(context) { await axios.post('/special-calls/reservations', {'call-sign': this.state.selectedSign}).then(response => { context.commit('setData', response.data.data); }).catch(error => { console.log(error); }); }, async pushReservation(context, data) { await axios.post('/api/reservations', { action: 'update', ...data.reservation }).then(() => { context.commit('setDataRow', { index: data.index, data: data.reservation }); }).catch(error => { console.log(error); alert("Couldn't update reservation! Bad data!"); }); }, async removeReservation(context, index) { let data = { action: 'delete', ...this.state.data[index] }; if (confirm(`Are you sure you want to delete reservation #${data.id} made by ${data.operatorCall}?`) === true) { await axios.post('/api/reservations', data).then(() => { context.commit('removeDataRow', index); }).catch(error => { console.log(error); alert('Unable to remove reservation!'); }); } } } });