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