diff --git a/src/components/PackGrid.js b/src/components/PackGrid.js
new file mode 100644
index 000000000..e0a3f5983
--- /dev/null
+++ b/src/components/PackGrid.js
@@ -0,0 +1,33 @@
+import React from 'react';
+import { css } from '@emotion/react';
+import PropTypes from 'prop-types';
+
+const PackGrid = ({ children, className }) => {
+ return (
+
{children}
diff --git a/src/components/PackListTile.js b/src/components/PackListTile.js
new file mode 100644
index 000000000..2e9449c00
--- /dev/null
+++ b/src/components/PackListTile.js
@@ -0,0 +1,120 @@
+import React from 'react';
+import PropTypes from 'prop-types';
+import { css } from '@emotion/react';
+import { Link, Icon, Surface } from '@newrelic/gatsby-theme-newrelic';
+
+const PackListTile = ({
+ name,
+ description,
+ featuredImageUrl,
+ supportLevel,
+ to,
+ className,
+}) => (
+
+
+
+ {featuredImageUrl && (
+
![Preview of the pack in action]({featuredImageUrl})
+ )}
+
+
+
+
+ {name}{' '}
+ {supportLevel === 'NEWRELIC' && (
+
+
+
+ )}
+
+
+
+ {description}
+
+
+
+
+);
+
+PackListTile.propTypes = {
+ name: PropTypes.string.isRequired,
+ description: PropTypes.string.isRequired,
+ featuredImageUrl: PropTypes.string,
+ supportLevel: PropTypes.string,
+ to: PropTypes.string.isRequired,
+ className: PropTypes.string,
+};
+
+export default PackListTile;
diff --git a/src/pages/observability-packs.js b/src/pages/observability-packs.js
index 790e1cd00..6aa2e2966 100644
--- a/src/pages/observability-packs.js
+++ b/src/pages/observability-packs.js
@@ -3,7 +3,9 @@ import { graphql } from 'gatsby';
import React, { useState, useEffect } from 'react';
import DevSiteSeo from '../components/DevSiteSeo';
import { css } from '@emotion/react';
-import PackTile from '../components/PackTile';
+import PackGrid from '../components/PackGrid';
+import PackGridTile from '../components/PackGridTile';
+import PackListTile from '../components/PackListTile';
import PackList from '../components/PackList';
import { SearchInput, Button, Dropdown } from '@newrelic/gatsby-theme-newrelic';
import { useQueryParam, StringParam } from 'use-query-params';
@@ -34,6 +36,11 @@ const ObservabilityPacksPage = ({ data, location }) => {
}
}, [querySearch, queryFilter, querySort]);
+ const [packView, setPackView] = useState('GRID_VIEW');
+
+ useEffect(() => {
+ setPackView(packView);
+ }, [packView]);
useEffect(() => {
let tempFilteredPacks = o11yPacks.filter(
(pack) =>
@@ -239,30 +246,72 @@ const ObservabilityPacksPage = ({ data, location }) => {