@plusscommunities/pluss-core-app 8.0.5 → 8.0.6
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.
|
@@ -4,7 +4,7 @@ function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e =
|
|
|
4
4
|
import React, { Component } from 'react';
|
|
5
5
|
import { View, TouchableOpacity, Text, StyleSheet, ActivityIndicator } from 'react-native';
|
|
6
6
|
import { Icon } from '@rneui/themed';
|
|
7
|
-
|
|
7
|
+
import * as DocumentPicker from 'expo-document-picker';
|
|
8
8
|
import { connect } from 'react-redux';
|
|
9
9
|
import Config from '../config';
|
|
10
10
|
import { fileActions } from '../apis';
|
|
@@ -23,22 +23,21 @@ class DocumentUploader extends Component {
|
|
|
23
23
|
allowedTypes,
|
|
24
24
|
multiple
|
|
25
25
|
} = this.props;
|
|
26
|
+
try {
|
|
27
|
+
const result = await DocumentPicker.getDocumentAsync({
|
|
28
|
+
type: allowedTypes,
|
|
29
|
+
copyToCacheDirectory: true,
|
|
30
|
+
multiple: multiple || false
|
|
31
|
+
});
|
|
32
|
+
// console.log('pickDocument', JSON.stringify(result, null, 2));
|
|
26
33
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
// if (!result.canceled) {
|
|
36
|
-
// await this.handleDocumentPicked(result);
|
|
37
|
-
// }
|
|
38
|
-
// } catch (error) {
|
|
39
|
-
// console.log('Document picker error:', error);
|
|
40
|
-
// this.props.onUploadFailed(null, error.message);
|
|
41
|
-
// }
|
|
34
|
+
if (!result.canceled) {
|
|
35
|
+
await this.handleDocumentPicked(result);
|
|
36
|
+
}
|
|
37
|
+
} catch (error) {
|
|
38
|
+
console.log('Document picker error:', error);
|
|
39
|
+
this.props.onUploadFailed(null, error.message);
|
|
40
|
+
}
|
|
42
41
|
});
|
|
43
42
|
_defineProperty(this, "handleDocumentPicked", async documentResult => {
|
|
44
43
|
const {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","Component","View","TouchableOpacity","Text","StyleSheet","ActivityIndicator","Icon","connect","Config","fileActions","getValueOrDefault","TEXT_DARK","getMainBrandingColourFromState","DEFAULT_DOCUMENT_NAME","DocumentUploader","constructor","args","_defineProperty","isUploading","uploadProgress","allowedTypes","multiple","props","documentResult","assets","userId","setState","uploadPromises","map","asset","name","uri","mimeType","file","fileExt","includes","lastDotIndex","lastIndexOf","substring","mimeTypeParts","split","startsWith","fileName","uploadUri","getUploadUrl","onUploadStarted","toUpperCase","res","uploadUserMediaWithProgress","progress","onUploadProgress","fileUrl","env","baseUploadsUrl","key","onUploadSuccess","console","log","success","url","error","onUploadFailed","message","results","Promise","all","buttonTitle","buttonStyle","buttonTextStyle","disabled","state","mainColor","createElement","style","styles","uploadButton","borderColor","onPress","pickDocument","activeOpacity","buttonContent","color","type","size","icon","buttonText","progressContainer","progressBar","progressFill","width","progressText","Math","round","render","container","renderUploadButton","renderProgress","create","marginVertical","flexDirection","alignItems","justifyContent","paddingVertical","paddingHorizontal","borderRadius","backgroundColor","borderWidth","fontSize","fontWeight","marginLeft","marginRight","marginTop","height","overflow","mapStateToProps","user","colourBrandingMain"],"sources":["DocumentUploader.js"],"sourcesContent":["import React, { Component } from 'react';\nimport { View, TouchableOpacity, Text, StyleSheet, ActivityIndicator } from 'react-native';\nimport { Icon } from '@rneui/themed';\n// import * as DocumentPicker from 'expo-document-picker';\nimport { connect } from 'react-redux';\nimport Config from '../config';\nimport { fileActions } from '../apis';\nimport { getValueOrDefault } from '../helper';\nimport { TEXT_DARK, getMainBrandingColourFromState } from '../colours';\n\nconst DEFAULT_DOCUMENT_NAME = 'document';\n\nclass DocumentUploader extends Component {\n static defaultProps = {\n allowedTypes: ['application/pdf'],\n buttonTitle: 'Upload Document',\n buttonStyle: {},\n buttonTextStyle: {},\n onUploadStarted: () => {},\n onUploadSuccess: () => {},\n onUploadFailed: () => {},\n onUploadProgress: null,\n userId: null,\n fileName: null,\n disabled: false,\n };\n\n state = {\n isUploading: false,\n uploadProgress: 0,\n };\n\n pickDocument = async () => {\n const { allowedTypes, multiple } = this.props;\n\n // try {\n // const result = await DocumentPicker.getDocumentAsync({\n // type: allowedTypes,\n // copyToCacheDirectory: true,\n // multiple: multiple || false,\n // });\n // // console.log('pickDocument', JSON.stringify(result, null, 2));\n\n // if (!result.canceled) {\n // await this.handleDocumentPicked(result);\n // }\n // } catch (error) {\n // console.log('Document picker error:', error);\n // this.props.onUploadFailed(null, error.message);\n // }\n };\n\n handleDocumentPicked = async documentResult => {\n const { assets } = documentResult;\n const { userId } = this.props;\n\n try {\n this.setState({ isUploading: true, uploadProgress: 0 });\n\n // Process each asset in parallel\n const uploadPromises = assets.map(async asset => {\n const { name, uri, mimeType } = asset;\n\n let file, fileExt;\n if (name && name.includes('.')) {\n const lastDotIndex = name.lastIndexOf('.');\n file = name.substring(0, lastDotIndex);\n fileExt = name.substring(lastDotIndex + 1);\n } else {\n // Fallback: extract extension from mimeType\n file = name || 'document';\n if (mimeType) {\n const mimeTypeParts = mimeType.split('/');\n // Handle specific MIME type mappings\n if (mimeType === 'application/pdf') fileExt = 'pdf';\n else if (mimeType.startsWith('image/')) fileExt = mimeTypeParts[1];\n else if (mimeType.startsWith('text/')) fileExt = 'txt';\n else fileExt = mimeTypeParts[1] || 'pdf';\n } else {\n fileExt = 'pdf';\n }\n }\n\n // Generate a unique filename if not provided\n const fileName = `${getValueOrDefault(this.props.fileName, DEFAULT_DOCUMENT_NAME)}.${fileExt}`;\n const uploadUri = fileActions.getUploadUrl(userId, fileName);\n // console.log('handleDocumentPicked', JSON.stringify({ uploadUri, uri, name, fileName, mimeType, file, fileExt }, null, 2));\n\n try {\n // Notify parent component that upload has started for this file\n this.props.onUploadStarted(uploadUri, uri, file, fileExt.toUpperCase());\n\n const res = await fileActions.uploadUserMediaWithProgress(uri, uploadUri, progress => {\n if (this.props.onUploadProgress) this.props.onUploadProgress(progress);\n });\n\n const fileUrl = Config.env.baseUploadsUrl + res.key;\n this.props.onUploadSuccess(fileUrl, uploadUri);\n console.log('Upload success', fileUrl);\n return { success: true, url: fileUrl, uploadUri };\n } catch (error) {\n console.error(`Upload failed for ${name}:`, error);\n this.props.onUploadFailed(uploadUri, error.message);\n return { success: false, error, uploadUri };\n }\n });\n\n // Wait for all uploads to complete\n const results = await Promise.all(uploadPromises);\n return results;\n } catch (error) {\n console.error('Document upload error:', error);\n return [];\n } finally {\n this.setState({ isUploading: false, uploadProgress: 0 });\n }\n };\n\n renderUploadButton = () => {\n const { buttonTitle, buttonStyle, buttonTextStyle, disabled } = this.props;\n const { isUploading } = this.state;\n const mainColor = getMainBrandingColourFromState(this.props);\n\n return (\n <TouchableOpacity\n style={[styles.uploadButton, { borderColor: mainColor }, buttonStyle]}\n onPress={this.pickDocument}\n disabled={isUploading || disabled}\n activeOpacity={0.7}\n >\n <View style={styles.buttonContent}>\n {isUploading ? (\n <ActivityIndicator color={mainColor} />\n ) : (\n <Icon name=\"attachment\" type=\"entypo\" color={mainColor} size={18} style={styles.icon} />\n )}\n <Text style={[styles.buttonText, { color: mainColor }, buttonTextStyle]}>{buttonTitle}</Text>\n </View>\n </TouchableOpacity>\n );\n };\n\n renderProgress = () => {\n const { uploadProgress } = this.state;\n if (uploadProgress <= 0 || uploadProgress >= 1) return null;\n\n return (\n <View style={styles.progressContainer}>\n <View style={styles.progressBar}>\n <View style={[styles.progressFill, { width: `${uploadProgress * 100}%` }]} />\n </View>\n <Text style={styles.progressText}>{Math.round(uploadProgress * 100)}%</Text>\n </View>\n );\n };\n\n render() {\n return (\n <View style={styles.container}>\n {this.renderUploadButton()}\n {this.renderProgress()}\n </View>\n );\n }\n}\n\nconst styles = StyleSheet.create({\n container: {\n marginVertical: 10,\n },\n uploadButton: {\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'center',\n paddingVertical: 8,\n paddingHorizontal: 16,\n borderRadius: 6,\n backgroundColor: '#fff',\n borderWidth: 1,\n borderColor: '#007AFF',\n },\n buttonContent: {\n flexDirection: 'row',\n alignItems: 'center',\n },\n buttonText: {\n color: '#fff',\n fontSize: 16,\n fontWeight: '500',\n marginLeft: 8,\n },\n icon: {\n marginRight: 8,\n },\n progressContainer: {\n marginTop: 8,\n alignItems: 'center',\n },\n progressBar: {\n height: 4,\n width: '100%',\n backgroundColor: '#E0E0E0',\n borderRadius: 2,\n overflow: 'hidden',\n },\n progressFill: {\n height: '100%',\n backgroundColor: '#4CAF50',\n },\n progressText: {\n marginTop: 4,\n fontSize: 12,\n color: TEXT_DARK,\n },\n});\n\nconst mapStateToProps = state => {\n const { user } = state;\n return {\n user,\n colourBrandingMain: getMainBrandingColourFromState(state),\n };\n};\n\nexport default connect(mapStateToProps)(DocumentUploader);\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["React","Component","View","TouchableOpacity","Text","StyleSheet","ActivityIndicator","Icon","DocumentPicker","connect","Config","fileActions","getValueOrDefault","TEXT_DARK","getMainBrandingColourFromState","DEFAULT_DOCUMENT_NAME","DocumentUploader","constructor","args","_defineProperty","isUploading","uploadProgress","allowedTypes","multiple","props","result","getDocumentAsync","type","copyToCacheDirectory","canceled","handleDocumentPicked","error","console","log","onUploadFailed","message","documentResult","assets","userId","setState","uploadPromises","map","asset","name","uri","mimeType","file","fileExt","includes","lastDotIndex","lastIndexOf","substring","mimeTypeParts","split","startsWith","fileName","uploadUri","getUploadUrl","onUploadStarted","toUpperCase","res","uploadUserMediaWithProgress","progress","onUploadProgress","fileUrl","env","baseUploadsUrl","key","onUploadSuccess","success","url","results","Promise","all","buttonTitle","buttonStyle","buttonTextStyle","disabled","state","mainColor","createElement","style","styles","uploadButton","borderColor","onPress","pickDocument","activeOpacity","buttonContent","color","size","icon","buttonText","progressContainer","progressBar","progressFill","width","progressText","Math","round","render","container","renderUploadButton","renderProgress","create","marginVertical","flexDirection","alignItems","justifyContent","paddingVertical","paddingHorizontal","borderRadius","backgroundColor","borderWidth","fontSize","fontWeight","marginLeft","marginRight","marginTop","height","overflow","mapStateToProps","user","colourBrandingMain"],"sources":["DocumentUploader.js"],"sourcesContent":["import React, { Component } from 'react';\nimport { View, TouchableOpacity, Text, StyleSheet, ActivityIndicator } from 'react-native';\nimport { Icon } from '@rneui/themed';\nimport * as DocumentPicker from 'expo-document-picker';\nimport { connect } from 'react-redux';\nimport Config from '../config';\nimport { fileActions } from '../apis';\nimport { getValueOrDefault } from '../helper';\nimport { TEXT_DARK, getMainBrandingColourFromState } from '../colours';\n\nconst DEFAULT_DOCUMENT_NAME = 'document';\n\nclass DocumentUploader extends Component {\n static defaultProps = {\n allowedTypes: ['application/pdf'],\n buttonTitle: 'Upload Document',\n buttonStyle: {},\n buttonTextStyle: {},\n onUploadStarted: () => {},\n onUploadSuccess: () => {},\n onUploadFailed: () => {},\n onUploadProgress: null,\n userId: null,\n fileName: null,\n disabled: false,\n };\n\n state = {\n isUploading: false,\n uploadProgress: 0,\n };\n\n pickDocument = async () => {\n const { allowedTypes, multiple } = this.props;\n\n try {\n const result = await DocumentPicker.getDocumentAsync({\n type: allowedTypes,\n copyToCacheDirectory: true,\n multiple: multiple || false,\n });\n // console.log('pickDocument', JSON.stringify(result, null, 2));\n\n if (!result.canceled) {\n await this.handleDocumentPicked(result);\n }\n } catch (error) {\n console.log('Document picker error:', error);\n this.props.onUploadFailed(null, error.message);\n }\n };\n\n handleDocumentPicked = async documentResult => {\n const { assets } = documentResult;\n const { userId } = this.props;\n\n try {\n this.setState({ isUploading: true, uploadProgress: 0 });\n\n // Process each asset in parallel\n const uploadPromises = assets.map(async asset => {\n const { name, uri, mimeType } = asset;\n\n let file, fileExt;\n if (name && name.includes('.')) {\n const lastDotIndex = name.lastIndexOf('.');\n file = name.substring(0, lastDotIndex);\n fileExt = name.substring(lastDotIndex + 1);\n } else {\n // Fallback: extract extension from mimeType\n file = name || 'document';\n if (mimeType) {\n const mimeTypeParts = mimeType.split('/');\n // Handle specific MIME type mappings\n if (mimeType === 'application/pdf') fileExt = 'pdf';\n else if (mimeType.startsWith('image/')) fileExt = mimeTypeParts[1];\n else if (mimeType.startsWith('text/')) fileExt = 'txt';\n else fileExt = mimeTypeParts[1] || 'pdf';\n } else {\n fileExt = 'pdf';\n }\n }\n\n // Generate a unique filename if not provided\n const fileName = `${getValueOrDefault(this.props.fileName, DEFAULT_DOCUMENT_NAME)}.${fileExt}`;\n const uploadUri = fileActions.getUploadUrl(userId, fileName);\n // console.log('handleDocumentPicked', JSON.stringify({ uploadUri, uri, name, fileName, mimeType, file, fileExt }, null, 2));\n\n try {\n // Notify parent component that upload has started for this file\n this.props.onUploadStarted(uploadUri, uri, file, fileExt.toUpperCase());\n\n const res = await fileActions.uploadUserMediaWithProgress(uri, uploadUri, progress => {\n if (this.props.onUploadProgress) this.props.onUploadProgress(progress);\n });\n\n const fileUrl = Config.env.baseUploadsUrl + res.key;\n this.props.onUploadSuccess(fileUrl, uploadUri);\n console.log('Upload success', fileUrl);\n return { success: true, url: fileUrl, uploadUri };\n } catch (error) {\n console.error(`Upload failed for ${name}:`, error);\n this.props.onUploadFailed(uploadUri, error.message);\n return { success: false, error, uploadUri };\n }\n });\n\n // Wait for all uploads to complete\n const results = await Promise.all(uploadPromises);\n return results;\n } catch (error) {\n console.error('Document upload error:', error);\n return [];\n } finally {\n this.setState({ isUploading: false, uploadProgress: 0 });\n }\n };\n\n renderUploadButton = () => {\n const { buttonTitle, buttonStyle, buttonTextStyle, disabled } = this.props;\n const { isUploading } = this.state;\n const mainColor = getMainBrandingColourFromState(this.props);\n\n return (\n <TouchableOpacity\n style={[styles.uploadButton, { borderColor: mainColor }, buttonStyle]}\n onPress={this.pickDocument}\n disabled={isUploading || disabled}\n activeOpacity={0.7}\n >\n <View style={styles.buttonContent}>\n {isUploading ? (\n <ActivityIndicator color={mainColor} />\n ) : (\n <Icon name=\"attachment\" type=\"entypo\" color={mainColor} size={18} style={styles.icon} />\n )}\n <Text style={[styles.buttonText, { color: mainColor }, buttonTextStyle]}>{buttonTitle}</Text>\n </View>\n </TouchableOpacity>\n );\n };\n\n renderProgress = () => {\n const { uploadProgress } = this.state;\n if (uploadProgress <= 0 || uploadProgress >= 1) return null;\n\n return (\n <View style={styles.progressContainer}>\n <View style={styles.progressBar}>\n <View style={[styles.progressFill, { width: `${uploadProgress * 100}%` }]} />\n </View>\n <Text style={styles.progressText}>{Math.round(uploadProgress * 100)}%</Text>\n </View>\n );\n };\n\n render() {\n return (\n <View style={styles.container}>\n {this.renderUploadButton()}\n {this.renderProgress()}\n </View>\n );\n }\n}\n\nconst styles = StyleSheet.create({\n container: {\n marginVertical: 10,\n },\n uploadButton: {\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'center',\n paddingVertical: 8,\n paddingHorizontal: 16,\n borderRadius: 6,\n backgroundColor: '#fff',\n borderWidth: 1,\n borderColor: '#007AFF',\n },\n buttonContent: {\n flexDirection: 'row',\n alignItems: 'center',\n },\n buttonText: {\n color: '#fff',\n fontSize: 16,\n fontWeight: '500',\n marginLeft: 8,\n },\n icon: {\n marginRight: 8,\n },\n progressContainer: {\n marginTop: 8,\n alignItems: 'center',\n },\n progressBar: {\n height: 4,\n width: '100%',\n backgroundColor: '#E0E0E0',\n borderRadius: 2,\n overflow: 'hidden',\n },\n progressFill: {\n height: '100%',\n backgroundColor: '#4CAF50',\n },\n progressText: {\n marginTop: 4,\n fontSize: 12,\n color: TEXT_DARK,\n },\n});\n\nconst mapStateToProps = state => {\n const { user } = state;\n return {\n user,\n colourBrandingMain: getMainBrandingColourFromState(state),\n };\n};\n\nexport default connect(mapStateToProps)(DocumentUploader);\n"],"mappings":"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","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@plusscommunities/pluss-core-app",
|
|
3
|
-
"version": "8.0.
|
|
3
|
+
"version": "8.0.6",
|
|
4
4
|
"description": "Core extension package for Pluss Communities platform",
|
|
5
5
|
"main": "dist/module/index.js",
|
|
6
6
|
"module": "dist/module/index.js",
|
|
@@ -31,6 +31,7 @@
|
|
|
31
31
|
"expo-av": "~16.0.7",
|
|
32
32
|
"expo-calendar": "~15.0.7",
|
|
33
33
|
"expo-constants": "~18.0.10",
|
|
34
|
+
"expo-document-picker": "~14.0.7",
|
|
34
35
|
"expo-file-system": "~19.0.17",
|
|
35
36
|
"expo-image-manipulator": "~14.0.7",
|
|
36
37
|
"expo-image-picker": "~17.0.8",
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React, { Component } from 'react';
|
|
2
2
|
import { View, TouchableOpacity, Text, StyleSheet, ActivityIndicator } from 'react-native';
|
|
3
3
|
import { Icon } from '@rneui/themed';
|
|
4
|
-
|
|
4
|
+
import * as DocumentPicker from 'expo-document-picker';
|
|
5
5
|
import { connect } from 'react-redux';
|
|
6
6
|
import Config from '../config';
|
|
7
7
|
import { fileActions } from '../apis';
|
|
@@ -33,21 +33,21 @@ class DocumentUploader extends Component {
|
|
|
33
33
|
pickDocument = async () => {
|
|
34
34
|
const { allowedTypes, multiple } = this.props;
|
|
35
35
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
36
|
+
try {
|
|
37
|
+
const result = await DocumentPicker.getDocumentAsync({
|
|
38
|
+
type: allowedTypes,
|
|
39
|
+
copyToCacheDirectory: true,
|
|
40
|
+
multiple: multiple || false,
|
|
41
|
+
});
|
|
42
|
+
// console.log('pickDocument', JSON.stringify(result, null, 2));
|
|
43
|
+
|
|
44
|
+
if (!result.canceled) {
|
|
45
|
+
await this.handleDocumentPicked(result);
|
|
46
|
+
}
|
|
47
|
+
} catch (error) {
|
|
48
|
+
console.log('Document picker error:', error);
|
|
49
|
+
this.props.onUploadFailed(null, error.message);
|
|
50
|
+
}
|
|
51
51
|
};
|
|
52
52
|
|
|
53
53
|
handleDocumentPicked = async documentResult => {
|