11import { useState } from 'react' ;
2+ import { useParams } from 'react-router-dom' ;
23import { useIntl } from '@openedx/frontend-base' ;
3- import { Button , Container } from '@openedx/paragon' ;
4+ import { AlertModal , Button , Container , Toast } from '@openedx/paragon' ;
45import messages from './messages' ;
56import DateExtensionsList from './components/DateExtensionsList' ;
67import ResetExtensionsModal from './components/ResetExtensionsModal' ;
78import { LearnerDateExtension } from './types' ;
9+ import { useResetDateExtensionMutation } from '../data/apiHook' ;
810
911// 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';
1012
1113const DateExtensionsPage = ( ) => {
1214 const intl = useIntl ( ) ;
15+ const { courseId } = useParams < { courseId : string } > ( ) ;
16+ const { mutate : resetMutation } = useResetDateExtensionMutation ( ) ;
1317 const [ isModalOpen , setIsModalOpen ] = useState ( false ) ;
1418 const [ selectedUser , setSelectedUser ] = useState < LearnerDateExtension | null > ( null ) ;
19+ const [ successMessage , setSuccessMessage ] = useState < string > ( '' ) ;
20+ const [ errorMessage , setErrorMessage ] = useState < string > ( '' ) ;
1521
1622 const handleResetExtensions = ( user : LearnerDateExtension ) => {
1723 setIsModalOpen ( true ) ;
1824 setSelectedUser ( user ) ;
1925 } ;
2026
21- const handleConfirmReset = ( ) => {
22- if ( selectedUser ) {
23- // Call the API to reset the extensions for the selected user
24- console . log ( `Resetting extensions for user: ${ selectedUser . username } ` ) ;
25- }
27+ const handleCloseModal = ( ) => {
2628 setIsModalOpen ( false ) ;
2729 setSelectedUser ( null ) ;
2830 } ;
2931
30- const handleCancelReset = ( ) => {
31- setIsModalOpen ( false ) ;
32- setSelectedUser ( null ) ;
32+ const handleErrorOnReset = ( error : any ) => {
33+ setErrorMessage ( error . message ) ;
34+ } ;
35+
36+ const handleSuccessOnReset = ( response : any ) => {
37+ const { message } = response ;
38+ setSuccessMessage ( message ) ;
39+ handleCloseModal ( ) ;
40+ } ;
41+
42+ const handleConfirmReset = async ( ) => {
43+ if ( selectedUser && courseId ) {
44+ resetMutation ( {
45+ courseId,
46+ userId : selectedUser . id
47+ } , {
48+ onError : handleErrorOnReset ,
49+ onSuccess : handleSuccessOnReset
50+ } ) ;
51+ }
3352 } ;
3453
3554 return (
@@ -44,10 +63,16 @@ const DateExtensionsPage = () => {
4463 isOpen = { isModalOpen }
4564 message = { intl . formatMessage ( messages . resetConfirmationMessage ) }
4665 title = { intl . formatMessage ( messages . resetConfirmationHeader , { username : selectedUser ?. username } ) }
47- onCancelReset = { handleCancelReset }
48- onClose = { handleCancelReset }
66+ onCancelReset = { handleCloseModal }
67+ onClose = { handleCloseModal }
4968 onConfirmReset = { handleConfirmReset }
5069 />
70+ < Toast show = { ! ! successMessage } onClose = { ( ) => { } } className = "text-break" >
71+ { successMessage }
72+ </ Toast >
73+ < AlertModal isOpen = { ! ! errorMessage } footerNode = { < Button onClick = { ( ) => setErrorMessage ( '' ) } > { intl . formatMessage ( messages . close ) } </ Button > } >
74+ { errorMessage }
75+ </ AlertModal >
5176 </ Container >
5277 ) ;
5378} ;
0 commit comments