Spaces:
Sleeping
Sleeping
copilot-swe-agent[bot]
ArnavSingh76533
commited on
Commit
·
cd35cdb
1
Parent(s):
3c9a7c2
Fix code review issues: improve null checking and rendering efficiency
Browse filesCo-authored-by: ArnavSingh76533 <160649079+ArnavSingh76533@users.noreply.github.com>
- components/chat/ChatPanel.tsx +14 -9
- pages/api/socketio.ts +6 -2
components/chat/ChatPanel.tsx
CHANGED
|
@@ -92,16 +92,21 @@ const ChatPanel: FC<Props> = ({ socket, className }) => {
|
|
| 92 |
No messages yet. Be the first to say hello! 👋
|
| 93 |
</div>
|
| 94 |
) : (
|
| 95 |
-
|
| 96 |
-
|
| 97 |
-
|
| 98 |
-
|
| 99 |
-
|
| 100 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 101 |
</div>
|
| 102 |
-
|
| 103 |
-
|
| 104 |
-
))
|
| 105 |
)}
|
| 106 |
</div>
|
| 107 |
<div className="p-3 flex gap-2 bg-dark-800/50 border-t border-dark-700/50">
|
|
|
|
| 92 |
No messages yet. Be the first to say hello! 👋
|
| 93 |
</div>
|
| 94 |
) : (
|
| 95 |
+
// Render messages in reverse order without creating a new array
|
| 96 |
+
messages.map((_, idx) => {
|
| 97 |
+
const reverseIdx = messages.length - 1 - idx
|
| 98 |
+
const msg = messages[reverseIdx]
|
| 99 |
+
return (
|
| 100 |
+
<div key={msg.id} className="text-sm bg-dark-800/50 rounded-lg p-3 border border-dark-700/30">
|
| 101 |
+
<div className="flex items-center gap-2 mb-1">
|
| 102 |
+
<span className="font-semibold text-primary-400">{msg.name}</span>
|
| 103 |
+
<span className="text-dark-500 text-xs">•</span>
|
| 104 |
+
<span className="text-dark-500 text-xs">{new Date(msg.ts).toLocaleTimeString()}</span>
|
| 105 |
+
</div>
|
| 106 |
+
<div className="break-words text-dark-200">{msg.text}</div>
|
| 107 |
</div>
|
| 108 |
+
)
|
| 109 |
+
})
|
|
|
|
| 110 |
)}
|
| 111 |
</div>
|
| 112 |
<div className="p-3 flex gap-2 bg-dark-800/50 border-t border-dark-700/50">
|
pages/api/socketio.ts
CHANGED
|
@@ -15,7 +15,11 @@ import { Playlist, RoomState, UserState, ChatMessage, MediaElement } from "../..
|
|
| 15 |
import { isUrl } from "../../lib/utils"
|
| 16 |
import { getDefaultImg, getDefaultSrc } from "../../lib/env"
|
| 17 |
|
| 18 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 19 |
const createMediaElement = (url: string): MediaElement => ({
|
| 20 |
src: [{ src: url, resolution: "" }],
|
| 21 |
sub: [],
|
|
@@ -312,7 +316,7 @@ const ioHandler = (_: NextApiRequest, res: NextApiResponse) => {
|
|
| 312 |
|
| 313 |
if (room.targetState.playlist.items.length === 1) {
|
| 314 |
const firstItem = room.targetState.playlist.items[0]
|
| 315 |
-
if (firstItem
|
| 316 |
// Remove the default item
|
| 317 |
room.targetState.playlist.items = []
|
| 318 |
log("Removed default media from playlist")
|
|
|
|
| 15 |
import { isUrl } from "../../lib/utils"
|
| 16 |
import { getDefaultImg, getDefaultSrc } from "../../lib/env"
|
| 17 |
|
| 18 |
+
/**
|
| 19 |
+
* Helper function to create a MediaElement from a URL
|
| 20 |
+
* @param url - The media URL to wrap
|
| 21 |
+
* @returns MediaElement with a single source and no subtitles
|
| 22 |
+
*/
|
| 23 |
const createMediaElement = (url: string): MediaElement => ({
|
| 24 |
src: [{ src: url, resolution: "" }],
|
| 25 |
sub: [],
|
|
|
|
| 316 |
|
| 317 |
if (room.targetState.playlist.items.length === 1) {
|
| 318 |
const firstItem = room.targetState.playlist.items[0]
|
| 319 |
+
if (firstItem?.src?.[0]?.src === defaultMedia) {
|
| 320 |
// Remove the default item
|
| 321 |
room.targetState.playlist.items = []
|
| 322 |
log("Removed default media from playlist")
|