@@ -17,6 +17,8 @@ import { editor } from 'monaco-editor';
1717import ButtonGroup from 'antd/lib/button/button-group' ;
1818import { VerticalSplit , ViewHeadline } from '@mui/icons-material' ;
1919import useChangeValueStateHandler from '../../hooks/useChangeValueStateHandler' ;
20+ import Split from 'react-split' ;
21+ import './HtmlEditorPage.scss' ;
2022
2123enum EditorTab {
2224 HTML = 'html' ,
@@ -126,113 +128,124 @@ ${sources.js}
126128 emmetJSX ( monaco ) ;
127129 } , [ ] ) ;
128130
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+ ) ;
134225
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+ ) ;
140235
141236 return (
142237 < 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+ ) }
236249 </ PageContainer >
237250 ) ;
238251} ;
0 commit comments