Skip to content

Commit 91fcf3e

Browse files
committed
Extend files from previous step
1 parent 55608bf commit 91fcf3e

File tree

3 files changed

+100
-4
lines changed

3 files changed

+100
-4
lines changed

packages/scrollycoding/src/mdx-steps.tsx

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,11 +33,16 @@ function useMdxSteps(
3333
codeProps: CodeProps
3434
) {
3535
const steps: Step[] = []
36+
let prevFiles: CodeFiles = {}
37+
let prevActiveFile = ""
3638
React.Children.forEach(mdx, (child: any) => {
3739
if (child?.props?.mdxType === "StepHead") {
3840
const stepHeadProps = child?.props || {}
39-
const { files, activeFile } = getFiles(stepHeadProps)
40-
41+
const { files, activeFile } = getFiles(
42+
stepHeadProps,
43+
prevFiles,
44+
prevActiveFile
45+
)
4146
const step = {
4247
content: [],
4348
previewProps: getPreviewProps(
@@ -52,16 +57,22 @@ function useMdxSteps(
5257
),
5358
}
5459
steps.push(step)
60+
prevFiles = files
61+
prevActiveFile = activeFile
5562
} else {
5663
steps[steps.length - 1].content.push(child)
5764
}
5865
})
5966
return steps
6067
}
6168

62-
function getFiles(stepHeadProps: StepHeadProps) {
69+
function getFiles(
70+
stepHeadProps: StepHeadProps,
71+
prevFiles: CodeFiles = {},
72+
prevActiveFile: string = ""
73+
) {
6374
let activeFile = stepHeadProps.activeFile || ""
64-
const files = {} as CodeFiles
75+
const files = { ...prevFiles }
6576
React.Children.forEach(
6677
stepHeadProps.children,
6778
preElement => {
@@ -77,6 +88,9 @@ function getFiles(stepHeadProps: StepHeadProps) {
7788
}
7889
}
7990
)
91+
if (activeFile === "") {
92+
activeFile = prevActiveFile
93+
}
8094
return { files, activeFile }
8195
}
8296

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
# Hello
2+
3+
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed sed euismod libero. Quisque vehicula ante sapien, vel imperdiet ipsum tempor et. Fusce sit amet turpis ullamcorper, porta magna et, vehicula velit. Pellentesque quis dui ac lacus mollis lobortis non ut nibh. Nulla ac lorem sit amet nulla sollicitudin rhoncus. Duis aliquet sed est vitae auctor. Nullam faucibus, ipsum ut tristique efficitur, est nulla vestibulum purus, ut aliquam risus turpis sit amet nulla. Pellentesque vestibulum id ex id venenatis.
4+
5+
<Hike>
6+
7+
<StepHead>
8+
9+
```jsx Button.js
10+
export default function Button() {
11+
return <button style={{ background: "red" }}>Hey</button>
12+
}
13+
```
14+
15+
```jsx App.js
16+
import Button from "./Button"
17+
18+
export default function App() {
19+
return <Button>Hey</Button>
20+
}
21+
```
22+
23+
</StepHead>
24+
25+
## Step 1
26+
27+
Sed quis ipsum nisl. Ut eget turpis id justo lobortis molestie sed in turpis. Pellentesque maximus erat ut eleifend rutrum. Nulla lectus sem, pulvinar eu tortor at, lacinia auctor felis. Aenean semper, quam a pellentesque laoreet, ex diam vehicula urna, eget ornare nulla enim vitae massa. Nulla lacus sem, sodales non felis quis, tincidunt porta turpis. Donec suscipit vulputate purus eu elementum.
28+
29+
<CodeSlot style={{ height: 200 }} />
30+
31+
<PreviewSlot style={{ height: 200 }} />
32+
33+
Morbi mauris urna, luctus at ligula sit amet, gravida tempor
34+
libero. Curabitur convallis tincidunt est ac facilisis. Aliquam
35+
rutrum molestie vestibulum. Nunc vel lorem vel ante faucibus
36+
dictum. Morbi at neque hendrerit, maximus lacus nec, luctus lacus.
37+
Quisque tincidunt sed ante at gravida.
38+
39+
<StepHead>
40+
41+
```jsx Button.js
42+
export default function Button() {
43+
return <button style={{ background: "blue" }}>Hey</button>
44+
}
45+
```
46+
47+
</StepHead>
48+
49+
# Step 2
50+
51+
<CodeSlot style={{ height: 200 }} />
52+
53+
Nullam ut massa ut tortor pellentesque fringilla at ut massa. Nunc ut suscipit ipsum. Curabitur eu nunc lobortis, gravida sem ac, aliquet lorem. Vestibulum semper urna in erat placerat dictum. Nulla posuere odio sed accumsan accumsan. Integer aliquet lectus sit amet turpis feugiat, vel elementum velit condimentum. Proin sit amet augue rutrum, auctor risus aliquam, varius quam. Praesent turpis nunc, dictum quis placerat vel, tempor ac tortor. Aenean sollicitudin tortor efficitur, volutpat ligula id, semper lectus. Curabitur vel nibh maximus, sodales erat id, consectetur ex. Fusce convallis vitae quam vitae venenatis.
54+
55+
<StepHead focus="1" />
56+
57+
# Step 3
58+
59+
<CodeSlot style={{ height: 200 }} />
60+
61+
Nullam ut massa ut tortor pellentesque fringilla at ut massa. Nunc ut suscipit ipsum. Curabitur eu nunc lobortis, gravida sem ac, aliquet lorem. Vestibulum semper urna in erat placerat dictum. Nulla posuere odio sed accumsan accumsan. <Focus on="2" >Integer aliquet</Focus> lectus sit amet turpis feugiat, vel elementum velit condimentum. Proin sit amet augue rutrum, auctor risus aliquam, varius quam. Praesent turpis nunc, dictum quis placerat vel, tempor ac tortor. <Focus on="3" >Aenean `sollicitudin`</Focus> tortor efficitur, volutpat ligula id, semper lectus. Curabitur vel nibh maximus, sodales erat id, consectetur ex. Fusce convallis vitae quam vitae venenatis.
62+
63+
</Hike>
64+
65+
# Goodbye
66+
67+
Integer porta tincidunt dolor ut consequat. Ut eu justo viverra, condimentum massa vel, varius neque. Curabitur lectus nibh, semper in arcu ac, sagittis fermentum lectus. Vivamus quis purus odio. Nullam placerat, lorem non condimentum vehicula, erat turpis lacinia tortor, quis vulputate metus ipsum sit amet nunc. Integer gravida hendrerit massa. Aenean condimentum ac ante in tincidunt. Duis auctor dictum eleifend. Ut sed nisl iaculis, imperdiet dui in, porttitor mi. Sed quis lorem ac dolor efficitur egestas quis eu magna. Quisque dignissim accumsan pulvinar. Curabitur sit amet lacus dictum purus rutrum volutpat. Interdum et malesuada fames ac ante ipsum primis in faucibus. Duis mattis condimentum porttitor. Donec id risus eu tortor elementum volutpat. Morbi vel diam eget velit bibendum consequat.

packages/storybook/src/scrollycoding.story.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import {
1111
import "@code-hike/scrollycoding/dist/index.css"
1212
import Basic from "./assets/scrollycoding.basic.mdx"
1313
import WithDeps from "./assets/scrollycoding.deps.mdx"
14+
import RepeatedSteps from "./assets/scrollycoding.repeat.mdx"
1415
import { MDXProvider } from "@mdx-js/react"
1516

1617
export default {
@@ -46,6 +47,20 @@ export function withDeps() {
4647
)
4748
}
4849

50+
export function repeatedSteps() {
51+
return (
52+
<Page
53+
style={{
54+
maxWidth: 800,
55+
}}
56+
>
57+
<MDXProvider components={components}>
58+
<RepeatedSteps />
59+
</MDXProvider>
60+
</Page>
61+
)
62+
}
63+
4964
const components = {
5065
Hike,
5166
StepHead,

0 commit comments

Comments
 (0)