From 5bfcdf324edb04a01c4e9c97753efcc2fcfb7ad8 Mon Sep 17 00:00:00 2001 From: Marc Rousavy Date: Tue, 23 Mar 2021 17:15:09 +0100 Subject: [PATCH] Extract CameraProps to separate file --- src/Camera.tsx | 148 ++------------------------------------------- src/CameraProps.ts | 142 +++++++++++++++++++++++++++++++++++++++++++ src/index.ts | 1 + 3 files changed, 149 insertions(+), 142 deletions(-) create mode 100644 src/CameraProps.ts diff --git a/src/Camera.tsx b/src/Camera.tsx index 9702144..70fbaae 100644 --- a/src/Camera.tsx +++ b/src/Camera.tsx @@ -1,154 +1,17 @@ import React from 'react'; -import { requireNativeComponent, NativeModules, ViewProps, NativeSyntheticEvent, findNodeHandle, NativeMethods, Platform } from 'react-native'; +import { requireNativeComponent, NativeModules, NativeSyntheticEvent, findNodeHandle, NativeMethods, Platform } from 'react-native'; import type { CameraPhotoCodec, CameraVideoCodec } from './CameraCodec'; -import type { ColorSpace, CameraDeviceFormat, CameraDevice } from './CameraDevice'; +import type { CameraDevice } from './CameraDevice'; import type { ErrorWithCause } from './CameraError'; import { CameraCaptureError, CameraRuntimeError, tryParseNativeCameraError, isErrorWithCause } from './CameraError'; -import type { CameraPreset } from './CameraPreset'; -import type { CodeType, Code } from './Code'; +import type { CameraProps } from './CameraProps'; +import type { Code } from './Code'; import type { PhotoFile, TakePhotoOptions } from './PhotoFile'; import type { Point } from './Point'; import type { TakeSnapshotOptions } from './Snapshot'; import type { RecordVideoOptions, VideoFile } from './VideoFile'; //#region Types -export interface CameraProps extends ViewProps { - /** - * The Camera Device to use. - * - * See the [Camera Devices](https://cuvent.github.io/react-native-vision-camera/docs/guides/devices) section in the documentation for more information about Camera Devices. - * - * @example - * ```tsx - * const devices = useCameraDevices('wide-angle-camera') - * const device = devices.back - * - * return ( - * - * ) - * ``` - */ - device: CameraDevice; - /** - * Whether the Camera should actively stream video frames, or not. See the [documentation about the `isActive` prop](https://cuvent.github.io/react-native-vision-camera/docs/guides/devices#the-isactive-prop) for more information. - * - * This can be compared to a Video component, where `isActive` specifies whether the video is paused or not. - * - * > Note: If you fully unmount the `` component instead of using `isActive={false}`, the Camera will take a bit longer to start again. In return, it will use less resources since the Camera will be completely destroyed when unmounted. - */ - isActive: boolean; - - //#region Common Props (torch, zoom) - /** - * Set the current torch mode. - * - * Note: The torch is only available on `"back"` cameras, and isn't supported by every phone. - * - * @default "off" - */ - torch?: 'off' | 'on'; - /** - * Specifies the zoom factor of the current camera, in percent. (`0.0` - `1.0`) - * - * **Note:** Linearly increasing this value always appears logarithmic to the user. - * - * @default 0.0 - */ - zoom?: number; - /** - * Enables or disables the native pinch to zoom gesture. - * - * If you want to implement a custom zoom gesture, see [the Zooming with Reanimated documentation](https://cuvent.github.io/react-native-vision-camera/docs/guides/animated). - * - * @default false - */ - enableZoomGesture?: boolean; - //#endregion - - //#region Format/Preset selection - /** - * Automatically selects a camera format which best matches the given preset. Must be `undefined` when `format` is set! - */ - preset?: CameraPreset; - /** - * Selects a given format. Must be `undefined` when `preset` is set! - */ - format?: CameraDeviceFormat; - /** - * Specify the frames per second this camera should use. Make sure the given `format` includes a frame rate range with the given `fps`. - * - * Requires `format` to be set. - */ - fps?: number; - /** - * Enables or disables HDR on this camera device. Make sure the given `format` supports HDR mode. - * - * Requires `format` to be set. - */ - hdr?: boolean; - /** - * Enables or disables low-light boost on this camera device. Make sure the given `format` supports low-light boost. - * - * Requires `format` to be set. - */ - lowLightBoost?: boolean; - /** - * Specifies the color space to use for this camera device. Make sure the given `format` contains the given `colorSpace`. - * - * Requires `format` to be set. - */ - colorSpace?: ColorSpace; - //#endregion - - /** - * Also captures data from depth-perception sensors. (e.g. disparity maps) - * - * @default false - */ - enableDepthData?: boolean; - /** - * A boolean specifying whether the photo render pipeline is prepared for portrait effects matte delivery. - * - * When enabling this, you must also set `enableDepthData` to `true`. - * - * @platform iOS 12.0+ - * @default false - */ - enablePortraitEffectsMatteDelivery?: boolean; - /** - * Indicates whether the photo render pipeline should be configured to deliver high resolution still images - * - * @default false - */ - enableHighResolutionCapture?: boolean; - - //#region Events - /** - * Called when any kind of runtime error occured. - */ - onError?: (error: CameraRuntimeError) => void; - /** - * Called when the camera was successfully initialized. - */ - onInitialized?: () => void; - - // TODO: Remove once frameProcessors land - /** - * Specify the code types this camera can scan. Will be removed with the addition of Frame Processors. - */ - scannableCodes?: CodeType[]; - // TODO: Remove once frameProcessors land - /** - * Called when one or multiple codes have been scanned. Will be removed with the addition of Frame Processors. - */ - onCodeScanned?: (codes: Code[]) => void; - //#endregion -} - export type CameraPermissionStatus = 'authorized' | 'not-determined' | 'denied' | 'restricted'; export type CameraPermissionRequestResult = 'authorized' | 'denied'; @@ -167,7 +30,6 @@ type NativeCameraViewProps = Omit) => void; }; type RefType = React.Component & Readonly; - //#endregion // NativeModules automatically resolves 'CameraView' to 'CameraViewModule' @@ -182,6 +44,7 @@ interface CameraState { cameraId?: string; } +//#region Camera Component /** * ### A powerful `` component. * @@ -552,6 +415,7 @@ export class Camera extends React.PureComponent { ); } } +//#endregion // requireNativeComponent automatically resolves 'CameraView' to 'CameraViewManager' const NativeCameraView = requireNativeComponent( diff --git a/src/CameraProps.ts b/src/CameraProps.ts new file mode 100644 index 0000000..57e4325 --- /dev/null +++ b/src/CameraProps.ts @@ -0,0 +1,142 @@ +import type { ViewProps } from 'react-native'; +import type { CameraDevice, CameraDeviceFormat, ColorSpace } from './CameraDevice'; +import type { CameraRuntimeError } from './CameraError'; +import type { CameraPreset } from './CameraPreset'; +import type { Code, CodeType } from './Code'; + +export interface CameraProps extends ViewProps { + /** + * The Camera Device to use. + * + * See the [Camera Devices](https://cuvent.github.io/react-native-vision-camera/docs/guides/devices) section in the documentation for more information about Camera Devices. + * + * @example + * ```tsx + * const devices = useCameraDevices('wide-angle-camera') + * const device = devices.back + * + * return ( + * + * ) + * ``` + */ + device: CameraDevice; + /** + * Whether the Camera should actively stream video frames, or not. See the [documentation about the `isActive` prop](https://cuvent.github.io/react-native-vision-camera/docs/guides/devices#the-isactive-prop) for more information. + * + * This can be compared to a Video component, where `isActive` specifies whether the video is paused or not. + * + * > Note: If you fully unmount the `` component instead of using `isActive={false}`, the Camera will take a bit longer to start again. In return, it will use less resources since the Camera will be completely destroyed when unmounted. + */ + isActive: boolean; + + //#region Common Props (torch, zoom) + /** + * Set the current torch mode. + * + * Note: The torch is only available on `"back"` cameras, and isn't supported by every phone. + * + * @default "off" + */ + torch?: 'off' | 'on'; + /** + * Specifies the zoom factor of the current camera, in percent. (`0.0` - `1.0`) + * + * **Note:** Linearly increasing this value always appears logarithmic to the user. + * + * @default 0.0 + */ + zoom?: number; + /** + * Enables or disables the native pinch to zoom gesture. + * + * If you want to implement a custom zoom gesture, see [the Zooming with Reanimated documentation](https://cuvent.github.io/react-native-vision-camera/docs/guides/animated). + * + * @default false + */ + enableZoomGesture?: boolean; + //#endregion + + //#region Format/Preset selection + /** + * Automatically selects a camera format which best matches the given preset. Must be `undefined` when `format` is set! + */ + preset?: CameraPreset; + /** + * Selects a given format. Must be `undefined` when `preset` is set! + */ + format?: CameraDeviceFormat; + /** + * Specify the frames per second this camera should use. Make sure the given `format` includes a frame rate range with the given `fps`. + * + * Requires `format` to be set. + */ + fps?: number; + /** + * Enables or disables HDR on this camera device. Make sure the given `format` supports HDR mode. + * + * Requires `format` to be set. + */ + hdr?: boolean; + /** + * Enables or disables low-light boost on this camera device. Make sure the given `format` supports low-light boost. + * + * Requires `format` to be set. + */ + lowLightBoost?: boolean; + /** + * Specifies the color space to use for this camera device. Make sure the given `format` contains the given `colorSpace`. + * + * Requires `format` to be set. + */ + colorSpace?: ColorSpace; + //#endregion + + /** + * Also captures data from depth-perception sensors. (e.g. disparity maps) + * + * @default false + */ + enableDepthData?: boolean; + /** + * A boolean specifying whether the photo render pipeline is prepared for portrait effects matte delivery. + * + * When enabling this, you must also set `enableDepthData` to `true`. + * + * @platform iOS 12.0+ + * @default false + */ + enablePortraitEffectsMatteDelivery?: boolean; + /** + * Indicates whether the photo render pipeline should be configured to deliver high resolution still images + * + * @default false + */ + enableHighResolutionCapture?: boolean; + + //#region Events + /** + * Called when any kind of runtime error occured. + */ + onError?: (error: CameraRuntimeError) => void; + /** + * Called when the camera was successfully initialized. + */ + onInitialized?: () => void; + + // TODO: Remove once frameProcessors land + /** + * Specify the code types this camera can scan. Will be removed with the addition of Frame Processors. + */ + scannableCodes?: CodeType[]; + // TODO: Remove once frameProcessors land + /** + * Called when one or multiple codes have been scanned. Will be removed with the addition of Frame Processors. + */ + onCodeScanned?: (codes: Code[]) => void; + //#endregion +} diff --git a/src/index.ts b/src/index.ts index ae0a2e6..378174f 100644 --- a/src/index.ts +++ b/src/index.ts @@ -4,6 +4,7 @@ export * from './CameraDevice'; export * from './CameraError'; export * from './CameraPosition'; export * from './CameraPreset'; +export * from './CameraProps'; export * from './Code'; export * from './PhotoFile'; export * from './Point';