From 37aabc4948c9cbfb6af19f42d6acbea5cface75a Mon Sep 17 00:00:00 2001 From: sundasnoreen12 <72802712+sundasnoreen12@users.noreply.github.com> Date: Fri, 22 Sep 2023 16:58:49 +0500 Subject: [PATCH] fix: update toggle state based on api response (#604) * fix: update toggle state based on api response * refactor: added statefulbutton instead of button --------- Co-authored-by: SundasNoreen --- .../discussions/app-list/AppList.jsx | 38 ++++++++++++------- .../discussions/app-list/AppList.test.jsx | 2 +- .../discussions/app-list/messages.js | 5 +++ 3 files changed, 30 insertions(+), 15 deletions(-) diff --git a/src/pages-and-resources/discussions/app-list/AppList.jsx b/src/pages-and-resources/discussions/app-list/AppList.jsx index 122a6e38c..9db10b700 100644 --- a/src/pages-and-resources/discussions/app-list/AppList.jsx +++ b/src/pages-and-resources/discussions/app-list/AppList.jsx @@ -3,15 +3,14 @@ import React, { } from 'react'; import { injectIntl, intlShape } from '@edx/frontend-platform/i18n'; import { - CardGrid, Container, breakpoints, Form, ActionRow, AlertModal, Button, + CardGrid, Container, breakpoints, Form, ActionRow, AlertModal, Button, StatefulButton, } from '@edx/paragon'; import { useDispatch, useSelector } from 'react-redux'; import Responsive from 'react-responsive'; import { getAuthenticatedUser } from '@edx/frontend-platform/auth'; import { useModels } from '../../../generic/model-store'; import { - selectApp, LOADED, LOADING, - updateValidationStatus, + selectApp, LOADED, LOADING, SAVING, updateValidationStatus, } from '../data/slice'; import AppCard from './AppCard'; import messages from './messages'; @@ -27,9 +26,9 @@ const AppList = ({ intl }) => { const dispatch = useDispatch(); const { courseId } = useContext(PagesAndResourcesContext); const { - appIds, featureIds, status, activeAppId, selectedAppId, enabled, postingRestrictions, + appIds, featureIds, status, saveStatus, activeAppId, selectedAppId, enabled, postingRestrictions, } = useSelector(state => state.discussions); - const [discussionEnabled, setDiscussionEnabled] = useState(enabled); + const [discussionTabToggle, setDiscussionTabToggle] = useState(enabled); const apps = useModels('apps', appIds); const features = useModels('features', featureIds); const isGlobalStaff = getAuthenticatedUser().administrator; @@ -54,7 +53,7 @@ const AppList = ({ intl }) => { }, [selectedAppId, activeAppId]); useEffect(() => { - setDiscussionEnabled(enabled); + setDiscussionTabToggle(enabled); }, [enabled]); useEffect(() => { @@ -80,19 +79,20 @@ const AppList = ({ intl }) => { }, [courseId, selectedAppId, postingRestrictions]); const handleClose = useCallback(() => { - setDiscussionEnabled(enabled); + setDiscussionTabToggle(enabled); }, [enabled]); const handleOk = useCallback(() => { - setDiscussionEnabled(false); + setDiscussionTabToggle(false); updateSettings(false); }, [updateSettings]); const handleChange = useCallback((e) => { const toggleVal = e.target.checked; - setDiscussionEnabled(!toggleVal); if (!toggleVal) { updateSettings(!toggleVal); + } else { + setDiscussionTabToggle(!toggleVal); } }, [updateSettings]); @@ -131,10 +131,10 @@ const AppList = ({ intl }) => { className="text-primary-500 align-items-center" labelClassName="line-height-24" onChange={handleChange} - checked={!discussionEnabled} + checked={!enabled} data-testId="hide-discussion" > - Hide discussion tab + {intl.formatMessage(messages.hideDiscussionTab)} { - - + + )} > diff --git a/src/pages-and-resources/discussions/app-list/AppList.test.jsx b/src/pages-and-resources/discussions/app-list/AppList.test.jsx index ccc3fd2e3..cc703f5ec 100644 --- a/src/pages-and-resources/discussions/app-list/AppList.test.jsx +++ b/src/pages-and-resources/discussions/app-list/AppList.test.jsx @@ -79,7 +79,7 @@ describe('AppList', () => { }); test.each([ - { title: 'OK', description: 'Enable the toggle state by clicking on OK button' }, + { title: 'Ok', description: 'Enable the toggle state by clicking on OK button' }, { title: 'Cancel', description: 'Disable the toggle state by clicking on Cancel button' }, ])('%s of the hide discussion tab', async ({ title }) => { renderComponent(); diff --git a/src/pages-and-resources/discussions/app-list/messages.js b/src/pages-and-resources/discussions/app-list/messages.js index 96b882e3c..ca4dc0742 100644 --- a/src/pages-and-resources/discussions/app-list/messages.js +++ b/src/pages-and-resources/discussions/app-list/messages.js @@ -239,6 +239,11 @@ const messages = defineMessages({ defaultMessage: 'Commonly requested', description: 'The type of a discussions feature.', }, + hideDiscussionTab: { + id: 'authoring.discussions.hide-discussion-tab', + defaultMessage: 'Hide discussion tab', + description: 'Title message to hide discussion tab', + }, hideDiscussionTabTitle: { id: 'authoring.discussions.hide-tab-title', defaultMessage: 'Hide the discussion tab?',