Napoveda, fix filtru pro nacitani letu u objektu

This commit is contained in:
Michal Kváček
2024-02-13 23:00:37 +01:00
parent 9c9bbc9baa
commit 1a5c8f09bf
17 changed files with 189 additions and 104 deletions
+83
View File
@@ -0,0 +1,83 @@
<script setup>
import {useRoute} from "vue-router";
import {useAppStore} from "stores/App";
import {onMounted, ref} from "vue";
import {useMeta} from "quasar";
import {metaData} from "src/composables/meta";
const $route = useRoute();
const help = {
"gpx-trasa": {
title: "Co je to GPX?",
content: "<p>GPX je formát umožňující ukládat (a následně zpracovávat) GPS data z nějakého záznamového zařízení. Pokud v letadle vozíš nějaký tracker, nejspíš bude existovat způsob, jak z něj dostat právě GPX.</p>" +
"<p>Pokud nahraješ tento soubor do Polétání.cz, aplikace zobrazí mapu s trasou letu a graf rychlosti a výšky, společně s výškou terénu.</p>" +
"<p>Tento soubor se dá i použít pro načtení základních údajů o letu při jeho zadávání. Ze záznamu trasy Polétání.cz umí vyčíst čas a místo vzletu i přistání.</p>"
},
"organizace": {
title: "Co jsou to organizace?",
content: "Organizace slouží ke sdílení letadel, např. v rámci aeroklubu. "
},
"udalosti": {
title: "Co jsou to události?",
content: ""
},
"uvodni-fotografie": {
title: "K čemu potřebuji úvodní fotografii?",
content: ""
},
"url": {
title: "Proč k veřejným datům musím uvádět URL část?",
content: ""
},
"poi": {
title: "Jak funguje databáze zajímavých míst?",
content: ""
},
"editor-fotek": {
title: "Co umí editor fotek?",
content: ""
},
"debriefing": {
title: "Co jsou poznámky k debriefingu?",
content: "Prostě soukromé poznámky. Vidíš je jen ty."
},
"verejny-profil": {
title: "Musím mít veřejný profil?",
content: "<strong>Rozhodně nemusíš!</strong> Pokud chceš, můžeš si ukládat fotky a trasy jen do svého účtu a s nikým je sdílet nemusíš."
},
};
const opened = ref({});
onMounted(() => {
opened.value[$route.query.h] = true;
})
useAppStore().setPageTitle("Nápověda");
useMeta(() => metaData({
title: "Nápověda",
}));
useAppStore().setBreadcrumbs([
{label: "Polétání.cz", to: {name: "homepage"}},
{label: "Nápověda"},
]);
</script>
<template>
<q-list padding bordered class="rounded-borders">
<q-expansion-item
v-model="opened[index]"
v-for="(helpItem, index) in help"
:key="index"
expand-separator
header-class="text-primary text-bold text-h5"
:label="helpItem.title"
>
<q-card>
<q-card-section>
<div v-html="helpItem.content"/>
</q-card-section>
</q-card>
</q-expansion-item>
</q-list>
</template>
@@ -15,7 +15,7 @@ import {useAppStore} from "stores/App";
import FlightsList from "components/flights/FlightsList.vue";
import {storeToRefs} from "pinia";
import {onMounted} from "vue";
import {metaData} from "src/composables/meta";
import {aircraftKeywords, metaData} from "src/composables/meta";
import PhotoGallery from "components/photos/PhotoGallery.vue";
import ContentCard from "components/ContentCard.vue";
import AircraftInfo from "components/aircrafts/AircraftInfo.vue";
@@ -24,7 +24,7 @@ import {useFlightsStore} from "stores/Flights";
import FlightsListSkeleton from "components/flights/skeletons/FlightsListSkeleton.vue";
import BasicInfoBanner from "components/banners/BasicInfoBanner.vue";
import PhotoGallerySkeleton from "components/photos/skeletons/PhotoGallerySkeleton.vue";
import {loadPage, paginationLimit} from "src/composables/pagination";
import {filters, loadPage, paginationLimit} from "src/composables/pagination";
const $q = useQuasar();
const $router = useRouter();
@@ -38,11 +38,7 @@ useMeta(() => metaData({
title: aircraft.value.callSign,
image: aircraft.value.titleImage?.url,
keywords: [
"letadlo",
aircraft.value.callSign,
aircraft.value.model,
aircraft.value.organization?.name,
aircraft.value.manufacturer
"letadlo", ...aircraftKeywords(aircraft.value)
],
description: aircraft.value.description || `Detail letadla ${aircraft.value.callSign}.`
}));
@@ -53,10 +49,9 @@ useAppStore().setBreadcrumbs([
]);
filters.value = {aircraftId: aircraft.value.id};
const loadNextFlightsPage = (appendItems) => loadPage({
fetchFunc: useFlightsStore().fetchPublic,
filters: {aircraftId: aircraft.value.id},
appendItems
fetchFunc: useFlightsStore().fetchPublic, appendItems
});
onMounted(() => {
@@ -20,7 +20,7 @@ import PhotoGallery from "components/photos/PhotoGallery.vue";
import {useMeta} from "quasar";
import {metaData} from "src/composables/meta";
import PhotoGallerySkeleton from "components/photos/skeletons/PhotoGallerySkeleton.vue";
import {loadPage, paginationLimit} from "src/composables/pagination";
import {filters, loadPage, paginationLimit} from "src/composables/pagination";
import BasicInfoBanner from "components/banners/BasicInfoBanner.vue";
const props = defineProps({
@@ -49,15 +49,13 @@ useMeta(() => metaData({
}));
filters.value = {copilotId: copilot.value.id};
const loadNextFlightsPage = (appendItems) => loadPage({
fetchFunc: useFlightsStore().fetchPublic,
filters: {copilotId: copilot.value.id},
appendItems
fetchFunc: useFlightsStore().fetchPublic, appendItems
});
onMounted(() => {
loadNextFlightsPage(false);
usePhotosStore().fetchPublic({copilotId: copilot.value.id})
})
</script>
@@ -14,7 +14,7 @@ import EventDetailSkeleton from "components/event/skeletons/EventDetailSkeleton.
import {FORMAT_DATE, formatDatetime} from "src/composables/datetimeUtils";
import FlightsList from "components/flights/FlightsList.vue";
import {storeToRefs} from "pinia";
import {loadPage, paginationLimit} from "src/composables/pagination";
import {filters, loadPage, paginationLimit} from "src/composables/pagination";
import {useFlightsStore} from "stores/Flights";
import FlightsListSkeleton from "components/flights/skeletons/FlightsListSkeleton.vue";
import {useMeta} from "quasar";
@@ -41,15 +41,13 @@ useMeta(() => metaData({
description: event.value.description
}))
filters.value = {username: props.pilot.publicUsername, eventId: event.value.id};
const loadNextFlightsPage = (appendItems) => loadPage({
fetchFunc: useFlightsStore().fetchPublic,
filters: {username: props.pilot.publicUsername, eventId: event.value.id},
appendItems
fetchFunc: useFlightsStore().fetchPublic, appendItems
});
loadNextFlightsPage(false);
const {flights, totalItemsCount, isQueryRunning: areFlightsLoading} = storeToRefs(useFlightsStore());
</script>
<template>
@@ -45,7 +45,7 @@ useAppStore().setBreadcrumbs([
useMeta(() => metaData({
title: `${flightNameFormatted} - ${props.pilot.name}`,
keywords: ["let", "výlet", "letadlo", props.pilot.name, aircraftKeywords(flight.value.aircraft)],
keywords: ["let", "výlet", "letadlo", props.pilot.name, ...aircraftKeywords(flight.value.aircraft)],
description: flight.value.description,
image: flight.value.titlePhoto?.url
}
@@ -7,7 +7,7 @@ import {useFlightsStore} from "stores/Flights";
import {storeToRefs} from "pinia";
import {commonKeywords, metaData} from "src/composables/meta";
import {useMeta} from "quasar";
import {loadPage, paginationLimit} from "src/composables/pagination";
import {filters, loadPage, paginationLimit} from "src/composables/pagination";
const props = defineProps({
pilot: {
@@ -29,9 +29,9 @@ useAppStore().setBreadcrumbs([
{label: `@${props.pilot.publicUsername}`},
])
filters.value = {username: props.pilot.publicUsername};
const loadNextFlightsPage = (appendItems) => loadPage({
fetchFunc: useFlightsStore().fetchPublic,
filters: {username: props.pilot.publicUsername},
appendItems
});
loadNextFlightsPage(false);
@@ -23,7 +23,7 @@ import FlightsListSkeleton from "components/flights/skeletons/FlightsListSkeleto
import BasicInfoBanner from "components/banners/BasicInfoBanner.vue";
import {onMounted} from "vue";
import PhotoGallerySkeleton from "components/photos/skeletons/PhotoGallerySkeleton.vue";
import {loadPage, paginationLimit} from "src/composables/pagination";
import {filters, loadPage, paginationLimit} from "src/composables/pagination";
const {pointOfInterest, isQueryRunning} = storeToRefs(usePointsOfInterestStore());
const {photos, isQueryRunning: arePhotosLoading} = storeToRefs(usePhotosStore());
@@ -41,10 +41,9 @@ useAppStore().setBreadcrumbs([
{label: pointOfInterest.value.name}
]);
filters.value = {pointOfInterestId: pointOfInterest.value.id};
const loadNextFlightsPage = (appendItems) => loadPage({
fetchFunc: useFlightsStore().fetchPublic,
filters: {pointOfInterestId: pointOfInterest.value.id},
appendItems
});