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) => (
+
+
+
+
+
+ )}
+
+ }
+
+
+ {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