Skip to content

Commit 1ffe8c0

Browse files
committed
new version
1 parent 765aa3c commit 1ffe8c0

23 files changed

+895
-585
lines changed

.travis.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
language: node_js
22
node_js:
3-
- "5"
43
- "6"
54
- "7"
65
- "8"
76
- "9"
7+
- "10"
88
script: npm test
99
notifications:
1010
email:

README.md

Lines changed: 66 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -29,13 +29,20 @@
2929

3030
Star this project on [GitHub][github-url].
3131

32+
# Initialisation
33+
34+
By default FacebookProvider is loading facebook script immediately with componentDidMount (you are able to use it with SSR).
35+
If you want to download facebook script only when facebook component is rendered you need to add parameter wait to FacebookProvider.
36+
Use only one instance of the FacebookProvider on your page.
37+
38+
3239
# Usage
3340

3441
## Like button
3542

3643
```js
3744
import React, { Component} from 'react';
38-
import FacebookProvider, { Like } from 'react-facebook';
45+
import { FacebookProvider, Like } from 'react-facebook';
3946

4047
export default class Example extends Component {
4148
render() {
@@ -52,14 +59,16 @@ export default class Example extends Component {
5259

5360
```js
5461
import React, { Component} from 'react';
55-
import FacebookProvider, { Share } from 'react-facebook';
62+
import { FacebookProvider, Share } from 'react-facebook';
5663

