| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398 | import React, { Component } from "react";import PropTypes from "prop-types";import { connect } from "react-redux";import { bindActionCreators } from "redux";import * as actions from "../../store/actions/actions";import { TabContent, TabPane, Nav, NavItem, NavLink } from "reactstrap";class Offsidebar extends Component {	state = {		activeTab: "settings",		offsidebarReady: false,	};	componentDidMount() {		// When mounted display the offsidebar		window.requestAnimationFrame(() => this.setState({ offsidebarReady: true }));	}	toggle = (tab) => {		if (this.state.activeTab !== tab) {			this.setState({				activeTab: tab,			});		}	};	handleSettingCheckbox = (event) => {		this.props.actions.changeSetting(event.target.name, event.target.checked);	};	handleThemeRadio = (event) => {		this.props.actions.changeTheme(event.target.value);	};	render() {		return (			this.state.offsidebarReady && (				<aside className="offsidebar">					{/* START Off Sidebar (right) */}					<nav>						<div>							{/* Nav tabs */}							<Nav tabs justified>								<NavItem>									<NavLink										className={this.state.activeTab === "settings" ? "active" : ""}										onClick={() => {											this.toggle("settings");										}}									>										<em className="icon-equalizer fa-lg"></em>									</NavLink>								</NavItem>								{/* <NavItem>                                <NavLink className={ this.state.activeTab === 'chat' ? 'active':'' }                                    onClick={() => { this.toggle('chat'); }}                                >                                    <em className="icon-user fa-lg"></em>                                </NavLink>                            </NavItem> */}							</Nav>							{/* Tab panes */}							<TabContent activeTab={this.state.activeTab}>								<TabPane tabId="settings">									<h3 className="text-center text-thin mt-4">Settings</h3>									<div className="p-2">										<h4 className="text-muted text-thin">Themes</h4>										<div className="row row-flush mb-2">											<div className="col-3 mb-3">												<div className="setting-color">													<label>														<input type="radio" name="setting-theme" checked={this.props.theme.name === "theme-a"} value="theme-a" onChange={this.handleThemeRadio} />														<span className="icon-check"></span>														<span className="split">															<span className="color bg-info"></span>															<span className="color bg-info-light"></span>														</span>														<span className="color bg-white"></span>													</label>												</div>											</div>											<div className="col-3 mb-3">												<div className="setting-color">													<label>														<input type="radio" name="setting-theme" checked={this.props.theme.name === "theme-b"} value="theme-b" onChange={this.handleThemeRadio} />														<span className="icon-check"></span>														<span className="split">															<span className="color bg-green"></span>															<span className="color bg-green-light"></span>														</span>														<span className="color bg-white"></span>													</label>												</div>											</div>											<div className="col-3 mb-3">												<div className="setting-color">													<label>														<input type="radio" name="setting-theme" checked={this.props.theme.name === "theme-c"} value="theme-c" onChange={this.handleThemeRadio} />														<span className="icon-check"></span>														<span className="split">															<span className="color bg-purple"></span>															<span className="color bg-purple-light"></span>														</span>														<span className="color bg-white"></span>													</label>												</div>											</div>											<div className="col-3 mb-3">												<div className="setting-color">													<label>														<input type="radio" name="setting-theme" checked={this.props.theme.name === "theme-d"} value="theme-d" onChange={this.handleThemeRadio} />														<span className="icon-check"></span>														<span className="split">															<span className="color bg-danger"></span>															<span className="color bg-danger-light"></span>														</span>														<span className="color bg-white"></span>													</label>												</div>											</div>											<div className="col-3 mb-3">												<div className="setting-color">													<label>														<input type="radio" name="setting-theme" checked={this.props.theme.name === "theme-e"} value="theme-e" onChange={this.handleThemeRadio} />														<span className="icon-check"></span>														<span className="split">															<span className="color bg-info-dark"></span>															<span className="color bg-info"></span>														</span>														<span className="color bg-gray-dark"></span>													</label>												</div>											</div>											<div className="col-3 mb-3">												<div className="setting-color">													<label>														<input type="radio" name="setting-theme" checked={this.props.theme.name === "theme-f"} value="theme-f" onChange={this.handleThemeRadio} />														<span className="icon-check"></span>														<span className="split">															<span className="color bg-green-dark"></span>															<span className="color bg-green"></span>														</span>														<span className="color bg-gray-dark"></span>													</label>												</div>											</div>											<div className="col-3 mb-3">												<div className="setting-color">													<label>														<input type="radio" name="setting-theme" checked={this.props.theme.name === "theme-g"} value="theme-g" onChange={this.handleThemeRadio} />														<span className="icon-check"></span>														<span className="split">															<span className="color bg-purple-dark"></span>															<span className="color bg-purple"></span>														</span>														<span className="color bg-gray-dark"></span>													</label>												</div>											</div>											<div className="col-3 mb-3">												<div className="setting-color">													<label>														<input type="radio" name="setting-theme" checked={this.props.theme.name === "theme-h"} value="theme-h" onChange={this.handleThemeRadio} />														<span className="icon-check"></span>														<span className="split">															<span className="color bg-danger-dark"></span>															<span className="color bg-danger"></span>														</span>														<span className="color bg-gray-dark"></span>													</label>												</div>											</div>										</div>									</div>									{/* <div className="p-2">										<h4 className="text-muted text-thin">Layout</h4>										<div className="clearfix">											<p className="float-left">Fixed</p>											<div className="float-right">												<label className="switch">													<input id="chk-fixed" type="checkbox" name="isFixed" checked={this.props.settings.isFixed} onChange={this.handleSettingCheckbox} />													<span></span>												</label>											</div>										</div>										<div className="clearfix">											<p className="float-left">Boxed</p>											<div className="float-right">												<label className="switch">													<input id="chk-boxed" type="checkbox" name="isBoxed" checked={this.props.settings.isBoxed} onChange={this.handleSettingCheckbox} />													<span></span>												</label>											</div>										</div>									</div>									<div className="p-2">										<h4 className="text-muted text-thin">Aside</h4>										<div className="clearfix">											<p className="float-left">Collapsed</p>											<div className="float-right">												<label className="switch">													<input id="chk-collapsed" type="checkbox" name="isCollapsed" checked={this.props.settings.isCollapsed} onChange={this.handleSettingCheckbox} />													<span></span>												</label>											</div>										</div>										<div className="clearfix">											<p className="float-left">Collapsed Text</p>											<div className="float-right">												<label className="switch">													<input id="chk-collapsed-text" type="checkbox" name="isCollapsedText" checked={this.props.settings.isCollapsedText} onChange={this.handleSettingCheckbox} />													<span></span>												</label>											</div>										</div>										<div className="clearfix">											<p className="float-left">Float</p>											<div className="float-right">												<label className="switch">													<input id="chk-float" type="checkbox" name="isFloat" checked={this.props.settings.isFloat} onChange={this.handleSettingCheckbox} />													<span></span>												</label>											</div>										</div>										<div className="clearfix">											<p className="float-left">Hover</p>											<div className="float-right">												<label className="switch">													<input id="chk-hover" type="checkbox" name="asideHover" checked={this.props.settings.asideHover} onChange={this.handleSettingCheckbox} />													<span></span>												</label>											</div>										</div>										<div className="clearfix">											<p className="float-left">Show Scrollbar</p>											<div className="float-right">												<label className="switch">													<input id="chk-scrollbar" type="checkbox" name="asideScrollbar" checked={this.props.settings.asideScrollbar} onChange={this.handleSettingCheckbox} />													<span></span>												</label>											</div>										</div>									</div> */}								</TabPane>								<TabPane tabId="chat">									<h3 className="text-center text-thin mt-4">Connections</h3>									<div className="list-group">										{/* START list title */}										<div className="list-group-item border-0">											<small className="text-muted">ONLINE</small>										</div>										{/* END list title */}										<div className="list-group-item list-group-item-action border-0">											<div className="media">												<img className="align-self-center mr-3 rounded-circle thumb48" src="/static/img/user/05.jpg" alt="User avatar" />												<div className="media-body text-truncate">													<a href="">														<strong>Juan Sims</strong>													</a>													<br />													<small className="text-muted">Designeer</small>												</div>												<div className="ml-auto">													<span className="circle bg-success circle-lg"></span>												</div>											</div>										</div>										<div className="list-group-item list-group-item-action border-0">											<div className="media">												<img className="align-self-center mr-3 rounded-circle thumb48" src="/static/img/user/06.jpg" alt="User avatar" />												<div className="media-body text-truncate">													<a href="">														<strong>Maureen Jenkins</strong>													</a>													<br />													<small className="text-muted">Designeer</small>												</div>												<div className="ml-auto">													<span className="circle bg-success circle-lg"></span>												</div>											</div>										</div>										<div className="list-group-item list-group-item-action border-0">											<div className="media">												<img className="align-self-center mr-3 rounded-circle thumb48" src="/static/img/user/07.jpg" alt="User avatar" />												<div className="media-body text-truncate">													<a href="">														<strong>Billie Dunn</strong>													</a>													<br />													<small className="text-muted">Designeer</small>												</div>												<div className="ml-auto">													<span className="circle bg-danger circle-lg"></span>												</div>											</div>										</div>										<div className="list-group-item list-group-item-action border-0">											<div className="media">												<img className="align-self-center mr-3 rounded-circle thumb48" src="/static/img/user/08.jpg" alt="User avatar" />												<div className="media-body text-truncate">													<a href="">														<strong>Tomothy Roberts</strong>													</a>													<br />													<small className="text-muted">Designeer</small>												</div>												<div className="ml-auto">													<span className="circle bg-warning circle-lg"></span>												</div>											</div>										</div>										{/* START list title */}										<div className="list-group-item border-0">											<small className="text-muted">OFFLINE</small>										</div>										{/* END list title */}										<div className="list-group-item list-group-item-action border-0">											<div className="media">												<img className="align-self-center mr-3 rounded-circle thumb48" src="/static/img/user/09.jpg" alt="User avatar" />												<div className="media-body text-truncate">													<a href="">														<strong>Lawrence Robinson</strong>													</a>													<br />													<small className="text-muted">Designeer</small>												</div>												<div className="ml-auto">													<span className="circle bg-warning circle-lg"></span>												</div>											</div>										</div>										<div className="list-group-item list-group-item-action border-0">											<div className="media">												<img className="align-self-center mr-3 rounded-circle thumb48" src="/static/img/user/10.jpg" alt="User avatar" />												<div className="media-body text-truncate">													<a href="">														<strong>Tyrone Owens</strong>													</a>													<br />													<small className="text-muted">Designeer</small>												</div>												<div className="ml-auto">													<span className="circle bg-warning circle-lg"></span>												</div>											</div>										</div>									</div>									<div className="px-3 py-4 text-center">										{/* Optional link to list more users */}										<a className="btn btn-purple btn-sm" href="" title="See more contacts">											<strong>Load more..</strong>										</a>									</div>									{/* Extra items */}									<div className="px-3 py-2">										<p>											<small className="text-muted">Tasks completion</small>										</p>										<div className="progress progress-xs m-0">											<div className="progress-bar bg-success" aria-valuenow="80" aria-valuemin="0" aria-valuemax="100" style={{ width: "80%" }}>												<span className="sr-only">80% Complete</span>											</div>										</div>									</div>									<div className="px-3 py-2">										<p>											<small className="text-muted">Upload quota</small>										</p>										<div className="progress progress-xs m-0">											<div className="progress-bar bg-warning" aria-valuenow="40" aria-valuemin="0" aria-valuemax="100" style={{ width: "40%" }}>												<span className="sr-only">40% Complete</span>											</div>										</div>									</div>								</TabPane>							</TabContent>						</div>					</nav>					{/* END Off Sidebar (right) */}				</aside>			)		);	}}Offsidebar.propTypes = {	actions: PropTypes.object,	settings: PropTypes.object,	theme: PropTypes.object,};const mapStateToProps = (state) => ({ settings: state.settings, theme: state.theme });const mapDispatchToProps = (dispatch) => ({ actions: bindActionCreators(actions, dispatch) });export default connect(mapStateToProps, mapDispatchToProps)(Offsidebar);
 |