@@ -9,6 +9,7 @@ import { useMemo } from 'react';
99import configureMessages from '@src/generic/configure-modal/messages' ;
1010import messages from './messages' ;
1111import { useConfigureUnit } from '@src/course-outline/data/apiHooks' ;
12+ import { useStateWithCallback } from '@src/hooks' ;
1213
1314interface UnitInfoSettingsProps {
1415 id : string ;
@@ -60,6 +61,18 @@ export const GenericUnitInfoSettings = (props: UnitInfoSettingsProps) => {
6061 } ) ;
6162 } ;
6263
64+ const [ localState , setLocalState ] = useStateWithCallback < {
65+ isVisible ?: boolean ;
66+ isDiscussionEnabled ?: boolean ;
67+ } > ( {
68+ isVisible : visibleToStaffOnly ,
69+ isDiscussionEnabled : discussionEnabled ,
70+ } , ( val ) => {
71+ if ( val ) {
72+ handleUpdate ( ! ! val . isVisible , null , val . isDiscussionEnabled ) ;
73+ }
74+ } ) ;
75+
6376 const handleSaveGroups = async ( data : {
6477 selectedPartitionIndex : number ;
6578 selectedGroups : any [ ] ;
@@ -100,14 +113,14 @@ export const GenericUnitInfoSettings = (props: UnitInfoSettingsProps) => {
100113 >
101114 < ButtonGroup toggle >
102115 < Button
103- variant = { visibleToStaffOnly ? 'outline-primary' : 'primary' }
104- onClick = { ( ) => handleUpdate ( false , null , discussionEnabled ) }
116+ variant = { localState ?. isVisible ? 'outline-primary' : 'primary' }
117+ onClick = { ( ) => setLocalState ( ( prev ) => ( { ... prev , isVisible : false } ) ) }
105118 >
106119 < FormattedMessage { ...messages . sidebarInfoVisibilityStudentLabel } />
107120 </ Button >
108121 < Button
109- variant = { visibleToStaffOnly ? 'primary' : 'outline-primary' }
110- onClick = { ( ) => handleUpdate ( true , null , discussionEnabled ) }
122+ variant = { localState ?. isVisible ? 'primary' : 'outline-primary' }
123+ onClick = { ( ) => setLocalState ( ( prev ) => ( { ... prev , isVisible : true } ) ) }
111124 >
112125 < FormattedMessage { ...messages . sidebarInfoVisibilityStaffLabel } />
113126 </ Button >
@@ -143,8 +156,11 @@ export const GenericUnitInfoSettings = (props: UnitInfoSettingsProps) => {
143156 title = { intl . formatMessage ( configureMessages . discussionEnabledSectionTitle ) }
144157 >
145158 < DiscussionEditComponent
146- discussionEnabled = { ! ! discussionEnabled }
147- handleDiscussionChange = { ( e ) => handleUpdate ( visibleToStaffOnly , null , e . target . checked ) }
159+ discussionEnabled = { ! ! localState ?. isDiscussionEnabled }
160+ handleDiscussionChange = { ( e ) => setLocalState ( ( prev ) => ( {
161+ ...prev ,
162+ isDiscussionEnabled : e . target . checked ,
163+ } ) ) }
148164 />
149165 </ SidebarSection >
150166 </ SidebarContent >
0 commit comments