11import { useIntl } from '@edx/frontend-platform/i18n' ;
22import { PluginSlot } from '@openedx/frontend-plugin-framework' ;
33import classNames from 'classnames' ;
4+ import PropTypes from 'prop-types' ;
45import React from 'react' ;
56import { CoursewareSearch , CoursewareSearchToggle } from '../course-home/courseware-search' ;
67import { useCoursewareSearchState } from '../course-home/courseware-search/hooks' ;
78import Tabs from '../generic/tabs/Tabs' ;
89
910import messages from './messages' ;
1011
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 } ) => {
2613 const { show } = useCoursewareSearchState ( ) ;
2714 const intl = useIntl ( ) ;
2815
@@ -33,15 +20,21 @@ const CourseTabsNavigation = ({
3320 className = "nav-underline-tabs"
3421 aria-label = { intl . formatMessage ( messages . courseMaterial ) }
3522 >
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 >
4538 </ Tabs >
4639 </ div >
4740 < div className = "course-tabs-navigation__search-toggle" >
@@ -52,4 +45,19 @@ const CourseTabsNavigation = ({
5245 ) ;
5346} ;
5447
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+
5563export default CourseTabsNavigation ;
0 commit comments