From a45299277c3fcf10c965802a58afb07fff9b103c Mon Sep 17 00:00:00 2001 From: rayangler <27821750+rayangler@users.noreply.github.com> Date: Fri, 13 Sep 2024 15:51:20 -0400 Subject: [PATCH 1/5] DOP-4689: Implement multi-page tutorials (#1225) Co-authored-by: Caesar Bell --- src/components/Contents/index.js | 16 +- src/components/DocumentBody.js | 2 +- src/components/Heading.js | 17 +- src/components/Internal/Overline.js | 21 + src/components/InternalPageNav.js | 122 -- .../InternalPageNav/InternalPageNav.js | 110 ++ .../InternalPageNav/NextPrevLink.js | 86 + src/components/InternalPageNav/index.js | 3 + src/components/InternalPageNav/styles.js | 12 + src/components/Kicker.js | 19 +- .../MultiPageTutorials/MPTNextLinkFull.js | 42 + .../MultiPageTutorials/MPTNextLinkMini.js | 52 + .../MultiPageTutorials/StepNumber.js | 35 + .../MultiPageTutorials/TimeRequired.js | 31 + .../MultiPageTutorials/constants.js | 4 + .../hooks/use-active-mp-tutorial.js | 47 + .../hooks/use-mpt-page-options.js | 10 + .../hooks/use-should-show-next.js | 11 + src/components/MultiPageTutorials/index.js | 3 + src/components/MultiPageTutorials/utils.js | 8 + src/context/page-context.js | 1 + src/templates/document.js | 7 +- tests/unit/InternalPageNav.test.js | 69 +- tests/unit/MultiPageTutorials.test.js | 111 ++ .../InternalPageNav.test.js.snap | 1619 +++++++++++++++-- .../unit/data/ecosystem/slugTitleMapping.json | 585 ------ .../data/ecosystem/slugToBreadcrumbLabel.json | 55 + 27 files changed, 2160 insertions(+), 938 deletions(-) create mode 100644 src/components/Internal/Overline.js delete mode 100644 src/components/InternalPageNav.js create mode 100644 src/components/InternalPageNav/InternalPageNav.js create mode 100644 src/components/InternalPageNav/NextPrevLink.js create mode 100644 src/components/InternalPageNav/index.js create mode 100644 src/components/InternalPageNav/styles.js create mode 100644 src/components/MultiPageTutorials/MPTNextLinkFull.js create mode 100644 src/components/MultiPageTutorials/MPTNextLinkMini.js create mode 100644 src/components/MultiPageTutorials/StepNumber.js create mode 100644 src/components/MultiPageTutorials/TimeRequired.js create mode 100644 src/components/MultiPageTutorials/constants.js create mode 100644 src/components/MultiPageTutorials/hooks/use-active-mp-tutorial.js create mode 100644 src/components/MultiPageTutorials/hooks/use-mpt-page-options.js create mode 100644 src/components/MultiPageTutorials/hooks/use-should-show-next.js create mode 100644 src/components/MultiPageTutorials/index.js create mode 100644 src/components/MultiPageTutorials/utils.js create mode 100644 tests/unit/MultiPageTutorials.test.js delete mode 100644 tests/unit/data/ecosystem/slugTitleMapping.json create mode 100644 tests/unit/data/ecosystem/slugToBreadcrumbLabel.json diff --git a/src/components/Contents/index.js b/src/components/Contents/index.js index eab245b06..16069545e 100644 --- a/src/components/Contents/index.js +++ b/src/components/Contents/index.js @@ -1,23 +1,15 @@ import React, { useContext } from 'react'; import PropTypes from 'prop-types'; -import styled from '@emotion/styled'; -import { theme } from '../../theme/docsTheme'; import { formatText } from '../../utils/format-text'; import { ContentsContext } from './contents-context'; import ContentsList from './ContentsList'; import ContentsListItem from './ContentsListItem'; -const StyledContents = styled('div')` - @media ${theme.screenSize.largeAndUp} { - display: ${(props) => (props.displayOnDesktopOnly ? '' : 'none')}; - } -`; - const formatTextOptions = { literalEnableInline: true, }; -const Contents = ({ displayOnDesktopOnly }) => { +const Contents = ({ className }) => { const { activeHeadingId, headingNodes, showContentsComponent } = useContext(ContentsContext); if (headingNodes.length === 0 || !showContentsComponent) { @@ -27,7 +19,7 @@ const Contents = ({ displayOnDesktopOnly }) => { const label = 'On this page'; return ( - +
{headingNodes.map(({ depth, id, title }) => { // Depth of heading nodes refers to their depth in the AST @@ -39,12 +31,12 @@ const Contents = ({ displayOnDesktopOnly }) => { ); })} - +
); }; Contents.propTypes = { - displayOnDesktopOnly: PropTypes.bool, + className: PropTypes.string, }; export default Contents; diff --git a/src/components/DocumentBody.js b/src/components/DocumentBody.js index 7d7c78f8c..aced08aea 100644 --- a/src/components/DocumentBody.js +++ b/src/components/DocumentBody.js @@ -150,7 +150,7 @@ const DocumentBody = (props) => { > - +