Homepage, lepsi POI

This commit is contained in:
Michal Kváček
2023-08-23 21:40:32 +02:00
parent 8c3b8d19dd
commit 19b078b43c
33 changed files with 370 additions and 141 deletions
@@ -2,12 +2,14 @@
import POIEditSkeleton from "components/poi/POIEditSkeleton.vue";
import {fetchPoi, loading, poi} from "src/composables/objects/poi";
import {onMounted} from "vue";
import {useRoute} from "vue-router";
import POIEditForm from "components/poi/POIEditForm.vue";
import {useRoute, useRouter} from "vue-router";
import {usePointsOfInterestStore} from "stores/PointsOfInterest";
import {useAppStore} from "stores/App";
import {useQuasar} from "quasar";
import {successObject} from "src/composables/dialog";
import {usePointsOfInterestTypeStore} from "stores/PointOfInterestType";
import {storeToRefs} from "pinia";
import POIForm from "components/poi/POIForm.vue";
const poiId = parseInt(useRoute().params.id);
@@ -20,12 +22,18 @@ onMounted(() => {
{label: "Editace"},
]);
});
usePointsOfInterestTypeStore().fetch();
})
const poiTypes = storeToRefs(usePointsOfInterestTypeStore()).items;
const $q = useQuasar();
const router = useRouter();
const handleSave = (data) => {
usePointsOfInterestStore().update(poiId, data).then(respData => {
$q.notify(successObject("Úspěšně uloženo"));
router.push({name: "poiDetail", params: {id: poiId}});
});
}
</script>
@@ -33,5 +41,5 @@ const handleSave = (data) => {
<template>
<POIEditSkeleton v-if="loading"/>
<POIEditForm :poi="poi" v-else @save="handleSave"/>
<POIForm :poi="poi" :types="poiTypes" v-else @save="handleSave"/>
</template>
@@ -1,25 +1,32 @@
<script setup>
import AircraftForm from "components/aircrafts/AircraftForm.vue";
import {useAircraftsStore} from "stores/Aircrafts";
import {useRouter} from "vue-router";
import {useQuasar} from "quasar";
import {ref} from "vue";
import POIForm from "components/poi/POIForm.vue";
import {usePointsOfInterestStore} from "stores/PointsOfInterest";
import {successObject} from "src/composables/dialog";
import {useAppStore} from "stores/App";
import {storeToRefs} from "pinia";
let isRequestPending = ref(false);
const $q = useQuasar();
const router = useRouter();
const handleSave = (formData) => {
isRequestPending.value = true;
useAircraftsStore().create(formData).then(() => {
$q.notify({message: "Letadlo úspěšně vytvořeno", position: "top", color: "positive"});
router.push({name: "aircrafts"});
}).finally(() => {
isRequestPending.value = true;
const handleSave = (formData) => {
usePointsOfInterestStore().create(formData).then(() => {
$q.notify(successObject("Místo úspěšně uloženo"));
router.push({name: "poi"});
})
}
const isRequestPending = storeToRefs(usePointsOfInterestStore()).isMutationRunning;
useAppStore().setPageTitle("Nové zajímavé místo");
useAppStore().setBreadcrumbs([
{to: "poi", label: "Zajímavá místa"},
{label: "Nové"},
])
</script>
<template>
<AircraftForm @save="handleSave" :is-request-pending="isRequestPending"/>
<POIForm @save="handleSave" :is-request-pending="isRequestPending"/>
</template>
@@ -7,6 +7,12 @@ import {fetchPoi, loading, poi} from "src/composables/objects/poi";
import PhotosList from "components/photos/PhotosList.vue";
import {useAppStore} from "stores/App";
import EmbeddedMap from "components/map/EmbeddedMap.vue";
import {useUserStore} from "stores/User";
import {storeToRefs} from "pinia";
import BasicInfoBanner from "components/BasicInfoBanner.vue";
import FlightsList from "components/flights/FlightsList.vue";
const loggedUser = storeToRefs(useUserStore()).user;
onMounted(() => {
fetchPoi(useRoute().params.id).then(() => {
@@ -16,7 +22,6 @@ onMounted(() => {
{label: poi.value.name},
])
});
})
</script>
@@ -24,6 +29,7 @@ onMounted(() => {
<POIDetailSkeleton v-if="loading || !poi"/>
<template v-else>
<article v-html="poi.description" />
<EmbeddedMap
v-if="poi.gpsLatitude && poi.gpsLongitude"
@@ -31,12 +37,23 @@ onMounted(() => {
:gps-longitude="poi.gpsLongitude"
:zoom="13"
/>
<BasicInfoBanner v-else>
Tento bod nemá nastavenou polohu. Po nastavení polohy tu bude zobrazena mapa.
</BasicInfoBanner>
<PhotosList
:photos="poi.photos"
:show-actions="false"
v-if="poi.photos.length > 0"
/>
<FAB :router-link="{name: 'poiEdit', params:{id: poi.id}}" mode="edit"/>
<BasicInfoBanner v-else>
Pokud přidáš toto místo k nějaké fotce, zobrazí se tu.
</BasicInfoBanner>
<FlightsList :items="poi.flights" />
<FAB v-if="poi.createdById === loggedUser.id" :router-link="{name: 'poiEdit', params:{id: poi.id}}" mode="edit"/>
</template>
</template>
@@ -4,7 +4,7 @@ import {fetchPOIList, loading, pointsOfInterest} from "src/composables/objects/p
import {useAppStore} from "stores/App";
import POIList from "components/poi/POIList.vue";
import FAB from "components/FAB.vue";
import BasicListSkeleton from "components/BasicListSkeleton.vue";
import BasicListSkeleton from "components/basicSkeletons/BasicListSkeleton.vue";
onMounted(() => {
fetchPOIList();