useDisplayMode
The useDisplayMode hook allows you to read and control the display mode of your view. Views can be displayed in three modes: inline, fullscreen, or pip (picture-in-picture).
Basic usage
Section titled “Basic usage”import { useDisplayMode } from "@usefractal/frac/web";
function ExpandableView() { const [displayMode, setDisplayMode] = useDisplayMode();
return ( <div> <p>Current mode: {displayMode}</p> <button onClick={() => setDisplayMode("fullscreen")}> Go Fullscreen </button> <button onClick={() => setDisplayMode("inline")}> Back to Inline </button> </div> );}Returns
Section titled “Returns”The hook returns a tuple with two elements:
displayMode
Section titled “displayMode”displayMode: "inline" | "fullscreen" | "pip"The current display mode of the view:
inline- The view is displayed inline within the chatfullscreen- The view takes up the full screenpip- The view is displayed in picture-in-picture mode (on mobile, this is coerced to fullscreen)
setDisplayMode
Section titled “setDisplayMode”setDisplayMode: (mode: DisplayMode) => voidA function to request a new display mode. Note that the host may reject the request.
Examples
Section titled “Examples”Fullscreen Media Player
Section titled “Fullscreen Media Player”import { useDisplayMode } from "@usefractal/frac/web";
function MediaPlayer() { const [displayMode, setDisplayMode] = useDisplayMode(); const isFullscreen = displayMode === "fullscreen";
return ( <div className={isFullscreen ? "fullscreen-player" : "inline-player"}> <video src="/media/video.mp4" controls /> <button onClick={() => setDisplayMode(isFullscreen ? "inline" : "fullscreen")}> {isFullscreen ? "Exit Fullscreen" : "Enter Fullscreen"} </button> </div> );}Adaptive Layout
Section titled “Adaptive Layout”import { useDisplayMode } from "@usefractal/frac/web";
function AdaptiveView() { const [displayMode] = useDisplayMode();
if (displayMode === "fullscreen") { return ( <div className="detailed-view"> <h1>Full Details</h1> {/* Show comprehensive content */} </div> ); }
return ( <div className="compact-view"> <h3>Summary</h3> {/* Show condensed content */} </div> );}Picture-in-Picture Mode
Section titled “Picture-in-Picture Mode”import { useDisplayMode, useUser } from "@usefractal/frac/web";
function FloatingView() { const [displayMode, setDisplayMode] = useDisplayMode(); const { userAgent } = useUser(); const isMobile = userAgent.device.type === "mobile";
return ( <div> <p>Mode: {displayMode}</p> {!isMobile && ( <button onClick={() => setDisplayMode("pip")}> Float (PiP) </button> )} {isMobile && ( <p>PiP mode is not available on mobile devices</p> )} </div> );}