Skip to content

Commit b164cba

Browse files
authored
Fix side menu blinking on refresh (#82)
1 parent 30ee714 commit b164cba

File tree

6 files changed

+67
-3
lines changed

6 files changed

+67
-3
lines changed

templates/react/application/src/components/side-navigation-menu/side-navigation-menu.js

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ class SideNavigationMenu extends React.Component {
1111
children,
1212
selectedItemChanged,
1313
selectedItem,
14+
onMenuReady,
1415
...rest
1516
} = this.props;
1617
return (
@@ -26,7 +27,7 @@ class SideNavigationMenu extends React.Component {
2627
{...rest}
2728
onInitialized={this.onMenuInitialized}
2829
onItemClick={selectedItemChanged}
29-
onContentReady={this.updateSelection}
30+
onContentReady={this.onTreeViewReady}
3031
onSelectionChanged={this.updateSelection}
3132
selectByClick
3233
selectionMode={'single'}
@@ -91,6 +92,11 @@ class SideNavigationMenu extends React.Component {
9192
}
9293
}
9394
}
95+
96+
onTreeViewReady = (...args) => {
97+
this.props.onMenuReady && this.props.onMenuReady(...args);
98+
this.updateSelection(...args);
99+
}
94100
}
95101

96102
export default SideNavigationMenu;

templates/react/application/src/components/side-navigation-menu/side-navigation-menu.scss

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,3 +87,8 @@
8787
// ##
8888
}
8989
}
90+
91+
.dx-drawer-overlap.pre-init-blink-fix {
92+
@import "../../utils/patches.scss";
93+
@include menu-pre-init-patch;
94+
}

templates/react/application/src/layouts/side-nav-inner-toolbar/side-nav-inner-toolbar.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import { Header, SideNavigationMenu, Footer } from '../../components';
77
import './side-nav-inner-toolbar.scss';
88
import { sizes, subscribe, unsubscribe } from '../../utils/media-query';
99
import { Template } from 'devextreme-react/core/template';
10+
import { menuPreInitPatch } from '../../utils/patches';
1011

1112
class SideNavInnerToolbar extends React.Component {
1213
constructor(props) {
@@ -17,6 +18,8 @@ class SideNavInnerToolbar extends React.Component {
1718
temporaryMenuOpened: false,
1819
...this.drawerConfig
1920
};
21+
22+
this.menuPatch = menuPreInitPatch(this);
2023
}
2124

2225
render() {
@@ -32,7 +35,7 @@ class SideNavInnerToolbar extends React.Component {
3235
return (
3336
<div className={'side-nav-inner-toolbar'}>
3437
<Drawer
35-
className={'drawer'}
38+
className={'drawer' + this.menuPatch.cssClass}
3639
position={'before'}
3740
closeOnOutsideClick={this.closeDrawer}
3841
openedStateMode={menuMode}
@@ -69,6 +72,7 @@ class SideNavInnerToolbar extends React.Component {
6972
className={'dx-swatch-additional'}
7073
selectedItemChanged={this.navigationChanged}
7174
openMenu={this.navigationClick}
75+
onMenuReady={this.menuPatch.onReady}
7276
>
7377
<Toolbar id={'navigation-header'}>
7478
<Item

templates/react/application/src/layouts/side-nav-outer-toolbar/side-nav-outer-toolbar.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import { Header, SideNavigationMenu, Footer } from '../../components';
66
import './side-nav-outer-toolbar.scss';
77
import { sizes, subscribe, unsubscribe } from '../../utils/media-query';
88
import { Template } from 'devextreme-react/core/template';
9+
import { menuPreInitPatch } from '../../utils/patches';
910

1011
class SideNavOuterToolbar extends React.Component {
1112
constructor(props) {
@@ -16,6 +17,8 @@ class SideNavOuterToolbar extends React.Component {
1617
temporaryMenuOpened: false,
1718
...this.drawerConfig
1819
};
20+
21+
this.menuPatch = menuPreInitPatch(this);
1922
}
2023

2124
render() {
@@ -41,7 +44,7 @@ class SideNavOuterToolbar extends React.Component {
4144
/>
4245

4346
<Drawer
44-
className={'layout-body'}
47+
className={'layout-body' + this.menuPatch.cssClass}
4548
position={'before'}
4649
closeOnOutsideClick={this.closeDrawer}
4750
openedStateMode={menuMode}
@@ -71,6 +74,7 @@ class SideNavOuterToolbar extends React.Component {
7174
className={'dx-swatch-additional'}
7275
selectedItemChanged={this.navigationChanged}
7376
openMenu={this.navigationClick}
77+
onMenuReady={this.menuPatch.onReady}
7478
/>
7579
</Template>
7680
</Drawer>
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
export function menuPreInitPatch(component) {
2+
const menuOpened = component.state.menuOpened;
3+
component.state.preInitCssFix = true;
4+
return {
5+
get cssClass() {
6+
if (menuOpened) {
7+
return "";
8+
}
9+
10+
return (component.state.preInitCssFix ? " pre-init-blink-fix" : "");
11+
},
12+
13+
onReady() {
14+
if (menuOpened) {
15+
return;
16+
}
17+
18+
setTimeout(() => {
19+
component.setState({ preInitCssFix: false });
20+
});
21+
}
22+
};
23+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
@import "../../themes/generated/variables.additional.scss";
2+
3+
@mixin menu-pre-init-patch {
4+
$menuMinSize: 60px;
5+
6+
.dx-drawer-content {
7+
padding-left: $menuMinSize;
8+
}
9+
10+
.dx-drawer-panel-content.dx-overlay::before {
11+
content: "";
12+
width: $menuMinSize;
13+
height: 100%;
14+
display: inline-block;
15+
position: absolute;
16+
background-color: $base-bg;
17+
}
18+
19+
.dx-overlay-content {
20+
width: $menuMinSize !important;
21+
}
22+
}

0 commit comments

Comments
 (0)