UNPKG

one

Version:

One is a React framework for web, iOS, and Android apps.

103 lines (100 loc) • 3.08 kB
import { useEffect } from "react"; import { assertPreventKey, preventDefaultKey, validateViewTag } from "./validate.native.js"; import { validateCallback } from "../validateCallback.native.js"; import { NitroModules } from "react-native-nitro-modules"; import { rethrowNativeError } from "../nativeError.native.js"; var hybrid; function native() { hybrid !== null && hybrid !== void 0 ? hybrid : hybrid = NitroModules.createHybridObject("OneScreenCapture"); return hybrid; } function getState() { return native().getState().catch(rethrowNativeError); } function captureWindow() { return native().captureWindow().catch(rethrowNativeError); } function captureView(viewTag) { validateViewTag(viewTag); return native().captureView(viewTag).catch(rethrowNativeError); } function addStateListener(onChange) { validateCallback(onChange, "ScreenCapture.addStateListener requires a function"); return native().addStateListener(onChange); } function addScreenshotListener(onScreenshot) { validateCallback(onScreenshot, "ScreenCapture.addScreenshotListener requires a function"); return native().addScreenshotListener(onScreenshot); } var activeKeys = /* @__PURE__ */ new Set(); var transitions = Promise.resolve(); var armed = false; var arming; function enqueue(transition) { var next = transitions.then(transition); transitions = next.catch(function() {}); return next; } function prevent() { var key = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : preventDefaultKey; assertPreventKey(key, "prevent"); activeKeys.add(key); if (armed) return Promise.resolve(); arming !== null && arming !== void 0 ? arming : arming = enqueue(async function() { try { if (activeKeys.size === 0 || armed) return; await native().prevent(); armed = true; } catch (error) { activeKeys.clear(); rethrowNativeError(error); } finally { arming = void 0; } }); return arming; } function allow() { var key = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : preventDefaultKey; assertPreventKey(key, "allow"); activeKeys.delete(key); if (activeKeys.size > 0) return Promise.resolve(); return enqueue(async function() { if (activeKeys.size > 0) return; var wasArmed = armed; armed = false; try { await native().allow(); } catch (error) { armed = wasArmed; rethrowNativeError(error); } }); } function isPrevented() { return native().isPrevented().catch(rethrowNativeError); } function usePreventScreenCapture() { var key = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : preventDefaultKey; assertPreventKey(key, "prevent"); useEffect(function() { prevent(key).catch(function(error) { console.error(`Failed to prevent screen capture: ${String(error)}`); }); return function() { allow(key).catch(function() {}); }; }, [key]); } var ScreenCapture = Object.freeze({ getState, captureWindow, captureView, addStateListener, addScreenshotListener, prevent, allow, isPrevented }); export { ScreenCapture, usePreventScreenCapture }; //# sourceMappingURL=index.native.js.map