5764
export default class Example extends Component {
5865
render() {
5966
return (
6067
<FacebookProvider appId="123456789">
6168
<Share href="http://www.facebook.com">
62-
<button type="button">Share</button>
69+
{({ handleClick, loading }) => (
70+
<button type="button" disabled="loading" onClick={handleClick}>Share</button>
71+
)}
6372
</Share>
6473
</FacebookProvider>
6574
);
@@ -73,13 +82,15 @@ You can use predefined button with bootstrap and font awesome classNames
7382

7483
```js
7584
import React, { Component} from 'react';
76-
import FacebookProvider, { ShareButton } from 'react-facebook';
85+
import { FacebookProvider, ShareButton } from 'react-facebook';
7786

7887
export default class Example extends Component {
7988
render() {
8089
return (
8190
<FacebookProvider appId="123456789">
82-
<ShareButton href="http://www.facebook.com" />
91+
<ShareButton href="http://www.facebook.com">
92+
Share
93+
</ShareButton>
8394
</FacebookProvider>
8495
);
8596
}
@@ -90,7 +101,7 @@ export default class Example extends Component {
90101

91102
```js
92103
import React, { Component} from 'react';
93-
import FacebookProvider, { Comments } from 'react-facebook';
104+
import { FacebookProvider, Comments } from 'react-facebook';
94105

95106
export default class Example extends Component {
96107
render() {
@@ -107,7 +118,7 @@ export default class Example extends Component {
107118

108119
```js
109120
import React, { Component} from 'react';
110-
import FacebookProvider, { CommentsCount } from 'react-facebook';
121+
import { FacebookProvider, CommentsCount } from 'react-facebook';
111122

112123
export default class Example extends Component {
113124
render() {
@@ -120,11 +131,11 @@ export default class Example extends Component {
120131
}
121132
```
122133

123-
## Login
134+
## Login Button
124135

125136
```js
126137
import React, { Component} from 'react';
127-
import FacebookProvider, { Login } from 'react-facebook';
138+
import { FacebookProvider, LoginButton } from 'react-facebook';
128139

129140
export default class Example extends Component {
130141
handleResponse = (data) => {
@@ -138,13 +149,13 @@ export default class Example extends Component {
138149
render() {
139150
return (
140151
<FacebookProvider appId="123456789">
141-
<Login
152+
<LoginButton
142153
scope="email"
143-
onResponse={this.handleResponse}
154+
onCompleted={this.handleResponse}
144155
onError={this.handleError}
145156
>
146157
<span>Login via Facebook</span>
147-
</Login>
158+
</LoginButton>
148159
</FacebookProvider>
149160
);
150161
}
@@ -153,11 +164,11 @@ export default class Example extends Component {
153164

154165
### Custom login render
155166

156-
If you want to use custom component you can use render or component property.
167+
If you want to use custom component you can use children as function.
157168

158169
```js
159170
import React, { Component} from 'react';
160-
import FacebookProvider, { Login } from 'react-facebook';
171+
import { FacebookProvider, Login } from 'react-facebook';
161172

162173
export default class Example extends Component {
163174
handleResponse = (data) => {
@@ -173,17 +184,18 @@ export default class Example extends Component {
173184
<FacebookProvider appId="123456789">
174185
<Login
175186
scope="email"
176-
onResponse={this.handleResponse}
187+
onCompleted={this.handleResponse}
177188
onError={this.handleError}
178-
render={({ isLoading, isWorking, onClick }) => (
179-
<span onClick={onClick}>
189+
>
190+
{({ loading, handleClick, error, data }) => (
191+
<span onClick={handleClick}>
180192
Login via Facebook
181-
{(isLoading || isWorking) && (
193+
{loading && (
182194
<span>Loading...</span>
183195
)}
184196
</span>
185197
)}
186-
/>
198+
</Login>
187199
</FacebookProvider>
188200
);
189201
}
@@ -194,7 +206,7 @@ export default class Example extends Component {
194206

195207
```js
196208
import React, { Component} from 'react';
197-
import FacebookProvider, { EmbeddedPost } from 'react-facebook';
209+
import { FacebookProvider, EmbeddedPost } from 'react-facebook';
198210

199211
export default class Example extends Component {
200212
render() {
@@ -212,7 +224,7 @@ export default class Example extends Component {
212224

213225
```js
214226
import React, { Component} from 'react';
215-
import FacebookProvider, { Page } from 'react-facebook';
227+
import { FacebookProvider, Page } from 'react-facebook';
216228

217229
export default class Example extends Component {
218230
render() {
@@ -229,13 +241,17 @@ export default class Example extends Component {
229241

230242
```js
231243
import React, { Component} from 'react';
232-
import FacebookProvider, { Feed } from 'react-facebook';
244+
import { FacebookProvider, Feed } from 'react-facebook';
233245

234246
export default class Example extends Component {
235247
render() {
236248
return (
237249
<FacebookProvider appId="123456789">
238-
<Feed link="https://www.facebook.com" />
250+
<Feed link="https://www.facebook.com">
251+
{({ handleClick }) => (
252+
<button type="button" onClick={handleClick}>Share on Feed</button>
253+
)}
254+
</Feed>
239255
</FacebookProvider>
240256
);
241257
}
@@ -246,7 +262,7 @@ export default class Example extends Component {
246262

247263
```js
248264
import React, { Component} from 'react';
249-
import FacebookProvider, { MessageUs } from 'react-facebook';
265+
import { FacebookProvider, MessageUs } from 'react-facebook';
250266

251267
export default class Example extends Component {
252268
render() {
@@ -263,7 +279,7 @@ export default class Example extends Component {
263279

264280
```js
265281
import React, { Component} from 'react';
266-
import FacebookProvider, { SendToMessenger } from 'react-facebook';
282+
import { FacebookProvider, SendToMessenger } from 'react-facebook';
267283

268284
export default class Example extends Component {
269285
render() {
@@ -281,7 +297,7 @@ export default class Example extends Component {
281297

282298
```js
283299
import React, { Component} from 'react';
284-
import FacebookProvider, { MessengerCheckbox } from 'react-facebook';
300+
import { FacebookProvider, MessengerCheckbox } from 'react-facebook';
285301

286302
export default class Example extends Component {
287303
render() {
@@ -299,13 +315,35 @@ export default class Example extends Component {
299315

300316
```js
301317
import React, { Component} from 'react';
302-
import FacebookProvider, { CustomChat } from 'react-facebook';
318+
import { FacebookProvider, CustomChat } from 'react-facebook';
319+
320+
export default class Example extends Component {
321+
render() {
322+
return (
323+
<FacebookProvider appId="123456789">
324+
<CustomChat pageId="123456789" minimized={false}/>
325+
</FacebookProvider>
326+
);
327+
}
328+
}
329+
```
330+
331+
## API Access
332+
333+
```js
334+
import React, { Component} from 'react';
335+
import { FacebookProvider, Initialize } from 'react-facebook';
303336

304337
export default class Example extends Component {
305338
render() {
306339
return (
307340
<FacebookProvider appId="123456789">
308-
<CustomChat pageId="123456789" minimized={false}/>
341+
<Initialize>
342+
{({ isReady, api }) => {
343+
api.ui(...) // our custom async/await api
344+
// original FB api is available via window.FB
345+
}}
346+
<Initialize>
309347
</FacebookProvider>
310348
);
311349
}

src/Comments.jsx

Lines changed: 44 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,47 @@
11
// @flow
2-
import React, { type Node } from 'react';
3-
import Parser, { type ParserProps } from './Parser';
2+
import React, { forwardRef, PureComponent, type Node } from 'react';
3+
import Parser from './Parser';
44
import getCurrentHref from './utils/getCurrentHref';
55

6-
type Props = ParserProps & {
6+
type Props = {
77
href?: string,
88
numPosts?: number,
99
orderBy?: string,
1010
width?: number | string,
1111
colorScheme?: string,
1212
children?: Node,
1313
mobile?: boolean,
14+
handleParse: Function,
1415
};
1516

16-
export default function Comments(props: Props) {
17-
const {
18-
colorScheme,
19-
href = getCurrentHref(),
20-
numPosts,
21-
orderBy,
22-
width,
23-
children,
24-
mobile,
25-
...rest
26-
} = props;
17+
class Comments extends PureComponent<Props> {
18+
static defaultProps = {
19+
href: undefined,
20+
numPosts: undefined,
21+
orderBy: undefined,
22+
width: undefined,
23+
colorScheme: undefined,
24+
children: undefined,
25+
mobile: undefined,
26+
};
2727

28-
return (
29-
<Parser {...rest}>
28+
componentDidUpdate() {
29+
const { handleParse } = this.props;
30+
handleParse();
31+
}
32+
33+
render() {
34+
const {
35+
colorScheme,
36+
href = getCurrentHref(),
37+
numPosts,
38+
orderBy,
39+
width,
40+
children,
41+
mobile,
42+
} = this.props;
43+
44+
return (
3045
<div
3146
className="fb-comments"
3247
data-colorscheme={colorScheme}
@@ -39,17 +54,18 @@ export default function Comments(props: Props) {
3954
>
4055
{children}
4156
</div>
42-
</Parser>
43-
);
57+
);
58+
}
4459
}
4560

46-
Comments.defaultProps = {
47-
...Parser.defaultProps,
48-
href: undefined,
49-
numPosts: undefined,
50-
orderBy: undefined,
51-
width: undefined,
52-
colorScheme: undefined,
53-
children: undefined,
54-
mobile: undefined,
55-
};
61+
export default forwardRef((props, ref) => (
62+
<Parser>
63+
{({ handleParse }) => (
64+
<Comments
65+
{...props}
66+
handleParse={handleParse}
67+
ref={ref}
68+
/>
69+
)}
70+
</Parser>
71+
));

0 commit comments

Comments
 (0)