import React from 'react'; import { View, Button, FlatList, Text, TouchableOpacity, Alert, TextInput, } from 'react-native'; // Reduxs import { connect } from 'react-redux'; // Helpers import Helpers from "../Lib/Helpers"; // Translations import i18n from "../../I18n"; // Icons import FontAwesome5 from 'react-native-vector-icons/FontAwesome5'; // Flash Messages import { showMessage } from 'react-native-flash-message'; // Overlay import { Overlay } from '@rneui/themed'; // Picker import { Picker } from '@react-native-picker/picker'; // Style import styles from '../../Resources/Styles/ContactStyle'; function mapStateToProps(state) { return { users: state.app.users, contacts: state.app.contacts, documents: state.app.documents, currentUser: state.app.currentUser, }; } class ContactScreen extends React.Component { state = { contacts: [], sortType: 'asc', sortField: 'name', searchTxt: '', showTransferContact: false, selectedTransferUser: 0, contactToTransfer: {}, showSendBrochure: false, selectedDocument: -1, sendDocumentList: [], selectedSendBrochureEmail: -1, tmpSendBrochureEmail: '', tmpSendBrochureSubject: '', tmpSendBrochureMessage: '', sortedDocuments: [], sortedEmails: [], }; sendBrochure() { if ( this.state.tmpSendBrochureEmail !== '' && this.state.tmpSendBrochureSubject !== '' && this.state.tmpSendBrochureMessage !== '' && this.state.sendDocumentList.length > 0 && Helpers.isEmailValid(this.state.tmpSendBrochureEmail) ) { const email = { email: this.state.tmpSendBrochureEmail, subject: this.state.tmpSendBrochureSubject, message: this.state.tmpSendBrochureMessage, documents: JSON.stringify(this.state.sendDocumentList), user_id: this.props.currentUser.id }; this.props.dispatch({ type: 'SEND_BROCHURE', data: email }); this.setState({ showSendBrochure: false, tmpSendBrochureEmail: '', tmpSendBrochureSubject: '', tmpSendBrochureMessage: '', selectedSendBrochureEmail: -1, selectedDocument: -1, sendDocumentList: [], }); showMessage({ message: i18n.t('global.message_sent') + '.', description: i18n.t('global.message_will_be_sent_after_sync') + '.', type: 'success', duration: 1500, }); } else { Alert.alert( i18n.t('error.incomplete_form'), i18n.t('error.fill_all_fields_and_1_doc_min') + '.', ); } } transferContact() { const nextUser = this.props.users.filter(user => user.id !== this.props.currentUser.id)[this.state.selectedTransferUser]; const transferContact = this.state.contactToTransfer; const contact = { id: transferContact.id, email: transferContact.email, type: transferContact.type, other: transferContact.other, network: transferContact.network, name: transferContact.name, firstname: transferContact.firstname, office: transferContact.office, company: transferContact.company, address: transferContact.address, phone: transferContact.phone, products: transferContact.products, notes: transferContact.note, visits: transferContact.visits, to_delete: false, synced: false, user_id: nextUser.id, }; this.props.dispatch({ type: 'UPDATE_CONTACT', data: contact }); this.setState({ showTransferContact: false }); showMessage({ message: i18n.t('contact_s.contact_transferred') + '.', description: i18n.t('contact_s.contact_will_be_sent_after_sync') + '.', type: 'success', duration: 1500, }); } deleteContact(id) { Alert.alert( i18n.t('global.confirmation'), i18n.t('contact_s.confirm_contact_delete'), [ { text: i18n.t('global.no'), onPress: () => console.log('Cancel Pressed'), style: 'cancel', }, { text: i18n.t('global.yes'), onPress: () => { this.setState({ contacts: [], sortedEmails: [] }); this.props.dispatch({ type: 'DELETE_CONTACT', data: id }); showMessage({ message: i18n.t('contact_s.contact_deleted') + '.', type: 'success', duration: 500, }); }, }, ], { cancelable: false }, ); } Item(item) { return ( this.props.navigation.navigate('ContactDetailsScreen', { action: 'edit', contactId: item.id, }) }> {item.name.toUpperCase()} {item.firstname} {item.company} {item.email} { this.deleteContact(item.id); }}> { this.setState({ showTransferContact: true, contactToTransfer: item, }); }}> ); } sortContacts(field) { let sort; if (field !== this.state.sortField) { sort = 'asc'; } else { if (this.state.sortType === 'asc') { sort = 'desc'; } else { sort = 'asc'; } } this.setState({ contacts: this.state.contacts.sort(Helpers.compareValues(field, sort)), sortType: sort, sortField: field }); } HeaderItem() { return ( { this.sortContacts('name'); }}> {i18n.t('global.name')} { this.sortContacts('company'); }}> {i18n.t('global.company')} {i18n.t('global.email')} ); } handleSearchBtn() { if (this.state.searchTxt.length > 0) { let obj = this.props.contacts; let array = Object.keys(obj).map(function (key) { return obj[key]; }); this.setState({ contacts: array.sort(Helpers.compareValues('name', 'asc')), sortType: 'asc', searchTxt: '' }); } } handleSearchTxt(text) { this.setState({ searchTxt: text }); if (text.length > 0) { let tmpContactsName = this.props.contacts.filter(item => item.name.toLowerCase().indexOf(text.toLowerCase()) >= 0); let tmpContactsCompany = this.props.contacts.filter(item => item.company.toLowerCase().indexOf(text.toLowerCase()) >= 0); let resSearch = Object.assign(tmpContactsName, tmpContactsCompany); this.setState({ contacts: resSearch.sort(Helpers.compareValues('name', 'asc')), sortType: 'asc' }); } else { let obj = this.props.contacts; let array = Object.keys(obj).map(function (key) { return obj[key]; }); this.setState({ contacts: array.sort(Helpers.compareValues('name', 'asc')), sortType: 'asc' }); } } componentDidMount() { this.init(); } componentDidUpdate(prevProps, prevState, snapshot) { if (prevProps.contacts !== this.props.contacts) { this.init(); } } init() { let objContacts = this.props.contacts; let objDocs = this.props.documents; let arrayContacts = Object.keys(objContacts).map(function (key) { return objContacts[key]; }); let arrayEmails = Object.keys(objContacts).map(function (key) { return objContacts[key]; }); let arrayDocs = Object.keys(objDocs).map(function (key) { return objDocs[key]; }); this.setState({ contacts: arrayContacts.sort(Helpers.compareValues('name', 'asc')), sortedDocuments: arrayDocs.sort(Helpers.compareValues('title', 'asc')), sortedEmails: arrayEmails.sort(Helpers.compareValues('email', 'asc')), sortType: 'asc', sortField: 'name', }); } render() { const { contactAdded } = this.props.route.params; if (contactAdded === true) { this.props.navigation.setParams({ contactAdded: false }); showMessage({ message: i18n.t('contact_s.contact_added') + '.', type: 'success', duration: 500, }); } return (