+
+
Mám trasu v GPX, chci importovat data
+
-
-
-
-
- Přistání
-
-
-
-
-
-
-
+
+ Zadat informace ručně
+
+
+
+
+
+
+
+ Mám GPX, načíst informace z trasy
+
+
+
diff --git a/src/components/flights/form/FlightFormNotes.vue b/src/components/flights/form/FlightFormNotes.vue
index afd2251..70d8095 100644
--- a/src/components/flights/form/FlightFormNotes.vue
+++ b/src/components/flights/form/FlightFormNotes.vue
@@ -5,6 +5,9 @@ import {setDefaultData} from "src/composables/form/formHandling";
import RichTextEditor from "components/inputs/RichTextEditor.vue";
import {commonProps} from "src/composables/inputs";
import ComboboxInput from "components/inputs/ComboboxInput.vue";
+import SlugInput from "components/inputs/SlugInput.vue";
+import {storeToRefs} from "pinia";
+import {useLoggedUserStore} from "stores/LoggedUser";
const props = defineProps({
flight: {
@@ -25,9 +28,14 @@ const props = defineProps({
const formData = reactive({
name: "",
event: null,
- description: ""
+ description: "",
+ urlSlug: "",
+ isPublic: null
})
+
+const loggedUser = storeToRefs(useLoggedUserStore()).user;
+
watch(() => props.flight, (newVal) => {
if (newVal) {
setDefaultData(formData, newVal);
@@ -43,7 +51,18 @@ watch(() => props.flight, (newVal) => {
-
+
+
+
+
+
diff --git a/src/components/flights/form/FlightFormTrack.vue b/src/components/flights/form/FlightFormTrack.vue
index 40ddd2e..6ecdaf2 100644
--- a/src/components/flights/form/FlightFormTrack.vue
+++ b/src/components/flights/form/FlightFormTrack.vue
@@ -3,6 +3,7 @@ import FormWrapper from "components/FormWrapper.vue";
import {reactive, ref, watch} from "vue";
import ComboboxInput from "components/inputs/ComboboxInput.vue";
import {commonProps} from "src/composables/inputs";
+import {minutesToHumanReadable} from "src/composables/datetimeUtils";
const props = defineProps({
modelValue: {
@@ -24,7 +25,7 @@ const props = defineProps({
const formData = reactive({
track: [],
- gpxTrack: null
+ gpxTrackFile: null
});
const removeTrackItem = (index) => {
formData.track.splice(index, 1);
@@ -81,7 +82,7 @@ watch(() => props.flight.track, (newVal) => {
props.flight.track, (newVal) => {
+
Body na mapě
+
props.flight.track, (newVal) => {
/>
-
+
props.flight.track, (newVal) => {
:options="airports"
clearable
label="Letiště pro mezipřistání"
- hint="Nastav letiště a dobu mezispřistání"
+ hint="Nastav letiště a dobu mezipřistání"
/>
-
+
@@ -136,7 +139,7 @@ watch(() => props.flight.track, (newVal) => {
- {{ flight.takeoffAirport.name }}
+ {{ flight.takeoffAirport?.name || '???' }}
@@ -153,7 +156,11 @@ watch(() => props.flight.track, (newVal) => {
- {{ item.airport.name }}, mezipřistání: {{ item.landingDuration }} minut
+ {{ item.airport.name }},
+
+ mezipřistání {{ minutesToHumanReadable(item.landingDuration) }}
+
+ touch and go
@@ -167,7 +174,7 @@ watch(() => props.flight.track, (newVal) => {
- {{ flight.landingAirport.name }}
+ {{ flight.landingAirport?.name || '???' }}
diff --git a/src/components/inputs/CopyLinkButton.vue b/src/components/inputs/CopyLinkButton.vue
new file mode 100644
index 0000000..6af46ac
--- /dev/null
+++ b/src/components/inputs/CopyLinkButton.vue
@@ -0,0 +1,32 @@
+
+
+
+
+
diff --git a/src/components/inputs/PublishButton.vue b/src/components/inputs/PublishButton.vue
new file mode 100644
index 0000000..624b3c0
--- /dev/null
+++ b/src/components/inputs/PublishButton.vue
@@ -0,0 +1,65 @@
+
+
+
+
+
diff --git a/src/components/inputs/SlugInput.vue b/src/components/inputs/SlugInput.vue
new file mode 100644
index 0000000..96db5ac
--- /dev/null
+++ b/src/components/inputs/SlugInput.vue
@@ -0,0 +1,62 @@
+
+
+
+
+
+ {{ url }}
+
+
+
diff --git a/src/components/photos/PhotosEditorList.vue b/src/components/photos/PhotosEditorList.vue
index aae6800..aeff9ec 100644
--- a/src/components/photos/PhotosEditorList.vue
+++ b/src/components/photos/PhotosEditorList.vue
@@ -127,7 +127,7 @@ const showLarge = (displayedPhoto) => {
-
+
diff --git a/src/components/poi/POIForm.vue b/src/components/poi/POIForm.vue
index ee6ad42..de881e3 100644
--- a/src/components/poi/POIForm.vue
+++ b/src/components/poi/POIForm.vue
@@ -8,6 +8,8 @@ import {errorObject} from "src/composables/dialog";
import {commonProps} from "src/composables/inputs";
import {isRequired} from "src/composables/form/rules";
import ComboboxInput from "components/inputs/ComboboxInput.vue";
+import {useRouter} from "vue-router";
+import SlugInput from "components/inputs/SlugInput.vue";
const props = defineProps({
poi: {
@@ -23,7 +25,8 @@ const props = defineProps({
})
const formData = reactive({
- name: null,
+ name: "",
+ urlSlug: "",
description: "",
gpsLatitude: null,
gpsLongitude: null,
@@ -47,7 +50,8 @@ const resetMap = () => {
}
const rules = {
- name: [isRequired]
+ name: [isRequired],
+ urlSlug: []
}
const zoom = ref(10);
@@ -72,6 +76,18 @@ const handlePositionNotFound = () => {
+
+
+
+
{
@not-found="handlePositionNotFound"
/>
-
+
-
-
-
+
diff --git a/src/components/poi/POIList.vue b/src/components/poi/POIList.vue
index 3614a8f..968294a 100644
--- a/src/components/poi/POIList.vue
+++ b/src/components/poi/POIList.vue
@@ -30,7 +30,7 @@ const props = defineProps({
const getRoute = (item) => {
if (props.public)
- return {name: "publicPOIDetail", params: {id: item.id}}
+ return {name: "publicPOIDetail", params: {slug: item.urlSlug}}
else
return {name: "poiDetail", params: {id: item.id}}
}
diff --git a/src/composables/flight.js b/src/composables/flight.js
index 5121fd9..ccc2d40 100644
--- a/src/composables/flight.js
+++ b/src/composables/flight.js
@@ -8,6 +8,6 @@ export const flightName = (flight) => {
const track = flight.track ? flight.track.map(t => t.pointOfInterest?.name || t.airport?.icaoCode) : [];
const trackStr = track.length > 0 ? ` - ${track.join(" - ")} - ` : ' - ';
- return `${flight.takeoffAirport.icaoCode} ${trackStr} ${flight.landingAirport.icaoCode} (${date})`;
+ return `${flight.takeoffAirport?.icaoCode || '???'} ${trackStr} ${flight.landingAirport?.icaoCode || "???"} (${date})`;
}
}
diff --git a/src/composables/form/formHandling.js b/src/composables/form/formHandling.js
index f932bf0..f3003e9 100644
--- a/src/composables/form/formHandling.js
+++ b/src/composables/form/formHandling.js
@@ -13,10 +13,13 @@ export const setDefaultData = (formData, defaultData) => {
}
}
-export const toggleVisibility = ({store, $q, object}) => {
- console.log(object);
+export const toggleVisibility = ({store, $q, object, urlSlug = undefined}) => {
const newVisibility = !object.isPublic;
- store.update(object.id, {isPublic: newVisibility})
+ const variables = {isPublic: newVisibility};
+ if (urlSlug) {
+ variables['urlSlug'] = urlSlug;
+ }
+ store.update(object.id, variables)
.then(() => {
$q.notify(successObject(newVisibility ? "Úspěšně publikováno" : "Úspěšně skryto"));
});
diff --git a/src/composables/slugify.js b/src/composables/slugify.js
new file mode 100644
index 0000000..0705495
--- /dev/null
+++ b/src/composables/slugify.js
@@ -0,0 +1,11 @@
+export const slugify = (text) => {
+ // @see https://byby.dev/js-slugify-string
+ return String(text)
+ .normalize('NFKD')
+ .replace(/[\u0300-\u036f]/g, '')
+ .trim()
+ .toLowerCase()
+ .replace(/[^a-z0-9 -]/g, '')
+ .replace(/\s+/g, '-')
+ .replace(/-+/g, '-');
+}
diff --git a/src/graphql/fragments/aircraft.js b/src/graphql/fragments/aircraft.js
index d2c9228..22fa75b 100644
--- a/src/graphql/fragments/aircraft.js
+++ b/src/graphql/fragments/aircraft.js
@@ -60,13 +60,8 @@ fragment aircraftFullPrivateInfo on Aircraft {
name
}
}
-
- flights {
- ...flightListInfo
- }
}
${FRAGMENT_AIRCRAFT_FULL_INFO}
${FRAGMENT_PHOTO_FULL_INFO}
-${FRAGMENT_FLIGHT_LIST_INFO}
`;
diff --git a/src/graphql/fragments/copilot.js b/src/graphql/fragments/copilot.js
index f8cc3cb..b18e13b 100644
--- a/src/graphql/fragments/copilot.js
+++ b/src/graphql/fragments/copilot.js
@@ -15,6 +15,8 @@ export const FRAGMENT_COPILOT_FULL_INFO = gql`
fragment copilotFullInfo on Copilot {
id
name
+ isPublic
+ urlSlug
titlePhoto {
id
@@ -25,13 +27,7 @@ fragment copilotFullInfo on Copilot {
export const FRAGMENT_COPILOT_FULL_PRIVATE_INFO = gql`
fragment copilotFullPrivateInfo on Copilot {
- id
- name
-
- titlePhoto {
- id
- url
- }
+ ...copilotFullInfo
photos {
...photoFullInfo
@@ -49,4 +45,5 @@ fragment copilotFullPrivateInfo on Copilot {
}
${FRAGMENT_PHOTO_FULL_INFO}
+${FRAGMENT_COPILOT_FULL_INFO}
`;
diff --git a/src/graphql/fragments/event.js b/src/graphql/fragments/event.js
index 9562cd0..fedd3ac 100644
--- a/src/graphql/fragments/event.js
+++ b/src/graphql/fragments/event.js
@@ -6,6 +6,7 @@ fragment eventListInfo on Event {
name
description
isPublic
+ urlSlug
}
`;
@@ -15,6 +16,7 @@ fragment eventFullInfo on Event {
name
description
isPublic
+ urlSlug
dateFrom
dateTo
}
diff --git a/src/graphql/fragments/flight.js b/src/graphql/fragments/flight.js
index 2f2d667..a771477 100644
--- a/src/graphql/fragments/flight.js
+++ b/src/graphql/fragments/flight.js
@@ -21,6 +21,7 @@ export const FRAGMENT_FLIGHT_FULL_INFO = gql`
fragment flightFullInfo on Flight {
id
name
+ urlSlug
description
takeoffDatetime
landingDatetime
@@ -53,6 +54,8 @@ fragment flightFullInfo on Flight {
copilots {
id
name
+ isPublic
+ urlSlug
}
event {
diff --git a/src/graphql/fragments/flight_list.js b/src/graphql/fragments/flight_list.js
index b9bdd1f..e7406d1 100644
--- a/src/graphql/fragments/flight_list.js
+++ b/src/graphql/fragments/flight_list.js
@@ -6,6 +6,7 @@ export const FRAGMENT_FLIGHT_LIST_INFO = gql`
fragment flightListInfo on Flight {
id
name
+ urlSlug
takeoffDatetime
landingDatetime
durationMinCalculated
diff --git a/src/graphql/fragments/photo.js b/src/graphql/fragments/photo.js
index 82d2a7e..a6a5883 100644
--- a/src/graphql/fragments/photo.js
+++ b/src/graphql/fragments/photo.js
@@ -12,7 +12,6 @@ export const FRAGMENT_PHOTO_FULL_INFO = gql`
aircraftId
width
height
- isFlightCover
gpsLatitude
gpsLongitude
gpsAltitude
diff --git a/src/graphql/fragments/poi.js b/src/graphql/fragments/poi.js
index f447016..94b4537 100644
--- a/src/graphql/fragments/poi.js
+++ b/src/graphql/fragments/poi.js
@@ -6,6 +6,7 @@ export const FRAGMENT_POI_LIST_INFO = gql`
fragment pointOfInterestListInfo on PointOfInterest {
id
name
+ urlSlug
isPublic
titlePhoto {
thumbnailUrl
@@ -21,6 +22,7 @@ export const FRAGMENT_POI_FULL_INFO = gql`
fragment pointOfInterestFullInfo on PointOfInterest {
id
name
+ urlSlug
description
isPublic
gpsLatitude
diff --git a/src/graphql/queries/aircrafts.js b/src/graphql/queries/aircrafts.js
index db3e499..73c1d23 100644
--- a/src/graphql/queries/aircrafts.js
+++ b/src/graphql/queries/aircrafts.js
@@ -25,8 +25,8 @@ ${FRAGMENT_AIRCRAFT_FULL_PRIVATE_INFO}
`;
export const AIRCRAFT_PUBLIC_DETAIL = gql`
-query AircraftDetail($id: Int!) {
- aircraft(id: $id, public: true) {
+query AircraftDetail($callSign: String!) {
+ aircraft(callSign: $callSign, public: true) {
...aircraftFullInfo
}
}
diff --git a/src/graphql/queries/copilots.js b/src/graphql/queries/copilots.js
index 29b1e4b..74da6fa 100644
--- a/src/graphql/queries/copilots.js
+++ b/src/graphql/queries/copilots.js
@@ -34,8 +34,8 @@ ${FRAGMENT_FLIGHT_LIST_INFO}
`;
export const COPILOT_PUBLIC_DETAIL = gql`
-query copilot($id: Int!, $pilotUsername: String) {
- copilot(id: $id, pilotUsername: $pilotUsername) {
+query copilot($urlSlug: String!, $pilotUsername: String) {
+ copilot(urlSlug: $urlSlug, pilotUsername: $pilotUsername, public: true) {
...copilotFullInfo
}
}
diff --git a/src/graphql/queries/event.js b/src/graphql/queries/event.js
index 0cdcf98..c2ce46a 100644
--- a/src/graphql/queries/event.js
+++ b/src/graphql/queries/event.js
@@ -55,8 +55,8 @@ ${FRAGMENT_EVENT_FULL_INFO}
`;
export const EVENT_PUBLIC_DETAIL = gql`
-query eventPublicDetail($id: Int!, $username: String) {
- event(id: $id, username: $username, public: true) {
+query eventPublicDetail($urlSlug: String!, $username: String!) {
+ event(urlSlug: $urlSlug, username: $username, public: true) {
...eventFullInfo
flights {
diff --git a/src/graphql/queries/flights.js b/src/graphql/queries/flights.js
index f2373b5..14c6db8 100644
--- a/src/graphql/queries/flights.js
+++ b/src/graphql/queries/flights.js
@@ -4,8 +4,15 @@ import {FRAGMENT_FLIGHT_LIST_INFO} from "src/graphql/fragments/flight_list";
import {FRAGMENT_PHOTO_FULL_INFO} from "src/graphql/fragments/photo";
export const FLIGHTS_LIST = gql`
-query FlightsList($limit: Int!, $offset: Int) {
- flights(limit: $limit, offset: $offset) {
+query FlightsList($eventId: Int, $aircraftId: Int, $copilotId: Int, $pointOfInterestId: Int, $limit: Int!, $offset: Int) {
+ flights(
+ eventId: $eventId,
+ aircraftId: $aircraftId,
+ copilotId: $copilotId,
+ pointOfInterestId: $pointOfInterestId,
+ limit: $limit,
+ offset: $offset
+ ) {
totalItemsCount
items {
...flightListInfo
@@ -51,8 +58,8 @@ ${FRAGMENT_FLIGHT_FULL_PRIVATE_INFO}
`;
export const FLIGHT_PUBLIC_DETAIL = gql`
-query FlightPublicDetail($id: Int!, $username: String) {
- flight(id: $id, username: $username, public: true) {
+query FlightPublicDetail($urlSlug: String!, $username: String) {
+ flight(urlSlug: $urlSlug, username: $username, public: true) {
...flightFullInfo
}
}
diff --git a/src/graphql/queries/poi.js b/src/graphql/queries/poi.js
index 5d7cf3e..73725fe 100644
--- a/src/graphql/queries/poi.js
+++ b/src/graphql/queries/poi.js
@@ -38,8 +38,8 @@ ${FRAGMENT_POI_FULL_PRIVATE_INFO}
`;
export const POI_PUBLIC_DETAIL = gql`
-query publicPOIDetail($id: Int!) {
- pointOfInterest(id: $id, public: true) {
+query publicPOIDetail($urlSlug: String!) {
+ pointOfInterest(urlSlug: $urlSlug, public: true) {
...pointOfInterestFullInfo
}
}
diff --git a/src/layouts/ProfileLayout.vue b/src/layouts/ProfileLayout.vue
index 1eeba92..ef4eb05 100644
--- a/src/layouts/ProfileLayout.vue
+++ b/src/layouts/ProfileLayout.vue
@@ -35,7 +35,7 @@
-
+
@@ -56,7 +56,7 @@ export default {
- {{ url }}
+
diff --git a/src/pages/profile/aircraft/AircraftDetailPage.vue b/src/pages/profile/aircraft/AircraftDetailPage.vue
index 39f7823..fbac4af 100644
--- a/src/pages/profile/aircraft/AircraftDetailPage.vue
+++ b/src/pages/profile/aircraft/AircraftDetailPage.vue
@@ -1,30 +1,30 @@
@@ -71,18 +71,15 @@ const copyLinkToClipboard = () => {
-
-
@@ -91,21 +88,31 @@ const copyLinkToClipboard = () => {
+
Lety
-
+
+
Zatím žádné lety.
-
-
+
+
diff --git a/src/pages/profile/aircraft/EditAircraftPage.vue b/src/pages/profile/aircraft/EditAircraftPage.vue
index 1cb4d6e..5c38704 100644
--- a/src/pages/profile/aircraft/EditAircraftPage.vue
+++ b/src/pages/profile/aircraft/EditAircraftPage.vue
@@ -13,6 +13,7 @@ import {useLoggedUserStore} from "stores/LoggedUser";
import PhotosEditorList from "components/photos/PhotosEditorList.vue";
import CommonEditSwitcher from "components/navigation/CommonEditSwitcher.vue";
import PhotoGallerySkeleton from "components/photos/skeletons/PhotoGallerySkeleton.vue";
+import BasicInfoBanner from "components/banners/BasicInfoBanner.vue";
const $router = useRouter();
const $q = useQuasar();
@@ -56,9 +57,10 @@ const formStep = computed(() => useRoute().params.step || "info");
-
+
useRoute().params.step || "info");
+
+ U tohoto letadla nemáš žádnou fotku. Můžeš ji přidat v editaci fotky.
+
{
- useCopilotsStore().fetchDetail(copilotId).then(() => {
- useAppStore().setPageTitle(copilot.value.name);
- useAppStore().setBreadcrumbs([
- {to: {name: "copilots"}, label: "Kopiloti"},
- {label: copilot.value.name}
- ])
- });
+useCopilotsStore().fetchDetail(copilotId).then(() => {
+ useAppStore().setPageTitle(copilot.value.name);
+ useAppStore().setBreadcrumbs([
+ {to: {name: "copilots"}, label: "Kopiloti"},
+ {label: copilot.value.name}
+ ])
});
+
+const loadNextFlightsPage = (appendItems) => loadPage({
+ fetchFunc: useFlightsStore().fetch,
+ filters: {copilotId: copilotId},
+ appendItems
+});
+loadNextFlightsPage(false);
+const {isQueryRunning: areFlightsLoading, totalItemsCount, flights} = storeToRefs(useFlightsStore());
const {isQueryRunning, copilot} = storeToRefs(useCopilotsStore());
+const loggedUser = storeToRefs(useLoggedUserStore()).user;
+
+const $q = useQuasar();
+const togglePublicVisibility = (data) => toggleVisibility({
+ $q, store: useCopilotsStore(), object: copilot.value, urlSlug: data.urlSlug
+});
-
+
+
+
+
-
-
-
-
-
-
-
-
-
-
- Zatím tu nemáš žádné společné fotky. Po nahrání fotky můžeš označit tuto osobu a takto označené
- fotografie se zobrazí v galerii.
-
+
+
+
+
+
+
+
+
+ Zatím tu nemáš žádné společné fotky. Po nahrání fotky můžeš označit tuto osobu a takto označené
+ fotografie se zobrazí v galerii.
+
- Společné lety
+ Společné lety
-
- Zatím tu nemáš uložené žádné společné lety.
-
-
-
-
-
-
-
-
-
+
+
+
+ Zatím tu nemáš uložené žádné společné lety.
+
+
+
+
diff --git a/src/pages/profile/copilot/EditCopilotPage.vue b/src/pages/profile/copilot/EditCopilotPage.vue
index 3a4591d..41692d2 100644
--- a/src/pages/profile/copilot/EditCopilotPage.vue
+++ b/src/pages/profile/copilot/EditCopilotPage.vue
@@ -11,6 +11,7 @@ import {storeToRefs} from "pinia";
import PhotosEditorList from "components/photos/PhotosEditorList.vue";
import CommonEditSwitcher from "components/navigation/CommonEditSwitcher.vue";
import PhotoGallerySkeleton from "components/photos/skeletons/PhotoGallerySkeleton.vue";
+import BasicInfoBanner from "components/banners/BasicInfoBanner.vue";
const $q = useQuasar();
const $router = useRouter();
@@ -61,6 +62,9 @@ const setTitlePhoto = (titlePhoto) => {
+
+ U tohoto kopilota nemáš označenou žádnou fotku. Bez toho není možné zvolit úvodní fotografii.
+
{
@@ -18,9 +20,18 @@ onMounted(() => {
{label: event.value.name}
])
});
+ loadNextFlightsPage(false);
})
const {isQueryRunning, event} = storeToRefs(useEventsStore());
+
+const loadNextFlightsPage = (appendItems) => loadPage({
+ fetchFunc: useFlightsStore().fetch,
+ filters: {eventId: eventId},
+ appendItems
+});
+const {isQueryRunning: areFlightsLoading, totalItemsCount, flights} = storeToRefs(useFlightsStore());
+
@@ -49,8 +60,15 @@ const {isQueryRunning, event} = storeToRefs(useEventsStore());
Zatím tu nemáš uložené žádné lety.
-
-
+
diff --git a/src/pages/profile/event/EventsPage.vue b/src/pages/profile/event/EventsPage.vue
index 767b4a9..ba69a4f 100644
--- a/src/pages/profile/event/EventsPage.vue
+++ b/src/pages/profile/event/EventsPage.vue
@@ -6,10 +6,14 @@ import BasicInfoBanner from "components/banners/BasicInfoBanner.vue";
import EventsList from "components/event/EventsList.vue";
import {storeToRefs} from "pinia";
import {useEventsStore} from "stores/Events";
+import {onBeforeMount} from "vue";
-useEventsStore().fetch();
useAppStore().setPageTitle("Letecké události");
+onBeforeMount(() => {
+ useEventsStore().fetch({});
+});
+
const {isQueryRunning, events} = storeToRefs(useEventsStore());
@@ -31,6 +35,7 @@ const {isQueryRunning, events} = storeToRefs(useEventsStore());
diff --git a/src/pages/profile/flight/EditFlightPage.vue b/src/pages/profile/flight/EditFlightPage.vue
index e9cf2ef..cc774ca 100644
--- a/src/pages/profile/flight/EditFlightPage.vue
+++ b/src/pages/profile/flight/EditFlightPage.vue
@@ -208,38 +208,44 @@ const handleBatchPhotoEdit = async (flightId, data) => {
-
-
+
+
-
+ {
@batch-rotate="rotatePhotos"
@delete="deletePhoto"
@set-title-photo="setTitlePhoto"
- />
+ />
-
-
+
+ />
- {
:aircrafts="aircrafts"
@save="handleBatchPhotoEdit(flightId, $event)"
@delete="deletePhoto"
- />
+ />
+
+
diff --git a/src/pages/profile/flight/FlightDetailPage.vue b/src/pages/profile/flight/FlightDetailPage.vue
index 5f8ae21..b781132 100644
--- a/src/pages/profile/flight/FlightDetailPage.vue
+++ b/src/pages/profile/flight/FlightDetailPage.vue
@@ -1,11 +1,11 @@
-
-
+
Popiš, jaký byl let.
@@ -112,36 +102,36 @@ const copyLinkToClipboard = () => {
U tohoto letu nemáš nahrané žádné fotografie.
Nemáš nastavenou žádnou trasu.
diff --git a/src/pages/profile/flight/NewFlightPage.vue b/src/pages/profile/flight/NewFlightPage.vue
index 38a4b5f..e9cfb03 100644
--- a/src/pages/profile/flight/NewFlightPage.vue
+++ b/src/pages/profile/flight/NewFlightPage.vue
@@ -1,5 +1,5 @@
@@ -57,18 +56,15 @@ const copyLinkToClipboard = () => {
-
-
@@ -77,28 +73,28 @@ const copyLinkToClipboard = () => {
Tento bod nemá nastavenou polohu. Po nastavení polohy tu bude zobrazena mapa.
Pokud přidáš toto místo k nějaké fotce, zobrazí se tu.
@@ -107,11 +103,15 @@ const copyLinkToClipboard = () => {
Tvoje lety do místa {{ pointOfInterest.name }}
-
+
Na tomto místě jsi zatím nebyl/a.
diff --git a/src/pages/public/aircraft/AircraftDetailPage.vue b/src/pages/public/aircraft/AircraftDetailPage.vue
index 307fd46..272188f 100644
--- a/src/pages/public/aircraft/AircraftDetailPage.vue
+++ b/src/pages/public/aircraft/AircraftDetailPage.vue
@@ -3,7 +3,7 @@ import {useAircraftsStore} from "stores/Aircrafts";
export default {
preFetch({currentRoute}) {
- return useAircraftsStore().fetchPublicDetail(currentRoute.params.id);
+ return useAircraftsStore().fetchPublicDetail(currentRoute.params.callSign);
}
}
@@ -48,6 +48,7 @@ useMeta(() => metaData({
}));
useAppStore().setBreadcrumbs([
{label: "Polétání.cz", to: {name: "homepage"}},
+ {label: "Letadla"},
{label: aircraft.value.callSign}
]);
@@ -88,8 +89,8 @@ onMounted(() => {
:total-items-count="totalItemsCount"
:is-query-running="areFlightsLoading"
:items-per-page="paginationLimit"
- :public="true"
@load-more="loadNextFlightsPage(true)"
+ :public="true"
/>
diff --git a/src/pages/public/pilotProfile/CopilotDetailPage.vue b/src/pages/public/pilotProfile/CopilotDetailPage.vue
index 307bcc1..ad9e80d 100644
--- a/src/pages/public/pilotProfile/CopilotDetailPage.vue
+++ b/src/pages/public/pilotProfile/CopilotDetailPage.vue
@@ -3,7 +3,7 @@ import {useCopilotsStore} from "stores/Copilots";
export default {
preFetch({currentRoute}) {
- return useCopilotsStore().fetchPublicDetail(currentRoute.params.id, currentRoute.params.username);
+ return useCopilotsStore().fetchPublicDetail(currentRoute.params.copilotSlug, currentRoute.params.username);
}
}
diff --git a/src/pages/public/pilotProfile/EventDetailPage.vue b/src/pages/public/pilotProfile/EventDetailPage.vue
index 971843d..bc7cf22 100644
--- a/src/pages/public/pilotProfile/EventDetailPage.vue
+++ b/src/pages/public/pilotProfile/EventDetailPage.vue
@@ -3,7 +3,7 @@ import {useEventsStore} from "stores/Events";
export default {
preFetch({currentRoute}) {
- return useEventsStore().fetchPublicDetail(currentRoute.params.id, currentRoute.params.username);
+ return useEventsStore().fetchPublicDetail(currentRoute.params.eventSlug, currentRoute.params.username);
}
}
diff --git a/src/pages/public/pilotProfile/FlightDetailPage.vue b/src/pages/public/pilotProfile/FlightDetailPage.vue
index 3bb4fbe..6bbda17 100644
--- a/src/pages/public/pilotProfile/FlightDetailPage.vue
+++ b/src/pages/public/pilotProfile/FlightDetailPage.vue
@@ -3,7 +3,10 @@ import {useFlightsStore} from "stores/Flights";
export default {
preFetch({store, currentRoute}) {
- return useFlightsStore(store).fetchPublicDetail(currentRoute.params.id, currentRoute.params.username)
+ return useFlightsStore(store).fetchPublicDetail({
+ urlSlug: currentRoute.params.flightSlug,
+ username: currentRoute.params.username
+ })
}
}
diff --git a/src/pages/public/poi/PointOfInterestDetailPage.vue b/src/pages/public/poi/PointOfInterestDetailPage.vue
index 1c14936..f72a86b 100644
--- a/src/pages/public/poi/PointOfInterestDetailPage.vue
+++ b/src/pages/public/poi/PointOfInterestDetailPage.vue
@@ -3,7 +3,7 @@ import {usePointsOfInterestStore} from "stores/PointsOfInterest";
export default {
preFetch({currentRoute}) {
- return usePointsOfInterestStore().fetchPublicDetail(currentRoute.params.id);
+ return usePointsOfInterestStore().fetchPublicDetail(currentRoute.params.slug);
}
}
diff --git a/src/pages/public/user/LoginPage.vue b/src/pages/public/user/LoginPage.vue
index 5d20e10..db9831b 100644
--- a/src/pages/public/user/LoginPage.vue
+++ b/src/pages/public/user/LoginPage.vue
@@ -13,7 +13,7 @@ const logUser = () => {
useAuthStore().login(formData).then(() => {
$router.push({name: "myFlights"});
}).catch((err) => {
- $q.notify(errorObject("Přihlášení se nezdařilo."))
+ $q.notify(errorObject(`Přihlášení se nezdařilo. ${err}`))
})
};
diff --git a/src/router/routes.js b/src/router/routes.js
index 2061177..1f6275d 100644
--- a/src/router/routes.js
+++ b/src/router/routes.js
@@ -18,15 +18,15 @@ const routes = [
component: () => import('pages/public/PilotProfileWrapper.vue'),
children: [
{path: '', name: "publicProfileDetail", component: () => import('pages/public/pilotProfile/FlightsListPage.vue')},
- {path: ':id', name: "publicFlightDetail", component: () => import('pages/public/pilotProfile/FlightDetailPage.vue')},
- {path: 'kopilot/:id', name: "publicCopilotDetail", component: () => import('pages/public/pilotProfile/CopilotDetailPage.vue')},
+ {path: ':flightSlug', name: "publicFlightDetail", component: () => import('pages/public/pilotProfile/FlightDetailPage.vue')},
+ {path: 'a/:copilotSlug', name: "publicCopilotDetail", component: () => import('pages/public/pilotProfile/CopilotDetailPage.vue')},
{path: 'udalosti', name: "publicEventsList", component: () => import('pages/public/pilotProfile/EventsListPage.vue')},
- {path: 'udalosti/:id', name: "publicEventDetail", component: () => import('pages/public/pilotProfile/EventDetailPage.vue')},
+ {path: 'udalosti/:eventSlug', name: "publicEventDetail", component: () => import('pages/public/pilotProfile/EventDetailPage.vue')},
]
},
- {path: 'letadlo/:id', name: "publicAircraftDetail", component: () => import('pages/public/aircraft/AircraftDetailPage.vue')},
+ {path: 'letadlo/:callSign', name: "publicAircraftDetail", component: () => import('pages/public/aircraft/AircraftDetailPage.vue')},
{path: 'mista', name: "publicPOIs", component: () => import('pages/public/poi/PointsOfInterestPage.vue')},
- {path: 'mista/:id', name: "publicPOIDetail", component: () => import('pages/public/poi/PointOfInterestDetailPage.vue')},
+ {path: 'mista/:slug', name: "publicPOIDetail", component: () => import('pages/public/poi/PointOfInterestDetailPage.vue')},
]
},
{
diff --git a/src/stores/Aircrafts.js b/src/stores/Aircrafts.js
index 326dd3e..7b7979c 100644
--- a/src/stores/Aircrafts.js
+++ b/src/stores/Aircrafts.js
@@ -20,10 +20,10 @@ export const useAircraftsStore = defineStore('Aircrafts', () => {
return item
});
- const fetchPublicDetail = (id) => query({
+ const fetchPublicDetail = (callSign) => query({
isQueryRunning,
query: AIRCRAFT_PUBLIC_DETAIL,
- variables: {id},
+ variables: {callSign},
}).then(item => {
aircraft.value = item;
return item;
diff --git a/src/stores/Auth.js b/src/stores/Auth.js
index 8577542..a067da6 100644
--- a/src/stores/Auth.js
+++ b/src/stores/Auth.js
@@ -1,23 +1,17 @@
import {defineStore} from 'pinia'
import {api} from "boot/axios";
-import {ref} from "vue";
import {cookies} from "boot/cookies";
-import {useLoggedUserStore} from "stores/LoggedUser";
export const useAuthStore = defineStore('Auth', () => {
- const isRefreshing = ref(false);
-
const login = async (formData) => {
- return api.post("/login", formData).then(({data}) => {
+ return await api.post("/login", formData).then(({data}) => {
setTokens(data);
- useLoggedUserStore().user.value = data.user;
})
};
const logout = () => {
return api.post("/logout").then(response => {
unsetTokens();
- useLoggedUserStore().user.value = data.user;
});
};
@@ -26,7 +20,10 @@ export const useAuthStore = defineStore('Auth', () => {
};
const setTokens = ({access_token, access_token_validity}) => {
- cookies.set("accessToken", access_token, {expires: `${access_token_validity}s`})
+ cookies.set("accessToken", access_token, {
+ expires: `${access_token_validity}s`,
+ sameSite: 'Strict'
+ });
};
const getAccessToken = () => {
@@ -44,8 +41,5 @@ export const useAuthStore = defineStore('Auth', () => {
return Promise.reject(e);
})
- return {
- login, logout, getAccessToken, hasAccessToken, refreshAccessToken,
- isRefreshing
- }
+ return {login, logout, getAccessToken, hasAccessToken, refreshAccessToken}
});
diff --git a/src/stores/Copilots.js b/src/stores/Copilots.js
index 71d9d8e..a58aebe 100644
--- a/src/stores/Copilots.js
+++ b/src/stores/Copilots.js
@@ -18,11 +18,11 @@ export const useCopilotsStore = defineStore('Copilots', () => {
}).then(item => copilot.value = item);
};
- const fetchPublicDetail = (copilotId, username) => {
+ const fetchPublicDetail = (urlSlug, username) => {
return query({
isQueryRunning,
query: COPILOT_PUBLIC_DETAIL,
- variables: {id: copilotId, pilotUsername: username},
+ variables: {urlSlug, pilotUsername: username},
}).then(item => {
copilot.value = item;
return item;
diff --git a/src/stores/Events.js b/src/stores/Events.js
index 50ecd7e..3ce8d0e 100644
--- a/src/stores/Events.js
+++ b/src/stores/Events.js
@@ -19,11 +19,11 @@ export const useEventsStore = defineStore('Events', () => {
}).then(item => event.value = item);
};
- const fetchPublicDetail = (id, username) => {
+ const fetchPublicDetail = (urlSlug, username) => {
return query({
isQueryRunning,
query: EVENT_PUBLIC_DETAIL,
- variables: {id, username},
+ variables: {urlSlug, username},
}).then(item => event.value = item);
};
diff --git a/src/stores/Flights.js b/src/stores/Flights.js
index 97f1d41..88d80b4 100644
--- a/src/stores/Flights.js
+++ b/src/stores/Flights.js
@@ -20,10 +20,10 @@ export const useFlightsStore = defineStore('Flights', () => {
return item;
});
- const fetchPublicDetail = (id, username) => query({
+ const fetchPublicDetail = ({urlSlug, username}) => query({
isQueryRunning,
query: FLIGHT_PUBLIC_DETAIL,
- variables: {username, id}
+ variables: {username, urlSlug}
}).then(item => {
flight.value = item;
return item;
@@ -31,6 +31,7 @@ export const useFlightsStore = defineStore('Flights', () => {
const fetch = (
{
+ eventId,
aircraftId,
copilotId,
pointOfInterestId,
@@ -41,6 +42,7 @@ export const useFlightsStore = defineStore('Flights', () => {
isQueryRunning,
query: FLIGHTS_LIST,
variables: {
+ eventId,
aircraftId,
copilotId,
pointOfInterestId,
diff --git a/src/stores/PointsOfInterest.js b/src/stores/PointsOfInterest.js
index 331451e..74f9221 100644
--- a/src/stores/PointsOfInterest.js
+++ b/src/stores/PointsOfInterest.js
@@ -21,10 +21,10 @@ export const usePointsOfInterestStore = defineStore('PointsOfInterest', () => {
return item;
});
- const fetchPublicDetail = (id) => query({
+ const fetchPublicDetail = (urlSlug) => query({
isQueryRunning,
query: POI_PUBLIC_DETAIL,
- variables: {id},
+ variables: {urlSlug},
}).then(item => {
pointOfInterest.value = item;
return item;