@@ -17,6 +17,8 @@ import { editor } from 'monaco-editor';
17
17
import ButtonGroup from 'antd/lib/button/button-group' ;
18
18
import { VerticalSplit , ViewHeadline } from '@mui/icons-material' ;
19
19
import useChangeValueStateHandler from '../../hooks/useChangeValueStateHandler' ;
20
+ import Split from 'react-split' ;
21
+ import './HtmlEditorPage.scss' ;
20
22
21
23
enum EditorTab {
22
24
HTML = 'html' ,
@@ -126,113 +128,124 @@ ${sources.js}
126
128
emmetJSX ( monaco ) ;
127
129
} , [ ] ) ;
128
130
129
- const leftColSpan = {
130
- [ ViewMode . EDITOR ] : 24 ,
131
- [ ViewMode . SPLIT ] : 12 ,
132
- [ ViewMode . VIEW ] : 0
133
- } [ viewMode ] ;
131
+ // const leftColSpan = {
132
+ // [ViewMode.EDITOR]: 24,
133
+ // [ViewMode.SPLIT]: 12,
134
+ // [ViewMode.VIEW]: 0
135
+ // }[viewMode];
136
+ //
137
+ // const rightColSpan = {
138
+ // [ViewMode.EDITOR]: 0,
139
+ // [ViewMode.SPLIT]: 12,
140
+ // [ViewMode.VIEW]: 24
141
+ // }[viewMode];
142
+
143
+ const leftCol = (
144
+ < Col className = { classNames ( styles . col , styles . leftCol , { 'd-none' : viewMode === ViewMode . VIEW } ) } >
145
+ < Tabs
146
+ activeKey = { editorTab }
147
+ onChange = { handleEditorTabChange }
148
+ tabBarStyle = { tabBarStyle }
149
+ className = { styles . editorTabs }
150
+ tabBarGutter = { 10 }
151
+ tabBarExtraContent = {
152
+ < ButtonGroup >
153
+ < Button
154
+ type = "text"
155
+ icon = { < ViewHeadline /> }
156
+ className = { classNames ( { 'antd-text-primary' : viewMode === ViewMode . EDITOR } ) }
157
+ onClick = { handleViewModeChange ( ViewMode . EDITOR ) }
158
+ />
159
+ < Button
160
+ type = "text"
161
+ icon = { < VerticalSplit /> }
162
+ className = { classNames ( { 'antd-text-primary' : viewMode === ViewMode . SPLIT } ) }
163
+ onClick = { handleViewModeChange ( ViewMode . SPLIT ) }
164
+ />
165
+ </ ButtonGroup >
166
+ }
167
+ >
168
+ < Tabs . TabPane
169
+ tab = {
170
+ < div className = { styles . tabTitleWrapper } >
171
+ < Html className = { styles . tabTitle } />
172
+ </ div >
173
+ }
174
+ key = { EditorTab . HTML }
175
+ className = { styles . editorTab }
176
+ >
177
+ < AppEditor
178
+ value = { sources . html }
179
+ onChange = { handleSourceChange ( EditorTab . HTML ) }
180
+ className = { styles . editor }
181
+ language = "html"
182
+ onMount = { handleEditorMount }
183
+ options = { editorOptions }
184
+ />
185
+ </ Tabs . TabPane >
186
+ < Tabs . TabPane
187
+ tab = {
188
+ < div className = { styles . tabTitleWrapper } >
189
+ < Css className = { styles . tabTitle } />
190
+ </ div >
191
+ }
192
+ key = { EditorTab . CSS }
193
+ className = { styles . editorTab }
194
+ >
195
+ < AppEditor
196
+ value = { sources . css }
197
+ onChange = { handleSourceChange ( EditorTab . CSS ) }
198
+ className = { styles . editor }
199
+ language = "css"
200
+ onMount = { handleEditorMount }
201
+ options = { editorOptions }
202
+ />
203
+ </ Tabs . TabPane >
204
+ < Tabs . TabPane
205
+ tab = {
206
+ < div className = { styles . tabTitleWrapper } >
207
+ < Javascript className = { styles . tabTitle } />
208
+ </ div >
209
+ }
210
+ key = { EditorTab . JS }
211
+ className = { styles . editorTab }
212
+ >
213
+ < AppEditor
214
+ value = { sources . js }
215
+ onChange = { handleSourceChange ( EditorTab . JS ) }
216
+ className = { styles . editor }
217
+ language = "javascript"
218
+ onMount = { handleEditorMount }
219
+ options = { editorOptions }
220
+ />
221
+ </ Tabs . TabPane >
222
+ </ Tabs >
223
+ </ Col >
224
+ ) ;
134
225
135
- const rightColSpan = {
136
- [ ViewMode . EDITOR ] : 0 ,
137
- [ ViewMode . SPLIT ] : 12 ,
138
- [ ViewMode . VIEW ] : 24
139
- } [ viewMode ] ;
226
+ const rightCol = (
227
+ < Col
228
+ className = { classNames ( 'yui3-cssreset' , styles . col , styles . rightCol , {
229
+ 'd-none' : viewMode === ViewMode . EDITOR
230
+ } ) }
231
+ >
232
+ < iframe srcDoc = { resultSource } className = { styles . resultFrame } />
233
+ </ Col >
234
+ ) ;
140
235
141
236
return (
142
237
< PageContainer noPadding className = { styles . container } >
143
- < Row className = { styles . containerRow } >
144
- < Col
145
- span = { leftColSpan }
146
- className = { classNames ( styles . col , styles . leftCol , { 'd-none' : viewMode === ViewMode . VIEW } ) }
147
- >
148
- < Tabs
149
- activeKey = { editorTab }
150
- onChange = { handleEditorTabChange }
151
- tabBarStyle = { tabBarStyle }
152
- className = { styles . editorTabs }
153
- tabBarGutter = { 10 }
154
- tabBarExtraContent = {
155
- < ButtonGroup >
156
- < Button
157
- type = "text"
158
- icon = { < ViewHeadline /> }
159
- className = { classNames ( { 'antd-text-primary' : viewMode === ViewMode . EDITOR } ) }
160
- onClick = { handleViewModeChange ( ViewMode . EDITOR ) }
161
- />
162
- < Button
163
- type = "text"
164
- icon = { < VerticalSplit /> }
165
- className = { classNames ( { 'antd-text-primary' : viewMode === ViewMode . SPLIT } ) }
166
- onClick = { handleViewModeChange ( ViewMode . SPLIT ) }
167
- />
168
- </ ButtonGroup >
169
- }
170
- >
171
- < Tabs . TabPane
172
- tab = {
173
- < div className = { styles . tabTitleWrapper } >
174
- < Html className = { styles . tabTitle } />
175
- </ div >
176
- }
177
- key = { EditorTab . HTML }
178
- className = { styles . editorTab }
179
- >
180
- < AppEditor
181
- value = { sources . html }
182
- onChange = { handleSourceChange ( EditorTab . HTML ) }
183
- className = { styles . editor }
184
- language = "html"
185
- onMount = { handleEditorMount }
186
- options = { editorOptions }
187
- />
188
- </ Tabs . TabPane >
189
- < Tabs . TabPane
190
- tab = {
191
- < div className = { styles . tabTitleWrapper } >
192
- < Css className = { styles . tabTitle } />
193
- </ div >
194
- }
195
- key = { EditorTab . CSS }
196
- className = { styles . editorTab }
197
- >
198
- < AppEditor
199
- value = { sources . css }
200
- onChange = { handleSourceChange ( EditorTab . CSS ) }
201
- className = { styles . editor }
202
- language = "css"
203
- onMount = { handleEditorMount }
204
- options = { editorOptions }
205
- />
206
- </ Tabs . TabPane >
207
- < Tabs . TabPane
208
- tab = {
209
- < div className = { styles . tabTitleWrapper } >
210
- < Javascript className = { styles . tabTitle } />
211
- </ div >
212
- }
213
- key = { EditorTab . JS }
214
- className = { styles . editorTab }
215
- >
216
- < AppEditor
217
- value = { sources . js }
218
- onChange = { handleSourceChange ( EditorTab . JS ) }
219
- className = { styles . editor }
220
- language = "javascript"
221
- onMount = { handleEditorMount }
222
- options = { editorOptions }
223
- />
224
- </ Tabs . TabPane >
225
- </ Tabs >
226
- </ Col >
227
- < Col
228
- span = { rightColSpan }
229
- className = { classNames ( 'yui3-cssreset' , styles . col , styles . rightCol , {
230
- 'd-none' : viewMode === ViewMode . EDITOR
231
- } ) }
232
- >
233
- < iframe srcDoc = { resultSource } className = { styles . resultFrame } />
234
- </ Col >
235
- </ Row >
238
+ { viewMode === ViewMode . SPLIT ? (
239
+ < Split className = { styles . containerRow } direction = "horizontal" minSize = { 0 } snapOffset = { 25 } >
240
+ { leftCol }
241
+ { rightCol }
242
+ </ Split >
243
+ ) : (
244
+ < Row className = { styles . containerRow } >
245
+ { viewMode === ViewMode . EDITOR && leftCol }
246
+ { viewMode === ViewMode . VIEW && rightCol }
247
+ </ Row >
248
+ ) }
236
249
</ PageContainer >
237
250
) ;
238
251
} ;
0 commit comments