diff options
author | Mateja Marić <mail@matejamaric.com> | 2021-03-22 15:21:40 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-03-22 15:21:40 +0100 |
commit | 6ab102bc4be617255d5eab77faebb1cada65b370 (patch) | |
tree | 09fcff5953cc6ca3702335e717ca72f865124d1c /resources/js/store.js | |
parent | 21e9e94e76a21516edc3d1e4d0462a0ba75aafa4 (diff) | |
parent | db976a9fb0434df0095ea9f1b8858213d57e7535 (diff) | |
download | yota-laravel-2.0.0.tar.gz yota-laravel-2.0.0.zip |
Use Vue.js and Vuex.
Diffstat (limited to 'resources/js/store.js')
-rw-r--r-- | resources/js/store.js | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/resources/js/store.js b/resources/js/store.js new file mode 100644 index 0000000..117db93 --- /dev/null +++ b/resources/js/store.js @@ -0,0 +1,96 @@ +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!'); + }); + } + } + } +}); |