import type React from "react";
import { useEffect } from "react";
import { Modal, type ModalProps, Platform } from "react-native";
interface FullScreenModalProps extends ModalProps {
visible: boolean;
onRequestClose: () => void;
children: React.ReactNode;
}
/**
* A modal wrapper that expands the browser extension iframe to full screen
* when running in the web platform (browser extension).
*
* For mobile platforms, it behaves like a regular Modal.
*/
export function FullScreenModal({
visible,
onRequestClose,
children,
...modalProps
}: FullScreenModalProps) {
useEffect(() => {
// Only send expand/collapse messages on web platform (browser extension)
if (Platform.OS !== "web") {
return;
}
if (visible) {
// Expand the iframe to full width when modal opens
window.parent.postMessage({ type: "cal-companion-expand" }, "*");
} else {
// Collapse the iframe back to 400px when modal closes
window.parent.postMessage({ type: "cal-companion-collapse" }, "*");
}
// Cleanup: collapse on unmount if still visible
return () => {
if (visible && Platform.OS === "web") {
window.parent.postMessage({ type: "cal-companion-collapse" }, "*");
}
};
}, [visible]);
// For non-web platforms, just use the regular Modal
if (Platform.OS !== "web") {
return (
{children}
);
}
// For web platform (browser extension), use the modal with full-screen behavior
return (
{children}
);
}