From 7a45a0133e7c38c68027f48ca0fefdfd6c305355 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Kv=C3=A1=C4=8Dek?= Date: Wed, 28 Feb 2024 09:41:15 +0100 Subject: [PATCH] Mapa s trasami letu u eventu, drobna uprava vizualu eventu --- docker-compose.yml | 2 +- src/components/event/EventBasicInfo.vue | 22 +++++++ src/components/event/EventFlightsMap.vue | 62 +++++++++++++++++++ src/components/event/package.json | 14 +++++ src/components/flights/FlightsList.vue | 11 +--- src/components/map/MapWithMarkers.vue | 57 +++++++++++++++-- src/composables/datetimeUtils.js | 28 --------- src/composables/utils.js | 6 ++ src/graphql/queries/event.js | 18 +++++- src/pages/profile/event/EventDetailPage.vue | 25 +++----- src/pages/profile/flight/FlightDetailPage.vue | 2 +- .../public/pilotProfile/EventDetailPage.vue | 21 ++----- src/stores/Events.js | 15 +++-- src/stores/helpers.js | 12 +++- 14 files changed, 211 insertions(+), 84 deletions(-) create mode 100644 src/components/event/EventBasicInfo.vue create mode 100644 src/components/event/EventFlightsMap.vue create mode 100644 src/components/event/package.json diff --git a/docker-compose.yml b/docker-compose.yml index 1db0210..be49cf8 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -36,7 +36,7 @@ services: - ./src-ssr:/app/src-ssr - ./public:/app/public # - ./node_modules:/app/node_modules:delegated - command: quasar dev -m ssr + command: quasar dev # -m ssr environment: API_URL: "http://127.0.0.1:8000" diff --git a/src/components/event/EventBasicInfo.vue b/src/components/event/EventBasicInfo.vue new file mode 100644 index 0000000..6ed3f0c --- /dev/null +++ b/src/components/event/EventBasicInfo.vue @@ -0,0 +1,22 @@ + + + diff --git a/src/components/event/EventFlightsMap.vue b/src/components/event/EventFlightsMap.vue new file mode 100644 index 0000000..4da630e --- /dev/null +++ b/src/components/event/EventFlightsMap.vue @@ -0,0 +1,62 @@ + + + diff --git a/src/components/event/package.json b/src/components/event/package.json new file mode 100644 index 0000000..e82a947 --- /dev/null +++ b/src/components/event/package.json @@ -0,0 +1,14 @@ +{ + "name": "event", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "repository": { + "type": "git", + "url": "git@kvacek.cz:poletani.cz/app.git" + }, + "private": true +} diff --git a/src/components/flights/FlightsList.vue b/src/components/flights/FlightsList.vue index 79b4feb..7917684 100644 --- a/src/components/flights/FlightsList.vue +++ b/src/components/flights/FlightsList.vue @@ -5,6 +5,7 @@ import AvatarFromPhoto from "components/avatars/AvatarFromPhoto.vue"; import FlightsListSkeleton from "components/flights/skeletons/FlightsListSkeleton.vue"; import {computed} from "vue"; import LoadMoreList from "components/LoadMoreList.vue"; +import {pluralize} from "../../composables/utils"; const props = defineProps({ items: { @@ -37,16 +38,8 @@ const routeDetail = (flight) => { else return {name: "flightDetail", params: {id: flight.id}} }; - -const pluralize = (count, singular, plural, pluralMore) => { - if (count === 1) return singular; - else if (count < 5) return plural; - else return pluralMore; -} const loadMoreCount = computed(() => { - const remaining = props.totalItemsCount - props.items.length; - - return Math.min(props.itemsPerPage, remaining); + return Math.min(props.itemsPerPage, props.totalItemsCount - props.items.length); }); diff --git a/src/components/map/MapWithMarkers.vue b/src/components/map/MapWithMarkers.vue index b59d9b5..30dbcfc 100644 --- a/src/components/map/MapWithMarkers.vue +++ b/src/components/map/MapWithMarkers.vue @@ -1,14 +1,20 @@ + + diff --git a/src/composables/datetimeUtils.js b/src/composables/datetimeUtils.js index 65d6052..0d80d95 100644 --- a/src/composables/datetimeUtils.js +++ b/src/composables/datetimeUtils.js @@ -14,34 +14,6 @@ export const minutesToHumanReadable = (totalMinutes) => { return `${hoursPart}${minutes}min` } -export const formatDatetimeNative = (date, format = "DD. MM. YYYY") => { - if (typeof date === 'string') { - date = parseDate(date); - } - - return format - .replace("DD", date.getDate().toString()) - .replace("MM", (date.getMonth() + 1).toString()) - .replace("YYYY", date.getFullYear().toString()) - - // todo: doplnit pocatecni nuly - .replace("hh", date.getHours().toString()) - .replace("mm", date.getMinutes().toString()) - .replace("ss", date.getSeconds().toString()); -} - -export const parseDateNative = (datetime) => { - // const [date, time] = datetime.split("T"); - // const [year, month, day] = date.split("-"); - // const [hour, minute] = time.split(":"); - // const dateObject = new Date(year, month, day, hour, minute, 0); - // ^ tohle funguje ok - - const timestamp = Date.parse(datetime); - return new Date(timestamp); -} - - export const parseDate = (datetimeStr, format = FORMAT_ISO) => { return date.extractDate(datetimeStr, format) } diff --git a/src/composables/utils.js b/src/composables/utils.js index 3ddbfde..d1f2661 100644 --- a/src/composables/utils.js +++ b/src/composables/utils.js @@ -2,3 +2,9 @@ export const roundWithPrecision = (number, precision) => { const factor = Math.pow(10, precision); return Math.round(number * factor) / factor; } + +export const pluralize = (count, singular, plural, pluralMore) => { + if (count === 1) return singular; + else if (count < 5) return plural; + else return pluralMore; +} diff --git a/src/graphql/queries/event.js b/src/graphql/queries/event.js index c2ce46a..66f21d0 100644 --- a/src/graphql/queries/event.js +++ b/src/graphql/queries/event.js @@ -20,13 +20,29 @@ query eventsList($limit: Int!, $offset: Int) { ${FRAGMENT_EVENT_LIST_INFO} `; +export const EVENTS_FLIGHTS_TRACKS = gql` +query eventsFlightsTracks($eventId: Int!, $onlyPublic: Boolean) { + event(id: $eventId) { + flights(onlyPublic: $onlyPublic) { + durationMinCalculated + gpxTrack { + coordinates { + lat + lng + } + } + } + } +} +`; + export const EVENTS_PUBLIC_LIST = gql` query eventsPublicList($username: String, $limit: Int!, $offset: Int) { events(username: $username, limit: $limit, offset: $offset, public: true) { items { ...eventListInfo - flights { + flights(onlyPublic: true) { titlePhoto { thumbnailUrl } diff --git a/src/pages/profile/event/EventDetailPage.vue b/src/pages/profile/event/EventDetailPage.vue index e50dbdf..728c37d 100644 --- a/src/pages/profile/event/EventDetailPage.vue +++ b/src/pages/profile/event/EventDetailPage.vue @@ -5,7 +5,6 @@ import EventDetailSkeleton from "components/event/skeletons/EventDetailSkeleton. import {useAppStore} from "stores/App"; import FAB from "components/FAB.vue"; import FlightsList from "components/flights/FlightsList.vue"; -import {FORMAT_DATE, formatDatetime} from "src/composables/datetimeUtils"; import {useEventsStore} from "stores/Events"; import {storeToRefs} from "pinia"; import {filters, loadPage, paginationLimit} from "src/composables/pagination"; @@ -13,9 +12,10 @@ import {useFlightsStore} from "stores/Flights"; import PublishButton from "components/inputs/PublishButton.vue"; import {useLoggedUserStore} from "stores/LoggedUser"; import {toggleVisibility} from "src/composables/form/formHandling"; -import {TOGGLE_FLIGHT_PUBLISH} from "src/graphql/mutations/flight"; import {useQuasar} from "quasar"; import CopyLinkButton from "components/inputs/CopyLinkButton.vue"; +import EventFlightsMap from "components/event/EventFlightsMap.vue"; +import EventBasicInfo from "components/event/EventBasicInfo.vue"; const eventId = parseInt(useRoute().params.id); onMounted(() => { @@ -35,7 +35,6 @@ const togglePublicVisibility = (variables) => toggleVisibility({ $q, store: useEventsStore(), object: event.value, variables }); - const {isQueryRunning, event} = storeToRefs(useEventsStore()); filters.value = {eventId: eventId} @@ -51,19 +50,7 @@ const loggedUser = storeToRefs(useLoggedUserStore()).user;