|
import React from 'react' |
|
import {model, subscribe} from 'react-sharedb' |
|
|
|
model.set('_session.userId', model.id()) // Это приходит из сервака |
|
|
|
/* |
|
# Текущий юзер хранится в _session.userId |
|
users { |
|
firstName |
|
lastName |
|
} |
|
games { |
|
title |
|
} |
|
players { |
|
gameId, |
|
userId |
|
} |
|
*/ |
|
|
|
// доставем user |
|
@subscribe(() => ({ |
|
userId: '_session.userId', |
|
user: ['users', model.get('_session.userId')], |
|
users: ['users', {}] |
|
}), (props) => { |
|
let { user } = props.scope |
|
return { |
|
addresses: ['addresses', { userId: user.id }] |
|
} |
|
}) |
|
class App extends React.Component { |
|
constructor (...args) { |
|
super(...args) |
|
let { $scope, $user, $userId, $users } = this.props |
|
|
|
$users // то же самое что и $scope.at('users') -- то есть это массив, а не коллекция |
|
|
|
model.ref('_session.user', $user.path()) |
|
|
|
model.set('_session.userId', 'NewUserId') |
|
$scope.set('userId', 'NewUserId') |
|
$userId.set('NewUserId') |
|
|
|
$scope.start('fullName', $user.at('firstName'), $user.at('lastName'), this.getFullName) |
|
setInterval(this.doTask, 1000) |
|
} |
|
|
|
getFullName = (firstName, lastName) => { |
|
return firstName + ' ' + lastName |
|
} |
|
|
|
handleSomething = () => { |
|
} |
|
|
|
doTask = () => { |
|
let { $scope } = this.props |
|
let { scope } = this.props |
|
console.log(scope.myName) // 'Pavel' |
|
$scope.setEach({ |
|
myName: 'Artur', |
|
points: 2000 |
|
}) |
|
console.log(scope.myName) // 'Artur' |
|
} |
|
|
|
onInputChange = (e) => { |
|
let { $game } = this.props |
|
let value = e.target.value |
|
$game.set('title', value) |
|
} |
|
|
|
render () { |
|
let { scope } = this.props |
|
let { get } = this.props.$scope |
|
let { myName, user, userId, showFullName, game } = this.props.scope |
|
return ( |
|
<div> |
|
<div>{get(`game.users.${userId}.scores.points`) || 'Default'}</div> |
|
{ showFullName && <div>scope.fullName</div> } |
|
<input |
|
value={myName} |
|
onChange={this.onInputChange} |
|
/> |
|
<button onClick={this.handleSomething}>Handle something</button> |
|
<button onClick={this.doTask}>Do task</button> |
|
<PageGame |
|
user={user} |
|
/> |
|
</div> |
|
) |
|
} |
|
} |
|
|
|
// доставем user |
|
@subscribe(() => ({ |
|
userId: '_session.userId', |
|
user: '_session.user', |
|
game: ['games', 'myGameId'] |
|
})) |
|
class PageGame extends React.Component { |
|
constructor (...args) { |
|
super(...args) |
|
let { $user, $game } = this.props |
|
model.ref('_page.game', $game) |
|
$user.set('firstName', 'Tim') |
|
} |
|
} |
|
|
|
@subscribe(() => ({ |
|
game: '_page.game' |
|
})) |
|
class Player extends React.Component { |
|
|
|
} |
|
|
|
class Profile extends React.Component { |
|
|
|
} |