From 6cecc38e85a766b589c80e98bd6ffddf0f03f902 Mon Sep 17 00:00:00 2001 From: ahtesham-quraish Date: Wed, 16 Aug 2023 12:23:07 +0500 Subject: [PATCH] feat: add recommendations modal Description: Add recommendations buttons and modal for painted door experiment VAN-1601 --- src/components/ModalView/index.jsx | 60 +++++++++++++++++++ src/components/ModalView/messages.js | 31 ++++++++++ .../CollapsedHeader/CollapseMenuBody.jsx | 17 +++++- .../CollapseMenuBody.test.jsx.snap | 20 +++++++ .../CollapsedHeader/index.jsx | 9 ++- .../ExpandedHeader/index.jsx | 12 +++- .../LearnerDashboardHeader/messages.js | 5 ++ .../RecommendationsPanel/LoadedView.jsx | 59 +++++++++--------- src/widgets/RecommendationsPanel/messages.js | 5 ++ 9 files changed, 183 insertions(+), 35 deletions(-) create mode 100644 src/components/ModalView/index.jsx create mode 100644 src/components/ModalView/messages.js diff --git a/src/components/ModalView/index.jsx b/src/components/ModalView/index.jsx new file mode 100644 index 0000000..7823ff8 --- /dev/null +++ b/src/components/ModalView/index.jsx @@ -0,0 +1,60 @@ +import React from 'react'; +import PropTypes from 'prop-types'; + +import { ModalDialog, ActionRow, Button } from '@edx/paragon'; +import { useIntl } from '@edx/frontend-platform/i18n'; +import messages from './messages'; + +export const ModalView = ({ + isOpen, + onClose, +}) => { + const { formatMessage } = useIntl(); + + const handleClose = () => { + onClose(false); + }; + return ( +
+ + + +

{formatMessage(messages.recommendationsModalHeading)}

+
+
+ +
+

{formatMessage(messages.recommendationsFeatureText)}

+

{formatMessage(messages.recommendationsAlertedText)}

+
+
+ + + + {formatMessage(messages.modalSkipButton)} + + + + +
+
+ ); +}; + +ModalView.defaultProps = { + isOpen: false, + onClose: () => {}, +}; + +ModalView.propTypes = { + onClose: PropTypes.func, + isOpen: PropTypes.bool, +}; + +export default ModalView; diff --git a/src/components/ModalView/messages.js b/src/components/ModalView/messages.js new file mode 100644 index 0000000..2c21217 --- /dev/null +++ b/src/components/ModalView/messages.js @@ -0,0 +1,31 @@ +import { defineMessages } from '@edx/frontend-platform/i18n'; + +const messages = defineMessages({ + recommendationsFeatureText: { + id: 'RecommendationsPanel.recommendationsFeatureText', + defaultMessage: 'Personalized recommendations feature is not yet available. We are working hard on bringing it to your learner home in the near future.', + description: 'recommendations feature text', + }, + recommendationsAlertedText: { + id: 'RecommendationsPanel.recommendationsAlertedText', + defaultMessage: 'Would you like to be alerted when it becomes available?', + description: 'recommendations alerted text', + }, + recommendationsModalHeading: { + id: 'RecommendationsPanel.recommendationsModalHeading', + defaultMessage: 'Thank you for your interest!', + description: 'Heading of modal', + }, + modalSkipButton: { + id: 'RecommendationsPanel.modalSkipButton', + defaultMessage: 'Skip for now', + description: 'button for Skip for now', + }, + modalCountMeButton: { + id: 'RecommendationsPanel.modalCountMeButton', + defaultMessage: 'Count me in!', + description: 'button for Count me in!', + }, +}); + +export default messages; diff --git a/src/containers/LearnerDashboardHeader/CollapsedHeader/CollapseMenuBody.jsx b/src/containers/LearnerDashboardHeader/CollapsedHeader/CollapseMenuBody.jsx index 3736c26..4792d60 100644 --- a/src/containers/LearnerDashboardHeader/CollapsedHeader/CollapseMenuBody.jsx +++ b/src/containers/LearnerDashboardHeader/CollapsedHeader/CollapseMenuBody.jsx @@ -12,9 +12,10 @@ import { reduxHooks } from 'hooks'; import { findCoursesNavDropdownClicked } from '../hooks'; +import ModalView from '../../../components/ModalView'; import messages from '../messages'; -export const CollapseMenuBody = ({ isOpen }) => { +export const CollapseMenuBody = ({ isOpen, isRecommendationModalOpen, setRecommendationModal }) => { const { formatMessage } = useIntl(); const { authenticatedUser } = React.useContext(AppContext); @@ -40,6 +41,12 @@ export const CollapseMenuBody = ({ isOpen }) => { > {formatMessage(messages.discoverNew)} + @@ -92,6 +99,7 @@ export const CollapseMenuBody = ({ isOpen }) => { )} + ) ); @@ -99,6 +107,13 @@ export const CollapseMenuBody = ({ isOpen }) => { CollapseMenuBody.propTypes = { isOpen: PropTypes.bool.isRequired, + isRecommendationModalOpen: PropTypes.bool, + setRecommendationModal: PropTypes.func, +}; + +CollapseMenuBody.defaultProps = { + isRecommendationModalOpen: false, + setRecommendationModal: () => {}, }; export default CollapseMenuBody; diff --git a/src/containers/LearnerDashboardHeader/CollapsedHeader/__snapshots__/CollapseMenuBody.test.jsx.snap b/src/containers/LearnerDashboardHeader/CollapsedHeader/__snapshots__/CollapseMenuBody.test.jsx.snap index c7694e8..e41f29d 100644 --- a/src/containers/LearnerDashboardHeader/CollapsedHeader/__snapshots__/CollapseMenuBody.test.jsx.snap +++ b/src/containers/LearnerDashboardHeader/CollapsedHeader/__snapshots__/CollapseMenuBody.test.jsx.snap @@ -26,6 +26,12 @@ exports[`CollapseMenuBody render 1`] = ` > Discover New + + `; @@ -92,6 +102,12 @@ exports[`CollapseMenuBody render unauthenticated 1`] = ` > Discover New + + `; diff --git a/src/containers/LearnerDashboardHeader/CollapsedHeader/index.jsx b/src/containers/LearnerDashboardHeader/CollapsedHeader/index.jsx index f8465b3..6057eb0 100644 --- a/src/containers/LearnerDashboardHeader/CollapsedHeader/index.jsx +++ b/src/containers/LearnerDashboardHeader/CollapsedHeader/index.jsx @@ -1,4 +1,4 @@ -import React from 'react'; +import React, { useState } from 'react'; import { useIntl } from '@edx/frontend-platform/i18n'; import { Menu, Close } from '@edx/paragon/icons'; @@ -15,6 +15,7 @@ export const CollapsedHeader = () => { const { formatMessage } = useIntl(); const isCollapsed = useIsCollapsed(); const { isOpen, toggleIsOpen } = useLearnerDashboardHeaderData(); + const [isRecommendationModalOpen, setRecommendationModal] = useState(false); return ( isCollapsed && ( @@ -36,7 +37,11 @@ export const CollapsedHeader = () => { /> - + ) ); diff --git a/src/containers/LearnerDashboardHeader/ExpandedHeader/index.jsx b/src/containers/LearnerDashboardHeader/ExpandedHeader/index.jsx index dccb045..464ccb5 100644 --- a/src/containers/LearnerDashboardHeader/ExpandedHeader/index.jsx +++ b/src/containers/LearnerDashboardHeader/ExpandedHeader/index.jsx @@ -1,4 +1,4 @@ -import React from 'react'; +import React, { useState } from 'react'; import { getConfig } from '@edx/frontend-platform'; import { useIntl } from '@edx/frontend-platform/i18n'; @@ -11,12 +11,14 @@ import AuthenticatedUserDropdown from './AuthenticatedUserDropdown'; import { useIsCollapsed, findCoursesNavClicked } from '../hooks'; import messages from '../messages'; +import ModalView from '../../../components/ModalView'; import BrandLogo from '../BrandLogo'; export const ExpandedHeader = () => { const { formatMessage } = useIntl(); const { courseSearchUrl } = reduxHooks.usePlatformSettingsData(); const isCollapsed = useIsCollapsed(); + const [isRecommendationModalOpen, setRecommendationModal] = useState(false); const exploreCoursesClick = findCoursesNavClicked(urls.baseAppUrl(courseSearchUrl)); @@ -51,6 +53,13 @@ export const ExpandedHeader = () => { > {formatMessage(messages.discoverNew)} + + -
- -
- + + ); }; diff --git a/src/widgets/RecommendationsPanel/messages.js b/src/widgets/RecommendationsPanel/messages.js index 69bedd4..6422d24 100644 --- a/src/widgets/RecommendationsPanel/messages.js +++ b/src/widgets/RecommendationsPanel/messages.js @@ -16,6 +16,11 @@ const messages = defineMessages({ defaultMessage: 'Explore courses', description: 'Button to explore more courses on recommendations panel', }, + seeAllRecommendationsButton: { + id: 'RecommendationsPanel.seeAllRecommendationsButton', + defaultMessage: 'See All Recommendations', + description: 'Button to see all recommendations', + }, }); export default messages;