|
1 | | -// https://github.com/vercel/next.js/issues/11230#issuecomment-643595034 |
| 1 | +import Divider from '@material-ui/core/Divider'; |
| 2 | +import Drawer from '@material-ui/core/Drawer'; |
| 3 | +import IconButton from '@material-ui/core/IconButton'; |
| 4 | +import List from '@material-ui/core/List'; |
| 5 | +import ListItem from "@material-ui/core/ListItem"; |
| 6 | +import ListItemIcon from "@material-ui/core/ListItemIcon"; |
| 7 | +import ListItemText from "@material-ui/core/ListItemText"; |
| 8 | +import {makeStyles} from '@material-ui/core/styles'; |
| 9 | +import ChevronLeftIcon from '@material-ui/icons/ChevronLeft'; |
| 10 | +import DashboardIcon from "@material-ui/icons/Dashboard"; |
| 11 | +import clsx from 'clsx'; |
| 12 | +import * as React from 'react'; |
2 | 13 |
|
3 | | -import React, {useState} from "react"; |
4 | | -import {Link} from "react-router-dom"; |
5 | | -import {ReactComponent as SearchIcon} from "../../assets/icons/search2.svg"; |
6 | | -import {ReactComponent as TimesIcon} from "../../assets/icons/times.svg"; |
7 | | -import seleniumIcon from "../../assets/selenium.svg"; |
8 | | -import "../../css/icons.css"; |
9 | | -import styles from "./NavBar.module.css"; |
10 | | -import searchHighlight from "../../core/Search"; |
11 | | -import "./NavBar.css"; |
| 14 | +const drawerWidth = 240; |
12 | 15 |
|
13 | | -/** |
14 | | - * NavBar component, includes search bar and search functions |
15 | | - * Look at `core/Search.ts` for the highlight function |
16 | | - */ |
17 | | -export default function NavBar() { |
18 | | - let [prevSearch, setPrevSearch] = useState<any>(); |
19 | | - let [prevTerm, setPrevTerm] = useState<string>(""); |
| 16 | +const useStyles = makeStyles((theme) => ({ |
| 17 | + root: { |
| 18 | + display: 'flex', |
| 19 | + }, |
| 20 | + toolbarIcon: { |
| 21 | + display: 'flex', |
| 22 | + alignItems: 'center', |
| 23 | + justifyContent: 'flex-end', |
| 24 | + padding: '0 8px', |
| 25 | + ...theme.mixins.toolbar, |
| 26 | + backgroundColor: theme.palette.primary.main, |
| 27 | + }, |
| 28 | + drawerPaper: { |
| 29 | + position: 'relative', |
| 30 | + whiteSpace: 'nowrap', |
| 31 | + width: drawerWidth, |
| 32 | + minHeight: '100vh', |
| 33 | + transition: theme.transitions.create('width', { |
| 34 | + easing: theme.transitions.easing.sharp, |
| 35 | + duration: theme.transitions.duration.enteringScreen, |
| 36 | + }), |
| 37 | + }, |
| 38 | + drawerPaperClose: { |
| 39 | + overflowX: 'hidden', |
| 40 | + minHeight: '100vh', |
| 41 | + transition: theme.transitions.create('width', { |
| 42 | + easing: theme.transitions.easing.sharp, |
| 43 | + duration: theme.transitions.duration.leavingScreen, |
| 44 | + }), |
| 45 | + width: theme.spacing(7), |
| 46 | + [theme.breakpoints.up('sm')]: { |
| 47 | + width: theme.spacing(9), |
| 48 | + }, |
| 49 | + }, |
| 50 | +})); |
20 | 51 |
|
21 | | - const searchTerminDOM = (term: string) => { |
22 | | - if (prevSearch) { |
23 | | - prevSearch.revert(); |
24 | | - } |
25 | | - if (term && term !== "") { |
26 | | - prevSearch = searchHighlight(term); |
27 | | - setPrevSearch(prevSearch); |
28 | | - } |
29 | | - setPrevTerm(term); |
30 | | - }; |
31 | | - |
32 | | - const rerunSearch = () => searchTerminDOM(prevTerm); |
33 | | - window.rerunSearch = rerunSearch; |
| 52 | +function ListItemLink(props) { |
| 53 | + return <ListItem button component="a" {...props} />; |
| 54 | +} |
34 | 55 |
|
35 | | - const clearSearch = () => { |
36 | | - const searchBar = document.getElementById("search-by") as HTMLInputElement; |
37 | | - searchBar.value = ""; |
38 | | - // revert prev search as well |
39 | | - searchTerminDOM(""); |
40 | | - }; |
| 56 | +export default function NavBar(props) { |
| 57 | + const classes = useStyles(); |
| 58 | + const open = props.open; |
41 | 59 |
|
42 | 60 | return ( |
43 | | - <React.Fragment> |
44 | | - <nav id="sidebar"> |
45 | | - <div id="header-wrapper"> |
46 | | - <div id="header" style={{ height: "70px" }}> |
47 | | - <Link id="logo" to="/home"> |
48 | | - <img |
49 | | - src={seleniumIcon} |
50 | | - alt="logo" |
51 | | - className={styles.iconDetails} |
52 | | - /> |
53 | | - <div |
54 | | - style={{ |
55 | | - marginLeft: "60px", |
56 | | - marginTop: "5px", |
57 | | - }} |
58 | | - > |
59 | | - <h3 className={styles.h4}>Selenium Grid</h3> |
60 | | - </div> |
61 | | - </Link> |
62 | | - </div> |
63 | | - |
64 | | - <div className="searchbox"> |
65 | | - <label htmlFor="search-by"> |
66 | | - <SearchIcon className="icon-green" /> |
67 | | - </label> |
68 | | - <input |
69 | | - data-search-input="" |
70 | | - id="search-by" |
71 | | - type="search" |
72 | | - placeholder="Search..." |
73 | | - autoComplete="off" |
74 | | - onChange={(ev) => searchTerminDOM(ev.target.value)} |
75 | | - /> |
76 | | - <span data-search-clear=""> |
77 | | - <TimesIcon className="icon-green" onClick={clearSearch} /> |
78 | | - </span> |
79 | | - </div> |
| 61 | + <Drawer |
| 62 | + variant="permanent" |
| 63 | + classes={{ |
| 64 | + paper: clsx(classes.drawerPaper, !open && classes.drawerPaperClose), |
| 65 | + }} |
| 66 | + open={open} |
| 67 | + > |
| 68 | + <div className={classes.toolbarIcon}> |
| 69 | + <IconButton color={"secondary"}> |
| 70 | + <ChevronLeftIcon/> |
| 71 | + </IconButton> |
| 72 | + </div> |
| 73 | + <Divider/> |
| 74 | + <List> |
| 75 | + <div> |
| 76 | + <ListItemLink href={"#"}> |
| 77 | + <ListItemIcon> |
| 78 | + <DashboardIcon/> |
| 79 | + </ListItemIcon> |
| 80 | + <ListItemText primary="Overview"/> |
| 81 | + </ListItemLink> |
80 | 82 | </div> |
81 | | - <div className="highlightable ps-container ps-theme-default ps-active-y"> |
82 | | - <ul className="topics"> |
83 | | - <li data-nav-id="/console" title="Console" className="dd-item"> |
84 | | - <Link to="/console">Console</Link> |
85 | | - </li> |
86 | | - <li data-nav-id="/docs/" title="Docs" className="dd-item parent"> |
87 | | - <a href="https://www.selenium.dev/documentation/en/grid/"> |
88 | | - Docs |
89 | | - <i className="fas fa-check read-icon"></i> |
90 | | - </a> |
91 | | - |
92 | | - <ul> |
93 | | - <li |
94 | | - data-nav-id="/grid/purposes_and_main_functionalities/" |
95 | | - title="Purposes and main functionalities" |
96 | | - className="dd-item " |
97 | | - > |
98 | | - <a href="https://www.selenium.dev/documentation/en/grid/purposes_and_main_functionalities/"> |
99 | | - Purposes and functionalities |
100 | | - <i className="fas fa-check read-icon"></i> |
101 | | - </a> |
102 | | - </li> |
103 | | - |
104 | | - <li |
105 | | - data-nav-id="/grid/when_to_use_grid/" |
106 | | - title="When to use Grid" |
107 | | - className="dd-item " |
108 | | - > |
109 | | - <a href="https://www.selenium.dev/documentation/en/grid/when_to_use_grid/"> |
110 | | - When to use Grid |
111 | | - <i className="fas fa-check read-icon"></i> |
112 | | - </a> |
113 | | - </li> |
114 | | - |
115 | | - <li |
116 | | - data-nav-id="/grid/grid_4/" |
117 | | - title="Grid 4" |
118 | | - className="dd-item" |
119 | | - > |
120 | | - <a href="https://www.selenium.dev/documentation/en/grid/grid_4/"> |
121 | | - Grid 4<i className="fas fa-check read-icon"></i> |
122 | | - </a> |
123 | | - |
124 | | - <ul> |
125 | | - <li |
126 | | - data-nav-id="/grid/grid_4/components_of_a_grid/" |
127 | | - title="Components" |
128 | | - className="dd-item " |
129 | | - > |
130 | | - <a href="https://www.selenium.dev/documentation/en/grid/grid_4/components_of_a_grid/"> |
131 | | - Components |
132 | | - <i className="fas fa-check read-icon"></i> |
133 | | - </a> |
134 | | - </li> |
135 | | - </ul> |
136 | | - </li> |
137 | | - </ul> |
138 | | - </li> |
139 | | - </ul> |
140 | | - </div> |
141 | | - </nav> |
142 | | - </React.Fragment> |
| 83 | + </List> |
| 84 | + {/*<Divider/>*/} |
| 85 | + {/*<List>{secondaryListItems}</List>*/} |
| 86 | + </Drawer> |
143 | 87 | ); |
144 | 88 | } |
| 89 | + |
0 commit comments