Files
lnd-andal-uiux/src/courseware/course/sequence/Unit/hooks/useModalIFrameData.js
2025-07-28 12:12:32 -04:00

38 lines
994 B
JavaScript

import React from 'react';
import { useEventListener } from '@src/generic/hooks';
export const DEFAULT_HEIGHT = '100%';
const useModalIFrameData = () => {
const [isOpen, setIsOpen] = React.useState(false);
const [options, setOptions] = React.useState({ height: DEFAULT_HEIGHT });
const handleModalClose = () => {
const rootFrame = document.querySelector('iframe');
setIsOpen(false);
rootFrame.contentWindow.postMessage({ type: 'plugin.modal-close' }, '*');
};
const receiveMessage = React.useCallback((event) => {
const { type, payload } = event.data;
if (!type) {
return;
}
if (type === 'plugin.modal') {
setOptions((current) => ({ ...current, ...payload }));
setIsOpen(true);
}
if (type === 'plugin.modal-close') {
handleModalClose();
}
}, []);
useEventListener('message', receiveMessage);
return {
handleModalClose,
modalOptions: { isOpen, ...options },
};
};
export default useModalIFrameData;