From f605b730d8c91136fbe9cc222888f2230815feef Mon Sep 17 00:00:00 2001
From: Danette10 <38246813+Danette10@users.noreply.github.com>
Date: Tue, 25 Aug 2026 23:42:11 +0200
Subject: [PATCH] fix(journey): improve video thumbnails and playback layout
(#2043)
* Revert "chore(deps): bump dompurify from 3.4.11 to 3.4.12 (#1681)" (#1694)
This reverts commit 94736112cf0af4ac467ae592e059feebee4e1300.
* feat: add PhotoGrid and PhotoImg components for journey photo gallery display
* feat: implement JourneyPublicPage to display shared journey data with timeline, map, and gallery views
* feat: create MobileEntryView component for displaying detailed journey entries on mobile devices
* feat: add docker-compose configuration for video testing environment
* feat: add gallery view components with support for local photo/video uploads and external provider integration
* fix: green up the video layout branch
Four things stood between this and a merge.
index.css carried committed merge conflict markers. A format-on-save had run
over the whole file and collapsed `=======` and `>>>>>>>` onto the line that
starts the popup-tip rule, which makes .trek-map-popup .mapboxgl-popup-tip part
of a malformed selector list - so the parser drops the whole rule and the map
popup's tail comes back as the stray notch its comment describes. Nothing in CI
catches that; invalid CSS just disappears. The file is back to the dev version
with only the video block added, 1301 -> 1323 lines instead of 2057, and the
same for the lockfile, which had only picked up "peer": true annotations from a
different npm run.
PhotoImg referenced an onClick it never took as a prop - the click already sits
on the button wrapping it.
PublicPhoto did not declare media_type even though journey-share.service.ts
selects it in both queries, which is what the `as any` casts around it were
working around. Declared once, the way JourneyPhoto does, and the casts are gone.
The single-photo hero had moved to a thumbnail. Right for a video, whose
/original is the video file and leaves an blank - but a photo hero is
deliberately full size, which FE-JRN-PUBWIRE-008 pins. It now picks per media
type.
---------
Co-authored-by: jubnl <66769052+jubnl@users.noreply.github.com>
Co-authored-by: Maurice
---
.../Journey/JourneyDetailPageGalleryView.tsx | 11 +-
.../Journey/JourneyDetailPagePhotoGrid.tsx | 30 ++++--
.../components/Journey/MobileEntryView.tsx | 68 ++++++++----
client/src/components/Journey/VideoPlayer.tsx | 49 +++++++--
client/src/index.css | 22 ++++
client/src/pages/JourneyPublicPage.tsx | 101 ++++++++++++------
.../pages/journeyPublic/journeyPublicModel.ts | 6 ++
7 files changed, 214 insertions(+), 73 deletions(-)
diff --git a/client/src/components/Journey/JourneyDetailPageGalleryView.tsx b/client/src/components/Journey/JourneyDetailPageGalleryView.tsx
index 604ad6eae..883bb442b 100644
--- a/client/src/components/Journey/JourneyDetailPageGalleryView.tsx
+++ b/client/src/components/Journey/JourneyDetailPageGalleryView.tsx
@@ -44,10 +44,10 @@ export function GalleryView({ entries, gallery, journeyId, userId, trips, onPhot
try {
const status = await memoriesApi.status(p.id)
if (status.connected) connected.push({ id: p.id, name: p.name })
- } catch {}
+ } catch { }
}
setAvailableProviders(connected)
- } catch {}
+ } catch { }
})()
}, [])
@@ -158,9 +158,10 @@ export function GalleryView({ entries, gallery, journeyId, userId, trips, onPhot
onClick={() => onPhotoClick(allPhotos, i)}
onKeyDown={e => { if (e.key === 'Enter' || e.key === ' ') { e.preventDefault(); onPhotoClick(allPhotos, i) } }}
>
- {photo.media_type === 'video' && !photo.thumbnail_path ? (
- // Poster-less video (capture failed / unsupported codec): show a
- // neutral tile rather than a broken 404 thumbnail (#823).
+ {photo.media_type === 'video' &&
+ photo.provider === 'local' &&
+ !photo.thumbnail_path ? (
+ // Poster-less local video: show a neutral tile.
) : (
+ >
+
+
+ {isVideo && (
+