Skip to content

Commit c246de5

Browse files
authored
Merge pull request #320 from share/update-examples
Update dependencies in examples and bring them up to date
2 parents a548a2e + 6142102 commit c246de5

17 files changed

+131
-130
lines changed

examples/counter/client.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
1+
var ReconnectingWebSocket = require('reconnecting-websocket');
12
var sharedb = require('sharedb/lib/client');
23

34
// Open WebSocket connection to ShareDB server
4-
var socket = new WebSocket('ws://' + window.location.host);
5+
var socket = new ReconnectingWebSocket('ws://' + window.location.host);
56
var connection = new sharedb.Connection(socket);
67

78
// Create local Doc instance mapped to 'examples' collection document with id 'counter'

examples/counter/package.json

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "sharedb-example-counter",
3-
"version": "0.0.1",
3+
"version": "1.0.0",
44
"description": "A simple client/server app using ShareDB and WebSockets",
55
"main": "server.js",
66
"scripts": {
@@ -15,12 +15,13 @@
1515
],
1616
"license": "MIT",
1717
"dependencies": {
18+
"@teamwork/websocket-json-stream": "^2.0.0",
1819
"express": "^4.14.0",
20+
"reconnecting-websocket": "^4.2.0",
1921
"sharedb": "^1.0.0-beta",
20-
"@teamwork/websocket-json-stream": "^2.0.0",
21-
"ws": "^1.1.0"
22+
"ws": "^7.2.0"
2223
},
2324
"devDependencies": {
24-
"browserify": "^13.0.1"
25+
"browserify": "^16.5.0"
2526
}
2627
}

