From d50df3c0a795a3ced4dcaf8025c86aeea02c479a Mon Sep 17 00:00:00 2001 From: andrey-canon Date: Wed, 1 Oct 2025 16:40:07 -0500 Subject: [PATCH] feat: add Feedback component --- src/course-home/outline-tab/OutlineTab.jsx | 4 ++++ src/course-home/outline-tab/OutlineTab.test.jsx | 4 ++++ src/product-tours/ProductTours.test.jsx | 4 ++++ 3 files changed, 12 insertions(+) diff --git a/src/course-home/outline-tab/OutlineTab.jsx b/src/course-home/outline-tab/OutlineTab.jsx index db33f55fc5..0172644a23 100644 --- a/src/course-home/outline-tab/OutlineTab.jsx +++ b/src/course-home/outline-tab/OutlineTab.jsx @@ -5,6 +5,7 @@ import { sendTrackEvent } from '@edx/frontend-platform/analytics'; import { getAuthenticatedUser } from '@edx/frontend-platform/auth'; import { useIntl } from '@edx/frontend-platform/i18n'; import { Button } from '@openedx/paragon'; +import { FeedbackModal, useProgressStatus } from '@edunext/frontend-essentials'; import { CourseOutlineTabNotificationsSlot } from '../../plugin-slots/CourseOutlineTabNotificationsSlot'; import { AlertList } from '../../generic/user-messages'; @@ -116,6 +117,8 @@ const OutlineTab = () => { } }, [location.search]); + const { isComplete, isGraded, isPassing } = useProgressStatus(courseId); + return ( <>
@@ -186,6 +189,7 @@ const OutlineTab = () => {
)} + ); diff --git a/src/course-home/outline-tab/OutlineTab.test.jsx b/src/course-home/outline-tab/OutlineTab.test.jsx index 39852568b7..2c0ff6d124 100644 --- a/src/course-home/outline-tab/OutlineTab.test.jsx +++ b/src/course-home/outline-tab/OutlineTab.test.jsx @@ -55,6 +55,7 @@ describe('Outline Tab', () => { const masqueradeUrl = `${getConfig().LMS_BASE_URL}/courses/${courseId}/masquerade`; const outlineUrl = `${getConfig().LMS_BASE_URL}/api/course_home/outline/${courseId}`; const proctoringInfoUrl = `${getConfig().EXAMS_BASE_URL}/api/v1/student/course_id/${encodeURIComponent(courseId)}/onboarding?username=MockUser`; + const progressUrl = `${getConfig().LMS_BASE_URL}/api/course_home/progress/${courseId}`; const store = initializeStore(); const defaultMetadata = Factory.build('courseHomeMetadata'); @@ -94,6 +95,9 @@ describe('Outline Tab', () => { onboarding_link: 'test', expiration_date: null, }); + // This will return 404 in order to set the failure behavior and don't set extra + // extra conditions required by the success path. + axiosMock.onGet(progressUrl).reply(404, {}); // Mock courseware search params mockSearchParams(); diff --git a/src/product-tours/ProductTours.test.jsx b/src/product-tours/ProductTours.test.jsx index e65292de31..cf4f725396 100644 --- a/src/product-tours/ProductTours.test.jsx +++ b/src/product-tours/ProductTours.test.jsx @@ -43,6 +43,7 @@ describe('Course Home Tours', () => { const outlineUrl = `${getConfig().LMS_BASE_URL}/api/course_home/outline/${courseId}`; const tourDataUrl = `${getConfig().LMS_BASE_URL}/api/user_tours/v1/MockUser`; const proctoringUrl = `${getConfig().LMS_BASE_URL}/api/edx_proctoring/v1/user_onboarding/status?is_learning_mfe=true&course_id=course-v1%3AedX%2BTest%2Brun&username=MockUser`; + const progressUrl = `${getConfig().LMS_BASE_URL}/api/course_home/progress/${courseId}`; const store = initializeStore(); const defaultTabData = Factory.build('outlineTabData'); @@ -80,6 +81,9 @@ describe('Course Home Tours', () => { course_home_tour_status: 'no-tour', show_courseware_tour: false, }); + // This will return 404 in order to set the failure behavior and don't set extra + // extra conditions required by the success path. + axiosMock.onGet(progressUrl).reply(404, {}); logUnhandledRequests(axiosMock); });