Skip to content

Commit 339bc8a

Browse files
committed
refactor: improve response of unit settings
1 parent d7982de commit 339bc8a

1 file changed

Lines changed: 22 additions & 6 deletions

File tree

src/course-unit/unit-sidebar/unit-info/GenericUnitInfoSettings.tsx

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import { useMemo } from 'react';
99
import configureMessages from '@src/generic/configure-modal/messages';
1010
import messages from './messages';
1111
import { useConfigureUnit } from '@src/course-outline/data/apiHooks';
12+
import { useStateWithCallback } from '@src/hooks';
1213

1314
interface 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

Comments
 (0)