@@ -33,6 +33,7 @@ import {
3333import { Document , Page , pdfjs , Thumbnail } from "react-pdf" ;
3434import "react-pdf/dist/Page/AnnotationLayer.css" ;
3535import "react-pdf/dist/Page/TextLayer.css" ;
36+ import { useHistory } from "react-router-dom" ;
3637import ActivityAPIClient from "../../APIClients/ActivityAPIClient" ;
3738import CourseAPIClient from "../../APIClients/CourseAPIClient" ;
3839import UserAPIClient from "../../APIClients/UserAPIClient" ;
@@ -58,6 +59,7 @@ import {
5859 HeaderColumnIncludesTypes ,
5960 Media ,
6061 QuestionType ,
62+ ModuleStatus ,
6163} from "../../types/CourseTypes" ;
6264import { Bookmark } from "../../types/UserTypes" ;
6365import { padNumber } from "../../utils/StringUtils" ;
@@ -85,6 +87,7 @@ import NeedHelpModal from "../help/NeedHelpModal";
8587import DeletePageModal from "./DeletePageModal" ;
8688import "./ViewModulePage.css" ;
8789import { useCourseUnits } from "../../contexts/CourseUnitsContext" ;
90+ import EditPublishedModuleModal from "../course_viewing/modals/EditPublishedModuleModal" ;
8891
8992pdfjs . GlobalWorkerOptions . workerSrc = new URL (
9093 "pdfjs-dist/build/pdf.worker.min.mjs" ,
@@ -102,6 +105,7 @@ const ViewModulePage = () => {
102105 const requestedPageId = queryParams . get ( "pageId" ) || "" ;
103106 const requestedUnitId = queryParams . get ( "unitId" ) || "" ;
104107 const { role } = useUser ( ) ;
108+ const history = useHistory ( ) ;
105109
106110 const [ currentPage , setCurrentPage ] = useState ( 0 ) ;
107111 const [ isFullScreen , setIsFullScreen ] = useState ( false ) ;
@@ -124,6 +128,8 @@ const ViewModulePage = () => {
124128 const currentPageObject = module ?. pages [ currentPage ] ;
125129 const thumbnailRefs = useRef < ( HTMLDivElement | null ) [ ] > ( [ ] ) ;
126130 const numPages = module ?. pages . length || 0 ;
131+ const [ editPublishedModuleModalOpen , setEditPublishedModuleModalOpen ] =
132+ useState ( false ) ;
127133
128134 const isFeedbackSurveyPage = role === "Learner" && currentPage === numPages ;
129135 const isEmptyModuleEditing =
@@ -164,8 +170,22 @@ const ViewModulePage = () => {
164170 const fetchedModule = await CourseAPIClient . getModuleById (
165171 requestedModuleId ,
166172 ) ;
173+ if (
174+ fetchedModule ?. status === ModuleStatus . unpublished &&
175+ role === "Learner"
176+ ) {
177+ // eslint-disable-next-line no-alert
178+ alert ( "This module is not published yet. Please check back later!" ) ;
179+ history . replace ( `${ COURSE_PAGE } ?unitId=${ requestedUnitId } ` ) ;
180+ }
181+ if (
182+ fetchedModule ?. status === ModuleStatus . published &&
183+ role === "Administrator"
184+ ) {
185+ setEditPublishedModuleModalOpen ( true ) ;
186+ }
167187 return fetchedModule ;
168- } , [ requestedModuleId ] ) ;
188+ } , [ history , requestedModuleId , requestedUnitId , role ] ) ;
169189
170190 const { courseUnits : allUnits } = useCourseUnits ( ) ;
171191 const fetchUnit = useCallback ( async ( ) => {
@@ -449,6 +469,10 @@ const ViewModulePage = () => {
449469 return ( ) => window . removeEventListener ( "resize" , handleResize ) ;
450470 } , [ handleResize , isFullScreen , lessonPageHeight ] ) ;
451471
472+ const activityPageScale = isFullScreen
473+ ? getPageScale ( activityPageHeight , activityPageWidth )
474+ : 1 ;
475+
452476 const isCurrentPageBookmarked = useMemo ( ( ) => {
453477 if ( ! module ?. pages [ currentPage ] ) return false ;
454478 const pageId = module . pages [ currentPage ] . id ;
@@ -980,11 +1004,7 @@ const ViewModulePage = () => {
9801004 justifyContent = "center"
9811005 alignItems = "center"
9821006 sx = { {
983- transform : `scale(${
984- isFullScreen
985- ? getPageScale ( activityPageHeight , activityPageWidth )
986- : 1
987- } )`,
1007+ transform : `scale(${ activityPageScale } )` ,
9881008 } }
9891009 ref = { activityPageRef }
9901010 >
@@ -1040,10 +1060,7 @@ const ViewModulePage = () => {
10401060 onCorrectAnswer = { onCorrectAnswer }
10411061 key = { activity . id }
10421062 ref = { activityViewerRef }
1043- scale = { getPageScale (
1044- activityPageHeight ,
1045- activityPageWidth ,
1046- ) }
1063+ scale = { activityPageScale }
10471064 />
10481065 ) ) }
10491066 </ Box >
@@ -1492,6 +1509,29 @@ const ViewModulePage = () => {
14921509 }
14931510 />
14941511 </ Snackbar >
1512+ < EditPublishedModuleModal
1513+ openEditPublishedModuleModal = { editPublishedModuleModalOpen }
1514+ handleCloseEditPublishedModuleModal = { ( ) =>
1515+ setEditPublishedModuleModalOpen ( false )
1516+ }
1517+ unpublishModuleAndEdit = { async ( ) => {
1518+ if ( module ) {
1519+ const updatedModule = await CourseAPIClient . unpublishModule (
1520+ module ?. id ,
1521+ ) ;
1522+ if (
1523+ updatedModule &&
1524+ updatedModule . status === ModuleStatus . unpublished
1525+ ) {
1526+ setModule ( {
1527+ ...module ,
1528+ status : updatedModule . status ,
1529+ } ) ;
1530+ setEditPublishedModuleModalOpen ( false ) ;
1531+ }
1532+ }
1533+ } }
1534+ />
14951535 </ >
14961536 ) ;
14971537} ;
0 commit comments