diff --git a/src/editors/AdvancedEditor.tsx b/src/editors/AdvancedEditor.tsx index 09a368c04..b73f76d66 100644 --- a/src/editors/AdvancedEditor.tsx +++ b/src/editors/AdvancedEditor.tsx @@ -1,7 +1,16 @@ import React, { useEffect } from 'react'; import { getConfig } from '@edx/frontend-platform'; import { useIntl } from '@edx/frontend-platform/i18n'; -import { useToggle } from '@openedx/paragon'; +import { + ActionRow, + Icon, + IconButton, + ModalDialog, + ModalCloseButton, + Stack, + useToggle, +} from '@openedx/paragon'; +import { Close, CloseFullscreen, OpenInFull } from '@openedx/paragon/icons'; import { LibraryBlock } from '../library-authoring/LibraryBlock'; import { EditorModalWrapper } from './containers/EditorContainer'; @@ -11,6 +20,8 @@ import messages from './messages'; import CancelConfirmModal from './containers/EditorContainer/components/CancelConfirmModal'; import { IframeProvider } from '../generic/hooks/context/iFrameContext'; +import editorModalWrapperMessages from './containers/EditorContainer/messages'; + interface AdvancedEditorProps { usageKey: string, onClose: (() => void) | null, @@ -20,6 +31,7 @@ const AdvancedEditor = ({ usageKey, onClose }: AdvancedEditorProps) => { const intl = useIntl(); const { showToast } = React.useContext(ToastContext); const [isCancelConfirmOpen, openCancelConfirmModal, closeCancelConfirmModal] = useToggle(false); + const [isFullscreen, , , toggleFullscreen] = useToggle(false); useEffect(() => { const handleIframeMessage = (event) => { @@ -49,7 +61,28 @@ const AdvancedEditor = ({ usageKey, onClose }: AdvancedEditorProps) => { return ( <> - + + + + + {intl.formatMessage(editorModalWrapperMessages.modalTitle)} + + + + + + + + void }> = ({ children, onClose }) => { +export const EditorModalWrapper: React.FC void, fullscreen?: boolean }> = ( + { + children, + onClose, + fullscreen = false, + }, +) => { const intl = useIntl(); const title = intl.formatMessage(messages.modalTitle); return ( - {children} + + {children} + ); }; -export const EditorModalBody: React.FC = ({ children }) => { children }; +export const EditorModalBody: React.FC = ({ children }) => {children}; // eslint-disable-next-line react/jsx-no-useless-fragment -export const FooterWrapper: React.FC = ({ children }) => <>{ children }; +export const FooterWrapper: React.FC = ({ children }) => <>{children}; interface Props extends EditorComponent { children: React.ReactNode; @@ -63,6 +81,7 @@ const EditorContainer: React.FC = ({ const [saved, setSaved] = React.useState(false); const isInitialized = hooks.isInitialized(); const { isCancelConfirmOpen, openCancelConfirmModal, closeCancelConfirmModal } = hooks.cancelConfirmModalToggle(); + const [isFullscreen, , , toggleFullscreen] = useToggle(false); const handleCancel = hooks.handleCancel({ onClose, returnFunction }); const { createFailed, createFailedError } = hooks.createFailed(); const disableSave = !isInitialized; @@ -97,8 +116,9 @@ const EditorContainer: React.FC = ({ handleCancel(); } }; + return ( - + {createFailed && ( {parseErrorMsg( @@ -127,15 +147,27 @@ const EditorContainer: React.FC = ({ />
-

- -

- + +

+ +

+ + + + + +
diff --git a/src/editors/containers/EditorContainer/messages.ts b/src/editors/containers/EditorContainer/messages.ts index f9dc2fd15..66d510dd6 100644 --- a/src/editors/containers/EditorContainer/messages.ts +++ b/src/editors/containers/EditorContainer/messages.ts @@ -1,7 +1,6 @@ import { defineMessages } from '@edx/frontend-platform/i18n'; const messages = defineMessages({ - cancelConfirmTitle: { id: 'authoring.editorContainer.cancelConfirm.title', defaultMessage: 'Exit the editor?', @@ -57,6 +56,11 @@ const messages = defineMessages({ defaultMessage: 'Save', description: 'Label for Save button', }, + toggleFullscreenButtonLabel: { + id: 'authoring.editorHeader.toggleFullscreen.label', + defaultMessage: 'Toggle Fullscreen', + description: 'Label for toggle fullscreen button', + }, }); export default messages; diff --git a/src/editors/messages.ts b/src/editors/messages.ts index 69cf26d68..e4e3e39cc 100644 --- a/src/editors/messages.ts +++ b/src/editors/messages.ts @@ -36,6 +36,11 @@ const messages = defineMessages({ defaultMessage: 'An unexpected error occurred in the editor', description: 'Generic error message shown when an error occurs in the Advanced Editor.', }, + advancedEditorFullscreenButtonAlt: { + id: 'authoring.advancedEditor.fullscreenButton.alt', + defaultMessage: 'Toggle Fullscreen', + description: 'Alt text for the Fullscreen button', + }, }); export default messages; diff --git a/src/generic/modal-iframe/index.tsx b/src/generic/modal-iframe/index.tsx index f6a57155c..051a7e43c 100644 --- a/src/generic/modal-iframe/index.tsx +++ b/src/generic/modal-iframe/index.tsx @@ -20,7 +20,11 @@ export const SANDBOX_OPTIONS = [ ].join(' '); const ModalIframe = forwardRef( - ({ title, className, ...props }, ref: ForwardedRef) => ( + ({ + title, + className = '', + ...props + }, ref: ForwardedRef) => (