copilot-swe-agent[bot] ArnavSingh76533 commited on
Commit
cd35cdb
·
1 Parent(s): 3c9a7c2

Fix code review issues: improve null checking and rendering efficiency

Browse files

Co-authored-by: ArnavSingh76533 <160649079+ArnavSingh76533@users.noreply.github.com>

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
- [...messages].reverse().map((m) => (
96
- <div key={m.id} className="text-sm bg-dark-800/50 rounded-lg p-3 border border-dark-700/30">
97
- <div className="flex items-center gap-2 mb-1">
98
- <span className="font-semibold text-primary-400">{m.name}</span>
99
- <span className="text-dark-500 text-xs">•</span>
100
- <span className="text-dark-500 text-xs">{new Date(m.ts).toLocaleTimeString()}</span>
 
 
 
 
 
 
101
  </div>
102
- <div className="break-words text-dark-200">{m.text}</div>
103
- </div>
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
- // Helper function to create a media element from a URL
 
 
 
 
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.src[0]?.src === defaultMedia) {
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")