diff --git a/src/composables/breadcrumbs.js b/src/composables/breadcrumbs.js index caefae2..c0e37e5 100644 --- a/src/composables/breadcrumbs.js +++ b/src/composables/breadcrumbs.js @@ -1,44 +1,70 @@ import {flightName} from "src/composables/flight"; -const homepageBreadcrumbs = () => { - return [{to: {name: 'homepage'}, label: "Polétání.cz"}] +export const homepageBreadcrumbs = () => { + return [{to: {name: 'homepage'}, label: "Polétání.cz"}]; } +export const publicProfileBreadcrumbs = (pilot, link = true) => { + const profile = {label: `@${pilot.publicUsername}`} -// TODO: dodelat + if (link) { + profile.to = {name: "publicProfileDetail", params: {username: pilot.publicUsername}}; + } -const publicProfileBreadcrumbs = (pilot) => { return [ ...homepageBreadcrumbs(), - {to: {name: "publicProfileDetail", params: {username: pilot.publicUsername}}, label: `@${pilot.publicUsername}`}, + profile, ] } -const publicEventBreadcrumbs = (pilot, event) => { +export const publicEventBreadcrumbs = (pilot, event, link = true) => { + const eventDetail = {label: event.name} + if (link) { + eventDetail.to = { + name: 'publicEventDetail', + params: {eventSlug: event.urlSlug, username: pilot.publicUsername} + }; + } + return [ + ...publicProfileBreadcrumbs(pilot), + { + to: {name: 'publicEventsList', username: pilot.publicUsername}, + label: "Události" + }, + eventDetail + ] } -export const flightBreadcrumbs = (pilot, flight, event) => { - const breadcrumbs = publicProfileBreadcrumbs(pilot) +export const publicFlightBreadcrumbs = (pilot, flight, event, link = true) => { + let breadcrumbs; if (event && event.isPublic) { - breadcrumbs.push({to: {name: 'publicEventsList', username: pilot.publicUsername}, label: "Události"}); - breadcrumbs.push({ - to: { - name: 'publicEventDetail', - params: {eventSlug: event.urlSlug, username: pilot.publicUsername} - }, label: event.name - }); + breadcrumbs = publicEventBreadcrumbs(pilot, event) + } else { + breadcrumbs = publicProfileBreadcrumbs(pilot) } - breadcrumbs.push({label: flightName(flight)}) + const flightEntry = {label: flightName(flight)} + if (link) { + flightEntry.to = {name: "publicFlightDetail", params: {username: pilot.publicUsername, flightSlug: flight.urlSlug}} + } + breadcrumbs.push(flightEntry) return breadcrumbs; } -export const copilotBreadcrumbs = (pilot, flight, event, copilot) => { +export const publicCopilotBreadcrumbs = (pilot, flight, event, copilot) => { return [ - ...flightBreadcrumbs(pilot, flight, event), + ...publicProfileBreadcrumbs(pilot), + {label: "Kopiloti"}, {label: copilot.name} ] } + +export const publicPOIBaseBreadcrumbs = () => { + return [ + ...homepageBreadcrumbs(), + {label: "Místa"}, + ] +} diff --git a/src/composables/pagination.js b/src/composables/pagination.js index cce2948..4be3734 100644 --- a/src/composables/pagination.js +++ b/src/composables/pagination.js @@ -1,12 +1,16 @@ import {ref} from "vue"; -export const usePagination = () => { - const paginationLimit = ref(10); +export const usePagination = ({fetchFunction, itemsPerPage = 10}) => { + if (typeof fetchFunction === "undefined") { + console.error("Set fetchFunction to usePagination!"); + } + + const paginationLimit = ref(itemsPerPage); const paginationOffset = ref(0); const filters = ref({}); - const loadPage = ({fetchFunc, appendItems}) => { - return fetchFunc({ + const loadPage = ({appendItems}) => { + return fetchFunction({ ...filters.value, limit: paginationLimit.value, offset: paginationOffset.value, @@ -16,7 +20,6 @@ export const usePagination = () => { }) } - return { paginationOffset, paginationLimit, filters, loadPage } diff --git a/src/pages/profile/aircraft/AircraftDetailPage.vue b/src/pages/profile/aircraft/AircraftDetailPage.vue index 14843ed..079317c 100644 --- a/src/pages/profile/aircraft/AircraftDetailPage.vue +++ b/src/pages/profile/aircraft/AircraftDetailPage.vue @@ -1,3 +1,13 @@ + + @@ -114,7 +119,7 @@ const loggedUser = storeToRefs(useLoggedUserStore()).user; :total-items-count="totalItemsCount" :is-query-running="areFlightsLoading" :items-per-page="paginationLimit" - @load-more="loadNextFlightsPage(true)" + @load-more="loadPage(true)" /> diff --git a/src/pages/profile/aircraft/AircraftsPage.vue b/src/pages/profile/aircraft/AircraftsPage.vue index d888d48..3aad23f 100644 --- a/src/pages/profile/aircraft/AircraftsPage.vue +++ b/src/pages/profile/aircraft/AircraftsPage.vue @@ -10,11 +10,8 @@ import {usePagination} from "src/composables/pagination"; useAppStore().setPageTitle("Letadla"); -const {filters, loadPage, paginationLimit} = usePagination(); -const loadNextAircraftsPage = (appendItems) => loadPage({ - fetchFunc: useAircraftsStore().fetch, appendItems -}); -loadNextAircraftsPage(false); +const {filters, loadPage, paginationLimit} = usePagination({fetchFunction: useAircraftsStore().fetch}); +loadPage(false); const {aircrafts, totalItemsCount, isQueryRunning} = storeToRefs(useAircraftsStore()); @@ -40,7 +37,7 @@ const {aircrafts, totalItemsCount, isQueryRunning} = storeToRefs(useAircraftsSto :items-per-page="paginationLimit" :public="true" class="q-mb-xl" - @load-more="loadNextAircraftsPage(true)" + @load-more="loadPage(true)" /> diff --git a/src/pages/profile/copilot/CopilotDetailPage.vue b/src/pages/profile/copilot/CopilotDetailPage.vue index 09e8ebd..90c30ad 100644 --- a/src/pages/profile/copilot/CopilotDetailPage.vue +++ b/src/pages/profile/copilot/CopilotDetailPage.vue @@ -30,12 +30,9 @@ const togglePublicVisibility = (variables) => toggleVisibility({ $q, store: useCopilotsStore(), object: copilot.value, variables }); -const {filters, loadPage, paginationLimit} = usePagination(); +const {filters, loadPage, paginationLimit} = usePagination({fetchFunction: useFlightsStore().fetch}); filters.value = {copilotId: copilotId}; -const loadNextFlightsPage = (appendItems) => loadPage({ - fetchFunc: useFlightsStore().fetch, appendItems -}); -loadNextFlightsPage(false); +loadPage(false); const {isQueryRunning: areFlightsLoading, totalItemsCount, flights} = storeToRefs(useFlightsStore()); const {isQueryRunning, copilot} = storeToRefs(useCopilotsStore()); @@ -90,7 +87,7 @@ const loggedUser = storeToRefs(useLoggedUserStore()).user; :total-items-count="totalItemsCount" :is-query-running="areFlightsLoading" :items-per-page="paginationLimit" - @load-more="loadNextFlightsPage(true)" + @load-more="loadPage(true)" /> Zatím tu nemáš uložené žádné společné lety. diff --git a/src/pages/profile/event/EventDetailPage.vue b/src/pages/profile/event/EventDetailPage.vue index 29aa121..ebc2f55 100644 --- a/src/pages/profile/event/EventDetailPage.vue +++ b/src/pages/profile/event/EventDetailPage.vue @@ -26,7 +26,7 @@ onMounted(() => { {label: event.value.name} ]) }); - loadNextFlightsPage(false); + loadPage(false); }) @@ -37,11 +37,8 @@ const togglePublicVisibility = (variables) => toggleVisibility({ const {isQueryRunning, event} = storeToRefs(useEventsStore()); -const {filters, loadPage, paginationLimit} = usePagination(); +const {filters, loadPage, paginationLimit} = usePagination({fetchFunction: useFlightsStore().fetch}); filters.value = {eventId: eventId} -const loadNextFlightsPage = (appendItems) => loadPage({ - fetchFunc: useFlightsStore().fetch, appendItems -}); const {isQueryRunning: areFlightsLoading, totalItemsCount, flights} = storeToRefs(useFlightsStore()); const loggedUser = storeToRefs(useLoggedUserStore()).user; @@ -65,7 +62,7 @@ const loggedUser = storeToRefs(useLoggedUserStore()).user;
- +

Lety

@@ -80,7 +77,7 @@ const loggedUser = storeToRefs(useLoggedUserStore()).user; :total-items-count="totalItemsCount" :is-query-running="areFlightsLoading" :items-per-page="paginationLimit" - @load-more="loadNextFlightsPage(true)" + @load-more="loadPage(true)" /> diff --git a/src/pages/profile/flight/FlightsPage.vue b/src/pages/profile/flight/FlightsPage.vue index 98d8ac8..0c903c0 100644 --- a/src/pages/profile/flight/FlightsPage.vue +++ b/src/pages/profile/flight/FlightsPage.vue @@ -11,13 +11,9 @@ import {onMounted} from "vue"; useAppStore().setPageTitle("Moje lety"); -const {loadPage, paginationLimit} = usePagination(); - -const loadNextPage = (appendItems) => loadPage({ - fetchFunc: useFlightsStore().fetch, appendItems -}); +const {loadPage, paginationLimit} = usePagination({fetchFunction: useFlightsStore().fetch}); onMounted(() => { - loadNextPage(false); + loadPage(false); }); const {flights, totalItemsCount, isQueryRunning} = storeToRefs(useFlightsStore()); @@ -40,7 +36,7 @@ const {flights, totalItemsCount, isQueryRunning} = storeToRefs(useFlightsStore() :is-query-running="isQueryRunning" :items-per-page="paginationLimit" :total-items-count="totalItemsCount" - @load-more="loadNextPage(true)" + @load-more="loadPage(true)" /> diff --git a/src/pages/profile/organization/OrganizationDetailPage.vue b/src/pages/profile/organization/OrganizationDetailPage.vue index b3e566e..5f38ac0 100644 --- a/src/pages/profile/organization/OrganizationDetailPage.vue +++ b/src/pages/profile/organization/OrganizationDetailPage.vue @@ -14,7 +14,6 @@ import {useOrganizationsStore} from "stores/Organizations"; const organizationId = parseInt(useRoute().params.id); const loggedUser = storeToRefs(useLoggedUserStore()).user; -const $q = useQuasar(); onMounted(() => { useOrganizationsStore().fetchDetail(organizationId).then((o) => { diff --git a/src/pages/profile/poi/PointOfInterestDetailPage.vue b/src/pages/profile/poi/PointOfInterestDetailPage.vue index d020090..6985b4d 100644 --- a/src/pages/profile/poi/PointOfInterestDetailPage.vue +++ b/src/pages/profile/poi/PointOfInterestDetailPage.vue @@ -38,13 +38,9 @@ const togglePublicVisibility = (variables) => toggleVisibility({ $q, store: usePointsOfInterestStore(), object: pointOfInterest.value, variables }); -const {filters, loadPage, paginationLimit} = usePagination(); +const {filters, loadPage, paginationLimit} = usePagination({fetchFunction: useFlightsStore().fetch}); filters.value = {pointOfInterestId: poiId}; -const loadNextFlightsPage = (appendItems) => loadPage({ - fetchFunc: useFlightsStore().fetch, - appendItems -}); -loadNextFlightsPage(false); +loadPage(false); const {isQueryRunning: areFlightsLoading, totalItemsCount, flights} = storeToRefs(useFlightsStore()); const {isQueryRunning, pointOfInterest} = storeToRefs(usePointsOfInterestStore()); @@ -114,7 +110,7 @@ const {isQueryRunning, pointOfInterest} = storeToRefs(usePointsOfInterestStore() :total-items-count="totalItemsCount" :is-query-running="areFlightsLoading" :items-per-page="paginationLimit" - @load-more="loadNextFlightsPage(true)" + @load-more="loadPage(true)" /> Na tomto místě jsi zatím nebyl/a. diff --git a/src/pages/profile/poi/PointsOfInterestPage.vue b/src/pages/profile/poi/PointsOfInterestPage.vue index c0ac74c..b8f73d6 100644 --- a/src/pages/profile/poi/PointsOfInterestPage.vue +++ b/src/pages/profile/poi/PointsOfInterestPage.vue @@ -12,16 +12,15 @@ import ListFilters from "components/ListFilters.vue"; useAppStore().setPageTitle("Zajímavá místa"); -const {filters, loadPage, paginationLimit, paginationOffset} = usePagination(); -paginationLimit.value = 15; -const loadNextPage = (appendItems) => loadPage({ - fetchFunc: usePointsOfInterestStore().fetch, appendItems +const {filters, loadPage, paginationLimit, paginationOffset} = usePagination({ + fetchFunction: usePointsOfInterestStore().fetch, + itemsPerPage: 1 // nefunguje }); -loadNextPage(false); +loadPage(false); const handleFiltersChanged = (newFilters) => { paginationOffset.value = 0; filters.value = newFilters; - loadNextPage(false); + loadPage(false); } const {isQueryRunning, totalItemsCount, pointsOfInterest} = storeToRefs(usePointsOfInterestStore()); @@ -47,7 +46,7 @@ const {isQueryRunning, totalItemsCount, pointsOfInterest} = storeToRefs(usePoint :total-items-count="totalItemsCount" :is-query-running="isQueryRunning" :items-per-page="paginationLimit" - @load-more="loadNextPage(true)" + @load-more="loadPage(true)" /> diff --git a/src/pages/public/AboutPage.vue b/src/pages/public/AboutPage.vue index 3385ce2..8f986e5 100644 --- a/src/pages/public/AboutPage.vue +++ b/src/pages/public/AboutPage.vue @@ -3,10 +3,11 @@ import {useAppStore} from "stores/App"; import {useMeta} from "quasar"; import {metaData} from "src/composables/meta"; import ContentCard from "components/ContentCard.vue"; +import {homepageBreadcrumbs} from "src/composables/breadcrumbs"; useAppStore().setPageTitle("O projektu"); useAppStore().setBreadcrumbs([ - {to: {name: 'homepage'}, label: "Polétání.cz"}, + ...homepageBreadcrumbs(), {label: "O projektu"} ]); useMeta(() => metaData({ diff --git a/src/pages/public/ContactPage.vue b/src/pages/public/ContactPage.vue index 969280a..57fc675 100644 --- a/src/pages/public/ContactPage.vue +++ b/src/pages/public/ContactPage.vue @@ -6,10 +6,11 @@ import {commonProps} from "src/composables/inputs"; import {useQuasar} from "quasar"; import {errorObject, successObject} from "src/composables/dialog"; import {api, axios} from "boot/axios"; +import {homepageBreadcrumbs} from "src/composables/breadcrumbs"; useAppStore().setPageTitle("Kontakt"); useAppStore().setBreadcrumbs([ - {to: {name: 'homepage'}, label: "Polétání.cz"}, + ...homepageBreadcrumbs(), {label: "Kontakt"} ]); diff --git a/src/pages/public/FeaturesPage.vue b/src/pages/public/FeaturesPage.vue index bdae185..dfe8809 100644 --- a/src/pages/public/FeaturesPage.vue +++ b/src/pages/public/FeaturesPage.vue @@ -1,10 +1,11 @@ diff --git a/src/pages/public/PersonalInformationPage.vue b/src/pages/public/PersonalInformationPage.vue index 4f743e6..6d4150b 100644 --- a/src/pages/public/PersonalInformationPage.vue +++ b/src/pages/public/PersonalInformationPage.vue @@ -1,10 +1,11 @@ diff --git a/src/pages/public/TermsAndConditionsPage.vue b/src/pages/public/TermsAndConditionsPage.vue index ac3bb0f..97d02f8 100644 --- a/src/pages/public/TermsAndConditionsPage.vue +++ b/src/pages/public/TermsAndConditionsPage.vue @@ -1,10 +1,11 @@ diff --git a/src/pages/public/aircraft/AircraftDetailPage.vue b/src/pages/public/aircraft/AircraftDetailPage.vue index ac71b60..e4538ed 100644 --- a/src/pages/public/aircraft/AircraftDetailPage.vue +++ b/src/pages/public/aircraft/AircraftDetailPage.vue @@ -8,8 +8,7 @@ export default { } @@ -85,7 +77,7 @@ onMounted(() => { :total-items-count="totalItemsCount" :is-query-running="areFlightsLoading" :items-per-page="paginationLimit" - @load-more="loadNextFlightsPage(true)" + @load-more="loadPage(true)" :public="true" /> diff --git a/src/pages/public/pilotProfile/CopilotDetailPage.vue b/src/pages/public/pilotProfile/CopilotDetailPage.vue index e67a891..0bf4166 100644 --- a/src/pages/public/pilotProfile/CopilotDetailPage.vue +++ b/src/pages/public/pilotProfile/CopilotDetailPage.vue @@ -25,6 +25,7 @@ import {metaData} from "src/composables/meta"; import PhotoGallerySkeleton from "components/photos/skeletons/PhotoGallerySkeleton.vue"; import BasicInfoBanner from "components/banners/BasicInfoBanner.vue"; import {usePagination} from "src/composables/pagination"; +import {publicCopilotBreadcrumbs} from "src/composables/breadcrumbs"; const props = defineProps({ pilot: { @@ -38,11 +39,7 @@ const {flights, totalItemsCount, isQueryRunning: areFlightsLoading} = storeToRef const {photos, isQueryRunning: arePhotosLoading} = storeToRefs(usePhotosStore()); useAppStore().setPageTitle(`${props.pilot.name} + ${copilot.value.name}`); -useAppStore().setBreadcrumbs([ - {to: {name: 'homepage'}, label: "Polétání.cz"}, - {to: {name: "publicProfileDetail", params: {username: props.pilot.publicUsername}}, label: `@${props.pilot.publicUsername}`}, - {label: copilot.value.name} -]); +useAppStore().setBreadcrumbs(publicCopilotBreadcrumbs(props.pilot)); useMeta(() => metaData({ title: copilot.value.name, @@ -51,14 +48,10 @@ useMeta(() => metaData({ image: copilot.value.titleImage?.url })); -const {filters, loadPage, paginationLimit} = usePagination(); +const {filters, loadPage, paginationLimit} = usePagination({fetchFunction: useFlightsStore().fetchPublic}); filters.value = {copilotId: copilot.value.id}; -const loadNextFlightsPage = (appendItems) => loadPage({ - fetchFunc: useFlightsStore().fetchPublic, appendItems -}); - onMounted(() => { - loadNextFlightsPage(false); + loadPage(false); usePhotosStore().fetchPublic({copilotId: copilot.value.id}) }) @@ -82,7 +75,7 @@ onMounted(() => { :is-query-running="areFlightsLoading" :items-per-page="paginationLimit" :public="true" - @load-more="loadNextFlightsPage(true)" + @load-more="loadPage(true)" /> diff --git a/src/pages/public/pilotProfile/CopilotUploadPhotoPage.vue b/src/pages/public/pilotProfile/CopilotUploadPhotoPage.vue index e1abc77..97a9d70 100644 --- a/src/pages/public/pilotProfile/CopilotUploadPhotoPage.vue +++ b/src/pages/public/pilotProfile/CopilotUploadPhotoPage.vue @@ -22,13 +22,13 @@ export default { import {storeToRefs} from "pinia"; import ContentCard from "components/ContentCard.vue"; import {useAppStore} from "stores/App"; -import {useMeta, useQuasar} from "quasar"; +import {useMeta} from "quasar"; import {metaData} from "src/composables/meta"; import {flightName} from "src/composables/flight"; import {usePhotosStore} from "stores/Photos"; -import {onMounted, ref} from "vue"; +import {onMounted} from "vue"; import PhotosEditorListSimple from "components/photos/PhotosEditorListSimple.vue"; -import {copilotBreadcrumbs} from "src/composables/breadcrumbs"; +import {publicCopilotBreadcrumbs} from "src/composables/breadcrumbs"; import FlightFormPhotos from "components/flights/form/FlightFormPhotos.vue"; import BasicInfoBanner from "components/banners/BasicInfoBanner.vue"; import {useRoute} from "vue-router"; @@ -47,7 +47,7 @@ const {photos, isQueryRunning: arePhotosLoading} = storeToRefs(usePhotosStore()) useAppStore().setPageTitle(`Nahraj fotky - ${props.pilot.name} - ${flightName(flight.value)}`); useAppStore().setBreadcrumbs([ - ...copilotBreadcrumbs(props.pilot, flight.value, flight.value.event, copilot.value), + ...publicCopilotBreadcrumbs(props.pilot, flight.value, flight.value.event, copilot.value), {label: "Nahraj fotky"}, ]); diff --git a/src/pages/public/pilotProfile/EventDetailPage.vue b/src/pages/public/pilotProfile/EventDetailPage.vue index ad6867d..3655c09 100644 --- a/src/pages/public/pilotProfile/EventDetailPage.vue +++ b/src/pages/public/pilotProfile/EventDetailPage.vue @@ -20,6 +20,8 @@ import {useMeta} from "quasar"; import {metaData} from "src/composables/meta"; import EventBasicInfo from "components/event/EventBasicInfo.vue"; import EventFlightsMap from "components/event/EventFlightsMap.vue"; +import {publicEventBreadcrumbs} from "src/composables/breadcrumbs"; +import {onMounted} from "vue"; const props = defineProps({ pilot: { @@ -31,23 +33,18 @@ const props = defineProps({ const {isQueryRunning, event} = storeToRefs(useEventsStore()); useAppStore().setPageTitle(event.value.name); -useAppStore().setBreadcrumbs([ - {to: {name: 'homepage'}, label: "Polétání.cz"}, - {to: {name: "publicProfileDetail", params: {username: props.pilot.publicUsername}}, label: `@${props.pilot.publicUsername}`}, - {to: {name: "publicEventsList", params: {username: props.pilot.publicUsername}}, label: "Události"}, - {label: event.value.name} -]); +useAppStore().setBreadcrumbs(publicEventBreadcrumbs(props.pilot, event.value, false)); useMeta(() => metaData({ title: event.value.name, description: event.value.description })) -const {filters, loadPage, paginationLimit} = usePagination(); +const {filters, loadPage, paginationLimit} = usePagination({fetchFunction: useFlightsStore().fetchPublic}); filters.value = {username: props.pilot.publicUsername, eventId: event.value.id}; -const loadNextFlightsPage = (appendItems) => loadPage({ - fetchFunc: useFlightsStore().fetchPublic, appendItems -}); -loadNextFlightsPage(false); + +onMounted(() => { + loadPage(false); +}) const {flights, totalItemsCount, isQueryRunning: areFlightsLoading} = storeToRefs(useFlightsStore()); @@ -80,7 +77,7 @@ const {flights, totalItemsCount, isQueryRunning: areFlightsLoading} = storeToRef :is-query-running="areFlightsLoading" :items-per-page="paginationLimit" :public="true" - @load-more="loadNextFlightsPage(true)" + @load-more="loadPage(true)" /> diff --git a/src/pages/public/pilotProfile/EventsListPage.vue b/src/pages/public/pilotProfile/EventsListPage.vue index 1c600f5..b94b4f7 100644 --- a/src/pages/public/pilotProfile/EventsListPage.vue +++ b/src/pages/public/pilotProfile/EventsListPage.vue @@ -7,6 +7,7 @@ import {useEventsStore} from "stores/Events"; import {storeToRefs} from "pinia"; import {useMeta} from "quasar"; import {commonKeywords, metaData} from "src/composables/meta"; +import {publicProfileBreadcrumbs} from "src/composables/breadcrumbs"; const props = defineProps({ pilot: { @@ -23,8 +24,7 @@ useMeta(() => metaData({ useAppStore().setPageTitle(`${props.pilot.publicUsername}`); useAppStore().setBreadcrumbs([ - {to: {name: 'homepage'}, label: "Polétání.cz"}, - {to: {name: "publicProfileDetail", params: {username: props.pilot.publicUsername}}, label: `@${props.pilot.publicUsername}`}, + ...publicProfileBreadcrumbs(props.pilot), {label: "Události"} ]); diff --git a/src/pages/public/pilotProfile/FlightDetailPage.vue b/src/pages/public/pilotProfile/FlightDetailPage.vue index 8e18bc8..d5883d2 100644 --- a/src/pages/public/pilotProfile/FlightDetailPage.vue +++ b/src/pages/public/pilotProfile/FlightDetailPage.vue @@ -23,6 +23,7 @@ import {aircraftKeywords, flightEventKeywords, flightKeywords, metaData} from "s import ContentCard from "components/ContentCard.vue"; import {usePhotosStore} from "stores/Photos"; import {computed} from "vue"; +import {publicFlightBreadcrumbs} from "src/composables/breadcrumbs"; const {isQueryRunning, flight} = storeToRefs(useFlightsStore()); @@ -37,24 +38,10 @@ usePhotosStore().fetchPublic({flightId: flight.value.id}); const {isQueryRunning: arePhotosLoading, photos: flightPhotos} = storeToRefs(usePhotosStore()); const flightNameFormatted = flightName(flight.value); -useAppStore().setPageTitle(flightNameFormatted); - const event = computed(() => flight.value.event); -const breadcrumbs = [ - {to: {name: 'homepage'}, label: "Polétání.cz"}, - {to: {name: "publicProfileDetail", params: {username: props.pilot.publicUsername}}, label: `@${props.pilot.publicUsername}`}, -] -if (event.value && event.value.isPublic) { - breadcrumbs.push({to: {name: 'publicEventsList', username: props.pilot.publicUsername}, label: "Události"}); - breadcrumbs.push({ - to: { - name: 'publicEventDetail', - params: {eventSlug: event.value.urlSlug, username: props.pilot.publicUsername} - }, label: event.value.name - }); -} -breadcrumbs.push({label: flightNameFormatted}) -useAppStore().setBreadcrumbs(breadcrumbs); + +useAppStore().setPageTitle(flightNameFormatted); +useAppStore().setBreadcrumbs(publicFlightBreadcrumbs(props.pilot, flight.value, event.value, false)); useMeta(() => metaData({ title: `${flightNameFormatted} - ${props.pilot.name}`, diff --git a/src/pages/public/pilotProfile/FlightsListPage.vue b/src/pages/public/pilotProfile/FlightsListPage.vue index 8b37883..83e2cef 100644 --- a/src/pages/public/pilotProfile/FlightsListPage.vue +++ b/src/pages/public/pilotProfile/FlightsListPage.vue @@ -8,6 +8,8 @@ import {storeToRefs} from "pinia"; import {commonKeywords, metaData} from "src/composables/meta"; import {useMeta} from "quasar"; import {usePagination} from "src/composables/pagination"; +import {publicProfileBreadcrumbs} from "src/composables/breadcrumbs"; +import {onMounted} from "vue"; const props = defineProps({ pilot: { @@ -24,18 +26,13 @@ useMeta(() => metaData({ })); useAppStore().setPageTitle(props.pilot.publicUsername); -useAppStore().setBreadcrumbs([ - {to: {name: 'homepage'}, label: "Polétání.cz"}, - {label: `@${props.pilot.publicUsername}`}, -]) +useAppStore().setBreadcrumbs(publicProfileBreadcrumbs(props.pilot, false)) -const {filters, loadPage, paginationLimit} = usePagination(); +const {filters, loadPage, paginationLimit} = usePagination({fetchFunction: useFlightsStore().fetchPublic}); filters.value = {username: props.pilot.publicUsername}; -const loadNextFlightsPage = (appendItems) => loadPage({ - fetchFunc: useFlightsStore().fetchPublic, - appendItems +onMounted(() => { + loadPage(false); }); -loadNextFlightsPage(false); const {flights, totalItemsCount, isQueryRunning: areFlightsLoading} = storeToRefs(useFlightsStore()); @@ -56,6 +53,6 @@ const {flights, totalItemsCount, isQueryRunning: areFlightsLoading} = storeToRef :is-query-running="areFlightsLoading" :items-per-page="paginationLimit" :public="true" - @load-more="loadNextFlightsPage(true)" + @load-more="loadPage(true)" /> diff --git a/src/pages/public/poi/PointOfInterestDetailPage.vue b/src/pages/public/poi/PointOfInterestDetailPage.vue index 607a7a5..8e39626 100644 --- a/src/pages/public/poi/PointOfInterestDetailPage.vue +++ b/src/pages/public/poi/PointOfInterestDetailPage.vue @@ -24,6 +24,7 @@ import BasicInfoBanner from "components/banners/BasicInfoBanner.vue"; import {onMounted} from "vue"; import PhotoGallerySkeleton from "components/photos/skeletons/PhotoGallerySkeleton.vue"; import {usePagination} from "src/composables/pagination"; +import {publicPOIBaseBreadcrumbs} from "src/composables/breadcrumbs"; const {pointOfInterest, isQueryRunning} = storeToRefs(usePointsOfInterestStore()); const {photos, isQueryRunning: arePhotosLoading} = storeToRefs(usePhotosStore()); @@ -36,23 +37,16 @@ useMeta(() => metaData({ description: pointOfInterest.value.description, })); useAppStore().setBreadcrumbs([ - {to: {name: 'homepage'}, label: "Polétání.cz"}, - {to: {name: 'publicPOIs'}, label: "Místa"}, + ...publicPOIBaseBreadcrumbs(), {label: pointOfInterest.value.name} ]); -const {filters, loadPage, paginationLimit} = usePagination(); +const {filters, loadPage, paginationLimit} = usePagination({fetchFunction: useFlightsStore().fetchPublic}); filters.value = {pointOfInterestId: pointOfInterest.value.id}; -const loadNextFlightsPage = (appendItems) => loadPage({ - fetchFunc: useFlightsStore().fetchPublic, - appendItems -}); - onMounted(() => { usePhotosStore().fetchPublic({pointOfInterestId: pointOfInterest.value.id}); - loadNextFlightsPage(false); + loadPage(false); }); - diff --git a/src/pages/public/poi/PointsOfInterestPage.vue b/src/pages/public/poi/PointsOfInterestPage.vue index 163aa28..757338c 100644 --- a/src/pages/public/poi/PointsOfInterestPage.vue +++ b/src/pages/public/poi/PointsOfInterestPage.vue @@ -8,26 +8,23 @@ import {useMeta} from "quasar"; import {metaData} from "src/composables/meta"; import {usePagination} from "src/composables/pagination"; import ListFilters from "components/ListFilters.vue"; +import {homepageBreadcrumbs, publicPOIBaseBreadcrumbs} from "src/composables/breadcrumbs"; useAppStore().setPageTitle("Místa"); -useAppStore().setBreadcrumbs([ - {to: {name: 'homepage'}, label: "Polétání.cz"}, - {label: "Místa"}, -]); +useAppStore().setBreadcrumbs(publicPOIBaseBreadcrumbs()); useMeta(() => metaData({ title: "Místa" })) -const {filters, loadPage, paginationOffset, paginationLimit} = usePagination(); -const loadNextPage = (appendItems) => loadPage({ - fetchFunc: usePointsOfInterestStore().fetchPublic, appendItems +const {filters, loadPage, paginationOffset, paginationLimit} = usePagination({ + fetchFunction: usePointsOfInterestStore().fetchPublic }); -loadNextPage(false); +loadPage(false); const handleFiltersChanged = (newFilters) => { paginationOffset.value = 0; filters.value = newFilters; - loadNextPage(false); + loadPage(false); } const {pointsOfInterest, totalItemsCount, isQueryRunning} = storeToRefs(usePointsOfInterestStore()); @@ -45,7 +42,7 @@ const {pointsOfInterest, totalItemsCount, isQueryRunning} = storeToRefs(usePoint :total-items-count="totalItemsCount" :is-query-running="isQueryRunning" :items-per-page="paginationLimit" - @load-more="loadNextPage(true)" + @load-more="loadPage(true)" /> diff --git a/src/pages/public/user/ForgottenPasswordPage.vue b/src/pages/public/user/ForgottenPasswordPage.vue index bb153c8..9997912 100644 --- a/src/pages/public/user/ForgottenPasswordPage.vue +++ b/src/pages/public/user/ForgottenPasswordPage.vue @@ -15,6 +15,7 @@ const $q = useQuasar(); useAppStore().setPageTitle("Zapomenuté heslo"); useMeta(() => metaData({ title: "Zapomenuté heslo", + index: false })); const requestPasswordChange = () => { diff --git a/src/pages/public/user/LoginPage.vue b/src/pages/public/user/LoginPage.vue index afaecc3..e924728 100644 --- a/src/pages/public/user/LoginPage.vue +++ b/src/pages/public/user/LoginPage.vue @@ -14,6 +14,7 @@ const $q = useQuasar(); useAppStore().setPageTitle("Přihlášení"); useMeta(() => metaData({ title: "Přihlášení", + index: false })); const logUser = () => { diff --git a/src/pages/public/user/PasswordResetPage.vue b/src/pages/public/user/PasswordResetPage.vue index 2126f36..5f3196e 100644 --- a/src/pages/public/user/PasswordResetPage.vue +++ b/src/pages/public/user/PasswordResetPage.vue @@ -17,6 +17,7 @@ const $q = useQuasar(); useAppStore().setPageTitle("Změna hesla"); useMeta(() => metaData({ title: "Změna hesla", + index: false })); const tokenInfo = reactive({