@chem-po/react-native 0.0.26 → 0.0.27
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/lib/commonjs/components/form/input/file/index.js +53 -6
- package/lib/commonjs/components/form/input/file/index.js.map +1 -1
- package/lib/commonjs/components/image/ImageViewModal.js +52 -2
- package/lib/commonjs/components/image/ImageViewModal.js.map +1 -1
- package/lib/commonjs/components/loading/LoadingImage.js +8 -2
- package/lib/commonjs/components/loading/LoadingImage.js.map +1 -1
- package/lib/commonjs/utils/downloadFile.js +43 -0
- package/lib/commonjs/utils/downloadFile.js.map +1 -0
- package/lib/module/components/form/input/file/index.js +54 -7
- package/lib/module/components/form/input/file/index.js.map +1 -1
- package/lib/module/components/image/ImageViewModal.js +53 -3
- package/lib/module/components/image/ImageViewModal.js.map +1 -1
- package/lib/module/components/loading/LoadingImage.js +8 -2
- package/lib/module/components/loading/LoadingImage.js.map +1 -1
- package/lib/module/utils/downloadFile.js +35 -0
- package/lib/module/utils/downloadFile.js.map +1 -0
- package/lib/typescript/components/form/input/file/index.d.ts +2 -1
- package/lib/typescript/components/form/input/file/index.d.ts.map +1 -1
- package/lib/typescript/components/image/ImageViewModal.d.ts +3 -0
- package/lib/typescript/components/image/ImageViewModal.d.ts.map +1 -1
- package/lib/typescript/components/loading/LoadingImage.d.ts +4 -1
- package/lib/typescript/components/loading/LoadingImage.d.ts.map +1 -1
- package/lib/typescript/utils/downloadFile.d.ts +4 -0
- package/lib/typescript/utils/downloadFile.d.ts.map +1 -0
- package/package.json +4 -3
- package/src/components/form/input/file/index.tsx +52 -3
- package/src/components/image/ImageViewModal.tsx +57 -2
- package/src/components/loading/LoadingImage.tsx +16 -1
- package/src/utils/downloadFile.ts +36 -0
- package/lib/commonjs/components/image/ImageViewModal.backup.js +0 -285
- package/lib/commonjs/components/image/ImageViewModal.backup.js.map +0 -1
- package/lib/commonjs/components/image/ImageViewModal.old.js +0 -285
- package/lib/commonjs/components/image/ImageViewModal.old.js.map +0 -1
- package/lib/module/components/image/ImageViewModal.backup.js +0 -277
- package/lib/module/components/image/ImageViewModal.backup.js.map +0 -1
- package/lib/module/components/image/ImageViewModal.old.js +0 -277
- package/lib/module/components/image/ImageViewModal.old.js.map +0 -1
- package/lib/typescript/components/image/ImageViewModal.backup.d.ts +0 -9
- package/lib/typescript/components/image/ImageViewModal.backup.d.ts.map +0 -1
- package/lib/typescript/components/image/ImageViewModal.old.d.ts +0 -9
- package/lib/typescript/components/image/ImageViewModal.old.d.ts.map +0 -1
- package/src/components/image/ImageViewModal.backup.tsx +0 -261
- package/src/components/image/ImageViewModal.old.tsx +0 -261
|
@@ -1,14 +1,18 @@
|
|
|
1
|
-
import { useScreen } from '@chem-po/react';
|
|
1
|
+
import { useScreen, useToast } from '@chem-po/react';
|
|
2
2
|
import { Ionicons } from '@expo/vector-icons';
|
|
3
3
|
import React, { useCallback, useEffect, useMemo, useState } from 'react';
|
|
4
4
|
import { Image, Modal, StyleSheet, TouchableOpacity, View } from 'react-native';
|
|
5
5
|
import { Gesture, GestureDetector, GestureHandlerRootView } from 'react-native-gesture-handler';
|
|
6
6
|
import Animated, { useAnimatedStyle, useSharedValue, withSpring } from 'react-native-reanimated';
|
|
7
|
+
import { downloadFile } from '../../utils/downloadFile';
|
|
7
8
|
import { LoadingLogo } from '../loading/Loading';
|
|
8
9
|
export const ImageViewModal = ({
|
|
9
10
|
isOpen,
|
|
10
11
|
onClose,
|
|
11
|
-
src
|
|
12
|
+
src,
|
|
13
|
+
filename,
|
|
14
|
+
fileType,
|
|
15
|
+
withDownload
|
|
12
16
|
}) => {
|
|
13
17
|
const [loading, setLoading] = useState(true);
|
|
14
18
|
const screenWidth = useScreen(s => s.width);
|
|
@@ -17,6 +21,10 @@ export const ImageViewModal = ({
|
|
|
17
21
|
width: screenWidth / 2,
|
|
18
22
|
height: screenHeight / 2
|
|
19
23
|
});
|
|
24
|
+
const {
|
|
25
|
+
showError,
|
|
26
|
+
showSuccess
|
|
27
|
+
} = useToast();
|
|
20
28
|
|
|
21
29
|
// Shared values for zoom and pan (reanimated)
|
|
22
30
|
const scale = useSharedValue(1);
|
|
@@ -74,6 +82,30 @@ export const ImageViewModal = ({
|
|
|
74
82
|
}
|
|
75
83
|
}, [isOpen, src, resetTransform]);
|
|
76
84
|
|
|
85
|
+
// Download functionality
|
|
86
|
+
const handleDownload = useCallback(async () => {
|
|
87
|
+
if (!src) {
|
|
88
|
+
showError('Image URL is not available');
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
if (!fileType) {
|
|
92
|
+
showError('File type is not available');
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
try {
|
|
96
|
+
const usedName = filename ?? `image_${Date.now()}.jpg`;
|
|
97
|
+
await downloadFile(src, usedName, fileType);
|
|
98
|
+
showSuccess('Image downloaded successfully');
|
|
99
|
+
} catch (error) {
|
|
100
|
+
if (error instanceof Error) {
|
|
101
|
+
console.error('Error downloading image:', error.message);
|
|
102
|
+
} else {
|
|
103
|
+
console.error('Error downloading image:', String(error));
|
|
104
|
+
}
|
|
105
|
+
showError('Failed to download image');
|
|
106
|
+
}
|
|
107
|
+
}, [src, showError, showSuccess, filename, fileType]);
|
|
108
|
+
|
|
77
109
|
// Pan gesture with worklet
|
|
78
110
|
const panGesture = Gesture.Pan().onUpdate(event => {
|
|
79
111
|
'worklet';
|
|
@@ -198,7 +230,14 @@ export const ImageViewModal = ({
|
|
|
198
230
|
onLoadStart: onLoadStart,
|
|
199
231
|
onLoad: onLoad,
|
|
200
232
|
resizeMode: "contain"
|
|
201
|
-
}))), /*#__PURE__*/React.createElement(TouchableOpacity, {
|
|
233
|
+
}))), withDownload && /*#__PURE__*/React.createElement(TouchableOpacity, {
|
|
234
|
+
style: styles.downloadButton,
|
|
235
|
+
onPress: () => void handleDownload()
|
|
236
|
+
}, /*#__PURE__*/React.createElement(Ionicons, {
|
|
237
|
+
name: "download",
|
|
238
|
+
size: 24,
|
|
239
|
+
color: "white"
|
|
240
|
+
})), /*#__PURE__*/React.createElement(TouchableOpacity, {
|
|
202
241
|
style: styles.closeButton,
|
|
203
242
|
onPress: onClose
|
|
204
243
|
}, /*#__PURE__*/React.createElement(Ionicons, {
|
|
@@ -237,6 +276,17 @@ const styles = StyleSheet.create({
|
|
|
237
276
|
width: '100%',
|
|
238
277
|
height: '100%'
|
|
239
278
|
},
|
|
279
|
+
downloadButton: {
|
|
280
|
+
position: 'absolute',
|
|
281
|
+
top: 16,
|
|
282
|
+
right: 64,
|
|
283
|
+
width: 40,
|
|
284
|
+
height: 40,
|
|
285
|
+
borderRadius: 20,
|
|
286
|
+
backgroundColor: 'rgba(0, 0, 0, 0.5)',
|
|
287
|
+
justifyContent: 'center',
|
|
288
|
+
alignItems: 'center'
|
|
289
|
+
},
|
|
240
290
|
closeButton: {
|
|
241
291
|
position: 'absolute',
|
|
242
292
|
top: 16,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useScreen","Ionicons","React","useCallback","useEffect","useMemo","useState","Image","Modal","StyleSheet","TouchableOpacity","View","Gesture","GestureDetector","GestureHandlerRootView","Animated","useAnimatedStyle","useSharedValue","withSpring","LoadingLogo","ImageViewModal","isOpen","onClose","src","loading","setLoading","screenWidth","s","width","screenHeight","height","imageSize","setImageSize","scale","translateX","translateY","savedScale","savedTranslateX","savedTranslateY","ratio","h","Math","min","w","onLoadStart","onLoad","e","naturalWidth","naturalHeight","nativeEvent","source","resetTransform","value","panGesture","Pan","onUpdate","event","newTranslateX","translationX","newTranslateY","translationY","maxTranslateX","maxTranslateY","boundedTranslateX","max","boundedTranslateY","onEnd","pinchGesture","Pinch","newScale","boundedScale","doubleTapGesture","Tap","numberOfTaps","combinedGestures","Race","Simultaneous","animatedStyle","transform","createElement","visible","transparent","animationType","onRequestClose","style","styles","gestureRoot","modalOverlay","backgroundTouchable","activeOpacity","onPress","contentContainer","gesture","imageContainer","opacity","uri","undefined","image","resizeMode","closeButton","name","size","color","loadingContainer","isLoading","create","flex","backgroundColor","absoluteFillObject","justifyContent","alignItems","padding","overflow","borderRadius","position","top","right"],"sourceRoot":"..\\..\\..\\..\\src","sources":["components/image/ImageViewModal.tsx"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["useScreen","useToast","Ionicons","React","useCallback","useEffect","useMemo","useState","Image","Modal","StyleSheet","TouchableOpacity","View","Gesture","GestureDetector","GestureHandlerRootView","Animated","useAnimatedStyle","useSharedValue","withSpring","downloadFile","LoadingLogo","ImageViewModal","isOpen","onClose","src","filename","fileType","withDownload","loading","setLoading","screenWidth","s","width","screenHeight","height","imageSize","setImageSize","showError","showSuccess","scale","translateX","translateY","savedScale","savedTranslateX","savedTranslateY","ratio","h","Math","min","w","onLoadStart","onLoad","e","naturalWidth","naturalHeight","nativeEvent","source","resetTransform","value","handleDownload","usedName","Date","now","error","Error","console","message","String","panGesture","Pan","onUpdate","event","newTranslateX","translationX","newTranslateY","translationY","maxTranslateX","maxTranslateY","boundedTranslateX","max","boundedTranslateY","onEnd","pinchGesture","Pinch","newScale","boundedScale","doubleTapGesture","Tap","numberOfTaps","combinedGestures","Race","Simultaneous","animatedStyle","transform","createElement","visible","transparent","animationType","onRequestClose","style","styles","gestureRoot","modalOverlay","backgroundTouchable","activeOpacity","onPress","contentContainer","gesture","imageContainer","opacity","uri","undefined","image","resizeMode","downloadButton","name","size","color","closeButton","loadingContainer","isLoading","create","flex","backgroundColor","absoluteFillObject","justifyContent","alignItems","padding","overflow","borderRadius","position","top","right"],"sourceRoot":"..\\..\\..\\..\\src","sources":["components/image/ImageViewModal.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -9,10 +9,13 @@ export const LoadingImage = ({
|
|
|
9
9
|
src,
|
|
10
10
|
loadingOverride,
|
|
11
11
|
onLoad,
|
|
12
|
+
filename,
|
|
13
|
+
fileType,
|
|
12
14
|
width,
|
|
13
15
|
height,
|
|
14
16
|
withFullView,
|
|
15
17
|
buttonFullView,
|
|
18
|
+
withDownload,
|
|
16
19
|
style
|
|
17
20
|
}) => {
|
|
18
21
|
const [imageLoading, setImageLoading] = useState(!!src);
|
|
@@ -71,11 +74,14 @@ export const LoadingImage = ({
|
|
|
71
74
|
}, /*#__PURE__*/React.createElement(LoadingLogo, {
|
|
72
75
|
isLoading: loading,
|
|
73
76
|
size: 10
|
|
74
|
-
})), viewing
|
|
77
|
+
})), viewing ? /*#__PURE__*/React.createElement(ImageViewModal, {
|
|
78
|
+
withDownload: withDownload,
|
|
79
|
+
filename: filename,
|
|
80
|
+
fileType: fileType,
|
|
75
81
|
isOpen: true,
|
|
76
82
|
src: src ?? emptyPng,
|
|
77
83
|
onClose: () => setViewing(false)
|
|
78
|
-
}));
|
|
84
|
+
}) : null);
|
|
79
85
|
};
|
|
80
86
|
const styles = StyleSheet.create({
|
|
81
87
|
container: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useMounted","Ionicons","React","useCallback","useEffect","useMemo","useRef","useState","Image","StyleSheet","TouchableOpacity","View","ImageViewModal","LoadingLogo","emptyPng","LoadingImage","src","loadingOverride","onLoad","width","height","withFullView","buttonFullView","style","imageLoading","setImageLoading","imageRef","viewing","setViewing","mounted","handleImageLoad","e","prevSrc","setPrevSrc","loading","ImageComponent","createElement","ref","source","uri","styles","image","opacity","onLoadEnd","resizeMode","container","activeOpacity","onPress","undefined","fullViewButton","name","size","color","fullViewIcon","loadingContainer","pointerEvents","isLoading","isOpen","onClose","create","overflow","position","imageContainer","absoluteFillObject","justifyContent","alignItems","top","right","borderRadius","backgroundColor"],"sourceRoot":"..\\..\\..\\..\\src","sources":["components/loading/LoadingImage.tsx"],"mappings":"AAAA,SAASA,UAAU,QAAQ,gBAAgB;AAC3C,SAASC,QAAQ,QAAQ,oBAAoB;AAC7C,OAAOC,KAAK,IAAIC,WAAW,EAAEC,SAAS,EAAEC,OAAO,EAAEC,MAAM,EAAEC,QAAQ,QAAQ,OAAO;AAChF,SAAyBC,KAAK,EAAEC,UAAU,EAAEC,gBAAgB,EAAEC,IAAI,QAAmB,cAAc;AACnG,SAASC,cAAc,QAAQ,yBAAyB;AACxD,SAASC,WAAW,QAAQ,WAAW;
|
|
1
|
+
{"version":3,"names":["useMounted","Ionicons","React","useCallback","useEffect","useMemo","useRef","useState","Image","StyleSheet","TouchableOpacity","View","ImageViewModal","LoadingLogo","emptyPng","LoadingImage","src","loadingOverride","onLoad","filename","fileType","width","height","withFullView","buttonFullView","withDownload","style","imageLoading","setImageLoading","imageRef","viewing","setViewing","mounted","handleImageLoad","e","prevSrc","setPrevSrc","loading","ImageComponent","createElement","ref","source","uri","styles","image","opacity","onLoadEnd","resizeMode","container","activeOpacity","onPress","undefined","fullViewButton","name","size","color","fullViewIcon","loadingContainer","pointerEvents","isLoading","isOpen","onClose","create","overflow","position","imageContainer","absoluteFillObject","justifyContent","alignItems","top","right","borderRadius","backgroundColor"],"sourceRoot":"..\\..\\..\\..\\src","sources":["components/loading/LoadingImage.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import * as FileSystem from 'expo-file-system';
|
|
2
|
+
export const downloadFile = async (uri, filename, fileType) => {
|
|
3
|
+
const permissions = await FileSystem.StorageAccessFramework.requestDirectoryPermissionsAsync();
|
|
4
|
+
if (!permissions.granted) {
|
|
5
|
+
return;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
// Download to temporary location first
|
|
9
|
+
const tempFileUri = `${FileSystem.cacheDirectory}${filename}`;
|
|
10
|
+
|
|
11
|
+
// Download the file to temporary location
|
|
12
|
+
await FileSystem.downloadAsync(uri, tempFileUri);
|
|
13
|
+
|
|
14
|
+
// Read the temporary file as base64
|
|
15
|
+
const base64Content = await FileSystem.readAsStringAsync(tempFileUri, {
|
|
16
|
+
encoding: FileSystem.EncodingType.Base64
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
// Create a file within the selected directory using SAF
|
|
20
|
+
const fileUri = await FileSystem.StorageAccessFramework.createFileAsync(permissions.directoryUri, filename, fileType);
|
|
21
|
+
|
|
22
|
+
// Write the content to the SAF file
|
|
23
|
+
await FileSystem.StorageAccessFramework.writeAsStringAsync(fileUri, base64Content, {
|
|
24
|
+
encoding: FileSystem.EncodingType.Base64
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
// Clean up temporary file
|
|
28
|
+
await FileSystem.deleteAsync(tempFileUri, {
|
|
29
|
+
idempotent: true
|
|
30
|
+
});
|
|
31
|
+
return {
|
|
32
|
+
uri: fileUri
|
|
33
|
+
};
|
|
34
|
+
};
|
|
35
|
+
//# sourceMappingURL=downloadFile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["FileSystem","downloadFile","uri","filename","fileType","permissions","StorageAccessFramework","requestDirectoryPermissionsAsync","granted","tempFileUri","cacheDirectory","downloadAsync","base64Content","readAsStringAsync","encoding","EncodingType","Base64","fileUri","createFileAsync","directoryUri","writeAsStringAsync","deleteAsync","idempotent"],"sourceRoot":"..\\..\\..\\src","sources":["utils/downloadFile.ts"],"mappings":"AAAA,OAAO,KAAKA,UAAU,MAAM,kBAAkB;AAE9C,OAAO,MAAMC,YAAY,GAAG,MAAAA,CAAOC,GAAW,EAAEC,QAAgB,EAAEC,QAAgB,KAAK;EACrF,MAAMC,WAAW,GAAG,MAAML,UAAU,CAACM,sBAAsB,CAACC,gCAAgC,CAAC,CAAC;EAC9F,IAAI,CAACF,WAAW,CAACG,OAAO,EAAE;IACxB;EACF;;EAEA;EACA,MAAMC,WAAW,GAAG,GAAGT,UAAU,CAACU,cAAc,GAAGP,QAAQ,EAAE;;EAE7D;EACA,MAAMH,UAAU,CAACW,aAAa,CAACT,GAAG,EAAEO,WAAW,CAAC;;EAEhD;EACA,MAAMG,aAAa,GAAG,MAAMZ,UAAU,CAACa,iBAAiB,CAACJ,WAAW,EAAE;IACpEK,QAAQ,EAAEd,UAAU,CAACe,YAAY,CAACC;EACpC,CAAC,CAAC;;EAEF;EACA,MAAMC,OAAO,GAAG,MAAMjB,UAAU,CAACM,sBAAsB,CAACY,eAAe,CACrEb,WAAW,CAACc,YAAY,EACxBhB,QAAQ,EACRC,QACF,CAAC;;EAED;EACA,MAAMJ,UAAU,CAACM,sBAAsB,CAACc,kBAAkB,CAACH,OAAO,EAAEL,aAAa,EAAE;IACjFE,QAAQ,EAAEd,UAAU,CAACe,YAAY,CAACC;EACpC,CAAC,CAAC;;EAEF;EACA,MAAMhB,UAAU,CAACqB,WAAW,CAACZ,WAAW,EAAE;IAAEa,UAAU,EAAE;EAAK,CAAC,CAAC;EAE/D,OAAO;IAAEpB,GAAG,EAAEe;EAAQ,CAAC;AACzB,CAAC","ignoreList":[]}
|
|
@@ -3,12 +3,13 @@ import { FileField } from '@chem-po/react';
|
|
|
3
3
|
import React from 'react';
|
|
4
4
|
import { StyleProp, ViewStyle } from 'react-native';
|
|
5
5
|
import { FieldProps } from '../../types';
|
|
6
|
-
export declare const FileView: ({ value, hasUpload, imageOptions, withFullView, nonImageContainerStyle, }: {
|
|
6
|
+
export declare const FileView: ({ value, hasUpload, imageOptions, withFullView, nonImageContainerStyle, withDownload, }: {
|
|
7
7
|
value?: FileValue | null;
|
|
8
8
|
hasUpload?: boolean;
|
|
9
9
|
imageOptions?: ImageViewOptions;
|
|
10
10
|
withFullView?: boolean;
|
|
11
11
|
nonImageContainerStyle?: StyleProp<ViewStyle>;
|
|
12
|
+
withDownload?: boolean;
|
|
12
13
|
}) => React.JSX.Element;
|
|
13
14
|
export declare const FileComponent: React.ForwardRefExoticComponent<FieldProps<FileField> & React.RefAttributes<InputRef>>;
|
|
14
15
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/components/form/input/file/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,QAAQ,EAAkB,MAAM,eAAe,CAAA;AACrF,OAAO,EACL,SAAS,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/components/form/input/file/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,QAAQ,EAAkB,MAAM,eAAe,CAAA;AACrF,OAAO,EACL,SAAS,EAQV,MAAM,gBAAgB,CAAA;AAIvB,OAAO,KAA0E,MAAM,OAAO,CAAA;AAC9F,OAAO,EAAE,SAAS,EAA4C,SAAS,EAAE,MAAM,cAAc,CAAA;AAG7F,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AA+BxC,eAAO,MAAM,QAAQ,GAAI,yFAOtB;IACD,KAAK,CAAC,EAAE,SAAS,GAAG,IAAI,CAAA;IACxB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,YAAY,CAAC,EAAE,gBAAgB,CAAA;IAC/B,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,sBAAsB,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAA;IAC7C,YAAY,CAAC,EAAE,OAAO,CAAA;CACvB,sBAkFA,CAAA;AAED,eAAO,MAAM,aAAa,wFA2FzB,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ImageViewModal.d.ts","sourceRoot":"","sources":["../../../../src/components/image/ImageViewModal.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAoD,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"ImageViewModal.d.ts","sourceRoot":"","sources":["../../../../src/components/image/ImageViewModal.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAoD,MAAM,OAAO,CAAA;AAOxE,UAAU,mBAAmB;IAC3B,MAAM,EAAE,OAAO,CAAA;IACf,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,YAAY,CAAC,EAAE,OAAO,CAAA;CACvB;AAED,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,mBAAmB,CA4OxD,CAAA"}
|
|
@@ -4,11 +4,14 @@ export interface LoadingImageProps {
|
|
|
4
4
|
src?: string | null;
|
|
5
5
|
loadingOverride?: boolean;
|
|
6
6
|
onLoad?: (e: any) => void;
|
|
7
|
+
filename?: string;
|
|
8
|
+
fileType?: string;
|
|
7
9
|
withFullView?: boolean;
|
|
8
10
|
buttonFullView?: boolean;
|
|
9
11
|
style?: ViewStyle;
|
|
10
12
|
width?: DimensionValue;
|
|
11
13
|
height?: DimensionValue;
|
|
14
|
+
withDownload?: boolean;
|
|
12
15
|
}
|
|
13
|
-
export declare const LoadingImage: ({ src, loadingOverride, onLoad, width, height, withFullView, buttonFullView, style, }: LoadingImageProps) => React.JSX.Element;
|
|
16
|
+
export declare const LoadingImage: ({ src, loadingOverride, onLoad, filename, fileType, width, height, withFullView, buttonFullView, withDownload, style, }: LoadingImageProps) => React.JSX.Element;
|
|
14
17
|
//# sourceMappingURL=LoadingImage.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LoadingImage.d.ts","sourceRoot":"","sources":["../../../../src/components/loading/LoadingImage.tsx"],"names":[],"mappings":"AAEA,OAAO,KAA4D,MAAM,OAAO,CAAA;AAChF,OAAO,EAAE,cAAc,EAA6C,SAAS,EAAE,MAAM,cAAc,CAAA;AAInG,MAAM,WAAW,iBAAiB;IAChC,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACnB,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,IAAI,CAAA;IACzB,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB,KAAK,CAAC,EAAE,cAAc,CAAA;IACtB,MAAM,CAAC,EAAE,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"LoadingImage.d.ts","sourceRoot":"","sources":["../../../../src/components/loading/LoadingImage.tsx"],"names":[],"mappings":"AAEA,OAAO,KAA4D,MAAM,OAAO,CAAA;AAChF,OAAO,EAAE,cAAc,EAA6C,SAAS,EAAE,MAAM,cAAc,CAAA;AAInG,MAAM,WAAW,iBAAiB;IAChC,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACnB,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,IAAI,CAAA;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB,KAAK,CAAC,EAAE,cAAc,CAAA;IACtB,MAAM,CAAC,EAAE,cAAc,CAAA;IACvB,YAAY,CAAC,EAAE,OAAO,CAAA;CACvB;AAKD,eAAO,MAAM,YAAY,GAAI,yHAY1B,iBAAiB,sBA4FnB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"downloadFile.d.ts","sourceRoot":"","sources":["../../../src/utils/downloadFile.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,YAAY,GAAU,KAAK,MAAM,EAAE,UAAU,MAAM,EAAE,UAAU,MAAM;;cAiCjF,CAAA"}
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "@chem-po/react-native",
|
|
3
3
|
"author": "Elan Canfield",
|
|
4
4
|
"license": "MIT",
|
|
5
|
-
"version": "0.0.
|
|
5
|
+
"version": "0.0.27",
|
|
6
6
|
"main": "lib/commonjs/index.js",
|
|
7
7
|
"types": "lib/typescript/index.d.ts",
|
|
8
8
|
"source": "src/index.ts",
|
|
@@ -36,6 +36,7 @@
|
|
|
36
36
|
"@react-native-community/slider": "4.5.6",
|
|
37
37
|
"expo-constants": "~17.1.7",
|
|
38
38
|
"expo-document-picker": "~13.1.6",
|
|
39
|
+
"expo-file-system": "~18.1.11",
|
|
39
40
|
"expo-image-picker": "~16.1.4",
|
|
40
41
|
"lottie-react-native": "7.2.2",
|
|
41
42
|
"nested-property": "^4.0.0",
|
|
@@ -50,8 +51,8 @@
|
|
|
50
51
|
"react-native-paper-dates": "^0.22.42",
|
|
51
52
|
"react-native-svg": "15.11.2",
|
|
52
53
|
"zustand": "^4.3.3",
|
|
53
|
-
"@chem-po/
|
|
54
|
-
"@chem-po/
|
|
54
|
+
"@chem-po/core": "0.0.27",
|
|
55
|
+
"@chem-po/react": "0.0.27"
|
|
55
56
|
},
|
|
56
57
|
"devDependencies": {
|
|
57
58
|
"@babel/core": "^7.26.0",
|
|
@@ -7,12 +7,14 @@ import {
|
|
|
7
7
|
useObjectUrl,
|
|
8
8
|
usePlaceholderColor,
|
|
9
9
|
useTextColor,
|
|
10
|
+
useToast,
|
|
10
11
|
} from '@chem-po/react'
|
|
11
12
|
import { Ionicons } from '@expo/vector-icons'
|
|
12
13
|
import * as DocumentPicker from 'expo-document-picker'
|
|
13
14
|
import * as ImagePicker from 'expo-image-picker'
|
|
14
15
|
import React, { forwardRef, useCallback, useImperativeHandle, useMemo, useState } from 'react'
|
|
15
16
|
import { StyleProp, StyleSheet, Text, TouchableOpacity, View, ViewStyle } from 'react-native'
|
|
17
|
+
import { downloadFile } from '../../../../utils/downloadFile'
|
|
16
18
|
import { LoadingImage } from '../../../loading/LoadingImage'
|
|
17
19
|
import { FieldProps } from '../../types'
|
|
18
20
|
|
|
@@ -51,22 +53,56 @@ export const FileView = ({
|
|
|
51
53
|
imageOptions,
|
|
52
54
|
withFullView,
|
|
53
55
|
nonImageContainerStyle,
|
|
56
|
+
withDownload,
|
|
54
57
|
}: {
|
|
55
58
|
value?: FileValue | null
|
|
56
59
|
hasUpload?: boolean
|
|
57
60
|
imageOptions?: ImageViewOptions
|
|
58
61
|
withFullView?: boolean
|
|
59
62
|
nonImageContainerStyle?: StyleProp<ViewStyle>
|
|
63
|
+
withDownload?: boolean
|
|
60
64
|
}) => {
|
|
61
65
|
const { storagePath, dataUrl } = value ?? {}
|
|
62
66
|
const missingFile = !dataUrl && !storagePath
|
|
63
67
|
|
|
64
68
|
const { url, loading } = useObjectUrl(value)
|
|
69
|
+
const { showError, showSuccess } = useToast()
|
|
65
70
|
|
|
66
71
|
const iconColor = useIconColor()
|
|
67
72
|
const fileNameColor = useTextColor()
|
|
68
73
|
const borderColor = useBorderColor()
|
|
69
74
|
const backgroundColor = useBackgroundColor(100)
|
|
75
|
+
|
|
76
|
+
const handleDownload = useCallback(async () => {
|
|
77
|
+
if (!url) {
|
|
78
|
+
showError('File URL is not available')
|
|
79
|
+
return
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
const filename = value?.filename?.split('/').pop()?.replace(/\s+/g, '_')
|
|
83
|
+
if (!filename) {
|
|
84
|
+
showError('Filename is not available')
|
|
85
|
+
return
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
const fileType = value?.type
|
|
89
|
+
if (!fileType) {
|
|
90
|
+
showError('File type is not available')
|
|
91
|
+
return
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
try {
|
|
95
|
+
await downloadFile(url, filename, fileType)
|
|
96
|
+
showSuccess('File downloaded successfully')
|
|
97
|
+
} catch (error: unknown) {
|
|
98
|
+
if (error instanceof Error) {
|
|
99
|
+
console.error('Error downloading file:', error.message)
|
|
100
|
+
} else {
|
|
101
|
+
console.error('Error downloading file:', String(error))
|
|
102
|
+
}
|
|
103
|
+
showError('Failed to download file')
|
|
104
|
+
}
|
|
105
|
+
}, [url, value, showError, showSuccess])
|
|
70
106
|
if (!value || missingFile) {
|
|
71
107
|
return <NoFileView hasUpload={hasUpload} />
|
|
72
108
|
}
|
|
@@ -74,7 +110,10 @@ export const FileView = ({
|
|
|
74
110
|
if (value.type?.startsWith('image/')) {
|
|
75
111
|
return (
|
|
76
112
|
<LoadingImage
|
|
113
|
+
withDownload={withDownload}
|
|
114
|
+
filename={value.filename}
|
|
77
115
|
src={url}
|
|
116
|
+
fileType={value.type}
|
|
78
117
|
loadingOverride={loading}
|
|
79
118
|
width={imageOptions?.width ?? 120}
|
|
80
119
|
height={imageOptions?.height ?? 120}
|
|
@@ -94,6 +133,14 @@ export const FileView = ({
|
|
|
94
133
|
{value.filename}
|
|
95
134
|
</Text>
|
|
96
135
|
</View>
|
|
136
|
+
{withDownload && (
|
|
137
|
+
<TouchableOpacity
|
|
138
|
+
style={styles.downloadButton}
|
|
139
|
+
onPress={() => void handleDownload()}
|
|
140
|
+
disabled={loading}>
|
|
141
|
+
<Ionicons name="download" size={20} color={iconColor} />
|
|
142
|
+
</TouchableOpacity>
|
|
143
|
+
)}
|
|
97
144
|
</View>
|
|
98
145
|
)
|
|
99
146
|
}
|
|
@@ -238,16 +285,18 @@ const styles = StyleSheet.create({
|
|
|
238
285
|
filenameContainer: {
|
|
239
286
|
flex: 1,
|
|
240
287
|
paddingRight: 4,
|
|
241
|
-
|
|
288
|
+
justifyContent: 'center',
|
|
242
289
|
},
|
|
243
290
|
filename: {
|
|
244
291
|
fontSize: 14,
|
|
245
|
-
lineHeight: 30,
|
|
246
|
-
flex: 1,
|
|
247
292
|
},
|
|
248
293
|
iconContainer: {
|
|
249
294
|
padding: 4,
|
|
250
295
|
},
|
|
296
|
+
downloadButton: {
|
|
297
|
+
padding: 8,
|
|
298
|
+
marginLeft: 4,
|
|
299
|
+
},
|
|
251
300
|
image: {
|
|
252
301
|
borderRadius: 4,
|
|
253
302
|
overflow: 'hidden',
|
|
@@ -1,22 +1,34 @@
|
|
|
1
|
-
import { useScreen } from '@chem-po/react'
|
|
1
|
+
import { useScreen, useToast } from '@chem-po/react'
|
|
2
2
|
import { Ionicons } from '@expo/vector-icons'
|
|
3
3
|
import React, { useCallback, useEffect, useMemo, useState } from 'react'
|
|
4
4
|
import { Image, Modal, StyleSheet, TouchableOpacity, View } from 'react-native'
|
|
5
5
|
import { Gesture, GestureDetector, GestureHandlerRootView } from 'react-native-gesture-handler'
|
|
6
6
|
import Animated, { useAnimatedStyle, useSharedValue, withSpring } from 'react-native-reanimated'
|
|
7
|
+
import { downloadFile } from '../../utils/downloadFile'
|
|
7
8
|
import { LoadingLogo } from '../loading/Loading'
|
|
8
9
|
|
|
9
10
|
interface ImageViewModalProps {
|
|
10
11
|
isOpen: boolean
|
|
11
12
|
onClose: () => void
|
|
12
13
|
src: string | null
|
|
14
|
+
filename?: string
|
|
15
|
+
fileType?: string
|
|
16
|
+
withDownload?: boolean
|
|
13
17
|
}
|
|
14
18
|
|
|
15
|
-
export const ImageViewModal: React.FC<ImageViewModalProps> = ({
|
|
19
|
+
export const ImageViewModal: React.FC<ImageViewModalProps> = ({
|
|
20
|
+
isOpen,
|
|
21
|
+
onClose,
|
|
22
|
+
src,
|
|
23
|
+
filename,
|
|
24
|
+
fileType,
|
|
25
|
+
withDownload,
|
|
26
|
+
}) => {
|
|
16
27
|
const [loading, setLoading] = useState(true)
|
|
17
28
|
const screenWidth = useScreen(s => s.width)
|
|
18
29
|
const screenHeight = useScreen(s => s.height)
|
|
19
30
|
const [imageSize, setImageSize] = useState({ width: screenWidth / 2, height: screenHeight / 2 })
|
|
31
|
+
const { showError, showSuccess } = useToast()
|
|
20
32
|
|
|
21
33
|
// Shared values for zoom and pan (reanimated)
|
|
22
34
|
const scale = useSharedValue(1)
|
|
@@ -64,6 +76,32 @@ export const ImageViewModal: React.FC<ImageViewModalProps> = ({ isOpen, onClose,
|
|
|
64
76
|
}
|
|
65
77
|
}, [isOpen, src, resetTransform])
|
|
66
78
|
|
|
79
|
+
// Download functionality
|
|
80
|
+
const handleDownload = useCallback(async () => {
|
|
81
|
+
if (!src) {
|
|
82
|
+
showError('Image URL is not available')
|
|
83
|
+
return
|
|
84
|
+
}
|
|
85
|
+
if (!fileType) {
|
|
86
|
+
showError('File type is not available')
|
|
87
|
+
return
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
try {
|
|
91
|
+
const usedName = filename ?? `image_${Date.now()}.jpg`
|
|
92
|
+
|
|
93
|
+
await downloadFile(src, usedName, fileType)
|
|
94
|
+
showSuccess('Image downloaded successfully')
|
|
95
|
+
} catch (error: unknown) {
|
|
96
|
+
if (error instanceof Error) {
|
|
97
|
+
console.error('Error downloading image:', error.message)
|
|
98
|
+
} else {
|
|
99
|
+
console.error('Error downloading image:', String(error))
|
|
100
|
+
}
|
|
101
|
+
showError('Failed to download image')
|
|
102
|
+
}
|
|
103
|
+
}, [src, showError, showSuccess, filename, fileType])
|
|
104
|
+
|
|
67
105
|
// Pan gesture with worklet
|
|
68
106
|
const panGesture = Gesture.Pan()
|
|
69
107
|
.onUpdate(event => {
|
|
@@ -194,6 +232,12 @@ export const ImageViewModal: React.FC<ImageViewModalProps> = ({ isOpen, onClose,
|
|
|
194
232
|
</Animated.View>
|
|
195
233
|
</GestureDetector>
|
|
196
234
|
|
|
235
|
+
{withDownload && (
|
|
236
|
+
<TouchableOpacity style={styles.downloadButton} onPress={() => void handleDownload()}>
|
|
237
|
+
<Ionicons name="download" size={24} color="white" />
|
|
238
|
+
</TouchableOpacity>
|
|
239
|
+
)}
|
|
240
|
+
|
|
197
241
|
<TouchableOpacity style={styles.closeButton} onPress={onClose}>
|
|
198
242
|
<Ionicons name="close" size={24} color="white" />
|
|
199
243
|
</TouchableOpacity>
|
|
@@ -235,6 +279,17 @@ const styles = StyleSheet.create({
|
|
|
235
279
|
width: '100%',
|
|
236
280
|
height: '100%',
|
|
237
281
|
},
|
|
282
|
+
downloadButton: {
|
|
283
|
+
position: 'absolute',
|
|
284
|
+
top: 16,
|
|
285
|
+
right: 64,
|
|
286
|
+
width: 40,
|
|
287
|
+
height: 40,
|
|
288
|
+
borderRadius: 20,
|
|
289
|
+
backgroundColor: 'rgba(0, 0, 0, 0.5)',
|
|
290
|
+
justifyContent: 'center',
|
|
291
|
+
alignItems: 'center',
|
|
292
|
+
},
|
|
238
293
|
closeButton: {
|
|
239
294
|
position: 'absolute',
|
|
240
295
|
top: 16,
|
|
@@ -9,11 +9,14 @@ export interface LoadingImageProps {
|
|
|
9
9
|
src?: string | null
|
|
10
10
|
loadingOverride?: boolean
|
|
11
11
|
onLoad?: (e: any) => void
|
|
12
|
+
filename?: string
|
|
13
|
+
fileType?: string
|
|
12
14
|
withFullView?: boolean
|
|
13
15
|
buttonFullView?: boolean
|
|
14
16
|
style?: ViewStyle
|
|
15
17
|
width?: DimensionValue
|
|
16
18
|
height?: DimensionValue
|
|
19
|
+
withDownload?: boolean
|
|
17
20
|
}
|
|
18
21
|
|
|
19
22
|
const emptyPng =
|
|
@@ -23,10 +26,13 @@ export const LoadingImage = ({
|
|
|
23
26
|
src,
|
|
24
27
|
loadingOverride,
|
|
25
28
|
onLoad,
|
|
29
|
+
filename,
|
|
30
|
+
fileType,
|
|
26
31
|
width,
|
|
27
32
|
height,
|
|
28
33
|
withFullView,
|
|
29
34
|
buttonFullView,
|
|
35
|
+
withDownload,
|
|
30
36
|
style,
|
|
31
37
|
}: LoadingImageProps) => {
|
|
32
38
|
const [imageLoading, setImageLoading] = useState(!!src)
|
|
@@ -108,7 +114,16 @@ export const LoadingImage = ({
|
|
|
108
114
|
]}>
|
|
109
115
|
<LoadingLogo isLoading={loading} size={10} />
|
|
110
116
|
</View>
|
|
111
|
-
{viewing
|
|
117
|
+
{viewing ? (
|
|
118
|
+
<ImageViewModal
|
|
119
|
+
withDownload={withDownload}
|
|
120
|
+
filename={filename}
|
|
121
|
+
fileType={fileType}
|
|
122
|
+
isOpen
|
|
123
|
+
src={src ?? emptyPng}
|
|
124
|
+
onClose={() => setViewing(false)}
|
|
125
|
+
/>
|
|
126
|
+
) : null}
|
|
112
127
|
</View>
|
|
113
128
|
)
|
|
114
129
|
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import * as FileSystem from 'expo-file-system'
|
|
2
|
+
|
|
3
|
+
export const downloadFile = async (uri: string, filename: string, fileType: string) => {
|
|
4
|
+
const permissions = await FileSystem.StorageAccessFramework.requestDirectoryPermissionsAsync()
|
|
5
|
+
if (!permissions.granted) {
|
|
6
|
+
return
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
// Download to temporary location first
|
|
10
|
+
const tempFileUri = `${FileSystem.cacheDirectory}${filename}`
|
|
11
|
+
|
|
12
|
+
// Download the file to temporary location
|
|
13
|
+
await FileSystem.downloadAsync(uri, tempFileUri)
|
|
14
|
+
|
|
15
|
+
// Read the temporary file as base64
|
|
16
|
+
const base64Content = await FileSystem.readAsStringAsync(tempFileUri, {
|
|
17
|
+
encoding: FileSystem.EncodingType.Base64,
|
|
18
|
+
})
|
|
19
|
+
|
|
20
|
+
// Create a file within the selected directory using SAF
|
|
21
|
+
const fileUri = await FileSystem.StorageAccessFramework.createFileAsync(
|
|
22
|
+
permissions.directoryUri,
|
|
23
|
+
filename,
|
|
24
|
+
fileType,
|
|
25
|
+
)
|
|
26
|
+
|
|
27
|
+
// Write the content to the SAF file
|
|
28
|
+
await FileSystem.StorageAccessFramework.writeAsStringAsync(fileUri, base64Content, {
|
|
29
|
+
encoding: FileSystem.EncodingType.Base64,
|
|
30
|
+
})
|
|
31
|
+
|
|
32
|
+
// Clean up temporary file
|
|
33
|
+
await FileSystem.deleteAsync(tempFileUri, { idempotent: true })
|
|
34
|
+
|
|
35
|
+
return { uri: fileUri }
|
|
36
|
+
}
|