react-native-rectangle-doc-scanner 0.49.0 → 0.51.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/dist/CropEditor.js +20 -5
- package/package.json +1 -1
- package/src/CropEditor.tsx +17 -4
- package/src/external.d.ts +2 -0
package/dist/CropEditor.js
CHANGED
|
@@ -32,11 +32,14 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
32
32
|
return result;
|
|
33
33
|
};
|
|
34
34
|
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
35
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
39
|
exports.CropEditor = void 0;
|
|
37
40
|
const react_1 = __importStar(require("react"));
|
|
38
41
|
const react_native_1 = require("react-native");
|
|
39
|
-
const react_native_perspective_image_cropper_1 = require("react-native-perspective-image-cropper");
|
|
42
|
+
const react_native_perspective_image_cropper_1 = __importDefault(require("react-native-perspective-image-cropper"));
|
|
40
43
|
const coordinate_1 = require("./utils/coordinate");
|
|
41
44
|
/**
|
|
42
45
|
* CropEditor Component
|
|
@@ -57,6 +60,7 @@ const CropEditor = ({ document, overlayColor = 'rgba(0,0,0,0.5)', overlayStrokeC
|
|
|
57
60
|
width: react_native_1.Dimensions.get('window').width,
|
|
58
61
|
height: react_native_1.Dimensions.get('window').height,
|
|
59
62
|
});
|
|
63
|
+
const [isImageLoading, setIsImageLoading] = (0, react_1.useState)(true);
|
|
60
64
|
// Get initial rectangle from detected quad or use default
|
|
61
65
|
const getInitialRectangle = (0, react_1.useCallback)(() => {
|
|
62
66
|
if (!document.quad || !imageSize) {
|
|
@@ -72,7 +76,9 @@ const CropEditor = ({ document, overlayColor = 'rgba(0,0,0,0.5)', overlayStrokeC
|
|
|
72
76
|
}, [document.quad, document.width, document.height, imageSize]);
|
|
73
77
|
const handleImageLoad = (0, react_1.useCallback)((event) => {
|
|
74
78
|
const { width, height } = event.nativeEvent.source;
|
|
79
|
+
console.log('Image loaded with size:', { width, height });
|
|
75
80
|
setImageSize({ width, height });
|
|
81
|
+
setIsImageLoading(false);
|
|
76
82
|
}, []);
|
|
77
83
|
const handleLayout = (0, react_1.useCallback)((event) => {
|
|
78
84
|
const { width, height } = event.nativeEvent.layout;
|
|
@@ -92,12 +98,16 @@ const CropEditor = ({ document, overlayColor = 'rgba(0,0,0,0.5)', overlayStrokeC
|
|
|
92
98
|
onCropChange?.(rect);
|
|
93
99
|
}, [imageSize, onCropChange]);
|
|
94
100
|
// Wait for image to load to get dimensions
|
|
95
|
-
if (!imageSize) {
|
|
96
|
-
return (react_1.default.createElement(react_native_1.View, { style: styles.container, onLayout: handleLayout },
|
|
97
|
-
react_1.default.createElement(react_native_1.Image, { source: { uri: `file://${document.path}` }, style: styles.hiddenImage, onLoad: handleImageLoad,
|
|
101
|
+
if (!imageSize || isImageLoading) {
|
|
102
|
+
return (react_1.default.createElement(react_native_1.View, { style: [styles.container, styles.loadingContainer], onLayout: handleLayout },
|
|
103
|
+
react_1.default.createElement(react_native_1.Image, { source: { uri: `file://${document.path}` }, style: styles.hiddenImage, onLoad: handleImageLoad, onError: (error) => {
|
|
104
|
+
console.error('Image load error:', error);
|
|
105
|
+
setIsImageLoading(false);
|
|
106
|
+
}, resizeMode: "contain" }),
|
|
107
|
+
react_1.default.createElement(react_native_1.ActivityIndicator, { size: "large", color: handlerColor })));
|
|
98
108
|
}
|
|
99
109
|
return (react_1.default.createElement(react_native_1.View, { style: styles.container, onLayout: handleLayout },
|
|
100
|
-
react_1.default.createElement(react_native_perspective_image_cropper_1.
|
|
110
|
+
react_1.default.createElement(react_native_perspective_image_cropper_1.default, { height: displaySize.height, width: displaySize.width, image: `file://${document.path}`, rectangleCoordinates: getInitialRectangle(), overlayColor: overlayColor, overlayStrokeColor: overlayStrokeColor, handlerColor: handlerColor, enablePanStrict: enablePanStrict, onDragEnd: handleDragEnd })));
|
|
101
111
|
};
|
|
102
112
|
exports.CropEditor = CropEditor;
|
|
103
113
|
const styles = react_native_1.StyleSheet.create({
|
|
@@ -105,9 +115,14 @@ const styles = react_native_1.StyleSheet.create({
|
|
|
105
115
|
flex: 1,
|
|
106
116
|
backgroundColor: '#000',
|
|
107
117
|
},
|
|
118
|
+
loadingContainer: {
|
|
119
|
+
justifyContent: 'center',
|
|
120
|
+
alignItems: 'center',
|
|
121
|
+
},
|
|
108
122
|
hiddenImage: {
|
|
109
123
|
width: 1,
|
|
110
124
|
height: 1,
|
|
111
125
|
opacity: 0,
|
|
126
|
+
position: 'absolute',
|
|
112
127
|
},
|
|
113
128
|
});
|
package/package.json
CHANGED
package/src/CropEditor.tsx
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React, { useState, useCallback } from 'react';
|
|
2
|
-
import { View, StyleSheet, Image, Dimensions } from 'react-native';
|
|
3
|
-
import
|
|
2
|
+
import { View, StyleSheet, Image, Dimensions, ActivityIndicator } from 'react-native';
|
|
3
|
+
import CustomImageCropper from 'react-native-perspective-image-cropper';
|
|
4
4
|
import type { Rectangle as CropperRectangle } from 'react-native-perspective-image-cropper';
|
|
5
5
|
import type { Point, Rectangle, CapturedDocument } from './types';
|
|
6
6
|
import { quadToRectangle, scaleRectangle } from './utils/coordinate';
|
|
@@ -40,6 +40,7 @@ export const CropEditor: React.FC<CropEditorProps> = ({
|
|
|
40
40
|
width: Dimensions.get('window').width,
|
|
41
41
|
height: Dimensions.get('window').height,
|
|
42
42
|
});
|
|
43
|
+
const [isImageLoading, setIsImageLoading] = useState(true);
|
|
43
44
|
|
|
44
45
|
// Get initial rectangle from detected quad or use default
|
|
45
46
|
const getInitialRectangle = useCallback((): CropperRectangle | undefined => {
|
|
@@ -66,7 +67,9 @@ export const CropEditor: React.FC<CropEditorProps> = ({
|
|
|
66
67
|
|
|
67
68
|
const handleImageLoad = useCallback((event: any) => {
|
|
68
69
|
const { width, height } = event.nativeEvent.source;
|
|
70
|
+
console.log('Image loaded with size:', { width, height });
|
|
69
71
|
setImageSize({ width, height });
|
|
72
|
+
setIsImageLoading(false);
|
|
70
73
|
}, []);
|
|
71
74
|
|
|
72
75
|
const handleLayout = useCallback((event: any) => {
|
|
@@ -91,15 +94,20 @@ export const CropEditor: React.FC<CropEditorProps> = ({
|
|
|
91
94
|
}, [imageSize, onCropChange]);
|
|
92
95
|
|
|
93
96
|
// Wait for image to load to get dimensions
|
|
94
|
-
if (!imageSize) {
|
|
97
|
+
if (!imageSize || isImageLoading) {
|
|
95
98
|
return (
|
|
96
|
-
<View style={styles.container} onLayout={handleLayout}>
|
|
99
|
+
<View style={[styles.container, styles.loadingContainer]} onLayout={handleLayout}>
|
|
97
100
|
<Image
|
|
98
101
|
source={{ uri: `file://${document.path}` }}
|
|
99
102
|
style={styles.hiddenImage}
|
|
100
103
|
onLoad={handleImageLoad}
|
|
104
|
+
onError={(error) => {
|
|
105
|
+
console.error('Image load error:', error);
|
|
106
|
+
setIsImageLoading(false);
|
|
107
|
+
}}
|
|
101
108
|
resizeMode="contain"
|
|
102
109
|
/>
|
|
110
|
+
<ActivityIndicator size="large" color={handlerColor} />
|
|
103
111
|
</View>
|
|
104
112
|
);
|
|
105
113
|
}
|
|
@@ -126,9 +134,14 @@ const styles = StyleSheet.create({
|
|
|
126
134
|
flex: 1,
|
|
127
135
|
backgroundColor: '#000',
|
|
128
136
|
},
|
|
137
|
+
loadingContainer: {
|
|
138
|
+
justifyContent: 'center',
|
|
139
|
+
alignItems: 'center',
|
|
140
|
+
},
|
|
129
141
|
hiddenImage: {
|
|
130
142
|
width: 1,
|
|
131
143
|
height: 1,
|
|
132
144
|
opacity: 0,
|
|
145
|
+
position: 'absolute',
|
|
133
146
|
},
|
|
134
147
|
});
|
package/src/external.d.ts
CHANGED
|
@@ -131,4 +131,6 @@ declare module 'react-native-perspective-image-cropper' {
|
|
|
131
131
|
};
|
|
132
132
|
|
|
133
133
|
export const CustomImageCropper: ComponentType<CustomImageCropperProps>;
|
|
134
|
+
const CustomImageCropperDefault: ComponentType<CustomImageCropperProps>;
|
|
135
|
+
export default CustomImageCropperDefault;
|
|
134
136
|
}
|