Coder Social home page Coder Social logo

didouye / nativescript-contacts Goto Github PK

View Code? Open in Web Editor NEW

This project forked from firescript/nativescript-contacts

0.0 1.0 0.0 102 KB

A nativescript module that gives access to the native contact directory.

License: MIT License

JavaScript 100.00%

nativescript-contacts's Introduction

NativeScript Contacts

A NativeScript module providing easy access to iOS and Android contact directory. Pick a contact, update it, delete it, or add a new one. Working with groups available in 1.5.0. Create a group, add and remove contacts to the group, and delete a group.

Installation

Run tns plugin add nativescript-contacts

Usage

To use the contacts module you must first require() it.

var contacts = require( "nativescript-contacts" );

Android Caveats

From API level 23 on you need to check for the appropriate permissions to access the contacts. So not only do you need these permissions in your manifest:

<uses-permission android:name="android.permission.GET_ACCOUNTS" />        
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_CONTACTS" />

You also need to make sure to request the permissions everytime you perform the operation itself (e.g. using the great nativescript-permissions plugin):

const contact = new Contact();
(...)
Permissions.requestPermissions([android.Manifest.permission.GET_ACCOUNTS, android.Manifest.permission.WRITE_CONTACTS], "I need these permissions because I'm cool")
            .then(() => {
                contact.save();
            });

Methods

####getContact: Pick one contact and bring back its data.

var app = require( "application" );
var contacts = require( "nativescript-contacts" );

contacts.getContact().then(function(args){
    /// Returns args:
    /// args.data: Generic cross platform JSON object
    /// args.reponse: "selected" or "cancelled" depending on wheter the user selected a contact. 
    
    if (args.response === "selected") {
        var contact = args.data; //See data structure below
        
        // lets say you wanted to grab first name and last name
        console.log(contact.name.given + " " + contact.name.family);
        
        //lets say you want to get the phone numbers
        contact.phoneNumbers.forEach(function(phone){
            console.log(phone.value);
        });

        //lets say you want to get the addresses
        contact.postalAddresses.forEach(function(address){
            console.log(address.location.street);
        });
    }
});

Save a new contact

var app = require( "application" );
var contacts = require( "nativescript-contacts" );
var imageSource = require( "image-source" );

var newContact = new contacts.Contact();
newContact.name.given = "John";
newContact.name.family = "Doe";
newContact.phoneNumbers.push({ label: contacts.KnownLabel.HOME, value: "123457890" }); // See below for known labels
newContact.phoneNumbers.push({ label: "My Custom Label", value: "11235813" });
newContact.photo = imageSource.fromFileOrResource("~/photo.png");
newContact.save();

Update an existing contact

var app = require( "application" );
var contacts = require( "nativescript-contacts" );
var imageSource = require( "image-source" );

contacts.getContact().then(function(args){
    if (args.response === "selected") {
        var contact = args.data;        
        contact.name.given = "Jane";
        contact.name.family = "Doe";
        
        imageSource.fromUrl("http://www.google.com/images/errors/logo_sm_2.png").then(function (src) {
            contact.photo = src;
            contact.save();
        });
    }
});

Delete a contact

var app = require( "application" );
var contacts = require( "nativescript-contacts" );

contacts.getContact().then(function(args){
    /// Returns args:
    /// args.data: Generic cross platform JSON object
    /// args.reponse: "selected" or "cancelled" depending on wheter the user selected a contact. 
    
    if (args.response === "selected") {
        var contact = args.data; //See data structure below
        contact.delete();
    }
});

getContactsByName: Find all contacts whose name matches. Returns an array of contact data.

var app = require( "application" );
var contacts = require( "nativescript-contacts" );

/*
  contactFields contains the fields to retrieve from native backend to reduce processing time
  var contactFields = ['name','organization','nickname','notes','photo','urls','phoneNumbers','emailAddresses','postalAddresses']
*/
var contactFields = ['name','phoneNumbers']

contacts.getContactsByName("Hicks",contactFields).then(function(args){
    console.log("getContactsByName Complete");
    console.log(JSON.stringify(args));
    /// Returns args:
    /// args.data: Generic cross platform JSON object, null if no contacts were found.
    /// args.reponse: "fetch"
}, function(err){
    console.log("Error: " + err);
});

getAllContacts: Find all contacts. Returns an array of contact data.

var app = require( "application" );
var contacts = require( "nativescript-contacts" );

/*
  contactFields contains the fields to retrieve from native backend to reduce processing time
  var contactFields = ['name','organization','nickname','notes','photo','urls','phoneNumbers','emailAddresses','postalAddresses']
*/
var contactFields = ['name','phoneNumbers']

contacts.getAllContacts(contactFields).then(function(args){
    console.log("getAllContacts Complete");
    console.log(JSON.stringify(args));
    /// Returns args:
    /// args.data: Generic cross platform JSON object, null if no contacts were found.
    /// args.reponse: "fetch"
}, function(err){
    console.log("Error: " + err);
});

getGroups: Find groups. Returns an array of group data.

var app = require( "application" );
var contacts = require( "nativescript-contacts" );

contacts.getGroups("Test Group") //[name] optional. If defined will look for group with the specified name, otherwise will return all groups.
    .then(function(args){
        console.log("getGroups Complete");
        console.log(JSON.stringify(args));
        /// Returns args:
        /// args.data: Generic cross platform JSON object, null if no groups were found.
        /// args.reponse: "fetch"
        
        if(args.data === null){
            console.log("No Groups Found!");
        }
        else{
            console.log("Group(s) Found!");
        }
        
    }, function(err){
        console.log("Error: " + err);
    });

Save a new group

var app = require( "application" );
var contacts = require( "nativescript-contacts" );

