import { Ionicons } from "@expo/vector-icons"; import { useNavigation } from "@react-navigation/native"; import { AssetsSelector } from "expo-images-picker"; import * as MediaLibrary from "expo-media-library"; import _ from "lodash"; import React, { useCallback, useState } from "react"; import { useTranslation } from "react-i18next"; import { StyleSheet, Text, View } from "react-native"; import { connect } from "react-redux"; import { createStructuredSelector } from "reselect"; import { selectCurrentCameraJobId, selectDeleteAfterUpload, } from "../../redux/app/app.selectors"; import { selectBodyshop, selectCurrentUser, } from "../../redux/user/user.selectors"; import { handleUpload } from "../../util/document-upload.utility"; import CameraSelectJob from "../camera-select-job/camera-select-job.component"; import UploadDeleteSwitch from "../upload-delete-switch/upload-delete-switch.component"; import UploadProgress from "../upload-progress/upload-progress.component"; const mapStateToProps = createStructuredSelector({ currentUser: selectCurrentUser, bodyshop: selectBodyshop, selectedCameraJobId: selectCurrentCameraJobId, deleteAfterUpload: selectDeleteAfterUpload, }); export default connect(mapStateToProps, null)(ImageBrowserScreen); export function ImageBrowserScreen({ currentUser, bodyshop, selectedCameraJobId, deleteAfterUpload, }) { const { t } = useTranslation(); const navigation = useNavigation(); const [uploads, setUploads] = useState({}); function handleOnProgress(uri, percent) { setUploads((prevUploads) => ({ ...prevUploads, [uri]: { percent } })); } const [tick, setTick] = useState(0); const forceRerender = useCallback(() => { setTick((tick) => tick + 1); }, []); async function handleOnSuccess(uri, id) { console.log("onSucces!", uri); if (deleteAfterUpload) { const result = await MediaLibrary.deleteAssetsAsync([id]); console.log("result :>> ", result); } console.log("Omitting", uri); setUploads((prevUploads) => _.omit(prevUploads, uri)); } const onDone = async (data) => { const actions = []; console.log("Assets :>> ", data); data.forEach(function (p) { const uri = p.uri.split("/").pop(); actions.push( handleUpload( { uri: p.uri, onError: handleOnError, onProgress: ({ percent }) => handleOnProgress(uri, percent), onSuccess: () => handleOnSuccess(uri, p.id), }, { bodyshop: bodyshop, jobId: selectedCameraJobId, uploaded_by: currentUser.email, photo: p, } ) ); }); await Promise.all(actions); forceRerender(); //navigation.goBack(); }; return ( {selectedCameraJobId && ( { forceRerender(); }, doneFunction: onDone, }, noAssets: { Component: function NoAsset() { return {`Looks like there's nothing here...`}; }, }, }} /> )} ); } const styles = StyleSheet.create({ flex: { flex: 1, }, container: { display: "flex", // position: "relative", }, buttonStyle: { //backgroundColor: "tomato", }, // eslint-disable-next-line react-native/no-color-literals textStyle: { color: "dodgerblue", }, }); function handleOnError(...props) { console.log("HandleOnError", props); }