GaleryComponent
Sun Aug 01 2021 07:35:29 GMT+0000 (Coordinated Universal Time)
Saved by @ejiwen #javascript
import React, { useEffect, useState } from 'react'; import $ from 'jquery'; import axios from 'axios'; import lazy from '../scripts/lazyLoad.js'; import picSelected from '../scripts/picSelected.js'; import ImageModal from '../scripts/ImageModal.js'; import Zoom from '../scripts/zoomImage.js'; import { Thumbnails } from './styles/Container.style'; import { PortalImg, ImgZoom } from '../components/styles/Container.style'; import { BsFullscreen} from 'react-icons/bs'; import { ImArrowLeft, ImArrowRight} from 'react-icons/im'; const GaleryComponent = ({ productID, styleIndex, widenFn }) => { const [styleProduct, setStyleProduct] = useState([]); const [picIndex, setPicIndex] = useState(1); const [isOpen, setIsOpen] = useState(false); useEffect(() => { axios .get( `https://app-hrsei-api.herokuapp.com/api/fec2/hr-sfo/products/${productID}/styles`, { headers: { Authorization: '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', }, } ) .then((res) => { let i = 0; setStyleProduct([]); res.data.results[styleIndex].photos.map((item) => //item.url = item.url.replace(/&w=\d+/, "&w=10"); setStyleProduct((prevState) => [ ...prevState, { id: i++, thumbnail: item.thumbnail_url, url: item.url }, ]) ); }) .catch((error) => { console.error(error); }); }, [styleIndex]); const carrousel = (dir) => { if (dir < 0) { if (picIndex > 0) { setPicIndex(picIndex + dir); } } else { if (picIndex < styleProduct.length - 1) { setPicIndex(picIndex + dir); } } if (picIndex + dir <= 0) { $('.previousPic').hide(); } else { $('.previousPic').show(); } if (picIndex + dir >= styleProduct.length - 1) { $('.nextPic').hide(); } else { $('.nextPic').show(); } }; const scrollFn = () => { $('.thumbnails').animate({ scrollTop: +400 }, 1000); }; const scrollFnTop = () => { $('.thumbnails').animate({ scrollTop: -400 }, 1000); }; return ( <div style={{ position: 'relative' }}> <span style={{ position: 'absolute', top: '20px', right: '20px', color: 'white', fontSize: '2rem', cursor: 'pointer', }} onClick={widenFn} > <BsFullscreen /> </span> <span style={{ position: 'absolute', top: '50%', left: '80px', fontSize: 'xx-large', textShadow: '3px 1px 0px #ffffffed, 5px 0px 0px rgb(0 0 0 / 15%)', cursor: 'pointer', }} className="previousPic" onClick={() => carrousel(-1)} > <ImArrowLeft style={{color: 'white'}} /> </span> <span style={{ position: 'absolute', top: '50%', right: '20px', fontSize: 'xx-large', textShadow: '3px 1px 0px #ffffffed, 5px 0px 0px rgb(0 0 0 / 15%)', cursor: 'pointer', }} className="nextPic" onClick={() => carrousel(1)} > <ImArrowRight style={{color: 'white'}} /> </span> <Thumbnails className="thumbnails"> {styleProduct.map((item) => ( <img style={{ display: 'block', marginBottom: '15px', marginLeft: '20px', border: '2px solid white', }} width="40px" height="40px" src={item.thumbnail} onClick={() => { setPicIndex(item.id); picSelected.SelectImg(item.id); }} data-id={item.id.toString()} /> ))} </Thumbnails> <span style={{ position: 'absolute', top: '5px', left: '35px', cursor: 'pointer', color: 'white', textShadow: 'rgba(0,0,0, 0.4) 0px 5px, rgba(0,0,0, 0.3) 0px 10px, rgba(0,0,0, 0.2) 0px 15px, rgba(0,0,0, 0.1) 0px 20px, rgba(0,0,0, 0.05) 0px 25px', }} // onClick={picSelected.ScrollThumbnails} onClick={scrollFnTop} className="scrollClassTop" > ▲ </span> <span style={{ position: 'absolute', top: '318px', left: '35px', cursor: 'pointer', color: 'white', textShadow: 'rgb(0 0 0 / 40%) 0px -5px, rgb(0 0 0 / 30%) 0px -10px, rgb(0 0 0 / 20%) 0px -15px, rgb(0 0 0 / 10%) 0px -20px, rgb(0 0 0 / 5%) 0px -25px', }} // onClick={picSelected.ScrollThumbnails} onClick={scrollFn} className="scrollClass" > ▼ </span> <div style={{ display: 'flex', maxHeight: '600px' }}> {styleProduct[picIndex] && ( <img width="100%" height="600px" src={styleProduct[picIndex].url.replace(/&w=\d+/, '&w=10')} onClick={() => setIsOpen(!isOpen)} /> )} </div> {styleProduct[picIndex] && ( <ImageModal isOpen={isOpen} imgUrl={styleProduct[picIndex].url} onClickPic={setIsOpen} /> )} {lazy.leazyImg()} </div> ); }; export default GaleryComponent; // {lazy.leazyImg()} // <ImgZoom srcImg={imgUrl} height={hauteur} width={longuer} />
Comments