Skip to content

Commit b25fcb9

Browse files
committed
feat(Editor): implement toggle functionality for editor pane visibility and update styles
1 parent 77d743b commit b25fcb9

File tree

5 files changed

+50
-2
lines changed

5 files changed

+50
-2
lines changed

src/components/ContentWrap.jsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -995,7 +995,7 @@ export default class ContentWrap extends Component {
995995
}
996996
onDragEnd={this.mainSplitDragEndHandler.bind(this)}
997997
>
998-
<div id="js-code-side">
998+
<div id="js-code-side" className={this.props.isEditorCollapsed ? 'hidden' : ''}>
999999
<Tabs
10001000
keyboardShortcutsBtnClickHandler={
10011001
this.props.keyboardShortcutsBtnClickHandler

src/components/Icons.jsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -330,6 +330,9 @@ export function Icons() {
330330
fill="#FDC709"
331331
/>
332332
</symbol>
333+
<symbol id="icon-sidebar" viewBox="0 0 24 24">
334+
<path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M9 3.5v17M3 9.4c0-2.24 0-3.36.436-4.216a4 4 0 0 1 1.748-1.748C6.04 3 7.16 3 9.4 3h5.2c2.24 0 3.36 0 4.216.436a4 4 0 0 1 1.748 1.748C21 6.04 21 7.16 21 9.4v5.2c0 2.24 0 3.36-.436 4.216a4 4 0 0 1-1.748 1.748C17.96 21 16.84 21 14.6 21H9.4c-2.24 0-3.36 0-4.216-.436a4 4 0 0 1-1.748-1.748C3 17.96 3 16.84 3 14.6z"/>
335+
</symbol>
333336
</symbol>
334337
</svg>
335338
);

src/components/MainHeader.jsx

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,26 @@ export function MainHeader(props) {
137137
</svg>
138138
<span>My library</span>
139139
</button>
140+
<button
141+
className={`px-4 py-1.5 bg-black-600 duration-200 font-semibold flex items-center gap-2 rounded-lg ${
142+
props.isEditorCollapsed
143+
? 'hover:opacity-80'
144+
: 'hover:bg-primary-700 text-white'
145+
}`}
146+
aria-label="Toggle editor pane"
147+
title={props.isEditorCollapsed ? "Expand editor pane" : "Collapse editor pane"}
148+
onClick={props.onToggleEditorCollapse}
149+
>
150+
<svg
151+
className={`h-5 w-5 transition-transform duration-200 ${
152+
props.currentLayoutMode === 2 ? 'rotate-90' :
153+
props.currentLayoutMode === 3 ? 'rotate-180' :
154+
'rotate-0'
155+
}`}
156+
>
157+
<use xlinkHref="#icon-sidebar" />
158+
</svg>
159+
</button>
140160
</div>
141161
<div>
142162
{isEditing ? (
@@ -243,7 +263,6 @@ export function MainHeader(props) {
243263
className="h-full w-full appearance-none"
244264
crossOrigin="anonymous"
245265
src={props.user.photoURL}
246-
className=""
247266
/>
248267
</div>
249268
{isSubscribed && (

src/components/app.jsx

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@ export default class App extends Component {
9494
title: '',
9595
externalLibs: { js: '', css: '' },
9696
},
97+
isEditorCollapsed: false,
9798
};
9899
this.defaultSettings = {
99100
preserveLastCode: true,
@@ -758,6 +759,25 @@ BookLibService.Borrow(id) {
758759
this.toggleLayout(layoutId);
759760
}
760761

762+
async toggleEditorCollapse() {
763+
await this.setState({
764+
isEditorCollapsed: !this.state.isEditorCollapsed,
765+
});
766+
767+
// Apply CSS class to body to control layout
768+
if (this.state.isEditorCollapsed) {
769+
document.body.classList.add('editor-collapsed');
770+
} else {
771+
document.body.classList.remove('editor-collapsed');
772+
}
773+
774+
mixpanel.track({
775+
event: 'toggleEditorCollapse',
776+
category: 'ui',
777+
label: this.state.isEditorCollapsed ? 'collapsed' : 'expanded',
778+
});
779+
}
780+
761781
// Calculates the sizes of html, css & js code panes.
762782
getCodePaneSizes() {
763783
var sizes;
@@ -1661,6 +1681,7 @@ BookLibService.Borrow(id) {
16611681
openCheatSheet={this.openCheatSheet.bind(this)}
16621682
onUpdateImage={this.onUpdateImage.bind(this)}
16631683
currentItem={this.state.currentItem}
1684+
currentLayoutMode={this.state.currentLayoutMode}
16641685
onLogin={this.loginBtnClickHandler.bind(this)}
16651686
externalLibCount={this.state.externalLibCount}
16661687
openBtnHandler={this.openBtnClickHandler.bind(this)}
@@ -1679,6 +1700,8 @@ BookLibService.Borrow(id) {
16791700
user={this.state.user}
16801701
settingsBtnClickHandler={this.handleSettingsBtnClick.bind(this)}
16811702
unsavedEditCount={this.state.unsavedEditCount}
1703+
isEditorCollapsed={this.state.isEditorCollapsed}
1704+
onToggleEditorCollapse={this.toggleEditorCollapse.bind(this)}
16821705
/>
16831706
)}
16841707
{this.isEmbed && (
@@ -1709,6 +1732,8 @@ BookLibService.Borrow(id) {
17091732
this,
17101733
)}
17111734
layoutBtnClickHandler={this.layoutBtnClickHandler.bind(this)}
1735+
isEditorCollapsed={this.state.isEditorCollapsed}
1736+
onToggleEditorCollapse={this.toggleEditorCollapse.bind(this)}
17121737
/>
17131738
{this.isEmbed ? null : (
17141739
<Footer

src/style.css

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -353,6 +353,7 @@ body:not(.light-version).overlay-visible .main-container {
353353
.code-side,
354354
.demo-side {
355355
flex-basis: inherit;
356+
flex-grow: 1;
356357
position: relative;
357358
width: 50%;
358359
}

0 commit comments

Comments
 (0)