diff --git a/.env.example b/.env.example index eeecf5b..a806b71 100644 --- a/.env.example +++ b/.env.example @@ -66,6 +66,7 @@ AWS_BUCKET= AWS_USE_PATH_STYLE_ENDPOINT=false VITE_APP_NAME="${APP_NAME}" +VITE_APP_VERSION=local REVERB_APP_ID=local REVERB_APP_KEY=local-key diff --git a/.github/workflows/ci_cd.yml b/.github/workflows/ci_cd.yml index 56f621d..bacbf39 100644 --- a/.github/workflows/ci_cd.yml +++ b/.github/workflows/ci_cd.yml @@ -49,6 +49,7 @@ jobs: printf -v run_attempt '%03d' "${GITHUB_RUN_ATTEMPT}" tag="main-${GITHUB_RUN_NUMBER}-${run_attempt}-${GITHUB_SHA:0:12}" environment="staging" + vite_app_version="staging-${GITHUB_SHA:0:12}" vite_reverb_app_key="1af96b48d2ef78983e4ef281eed3a48b" vite_reverb_host="scrum-poker.twyco-staging.de" ;; @@ -68,6 +69,7 @@ jobs: fi environment="production" + vite_app_version="${tag}" vite_reverb_app_key="cfd9d925ff339374c04997beb90fbc32" vite_reverb_host="scrum-poker.petsch-studios.de" ;; @@ -81,6 +83,7 @@ jobs: echo "image=${image}" echo "tag=${tag}" echo "environment=${environment}" + echo "vite_app_version=${vite_app_version}" echo "vite_reverb_app_key=${vite_reverb_app_key}" echo "vite_reverb_host=${vite_reverb_host}" } >> "${GITHUB_OUTPUT}" @@ -110,6 +113,7 @@ jobs: IMAGE: ${{ steps.image.outputs.image }} IMAGE_TAG: ${{ steps.image.outputs.tag }} DEPLOYMENT_ENVIRONMENT: ${{ steps.image.outputs.environment }} + VITE_APP_VERSION: ${{ steps.image.outputs.vite_app_version }} VITE_REVERB_APP_KEY: ${{ steps.image.outputs.vite_reverb_app_key }} VITE_REVERB_HOST: ${{ steps.image.outputs.vite_reverb_host }} VITE_REVERB_PORT: "443" @@ -126,6 +130,7 @@ jobs: docker buildx build \ --file Dockerfile \ --target runtime \ + --build-arg "VITE_APP_VERSION=${VITE_APP_VERSION}" \ --build-arg "VITE_REVERB_APP_KEY=${VITE_REVERB_APP_KEY}" \ --build-arg "VITE_REVERB_HOST=${VITE_REVERB_HOST}" \ --build-arg "VITE_REVERB_PORT=${VITE_REVERB_PORT}" \ diff --git a/Dockerfile b/Dockerfile index 3069ebf..d107f92 100644 --- a/Dockerfile +++ b/Dockerfile @@ -51,12 +51,14 @@ WORKDIR /var/www FROM php_base AS build +ARG VITE_APP_VERSION=local ARG VITE_REVERB_APP_KEY ARG VITE_REVERB_HOST ARG VITE_REVERB_PORT ARG VITE_REVERB_SCHEME -ENV VITE_REVERB_APP_KEY=${VITE_REVERB_APP_KEY} \ +ENV VITE_APP_VERSION=${VITE_APP_VERSION} \ + VITE_REVERB_APP_KEY=${VITE_REVERB_APP_KEY} \ VITE_REVERB_HOST=${VITE_REVERB_HOST} \ VITE_REVERB_PORT=${VITE_REVERB_PORT} \ VITE_REVERB_SCHEME=${VITE_REVERB_SCHEME} diff --git a/resources/js/components/AppVersion.vue b/resources/js/components/AppVersion.vue new file mode 100644 index 0000000..8b4a714 --- /dev/null +++ b/resources/js/components/AppVersion.vue @@ -0,0 +1,12 @@ + + + diff --git a/resources/js/components/rooms/RoomHeader.vue b/resources/js/components/rooms/RoomHeader.vue index 67f5d38..cd42369 100644 --- a/resources/js/components/rooms/RoomHeader.vue +++ b/resources/js/components/rooms/RoomHeader.vue @@ -3,10 +3,12 @@ import { Link } from '@inertiajs/vue3'; import { Check, Copy } from '@lucide/vue'; import { ref } from 'vue'; +import { Checkbox } from '@/components/ui/checkbox'; import { favorite } from '@/routes/room'; -import type { RoomHeaderProps } from '@/types/room'; +import type { RoomHeaderEmits, RoomHeaderProps } from '@/types/room'; const props = defineProps(); +const emit = defineEmits(); const copied = ref(false); @@ -45,21 +47,39 @@ async function copyInviteLink(): Promise { - + + + + + + diff --git a/resources/js/components/rooms/RoomModeratorControls.vue b/resources/js/components/rooms/RoomModeratorControls.vue index 406477f..4747577 100644 --- a/resources/js/components/rooms/RoomModeratorControls.vue +++ b/resources/js/components/rooms/RoomModeratorControls.vue @@ -106,4 +106,24 @@ function resetVotes(): void { left: 1rem; } } + +@media (min-width: 768px) and (max-height: 800px) { + .moderator-controls, + .reset-controls { + bottom: 0.75rem; + } + + .moderator-controls { + right: 0.75rem; + } + + .reset-controls { + left: 0.75rem; + } + + button { + padding: 0.5rem 0.75rem; + font-size: 0.875rem; + } +} diff --git a/resources/js/components/rooms/RoomSeat.vue b/resources/js/components/rooms/RoomSeat.vue index 7c6e27f..2c4a227 100644 --- a/resources/js/components/rooms/RoomSeat.vue +++ b/resources/js/components/rooms/RoomSeat.vue @@ -39,7 +39,7 @@ function playerVote(): string | null { :aria-label="`${player.name} hat eine Karte gewählt`" >
@@ -313,6 +313,27 @@ function playerVote(): string | null { } } +@media (min-width: 768px) and (max-height: 800px) { + .player-seat { + width: 7rem; + } + + .player-details { + margin-top: 0.25rem; + } + + .seat-card { + top: 1.5rem; + width: 2.75rem; + height: 3.8rem; + } + + .own-vote-card, + .flip-card-face { + font-size: 1rem; + } +} + @media (prefers-reduced-motion: reduce) { .flip-card-inner { transition: none; diff --git a/resources/js/components/rooms/RoomTable.vue b/resources/js/components/rooms/RoomTable.vue index 6f325a8..b68501f 100644 --- a/resources/js/components/rooms/RoomTable.vue +++ b/resources/js/components/rooms/RoomTable.vue @@ -1,4 +1,5 @@