1
1
<script setup lang="ts">
2
2
import Preview from ' ./Preview.vue'
3
- import { computed , inject , useTemplateRef } from ' vue'
3
+ import SsrOutput from ' ./SsrOutput.vue'
4
+ import { computed , inject , useTemplateRef , watchEffect } from ' vue'
4
5
import {
5
6
type EditorComponentType ,
6
7
type OutputModes ,
@@ -10,27 +11,32 @@ import {
10
11
const props = defineProps <{
11
12
editorComponent: EditorComponentType
12
13
showCompileOutput? : boolean
14
+ showSsrOutput? : boolean
13
15
ssr: boolean
14
16
}>()
15
17
16
18
const { store } = inject (injectKeyProps )!
17
19
const previewRef = useTemplateRef (' preview' )
18
- const modes = computed (() =>
19
- props .showCompileOutput
20
- ? ([' preview' , ' js' , ' css' , ' ssr' ] as const )
21
- : ([' preview' ] as const ),
22
- )
20
+ const modes = computed (() => {
21
+ const outputModes: OutputModes [] = [' preview' ]
22
+ if (props .showCompileOutput ) {
23
+ outputModes .push (' js' , ' css' , ' ssr' )
24
+ }
25
+ if (props .ssr && props .showSsrOutput ) {
26
+ outputModes .push (' ssr output' )
27
+ }
28
+ return outputModes
29
+ })
23
30
24
31
const mode = computed <OutputModes >({
25
- get : () =>
26
- (modes .value as readonly string []).includes (store .value .outputMode )
27
- ? store .value .outputMode
28
- : ' preview' ,
29
- set(value ) {
30
- if ((modes .value as readonly string []).includes (store .value .outputMode )) {
31
- store .value .outputMode = value
32
- }
33
- },
32
+ get : () => store .value .outputMode ,
33
+ set : (value ) => (store .value .outputMode = value ),
34
+ })
35
+
36
+ watchEffect (() => {
37
+ if (! modes .value .includes (mode .value )) {
38
+ mode .value = modes .value [0 ]
39
+ }
34
40
})
35
41
36
42
function reload() {
@@ -54,8 +60,13 @@ defineExpose({ reload, previewRef })
54
60
55
61
<div class =" output-container" >
56
62
<Preview ref =" preview" :show =" mode === 'preview'" :ssr =" ssr" />
63
+ <SsrOutput
64
+ v-if =" mode === 'ssr output'"
65
+ :context =" store.ssrOutput.context"
66
+ :html =" store.ssrOutput.html"
67
+ />
57
68
<props .editorComponent
58
- v-if =" mode !== 'preview'"
69
+ v-else- if =" mode !== 'preview'"
59
70
readonly
60
71
:filename =" store.activeFile.filename"
61
72
:value =" store.activeFile.compiled[mode]"
0 commit comments