1
1
import { useIntl } from '@edx/frontend-platform/i18n' ;
2
2
import { PluginSlot } from '@openedx/frontend-plugin-framework' ;
3
3
import classNames from 'classnames' ;
4
+ import PropTypes from 'prop-types' ;
4
5
import React from 'react' ;
5
6
import { CoursewareSearch , CoursewareSearchToggle } from '../course-home/courseware-search' ;
6
7
import { useCoursewareSearchState } from '../course-home/courseware-search/hooks' ;
7
8
import Tabs from '../generic/tabs/Tabs' ;
8
9
9
10
import messages from './messages' ;
10
11
11
- interface CourseTabsNavigationProps {
12
- activeTabSlug ?: string ;
13
- className ?: string | null ;
14
- tabs : Array < {
15
- title : string ;
16
- slug : string ;
17
- url : string ;
18
- } > ;
19
- }
20
-
21
- const CourseTabsNavigation = ( {
22
- activeTabSlug = undefined ,
23
- className = null ,
24
- tabs,
25
- } :CourseTabsNavigationProps ) => {
12
+ const CourseTabsNavigation = ( { activeTabSlug, className, tabs } ) => {
26
13
const { show } = useCoursewareSearchState ( ) ;
27
14
const intl = useIntl ( ) ;
28
15
@@ -33,15 +20,21 @@ const CourseTabsNavigation = ({
33
20
className = "nav-underline-tabs"
34
21
aria-label = { intl . formatMessage ( messages . courseMaterial ) }
35
22
>
36
- < PluginSlot id = "course_tab_links_slot" > { tabs . map ( ( { url, title, slug } ) => (
37
- < a
38
- key = { slug }
39
- className = { classNames ( 'nav-item flex-shrink-0 nav-link' , { active : slug === activeTabSlug } ) }
40
- href = { url }
41
- >
42
- { title }
43
- </ a >
44
- ) ) } </ PluginSlot >
23
+ < PluginSlot id = "course_tab_links_slot" >
24
+ { tabs . map ( ( {
25
+ url,
26
+ title,
27
+ slug,
28
+ } ) => (
29
+ < a
30
+ key = { slug }
31
+ className = { classNames ( 'nav-item flex-shrink-0 nav-link' , { active : slug === activeTabSlug } ) }
32
+ href = { url }
33
+ >
34
+ { title }
35
+ </ a >
36
+ ) ) }
37
+ </ PluginSlot >
45
38
</ Tabs >
46
39
</ div >
47
40
< div className = "course-tabs-navigation__search-toggle" >
@@ -52,4 +45,19 @@ const CourseTabsNavigation = ({
52
45
) ;
53
46
} ;
54
47
48
+ CourseTabsNavigation . propTypes = {
49
+ activeTabSlug : PropTypes . string ,
50
+ className : PropTypes . string ,
51
+ tabs : PropTypes . arrayOf ( PropTypes . shape ( {
52
+ title : PropTypes . string . isRequired ,
53
+ slug : PropTypes . string . isRequired ,
54
+ url : PropTypes . string . isRequired ,
55
+ } ) ) . isRequired ,
56
+ } ;
57
+
58
+ CourseTabsNavigation . defaultProps = {
59
+ activeTabSlug : undefined ,
60
+ className : null ,
61
+ } ;
62
+
55
63
export default CourseTabsNavigation ;
0 commit comments