examples/leaderboard/README.md

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -9,24 +9,16 @@ In this demo, data is not persisted. To persist data, run a Mongo
99
server and initialize ShareDB with the
1010
[ShareDBMongo](https://github.com/share/sharedb-mongo) database adapter.
1111

12-
## Run this example
13-
14-
First, install dependencies.
15-
16-
Note: Make sure you're in the `examples/leaderboard` folder so that it uses the `package.json` located here).
12+
## Install dependencies
1713

14+
Make sure you're in the `examples/leaderboard` folder so that it uses the `package.json` located here).
1815
```
1916
npm install
2017
```
2118

22-
Then build the client JavaScript file.
23-
```
24-
npm run build
25-
```
26-
27-
Get the server running.
19+
## Build JavaScript bundle and run server
2820
```
29-
npm start
21+
npm run build && npm start
3022
```
3123

3224
Finally, open the example app in the browser. It runs on port 8080 by default:

examples/leaderboard/client/Body.jsx

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,17 @@
11
var React = require('react');
22
var Leaderboard = require('./Leaderboard.jsx');
33

4-
var Body = React.createClass({
5-
render: function() {
6-
return (
7-
<div className="app">
8-
<div className="outer">
9-
<div className="logo"></div>
10-
<h1 className="title">Leaderboard</h1>
11-
<div className="subtitle">Select a scientist to give them points</div>
12-
<Leaderboard />
13-
</div>
4+
function Body() {
5+
return (
6+
<div className="app">
7+
<div className="outer">
8+
<div className="logo"></div>
9+
<h1 className="title">Leaderboard</h1>
10+
<div className="subtitle">Select a scientist to give them points</div>
11+
<Leaderboard />
1412
</div>
15-
);
16-
}
17-
});
13+
</div>
14+
);
15+
}
1816

1917
module.exports = Body;

examples/leaderboard/client/Leaderboard.jsx

Lines changed: 19 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,18 @@ var React = require('react');
44
var _ = require('underscore');
55
var connection = require('./connection');
66

7-
var Leaderboard = React.createClass({
8-
getInitialState: function() {
9-
return {
7+
class Leaderboard extends React.Component {
8+
constructor(props) {
9+
super(props);
10+
this.state = {
1011
selectedPlayerId: null,
1112
players: []
1213
};
13-
},
14+
this.handlePlayerSelected = this.handlePlayerSelected.bind(this);
15+
this.handleAddPoints = this.handleAddPoints.bind(this);
16+
}
1417

15-
componentDidMount: function() {
18+
componentDidMount() {
1619
var comp = this;
1720
var query = connection.createSubscribeQuery('players', {$sort: {score: -1}});
1821
query.on('ready', update);
@@ -21,30 +24,30 @@ var Leaderboard = React.createClass({
2124
function update() {
2225
comp.setState({players: query.results});
2326
}
24-
},
27+
}
2528

26-
componentWillUnmount: function() {
29+
componentWillUnmount() {
2730
query.destroy();
28-
},
31+
}
2932

30-
selectedPlayer: function() {
33+
selectedPlayer() {
3134
return _.find(this.state.players, function(x) {
3235
return x.id === this.state.selectedPlayerId;
3336
}.bind(this));
34-
},
37+
}
3538

36-
handlePlayerSelected: function(id) {
39+
handlePlayerSelected(id) {
3740
this.setState({selectedPlayerId: id});
38-
},
41+
}
3942

40-
handleAddPoints: function() {
43+
handleAddPoints() {
4144
var op = [{p: ['score'], na: 5}];
4245
connection.get('players', this.state.selectedPlayerId).submitOp(op, function(err) {
4346
if (err) { console.error(err); return; }
4447
});
45-
},
48+
}
4649

47-
render: function() {
50+
render() {
4851
return (
4952
<div>
5053
<div className="leaderboard">
@@ -54,7 +57,7 @@ var Leaderboard = React.createClass({
5457
</div>
5558
);
5659
}
57-
});
60+
}
5861

5962
module.exports = Leaderboard;
6063

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
1+
var PropTypes = require('prop-types');
12
var React = require('react');
23
var classNames = require('classnames');
34

4-
var Player = React.createClass({
5-
propTypes: {
6-
doc: React.PropTypes.object.isRequired,
7-
onPlayerSelected: React.PropTypes.func.isRequired,
8-
selected: React.PropTypes.bool.isRequired
9-
},
5+
class Player extends React.Component {
6+
constructor(props) {
7+
super(props);
8+
this.handleClick = this.handleClick.bind(this);
9+
}
1010

11-
handleClick: function(event) {
11+
handleClick(event) {
1212
this.props.onPlayerSelected(this.props.doc.id);
13-
},
13+
}
1414

15-
componentDidMount: function() {
15+
componentDidMount() {
1616
var comp = this;
1717
var doc = comp.props.doc;
1818
doc.subscribe();
@@ -22,13 +22,13 @@ var Player = React.createClass({
2222
// `comp.props.doc.data` is now updated. re-render component.
2323
comp.forceUpdate();
2424
}
25-
},
25+
}
2626

27-
componentWillUnmount: function() {
27+
componentWillUnmount() {
2828
this.doc.unsubscribe();
29-
},
29+
}
3030

31-
render: function() {
31+
render() {
3232
var classes = {
3333
'player': true,
3434
'selected': this.props.selected
@@ -41,6 +41,12 @@ var Player = React.createClass({
4141
</li>
4242
);
4343
}
44-
});
44+
}
45+
46+
Player.propTypes = {
47+
doc: PropTypes.object.isRequired,
48+
onPlayerSelected: PropTypes.func.isRequired,
49+
selected: PropTypes.bool.isRequired
50+
};
4551

4652
module.exports = Player;
Lines changed: 20 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,29 @@
1+
var PropTypes = require('prop-types');
12
var React = require('react');
23
var Player = require('./Player.jsx');
34
var _ = require('underscore');
45

5-
var PlayerList = React.createClass({
6-
propTypes: {
7-
players: React.PropTypes.array.isRequired,
8-
selectedPlayerId: React.PropTypes.string
9-
},
6+
function PlayerList(props) {
7+
var { players, selectedPlayerId } = props;
8+
var other = _.omit(props, 'players', 'selectedPlayerId');
109

11-
render: function() {
12-
var { players, selectedPlayerId } = this.props;
13-
var other = _.omit(this.props, 'players', 'selectedPlayerId');
10+
var playerNodes = players.map(function(player, index) {
11+
var selected = selectedPlayerId === player.id;
1412

15-
var playerNodes = players.map(function(player, index) {
16-
var selected = selectedPlayerId === player.id;
17-
18-
return (
19-
<Player {...other} doc={player} key={player.id} selected={selected} />
20-
);
21-
});
2213
return (
23-
<div className="playerList">
24-
{playerNodes}
25-
</div>
14+
<Player {...other} doc={player} key={player.id} selected={selected} />
2615
);
27-
}
28-
});
16+
});
17+
return (
18+
<div className="playerList">
19+
{playerNodes}
20+
</div>
21+
);
22+
}
23+
24+
PlayerList.propTypes = {
25+
players: PropTypes.array.isRequired,
26+
selectedPlayerId: PropTypes.string
27+
};
2928

30-
module.exports = PlayerList;
29+
module.exports = PlayerList;
Lines changed: 16 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,23 @@
1+
var PropTypes = require('prop-types');
12
var React = require('react');
23

3-
var PlayerSelector = React.createClass({
4-
propTypes: {
5-
selectedPlayer: React.PropTypes.object
6-
},
4+
function PlayerSelector({ selectedPlayer, onAddPoints }) {
5+
var node;
76

8-
render: function() {
9-
var node;
7+
if (selectedPlayer) {
8+
node = <div className="details">
9+
<div className="name">{selectedPlayer.data.name}</div>
10+
<button className="inc" onClick={onAddPoints}>Add 5 points</button>
11+
</div>;
12+
} else {
13+
node = <div className="message">Click a player to select</div>;
14+
}
1015

11-
if (this.props.selectedPlayer) {
12-
node = <div className="details">
13-
<div className="name">{this.props.selectedPlayer.data.name}</div>
14-
<button className="inc" onClick={this.props.onAddPoints}>Add 5 points</button>
15-
</div>;
16-
} else {
17-
node = <div className="message">Click a player to select</div>;
18-
}
16+
return node;
17+
}
1918

20-
return node;
21-
}
22-
});
19+
PlayerSelector.propTypes = {
20+
selectedPlayer: PropTypes.object
21+
};
2322

2423
module.exports = PlayerSelector;
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1+
var ReconnectingWebSocket = require('reconnecting-websocket');
12
var sharedb = require('sharedb/lib/client');
23

34
// Expose a singleton WebSocket connection to ShareDB server
4-
var socket = new WebSocket('ws://' + window.location.host);
5+
var socket = new ReconnectingWebSocket('ws://' + window.location.host);
56
var connection = new sharedb.Connection(socket);
67
module.exports = connection;

examples/leaderboard/package.json

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
{
22
"name": "sharedb-example-leaderboard",
3-
"version": "0.0.1",
3+
"version": "1.0.0",
44
"description": "React Leaderboard backed by ShareDB",
55
"main": "server.js",
66
"scripts": {
7-
"build": "mkdir -p dist/ && ./node_modules/.bin/browserify -t [ babelify --presets [ react ] ] client/index.jsx -o dist/bundle.js",
7+
"build": "mkdir -p static/dist/ && ./node_modules/.bin/browserify -t [ babelify --presets [ react ] ] client/index.jsx -o static/dist/bundle.js",
88
"test": "echo \"Error: no test specified\" && exit 1",
99
"start": "node server/index.js"
1010
},
@@ -15,21 +15,21 @@
1515
],
1616
"license": "MIT",
1717
"dependencies": {
18+
"@teamwork/websocket-json-stream": "^2.0.0",
1819
"classnames": "^2.2.5",
19-
"connect": "^3.4.1",
20-
"react": "^15.1.0",
21-
"react-dom": "^15.1.0",
22-
"serve-static": "^1.11.1",
20+
"express": "^4.17.1",
21+
"prop-types": "^15.7.2",
22+
"react": "^16.11.0",
23+
"react-dom": "^16.11.0",
24+
"reconnecting-websocket": "^4.2.0",
2325
"sharedb": "^1.0.0-beta",
2426
"sharedb-mingo-memory": "^1.0.0-beta",
25-
"through2": "^2.0.1",
2627
"underscore": "^1.8.3",
27-
"@teamwork/websocket-json-stream": "^2.0.0",
28-
"ws": "^1.1.0"
28+
"ws": "^7.2.0"
2929
},
3030
"devDependencies": {
3131
"babel-preset-react": "^6.5.0",
3232
"babelify": "^7.3.0",
33-
"browserify": "^13.0.1"
33+
"browserify": "^16.5.0"
3434
}
3535
}

examples/leaderboard/server/index.js

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
var http = require('http');
22
var ShareDB = require('sharedb');
3-
var connect = require('connect');
4-
var serveStatic = require('serve-static');
3+
var express = require('express');
54
var ShareDBMingoMemory = require('sharedb-mingo-memory');
65
var WebSocketJSONStream = require('@teamwork/websocket-json-stream');
76
var WebSocket = require('ws');
@@ -10,8 +9,8 @@ var WebSocket = require('ws');
109
var share = new ShareDB({db: new ShareDBMingoMemory()});
1110

1211
// Create a WebSocket server
13-
var app = connect();
14-
app.use(serveStatic('.'));
12+
var app = express();
13+
app.use(express.static('static'));
1514
var server = http.createServer(app);
1615
var wss = new WebSocket.Server({server: server});
1716
server.listen(8080);

0 commit comments

Comments
 (0)