diff --git a/src/@newrelic/gatsby-theme-newrelic/icons/feather.js b/src/@newrelic/gatsby-theme-newrelic/icons/feather.js index 3271f3051..8ecbc4d52 100644 --- a/src/@newrelic/gatsby-theme-newrelic/icons/feather.js +++ b/src/@newrelic/gatsby-theme-newrelic/icons/feather.js @@ -34,6 +34,21 @@ export default { /> ), + 'chevron-left': ( + <> + + + ), + 'chevron-right': ( + <> + + + ), + circle: ( + <> + + + ), clock: ( <> diff --git a/src/components/ImageSlider.js b/src/components/ImageSlider.js new file mode 100644 index 000000000..0d2f4068e --- /dev/null +++ b/src/components/ImageSlider.js @@ -0,0 +1,203 @@ +import PropTypes from 'prop-types'; +import React, { useState } from 'react'; +import { css } from '@emotion/react'; +import { Button, Icon } from '@newrelic/gatsby-theme-newrelic'; +import { Transition, animated } from 'react-spring'; + +const ImageSlider = ({ images, height }) => { + const [selectedImageIndex, setSelectedImageIndex] = useState(0); + const [forward, setForward] = useState(true); + + const handleClickNext = () => { + const nextImageIndex = selectedImageIndex + 1; + setSelectedImageIndex(nextImageIndex % images.length); + setForward(true); + }; + + const handleClickPrev = () => { + const prevImageIndex = selectedImageIndex - 1; + if (prevImageIndex < 0) { + setSelectedImageIndex(images.length - 1); + } else { + setSelectedImageIndex(prevImageIndex % images.length); + } + setForward(false); + }; + + const handleClickSpecificSlide = (indexValue) => { + setSelectedImageIndex(indexValue); + }; + + return ( +
+ {images.length > 1 && ( +
+ + +
+ )} + { + + {(styles, item) => ( + + + {`${item.split('/').slice(-1)}`} + + + )} + + } +
+
+ {images.map((_, index) => ( + + ))} +
+
+
+ ); +}; + +ImageSlider.propTypes = { + images: PropTypes.array.isRequired, + height: PropTypes.number.isRequired, +}; + +export default ImageSlider; diff --git a/src/templates/ObservabilityPackDetails.js b/src/templates/ObservabilityPackDetails.js index 05f25091b..d78beef56 100644 --- a/src/templates/ObservabilityPackDetails.js +++ b/src/templates/ObservabilityPackDetails.js @@ -14,6 +14,7 @@ import { import ImageGallery from '../components/ImageGallery'; import Intro from '../components/Intro'; import InstallButton from '../components/InstallButton'; +import ImageSlider from '../components/ImageSlider'; const ObservabilityPackDetails = ({ data, location }) => { const pack = data.observabilityPacks; @@ -134,7 +135,7 @@ const ObservabilityPackDetails = ({ data, location }) => { {pack.dashboards?.map((dashboard) => ( <>

{dashboard.name}

- + {dashboard.description && ( <>

Description

@@ -267,11 +268,8 @@ export const pageQuery = graphql` query($id: String!) { observabilityPacks(id: { eq: $id }) { name - websiteUrl - logoUrl level id - iconUrl description dashboards { description