Celebrating 80th Independence Day of India• Jai Hind •Bharat Mata Ki Jai• Jai Hind •Long Live India• Jai Hind •Jai Hind• Jai Hind •

LLD: Youtube live chat UI

Ashutosh Anand Tiwari
By Ashutosh Anand TiwariPublished Feb 25, 2025 · 4 min read


Github Code Link
Live Deployed Link

import React, { useEffect, useState,useRef } from 'react';

const COMMENTS = [
  {
    id: 1,
    name: 'John Doe',
    comment: 'Lorem ipsum dolor sit amet consectetur adipisicing elit. Quisquam, quos.',
    avatar: 'https://avatar.iran.liara.run/public'
  },
  {
    id: 2,
    name: 'Jane Doe',
    comment: 'Lorem ipsum dolor sit amet consectetur adipisicing elit. Quisquam, quos.',
    avatar: 'https://avatar.iran.liara.run/public'
  },
  {
    id: 3,
    name: 'Alice Smith',
    comment: 'Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium.',
    avatar: 'https://avatar.iran.liara.run/public'
  },
  {
    id: 4,
    name: 'Bob Johnson',
    comment: 'At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium.',
    avatar: 'https://avatar.iran.liara.run/public'
  },
  {
    id: 5,
    name: 'Charlie Brown',
    comment: 'Et harum quidem rerum facilis est et expedita distinctio. Nam libero tempore, cum soluta nobis est eligendi optio.',
    avatar: 'https://avatar.iran.liara.run/public'
  },
  {
    id: 6,
    name: 'David Wilson',
    comment: 'Temporibus autem quibusdam et aut officiis debitis aut rerum necessitatibus saepe eveniet ut et voluptates repudiandae sint et molestiae non recusandae.',
    avatar: 'https://avatar.iran.liara.run/public'
  },
  {
    id: 7,
    name: 'Eve Davis',
    comment: 'Itaque earum rerum hic tenetur a sapiente delectus, ut aut reiciendis voluptatibus maiores alias consequatur aut perferendis doloribus asperiores repellat.',
    avatar: 'https://avatar.iran.liara.run/public'
  },
  {
    id: 8,
    name: 'Frank Miller',
    comment: 'Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt.',
    avatar: 'https://avatar.iran.liara.run/public'
  },
  {
    id: 9,
    name: 'Grace Lee',
    comment: 'Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem.',
    avatar: 'https://avatar.iran.liara.run/public'
  },
  {
    id: 10,
    name: 'Hank Green',
    comment: 'Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur?',
    avatar: 'https://avatar.iran.liara.run/public'
  }
];


function generateRandomName() {
  const names = [
    'Alice Smith', 'Bob Johnson', 'Charlie Brown', 'David Wilson', 
    'Eve Davis', 'Frank Miller', 'Grace Lee', 'Hank Green', 
    'Ivy White', 'Jack Black', 'Karen Hill', 'Larry King', 
    'Mona Lisa', 'Nina Simone', 'Oscar Wilde', 'Paul Newman', 
    'Quincy Jones', 'Rachel Green', 'Steve Jobs', 'Tina Turner'
  ];
  const randomIndex = Math.floor(Math.random() * names.length);
  return names[randomIndex];
}


function YoutubeChat() {
  const [comments, setComments] = useState(COMMENTS);
  const myRef= useRef()

 async function fetchData(){
   //make API call
   const response = await fetch('https://jsonplaceholder.typicode.com/comments/1');
   const data = await response.json();
   console.log(data);
   const newComment={
    id:1,
    name:generateRandomName(),
    comment:data.body,
    avatar:'https://avatar.iran.liara.run/public'
   }
   setComments(prev=>{

    let  oldData=[...prev]
    if(oldData?.length>5){
      console.log("Yes more than 5")
      oldData = oldData.slice(-5);
      console.log("oldData",oldData)
    }
    return [...oldData,newComment]
   })

  if (myRef.current) {
    myRef.current.scrollTop = myRef.current.scrollHeight;
  }

 
  }


  useEffect(() => {
    const s = setInterval(() => {
      fetchData()
    }, 5000);
    return () => clearInterval(s);
  }, []);
  return (
    <div>
      <h2 className='mb-2 text-3xl font-bold text-red-600'>Youtube </h2>
      <div className='flex gap-4 flex-wrap'>
        <iframe
          className='h-[600px] md:w-2/3 w-full'
          src='https://www.youtube.com/embed/dQw4w9WgXcQ'
          title='Youtube'
        />
        <div className='h-[600px] md:w-1/3 w-full flex gap-4   border p-5 mx-h-[600px] overflow-y-auto  flex-col' ref={myRef}>
          {comments?.map((item) => (
            <SingleComment key={item.id} {...item} />
          ))}
        </div>
      </div>
    </div>
  );
}

export default YoutubeChat;

function SingleComment({ name, comment, avatar }) {
  return (
    <div className='flex gap-2 '>
      <img src={avatar} alt='user' className='h-10 w-10 rounded-full' />
      <div className='flex flex-col'>
        <span className='text-sm font-bold'>{name}</span>
        <span className='text-sm'>{comment}</span>
      </div>
    </div>
  );
}

Continue Exploring

Profile

Ashutosh Anand Tiwari

Follow

Writer & curator of this digital garden — open notes for learners worldwide.

Request a Topic

Want me to write notes on a course?

Tell me the course, book, or research topic you want covered. If it helps learners, I'll consider adding structured digital notes for it in the garden.

Collaborate

Have a notes collection to feature here?

Do you have open notes you want featured in this digital garden? Let me know — we can collaborate and publish them for learners worldwide.