From b56876f90717d726ccef226923ce122a74146e1a Mon Sep 17 00:00:00 2001 From: Zack Stickles Date: Thu, 19 Aug 2021 15:14:46 -0700 Subject: [PATCH] chore: type definitions for packs --- src/data/constants.js | 6 ++++ src/templates/ObservabilityPackDetails.js | 27 ++++++++++++++--- src/types.js | 37 +++++++++++++++++++++++ 3 files changed, 66 insertions(+), 4 deletions(-) diff --git a/src/data/constants.js b/src/data/constants.js index 997c47996..bb1d72b63 100644 --- a/src/data/constants.js +++ b/src/data/constants.js @@ -19,3 +19,9 @@ export const NR1_BASE_URL = 'https://staging-one.newrelic.com'; export const NR1_PACK_DETAILS_NERDLET = 'catalog-pack-details.catalog-pack-contents'; + +export const QUICKSTART_SUPPORT_LEVELS = { + NEWRELIC: 'NEWRELIC', + VERIFIED: 'VERIFIED', + COMMUNITY: 'COMMUNITY', +}; diff --git a/src/templates/ObservabilityPackDetails.js b/src/templates/ObservabilityPackDetails.js index 7fa0b5bb0..a8b607b6c 100644 --- a/src/templates/ObservabilityPackDetails.js +++ b/src/templates/ObservabilityPackDetails.js @@ -21,6 +21,8 @@ import ImageSlider from '../components/ImageSlider'; import getPackUrl from '../utils/get-pack-url'; import Markdown from '../components/Markdown'; import pluralize from 'pluralize'; +import { quickstart } from '../types'; +import { QUICKSTART_SUPPORT_LEVELS } from '../data/constants'; const allowedElements = [ 'h1', @@ -39,20 +41,23 @@ const allowedElements = [ ]; const SUPPORT_CONTENT = { - NEWRELIC: { + [QUICKSTART_SUPPORT_LEVELS.NEWRELIC]: { title: 'Built by New Relic', content: `Need help? [Visit our Support Center](https://support.newrelic.com) or check out our community forum, [the Explorers Hub](https://discuss.newrelic.com).`, }, - VERIFIED: { + [QUICKSTART_SUPPORT_LEVELS.VERIFIED]: { title: 'Verified by New Relic', content: `Need help? [Visit our Support Center](https://support.newrelic.com) or check out our community forum, [the Explorers Hub](https://discuss.newrelic.com).`, }, - COMMUNITY: { + [QUICKSTART_SUPPORT_LEVELS.COMMUNITY]: { title: 'Built by the community', content: `Need help? Visit our community forum, [the Explorers Hub](https://discuss.newrelic.com) to find an answer or post a question.`, }, }; +/** + * @param {quickstart} pack + */ const renderDashboards = (pack) => { const content = pack.dashboards.map((dashboard, index) => ( <> @@ -84,6 +89,9 @@ const renderDashboards = (pack) => { ); }; +/** + * @param {quickstart} pack + */ const renderAlerts = (pack) => { const alertContent = pack.alerts.map((alert, index) => ( <> @@ -115,6 +123,10 @@ const renderAlerts = (pack) => { ); }; +/** + * @param {quickstart} pack + * @param {String} tabName + */ const emptyStateContent = (pack, tabName) => { return (
{ ); }; +/** + * @param {Object} props + * @param {{ observabilityPacks: quickstart }} props.data + * @param {String} props.location + */ const ObservabilityPackDetails = ({ data, location }) => { const pack = data.observabilityPacks; const tessen = useTessen(); @@ -341,7 +358,9 @@ const ObservabilityPackDetails = ({ data, location }) => { }; ObservabilityPackDetails.propTypes = { - data: PropTypes.object, + data: PropTypes.shape({ + observabilityPacks: quickstart, + }), location: PropTypes.object.isRequired, }; diff --git a/src/types.js b/src/types.js index 845978f8a..9b070947d 100644 --- a/src/types.js +++ b/src/types.js @@ -1,4 +1,5 @@ import PropTypes from 'prop-types'; +import { QUICKSTART_SUPPORT_LEVELS } from './data/constants'; // NOTE: while creating a recursive data structure is feasible, // it is not very performant. @@ -12,3 +13,39 @@ export const link = PropTypes.shape({ export const pageContext = PropTypes.shape({ fileRelativePath: PropTypes.string, }); + +export const quickstartDashboard = PropTypes.shape({ + name: PropTypes.string.isRequired, + url: PropTypes.string.isRequired, + description: PropTypes.string.isRequired, + screenshots: PropTypes.arrayOf(PropTypes.string), +}); + +export const quickstartAlert = PropTypes.shape({ + name: PropTypes.string.isRequired, + url: PropTypes.string.isRequired, + type: PropTypes.oneOf(['BASELINE', 'OUTLIER', 'STATIC']).isRequired, + details: PropTypes.string, +}); + +export const quickstartDocumentation = PropTypes.shape({ + name: PropTypes.string.isRequired, + url: PropTypes.string.isRequired, + description: PropTypes.string, +}); + +export const quickstart = PropTypes.shape({ + id: PropTypes.string.isRequired, + name: PropTypes.string.isRequired, + level: PropTypes.oneOf(QUICKSTART_SUPPORT_LEVELS).isRequired, + description: PropTypes.string.isRequired, + authors: PropTypes.arrayOf(PropTypes.string).isRequired, + summary: PropTypes.string, + iconUrl: PropTypes.string, + logoUrl: PropTypes.string, + websiteUrl: PropTypes.string, + tags: PropTypes.arrayOf(PropTypes.string), + dashboards: PropTypes.arrayOf(quickstartDashboard), + alerts: PropTypes.arrayOf(quickstartAlert), + documentation: PropTypes.arrayOf(quickstartDocumentation), +});