UNPKG

one

Version:

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

154 lines (151 loc) • 5.35 kB
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