one
Version:
One is a React framework for web, iOS, and Android apps.
154 lines (151 loc) • 5.35 kB
JavaScript
import { jsx } from "react/jsx-runtime";
import { forwardRef, useEffect, useImperativeHandle, useRef } from "react";
import { Platform } from "react-native";
import NativeCamera, { Commands } from "../specs/OneNativeCameraNativeComponent.native.js";
var nextRequestId = 1;
function codedError(code, message) {
return Object.assign(new Error(message), { code });
}
function nativeError(value) {
var coded = /^((?:E|ERR)_[A-Z0-9_]+): ([\s\S]*)$/.exec(value);
return coded ? codedError(coded[1], coded[2]) : new Error(value);
}
function cameraState(value) {
switch (value) {
case "inactive":
case "permission-required":
case "unavailable":
case "ready":
case "unsupported":
case "failed": return value;
default: throw new Error(`CameraView received an unknown native state: ${value}`);
}
}
function isCodeType(value) {
switch (value) {
case "qr":
case "ean13":
case "ean8":
case "upce":
case "code128":
case "code39":
case "code93":
case "pdf417":
case "aztec":
case "dataMatrix": return true;
default: return false;
}
}
function codeType(value) {
if (!isCodeType(value)) throw new Error(`CameraView received an unknown code type: ${value}`);
return value;
}
var CameraView = /* @__PURE__ */ forwardRef(function CameraView2(param, ref) {
var { active = true, facing = "back", codeTypes = ["qr"], flash = "off", enableTorch = false, zoom = 0, onStateChange, onCodeScanned, ...viewProps } = param;
if (Platform.OS !== "ios" && Platform.OS !== "android") throw new Error("CameraView requires a native build");
if (typeof active !== "boolean") throw new TypeError("CameraView.active must be a boolean");
if (facing !== "back" && facing !== "front") {
throw new TypeError("CameraView.facing must be back or front");
}
if (!Array.isArray(codeTypes) || codeTypes.some(function(type) {
return !isCodeType(type);
})) {
throw new TypeError("CameraView.codeTypes contains an unsupported code type");
}
if (flash !== "off" && flash !== "on" && flash !== "auto") {
throw new TypeError("CameraView.flash must be off, on or auto");
}
if (typeof enableTorch !== "boolean") {
throw new TypeError("CameraView.enableTorch must be a boolean");
}
if (typeof zoom !== "number" || !(zoom >= 0 && zoom <= 1)) {
throw new RangeError("CameraView.zoom must be a number from 0 to 1");
}
var nativeRef = useRef(null);
var pending = useRef(/* @__PURE__ */ new Map());
useEffect(function() {
var requests = pending.current;
return function() {
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;
try {
for (var _iterator = requests.values()[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
var request = _step.value;
request.reject(codedError("E_CAMERA_UNMOUNTED", "CameraView unmounted before the picture was taken"));
}
} catch (err) {
_didIteratorError = true;
_iteratorError = err;
} finally {
try {
if (!_iteratorNormalCompletion && _iterator.return != null) {
_iterator.return();
}
} finally {
if (_didIteratorError) {
throw _iteratorError;
}
}
}
requests.clear();
};
}, []);
useImperativeHandle(ref, function() {
return { takePicture() {
var options = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};
var { quality = 1, base64 = false } = options;
if (typeof quality !== "number" || !(quality >= 0 && quality <= 1)) return Promise.reject(new RangeError("takePicture quality must be a number from 0 to 1"));
if (typeof base64 !== "boolean") return Promise.reject(new TypeError("takePicture base64 must be a boolean"));
var view = nativeRef.current;
if (!view) return Promise.reject(codedError("E_CAMERA_UNMOUNTED", "CameraView is not mounted"));
var requestId = nextRequestId++;
return new Promise(function(resolve, reject) {
pending.current.set(requestId, {
resolve,
reject,
base64
});
Commands.takePicture(view, requestId, quality, base64);
});
} };
}, []);
return /* @__PURE__ */ jsx(NativeCamera, {
...viewProps,
ref: nativeRef,
active,
facing,
codeTypes: [...new Set(codeTypes)],
flash,
enableTorch,
zoom,
onNativeCameraState: function onNativeCameraState(param2) {
var { nativeEvent } = param2;
return onStateChange === null || onStateChange === void 0 ? void 0 : onStateChange(cameraState(nativeEvent.state));
},
onNativeCameraCode: function onNativeCameraCode(param2) {
var { nativeEvent } = param2;
return onCodeScanned === null || onCodeScanned === void 0 ? void 0 : onCodeScanned({
type: codeType(nativeEvent.type),
data: nativeEvent.data
});
},
onNativeCameraPicture: function onNativeCameraPicture(param2) {
var { nativeEvent } = param2;
var request = pending.current.get(nativeEvent.requestId);
if (!request) return;
pending.current.delete(nativeEvent.requestId);
if (nativeEvent.error) {
request.reject(nativeError(nativeEvent.error));
return;
}
request.resolve({
uri: nativeEvent.uri,
width: nativeEvent.width,
height: nativeEvent.height,
format: "jpg",
...request.base64 ? { base64: nativeEvent.base64 } : {}
});
}
});
});
export { CameraView };
//# sourceMappingURL=index.native.js.map