Sprava eventu

This commit is contained in:
Michal Kváček
2023-09-19 06:33:17 +02:00
parent 0c91ff7838
commit 6fbaef4a1e
25 changed files with 533 additions and 30 deletions
+45
View File
@@ -0,0 +1,45 @@
<script setup>
import {onMounted} from "vue";
import {loading, event, fetchEvent, isRequestPending} from "src/composables/objects/event";
import {useAppStore} from "stores/App";
import {useRoute, useRouter} from "vue-router";
import {useEventsStore} from "stores/Events";
import {successObject} from "src/composables/dialog";
import {useQuasar} from "quasar";
import EventEditSkeleton from "components/event/EventEditSkeleton.vue";
import EventForm from "components/event/EventForm.vue";
const eventId = parseInt(useRoute().params.id);
onMounted(() => {
fetchEvent(eventId).then(() => {
useAppStore().setPageTitle(`${event.value.name} - editace`);
useAppStore().setBreadcrumbs([
{to: {name: "events"}, label: "Události"},
{to: {name: "eventDetail", params: {id: eventId}}, label: event.value.name},
{label: "Editace"}
])
})
});
const $q = useQuasar();
const $router = useRouter();
const handleSave = (formData) => {
useEventsStore().update(eventId, formData).then(() => {
$q.notify(successObject("Událost úspěšně upravena"));
$router.push({name: "eventDetail", params: {id: eventId}});
});
}
</script>
<template>
<EventEditSkeleton v-if="loading"/>
<EventForm
v-else
:event="event"
:is-request-pending="isRequestPending"
@save="handleSave"
/>
</template>
@@ -0,0 +1,38 @@
<script setup>
import {useRoute} from "vue-router";
import {onMounted} from "vue";
import {event, fetchEvent, loading} from "src/composables/objects/event";
import EventDetailSkeleton from "components/event/EventDetailSkeleton.vue";
import {useAppStore} from "stores/App";
import FAB from "components/FAB.vue";
import FlightsList from "components/flights/FlightsList.vue";
const eventId = parseInt(useRoute().params.id);
onMounted(() => {
fetchEvent(eventId).then(() => {
useAppStore().setPageTitle(event.value.name);
useAppStore().setBreadcrumbs([
{to: {name: "events"}, label: "Události"},
{label: event.value.name}
])
});
})
</script>
<template>
<EventDetailSkeleton v-if="loading || !event"/>
<template v-else>
<article v-html="event.description" />
<h3>Lety</h3>
<q-banner v-if="event.flights.length === 0" class="bg-light-blue text-white">
Zatím tu nemáš uložené žádné lety.
</q-banner>
<FlightsList :items="event.flights" v-else/>
<FAB mode="edit" :router-link="{name: 'eventEdit', params: {id: eventId}}"/>
</template>
</template>
+33
View File
@@ -0,0 +1,33 @@
<script setup>
import {onMounted} from "vue";
import {useAppStore} from "stores/App";
import FAB from "components/FAB.vue";
import BasicListSkeleton from "components/basicSkeletons/BasicListSkeleton.vue";
import BasicInfoBanner from "components/banners/BasicInfoBanner.vue";
import {events, fetchEvents, loading} from "src/composables/objects/event";
import EventsList from "components/event/EventsList.vue";
onMounted(() => {
fetchEvents();
});
useAppStore().setPageTitle("Letecké události")
</script>
<template>
<BasicListSkeleton :items-count-min="3" :items-count-max="8" v-if="loading"/>
<BasicInfoBanner
v-else-if="!loading && events.length === 0"
:route-add="{name: 'addEvent'}"
label-add="Přidat"
>
Nemáš tu uloženou žádnou událost. Události slouží ke sloučení letů z jedné akce/výletu do přehledné skupiny.
</BasicInfoBanner>
<EventsList
v-else
:items="events"
/>
<FAB :router-link="{name: 'addEvent'}" mode="add"/>
</template>
+28
View File
@@ -0,0 +1,28 @@
<script setup>
import {useRouter} from "vue-router";
import {useQuasar} from "quasar";
import {successObject} from "src/composables/dialog";
import {useEventsStore} from "stores/Events";
import {useAppStore} from "stores/App";
import {isRequestPending} from "src/composables/objects/event";
import EventForm from "components/event/EventForm.vue";
const $q = useQuasar();
const router = useRouter();
const handleSave = (formData) => {
useEventsStore().create(formData).then(() => {
$q.notify(successObject("Událost úspěšně vytvořena"));
router.push({name: "events"});
});
};
useAppStore().setPageTitle("Nová událost");
useAppStore().setBreadcrumbs([
{to: {name: "events"}, label: "Události"},
{label: "Nová"}
]);
</script>
<template>
<EventForm @save="handleSave" :is-request-pending="isRequestPending"/>
</template>
+5 -3
View File
@@ -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);
});
}
</script>
<template>
@@ -164,7 +166,7 @@ const deletePhoto = (id) => {
</q-tab-panel>
<q-tab-panel name="notes">
<FlightFormNotes @save="handleFlightEdit" :flight="flight"/>
<FlightFormNotes @save="handleFlightEdit" :events="events" :flight="flight"/>
</q-tab-panel>
</q-tab-panels>
@@ -16,7 +16,6 @@ import {storeToRefs} from "pinia";
const $q = useQuasar();
const $router = useRouter();
const flightId = parseInt(useRoute().params.id);
const loggedUser = storeToRefs(useUserStore()).user;
onMounted(() => {
@@ -0,0 +1,7 @@
<script setup>
</script>
<template>
organizace
</template>