From 6fbaef4a1ec74c2334f916edde136a7c618913c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Kv=C3=A1=C4=8Dek?= Date: Tue, 19 Sep 2023 06:33:17 +0200 Subject: [PATCH] Sprava eventu --- src/components/AvatarsGroup.vue | 28 ++++++++++ .../copilots/CopilotDetailSkeleton.vue | 3 +- .../copilots/CopilotEditSkeleton.vue | 2 +- src/components/event/EventDetailSkeleton.vue | 9 ++++ src/components/event/EventEditSkeleton.vue | 5 ++ src/components/event/EventForm.vue | 48 +++++++++++++++++ src/components/event/EventsList.vue | 32 +++++++++++ src/components/flights/FlightEditSkeleton.vue | 53 +++++++++++++++---- .../flights/form/FlightFormNotes.vue | 32 +++++++---- src/components/inputs/ComboboxInput.vue | 4 ++ src/composables/objects/event.js | 37 +++++++++++++ src/graphql/fragments/event.js | 19 +++++++ src/graphql/fragments/flight.js | 6 +++ src/graphql/mutations/event.js | 29 ++++++++++ src/graphql/queries/event.js | 34 ++++++++++++ src/layouts/ProfileLayout.vue | 15 ++++-- src/pages/profile/event/EditEventPage.vue | 45 ++++++++++++++++ src/pages/profile/event/EventDetailPage.vue | 38 +++++++++++++ src/pages/profile/event/EventsPage.vue | 33 ++++++++++++ src/pages/profile/event/NewEventPage.vue | 28 ++++++++++ src/pages/profile/flight/EditFlightPage.vue | 8 +-- src/pages/profile/flight/FlightDetailPage.vue | 1 - .../organization/OrganizationsPage.vue | 7 +++ src/router/routes.js | 6 +++ src/stores/Events.js | 41 ++++++++++++++ 25 files changed, 533 insertions(+), 30 deletions(-) create mode 100644 src/components/AvatarsGroup.vue create mode 100644 src/components/event/EventDetailSkeleton.vue create mode 100644 src/components/event/EventEditSkeleton.vue create mode 100644 src/components/event/EventForm.vue create mode 100644 src/components/event/EventsList.vue create mode 100644 src/composables/objects/event.js create mode 100644 src/graphql/fragments/event.js create mode 100644 src/graphql/mutations/event.js create mode 100644 src/graphql/queries/event.js create mode 100644 src/pages/profile/event/EditEventPage.vue create mode 100644 src/pages/profile/event/EventDetailPage.vue create mode 100644 src/pages/profile/event/EventsPage.vue create mode 100644 src/pages/profile/event/NewEventPage.vue create mode 100644 src/pages/profile/organization/OrganizationsPage.vue create mode 100644 src/stores/Events.js diff --git a/src/components/AvatarsGroup.vue b/src/components/AvatarsGroup.vue new file mode 100644 index 0000000..42d8624 --- /dev/null +++ b/src/components/AvatarsGroup.vue @@ -0,0 +1,28 @@ + + + + + + diff --git a/src/components/copilots/CopilotDetailSkeleton.vue b/src/components/copilots/CopilotDetailSkeleton.vue index 2d3855b..a58eca0 100644 --- a/src/components/copilots/CopilotDetailSkeleton.vue +++ b/src/components/copilots/CopilotDetailSkeleton.vue @@ -3,7 +3,6 @@ import BasicListSkeleton from "components/basicSkeletons/BasicListSkeleton.vue"; diff --git a/src/components/copilots/CopilotEditSkeleton.vue b/src/components/copilots/CopilotEditSkeleton.vue index ad40fc1..29e2b95 100644 --- a/src/components/copilots/CopilotEditSkeleton.vue +++ b/src/components/copilots/CopilotEditSkeleton.vue @@ -1,5 +1,5 @@ diff --git a/src/components/event/EventDetailSkeleton.vue b/src/components/event/EventDetailSkeleton.vue new file mode 100644 index 0000000..2d3855b --- /dev/null +++ b/src/components/event/EventDetailSkeleton.vue @@ -0,0 +1,9 @@ + + + diff --git a/src/components/event/EventEditSkeleton.vue b/src/components/event/EventEditSkeleton.vue new file mode 100644 index 0000000..ad40fc1 --- /dev/null +++ b/src/components/event/EventEditSkeleton.vue @@ -0,0 +1,5 @@ + + + diff --git a/src/components/event/EventForm.vue b/src/components/event/EventForm.vue new file mode 100644 index 0000000..53facff --- /dev/null +++ b/src/components/event/EventForm.vue @@ -0,0 +1,48 @@ + + + diff --git a/src/components/event/EventsList.vue b/src/components/event/EventsList.vue new file mode 100644 index 0000000..9caa61e --- /dev/null +++ b/src/components/event/EventsList.vue @@ -0,0 +1,32 @@ + + + diff --git a/src/components/flights/FlightEditSkeleton.vue b/src/components/flights/FlightEditSkeleton.vue index 7823d40..4ccb57e 100644 --- a/src/components/flights/FlightEditSkeleton.vue +++ b/src/components/flights/FlightEditSkeleton.vue @@ -1,5 +1,6 @@ + + diff --git a/src/composables/objects/event.js b/src/composables/objects/event.js new file mode 100644 index 0000000..360b85b --- /dev/null +++ b/src/composables/objects/event.js @@ -0,0 +1,37 @@ +import {FORMAT_DATE, formatDatetime} from "src/composables/datetimeUtils"; +import {useEventsStore} from "stores/Events"; +import {ref} from "vue"; +import {storeToRefs} from "pinia"; +import {confirmObject} from "src/composables/dialog"; +import {useAppStore} from "stores/App"; +export const loading = ref(true); +export const event = ref(null); +export const fetchEvent = (eventId, username) => { + loading.value = true; + return useEventsStore().fetchDetail(parseInt(eventId), username) + .then(respEvent => { + event.value = respEvent; + return respEvent; + }) + .finally(() => loading.value = false); +}; + +export const events = storeToRefs(useEventsStore()).items; + +export const fetchEvents = (username = null) => { + loading.value = true; + useEventsStore().fetch(username).finally(() => { + loading.value = false; + }); +}; + + +export const handleDeleteEvent = ($q, eventId, onOkCallback = () => { +}) => { + $q.dialog(confirmObject(`Opravdu chceš smazat tento let?`)) + .onOk(() => { + useEventsStore().delete(eventId).then(onOkCallback); + }); +}; + +export const isRequestPending = storeToRefs(useEventsStore()).isRequestPending; diff --git a/src/graphql/fragments/event.js b/src/graphql/fragments/event.js new file mode 100644 index 0000000..36c9c49 --- /dev/null +++ b/src/graphql/fragments/event.js @@ -0,0 +1,19 @@ +import gql from "graphql-tag"; + +export const FRAGMENT_EVENT_LIST_INFO = gql` +fragment eventListInfo on Event { + id + name + description + isPublic +} +`; + +export const FRAGMENT_EVENT_FULL_INFO = gql` +fragment eventFullInfo on Event { + id + name + description + isPublic +} +`; diff --git a/src/graphql/fragments/flight.js b/src/graphql/fragments/flight.js index 3ac82fc..06d34ea 100644 --- a/src/graphql/fragments/flight.js +++ b/src/graphql/fragments/flight.js @@ -41,6 +41,12 @@ fragment flightFullInfo on Flight { id name } + + event { + id + name + } + gpxTrackUrl gpxTrack { coordinates { diff --git a/src/graphql/mutations/event.js b/src/graphql/mutations/event.js new file mode 100644 index 0000000..674696c --- /dev/null +++ b/src/graphql/mutations/event.js @@ -0,0 +1,29 @@ +import gql from "graphql-tag"; +import {FRAGMENT_EVENT_FULL_INFO} from "src/graphql/fragments/event"; + +export const CREATE_EVENT = gql` + mutation createEvent($input: CreateEventInput!) { + createEvent(input: $input) { + ...eventFullInfo + } + } + + ${FRAGMENT_EVENT_FULL_INFO} +`; + +export const EDIT_EVENT = gql` +mutation editEvent($id: Int!, $input: EditEventInput!) { + editEvent(id: $id, input: $input) { + ...eventFullInfo + } +} + + ${FRAGMENT_EVENT_FULL_INFO} +`; +export const DELETE_EVENT = gql` +mutation deleteEvent($id: Int!) { + deleteEvent(id: $id) { + id + } +} +`; diff --git a/src/graphql/queries/event.js b/src/graphql/queries/event.js new file mode 100644 index 0000000..a53443e --- /dev/null +++ b/src/graphql/queries/event.js @@ -0,0 +1,34 @@ +import gql from "graphql-tag"; +import {FRAGMENT_FLIGHT_LIST_INFO} from "src/graphql/fragments/flight_list"; +import {FRAGMENT_EVENT_FULL_INFO, FRAGMENT_EVENT_LIST_INFO} from "src/graphql/fragments/event"; + +export const EVENTS_LIST = gql` +query eventsList { + events { + ...eventListInfo + + flights { + coverPhoto { + thumbnailUrl + } + } + } +} + +${FRAGMENT_EVENT_LIST_INFO} +`; + +export const EVENT_DETAIL = gql` +query event($id: Int!) { + event(id: $id) { + ...eventFullInfo + + flights { + ...flightListInfo + } + } +} + +${FRAGMENT_EVENT_FULL_INFO} +${FRAGMENT_FLIGHT_LIST_INFO} +`; diff --git a/src/layouts/ProfileLayout.vue b/src/layouts/ProfileLayout.vue index ee4e693..24858b4 100644 --- a/src/layouts/ProfileLayout.vue +++ b/src/layouts/ProfileLayout.vue @@ -28,7 +28,7 @@ Osobní nastavení - + @@ -103,23 +103,32 @@ const linksList = [ to: {name: "myFlights"} }, {separator: true}, + { + title: 'Události', + icon: 'event', + to: {name: "events"} + }, { title: 'Letadla', icon: "connecting_airports", to: {name: "aircrafts"} }, - {separator: true}, { title: 'Zajímavá místa', icon: "place", to: {name: "poi"} }, - {separator: true}, { title: 'Spolucestující', icon: "people", to: {name: "copilots"} }, + {separator: true}, + { + title: 'Organizace', + icon: "groups", + to: {name: "organizations"} + }, ] const leftDrawerOpen = ref(false) diff --git a/src/pages/profile/event/EditEventPage.vue b/src/pages/profile/event/EditEventPage.vue new file mode 100644 index 0000000..65cd74d --- /dev/null +++ b/src/pages/profile/event/EditEventPage.vue @@ -0,0 +1,45 @@ + + + diff --git a/src/pages/profile/event/EventDetailPage.vue b/src/pages/profile/event/EventDetailPage.vue new file mode 100644 index 0000000..554af50 --- /dev/null +++ b/src/pages/profile/event/EventDetailPage.vue @@ -0,0 +1,38 @@ + + + diff --git a/src/pages/profile/event/EventsPage.vue b/src/pages/profile/event/EventsPage.vue new file mode 100644 index 0000000..67f3753 --- /dev/null +++ b/src/pages/profile/event/EventsPage.vue @@ -0,0 +1,33 @@ + + + diff --git a/src/pages/profile/event/NewEventPage.vue b/src/pages/profile/event/NewEventPage.vue new file mode 100644 index 0000000..e59fc08 --- /dev/null +++ b/src/pages/profile/event/NewEventPage.vue @@ -0,0 +1,28 @@ + + + diff --git a/src/pages/profile/flight/EditFlightPage.vue b/src/pages/profile/flight/EditFlightPage.vue index 4e96d25..2e33661 100644 --- a/src/pages/profile/flight/EditFlightPage.vue +++ b/src/pages/profile/flight/EditFlightPage.vue @@ -25,6 +25,7 @@ import BatchPhotoFormDialog from "components/photos/BatchPhotoFormDialog.vue"; import {useAppStore} from "stores/App"; import {editBatchPhotos, handleBatchPhotoEdit, openBatchEdit, openBatchPhotoForm} from "src/composables/photos/batchEdit"; import {editPhoto, handlePhotoUpdate, openEdit, openPhotoEdit} from "src/composables/photos/simpleEdit"; +import {fetchEvents, events} from "src/composables/objects/event"; const $q = useQuasar(); const $route = useRoute(); @@ -35,6 +36,7 @@ const locations = storeToRefs(usePointsOfInterestStore()).items; const airports = storeToRefs(useAirportsStore()).items; const copilots = storeToRefs(useCopilotsStore()).items; + const formStep = ref(""); watch(() => $route.params.step, (val) => formStep.value = val); @@ -46,6 +48,8 @@ onMounted(() => { useAirportsStore().fetch(); useCopilotsStore().fetch(); + fetchEvents(); + fetchFlight(flightId).then(() => { const flightNameFormatted = flightName(flight.value); @@ -98,8 +102,6 @@ const deletePhoto = (id) => { flight.value.photos.splice(_findPhotoIndex(data.id), 1); }); } - -