diff --git a/.env b/.env index eb423b5c8c..55688ba004 100644 --- a/.env +++ b/.env @@ -47,3 +47,4 @@ ENABLE_GRADING_METHOD_IN_PROBLEMS=false LIBRARY_UNSUPPORTED_BLOCKS="conditional,step-builder,problem-builder" # Fallback in local style files PARAGON_THEME_URLS={} +COURSE_TEAM_SUPPORT_EMAIL='' diff --git a/.env.development b/.env.development index 4d3c937e56..f634640c1c 100644 --- a/.env.development +++ b/.env.development @@ -50,3 +50,4 @@ ENABLE_GRADING_METHOD_IN_PROBLEMS=false LIBRARY_UNSUPPORTED_BLOCKS="conditional,step-builder,problem-builder" # Fallback in local style files PARAGON_THEME_URLS={} +COURSE_TEAM_SUPPORT_EMAIL='' diff --git a/.env.test b/.env.test index 2f66ab211f..20914c0550 100644 --- a/.env.test +++ b/.env.test @@ -42,3 +42,4 @@ ENABLE_GRADING_METHOD_IN_PROBLEMS=false # "Multi-level" blocks are unsupported in libraries LIBRARY_UNSUPPORTED_BLOCKS="conditional,step-builder,problem-builder" PARAGON_THEME_URLS= +COURSE_TEAM_SUPPORT_EMAIL='support@example.com' diff --git a/src/course-team/course-team-sidebar/CourseTeamSideBar.test.jsx b/src/course-team/course-team-sidebar/CourseTeamSideBar.test.jsx index daab5fb7e0..746d9c3458 100644 --- a/src/course-team/course-team-sidebar/CourseTeamSideBar.test.jsx +++ b/src/course-team/course-team-sidebar/CourseTeamSideBar.test.jsx @@ -21,6 +21,20 @@ describe('', () => { expect(getByText(messages.sidebarAbout_3.defaultMessage)).toBeInTheDocument(); }); + it('renders CourseTeamSidebar component based on support email variable', () => { + const { getByText } = renderComponent(); + const courseTeamSupportEmail = process.env.COURSE_TEAM_SUPPORT_EMAIL; + + if (courseTeamSupportEmail) { + expect(getByText(messages.helpInfoSidebarTitle.defaultMessage)).toBeInTheDocument(); + expect(getByText(courseTeamSupportEmail)).toBeInTheDocument(); + expect(getByText(/to add, remove, or update user access in bulk\./i)).toBeInTheDocument(); + } else { + expect(getByText(messages.helpInfoSidebarTitle.defaultMessage)).not.toBeInTheDocument(); + expect(getByText(/to add, remove, or update user access in bulk\./i)).not.toBeInTheDocument(); + } + }); + it('render CourseTeamSidebar when isOwnershipHint is true', () => { const { getByText } = renderComponent({ isOwnershipHint: true }); diff --git a/src/course-team/course-team-sidebar/CourseTeamSidebar.jsx b/src/course-team/course-team-sidebar/CourseTeamSidebar.jsx index 2b7f42c457..cfad54444d 100644 --- a/src/course-team/course-team-sidebar/CourseTeamSidebar.jsx +++ b/src/course-team/course-team-sidebar/CourseTeamSidebar.jsx @@ -1,12 +1,14 @@ import React from 'react'; import PropTypes from 'prop-types'; import { useIntl } from '@edx/frontend-platform/i18n'; - +import { Icon, MailtoLink } from '@openedx/paragon'; +import { InfoOutline } from '@openedx/paragon/icons'; import { HelpSidebar } from '../../generic/help-sidebar'; import messages from './messages'; const CourseTeamSideBar = ({ courseId, isOwnershipHint, isShowInitialSidebar }) => { const intl = useIntl(); + const courseTeamSupportEmail = process.env.COURSE_TEAM_SUPPORT_EMAIL; return (
{intl.formatMessage(messages.sidebarAbout_3)}

+ {courseTeamSupportEmail && ( + <> +

+ + + + {intl.formatMessage(messages.helpInfoSidebarTitle)} +

+

+ {intl.formatMessage(messages.helpInfoDescription, { + email_address: ( + + {courseTeamSupportEmail} + + ), + })} +

+ + )} {isOwnershipHint && ( <> diff --git a/src/course-team/course-team-sidebar/messages.js b/src/course-team/course-team-sidebar/messages.js index a1934c19b2..1a61477f1c 100644 --- a/src/course-team/course-team-sidebar/messages.js +++ b/src/course-team/course-team-sidebar/messages.js @@ -25,6 +25,14 @@ const messages = defineMessages({ id: 'course-authoring.course-team.sidebar.ownership.description', defaultMessage: 'Every course must have an Admin. If you are the Admin and you want to transfer ownership of the course, click {strong} to make another user the Admin, then ask that user to remove you from the Course Team list.', }, + helpInfoSidebarTitle: { + id: 'course-authoring.course-team.sidebar.helpInfoSidebarTitle', + defaultMessage: 'Need help across multiple courses?', + }, + helpInfoDescription: { + id: 'course-authoring.course-team.sidebar.helpInfoDescription', + defaultMessage: 'Email {email_address} to add, remove, or update user access in bulk.', + }, addAdminAccess: { id: 'course-authoring.course-team.sidebar.ownership.addAdminAccess', defaultMessage: 'Add admin access', diff --git a/src/index.jsx b/src/index.jsx index 66a8611c0e..620de1d470 100755 --- a/src/index.jsx +++ b/src/index.jsx @@ -173,6 +173,7 @@ initialize({ ENABLE_CHECKLIST_QUALITY: process.env.ENABLE_CHECKLIST_QUALITY || 'true', ENABLE_GRADING_METHOD_IN_PROBLEMS: process.env.ENABLE_GRADING_METHOD_IN_PROBLEMS === 'true', LIBRARY_UNSUPPORTED_BLOCKS: (process.env.LIBRARY_UNSUPPORTED_BLOCKS || 'conditional,step-builder,problem-builder').split(','), + COURSE_TEAM_SUPPORT_EMAIL: process.env.COURSE_TEAM_SUPPORT_EMAIL || null, }, 'CourseAuthoringConfig'); }, }, diff --git a/src/setupTest.js b/src/setupTest.js index bb55d692ff..d138c26a2a 100755 --- a/src/setupTest.js +++ b/src/setupTest.js @@ -49,6 +49,7 @@ mergeConfig({ LMS_BASE_URL: process.env.LMS_BASE_URL || null, LIBRARY_UNSUPPORTED_BLOCKS: (process.env.LIBRARY_UNSUPPORTED_BLOCKS || 'conditional,step-builder,problem-builder').split(','), PARAGON_THEME_URLS: process.env.PARAGON_THEME_URLS || null, + COURSE_TEAM_SUPPORT_EMAIL: process.env.COURSE_TEAM_SUPPORT_EMAIL || null, }, 'CourseAuthoringConfig'); class ResizeObserver {