Files
app/src/stores/Flights.js
T

115 lines
3.3 KiB
JavaScript

import {defineStore} from 'pinia'
import {FLIGHT_DETAIL, FLIGHTS_LIST} from "src/graphql/queries/flights";
import {EDIT_FLIGHT, CREATE_FLIGHT, DELETE_FLIGHT} from "src/graphql/mutations/flight";
import {deleteFromItems, mutate, query, updateInItems} from "stores/helpers";
import {ref} from "vue";
import {DELETE_AIRCRAFT} from "src/graphql/mutations/aircrafts";
export const useFlightsStore = defineStore('Flights', () => {
const flight = ref(null);
const flights = ref([]);
const isMutationRunning = ref(false);
const isQueryRunning = ref(false);
const fetchDetail = (id, username) => {
return query({
isQueryRunning,
query: FLIGHT_DETAIL,
variables: {username, id},
}).then(item => flight.value = item);
};
const fetch = (username = undefined) => {
return query({
isQueryRunning,
query: FLIGHTS_LIST,
variables: {username}
}).then(items => flights.value = items);
}
const create = (input) => {
return mutate({
isMutationRunning,
mutation: CREATE_FLIGHT,
variables: {input},
}).then(item => {
flights.value.push(item);
return item;
})
}
const update = (id, input) => {
return mutate({
isMutationRunning,
mutation: EDIT_FLIGHT,
variables: {id, input}
}).then(item => {
updateInItems(flights.value, 'id', item);
flight.value = item;
})
}
const destroy = (id) => {
return mutate({
isMutationRunning,
mutation: DELETE_FLIGHT,
variables: {id}
}).then(item => deleteFromItems(flights.value, 'id', item))
}
return {
flight, flights, isMutationRunning, isQueryRunning, fetchDetail, fetch, create, update, destroy
}
//
// actions: {
// create(formData) {
// delete formData['id'];
// return apolloWrapper.mutate(CREATE_FLIGHT, {input: formData}).then(({data}) => {
// const flightId = data.createFlight.id;
//
// // pitomy ohack kvuli tomu, ze se mi nedari dostat z API rovnou informace o nove vytvorenem letadle
// this.fetchDetail(flightId).then(flight => {
// this.items.push(flight);
// })
//
// return data.createFlight;
// })
// },
// update(id, formData) {
// this.isMutationRunning = true;
// return apolloWrapper.mutate(EDIT_FLIGHT, {id: id, input: formData}).then(({data}) => {
// const flight = data.editFlight;
// updateInItems(this.items, "id", flight);
//
// return flight;
// }).finally(() => this.isMutationRunning = false);
// },
// fetchDetail(id, username = null) {
// if (typeof id !== "number") {
// id = parseInt(id);
// }
// return apolloWrapper.query(FLIGHT_DETAIL, {id, username}).then(result => result.data.flight);
// },
// fetch(username = null) {
// return apolloWrapper
// .query(FLIGHTS_LIST, {username})
// .then((resp) => {
// const data = resp.data;
// this.items = data.flights;
// return data.flights;
// }).catch(err => console.log(err));
// },
// delete(id) {
// return apolloWrapper.mutate(DELETE_FLIGHT, {id}).then(({data}) => {
//
// const idx = this.items.indexOf(this.items.find(f => f.id === id));
// this.items.splice(idx, 1);
//
// return data.deleteFlight;
// })
// },
// },
});