-
Notifications
You must be signed in to change notification settings - Fork 184
/
Sidebar.js
94 lines (86 loc) · 2.87 KB
/
Sidebar.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
/*
* Backpack - Skyscanner's Design System
*
* Copyright 2016-2019 Skyscanner Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/* @flow strict */
import React from 'react';
import { Link } from 'react-router-dom';
import { cssModules } from 'bpk-react-utils';
import BpkCloseButton from 'bpk-component-close-button';
import BpkBreakpoint, { BREAKPOINTS } from 'bpk-component-breakpoint';
import BackpackLogoWhite from '../../static/backpack-logo-white.svg';
import NavList from './NavList';
import STYLES from './Sidebar.scss';
import SectionsList from './SectionsList';
import { type Category } from './common-types';
const getClassName = cssModules(STYLES);
type Props = {
activeSection: string,
links: Array<Category>,
sectionListExpanded: boolean,
onMobileModalClose: () => mixed,
onMenuToggle: () => mixed,
onSectionChange: (activeSection: string) => mixed,
};
export default (props: Props) => {
const {
activeSection,
links,
sectionListExpanded,
onMobileModalClose,
onMenuToggle,
onSectionChange,
} = props;
return (
<nav className={getClassName('bpkdocs-sidebar')}>
<div className={getClassName('bpkdocs-sidebar__header')}>
<BpkBreakpoint query={BREAKPOINTS.TABLET}>
{isTablet =>
isTablet && (
<BpkCloseButton
label="Close menu"
onClick={onMobileModalClose}
className={getClassName('bpkdocs-sidebar__close-button')}
/>
)
}
</BpkBreakpoint>
<Link to="/" className={getClassName('bpkdocs-sidebar__logo-link')}>
<img
src={`/${BackpackLogoWhite}`}
className={getClassName('bpkdocs-sidebar__logo')}
alt="Backpack Logo"
/>
</Link>
</div>
<div className={getClassName('bpkdocs-sidebar__content')}>
<SectionsList
activeSection={activeSection}
expanded={sectionListExpanded}
onMenuToggle={onMenuToggle}
onSectionChange={onSectionChange}
className={getClassName('bpkdocs-sidebar__section-list')}
/>
<NavList
links={links.filter(link => [activeSection].indexOf(link.id) !== -1)}
dimmed={sectionListExpanded}
onClick={onMobileModalClose}
supportsFiltering={activeSection === 'COMPONENTS'}
/>
</div>
</nav>
);
};