@datalayer/core
Version:
**Datalayer Core**
61 lines (60 loc) • 2.18 kB
JavaScript
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
/*
* Copyright (c) 2023-2025 Datalayer, Inc.
* Distributed under the terms of the Modified BSD License.
*/
import { createContext, useState, useContext } from 'react';
import { LayoutScreenshot } from "./layouts";
export const ScreenshotContext = createContext({
closeScreenshot: () => { },
displayScreenshot: (nextScreenshot) => { },
});
export function useScreenshot() {
const context = useContext(ScreenshotContext);
if (!context)
throw new Error('useContext must be inside a provider with a value.');
return context;
}
/**
* The type for the Screenshot context provider.
*/
export const ScreenshotContextProvider = ScreenshotContext.Provider;
export function ScreenshotProvider(props) {
const { children, zIndex, disableDarken, screenshotSurface } = props;
const defaultScreenshotSurface = {
position: "fixed",
top: 0,
left: 0,
width: '100%',
height: '100%',
display: 'flex',
alignItems: 'center',
justifyContent: 'center',
backgroundColor: disableDarken ? 'initial' : 'rgba(0, 0, 0, 0.5)',
zIndex,
};
const [screenshot, setScreenshot] = useState({
open: false,
render: (closeScreenshot) => _jsx(_Fragment, {})
});
const displayScreenshot = (nextScreenshot) => {
setScreenshot({
open: true,
render: nextScreenshot
});
};
const closeScreenshot = () => {
setScreenshot({
open: false,
render: (closeScreenshot) => _jsx(_Fragment, {})
});
};
return (_jsxs(ScreenshotContextProvider, { value: { closeScreenshot, displayScreenshot }, children: [_jsx(LayoutScreenshot, {}), children, screenshot.open &&
(screenshotSurface ? (screenshotSurface(screenshot.render(closeScreenshot))) : (_jsx("div", { style: defaultScreenshotSurface, children: screenshot.render(closeScreenshot) })))] }));
}
ScreenshotProvider.defaultProps = {
children: undefined,
disableScreenshot: false,
zIndex: 9999,
screenshotSurface: undefined,
};