This is an automated email from the ASF dual-hosted git repository.
zhongjiajie pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/dolphinscheduler-website.git
The following commit(s) were added to refs/heads/master by this push:
new 6847ea4 Fix missing sidebar issue (#616)
6847ea4 is described below
commit 6847ea42018e693a48dbfa9306c53111a660a3e9
Author: wangyizhi <[email protected]>
AuthorDate: Thu Dec 30 18:18:25 2021 +0800
Fix missing sidebar issue (#616)
* Fix missing sidebar issue
* Fix code smell
Co-authored-by: wangyizhi1 <[email protected]>
---
src/components/header/index.jsx | 70 ++---------------------
src/components/md2html/index.scss | 3 +-
src/components/mobileMenu/index.jsx | 109 ++++++++++++++++++++++++++++++++++++
src/components/sidemenu/index.scss | 49 ++++++++++++----
src/pages/home/index.jsx | 1 -
5 files changed, 154 insertions(+), 78 deletions(-)
diff --git a/src/components/header/index.jsx b/src/components/header/index.jsx
index ad88228..2cf01ff 100644
--- a/src/components/header/index.jsx
+++ b/src/components/header/index.jsx
@@ -4,6 +4,7 @@ import classnames from 'classnames';
import { autobind } from 'core-decorators';
import siteConfig from '../../../site_config/site';
import { getLink } from '../../../utils';
+import MobileMenu from '../mobileMenu/index';
import Menu from 'antd/lib/menu';
import 'antd/lib/menu/style/index.css';
import './index.scss';
@@ -53,7 +54,6 @@ class Header extends React.Component {
language: props.language,
search: siteConfig.defaultSearch,
searchValue: '',
- submenuVisibleMap: {},
};
}
@@ -70,17 +70,6 @@ class Header extends React.Component {
} else if (localStorage.getItem('currents')) {
this.setCurrent(localStorage.getItem('currents'));
}
- if (siteConfig[this.state.language].pageMenu) {
- const map = {};
- siteConfig[this.state.language].pageMenu.forEach((menu) => {
- if (menu.children && menu.children.length > 0) {
- map[menu.key] = false;
- }
- });
- this.setState({
- submenuVisibleMap: map,
- });
- }
}
componentWillReceiveProps(nextProps) {
@@ -154,32 +143,15 @@ class Header extends React.Component {
e.stopPropagation();
}
- toggleMenu() {
+ toggleMenu(bool) {
this.setState({
- mobileMemuVisible: !this.state.mobileMemuVisible,
- }, () => {
- if (this.state.mobileMemuVisible) {
- document.body.addEventListener('touchmove', this.preventScroll, {
passive: false });
- } else {
- document.body.removeEventListener('touchmove', this.preventScroll);
- }
- });
- }
-
- toggoleSubMenu(key) {
- const { submenuVisibleMap } = this.state;
- if (!submenuVisibleMap.hasOwnProperty(key)) return;
- this.setState({
- submenuVisibleMap: {
- ...submenuVisibleMap,
- [key]: !submenuVisibleMap[key],
- },
+ mobileMemuVisible: bool,
});
}
render() {
const { type, logo, onLanguageChange } = this.props;
- const { mobileMemuVisible, language, search, searchVisible,
submenuVisibleMap } = this.state;
+ const { mobileMemuVisible, language, search, searchVisible } = this.state;
return (
<header
className={
@@ -195,7 +167,7 @@ class Header extends React.Component {
'mobile-menu-btn': true,
[`mobile-menu-btn-${type}`]: true,
})}
- onClick={this.toggleMenu}
+ onClick={() => this.toggleMenu(!mobileMemuVisible)}
/>
<a href={getLink(`/${language}/index.html`)}>
<img className="logo" alt={siteConfig.name}
title={siteConfig.name} src={getLink(logo)} />
@@ -269,37 +241,7 @@ class Header extends React.Component {
</Menu>
</div>
</div>
- <div className={mobileMemuVisible ? 'mobile-menu visible' :
'mobile-menu'} onScroll={this.preventScroll}>
- <div className="mobile-menu-content">
- <div className="mobile-menu-list">
- {
- siteConfig[language].pageMenu.map(item => (
- <div className="mobile-menu-item" onClick={() =>
this.toggoleSubMenu(item.key)} >
- <a className="mobile-menu-title"
href={getLink(item.link)} target={item.target || '_self'}>{item.text}</a>
- {
- item.children && item.children.length > 0 ?
- <em className={submenuVisibleMap[item.key] ?
'mobile-menu-icon open' : 'mobile-menu-icon'} /> :
- null
- }
- {
- item.children && item.children.length > 0 ?
- <div className={submenuVisibleMap[item.key] ?
'mobile-sub-menus open' : 'mobile-sub-menus'}>
- {
- item.children && item.children.map(sub => (
- <div className="mobile-sub-menu-item"><a
href={getLink(sub.link)} target={sub.target || '_self'}>{sub.text}</a></div>
- ))
- }
- </div>
- :
- null
- }
- </div>
- ))
- }
- </div>
- </div>
- <div className="mobile-menu-dummy" onClick={this.toggleMenu} />
- </div>
+ <MobileMenu menus={siteConfig[language].pageMenu}
visible={mobileMemuVisible} setVisible={this.toggleMenu} />
</div>
</header>
);
diff --git a/src/components/md2html/index.scss
b/src/components/md2html/index.scss
index 972fead..2eebdaa 100644
--- a/src/components/md2html/index.scss
+++ b/src/components/md2html/index.scss
@@ -30,7 +30,6 @@
position: absolute;
z-index: 100;
left: 0;
- top: 40px;
}
}
-}
\ No newline at end of file
+}
diff --git a/src/components/mobileMenu/index.jsx
b/src/components/mobileMenu/index.jsx
new file mode 100644
index 0000000..8d58dfb
--- /dev/null
+++ b/src/components/mobileMenu/index.jsx
@@ -0,0 +1,109 @@
+import React from 'react';
+import PropTypes from 'prop-types';
+import { getLink } from '../../../utils';
+import { autobind } from 'core-decorators';
+
+const propTypes = {
+ visible: PropTypes.bool,
+ setVisible: PropTypes.func,
+ // eslint-disable-next-line react/forbid-prop-types
+ menus: PropTypes.array,
+};
+const defaultProps = {
+ visible: false,
+ setVisible: () => {},
+};
+
+@autobind
+class MobileMenu extends React.Component {
+ constructor(props) {
+ super(props);
+ this.state = {
+ submenuVisibleMap: {},
+ };
+ }
+
+ preventScroll(e) {
+ e.preventDefault();
+ e.stopPropagation();
+ }
+
+ componentDidMount() {
+ const { menus } = this.props;
+ if (menus && menus.length > 0) {
+ const map = {};
+ menus.forEach((menu) => {
+ if (menu.children && menu.children.length > 0) {
+ map[menu.key] = false;
+ }
+ });
+ this.setState({
+ submenuVisibleMap: map,
+ });
+ }
+ }
+
+ componentWillReceiveProps(nextProps) {
+ if (nextProps.visible) {
+ document.body.addEventListener('touchmove', this.preventScroll, {
passive: false });
+ } else {
+ document.body.removeEventListener('touchmove', this.preventScroll);
+ }
+ }
+
+ toggoleSubMenu(key) {
+ const { submenuVisibleMap } = this.state;
+ if (!submenuVisibleMap.hasOwnProperty(key)) return;
+ this.setState({
+ submenuVisibleMap: {
+ ...submenuVisibleMap,
+ [key]: !submenuVisibleMap[key],
+ },
+ });
+ }
+
+ render() {
+ const { visible, setVisible, menus } = this.props;
+ const { submenuVisibleMap } = this.state;
+
+ return (
+ <div className={visible ? 'mobile-menu visible' : 'mobile-menu'}
onScroll={this.preventScroll}>
+ <div className="mobile-menu-content">
+ <div className="mobile-menu-list">
+ {
+ menus.map(item => (
+ <div className="mobile-menu-item" onClick={() =>
this.toggoleSubMenu(item.key)} >
+ <a className="mobile-menu-title" href={getLink(item.link)}
target={item.target || '_self'}>{item.text || item.title}</a>
+ {
+ item.children && item.children.length > 0 ?
+ <em className={submenuVisibleMap[item.key] ?
'mobile-menu-icon open' : 'mobile-menu-icon'} /> :
+ null
+ }
+ {
+ item.children && item.children.length > 0 ?
+ <div className={submenuVisibleMap[item.key] ?
'mobile-sub-menus open' : 'mobile-sub-menus'}>
+ {
+ item.children && item.children.map(sub => (
+ <div className="mobile-sub-menu-item"><a
href={getLink(sub.link)} target={sub.target || '_self'}>{sub.text ||
sub.title}</a></div>
+ ))
+ }
+ </div>
+ :
+ null
+ }
+ </div>
+ ))
+ }
+ </div>
+ </div>
+ <div className="mobile-menu-dummy" onClick={() => setVisible(false)} />
+ </div>
+ );
+ }
+}
+
+MobileMenu.propTypes = propTypes;
+MobileMenu.defaultProps = defaultProps;
+
+export default MobileMenu;
+
diff --git a/src/components/sidemenu/index.scss
b/src/components/sidemenu/index.scss
index 81b3c13..740d73c 100644
--- a/src/components/sidemenu/index.scss
+++ b/src/components/sidemenu/index.scss
@@ -1,4 +1,4 @@
-@import '../../variables.scss';
+@import "../../variables.scss";
.sidemenu {
background: $sideMenuBgColor;
width: $sideMenuWidth;
@@ -31,7 +31,8 @@
li {
line-height: 0;
}
- span, a {
+ span,
+ a {
box-sizing: border-box;
display: inline-block;
position: relative;
@@ -45,13 +46,13 @@
background: white;
}
a::before {
- content: '';
+ content: "";
position: absolute;
left: 0;
top: 0;
width: 4px;
height: 100%;
- background-image:linear-gradient(0deg, $startColor 0%,
$intermediateColor 51%, $endColor 100%);
+ background-image: linear-gradient(0deg, $startColor 0%,
$intermediateColor 51%, $endColor 100%);
}
}
.menu-item-level-1 {
@@ -65,29 +66,32 @@
}
}
- .menu-item-level-2, .menu-item-level-3 {
+ .menu-item-level-2,
+ .menu-item-level-3 {
cursor: pointer;
- & > span, & > a {
+ & > span,
+ & > a {
font-family: Avenir-Medium;
font-size: 14px;
color: #666;
&:hover {
background: white;
&::before {
- content: '';
+ content: "";
position: absolute;
left: 0;
top: 0;
width: 4px;
height: 100%;
- background-image:linear-gradient(0deg, $startColor 0%,
$intermediateColor 51%, $endColor 100%);
+ background-image: linear-gradient(0deg, $startColor 0%,
$intermediateColor 51%, $endColor 100%);
}
}
}
}
.menu-item-level-2 {
- & > span, & > a {
+ & > span,
+ & > a {
padding-left: 40px;
height: 36px;
line-height: 36px;
@@ -111,11 +115,34 @@
@media screen and (max-width: $mobileWidth) {
.sidemenu {
width: 0;
+ top: 66px;
+ height: calc(100vh - 66px);
.sidemenu-toggle {
display: inline-block;
+ position: fixed;
+ z-index: 100;
+ left: 0;
+ top: 100px;
}
&.sidemenu-open {
- width: $sideMenuWidth;
+ width: 100%;
+ position: fixed;
+ left: 0;
+ overflow: auto;
+ background: rgba(0, 0, 0, 0.4);
+ padding: 0;
+ > ul {
+ width: 300px;
+ padding: 20px 0;
+ background: #f2f3f7;
+ min-height: 100%;
+ box-sizing: border-box;
+ }
+ .sidemenu-toggle {
+ left: 300px;
+ position: absolute;
+ top: 40px;
+ }
}
}
-}
\ No newline at end of file
+}
diff --git a/src/pages/home/index.jsx b/src/pages/home/index.jsx
index b57de68..ea55eb6 100644
--- a/src/pages/home/index.jsx
+++ b/src/pages/home/index.jsx
@@ -63,7 +63,6 @@ class Home extends Language {
});
});
this.initSwiper();
- window._debug = this;
}
componentDidUpdate(prevProps, prevState) {