From 0e60b141c21d23f1c5be26dac7415a8e79c252f1 Mon Sep 17 00:00:00 2001 From: ImAlpha Date: Mon, 13 Nov 2023 03:52:24 -0800 Subject: [PATCH] gallery finished --- .../app/components/WSPGallery/page.tsx | 45 +++++++++- .../app/components/WSPGallery/wspgallery.css | 83 +++++++++++++++++++ Websites/jefes-nextjs/tsconfig.json | 1 + 3 files changed, 127 insertions(+), 2 deletions(-) diff --git a/Websites/jefes-nextjs/app/components/WSPGallery/page.tsx b/Websites/jefes-nextjs/app/components/WSPGallery/page.tsx index d921ef8..6502051 100644 --- a/Websites/jefes-nextjs/app/components/WSPGallery/page.tsx +++ b/Websites/jefes-nextjs/app/components/WSPGallery/page.tsx @@ -2,23 +2,64 @@ import React, { useState } from "react"; import "./wspgallery.css"; import Image from "next/image"; +import { FaCircleChevronLeft, FaCircleChevronRight } from "react-icons/fa6"; +import { AiOutlineClose } from "react-icons/ai"; const WSPGallery = ({ galleryImages }) => { const [slideNumber, setSlideNumber] = useState(0); const [openModal, setOpenModal] = useState(false); + const handleOpenModal = (index) => { + setSlideNumber(index); + setOpenModal(true); + }; + + const handleCloseModal = () => { + setOpenModal(false); + }; + const prevSlide = () => { + slideNumber === 0 + ? setSlideNumber(galleryImages.length - 1) + : setSlideNumber(slideNumber - 1); + }; + const nextSlide = () => { + slideNumber + 1 === galleryImages.length + ? setSlideNumber(0) + : setSlideNumber(slideNumber + 1); + }; + return (
-
+ {openModal && ( +
+ + + +
+ / handleOpenModal(index)} + /> +
+
+ )} + +
{galleryImages && galleryImages.map((slide, index) => { return ( -
+
/ handleOpenModal(index)} />
); diff --git a/Websites/jefes-nextjs/app/components/WSPGallery/wspgallery.css b/Websites/jefes-nextjs/app/components/WSPGallery/wspgallery.css index e69de29..9873fc4 100644 --- a/Websites/jefes-nextjs/app/components/WSPGallery/wspgallery.css +++ b/Websites/jefes-nextjs/app/components/WSPGallery/wspgallery.css @@ -0,0 +1,83 @@ +.galleryWrap { + display: flex; + flex-wrap: wrap; + gap: 10px; + align-items: center; + justify-content: center; + max-width: 620px; + margin: 0 auto; +} + +.galleryWrap .single { + width: 200px; +} + +.galleryWrap .single > Image { + max-width: 100%; +} + +.galleryWrap .single > Image:hover { + transform: scale(1.02); +} + +.sliderWrap { + position: fixed; + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: 999; + background-color: rgba(0, 0, 0, 0.8); + display: flex; + align-items: center; + justify-content: center; + width: 100%; + height: 100%; +} + +.sliderWrap .btnClose, +.sliderWrap .btnPrev, +.sliderWrap .btnNext { + position: fixed; + cursor: pointer; + opacity: 0.6; + color: #fff; + z-index: 9999; +} + +.btnNext:hover, +.btnPrev:hover, +.btnClose:hover { + opacity: 1; +} + +.sliderWrap .btnClose { + top: 40px; + right: 40px; +} +.sliderWrap .btnPrev { + top: 50%; + transform: translateY(-50%); + left: 40px; +} +.sliderWrap .btnNext { + top: 50%; + transform: translateY(-50%); + right: 40px; +} + +.fullScreenImage { + width: calc(100% - 40px); + height: calc(100% -40px); + display: flex; + align-items: center; + justify-content: center; +} +.fullScreenImage > Image { + max-width: 100%; + max-height: 100%; + pointer-events: none; + -webkit-user-select: none; + -ms-user-select: none; + user-select: none; +} diff --git a/Websites/jefes-nextjs/tsconfig.json b/Websites/jefes-nextjs/tsconfig.json index c714696..050f720 100644 --- a/Websites/jefes-nextjs/tsconfig.json +++ b/Websites/jefes-nextjs/tsconfig.json @@ -9,6 +9,7 @@ "esModuleInterop": true, "module": "esnext", "moduleResolution": "bundler", + "noImplicitAny": true, "resolveJsonModule": true, "isolatedModules": true, "jsx": "preserve",