// V2 import React from 'react'; // Redux import { Provider } from 'react-redux'; import { store } from './App/Store/ConfigureStore'; // Deps import 'react-native-gesture-handler'; import { NavigationContainer } from '@react-navigation/native'; import { createNativeStackNavigator } from '@react-navigation/native-stack'; import { TouchableOpacity, View, Image, Text, TextInput, StyleSheet, Alert } from 'react-native'; import Icon from 'react-native-vector-icons/FontAwesome5'; import FlashMessage, { showMessage } from 'react-native-flash-message'; import * as SplashScreen from 'expo-splash-screen'; // i18n import i18n from "./I18n"; // Controllers import SyncController from './App/Controllers/SyncController'; // Views import InstallScreen from './App/Views/InstallScreen'; import LoginScreen from './App/Views/LoginScreen'; import OnlyVideosScreen from './App/Views/OnlyVideosScreen'; import ContactScreen from './App/Views/ContactScreen'; import ContactDetailsScreen from './App/Views/ContactDetailsScreen'; // END V2 import SyncScreen from './App/Views/SyncScreen'; import HomeScreen from './App/Views/HomeScreen'; import DirectoriesScreen from './Views/Directories'; import VideoScreen from './Views/Video'; import PDFScreen from './Views/PDF'; import SearchScreen from "./Views/Search"; import MySpaceScreen from './Views/MySpace'; // V2 //SplashScreen.preventAutoHideAsync(); //Keep store.dispatch({ type: 'INIT' }); store.dispatch({ type: 'INIT_LOCALE' }); store.dispatch({ type: 'INIT_USERS' }); const Stack = createNativeStackNavigator(); // END V2 class App extends React.Component { state = { isSetup: false, isLogged: false, searchTxt: '', sendEmail: '' }; componentDidMount() { const unsubscribe = store.subscribe(this.handleChange.bind(this)); if (SyncController.isLogged()) { store.dispatch({ type: 'SET_CURRENT_USER' }); store.dispatch({ type: 'SET_LOGGED', data: true }); } this.setState({ isSetup: store.getState().app.isSetup, isLogged: store.getState().app.logged, }); } handleChange() { this.setState({ isSetup: store.getState().app.isSetup, isLogged: store.getState().app.logged, }); // to force re-rendering console.log("state changed") } render() { return ( {this.state.isSetup === false && ({ headerTitle: () => this.LogoTitle(i18n.t('install.installation')), headerRight: () => ( { store.dispatch({ type: 'EDIT_LOCALE' }); }} style={{ marginRight: 15 }}> ), })} /> } {this.state.isLogged === false ? ( ({ headerTitle: () => this.LogoTitle(i18n.t('global.login')), headerRight: () => ( { store.dispatch({ type: 'EDIT_LOCALE' }); }} style={{ marginRight: 15 }}> ), })} /> ) : ( ({ headerTitle: () => this.LogoTitle(i18n.t('global.home')), headerRight: () => ( this.setState({ searchTxt: text })} /> { if (this.state.searchTxt.length > 0) { navigation.navigation.navigate('SearchScreen', { needle: this.state.searchTxt, onlyVideos: false, }); this.setState({ searchTxt: '' }); } }}> { store.dispatch({ type: 'EDIT_LOCALE' }); }} style={{ marginRight: 25 }}> {store.getState().app.ShowIsActive === '1' && ( navigation.navigation.navigate('MySpaceScreen')} style={{ marginRight: 25 }}> )} navigation.navigation.navigate('SyncScreen', { isInstalled: true, }) } style={{ marginRight: 25 }}> { store.dispatch({ type: 'SET_LOGGED', data: false }); }} style={{ marginRight: 25 }}> ), })} /> )} this.LogoTitle(i18n.t('global.synchronization')) }} /> this.LogoTitle(i18n.t('app.folders')) }} /> ({ headerTitle: () => this.LogoTitle(i18n.t('global.videos')), headerRight: () => ( this.setState({ searchTxt: text })} /> { if (this.state.searchTxt.length > 0) { navigation.navigation.navigate('SearchScreen', { needle: this.state.searchTxt, onlyVideos: true, }); this.setState({ searchTxt: '' }); } }}> ), })} /> ({ headerTitle: () => this.LogoTitle(i18n.t('app.video')), headerRight: () => this.SendEmail(), orientation: 'landscape' })} /> ({ headerTitle: () => this.LogoTitle('PDF'), headerRight: () => this.SendEmail() })} /> this.LogoTitle(i18n.t('global.contacts')) }} initialParams={{ contactAdded: false }} /> this.LogoTitle(i18n.t('app.contact_details')) }} /> this.LogoTitle(i18n.t('app.results_search')) }} /> ({ headerTitle: () => this.LogoTitle(i18n.t('app.my_space')), headerRight: () => ( { const folder = store.getState().directories.filter(tmp => tmp.id === 1); navigation.navigation.navigate('DirectoriesScreen', { folder: folder }) }} style={{ marginRight: 15 }}> ), })} /> ); } LogoTitle(title) { return ( {title} ); } SendEmail() { return ( this.setState({ sendEmail: text })} /> { if (this.state.sendEmail.length > 0) { if (Helpers.isEmailValid(this.state.sendEmail)) { const email = { email: this.state.sendEmail, subject: i18n.t('app.file_sharing'), message: '', documents: JSON.stringify([store.getState().currentOpenedDoc]), user_id: store.getState().currentUser.id }; store.dispatch({ type: 'SEND_BROCHURE', data: email }); showMessage({ message: i18n.t('global.message_sent') + '.', description: i18n.t('global.message_will_be_sent_after_sync') + '.', type: 'success', duration: 1500, }); this.setState({ sendEmail: '' }); } else { Alert.alert(i18n.t('global.warning') + ' !', i18n.t('error.invalid_email_address') + '.', [ { text: 'OK' }, ], { cancelable: false }, ); } } }}> ); } renderFlag() { let flag; switch (store.getState().locale.locale) { case "fr": flag = require('./assets/img/flags/fr.png'); break; case "en": flag = require('./assets/img/flags/en.png'); break; case "de": flag = require('./assets/img/flags/de.png'); break; case "es": flag = require('./assets/img/flags/es.png'); break; } return flag; } } const styles = StyleSheet.create({ searchInput: { borderWidth: 1, borderColor: '#ea4f52', width: 200, paddingLeft: 20, }, btnSearch: { width: 50, height: 50, alignItems: 'center', justifyContent: 'center', backgroundColor: '#ea4f52' } }); export default App;