From ab9af2bdc41b41cb1201c99d7469edd44aa7728f Mon Sep 17 00:00:00 2001 From: Ibrahim Hadeed Date: Sat, 30 Apr 2016 17:50:08 -0400 Subject: [PATCH] pre-final plugin rewrite --- src/plugins/contacts.ts | 248 ++++++++++++++++++++-------------------- 1 file changed, 122 insertions(+), 126 deletions(-) diff --git a/src/plugins/contacts.ts b/src/plugins/contacts.ts index afaa603c..e280aa12 100644 --- a/src/plugins/contacts.ts +++ b/src/plugins/contacts.ts @@ -1,6 +1,13 @@ import {Plugin, Cordova, InstanceProperty, CordovaInstance} from './plugin'; - -export interface ContactProperties { +declare var window: any = { + ContactAddress: (...args) => {}, + ContactProperties: (...args) => {}, + ContactOrganization: (...args) => {}, + ContactName: (...args) => {}, + ContactField: (...args) => {}, + ContactFindOptions: (...args) => {} +}; +export interface IContactProperties { /** A globally unique identifier. */ id?: string; /** The name of this Contact, suitable for display to end users. */ @@ -10,13 +17,13 @@ export interface ContactProperties { /** A casual name by which to address the contact. */ nickname?: string; /** An array of all the contact's phone numbers. */ - phoneNumbers?: ContactField[]; + phoneNumbers?: IContactField[]; /** An array of all the contact's email addresses. */ - emails?: ContactField[]; + emails?: IContactField[]; /** An array of all the contact's addresses. */ addresses?: ContactAddress[]; /** An array of all the contact's IM addresses. */ - ims?: ContactField[]; + ims?: IContactField[]; /** An array of all the contact's organizations. */ organizations?: ContactOrganization[]; /** The birthday of the contact. */ @@ -24,36 +31,13 @@ export interface ContactProperties { /** A note about the contact. */ note?: string; /** An array of the contact's photos. */ - photos?: ContactField[]; + photos?: IContactField[]; /** An array of all the user-defined categories associated with the contact. */ - categories?: ContactField[]; + categories?: IContactField[]; /** An array of web pages associated with the contact. */ - urls?: ContactField[]; + urls?: IContactField[]; } -// export interface Contact extends ContactProperties { -// /** -// * Returns a new Contact object that is a deep copy of the calling object, with the id property set to null -// */ -// clone(): Contact; -// /** -// * Removes the contact from the device contacts database, otherwise executes an error callback with a ContactError object. -// * @param onSuccess Success callback function invoked on success operation. -// * @param onError Error callback function, invoked when an error occurs. -// */ -// remove( -// onSuccess?: () => void, -// onError?: (error: Error) => void): void; -// /** -// * Saves a new contact to the device contacts database, or updates an existing contact if a contact with the same id already exists. -// * @param onSuccess Success callback function invoked on success operation with che Contact object. -// * @param onError Error callback function, invoked when an error occurs. -// */ -// save( -// onSuccess?: (contact: Contact) => void, -// onError?: (error: Error) => void): void; -// } - export class Contact { private _objectInstance: any; @@ -115,7 +99,7 @@ export class Contact { } -interface ContactError { +interface IContactError { /** Error code */ code: number; /** Error message */ @@ -123,7 +107,7 @@ interface ContactError { } declare var ContactError: { - new(code: number): ContactError; + new(code: number): IContactError; UNKNOWN_ERROR: number; INVALID_ARGUMENT_ERROR: number; TIMEOUT_ERROR: number; @@ -133,7 +117,7 @@ declare var ContactError: { PERMISSION_DENIED_ERROR: number }; -export interface ContactName { +export interface IContactName { /** The complete name of the contact. */ formatted?: string; /** The contact's family name. */ @@ -148,32 +132,28 @@ export interface ContactName { honorificSuffix?: string; } -// declare var ContactName: { -// /** Constructor for ContactName object */ -// new(formatted?: string, -// familyName?: string, -// givenName?: string, -// middleName?: string, -// honorificPrefix?: string, -// honorificSuffix?: string): ContactName -// }; - -export class ContactName { +export class ContactName implements IContactName { private _objectInstance: any; - constructor() { } + constructor(formatted?: string, familyName?: string, givenName?: string, middleName?: string, honorificPrefix?: string, honorificSuffix?: string) { + this._objectInstance = new window.ContactName(formatted, familyName, givenName, middleName, honorificPrefix, honorificSuffix); + } - public set givenName(val: string) { - this._objectInstance.givenName = val; - } - public set familyName(val: string) { - this._objectInstance.familyName = val; - } - public get givenName(): string {return this._objectInstance.givenName; } - public get familyName(): string {return this._objectInstance.familyName; } + @InstanceProperty + get formatted(): string {return; } + @InstanceProperty + get familyName(): string {return; } + @InstanceProperty + get givenName(): string {return; } + @InstanceProperty + get middleName(): string {return; } + @InstanceProperty + get honorificPrefix(): string {return; } + @InstanceProperty + get honorificSuffix(): string {return; } } -export interface ContactField { +export interface IContactField { /** A string that indicates what type of field this is, home for example. */ type: string; /** The value of the field, such as a phone number or email address. */ @@ -182,14 +162,20 @@ export interface ContactField { pref: boolean; } -declare var ContactField: { - /** Constructor for ContactField object */ - new(type?: string, - value?: string, - pref?: boolean): ContactField -}; +export class ContactField implements IContactField { + private _objectInstance: any; + constructor(type?: string, value?: string, pref?: boolean) { + this._objectInstance = new window.ContactField(type, value, pref); + } + @InstanceProperty + get type(): string {return; } + @InstanceProperty + get value(): string {return; } + @InstanceProperty + get pref(): boolean {return; } +} -export interface ContactAddress { +export interface IContactAddress { /** Set to true if this ContactAddress contains the user's preferred value. */ pref?: boolean; /** A string indicating what type of field this is, home for example. */ @@ -208,19 +194,46 @@ export interface ContactAddress { country?: string; } -declare var ContactAddress: { - /** Constructor of ContactAddress object */ - new(pref?: boolean, - type?: string, - formatted?: string, - streetAddress?: string, - locality?: string, - region?: string, - postalCode?: string, - country?: string): ContactAddress -}; +export class ContactAddress implements IContactAddress { + private _objectInstance: any; -export interface ContactOrganization { + constructor (pref?: boolean, + type?: string, + formatted?: string, + streetAddress?: string, + locality?: string, + region?: string, + postalCode?: string, + country?: string) { + this._objectInstance = new window.ContactAddress(pref, type, formatted, streetAddress, locality, region, postalCode, country); + } + + @InstanceProperty + get pref(): boolean {return; } + + @InstanceProperty + get type(): string {return; } + + @InstanceProperty + get formatted(): string {return; } + + @InstanceProperty + get streetAddress(): string {return; } + + @InstanceProperty + get locality(): string {return; } + + @InstanceProperty + get region(): string {return; } + + @InstanceProperty + get postalCode(): string {return; } + + @InstanceProperty + get country(): string {return; } +} + +export interface IContactOrganization { /** Set to true if this ContactOrganization contains the user's preferred value. */ pref?: boolean; /** A string that indicates what type of field this is, home for example. */ @@ -233,17 +246,29 @@ export interface ContactOrganization { title?: string; } -declare var ContactOrganization: { - /** Constructor for ContactOrganization object */ - new(pref?: boolean, - type?: string, - name?: string, - department?: string, - title?: string): ContactOrganization -}; +export class ContactOrganization implements IContactOrganization { + private _objectInstance: any; + constructor () { + this._objectInstance = new window.ContactOrganization(); + } + @InstanceProperty + get pref(): boolean {return; } + + @InstanceProperty + get type(): string {return; } + + @InstanceProperty + get name(): string {return; } + + @InstanceProperty + get department(): string {return; } + + @InstanceProperty + get title(): string {return; } +} /** Search options to filter navigator.contacts. */ -interface ContactFindOptions { +interface IContactFindOptions { /** The search string used to find navigator.contacts. */ filter?: string; /** Determines if the find operation returns multiple navigator.contacts. */ @@ -252,36 +277,24 @@ interface ContactFindOptions { desiredFields?: string[]; } -declare var ContactFindOptions: { - /** Constructor for ContactFindOptions object */ - new(filter?: string, - multiple?: boolean, - desiredFields?: string[]): ContactFindOptions -}; - -export class ContactFindOptions { +export class ContactFindOptions implements IContactFindOptions { private _objectInstance: any; - public set filter(val: string) { - this._objectInstance.filter = val; + constructor () { + this._objectInstance = new window.ContactFindOptions(); } + @InstanceProperty + public get filter(): string {return; } - public set multiple(val: boolean) { - this._objectInstance.multiple = val; - } + @InstanceProperty + public get multiple(): boolean {return; } - public set desiredFields(val) { - this._objectInstance.desiredFields = val; - } + @InstanceProperty + public get desiredFields(): any {return; } - public set hasPhoneNumber(val: boolean) { - this._objectInstance.hasPhoneNumber = val; - } + @InstanceProperty + public get hasPhoneNumber(): boolean {return; } } -// declare var Contact: { -// new(): Contact -// }; - /** * @name Contacts * @description @@ -311,28 +324,11 @@ export class ContactFindOptions { }) export class Contacts { - private _objectInstance: any; - - public set displayName(val: string) { - this._objectInstance.displayName = val; + static create(): Contact { + return new Contact(); } - public set nickname(val: boolean) { - this._objectInstance.nickname = val; - } - - get displayName() {return this._objectInstance.displayName; } - get nickname() {return this._objectInstance.nickname; } - - /** - * Create a new Contact object. - * - * @param options {Object} Object whose properties the created Contact should have. - * @return {Contact} Returns the created contact - */ - constructor (options?: ContactProperties) { - this._objectInstance = navigator.contacts(options); - }; + // TODO add fieldType options /** * Search for contacts in the Contacts list.