-
Notifications
You must be signed in to change notification settings - Fork 321
Expand file tree
/
Copy pathSequenceNavigationTabs.jsx
More file actions
74 lines (69 loc) · 2.32 KB
/
SequenceNavigationTabs.jsx
File metadata and controls
74 lines (69 loc) · 2.32 KB
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
import React from 'react';
import PropTypes from 'prop-types';
import classNames from 'classnames';
import UnitButton from './UnitButton';
import SequenceNavigationDropdown from './SequenceNavigationDropdown';
import useIndexOfLastVisibleChild from '../../../../generic/tabs/useIndexOfLastVisibleChild';
import {
useIsOnXLDesktop, useIsOnMediumDesktop, useIsOnLargeDesktop, useIsSidebarOpen,
} from './hooks';
const SequenceNavigationTabs = ({
unitIds, unitId, showCompletion, onNavigate,
}) => {
const isSidebarOpen = useIsSidebarOpen(unitId);
const [
indexOfLastVisibleChild,
containerRef,
invisibleStyle,
] = useIndexOfLastVisibleChild(isSidebarOpen);
const isOnXLDesktop = useIsOnXLDesktop();
const isOnLargeDesktop = useIsOnLargeDesktop();
const isOnMediumDesktop = useIsOnMediumDesktop();
const shouldDisplayDropdown = indexOfLastVisibleChild === -1 || indexOfLastVisibleChild < unitIds.length - 1;
return (
<div
style={{ flexBasis: '100%', minWidth: 0 }}
className={classNames({
'navigation-tab-width-xl': isOnXLDesktop && isSidebarOpen,
'navigation-tab-width-large': isOnLargeDesktop && isSidebarOpen,
'navigation-tab-width-medium': isOnMediumDesktop && isSidebarOpen,
})}
>
<div
className="sequence-navigation-tabs-container"
>
<div
className="sequence-navigation-tabs d-flex flex-grow-1"
style={shouldDisplayDropdown ? invisibleStyle : null}
role="tablist"
ref={containerRef}
>
{unitIds.map(buttonUnitId => (
<UnitButton
key={buttonUnitId}
unitId={buttonUnitId}
isActive={unitId === buttonUnitId}
showCompletion={showCompletion}
onClick={onNavigate}
/>
))}
</div>
</div>
{shouldDisplayDropdown && (
<SequenceNavigationDropdown
unitId={unitId}
onNavigate={onNavigate}
showCompletion={showCompletion}
unitIds={unitIds}
/>
)}
</div>
);
};
SequenceNavigationTabs.propTypes = {
unitId: PropTypes.string.isRequired,
onNavigate: PropTypes.func.isRequired,
showCompletion: PropTypes.bool.isRequired,
unitIds: PropTypes.arrayOf(PropTypes.string).isRequired,
};
export default SequenceNavigationTabs;