import { Ionicons } from '@expo/vector-icons'; import { AssetsSelector } from 'expo-images-picker'; import { MediaType } from 'expo-media-library'; import React, { useCallback, useMemo, 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 { logImEXEvent } from '../../firebase/firebase.analytics'; import { toggleDeleteAfterUpload } from '../../redux/app/app.actions'; import { selectCurrentCameraJobId, selectDeleteAfterUpload, } from '../../redux/app/app.selectors'; import { selectBodyshop } from '../../redux/user/user.selectors'; import CameraSelectJob from '../camera-select-job/camera-select-job.component'; import JobSpaceAvailable from '../job-space-available/job-space-available.component'; import LocalUploadProgress from '../local-upload-progress/local-upload-progress.component'; import UploadDeleteSwitch from '../upload-delete-switch/upload-delete-switch.component'; import UploadProgress from '../upload-progress/upload-progress.component'; const mapStateToProps = createStructuredSelector({ selectedCameraJobId: selectCurrentCameraJobId, bodyshop: selectBodyshop, deleteAfterUpload: selectDeleteAfterUpload, }); const mapDispatchToProps = (dispatch) => ({ toggleDeleteAfterUpload: () => dispatch(toggleDeleteAfterUpload()), }); export function ImageBrowserScreen({ bodyshop, selectedCameraJobId, //toggleDeleteAfterUpload, // deleteAfterUpload, }) { const { t } = useTranslation(); const [uploads, setUploads] = useState(null); const [tick, setTick] = useState(0); const forceRerender = useCallback(() => { setTick((tick) => tick + 1); }, []); const onDone = (data) => { logImEXEvent('imexmobile_upload_documents', { count: data.length }); if (data.length !== 0) setUploads(data); }; const widgetErrors = useMemo( () => ({ errorTextColor: 'black', errorMessages: { hasErrorWithPermissions: 'Please Allow media gallery permissions.', hasErrorWithLoading: 'There was an error while loading images.', hasErrorWithResizing: 'There was an error while loading images.', hasNoAssets: 'No images found.', }, }), [] ); const widgetSettings = useMemo( () => ({ getImageMetaData: false, // true might perform slower results but gives meta data and absolute path for ios users initialLoad: 100, assetsType: [MediaType.photo, MediaType.video], minSelection: 1, // maxSelection: 3, portraitCols: 4, landscapeCols: 4, }), [] ); const widgetResize = useMemo( () => ({ width: 50, compress: 0.7, base64: false, saveTo: 'jpeg', }), [] ); const _textStyle = { color: 'white', }; const _buttonStyle = { backgroundColor: 'orange', borderRadius: 5, }; const widgetNavigator = useMemo( () => ({ Texts: { finish: t('mediabrowser.actions.upload'), back: t('mediabrowser.actions.refresh'), selected: 'selected', }, midTextColor: 'black', minSelection: 1, buttonTextStyle: styles.textStyle, buttonStyle: styles.buttonStyle, onBack: () => { forceRerender(); }, onSuccess: onDone, }), [] ); const widgetStyles = useMemo( () => ({ margin: 2, bgColor: 'white', spinnerColor: 'blue', widgetWidth: 99, videoIcon: { Component: Ionicons, iconName: 'videocam', color: 'white', size: 20, }, selectedIcon: { Component: Ionicons, iconName: 'checkmark-circle-outline', color: 'white', bg: 'rgba(35,35,35, 0.75)', size: 32, }, }), [] ); return ( {bodyshop.uselocalmediaserver ? ( {t('mediabrowser.labels.localserver', { url: bodyshop.localmediaserverhttp, })} ) : ( )} { // } {!selectedCameraJobId && ( {t('mediabrowser.labels.selectjobassetselector')} )} {selectedCameraJobId && ( )} {bodyshop.uselocalmediaserver ? ( ) : ( )} ); } 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', }, }); export default connect(mapStateToProps, mapDispatchToProps)(ImageBrowserScreen); // options={{ // assetsType: ["photo", "video"], // margin: 3, // portraitCols: 4, // landscapeCols: 6, // widgetWidth: 100, // widgetBgColor: "white", // selectedBgColor: "#adadad", // spinnerColor: "#c8c8c8", // videoIcon: { // Component: Ionicons, // iconName: "ios-videocam", // color: "white", // size: 20, // }, // selectedIcon: { // Component: Ionicons, // iconName: "ios-checkmark-circle-outline", // color: "white", // bg: "rgba(35,35,35, 0.75)", // size: 32, // }, // defaultTopNavigator: { // continueText: t("mediabrowser.actions.upload"), // goBackText: t("mediabrowser.actions.refresh"), // buttonStyle: styles.buttonStyle, // textStyle: styles.textStyle, // backFunction: () => { // forceRerender(); // }, // doneFunction: onDone, // }, // noAssets: { // Component: function NoAsset() { // return ( // // // // {t("mediabrowser.labels.nomedia")} // // // ); // }, // }, // }}