Как совместить «реагировать-родные-контакты» и «реагировать-нативные-коммуникации»? - PullRequest
1 голос
/ 29 апреля 2020

Я хотел бы объединить библиотеку " React-Native-Contacts " (github.com/morenoh149/react-native-contacts) и " React-Native-Communications " непосредственно выбрать и позвонить моим контактам, уже зарегистрированным в Справочнике моего телефона. Проблема в том, что я не знаю, как это сделать, изменив реквизиты «OnPress» кода «App. js» из библиотеки « React-Native-Contacts », которая равна «* 1007». * onPress = {() => Contacts.openExistingContact (contact, () => {})} ", назначив компоненту" Communications", который вызывает " Communications.phonecall ('0123456789', true) ". Поэтому цель состоит в том, чтобы изменить номер телефона " 0123456789 " выбранным контактом из моего справочника мобильного телефона.

Вот мой полный код для доступа Контакты для мобильных телефонов и на основе «response-native-contacts»:

import React, { Component } from "react";
import {
  PermissionsAndroid,
  Platform,
  SafeAreaView,
  ScrollView,
  StyleSheet,
  Text,
  View,
  Image
} from "react-native";
import Contacts from "react-native-contacts";

type Props = {};
export default class App extends Component<Props> {
  constructor(props) {
    super(props);

    this.search = this.search.bind(this);

    this.state = {
      contacts: [],
      searchPlaceholder: "Search"
    };

    Contacts.iosEnableNotesUsage(true);
  }

  async componentDidMount() {
    if (Platform.OS === "android") {
      PermissionsAndroid.request(PermissionsAndroid.PERMISSIONS.READ_CONTACTS, {
        title: "Contacts",
        message: "This app would like to view your contacts."
      }).then(() => {
        this.loadContacts();
      });
    } else {
      this.loadContacts();
    }
  }

  loadContacts() {
    Contacts.getAll((err, contacts) => {
      if (err === "denied") {
        console.warn("Permission to access contacts was denied");
      } else {
        this.setState({ contacts });
      }
    });

    Contacts.getCount(count => {
      this.setState({ searchPlaceholder: `Search ${count} contacts` });
    });
  }

  search(text) {
    const phoneNumberRegex = /\b[\+]?[(]?[0-9]{2,6}[)]?[-\s\.]?[-\s\/\.0-9]{3,15}\b/m;
    const emailAddressRegex = /^(([^<>()[\].,;:\s@"]+(\.[^<>()[\].,;:\s@"]+)*)|(".+"))@(([^<>()[\].,;:\s@"]+\.)+[^<>()[\].,;:\s@"]{2,})$/i;
    if (text === "" || text === null) {
      this.loadContacts();
    } else if (phoneNumberRegex.test(text)) {
      Contacts.getContactsByPhoneNumber(text, (err, contacts) => {
        this.setState({ contacts });
      });
    } else if (emailAddressRegex.test(text)) {
      Contacts.getContactsByEmailAddress(text, (err, contacts) => {
        this.setState({ contacts });
      });
    } else {
      Contacts.getContactsMatchingString(text, (err, contacts) => {
        this.setState({ contacts });
      });
    }
  }

  render() {
    return (
      <SafeAreaView style={styles.container}>
        <View
          style={{
            paddingLeft: 100,
            paddingRight: 100,
            justifyContent: "center",
            alignItems: "center"
          }}
        >
          <Image
            source={require("./logo.png")}
            style={{
              aspectRatio: 6,
              resizeMode: "contain"
            }}
          />
        </View>
        <SearchBar
          searchPlaceholder={this.state.searchPlaceholder}
          onChangeText={this.search}
        />
        <ScrollView style={{ flex: 1 }}>
          {this.state.contacts.map(contact => {
            return (
              <ListItem
                leftElement={
                  <Avatar
                    img={
                      contact.hasThumbnail
                        ? { uri: contact.thumbnailPath }
                        : undefined
                    }
                    placeholder={getAvatarInitials(
                      `${contact.givenName} ${contact.familyName}`
                    )}
                    width={40}
                    height={40}
                  />
                }
                key={contact.recordID}
                title={`${contact.givenName} ${contact.familyName}`}
                description={`${contact.company}`}
                onPress={() => Contacts.openExistingContact(contact, () => { })}
                onDelete={() =>
                  Contacts.deleteContact(contact, () => {
                    this.loadContacts();
                  })
                }
              />
            );
          })}
        </ScrollView>
      </SafeAreaView>
    );
  }
}

const styles = StyleSheet.create({
  container: {
    flex: 1
  }
});

const getAvatarInitials = textString => {
  if (!textString) return "";

  const text = textString.trim();

  const textSplit = text.split(" ");

  if (textSplit.length <= 1) return text.charAt(0);

  const initials =
    textSplit[0].charAt(0) + textSplit[textSplit.length - 1].charAt(0);

  return initials;
};

Помогите мне решить эту головоломку, удачно объединив две библиотеки " React-Native-Contacts " (github.com/morenoh149/react-native-contacts) и " React-Native-Communications ", потому что это руководство объясняет, как использовать " React-Native-Communications " (aboutreact .com / make-phone-call-send-sms-or-email-using-реагировать-нативная связь /) не подробно описывает, как это работает с контактами нашего мобильного телефона.

Помогите мне пожалуйста добавьте функцию " React-Native-Communications " phoneCall в мой код " React-Native-Contacts " выше.

...