From a9bf9cf390b07c5b280855692871bce7cb77d79b Mon Sep 17 00:00:00 2001 From: Connor Peet Date: Sat, 31 Dec 2016 18:42:09 -0800 Subject: [PATCH] Add typings for Facebook's ui method (#13611) --- facebook-js-sdk/facebook-js-sdk-tests.ts | 69 +++++++++++++ facebook-js-sdk/index.d.ts | 124 ++++++++++++++++++++++- 2 files changed, 188 insertions(+), 5 deletions(-) diff --git a/facebook-js-sdk/facebook-js-sdk-tests.ts b/facebook-js-sdk/facebook-js-sdk-tests.ts index 61721a4f71..56fc91cd02 100644 --- a/facebook-js-sdk/facebook-js-sdk-tests.ts +++ b/facebook-js-sdk/facebook-js-sdk-tests.ts @@ -39,3 +39,72 @@ FB.logout(function(response: fb.AuthResponse) { console.log(response.status); console.log(response.authResponse.accessToken); }); + +/** + * Dialog samples from Facebook documentation: + */ +FB.ui({ + display: 'popup', + method: 'live_broadcast', + phase: 'create', +}, response => { + if (!response.id) { + alert('dialog canceled'); + return; + } + alert('stream url:' + response.secure_stream_url); + + FB.ui({ + display: 'popup', + method: 'live_broadcast', + phase: 'publish', + broadcast_data: response, + }, response => { + alert("video status: \n" + response.status); + }); +}); + +FB.ui({ + method: 'pay', + action: 'purchaseitem', + product: 'YOUR_PRODUCT_URL' +}, data => { + console.log(data.payment_id); +}); + +FB.ui({ + method: 'pagetab', + redirect_uri: 'YOUR_URL' +}, response => {}); + +FB.ui({ + method: 'send', + link: 'http://www.nytimes.com/interactive/2015/04/15/travel/europe-favorite-streets.html', +}, response => {}); + +FB.ui({ + method: 'apprequests', + message: 'Take this bomb to blast your way to victory!', + to: 'USER_ID, USER_ID, INVITE_TOKEN', + action_type:'send', + object_id: 'YOUR_OBJECT_ID', // e.g. '191181717736427' +}, response => { + console.log(response); +}); + +FB.ui({ + method: 'apprequests', + message: 'Friend Smash Request!', + filters: [ + { name:'GROUP_1_NAME', user_ids:['USER_ID','USER_ID','USER_ID'] }, + { name:'GROUP_2_NAME', user_ids: ['USER_ID','USER_ID','USER_ID'] }, + ] +}, response => { + console.log(response); +}); + +FB.ui({ + method: 'share', + mobile_iframe: true, + href: 'https://developers.facebook.com/docs/', +}, response => {}); diff --git a/facebook-js-sdk/index.d.ts b/facebook-js-sdk/index.d.ts index bee34f0a2c..a7b78e73b0 100644 --- a/facebook-js-sdk/index.d.ts +++ b/facebook-js-sdk/index.d.ts @@ -1,4 +1,4 @@ -// Type definitions for the Facebook Javascript SDK +// Type definitions for the Facebook Javascript SDK 2.8 // Project: https://developers.facebook.com/docs/javascript // Definitions by: Amrit Kahlon // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped @@ -12,7 +12,7 @@ declare namespace facebook { AppEvents: any; Canvas: any; Event: any; - + /** * The method FB.getAuthResponse() is a synchronous accessor for the current authResponse. * The synchronous nature of this method is what sets it apart from the other login methods. @@ -50,8 +50,33 @@ declare namespace facebook { * @param callback function to handle the response */ logout(callback: (response: AuthResponse) => void): void; - - ui: any; + + /** + * @see https://developers.facebook.com/docs/sharing/reference/share-dialog + */ + ui(params: ShareDialogParams, callback: (response: ShareDialogResponse) => void): void; + + /** + * @see https://developers.facebook.com/docs/games/services/gamerequests + */ + ui(params: GameRequestDialogParams, callback: (response: GameRequestDialogResponse) => void): void; + + /** + * @see https://developers.facebook.com/docs/payments/reference/paydialog + */ + ui(params: PayDialogParams, callback: (response: PayDialogResponse) => void): void; + + /** + * @see https://developers.facebook.com/docs/videos/live-video/exploring-live + */ + ui(params: LiveDialogParams, callback: (response: LiveDialogResponse) => void): void; + + /** + * @see https://developers.facebook.com/docs/sharing/reference/send-dialog + * @see https://developers.facebook.com/docs/pages/page-tab-dialog + */ + ui(params: SendDialogParams | AddPageTabDialogParams, callback: (response: null) => void): void; + XFBML: any; } @@ -73,6 +98,68 @@ declare namespace facebook { profile_selector_ids?: string; } + //////////////////////// + // + // DIALOGS + // + //////////////////////// + + interface DialogParams { + app_id?: string; + redirect_uri?: string; + display?: 'page' | 'iframe' | 'async' | 'popup'; + } + + interface ShareDialogParams extends DialogParams { + method: 'share'; + href: string; + hashtag?: string; + quote?: string; + mobile_iframe?: boolean; + } + + interface AddPageTabDialogParams extends DialogParams { + method: 'pagetab'; + redirect_uri: string; + } + + interface GameRequestDialogParams extends DialogParams { + method: 'apprequests'; + message: string; + action_type?: 'send' | 'askfor' | 'turn'; + data?: number; + exclude_ids?: string[]; + filters?: 'app_users' | 'app_non_users' | Array<{ name: string, user_ids: string[] }>; + max_recipients?: number; + object_id?: string; + suggestions?: string[]; + title?: number; + to?: string | number; + } + + interface SendDialogParams extends DialogParams { + method: 'send'; + to?: string; + link: string; + } + + interface PayDialogParams extends DialogParams { + method: 'pay'; + action: 'purchaseitem'; + product: string; + quantity?: number; + quantity_min?: number; + quantity_max?: number; + request_id?: string; + test_currency?: string; + } + + interface LiveDialogParams extends DialogParams { + method: 'live_broadcast'; + display: 'popup' | 'iframe'; + phase: 'create' | 'publish'; + broadcast_data?: LiveDialogResponse; + } //////////////////////// // @@ -87,6 +174,33 @@ declare namespace facebook { expiresIn: number; signedRequest: string; userID: string; - } + }; + } + + interface ShareDialogResponse { + post_id?: string; + error_message?: string; + } + + interface GameRequestDialogResponse { + request: string; + to: string[]; + } + + interface PayDialogResponse { + payment_id: string; + amount: string; + currency: string; + quantity: string; + request_id: string; + status: string; + signed_request: string; + } + + interface LiveDialogResponse { + id: string; + stream_url: string; + secure_stream_url: string; + status: string; } }