var groupModel = new contacts.Group();
groupModel.name="Test Group";
//Save Argument (boolean)
//iOS: [false=> Use Local Container, true=> Use Default Container]
//Android: will always be true, setting this value will not affect android.
groupModel.save(false); 

Delete a group

var app = require( "application" );
var contacts = require( "nativescript-contacts" );

contacts.getGroups("Test Group")
.then(function(args){
    console.log("getGroups Complete");
    console.log(JSON.stringify(args));
    /// Returns args:
    /// args.data: Generic cross platform JSON object, null if no groups were found.
    /// args.reponse: "fetch"
        
    if(args.data !== null){
        console.log("Group(s) Found!");
        args.data[0].delete(); //Delete the first found group
    }
}, function(err){
        console.log("Error: " + err);
});

Add Member To Group

var app = require( "application" );
var contacts = require( "nativescript-contacts" );

contacts.getContact().then(function(args){
    /// Returns args:
    /// args.data: Generic cross platform JSON object
    /// args.reponse: "selected" or "cancelled" depending on wheter the user selected a contact. 
    
    if (args.response === "selected") {
        var contact = args.data; //See data structure below
        contacts.getGroups("Test Group")
        .then(function(a){
            if(a.data !== null){
                var group = a.data[0];
                group.addMember(contact);
            }
        }, function(err){
            console.log("Error: " + err);
        });
    }
});

Remove Member From Group

var app = require( "application" );
var contacts = require( "nativescript-contacts" );

contacts.getGroups("Test Group") //[name] optional. If defined will look for group with the specified name, otherwise will return all groups.
.then(function(args){
    if(args.data !== null){
        var group = args.data[0];
            
        contacts.getContactsInGroup(group).then(function(a){
            /// Returns args:
            /// args.data: Generic cross platform JSON object, null if no groups were found.
            /// args.reponse: "fetch"
            console.log("getContactsInGroup complete");

            if(a.data !== null){
                a.data.forEach(function(c,idx){
                    group.removeMember(c);
                });
            }
        }, function(err){
            console.log("Error: " + err);
        });
    }
}, function(err){
    console.log("Error: " + err);
});

getContactsInGroup: Get all contacts in a group. Returns an array of contact data.

var app = require( "application" );
var contacts = require( "nativescript-contacts" );

contacts.getGroups("Test Group") //[name] optional. If defined will look for group with the specified name, otherwise will return all groups.
.then(function(args){
    if(args.data !== null){
        var group = args.data[0];
            
        contacts.getContactsInGroup(group).then(function(a){
            console.log("getContactsInGroup complete");
            /// Returns args:
            /// args.data: Generic cross platform JSON object, null if no groups were found.
            /// args.reponse: "fetch"
        }, function(err){
            console.log("Error: " + err);
        });
    }
}, function(err){
    console.log("Error: " + err);
});

Single User Data Structure

{
    id : "";
    name = {
        given: "",
        middle: "",
        family: "",
        prefix: "",
        suffix: "",
        displayname: "",
        phonetic : {
            given: "",
            middle: "",
            family: ""   
        }
    }
    nickname : "",
    organization : {
        name: "", 
        jobTitle: "", 
        department: "", 
        
        // Android Specific properties
        symbol: "",
        phonetic: "",
        location: "",
        type: ""
    },
    notes : "",
    photo: null, // {N} ImageSource instance
    
    phoneNumbers : [], 
    emailAddresses : [],
    postalAddresses : [],
    urls : []
}

PhoneNumber / EmailAddress structure

{
    id: "",
    label: "",
    value: ""
}

Url structure

{
    label: "",
    value: ""
}

PostalAddress structure

{
    id: "",
    label: "",
    location: {
        street: "",
        city: "",
        state: "",
        postalCode: "",
        country: "",
        countryCode: "",
    }
}

Known Labels (for Urls, Addresses and Phones)

The following constants are exposed from the plugin in the KnownLabel structure. See details bellow for what types and on what platform they are supported

  • HOME
    iOS - phone, email, postal, url
    Android - phone, email, postal, url
  • WORK
    iOS - phone, email, postal, url
    Android - phone, email, postal, url
  • OTHER
    iOS - phone, email, postal, url
    Android - phone, email, postal, url
  • FAX_HOME
    iOS - phone
    Android - phone
  • FAX_WORK
    iOS - phone
    Android - phone
  • PAGER
    iOS - phone
    Android - phone
  • MAIN
    iOS - phone
    Android - phone
  • HOMEPAGE
    iOS - url
    Android - url
  • CALLBACK
    Android - phone
  • CAR
    Android - phone
  • COMPANY_MAIN
    Android - phone
  • ISDN
    Android - phone
  • OTHER_FAX
    Android - phone
  • RADIO
    Android - phone
  • TELEX
    Android - phone
  • TTY_TDD
    Android - phone
  • WORK_MOBILE
    Android - phone
  • WORK_PAGER
    Android - phone
  • ASSISTANT
    Android - phone
  • MMS
    Android - phone
  • FTP
    Android - url
  • PROFILE
    Android - url
  • BLOG
    Android - url

Those are the system labels but you can also use any custom label you want.

Single Group Data Structure

{
    id : "";
    name : "";
}

iOS

See apples docs on properties available: https://developer.apple.com/library/mac/documentation/Contacts/Reference/CNContact_Class/index.html#//apple_ref/occ/cl/CNContact

NOTE: Since the plugin uses the Contact framework it is supported only on iOS 9.0 and above!

nativescript-contacts's People

Contributors

sitefinitysteve avatar bthurlow avatar peterstaev avatar firescript avatar didouye avatar abhayastudios avatar steinerj avatar nitayrabi avatar sserdyuk avatar neddinn avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.