@unif/react-native-camera 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +20 -0
- package/README.md +29 -0
- package/UnifRNCamera.podspec +41 -0
- package/android/CMakeLists.txt +15 -0
- package/android/build.gradle +124 -0
- package/android/cpp-adapter.cpp +8 -0
- package/android/gradle.properties +5 -0
- package/android/src/main/AndroidManifest.xml +3 -0
- package/android/src/main/AndroidManifestNew.xml +2 -0
- package/android/src/main/java/com/unif/reactnativecamera/ReactNativeCameraModule.java +34 -0
- package/android/src/main/java/com/unif/reactnativecamera/ReactNativeCameraPackage.java +45 -0
- package/android/src/newarch/ReactNativeCameraSpec.java +9 -0
- package/android/src/oldarch/ReactNativeCameraSpec.java +13 -0
- package/cpp/unif-react-native-camera.cpp +7 -0
- package/cpp/unif-react-native-camera.h +8 -0
- package/ios/ReactNativeCamera.h +15 -0
- package/ios/ReactNativeCamera.mm +51 -0
- package/lib/commonjs/NativeReactNativeCamera.js +17 -0
- package/lib/commonjs/NativeReactNativeCamera.js.map +1 -0
- package/lib/commonjs/assets/close.png +0 -0
- package/lib/commonjs/assets/home/record.png +0 -0
- package/lib/commonjs/assets/home/take.png +0 -0
- package/lib/commonjs/assets/preview/back.png +0 -0
- package/lib/commonjs/assets/preview/del.png +0 -0
- package/lib/commonjs/assets/preview/rotate.png +0 -0
- package/lib/commonjs/assets/preview/save.png +0 -0
- package/lib/commonjs/assets/tools/16_9.png +0 -0
- package/lib/commonjs/assets/tools/4_3.png +0 -0
- package/lib/commonjs/assets/tools/auto.png +0 -0
- package/lib/commonjs/assets/tools/defaultEye.png +0 -0
- package/lib/commonjs/assets/tools/enlarge.png +0 -0
- package/lib/commonjs/assets/tools/fishEye.png +0 -0
- package/lib/commonjs/assets/tools/narrow.png +0 -0
- package/lib/commonjs/assets/tools/off.png +0 -0
- package/lib/commonjs/assets/tools/on.png +0 -0
- package/lib/commonjs/assets/tools/screenRatio.png +0 -0
- package/lib/commonjs/assets/tools/volumeOff.png +0 -0
- package/lib/commonjs/assets/tools/volumeOn.png +0 -0
- package/lib/commonjs/camera/Camera.js +209 -0
- package/lib/commonjs/camera/Camera.js.map +1 -0
- package/lib/commonjs/camera/Container.js +64 -0
- package/lib/commonjs/camera/Container.js.map +1 -0
- package/lib/commonjs/camera/ModalView.js +37 -0
- package/lib/commonjs/camera/ModalView.js.map +1 -0
- package/lib/commonjs/camera/NoCamera.js +23 -0
- package/lib/commonjs/camera/NoCamera.js.map +1 -0
- package/lib/commonjs/camera/NoPermission.js +50 -0
- package/lib/commonjs/camera/NoPermission.js.map +1 -0
- package/lib/commonjs/camera/footer/Footer.js +155 -0
- package/lib/commonjs/camera/footer/Footer.js.map +1 -0
- package/lib/commonjs/camera/footer/index.js +14 -0
- package/lib/commonjs/camera/footer/index.js.map +1 -0
- package/lib/commonjs/camera/index.js +35 -0
- package/lib/commonjs/camera/index.js.map +1 -0
- package/lib/commonjs/camera/preview/PreView.js +105 -0
- package/lib/commonjs/camera/preview/PreView.js.map +1 -0
- package/lib/commonjs/camera/preview/PreViewContainer.js +41 -0
- package/lib/commonjs/camera/preview/PreViewContainer.js.map +1 -0
- package/lib/commonjs/camera/preview/PreviewFooter.js +35 -0
- package/lib/commonjs/camera/preview/PreviewFooter.js.map +1 -0
- package/lib/commonjs/camera/preview/SinglePre.js +69 -0
- package/lib/commonjs/camera/preview/SinglePre.js.map +1 -0
- package/lib/commonjs/camera/preview/index.js +28 -0
- package/lib/commonjs/camera/preview/index.js.map +1 -0
- package/lib/commonjs/camera/setup/SetUp.js +245 -0
- package/lib/commonjs/camera/setup/SetUp.js.map +1 -0
- package/lib/commonjs/camera/setup/index.js +14 -0
- package/lib/commonjs/camera/setup/index.js.map +1 -0
- package/lib/commonjs/components/Back.js +48 -0
- package/lib/commonjs/components/Back.js.map +1 -0
- package/lib/commonjs/components/Carousel/Carousel.js +51 -0
- package/lib/commonjs/components/Carousel/Carousel.js.map +1 -0
- package/lib/commonjs/components/Carousel/SlideItem.js +84 -0
- package/lib/commonjs/components/Carousel/SlideItem.js.map +1 -0
- package/lib/commonjs/components/Carousel/index.js +21 -0
- package/lib/commonjs/components/Carousel/index.js.map +1 -0
- package/lib/commonjs/components/Delete.js +36 -0
- package/lib/commonjs/components/Delete.js.map +1 -0
- package/lib/commonjs/components/Loading.js +75 -0
- package/lib/commonjs/components/Loading.js.map +1 -0
- package/lib/commonjs/components/Modal/Confirm.js +120 -0
- package/lib/commonjs/components/Modal/Confirm.js.map +1 -0
- package/lib/commonjs/components/Modal/index.js +14 -0
- package/lib/commonjs/components/Modal/index.js.map +1 -0
- package/lib/commonjs/components/PreviewThumbnail.js +44 -0
- package/lib/commonjs/components/PreviewThumbnail.js.map +1 -0
- package/lib/commonjs/components/Rotate.js +32 -0
- package/lib/commonjs/components/Rotate.js.map +1 -0
- package/lib/commonjs/components/Save.js +48 -0
- package/lib/commonjs/components/Save.js.map +1 -0
- package/lib/commonjs/components/index.js +73 -0
- package/lib/commonjs/components/index.js.map +1 -0
- package/lib/commonjs/hooks/index.js +21 -0
- package/lib/commonjs/hooks/index.js.map +1 -0
- package/lib/commonjs/hooks/useCamera.tsx/index.js +91 -0
- package/lib/commonjs/hooks/useCamera.tsx/index.js.map +1 -0
- package/lib/commonjs/hooks/useConfirm.js +61 -0
- package/lib/commonjs/hooks/useConfirm.js.map +1 -0
- package/lib/commonjs/hooks/useCreation/index.js +34 -0
- package/lib/commonjs/hooks/useCreation/index.js.map +1 -0
- package/lib/commonjs/index.js +39 -0
- package/lib/commonjs/index.js.map +1 -0
- package/lib/commonjs/utils/common.js +84 -0
- package/lib/commonjs/utils/common.js.map +1 -0
- package/lib/commonjs/utils/depsAreSame.js +14 -0
- package/lib/commonjs/utils/depsAreSame.js.map +1 -0
- package/lib/commonjs/utils/index.js +50 -0
- package/lib/commonjs/utils/index.js.map +1 -0
- package/lib/commonjs/utils/interface.js +25 -0
- package/lib/commonjs/utils/interface.js.map +1 -0
- package/lib/commonjs/utils/px-to-dp.js +21 -0
- package/lib/commonjs/utils/px-to-dp.js.map +1 -0
- package/lib/commonjs/utils/render-item.js +39 -0
- package/lib/commonjs/utils/render-item.js.map +1 -0
- package/lib/module/NativeReactNativeCamera.js +12 -0
- package/lib/module/NativeReactNativeCamera.js.map +1 -0
- package/lib/module/assets/close.png +0 -0
- package/lib/module/assets/home/record.png +0 -0
- package/lib/module/assets/home/take.png +0 -0
- package/lib/module/assets/preview/back.png +0 -0
- package/lib/module/assets/preview/del.png +0 -0
- package/lib/module/assets/preview/rotate.png +0 -0
- package/lib/module/assets/preview/save.png +0 -0
- package/lib/module/assets/tools/16_9.png +0 -0
- package/lib/module/assets/tools/4_3.png +0 -0
- package/lib/module/assets/tools/auto.png +0 -0
- package/lib/module/assets/tools/defaultEye.png +0 -0
- package/lib/module/assets/tools/enlarge.png +0 -0
- package/lib/module/assets/tools/fishEye.png +0 -0
- package/lib/module/assets/tools/narrow.png +0 -0
- package/lib/module/assets/tools/off.png +0 -0
- package/lib/module/assets/tools/on.png +0 -0
- package/lib/module/assets/tools/screenRatio.png +0 -0
- package/lib/module/assets/tools/volumeOff.png +0 -0
- package/lib/module/assets/tools/volumeOn.png +0 -0
- package/lib/module/camera/Camera.js +199 -0
- package/lib/module/camera/Camera.js.map +1 -0
- package/lib/module/camera/Container.js +56 -0
- package/lib/module/camera/Container.js.map +1 -0
- package/lib/module/camera/ModalView.js +29 -0
- package/lib/module/camera/ModalView.js.map +1 -0
- package/lib/module/camera/NoCamera.js +15 -0
- package/lib/module/camera/NoCamera.js.map +1 -0
- package/lib/module/camera/NoPermission.js +42 -0
- package/lib/module/camera/NoPermission.js.map +1 -0
- package/lib/module/camera/footer/Footer.js +148 -0
- package/lib/module/camera/footer/Footer.js.map +1 -0
- package/lib/module/camera/footer/index.js +3 -0
- package/lib/module/camera/footer/index.js.map +1 -0
- package/lib/module/camera/index.js +14 -0
- package/lib/module/camera/index.js.map +1 -0
- package/lib/module/camera/preview/PreView.js +96 -0
- package/lib/module/camera/preview/PreView.js.map +1 -0
- package/lib/module/camera/preview/PreViewContainer.js +33 -0
- package/lib/module/camera/preview/PreViewContainer.js.map +1 -0
- package/lib/module/camera/preview/PreviewFooter.js +27 -0
- package/lib/module/camera/preview/PreviewFooter.js.map +1 -0
- package/lib/module/camera/preview/SinglePre.js +61 -0
- package/lib/module/camera/preview/SinglePre.js.map +1 -0
- package/lib/module/camera/preview/index.js +13 -0
- package/lib/module/camera/preview/index.js.map +1 -0
- package/lib/module/camera/setup/SetUp.js +236 -0
- package/lib/module/camera/setup/SetUp.js.map +1 -0
- package/lib/module/camera/setup/index.js +3 -0
- package/lib/module/camera/setup/index.js.map +1 -0
- package/lib/module/components/Back.js +40 -0
- package/lib/module/components/Back.js.map +1 -0
- package/lib/module/components/Carousel/Carousel.js +43 -0
- package/lib/module/components/Carousel/Carousel.js.map +1 -0
- package/lib/module/components/Carousel/SlideItem.js +75 -0
- package/lib/module/components/Carousel/SlideItem.js.map +1 -0
- package/lib/module/components/Carousel/index.js +12 -0
- package/lib/module/components/Carousel/index.js.map +1 -0
- package/lib/module/components/Delete.js +28 -0
- package/lib/module/components/Delete.js.map +1 -0
- package/lib/module/components/Loading.js +67 -0
- package/lib/module/components/Loading.js.map +1 -0
- package/lib/module/components/Modal/Confirm.js +110 -0
- package/lib/module/components/Modal/Confirm.js.map +1 -0
- package/lib/module/components/Modal/index.js +3 -0
- package/lib/module/components/Modal/index.js.map +1 -0
- package/lib/module/components/PreviewThumbnail.js +36 -0
- package/lib/module/components/PreviewThumbnail.js.map +1 -0
- package/lib/module/components/Rotate.js +24 -0
- package/lib/module/components/Rotate.js.map +1 -0
- package/lib/module/components/Save.js +40 -0
- package/lib/module/components/Save.js.map +1 -0
- package/lib/module/components/index.js +9 -0
- package/lib/module/components/index.js.map +1 -0
- package/lib/module/hooks/index.js +12 -0
- package/lib/module/hooks/index.js.map +1 -0
- package/lib/module/hooks/useCamera.tsx/index.js +82 -0
- package/lib/module/hooks/useCamera.tsx/index.js.map +1 -0
- package/lib/module/hooks/useConfirm.js +52 -0
- package/lib/module/hooks/useConfirm.js.map +1 -0
- package/lib/module/hooks/useCreation/index.js +27 -0
- package/lib/module/hooks/useCreation/index.js.map +1 -0
- package/lib/module/index.js +26 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/utils/common.js +76 -0
- package/lib/module/utils/common.js.map +1 -0
- package/lib/module/utils/depsAreSame.js +8 -0
- package/lib/module/utils/depsAreSame.js.map +1 -0
- package/lib/module/utils/index.js +13 -0
- package/lib/module/utils/index.js.map +1 -0
- package/lib/module/utils/interface.js +24 -0
- package/lib/module/utils/interface.js.map +1 -0
- package/lib/module/utils/px-to-dp.js +15 -0
- package/lib/module/utils/px-to-dp.js.map +1 -0
- package/lib/module/utils/render-item.js +31 -0
- package/lib/module/utils/render-item.js.map +1 -0
- package/lib/typescript/src/NativeReactNativeCamera.d.ts +6 -0
- package/lib/typescript/src/NativeReactNativeCamera.d.ts.map +1 -0
- package/lib/typescript/src/camera/Camera.d.ts +13 -0
- package/lib/typescript/src/camera/Camera.d.ts.map +1 -0
- package/lib/typescript/src/camera/Container.d.ts +6 -0
- package/lib/typescript/src/camera/Container.d.ts.map +1 -0
- package/lib/typescript/src/camera/ModalView.d.ts +6 -0
- package/lib/typescript/src/camera/ModalView.d.ts.map +1 -0
- package/lib/typescript/src/camera/NoCamera.d.ts +4 -0
- package/lib/typescript/src/camera/NoCamera.d.ts.map +1 -0
- package/lib/typescript/src/camera/NoPermission.d.ts +4 -0
- package/lib/typescript/src/camera/NoPermission.d.ts.map +1 -0
- package/lib/typescript/src/camera/footer/Footer.d.ts +16 -0
- package/lib/typescript/src/camera/footer/Footer.d.ts.map +1 -0
- package/lib/typescript/src/camera/footer/index.d.ts +3 -0
- package/lib/typescript/src/camera/footer/index.d.ts.map +1 -0
- package/lib/typescript/src/camera/index.d.ts +6 -0
- package/lib/typescript/src/camera/index.d.ts.map +1 -0
- package/lib/typescript/src/camera/preview/PreView.d.ts +10 -0
- package/lib/typescript/src/camera/preview/PreView.d.ts.map +1 -0
- package/lib/typescript/src/camera/preview/PreViewContainer.d.ts +6 -0
- package/lib/typescript/src/camera/preview/PreViewContainer.d.ts.map +1 -0
- package/lib/typescript/src/camera/preview/PreviewFooter.d.ts +7 -0
- package/lib/typescript/src/camera/preview/PreviewFooter.d.ts.map +1 -0
- package/lib/typescript/src/camera/preview/SinglePre.d.ts +28 -0
- package/lib/typescript/src/camera/preview/SinglePre.d.ts.map +1 -0
- package/lib/typescript/src/camera/preview/index.d.ts +5 -0
- package/lib/typescript/src/camera/preview/index.d.ts.map +1 -0
- package/lib/typescript/src/camera/setup/SetUp.d.ts +12 -0
- package/lib/typescript/src/camera/setup/SetUp.d.ts.map +1 -0
- package/lib/typescript/src/camera/setup/index.d.ts +3 -0
- package/lib/typescript/src/camera/setup/index.d.ts.map +1 -0
- package/lib/typescript/src/components/Back.d.ts +20 -0
- package/lib/typescript/src/components/Back.d.ts.map +1 -0
- package/lib/typescript/src/components/Carousel/Carousel.d.ts +10 -0
- package/lib/typescript/src/components/Carousel/Carousel.d.ts.map +1 -0
- package/lib/typescript/src/components/Carousel/SlideItem.d.ts +13 -0
- package/lib/typescript/src/components/Carousel/SlideItem.d.ts.map +1 -0
- package/lib/typescript/src/components/Carousel/index.d.ts +4 -0
- package/lib/typescript/src/components/Carousel/index.d.ts.map +1 -0
- package/lib/typescript/src/components/Delete.d.ts +7 -0
- package/lib/typescript/src/components/Delete.d.ts.map +1 -0
- package/lib/typescript/src/components/Loading.d.ts +4 -0
- package/lib/typescript/src/components/Loading.d.ts.map +1 -0
- package/lib/typescript/src/components/Modal/Confirm.d.ts +9 -0
- package/lib/typescript/src/components/Modal/Confirm.d.ts.map +1 -0
- package/lib/typescript/src/components/Modal/index.d.ts +3 -0
- package/lib/typescript/src/components/Modal/index.d.ts.map +1 -0
- package/lib/typescript/src/components/PreviewThumbnail.d.ts +10 -0
- package/lib/typescript/src/components/PreviewThumbnail.d.ts.map +1 -0
- package/lib/typescript/src/components/Rotate.d.ts +9 -0
- package/lib/typescript/src/components/Rotate.d.ts.map +1 -0
- package/lib/typescript/src/components/Save.d.ts +20 -0
- package/lib/typescript/src/components/Save.d.ts.map +1 -0
- package/lib/typescript/src/components/index.d.ts +9 -0
- package/lib/typescript/src/components/index.d.ts.map +1 -0
- package/lib/typescript/src/hooks/index.d.ts +4 -0
- package/lib/typescript/src/hooks/index.d.ts.map +1 -0
- package/lib/typescript/src/hooks/useCamera.tsx/index.d.ts +5 -0
- package/lib/typescript/src/hooks/useCamera.tsx/index.d.ts.map +1 -0
- package/lib/typescript/src/hooks/useConfirm.d.ts +6 -0
- package/lib/typescript/src/hooks/useConfirm.d.ts.map +1 -0
- package/lib/typescript/src/hooks/useCreation/index.d.ts +3 -0
- package/lib/typescript/src/hooks/useCreation/index.d.ts.map +1 -0
- package/lib/typescript/src/index.d.ts +5 -0
- package/lib/typescript/src/index.d.ts.map +1 -0
- package/lib/typescript/src/utils/common.d.ts +20 -0
- package/lib/typescript/src/utils/common.d.ts.map +1 -0
- package/lib/typescript/src/utils/depsAreSame.d.ts +3 -0
- package/lib/typescript/src/utils/depsAreSame.d.ts.map +1 -0
- package/lib/typescript/src/utils/index.d.ts +5 -0
- package/lib/typescript/src/utils/index.d.ts.map +1 -0
- package/lib/typescript/src/utils/interface.d.ts +64 -0
- package/lib/typescript/src/utils/interface.d.ts.map +1 -0
- package/lib/typescript/src/utils/px-to-dp.d.ts +4 -0
- package/lib/typescript/src/utils/px-to-dp.d.ts.map +1 -0
- package/lib/typescript/src/utils/render-item.d.ts +10 -0
- package/lib/typescript/src/utils/render-item.d.ts.map +1 -0
- package/package.json +183 -0
- package/src/NativeReactNativeCamera.ts +15 -0
- package/src/assets/close.png +0 -0
- package/src/assets/home/record.png +0 -0
- package/src/assets/home/take.png +0 -0
- package/src/assets/preview/back.png +0 -0
- package/src/assets/preview/del.png +0 -0
- package/src/assets/preview/rotate.png +0 -0
- package/src/assets/preview/save.png +0 -0
- package/src/assets/tools/16_9.png +0 -0
- package/src/assets/tools/4_3.png +0 -0
- package/src/assets/tools/auto.png +0 -0
- package/src/assets/tools/defaultEye.png +0 -0
- package/src/assets/tools/enlarge.png +0 -0
- package/src/assets/tools/fishEye.png +0 -0
- package/src/assets/tools/narrow.png +0 -0
- package/src/assets/tools/off.png +0 -0
- package/src/assets/tools/on.png +0 -0
- package/src/assets/tools/screenRatio.png +0 -0
- package/src/assets/tools/volumeOff.png +0 -0
- package/src/assets/tools/volumeOn.png +0 -0
- package/src/camera/Camera.tsx +236 -0
- package/src/camera/Container.tsx +60 -0
- package/src/camera/ModalView.tsx +28 -0
- package/src/camera/NoCamera.tsx +16 -0
- package/src/camera/NoPermission.tsx +43 -0
- package/src/camera/footer/Footer.tsx +196 -0
- package/src/camera/footer/index.tsx +2 -0
- package/src/camera/index.tsx +13 -0
- package/src/camera/preview/PreView.tsx +111 -0
- package/src/camera/preview/PreViewContainer.tsx +33 -0
- package/src/camera/preview/PreviewFooter.tsx +32 -0
- package/src/camera/preview/SinglePre.tsx +66 -0
- package/src/camera/preview/index.tsx +13 -0
- package/src/camera/setup/SetUp.tsx +273 -0
- package/src/camera/setup/index.tsx +3 -0
- package/src/components/Back.tsx +37 -0
- package/src/components/Carousel/Carousel.tsx +49 -0
- package/src/components/Carousel/SlideItem.tsx +95 -0
- package/src/components/Carousel/index.tsx +13 -0
- package/src/components/Delete.tsx +30 -0
- package/src/components/Loading.tsx +76 -0
- package/src/components/Modal/Confirm.tsx +115 -0
- package/src/components/Modal/index.tsx +3 -0
- package/src/components/PreviewThumbnail.tsx +40 -0
- package/src/components/Rotate.tsx +32 -0
- package/src/components/Save.tsx +37 -0
- package/src/components/index.tsx +8 -0
- package/src/hooks/index.ts +12 -0
- package/src/hooks/useCamera.tsx/index.tsx +96 -0
- package/src/hooks/useConfirm.tsx +58 -0
- package/src/hooks/useCreation/index.ts +25 -0
- package/src/index.tsx +38 -0
- package/src/utils/common.ts +85 -0
- package/src/utils/depsAreSame.ts +12 -0
- package/src/utils/index.ts +12 -0
- package/src/utils/interface.ts +90 -0
- package/src/utils/px-to-dp.tsx +12 -0
- package/src/utils/render-item.tsx +38 -0
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import React, { useEffect } from 'react';
|
|
2
|
+
import { View, StyleSheet } from 'react-native';
|
|
3
|
+
import Animated, {
|
|
4
|
+
Easing,
|
|
5
|
+
withRepeat,
|
|
6
|
+
withTiming,
|
|
7
|
+
useSharedValue,
|
|
8
|
+
useAnimatedStyle,
|
|
9
|
+
} from 'react-native-reanimated';
|
|
10
|
+
import { pxToDpWidth } from '../utils';
|
|
11
|
+
|
|
12
|
+
const Loading: React.FC = () => {
|
|
13
|
+
const firstDotScale = useSharedValue(0);
|
|
14
|
+
const secondDotScale = useSharedValue(0);
|
|
15
|
+
const thirdDotScale = useSharedValue(0);
|
|
16
|
+
|
|
17
|
+
useEffect(() => {
|
|
18
|
+
// 创建动画:依次跳动
|
|
19
|
+
firstDotScale.value = withRepeat(
|
|
20
|
+
withTiming(1, { duration: 500, easing: Easing.ease }),
|
|
21
|
+
-1,
|
|
22
|
+
true
|
|
23
|
+
);
|
|
24
|
+
|
|
25
|
+
secondDotScale.value = withRepeat(
|
|
26
|
+
withTiming(1, { duration: 500, easing: Easing.ease }),
|
|
27
|
+
-1,
|
|
28
|
+
true
|
|
29
|
+
);
|
|
30
|
+
|
|
31
|
+
thirdDotScale.value = withRepeat(
|
|
32
|
+
withTiming(1, { duration: 500, easing: Easing.ease }),
|
|
33
|
+
-1,
|
|
34
|
+
true
|
|
35
|
+
);
|
|
36
|
+
}, [firstDotScale, secondDotScale, thirdDotScale]);
|
|
37
|
+
|
|
38
|
+
// 使用 useAnimatedStyle 来绑定动画到样式上
|
|
39
|
+
const animatedStyle1 = useAnimatedStyle(() => ({
|
|
40
|
+
transform: [{ scale: firstDotScale.value }],
|
|
41
|
+
}));
|
|
42
|
+
|
|
43
|
+
const animatedStyle2 = useAnimatedStyle(() => ({
|
|
44
|
+
transform: [{ scale: secondDotScale.value }],
|
|
45
|
+
}));
|
|
46
|
+
|
|
47
|
+
const animatedStyle3 = useAnimatedStyle(() => ({
|
|
48
|
+
transform: [{ scale: thirdDotScale.value }],
|
|
49
|
+
}));
|
|
50
|
+
|
|
51
|
+
return (
|
|
52
|
+
<View style={styles.container}>
|
|
53
|
+
<Animated.View style={[styles.dot, animatedStyle1]} />
|
|
54
|
+
<Animated.View style={[styles.dot, animatedStyle2]} />
|
|
55
|
+
<Animated.View style={[styles.dot, animatedStyle3]} />
|
|
56
|
+
</View>
|
|
57
|
+
);
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
const styles = StyleSheet.create({
|
|
61
|
+
container: {
|
|
62
|
+
flexDirection: 'row',
|
|
63
|
+
justifyContent: 'center',
|
|
64
|
+
alignItems: 'center',
|
|
65
|
+
flex: 1,
|
|
66
|
+
},
|
|
67
|
+
dot: {
|
|
68
|
+
width: pxToDpWidth(20),
|
|
69
|
+
height: pxToDpWidth(20),
|
|
70
|
+
borderRadius: 10,
|
|
71
|
+
backgroundColor: '#FF7600',
|
|
72
|
+
margin: 5,
|
|
73
|
+
},
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
export default Loading;
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* @Author: 刘利军
|
|
3
|
+
* @Date: 2024-12-18 13:55:41
|
|
4
|
+
* @LastEditors: 刘利军
|
|
5
|
+
* @LastEditTime: 2024-12-20 11:33:36
|
|
6
|
+
* @Description:
|
|
7
|
+
* @PageName:
|
|
8
|
+
*/
|
|
9
|
+
import { StyleSheet, Text, TouchableOpacity, View } from 'react-native';
|
|
10
|
+
import React, { useState } from 'react';
|
|
11
|
+
import { pxToDpWidth } from '../../utils';
|
|
12
|
+
import Animated, { FadeIn, FadeOut } from 'react-native-reanimated';
|
|
13
|
+
import LoadingDots from '../Loading';
|
|
14
|
+
|
|
15
|
+
const Confirm: React.FC<{
|
|
16
|
+
onCancel: () => Promise<void> | void;
|
|
17
|
+
onConfirm: () => Promise<void> | void;
|
|
18
|
+
text?: string;
|
|
19
|
+
title?: string;
|
|
20
|
+
}> = ({ onCancel, onConfirm, text, title }) => {
|
|
21
|
+
const [loading, setLoading] = useState(false);
|
|
22
|
+
const click = async (reset = false) => {
|
|
23
|
+
if (loading) {
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
setLoading(true);
|
|
27
|
+
if (reset) {
|
|
28
|
+
await onConfirm();
|
|
29
|
+
} else {
|
|
30
|
+
await onCancel();
|
|
31
|
+
}
|
|
32
|
+
setLoading(false);
|
|
33
|
+
};
|
|
34
|
+
return (
|
|
35
|
+
<Animated.View style={styles.modal} entering={FadeIn} exiting={FadeOut}>
|
|
36
|
+
<View style={styles.container}>
|
|
37
|
+
<Text style={[styles.text, styles.title]}>{title || '确认提醒'}</Text>
|
|
38
|
+
<Text style={[styles.text, styles.des]}>{text}</Text>
|
|
39
|
+
<View style={styles.footer}>
|
|
40
|
+
{loading ? (
|
|
41
|
+
<LoadingDots />
|
|
42
|
+
) : (
|
|
43
|
+
<>
|
|
44
|
+
<TouchableOpacity
|
|
45
|
+
style={styles.btn}
|
|
46
|
+
onPress={async () => await click(false)}
|
|
47
|
+
>
|
|
48
|
+
<Text style={styles.btnText}>取消</Text>
|
|
49
|
+
</TouchableOpacity>
|
|
50
|
+
<TouchableOpacity
|
|
51
|
+
style={styles.btn}
|
|
52
|
+
onPress={async () => await click(true)}
|
|
53
|
+
>
|
|
54
|
+
<Text style={[styles.btnText, styles.btnTextConfirm]}>
|
|
55
|
+
确定
|
|
56
|
+
</Text>
|
|
57
|
+
</TouchableOpacity>
|
|
58
|
+
</>
|
|
59
|
+
)}
|
|
60
|
+
</View>
|
|
61
|
+
</View>
|
|
62
|
+
</Animated.View>
|
|
63
|
+
);
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
export default Confirm;
|
|
67
|
+
|
|
68
|
+
const styles = StyleSheet.create({
|
|
69
|
+
modal: {
|
|
70
|
+
position: 'absolute',
|
|
71
|
+
top: 0,
|
|
72
|
+
left: 0,
|
|
73
|
+
right: 0,
|
|
74
|
+
justifyContent: 'center',
|
|
75
|
+
alignItems: 'center',
|
|
76
|
+
bottom: 0,
|
|
77
|
+
backgroundColor: 'rgba(0,0,0,0.3)',
|
|
78
|
+
},
|
|
79
|
+
container: {
|
|
80
|
+
backgroundColor: '#fff',
|
|
81
|
+
width: '80%',
|
|
82
|
+
borderRadius: 10,
|
|
83
|
+
paddingVertical: 12,
|
|
84
|
+
},
|
|
85
|
+
text: {
|
|
86
|
+
textAlign: 'center',
|
|
87
|
+
paddingHorizontal: pxToDpWidth(12),
|
|
88
|
+
color: '#010101',
|
|
89
|
+
},
|
|
90
|
+
title: {
|
|
91
|
+
fontSize: pxToDpWidth(30),
|
|
92
|
+
fontWeight: '500',
|
|
93
|
+
},
|
|
94
|
+
des: {
|
|
95
|
+
fontWeight: '400',
|
|
96
|
+
fontSize: pxToDpWidth(26),
|
|
97
|
+
marginTop: pxToDpWidth(24),
|
|
98
|
+
marginBottom: pxToDpWidth(36),
|
|
99
|
+
},
|
|
100
|
+
footer: {
|
|
101
|
+
paddingTop: pxToDpWidth(24),
|
|
102
|
+
borderTopWidth: 0.5,
|
|
103
|
+
borderTopColor: '#D4D4D4',
|
|
104
|
+
flexDirection: 'row',
|
|
105
|
+
},
|
|
106
|
+
btn: { flex: 1, justifyContent: 'center', alignItems: 'center' },
|
|
107
|
+
btnText: {
|
|
108
|
+
fontSize: pxToDpWidth(30),
|
|
109
|
+
fontWeight: '400',
|
|
110
|
+
color: '#666',
|
|
111
|
+
},
|
|
112
|
+
btnTextConfirm: {
|
|
113
|
+
color: '#FF7600',
|
|
114
|
+
},
|
|
115
|
+
});
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* @Author: 刘利军
|
|
3
|
+
* @Date: 2024-02-26 14:42:00
|
|
4
|
+
* @LastEditors: 刘利军
|
|
5
|
+
* @LastEditTime: 2024-12-17 11:33:28
|
|
6
|
+
* @Description:
|
|
7
|
+
* @PageName: 左侧预览
|
|
8
|
+
*/
|
|
9
|
+
import {
|
|
10
|
+
StyleSheet,
|
|
11
|
+
TouchableOpacity,
|
|
12
|
+
type ImageStyle,
|
|
13
|
+
Image,
|
|
14
|
+
type GestureResponderEvent,
|
|
15
|
+
} from 'react-native';
|
|
16
|
+
import React from 'react';
|
|
17
|
+
|
|
18
|
+
export type PreviewThumbnailProps = {
|
|
19
|
+
uri: string;
|
|
20
|
+
onPress?: (event: GestureResponderEvent) => void;
|
|
21
|
+
style?: ImageStyle;
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
const PreviewThumbnail: React.FC<PreviewThumbnailProps> = ({
|
|
25
|
+
onPress,
|
|
26
|
+
uri,
|
|
27
|
+
style,
|
|
28
|
+
}) => {
|
|
29
|
+
return (
|
|
30
|
+
<TouchableOpacity onPress={onPress}>
|
|
31
|
+
<Image source={{ uri }} style={{ ...styles.image, ...style }} />
|
|
32
|
+
</TouchableOpacity>
|
|
33
|
+
);
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
export default PreviewThumbnail;
|
|
37
|
+
|
|
38
|
+
const styles = StyleSheet.create({
|
|
39
|
+
image: { width: '100%', height: '100%', borderRadius: 5 },
|
|
40
|
+
});
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* @Author: 刘利军
|
|
3
|
+
* @Date: 2024-01-16 17:51:36
|
|
4
|
+
* @LastEditors: 刘利军
|
|
5
|
+
* @LastEditTime: 2024-12-16 09:45:43
|
|
6
|
+
* @Description:
|
|
7
|
+
* @PageName:
|
|
8
|
+
*/
|
|
9
|
+
import {
|
|
10
|
+
Image,
|
|
11
|
+
TouchableOpacity,
|
|
12
|
+
type ImageStyle,
|
|
13
|
+
type GestureResponderEvent,
|
|
14
|
+
} from 'react-native';
|
|
15
|
+
import React from 'react';
|
|
16
|
+
import { styles } from './Back';
|
|
17
|
+
export type RotateProps = {
|
|
18
|
+
onPress?: (event: GestureResponderEvent) => void;
|
|
19
|
+
style?: ImageStyle;
|
|
20
|
+
};
|
|
21
|
+
const Rotate: React.FC<RotateProps> = ({ onPress, style }) => {
|
|
22
|
+
return (
|
|
23
|
+
<TouchableOpacity onPress={onPress}>
|
|
24
|
+
<Image
|
|
25
|
+
source={require('../assets/preview/rotate.png')}
|
|
26
|
+
style={[styles.image, style]}
|
|
27
|
+
/>
|
|
28
|
+
</TouchableOpacity>
|
|
29
|
+
);
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
export default Rotate;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* @Author: 刘利军
|
|
3
|
+
* @Date: 2024-01-16 17:50:24
|
|
4
|
+
* @LastEditors: 刘利军
|
|
5
|
+
* @LastEditTime: 2024-12-16 10:24:18
|
|
6
|
+
* @Description:
|
|
7
|
+
* @PageName:
|
|
8
|
+
*/
|
|
9
|
+
import { Image, StyleSheet, Text, TouchableOpacity } from 'react-native';
|
|
10
|
+
import React from 'react';
|
|
11
|
+
|
|
12
|
+
import { type RotateProps } from './Rotate';
|
|
13
|
+
const Save: React.FC<RotateProps & { text?: string }> = ({
|
|
14
|
+
onPress,
|
|
15
|
+
style,
|
|
16
|
+
text,
|
|
17
|
+
}) => {
|
|
18
|
+
return (
|
|
19
|
+
<TouchableOpacity style={styles.container} onPress={onPress}>
|
|
20
|
+
<Image
|
|
21
|
+
source={require('../assets/preview/save.png')}
|
|
22
|
+
style={[styles.image, style]}
|
|
23
|
+
/>
|
|
24
|
+
{text && <Text style={styles.text}>{text}</Text>}
|
|
25
|
+
</TouchableOpacity>
|
|
26
|
+
);
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
export default Save;
|
|
30
|
+
|
|
31
|
+
export const styles = StyleSheet.create({
|
|
32
|
+
container: {
|
|
33
|
+
alignItems: 'center',
|
|
34
|
+
},
|
|
35
|
+
image: { width: 34, height: 34, marginBottom: 4 },
|
|
36
|
+
text: { color: '#fff' },
|
|
37
|
+
});
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import PreviewThumbnail from './PreviewThumbnail';
|
|
2
|
+
import Rotate from './Rotate';
|
|
3
|
+
import Back from './Back';
|
|
4
|
+
import Delete from './Delete';
|
|
5
|
+
import Save from './Save';
|
|
6
|
+
export * from './Carousel';
|
|
7
|
+
export * from './Modal';
|
|
8
|
+
export { Back, Rotate, PreviewThumbnail, Delete, Save };
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* @Author: 刘利军
|
|
3
|
+
* @Date: 2024-01-17 16:29:43
|
|
4
|
+
* @LastEditors: 刘利军
|
|
5
|
+
* @LastEditTime: 2024-12-18 15:13:08
|
|
6
|
+
* @Description:
|
|
7
|
+
* @PageName:
|
|
8
|
+
*/
|
|
9
|
+
import useCreation from './useCreation';
|
|
10
|
+
import useConfirm from './useConfirm';
|
|
11
|
+
|
|
12
|
+
export { useCreation, useConfirm };
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* @Author: 刘利军
|
|
3
|
+
* @Date: 2024-01-17 16:31:19
|
|
4
|
+
* @LastEditors: 刘利军
|
|
5
|
+
* @LastEditTime: 2024-12-20 14:58:46
|
|
6
|
+
* @Description:
|
|
7
|
+
* @PageName:
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import React, { useRef, useState } from 'react';
|
|
11
|
+
import { Camera, NoPermission, NoCamera, ModalView } from '../../camera';
|
|
12
|
+
import type { CameraBack, CameraProps, CameraRef } from '../../utils';
|
|
13
|
+
import {
|
|
14
|
+
useCameraDevice,
|
|
15
|
+
useCameraPermission,
|
|
16
|
+
useMicrophonePermission,
|
|
17
|
+
} from 'react-native-vision-camera';
|
|
18
|
+
import { DefaultData } from '../../utils';
|
|
19
|
+
import Container from '../../camera/Container';
|
|
20
|
+
|
|
21
|
+
const useCamera = (): [CameraRef, React.ReactElement] => {
|
|
22
|
+
const [cameraConfig, setCameraConfig] = useState<CameraProps>(DefaultData);
|
|
23
|
+
const [visible, setVisible] = useState(false);
|
|
24
|
+
|
|
25
|
+
const close = (
|
|
26
|
+
data: CameraBack = { code: 200, data: [], message: '返回' }
|
|
27
|
+
) => {
|
|
28
|
+
setVisible(false);
|
|
29
|
+
ref.current.resolvePromise(data);
|
|
30
|
+
};
|
|
31
|
+
const ref = useRef<{
|
|
32
|
+
resolvePromise: (data: CameraBack) => void;
|
|
33
|
+
}>({
|
|
34
|
+
resolvePromise: () => {},
|
|
35
|
+
});
|
|
36
|
+
const api = React.useMemo<CameraRef>(() => {
|
|
37
|
+
return {
|
|
38
|
+
open: async (config) => {
|
|
39
|
+
setVisible(true);
|
|
40
|
+
setCameraConfig((val) => ({
|
|
41
|
+
...val,
|
|
42
|
+
...config,
|
|
43
|
+
}));
|
|
44
|
+
return new Promise<CameraBack>((resolve) => {
|
|
45
|
+
ref.current.resolvePromise = resolve;
|
|
46
|
+
});
|
|
47
|
+
},
|
|
48
|
+
close: () => close(),
|
|
49
|
+
};
|
|
50
|
+
}, []);
|
|
51
|
+
|
|
52
|
+
const isVideo = (cameraConfig?.cameraMode || []).some(
|
|
53
|
+
(item) => item.mode === 'video'
|
|
54
|
+
);
|
|
55
|
+
|
|
56
|
+
const device = useCameraDevice('front');
|
|
57
|
+
// 相机权限请求
|
|
58
|
+
const { hasPermission, requestPermission } = useCameraPermission();
|
|
59
|
+
// 麦克风权限
|
|
60
|
+
const {
|
|
61
|
+
hasPermission: hasMicroPermission,
|
|
62
|
+
requestPermission: hasRequestMicroPermission,
|
|
63
|
+
} = useMicrophonePermission();
|
|
64
|
+
|
|
65
|
+
let Holder = (
|
|
66
|
+
<Camera
|
|
67
|
+
data={cameraConfig}
|
|
68
|
+
visible={visible}
|
|
69
|
+
back={() => close()}
|
|
70
|
+
onChange={(val) => close(val)}
|
|
71
|
+
/>
|
|
72
|
+
);
|
|
73
|
+
if (visible) {
|
|
74
|
+
if (!hasPermission) {
|
|
75
|
+
requestPermission();
|
|
76
|
+
Holder = (
|
|
77
|
+
<Container onCancel={() => close()}>
|
|
78
|
+
<NoPermission />
|
|
79
|
+
</Container>
|
|
80
|
+
);
|
|
81
|
+
} else if (isVideo && !hasMicroPermission) {
|
|
82
|
+
hasRequestMicroPermission();
|
|
83
|
+
Holder = (
|
|
84
|
+
<Container onCancel={() => close()}>
|
|
85
|
+
<NoPermission />
|
|
86
|
+
</Container>
|
|
87
|
+
);
|
|
88
|
+
} else if (device == null) {
|
|
89
|
+
Holder = <NoCamera />;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
return [api, <ModalView visible={visible}>{Holder}</ModalView>];
|
|
94
|
+
};
|
|
95
|
+
|
|
96
|
+
export default useCamera;
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* @Author: 刘利军
|
|
3
|
+
* @Date: 2024-01-17 16:28:56
|
|
4
|
+
* @LastEditors: 刘利军
|
|
5
|
+
* @LastEditTime: 2024-12-18 16:05:43
|
|
6
|
+
* @Description:
|
|
7
|
+
* @PageName:
|
|
8
|
+
*/
|
|
9
|
+
import React, { useRef, useState } from 'react';
|
|
10
|
+
import type { ConfirmConfigProps, ConfirmRef } from '../utils';
|
|
11
|
+
import { Confirm } from '../components';
|
|
12
|
+
|
|
13
|
+
export default function useConfirm() {
|
|
14
|
+
const [visible, setVisible] = useState(false);
|
|
15
|
+
const [config, setConfig] = useState<ConfirmConfigProps>();
|
|
16
|
+
const close = () => {
|
|
17
|
+
setVisible(false);
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
const ref = useRef<{ resolvePromise: (confirmed: boolean) => void }>({
|
|
21
|
+
resolvePromise: () => {},
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
const confirmApi = React.useMemo<ConfirmRef>(() => {
|
|
25
|
+
return {
|
|
26
|
+
open: async (openConfig) => {
|
|
27
|
+
setConfig(openConfig);
|
|
28
|
+
setVisible(true);
|
|
29
|
+
return new Promise<boolean>((resolve) => {
|
|
30
|
+
ref.current.resolvePromise = resolve;
|
|
31
|
+
});
|
|
32
|
+
},
|
|
33
|
+
close: () => close(),
|
|
34
|
+
};
|
|
35
|
+
}, []);
|
|
36
|
+
|
|
37
|
+
let contextHolder = null;
|
|
38
|
+
if (visible) {
|
|
39
|
+
contextHolder = (
|
|
40
|
+
<Confirm
|
|
41
|
+
title={config?.title}
|
|
42
|
+
text={config?.text}
|
|
43
|
+
onCancel={() => {
|
|
44
|
+
close();
|
|
45
|
+
ref.current.resolvePromise(false);
|
|
46
|
+
}}
|
|
47
|
+
onConfirm={() => {
|
|
48
|
+
close();
|
|
49
|
+
ref.current.resolvePromise(true);
|
|
50
|
+
}}
|
|
51
|
+
/>
|
|
52
|
+
);
|
|
53
|
+
}
|
|
54
|
+
return {
|
|
55
|
+
confirmApi,
|
|
56
|
+
contextHolder,
|
|
57
|
+
};
|
|
58
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* @Author: 刘利军
|
|
3
|
+
* @Date: 2024-01-17 16:28:56
|
|
4
|
+
* @LastEditors: 刘利军
|
|
5
|
+
* @LastEditTime: 2024-01-17 16:29:26
|
|
6
|
+
* @Description:
|
|
7
|
+
* @PageName:
|
|
8
|
+
*/
|
|
9
|
+
import type { DependencyList } from 'react';
|
|
10
|
+
import { useRef } from 'react';
|
|
11
|
+
import depsAreSame from '../../utils/depsAreSame';
|
|
12
|
+
|
|
13
|
+
export default function useCreation<T>(factory: () => T, deps: DependencyList) {
|
|
14
|
+
const { current } = useRef({
|
|
15
|
+
deps,
|
|
16
|
+
obj: undefined as undefined | T,
|
|
17
|
+
initialized: false,
|
|
18
|
+
});
|
|
19
|
+
if (current.initialized === false || !depsAreSame(current.deps, deps)) {
|
|
20
|
+
current.deps = deps;
|
|
21
|
+
current.obj = factory();
|
|
22
|
+
current.initialized = true;
|
|
23
|
+
}
|
|
24
|
+
return current.obj as T;
|
|
25
|
+
}
|
package/src/index.tsx
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* @Author: 刘利军
|
|
3
|
+
* @Date: 2024-01-09 13:54:14
|
|
4
|
+
* @LastEditors: 刘利军
|
|
5
|
+
* @LastEditTime: 2024-01-17 16:58:16
|
|
6
|
+
* @Description:
|
|
7
|
+
* @PageName:
|
|
8
|
+
*/
|
|
9
|
+
import { NativeModules, Platform } from 'react-native';
|
|
10
|
+
|
|
11
|
+
const LINKING_ERROR =
|
|
12
|
+
`The package '@unif/react-native-camera' doesn't seem to be linked. Make sure: \n\n` +
|
|
13
|
+
Platform.select({ ios: "- You have run 'pod install'\n", default: '' }) +
|
|
14
|
+
'- You rebuilt the app after installing the package\n' +
|
|
15
|
+
'- You are not using Expo Go\n';
|
|
16
|
+
|
|
17
|
+
// @ts-expect-error
|
|
18
|
+
const isTurboModuleEnabled = global.__turboModuleProxy != null;
|
|
19
|
+
|
|
20
|
+
const ReactNativeCameraModule = isTurboModuleEnabled
|
|
21
|
+
? require('./NativeReactNativeCamera').default
|
|
22
|
+
: NativeModules.ReactNativeCamera;
|
|
23
|
+
|
|
24
|
+
const ReactNativeCamera = ReactNativeCameraModule
|
|
25
|
+
? ReactNativeCameraModule
|
|
26
|
+
: new Proxy(
|
|
27
|
+
{},
|
|
28
|
+
{
|
|
29
|
+
get() {
|
|
30
|
+
throw new Error(LINKING_ERROR);
|
|
31
|
+
},
|
|
32
|
+
}
|
|
33
|
+
);
|
|
34
|
+
|
|
35
|
+
export default ReactNativeCamera;
|
|
36
|
+
|
|
37
|
+
import useCamera from './hooks/useCamera.tsx';
|
|
38
|
+
export { useCamera };
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* @Author: 刘利军
|
|
3
|
+
* @Date: 2024-01-11 14:53:09
|
|
4
|
+
* @LastEditors: 刘利军
|
|
5
|
+
* @LastEditTime: 2024-12-20 15:04:23
|
|
6
|
+
* @Description:
|
|
7
|
+
* @PageName:
|
|
8
|
+
*/
|
|
9
|
+
import { Dimensions, Platform } from 'react-native';
|
|
10
|
+
import type {
|
|
11
|
+
CameraModeCommonType,
|
|
12
|
+
CameraModeImageType,
|
|
13
|
+
CameraModeListItem,
|
|
14
|
+
CameraModeVidoType,
|
|
15
|
+
CameraProps,
|
|
16
|
+
} from '../utils';
|
|
17
|
+
|
|
18
|
+
import StaticSafeAreaInsets from 'react-native-static-safe-area-insets';
|
|
19
|
+
|
|
20
|
+
export const CONTENT_SPACING = 0;
|
|
21
|
+
|
|
22
|
+
const SAFE_BOTTOM =
|
|
23
|
+
Platform.select({
|
|
24
|
+
ios: StaticSafeAreaInsets.safeAreaInsetsBottom,
|
|
25
|
+
}) ?? 0;
|
|
26
|
+
|
|
27
|
+
export const SAFE_AREA_PADDING = {
|
|
28
|
+
paddingLeft: StaticSafeAreaInsets.safeAreaInsetsLeft + CONTENT_SPACING,
|
|
29
|
+
paddingTop: StaticSafeAreaInsets.safeAreaInsetsTop + CONTENT_SPACING,
|
|
30
|
+
paddingRight: StaticSafeAreaInsets.safeAreaInsetsRight + CONTENT_SPACING,
|
|
31
|
+
paddingBottom: SAFE_BOTTOM + CONTENT_SPACING,
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
export const SCREEN_WIDTH = Dimensions.get('window').width;
|
|
35
|
+
export const SCREEN_HEIGHT = Platform.select<number>({
|
|
36
|
+
android:
|
|
37
|
+
Dimensions.get('screen').height - StaticSafeAreaInsets.safeAreaInsetsBottom,
|
|
38
|
+
ios: Dimensions.get('window').height,
|
|
39
|
+
}) as number;
|
|
40
|
+
|
|
41
|
+
// Capture Button
|
|
42
|
+
export const CAPTURE_BUTTON_SIZE = 78;
|
|
43
|
+
export const MAX_ZOOM_FACTOR = 10;
|
|
44
|
+
|
|
45
|
+
// Control Button like Flash
|
|
46
|
+
export const CONTROL_BUTTON_SIZE = 44;
|
|
47
|
+
|
|
48
|
+
// 相机拍照模式
|
|
49
|
+
export const CameraModeList: CameraModeListItem[] = [
|
|
50
|
+
{ label: '连拍', value: 'continuous' },
|
|
51
|
+
{ label: '单拍', value: 'single' },
|
|
52
|
+
{ label: '视频', value: 'video' },
|
|
53
|
+
];
|
|
54
|
+
|
|
55
|
+
// 公用默认值
|
|
56
|
+
export const CameraModeCommonData: CameraModeCommonType = {
|
|
57
|
+
type: 'back',
|
|
58
|
+
flashMode: 'off',
|
|
59
|
+
mode: 'single',
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
// 单拍
|
|
63
|
+
export const SingleData: CameraModeCommonType & CameraModeImageType = {
|
|
64
|
+
...CameraModeCommonData,
|
|
65
|
+
mode: 'single',
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
// 连拍拍
|
|
69
|
+
export const ContinuousData: CameraModeCommonType & CameraModeImageType = {
|
|
70
|
+
...CameraModeCommonData,
|
|
71
|
+
mode: 'continuous',
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
// 视频
|
|
75
|
+
export const VideoData: CameraModeCommonType & CameraModeVidoType = {
|
|
76
|
+
...CameraModeCommonData,
|
|
77
|
+
mode: 'video',
|
|
78
|
+
recTime: 60,
|
|
79
|
+
quantity: 1,
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
export const DefaultData: CameraProps = {
|
|
83
|
+
dataRetainedMode: 'clear',
|
|
84
|
+
cameraMode: [SingleData],
|
|
85
|
+
};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { DependencyList } from 'react';
|
|
2
|
+
|
|
3
|
+
export default function depsAreSame(
|
|
4
|
+
oldDeps: DependencyList,
|
|
5
|
+
deps: DependencyList
|
|
6
|
+
): boolean {
|
|
7
|
+
if (oldDeps === deps) return true;
|
|
8
|
+
for (let i = 0; i < oldDeps.length; i++) {
|
|
9
|
+
if (!Object.is(oldDeps[i], deps[i])) return false;
|
|
10
|
+
}
|
|
11
|
+
return true;
|
|
12
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* @Author: 刘利军
|
|
3
|
+
* @Date: 2024-01-11 14:53:09
|
|
4
|
+
* @LastEditors: 刘利军
|
|
5
|
+
* @LastEditTime: 2024-12-17 16:54:04
|
|
6
|
+
* @Description:
|
|
7
|
+
* @PageName:
|
|
8
|
+
*/
|
|
9
|
+
export * from './common';
|
|
10
|
+
export * from './render-item';
|
|
11
|
+
export * from './px-to-dp';
|
|
12
|
+
export * from './interface';
|