11import { useState } from 'react' ;
22import { useParams } from 'react-router-dom' ;
33import { useIntl } from '@openedx/frontend-base' ;
4- import { AlertModal , Button , Container , Toast } from '@openedx/paragon' ;
4+ import { AlertModal , Button , Container , FormControl , Icon , Toast } from '@openedx/paragon' ;
55import messages from './messages' ;
66import DateExtensionsList from './components/DateExtensionsList' ;
77import ResetExtensionsModal from './components/ResetExtensionsModal' ;
88import { LearnerDateExtension } from './types' ;
99import { useAddDateExtensionMutation , useResetDateExtensionMutation } from '../data/apiHook' ;
1010import AddExtensionModal from './components/AddExtensionModal' ;
1111import SelectGradedSubsection from './components/SelectGradedSubsection' ;
12+ import { Search } from '@openedx/paragon/icons' ;
1213
1314// const successMessage = 'Successfully reset due date for student Phu Nguyen for A subsection with two units (block-v1:SchemaAximWGU+WGU101+1+type@sequential+block@3984030755104708a86592cf23fb1ae4) to 2025-08-21 00:00';
1415
@@ -22,6 +23,8 @@ const DateExtensionsPage = () => {
2223 const [ successMessage , setSuccessMessage ] = useState < string > ( '' ) ;
2324 const [ errorMessage , setErrorMessage ] = useState < string > ( '' ) ;
2425 const [ isAddExtensionModalOpen , setIsAddExtensionModalOpen ] = useState ( false ) ;
26+ const [ searchedLearner , setSearchedLearner ] = useState < string > ( '' ) ;
27+ const [ gradedSubsectionFilter , setGradedSubsectionFilter ] = useState < string > ( '' ) ;
2528
2629 const handleResetExtensions = ( user : LearnerDateExtension ) => {
2730 setIsResetModalOpen ( true ) ;
@@ -75,15 +78,26 @@ const DateExtensionsPage = () => {
7578 < Container className = "mt-4.5 mb-4 mx-4" fluid = "xl" >
7679 < h3 > { intl . formatMessage ( messages . dateExtensionsTitle ) } </ h3 >
7780 < div className = "d-flex align-items-center justify-content-between mb-3.5" >
78- < div >
81+ < div className = "d-flex" >
82+ < FormControl
83+ onChange = { ( e ) => setSearchedLearner ( e . target . value ) }
84+ placeholder = { intl . formatMessage ( messages . searchLearnerPlaceholder ) }
85+ trailingElement = { < Icon src = { Search } /> }
86+ value = { searchedLearner }
87+ />
7988 < SelectGradedSubsection
8089 placeholder = { intl . formatMessage ( messages . allGradedSubsections ) }
81- onChange = { ( ) => { } }
90+ onChange = { ( e ) => setGradedSubsectionFilter ( e . target . value ) }
91+ value = { gradedSubsectionFilter }
8292 />
8393 </ div >
8494 < Button onClick = { handleOpenAddExtension } > + { intl . formatMessage ( messages . addIndividualExtension ) } </ Button >
8595 </ div >
86- < DateExtensionsList onResetExtensions = { handleResetExtensions } />
96+ < DateExtensionsList
97+ searchedLearner = { searchedLearner }
98+ gradedSubsectionFilter = { gradedSubsectionFilter }
99+ onResetExtensions = { handleResetExtensions }
100+ />
87101 < AddExtensionModal
88102 isOpen = { isAddExtensionModalOpen }
89103 title = { intl . formatMessage ( messages . addIndividualDueDateExtension ) }
0 commit comments