aboutsummaryrefslogtreecommitdiff
path: root/resources/js/store.js
diff options
context:
space:
mode:
Diffstat (limited to 'resources/js/store.js')
-rw-r--r--resources/js/store.js96
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!');
+ });
+ }
+ }
+ }
+});