Skip to content

Commit

Permalink
Merge pull request #913 from openedx/sundass/INF-1086
Browse files Browse the repository at this point in the history
fix: removed extra loader while updating preferences
  • Loading branch information
sundasnoreen12 authored Oct 19, 2023
2 parents 9cccf09 + ced2927 commit ca3bc91
Show file tree
Hide file tree
Showing 4 changed files with 17 additions and 7 deletions.
6 changes: 3 additions & 3 deletions src/notification-preferences/NotificationPreferenceRow.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import {
selectPreference,
selectPreferenceNonEditableChannels,
selectSelectedCourseId,
selectNotificationPreferencesStatus,
selectUpdatePreferencesStatus,
} from './data/selectors';
import NOTIFICATION_CHANNELS from './data/constants';
import { updatePreferenceToggle } from './data/thunks';
Expand All @@ -23,7 +23,7 @@ const NotificationPreferenceRow = ({ appId, preferenceName }) => {
const courseId = useSelector(selectSelectedCourseId());
const preference = useSelector(selectPreference(appId, preferenceName));
const nonEditable = useSelector(selectPreferenceNonEditableChannels(appId, preferenceName));
const preferencesStatus = useSelector(selectNotificationPreferencesStatus());
const updatePreferencesStatus = useSelector(selectUpdatePreferencesStatus());

const onToggle = useCallback((event) => {
const {
Expand Down Expand Up @@ -77,7 +77,7 @@ const NotificationPreferenceRow = ({ appId, preferenceName }) => {
name={channel}
value={preference[channel]}
onChange={onToggle}
disabled={nonEditable.includes(channel) || preferencesStatus === LOADING_STATUS}
disabled={nonEditable.includes(channel) || updatePreferencesStatus === LOADING_STATUS}
/>
</div>
))}
Expand Down
5 changes: 4 additions & 1 deletion src/notification-preferences/data/reducers.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ export const defaultState = {
},
preferences: {
status: IDLE_STATUS,
updatePreferenceStatus: IDLE_STATUS,
selectedCourse: null,
preferences: [],
apps: [],
Expand Down Expand Up @@ -70,6 +71,7 @@ const notificationPreferencesReducer = (state = defaultState, action = {}) => {
preferences: {
...state.preferences,
status: SUCCESS_STATUS,
updatePreferenceStatus: SUCCESS_STATUS,
...action.payload,
},
};
Expand All @@ -79,6 +81,7 @@ const notificationPreferencesReducer = (state = defaultState, action = {}) => {
preferences: {
...state.preferences,
status: FAILURE_STATUS,
updatePreferenceStatus: FAILURE_STATUS,
preferences: [],
apps: [],
nonEditable: {},
Expand All @@ -102,7 +105,7 @@ const notificationPreferencesReducer = (state = defaultState, action = {}) => {
? { ...preference, [notificationChannel]: value }
: preference
)),
status: LOADING_STATUS,
updatePreferenceStatus: LOADING_STATUS,
},
};
case Actions.UPDATE_APP_PREFERENCE:
Expand Down
9 changes: 6 additions & 3 deletions src/notification-preferences/data/reducers.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import {
FAILURE_STATUS,
LOADING_STATUS,
SUCCESS_STATUS,
IDLE_STATUS,
} from '../../constants';

describe('notification-preferences reducer', () => {
Expand Down Expand Up @@ -80,15 +81,16 @@ describe('notification-preferences reducer', () => {
);
expect(result.preferences).toEqual({
status: SUCCESS_STATUS,
updatePreferenceStatus: SUCCESS_STATUS,
selectedCourse: null,
...preferenceData,
});
});

test.each([
{ action: Actions.FETCHING_PREFERENCES, status: LOADING_STATUS },
{ action: Actions.FAILED_PREFERENCES, status: FAILURE_STATUS },
])('preferences are empty when api call is %s', ({ action, status }) => {
{ action: Actions.FETCHING_PREFERENCES, status: LOADING_STATUS, updatePreferenceStatus: IDLE_STATUS },
{ action: Actions.FAILED_PREFERENCES, status: FAILURE_STATUS, updatePreferenceStatus: FAILURE_STATUS },
])('preferences are empty when api call is %s', ({ action, status, updatePreferenceStatus }) => {
const result = reducer(
state,
{ type: action },
Expand All @@ -99,6 +101,7 @@ describe('notification-preferences reducer', () => {
preferences: [],
apps: [],
nonEditable: {},
updatePreferenceStatus,
});
});

Expand Down
4 changes: 4 additions & 0 deletions src/notification-preferences/data/selectors.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,10 @@ export const selectNotificationPreferencesStatus = () => state => (
state.notificationPreferences.preferences.status
);

export const selectUpdatePreferencesStatus = () => state => (
state.notificationPreferences.preferences.updatePreferenceStatus
);

export const selectPreferences = () => state => (
state.notificationPreferences.preferences?.preferences
);
Expand Down

0 comments on commit ca3bc91

Please sign in to comment.