Skip to content

Commit 82ff2fb

Browse files
committed
1 parent 51bfa39 commit 82ff2fb

File tree

9 files changed

+49
-71
lines changed

9 files changed

+49
-71
lines changed

src/components/Admin/index.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ const AdminPage = () => (
2222
);
2323

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

2727
export default compose(
2828
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-34
Original file line numberDiff line numberDiff line change
@@ -1,47 +1,21 @@
1-
import React, { Component } from 'react';
1+
import React from 'react';
22
import { compose } from 'recompose';
33

44
import { withAuthorization, withEmailVerification } from '../Session';
5-
import { withFirebase } from '../Firebase';
65
import Messages from '../Messages';
76

8-
class HomePage extends Component {
9-
constructor(props) {
10-
super(props);
7+
const HomePage = () => (
8+
<div>
9+
<h1>Home Page</h1>
10+
<p>The Home Page is accessible by every signed in user.</p>
1111

12-
this.state = {
13-
users: null,
14-
};
15-
}
16-
17-
componentDidMount() {
18-
this.props.firebase.users().on('value', snapshot => {
19-
this.setState({
20-
users: snapshot.val(),
21-
});
22-
});
23-
}
24-
25-
componentWillUnmount() {
26-
this.props.firebase.users().off();
27-
}
28-
29-
render() {
30-
return (
31-
<div>
32-
<h1>Home Page</h1>
33-
<p>The Home Page is accessible by every signed in user.</p>
34-
35-
<Messages users={this.state.users} />
36-
</div>
37-
);
38-
}
39-
}
12+
<Messages />
13+
</div>
14+
);
4015

4116
const condition = authUser => !!authUser;
4217

4318
export default compose(
44-
withFirebase,
4519
withEmailVerification,
4620
withAuthorization(condition),
4721
)(HomePage);

src/components/Messages/MessageItem.js

+25-21
Original file line numberDiff line numberDiff line change
@@ -35,15 +35,15 @@ class MessageItem extends Component {
3535
};
3636

3737
render() {
38-
const { message, onRemoveMessage } = this.props;
38+
const { authUser, message, onRemoveMessage } = this.props;
3939
const { editMode, editText } = this.state;
4040

4141
return (
4242
<Feed.Event>
4343
<Feed.Content>
4444
<Feed.Summary>
4545
<Feed.User as={Link} to={`/`}>
46-
{message.user.username || message.user.userId}
46+
{message.userId}
4747
</Feed.User>
4848
<Feed.Date>
4949
<TimeAgo time={message.createdAt} />
@@ -68,26 +68,30 @@ class MessageItem extends Component {
6868
)}
6969
</Feed.Extra>
7070
<Feed.Meta>
71-
{editMode ? (
72-
<span>
73-
<Button icon onClick={this.onSaveEditText}>
74-
<Icon color="green" name="save outline" />
75-
</Button>
76-
<Button icon onClick={this.onToggleEditMode}>
77-
<Icon color="blue" name="undo alternate" />
78-
</Button>
79-
</span>
80-
) : (
71+
{authUser.uid === message.userId && (
8172
<span>
82-
<Button icon onClick={this.onToggleEditMode}>
83-
<Icon color="blue" name="edit outline" />
84-
</Button>
85-
<Button
86-
icon
87-
onClick={() => onRemoveMessage(message.uid)}
88-
>
89-
<Icon color="red" name="trash alternate" />
90-
</Button>
73+
{editMode ? (
74+
<span>
75+
<Button icon onClick={this.onSaveEditText}>
76+
<Icon color="green" name="save outline" />
77+
</Button>
78+
<Button icon onClick={this.onToggleEditMode}>
79+
<Icon color="blue" name="undo alternate" />
80+
</Button>
81+
</span>
82+
) : (
83+
<span>
84+
<Button icon onClick={this.onToggleEditMode}>
85+
<Icon color="blue" name="edit outline" />
86+
</Button>
87+
<Button
88+
icon
89+
onClick={() => onRemoveMessage(message.uid)}
90+
>
91+
<Icon color="red" name="trash alternate" />
92+
</Button>
93+
</span>
94+
)}
9195
</span>
9296
)}
9397
</Feed.Meta>

src/components/Messages/MessageList.js

+2
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,15 @@ import MessageItem from './MessageItem';
55
import { Feed } from 'semantic-ui-react';
66

77
const MessageList = ({
8+
authUser,
89
messages,
910
onEditMessage,
1011
onRemoveMessage,
1112
}) => (
1213
<Feed>
1314
{messages.map(message => (
1415
<MessageItem
16+
authUser={authUser}
1517
key={message.uid}
1618
message={message}
1719
onEditMessage={onEditMessage}

src/components/Messages/Messages.js

+6-8
Original file line numberDiff line numberDiff line change
@@ -76,8 +76,10 @@ class Messages extends Component {
7676
};
7777

7878
onEditMessage = (message, text) => {
79+
const { uid, ...messageSnapshot } = message;
80+
7981
this.props.firebase.message(message.uid).set({
80-
...message,
82+
...messageSnapshot,
8183
text,
8284
editedAt: this.props.firebase.serverValue.TIMESTAMP,
8385
});
@@ -95,8 +97,8 @@ class Messages extends Component {
9597
};
9698

9799
render() {
98-
const { users } = this.props;
99100
const { text, messages, loading } = this.state;
101+
100102
return (
101103
<AuthUserContext.Consumer>
102104
{authUser => (
@@ -118,12 +120,8 @@ class Messages extends Component {
118120

119121
{messages && (
120122
<MessageList
121-
messages={messages.map(message => ({
122-
...message,
123-
user: users
124-
? users[message.userId]
125-
: { userId: message.userId },
126-
}))}
123+
authUser={authUser}
124+
messages={messages}
127125
onEditMessage={this.onEditMessage}
128126
onRemoveMessage={this.onRemoveMessage}
129127
/>

src/components/Navigation/index.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ const NavigationAuth = ({ authUser }) => (
2626
<Menu.Item name="Landing" as={Link} to={ROUTES.LANDING} />
2727
<Menu.Item name="home" as={Link} to={ROUTES.HOME} />
2828
<Menu.Item name="Account" as={Link} to={ROUTES.ACCOUNT} />
29-
{authUser.roles.includes(ROLES.ADMIN) && (
29+
{!!authUser.roles[ROLES.ADMIN] && (
3030
<Menu.Item name="Admin" as={Link} to={ROUTES.ADMIN} />
3131
)}
3232
<SignOutButton />

src/components/SignIn/index.js

+3-3
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ class SignInGoogleBase extends Component {
134134
return this.props.firebase.user(socialAuthUser.user.uid).set({
135135
username: socialAuthUser.user.displayName,
136136
email: socialAuthUser.user.email,
137-
roles: [],
137+
roles: {},
138138
});
139139
})
140140
.then(() => {
@@ -186,7 +186,7 @@ class SignInFacebookBase extends Component {
186186
return this.props.firebase.user(socialAuthUser.user.uid).set({
187187
username: socialAuthUser.additionalUserInfo.profile.name,
188188
email: socialAuthUser.additionalUserInfo.profile.email,
189-
roles: [],
189+
roles: {},
190190
});
191191
})
192192
.then(() => {
@@ -238,7 +238,7 @@ class SignInTwitterBase extends Component {
238238
return this.props.firebase.user(socialAuthUser.user.uid).set({
239239
username: socialAuthUser.additionalUserInfo.profile.name,
240240
email: socialAuthUser.additionalUserInfo.profile.email,
241-
roles: [],
241+
roles: {},
242242
});
243243
})
244244
.then(() => {

src/components/SignUp/index.js

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

5353
onSubmit = event => {
5454
const { username, email, passwordOne, isAdmin } = this.state;
55-
const roles = [];
55+
const roles = {};
5656

5757
if (isAdmin) {
58-
roles.push(ROLES.ADMIN);
58+
roles[ROLES.ADMIN] = ROLES.ADMIN;
5959
}
6060

6161
this.props.firebase

0 commit comments

Comments
 (0)