dbl-components
Version:
Framework based on bootstrap 5
80 lines (73 loc) • 2.43 kB
JavaScript
import PropTypes from 'prop-types';
import React from "react";
import { NavLink } from "react-router-dom";
import Icons from "../media/icons";
export default class SideNavigation extends React.Component {
static propTypes = {
className: PropTypes.any,
iconSize: PropTypes.any,
menu: PropTypes.any,
style: PropTypes.any
}
static jsClass = 'SideNavigation';
static defaultProps = {
className: '',
style: {},
menu: [],
iconSize: 40
}
state = {
stick: false,
icon: 'chevron-right'
}
stick = (e) => {
this.setState({
stick: !this.state.stick,
icon: this.state.stick ? 'chevron-right' : 'thumb-tack'
}, () => window.focus());
}
render() {
let { menu, iconSize, className, style } = this.props;
let { stick, icon } = this.state;
let cn = [this.constructor.jsClass, className];
if (stick) cn.push('stick');
return (React.createElement('div',
{ className: cn.flat().join(' '), style },
React.createElement('ul',
{ className: "nav flex-column" },
React.createElement('li', { className: "nav-item" },
React.createElement('div', { className: "nav-link clearfix px-0" },
React.createElement('div',
{
style: { width: iconSize, height: iconSize },
className: "d-flex justify-content-end align-items-center float-right"
},
React.createElement('span',
{
className: "wrap-collapse-arrow",
style: { cursor: 'pointer' },
onClick: this.stick
},
React.createElement(Icons, { icon, className: "collapse-arrow" })
)
)
)
),
menu.map((item, i) =>
React.createElement('li',
{ className: "nav-item", key: i },
React.createElement(NavLink,
{
to: item.path, className: "nav-link",
exact: item.exact, activeClassName: 'active'
},
React.createElement(Icons,
{ icon: item.icon, inline: false, width: iconSize, height: iconSize }),
React.createElement('span', { className: "text-collapse" }, item.label)
)
)
)
)
));
}
}