From 6f3a0dcc25b2400eb9df4b933ef056dc2dbed396 Mon Sep 17 00:00:00 2001 From: BFlat Date: Wed, 31 Jan 2024 07:03:15 +0700 Subject: [PATCH] batch media view --- packages/fakeyou.com/package.json | 1 + .../src/v2/view/pages/media/MediaPage.tsx | 13 ++- .../SdBatchMediaPanel/SdBatchMediaPanel.scss | 78 ++++++++++++++++++ .../SdBatchMediaPanel/SdBatchMediaPanel.tsx | 79 +++++++++++++++++++ yarn.lock | 8 ++ 5 files changed, 178 insertions(+), 1 deletion(-) create mode 100644 packages/fakeyou.com/src/v2/view/pages/media/components/SdBatchMediaPanel/SdBatchMediaPanel.scss create mode 100644 packages/fakeyou.com/src/v2/view/pages/media/components/SdBatchMediaPanel/SdBatchMediaPanel.tsx diff --git a/packages/fakeyou.com/package.json b/packages/fakeyou.com/package.json index 9345c24955..42897d0898 100644 --- a/packages/fakeyou.com/package.json +++ b/packages/fakeyou.com/package.json @@ -75,6 +75,7 @@ "react-twitch-embed": "^3.0.1", "react-wavesurfer.js": "^0.0.8", "sass": "^1.57.1", + "swiper": "^11.0.5", "typescript": "^3.7.5", "universal-cookie": "^6.1.1", "uuid": "^8.3.2", diff --git a/packages/fakeyou.com/src/v2/view/pages/media/MediaPage.tsx b/packages/fakeyou.com/src/v2/view/pages/media/MediaPage.tsx index 078c48823b..40a69411e2 100644 --- a/packages/fakeyou.com/src/v2/view/pages/media/MediaPage.tsx +++ b/packages/fakeyou.com/src/v2/view/pages/media/MediaPage.tsx @@ -35,6 +35,7 @@ import { useMedia, useRatings, useSession } from "hooks"; import SdCoverImagePanel from "../weight/cover_image_panels/SdCoverImagePanel"; import { WeightCategory } from "@storyteller/components/src/api/_common/enums/WeightCategory"; import Iframe from "react-iframe"; +import SdBatchMediaPanel from "./components/SdBatchMediaPanel/SdBatchMediaPanel"; export default function MediaPage() { const { user } = useSession(); @@ -91,11 +92,21 @@ export default function MediaPage() { ); case MediaFileType.Image: + const one = false; + const multi = one ? false : true; let sdMediaImage = "/images/avatars/default-pfp.png"; if (mediaFile.public_bucket_path) { sdMediaImage = bucketConfig.getGcsUrl(mediaFile.public_bucket_path); } - return ; + return ( + <> + {!multi ? ( + + ) : ( + + )} + + ); case MediaFileType.BVH: const bvhUrl = bucketConfig.getGcsUrl(mediaFile.public_bucket_path); return ( diff --git a/packages/fakeyou.com/src/v2/view/pages/media/components/SdBatchMediaPanel/SdBatchMediaPanel.scss b/packages/fakeyou.com/src/v2/view/pages/media/components/SdBatchMediaPanel/SdBatchMediaPanel.scss new file mode 100644 index 0000000000..9f57c66d7d --- /dev/null +++ b/packages/fakeyou.com/src/v2/view/pages/media/components/SdBatchMediaPanel/SdBatchMediaPanel.scss @@ -0,0 +1,78 @@ +@import "scss/colours.scss"; + +.swiper { + width: 100%; + height: 300px; + margin-left: auto; + margin-right: auto; +} + +.swiper-slide { + background-size: cover; + background-position: center; +} + +.secondSwiper { + height: 100%; + width: 100%; +} + +.secondSwiper .swiper-slide { + height: 100%; +} + +.firstSwiper { + height: 20%; + box-sizing: border-box; + padding: 10px 0; +} + +.firstSwiper .swiper-slide { + transition: 0.2s; + width: 25%; + height: 100%; + opacity: 0.4; +} + +.firstSwiper .swiper-slide-thumb-active { + opacity: 1; +} + +.swiper-slide img { + display: block; + width: 100%; + height: 100%; + object-fit: cover; + border-radius: 0.5rem; +} + +.swiper-button-prev, +.swiper-button-next { + color: $white; + opacity: 0.5; + transition: 0.2s; + + &:hover { + opacity: 1; + } +} + +.media-img-container { + min-height: 300px; + overflow: hidden; + display: flex; + align-items: center; + justify-content: center; + + img { + border-radius: 0.5rem; + border: 1px solid rgba($white, 0.04); + max-width: 100%; + max-height: 100%; + aspect-ratio: attr(width) / attr(height); + + &.vertical { + max-height: 70vh; + } + } +} diff --git a/packages/fakeyou.com/src/v2/view/pages/media/components/SdBatchMediaPanel/SdBatchMediaPanel.tsx b/packages/fakeyou.com/src/v2/view/pages/media/components/SdBatchMediaPanel/SdBatchMediaPanel.tsx new file mode 100644 index 0000000000..b23556cf71 --- /dev/null +++ b/packages/fakeyou.com/src/v2/view/pages/media/components/SdBatchMediaPanel/SdBatchMediaPanel.tsx @@ -0,0 +1,79 @@ +import { Panel } from "components/common"; +import React, { useState } from "react"; +import { Swiper, SwiperSlide } from "swiper/react"; +import "swiper/css"; +import "swiper/css/free-mode"; +import "swiper/css/navigation"; +import "swiper/css/thumbs"; +import { FreeMode, Navigation, Thumbs } from "swiper/modules"; +import { Swiper as SwiperType } from "swiper/types"; +import "./SdBatchMediaPanel.scss"; + +interface SdCoverImagePanelProps { + src?: string; + alt?: string; +} + +export default function SdBatchMediaPanel({ + src, + alt, +}: SdCoverImagePanelProps) { + const [thumbsSwiper, setThumbsSwiper] = useState(null); + + const handleSwiper = (swiper: SwiperType) => { + setThumbsSwiper(swiper); + }; + + const images = [ + "https://swiperjs.com/demos/images/nature-1.jpg", + "https://swiperjs.com/demos/images/nature-2.jpg", + "https://swiperjs.com/demos/images/nature-3.jpg", + "https://swiperjs.com/demos/images/nature-4.jpg", + "https://swiperjs.com/demos/images/nature-5.jpg", + "https://swiperjs.com/demos/images/nature-6.jpg", + "https://swiperjs.com/demos/images/nature-7.jpg", + "https://swiperjs.com/demos/images/nature-8.jpg", + ]; + + return ( + + + {images.map((imgSrc, index) => ( + +
+ {`Slide +
+
+ ))} +
+ + {images.map((imgSrc, index) => ( + + {`Thumbnail + + ))} + +
+ ); +} diff --git a/yarn.lock b/yarn.lock index b020378727..35807f7bf5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4595,6 +4595,7 @@ __metadata: moment: ^2.29.4 prettier: ^3.1.0 pretty-quick: ^3.1.3 + swiper: ^11.0.5 universal-cookie: ^6.1.1 yarn: ^1.22.19 languageName: unknown @@ -20178,6 +20179,13 @@ __metadata: languageName: node linkType: hard +"swiper@npm:^11.0.5": + version: 11.0.5 + resolution: "swiper@npm:11.0.5" + checksum: 83b125d16733a66ed5f58627c81263116e39eea5cead92667d2e24692ff94632de9aa05fec1ed80dc352779c0d7525e9a18424fce1c39c5e970823414b212edb + languageName: node + linkType: hard + "swiper@npm:^8.3.2": version: 8.3.2 resolution: "swiper@npm:8.3.2"