Skip to content

Commit 8dd1244

Browse files
committed
1 parent 74eb0ef commit 8dd1244

File tree

9 files changed

+49
-89
lines changed

9 files changed

+49
-89
lines changed

src/components/Firebase/firebase.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ class Firebase {
6969

7070
// default empty roles
7171
if (!dbUser.roles) {
72-
dbUser.roles = [];
72+
dbUser.roles = {};
7373
}
7474

7575
// merge auth and db user

src/components/Messages/MessageItem.js

Lines changed: 21 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ class MessageItem extends Component {
2828
};
2929

3030
render() {
31-
const { message, onRemoveMessage } = this.props;
31+
const { authUser, message, onRemoveMessage } = this.props;
3232
const { editMode, editText } = this.state;
3333

3434
return (
@@ -41,29 +41,31 @@ class MessageItem extends Component {
4141
/>
4242
) : (
4343
<span>
44-
<strong>
45-
{message.user.username || message.user.userId}
46-
</strong>{' '}
47-
{message.text} {message.editedAt && <span>(Edited)</span>}
44+
<strong>{message.userId}</strong> {message.text}
45+
{message.editedAt && <span>(Edited)</span>}
4846
</span>
4947
)}
5048

51-
{editMode ? (
49+
{authUser.uid === message.userId && (
5250
<span>
53-
<button onClick={this.onSaveEditText}>Save</button>
54-
<button onClick={this.onToggleEditMode}>Reset</button>
55-
</span>
56-
) : (
57-
<button onClick={this.onToggleEditMode}>Edit</button>
58-
)}
51+
{editMode ? (
52+
<span>
53+
<button onClick={this.onSaveEditText}>Save</button>
54+
<button onClick={this.onToggleEditMode}>Reset</button>
55+
</span>
56+
) : (
57+
<button onClick={this.onToggleEditMode}>Edit</button>
58+
)}
5959

60-
{!editMode && (
61-
<button
62-
type="button"
63-
onClick={() => onRemoveMessage(message.uid)}
64-
>
65-
Delete
66-
</button>
60+
{!editMode && (
61+
<button
62+
type="button"
63+
onClick={() => onRemoveMessage(message.uid)}
64+
>
65+
Delete
66+
</button>
67+
)}
68+
</span>
6769
)}
6870
</li>
6971
);

src/components/Messages/MessageList.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,15 @@ import React from 'react';
33
import MessageItem from './MessageItem';
44

55
const MessageList = ({
6+
authUser,
67
messages,
78
onEditMessage,
89
onRemoveMessage,
910
}) => (
1011
<ul>
1112
{messages.map(message => (
1213
<MessageItem
14+
authUser={authUser}
1315
key={message.uid}
1416
message={message}
1517
onEditMessage={onEditMessage}

src/components/Messages/Messages.js

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -81,8 +81,10 @@ class Messages extends Component {
8181
};
8282

8383
onEditMessage = (message, text) => {
84+
const { uid, ...messageSnapshot } = message;
85+
8486
this.props.firebase.message(message.uid).set({
85-
...message,
87+
...messageSnapshot,
8688
text,
8789
editedAt: this.props.firebase.serverValue.TIMESTAMP,
8890
});
@@ -100,30 +102,24 @@ class Messages extends Component {
100102
};
101103

102104
render() {
103-
const { users } = this.props;
104105
const { text, messages, loading } = this.state;
105106

106107
return (
107108
<AuthUserContext.Consumer>
108109
{authUser => (
109110
<div>
110-
{!loading &&
111-
messages && (
112-
<button type="button" onClick={this.onNextPage}>
113-
More
114-
</button>
115-
)}
111+
{!loading && messages && (
112+
<button type="button" onClick={this.onNextPage}>
113+
More
114+
</button>
115+
)}
116116

117117
{loading && <div>Loading ...</div>}
118118

119119
{messages && (
120120
<MessageList
121-
messages={messages.map(message => ({
122-
...message,
123-
user: users
124-
? users[message.userId]
125-
: { userId: message.userId },
126-
}))}
121+
authUser={authUser}
122+
messages={messages}
127123
onEditMessage={this.onEditMessage}
128124
onRemoveMessage={this.onRemoveMessage}
129125
/>

src/components/Navigation/index.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ const NavigationAuth = ({ authUser }) => (
2929
<li>
3030
<Link to={ROUTES.ACCOUNT}>Account</Link>
3131
</li>
32-
{authUser.roles.includes(ROLES.ADMIN) && (
32+
{!!authUser.roles[ROLES.ADMIN] && (
3333
<li>
3434
<Link to={ROUTES.ADMIN}>Admin</Link>
3535
</li>

src/components/SignIn/index.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ class SignInGoogleBase extends Component {
9393
return this.props.firebase.user(socialAuthUser.user.uid).set({
9494
username: socialAuthUser.user.displayName,
9595
email: socialAuthUser.user.email,
96-
roles: [],
96+
roles: {},
9797
});
9898
})
9999
.then(() => {
@@ -139,7 +139,7 @@ class SignInFacebookBase extends Component {
139139
return this.props.firebase.user(socialAuthUser.user.uid).set({
140140
username: socialAuthUser.additionalUserInfo.profile.name,
141141
email: socialAuthUser.additionalUserInfo.profile.email,
142-
roles: [],
142+
roles: {},
143143
});
144144
})
145145
.then(() => {
@@ -185,7 +185,7 @@ class SignInTwitterBase extends Component {
185185
return this.props.firebase.user(socialAuthUser.user.uid).set({
186186
username: socialAuthUser.additionalUserInfo.profile.name,
187187
email: socialAuthUser.additionalUserInfo.profile.email,
188-
roles: [],
188+
roles: {},
189189
});
190190
})
191191
.then(() => {

src/components/SignUp/index.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,10 +33,10 @@ class SignUpFormBase extends Component {
3333

3434
onSubmit = event => {
3535
const { username, email, passwordOne, isAdmin } = this.state;
36-
const roles = [];
36+
const roles = {};
3737

3838
if (isAdmin) {
39-
roles.push(ROLES.ADMIN);
39+
roles[ROLES.ADMIN] = ROLES.ADMIN;
4040
}
4141

4242
this.props.firebase

src/pages/admin.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ const AdminPageBase = () => (
1919
);
2020

2121
const condition = authUser =>
22-
authUser && authUser.roles.includes(ROLES.ADMIN);
22+
authUser && !!authUser.roles[ROLES.ADMIN];
2323

2424
const AdminPage = compose(
2525
withEmailVerification,

src/pages/home.js

Lines changed: 8 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -1,65 +1,25 @@
1-
import React, { Component, Fragment } from 'react';
1+
import React from 'react';
22
import { compose } from 'recompose';
33

44
import Layout from '../components/layout';
55
import {
66
withAuthorization,
77
withEmailVerification,
88
} from '../components/Session';
9-
import { withFirebase } from '../components/Firebase';
109
import Messages from '../components/Messages';
1110

12-
class HomePageBase extends Component {
13-
_initFirebase = false;
11+
const HomePageBase = () => (
12+
<div>
13+
<h1>Home Page</h1>
14+
<p>The Home Page is accessible by every signed in user.</p>
1415

15-
constructor(props) {
16-
super(props);
17-
18-
this.state = {
19-
users: null,
20-
};
21-
}
22-
23-
firebaseInit = () => {
24-
if (this.props.firebase && !this._initFirebase) {
25-
this._initFirebase = true;
26-
27-
this.props.firebase.users().on('value', snapshot => {
28-
this.setState({
29-
users: snapshot.val(),
30-
});
31-
});
32-
}
33-
};
34-
35-
componentDidMount() {
36-
this.firebaseInit();
37-
}
38-
39-
componentDidUpdate() {
40-
this.firebaseInit();
41-
}
42-
43-
componentWillUnmount() {
44-
this.props.firebase.users().off();
45-
}
46-
47-
render() {
48-
return (
49-
<Fragment>
50-
<h1>Home Page</h1>
51-
<p>The Home Page is accessible by every signed in user.</p>
52-
53-
<Messages users={this.state.users} />
54-
</Fragment>
55-
);
56-
}
57-
}
16+
<Messages />
17+
</div>
18+
);
5819

5920
const condition = authUser => !!authUser;
6021

6122
const HomePage = compose(
62-
withFirebase,
6323
withEmailVerification,
6424
withAuthorization(condition),
6525
)(HomePageBase);

0 commit comments

Comments
 (0)