@@ -2,10 +2,9 @@ import { EditorStep } from "../mini-editor"
2
2
import { isEditorNode , mapAnyCodeNode } from "./code"
3
3
import { reduceStep } from "./code-files-reducer"
4
4
import { CodeHikeConfig } from "./config"
5
- import { SuperNode } from "./nodes"
5
+ import { JsxNode , SuperNode } from "./nodes"
6
6
7
7
// extract step info
8
-
9
8
export async function extractStepsInfo (
10
9
parent : SuperNode ,
11
10
config : CodeHikeConfig ,
@@ -15,6 +14,7 @@ export async function extractStepsInfo(
15
14
) {
16
15
const steps = [ ] as {
17
16
editorStep ?: EditorStep
17
+ previewStep ?: JsxNode
18
18
children : SuperNode [ ]
19
19
} [ ]
20
20
@@ -29,6 +29,7 @@ export async function extractStepsInfo(
29
29
30
30
steps [ stepIndex ] = steps [ stepIndex ] || { children : [ ] }
31
31
const step = steps [ stepIndex ]
32
+
32
33
if ( ! step . editorStep && isEditorNode ( child , config ) ) {
33
34
const editorStep = await mapAnyCodeNode (
34
35
{ node : child , parent, index : i } ,
@@ -53,6 +54,13 @@ export async function extractStepsInfo(
53
54
filter
54
55
)
55
56
}
57
+ } else if (
58
+ child . type === "mdxJsxFlowElement" &&
59
+ child . name === "CH.Preview" &&
60
+ // only add the preview if we have a preview in step 0
61
+ ( stepIndex === 0 || steps [ 0 ] . previewStep != null )
62
+ ) {
63
+ step . previewStep = child
56
64
} else {
57
65
step . children . push ( child )
58
66
}
@@ -66,7 +74,27 @@ export async function extractStepsInfo(
66
74
}
67
75
} )
68
76
69
- return steps . map ( step => step . editorStep )
77
+ const hasPreviewSteps = steps [ 0 ] . previewStep !== undefined
78
+ // if there is a CH.Preview in the first step
79
+ // build the previewStep list
80
+ if ( hasPreviewSteps ) {
81
+ const previewSteps = steps . map ( step => step . previewStep )
82
+ // fill empties with previous step
83
+ previewSteps . forEach ( ( previewStep , i ) => {
84
+ if ( ! previewStep ) {
85
+ previewSteps [ i ] =
86
+ merge === "merge steps with header"
87
+ ? previewSteps [ 0 ]
88
+ : previewSteps [ i - 1 ]
89
+ }
90
+ } )
91
+ parent . children = parent . children . concat ( previewSteps )
92
+ }
93
+
94
+ return {
95
+ editorSteps : steps . map ( step => step . editorStep ) ,
96
+ hasPreviewSteps,
97
+ }
70
98
}
71
99
72
100
/**
0 commit comments