import React from 'react'; import { Alert, Button, FlatList, Text, TextInput, TouchableOpacity, View, } from 'react-native'; // Reduxs import { connect } from 'react-redux'; import { deleteContact, editContact } from '../Store/Actions/contacts'; // 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.users.users, contacts: state.contacts, documents: state.documents, currentUser: state.app.currentUser, mainColor: state.app.mainColor, }; } const mapDispatchToProps = dispatch => { return { editContact: (user, data) => dispatch(editContact(user, data)), deleteContact: (user, id) => dispatch(deleteContact(user, id)), sendBrochure: email => dispatch({ type: 'SEND_BROCHURE', data: email }), }; }; 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.sendBrochure(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.editContact(this.props.currentUser, 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, }); } deleteContactAction(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.deleteContact(this.props.currentUser, 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.deleteContactAction(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]; }); const { action } = this.props.route.params; if (action === 'add') { this.props.navigation.navigate('ContactDetailsScreen', { action: 'add', }); } 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 (