improved Messages UI

optimize-reads
Simon Huang 5 years ago
parent 4b830b9960
commit 82d8c4cf3e

@ -16,7 +16,7 @@
.my-msg { .my-msg {
padding: 6px; padding: 6px;
border-radius: 5px; border-radius: 5px;
margin-bottom: 4px; margin: 2px 0 2px 0;
max-width: 70%; max-width: 70%;
background: var(--ion-color-secondary-shade); background: var(--ion-color-secondary-shade);
color: #fff; color: #fff;
@ -25,12 +25,19 @@
.other-msg { .other-msg {
padding: 6px; padding: 6px;
border-radius: 5px; border-radius: 5px;
margin-bottom: 4px; margin: 2px 0 2px 0;
max-width: 70%; max-width: 70%;
background: var(--ion-color-primary-shade); background: var(--ion-color-primary-shade);
color: #fff; color: #fff;
} }
.system-msg {
margin: auto;
color: #999;
font-size: 13px;
padding: 4px;
}
.message-toolbar { .message-toolbar {
padding-left: 5px; padding-left: 5px;
--background: var(--ion-color-light); --background: var(--ion-color-light);

@ -29,6 +29,7 @@ type Message = {
createdAt: number; createdAt: number;
id: string; id: string;
senderId: string; senderId: string;
type: string;
}; };
const Messages: React.FC<MessagesProps> = ({ pane, ownerId, roomId, userId, userList, joinTime }) => { const Messages: React.FC<MessagesProps> = ({ pane, ownerId, roomId, userId, userList, joinTime }) => {
@ -51,6 +52,7 @@ const Messages: React.FC<MessagesProps> = ({ pane, ownerId, roomId, userId, user
createdAt: msg.createdAt, createdAt: msg.createdAt,
id: msg.senderId + msg.createdAt, id: msg.senderId + msg.createdAt,
senderId: msg.senderId, senderId: msg.senderId,
type: 'chat',
}); });
} }
}); });
@ -80,6 +82,7 @@ const Messages: React.FC<MessagesProps> = ({ pane, ownerId, roomId, userId, user
createdAt: req.createdAt, createdAt: req.createdAt,
id: req.senderId + req.createdAt, id: req.senderId + req.createdAt,
senderId: req.senderId, senderId: req.senderId,
type: 'system',
}); });
} }
} }
@ -164,14 +167,24 @@ const Messages: React.FC<MessagesProps> = ({ pane, ownerId, roomId, userId, user
.sort((msg1, msg2) => msg1.createdAt - msg2.createdAt) .sort((msg1, msg2) => msg1.createdAt - msg2.createdAt)
.map((msg) => { .map((msg) => {
if (getName(msg.senderId) !== undefined) { if (getName(msg.senderId) !== undefined) {
return ( if (msg.type === 'chat') {
<IonRow key={msg.id} class={msg.senderId === userId ? 'right-align' : ''}> return (
<IonCol size="auto" class={msg.senderId === userId ? 'my-msg' : 'other-msg'}> <IonRow key={msg.id} class={msg.senderId === userId ? 'right-align' : ''}>
{getName(msg.senderId) !== '' ? <b>{getName(msg.senderId)}: </b> : <></>} <IonCol size="auto" class={msg.senderId === userId ? 'my-msg' : 'other-msg'}>
<span>{msg.content}</span> {getName(msg.senderId) !== '' ? <b>{getName(msg.senderId)}: </b> : <></>}
</IonCol> <span>{msg.content}</span>
</IonRow> </IonCol>
); </IonRow>
);
} else {
return (
<IonRow key={msg.id}>
<IonCol size="auto" class="system-msg">
<span>{getName(msg.senderId) + ' ' + msg.content}</span>
</IonCol>
</IonRow>
);
}
} else { } else {
return <></>; return <></>;
} }
@ -181,7 +194,31 @@ const Messages: React.FC<MessagesProps> = ({ pane, ownerId, roomId, userId, user
return ( return (
<> <>
<IonContent style={{ display: pane === 'chat' ? null : 'none' }} class="message-content" ref={contentRef}> <IonContent style={{ display: pane === 'chat' ? null : 'none' }} class="message-content" ref={contentRef}>
<IonGrid class="message-grid">{userList.size === 0 ? <span>Loading...</span> : renderMessages()}</IonGrid> <IonGrid class="message-grid">
{userList.size === 0 ? (
<span>Loading...</span>
) : (
<>
<IonRow>
<IonCol size="auto" class="system-msg">
{ownerId === userId ? (
<span>
Welcome to TurtleTV! You joined the room as the owner, so everyone else in the room will sync up
with your plays/pauses.
</span>
) : (
<span>
Welcome to TurtleTV! You joined the room as a member, so your plays/pauses will not affect anyone
else in the room.
</span>
)}
</IonCol>
</IonRow>
{renderMessages()}
</>
)}
</IonGrid>
</IonContent> </IonContent>
<IonFooter style={{ display: pane === 'chat' ? null : 'none' }}> <IonFooter style={{ display: pane === 'chat' ? null : 'none' }}>
<IonToolbar class="message-toolbar"> <IonToolbar class="message-toolbar">
@ -191,6 +228,7 @@ const Messages: React.FC<MessagesProps> = ({ pane, ownerId, roomId, userId, user
value={message} value={message}
placeholder="Send message" placeholder="Send message"
enterkeyhint="send" enterkeyhint="send"
autocorrect="on"
class="message-input" class="message-input"
></IonInput> ></IonInput>
<IonFabButton slot="end" size="small" onClick={sendMessage} class="send-button"> <IonFabButton slot="end" size="small" onClick={sendMessage} class="send-button">

@ -57,7 +57,7 @@ const Home: React.FC = () => {
}); });
await db.collection('playlists').doc(roomId.id).set({ await db.collection('playlists').doc(roomId.id).set({
createdAt: timestamp, createdAt: timestamp,
url: 'https://www.youtube.com/watch?v=DGQwd1_dpuc', url: 'https://www.youtube.com/watch?v=SMKPKGW083c',
}); });
await db.collection('states').doc(roomId.id).set({ await db.collection('states').doc(roomId.id).set({
isPlaying: false, isPlaying: false,

Loading…
Cancel
Save