one
Version:
One is a React framework for web, iOS, and Android apps.
103 lines (100 loc) • 3.08 kB
JavaScript
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