Skip to content

Commit 4b81c60

Browse files
committed
1 parent a0a3cc0 commit 4b81c60

File tree

9 files changed

+45
-72
lines changed

9 files changed

+45
-72
lines changed

src/components/Admin/index.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ const AdminPage = () => (
2020
);
2121

2222
const condition = authUser =>
23-
authUser && authUser.roles.includes(ROLES.ADMIN);
23+
authUser && !!authUser.roles[ROLES.ADMIN];
2424

2525
export default compose(
2626
withEmailVerification,

src/components/Firebase/firebase.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ class Firebase {
7373

7474
// default empty roles
7575
if (!dbUser.roles) {
76-
dbUser.roles = [];
76+
dbUser.roles = {};
7777
}
7878

7979
// merge auth and db user

src/components/Home/index.js

+8-37
Original file line numberDiff line numberDiff line change
@@ -1,50 +1,21 @@
1-
import React, { Component } from 'react';
2-
import { connect } from 'react-redux';
1+
import React from 'react';
32
import { compose } from 'recompose';
43

54
import { withAuthorization, withEmailVerification } from '../Session';
6-
import { withFirebase } from '../Firebase';
75
import Messages from '../Messages';
86

9-
class HomePage extends Component {
10-
componentDidMount() {
11-
this.props.firebase.users().on('value', snapshot => {
12-
this.props.onSetUsers(snapshot.val());
13-
});
14-
}
7+
const HomePage = () => (
8+
<div>
9+
<h1>Home Page</h1>
10+
<p>The Home Page is accessible by every signed in user.</p>
1511

16-
componentWillUnmount() {
17-
this.props.firebase.users().off();
18-
}
19-
20-
render() {
21-
return (
22-
<div>
23-
<h1>Home Page</h1>
24-
<p>The Home Page is accessible by every signed in user.</p>
25-
26-
<Messages users={this.props.users} />
27-
</div>
28-
);
29-
}
30-
}
31-
32-
const mapStateToProps = state => ({
33-
users: state.userState.users,
34-
});
35-
36-
const mapDispatchToProps = dispatch => ({
37-
onSetUsers: users => dispatch({ type: 'USERS_SET', users }),
38-
});
12+
<Messages />
13+
</div>
14+
);
3915

4016
const condition = authUser => !!authUser;
4117

4218
export default compose(
43-
withFirebase,
44-
connect(
45-
mapStateToProps,
46-
mapDispatchToProps,
47-
),
4819
withEmailVerification,
4920
withAuthorization(condition),
5021
)(HomePage);

src/components/Messages/MessageItem.js

+21-19
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

+2
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

+6-8
Original file line numberDiff line numberDiff line change
@@ -62,8 +62,10 @@ class Messages extends Component {
6262
};
6363

6464
onEditMessage = (message, text) => {
65+
const { uid, ...messageSnapshot } = message;
66+
6567
this.props.firebase.message(message.uid).set({
66-
...message,
68+
...messageSnapshot,
6769
text,
6870
editedAt: this.props.firebase.serverValue.TIMESTAMP,
6971
});
@@ -78,7 +80,7 @@ class Messages extends Component {
7880
};
7981

8082
render() {
81-
const { users, messages } = this.props;
83+
const { messages } = this.props;
8284
const { text, loading } = this.state;
8385

8486
return (
@@ -93,12 +95,8 @@ class Messages extends Component {
9395

9496
{messages && (
9597
<MessageList
96-
messages={messages.map(message => ({
97-
...message,
98-
user: users
99-
? users[message.userId]
100-
: { userId: message.userId },
101-
}))}
98+
authUser={this.props.authUser}
99+
messages={messages}
102100
onEditMessage={this.onEditMessage}
103101
onRemoveMessage={this.onRemoveMessage}
104102
/>

src/components/Navigation/index.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ const NavigationAuth = ({ authUser }) => (
2424
<li>
2525
<Link to={ROUTES.ACCOUNT}>Account</Link>
2626
</li>
27-
{authUser.roles.includes(ROLES.ADMIN) && (
27+
{!!authUser.roles[ROLES.ADMIN] && (
2828
<li>
2929
<Link to={ROUTES.ADMIN}>Admin</Link>
3030
</li>

src/components/SignIn/index.js

+3-3
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ class SignInGoogleBase extends Component {
108108
return this.props.firebase.user(socialAuthUser.user.uid).set({
109109
username: socialAuthUser.user.displayName,
110110
email: socialAuthUser.user.email,
111-
roles: [],
111+
roles: {},
112112
});
113113
})
114114
.then(() => {
@@ -154,7 +154,7 @@ class SignInFacebookBase extends Component {
154154
return this.props.firebase.user(socialAuthUser.user.uid).set({
155155
username: socialAuthUser.additionalUserInfo.profile.name,
156156
email: socialAuthUser.additionalUserInfo.profile.email,
157-
roles: [],
157+
roles: {},
158158
});
159159
})
160160
.then(() => {
@@ -200,7 +200,7 @@ class SignInTwitterBase extends Component {
200200
return this.props.firebase.user(socialAuthUser.user.uid).set({
201201
username: socialAuthUser.additionalUserInfo.profile.name,
202202
email: socialAuthUser.additionalUserInfo.profile.email,
203-
roles: [],
203+
roles: {},
204204
});
205205
})
206206
.then(() => {

src/components/SignUp/index.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -40,10 +40,10 @@ class SignUpFormBase extends Component {
4040

4141
onSubmit = event => {
4242
const { username, email, passwordOne, isAdmin } = this.state;
43-
const roles = [];
43+
const roles = {};
4444

4545
if (isAdmin) {
46-
roles.push(ROLES.ADMIN);
46+
roles[ROLES.ADMIN] = ROLES.ADMIN;
4747
}
4848

4949
this.props.firebase

0 commit comments

Comments
 (0)