Source

frontend/siinc-tv/src/components/feed/liveFeed.js

import style from "./liveFeed.module.css";
import React, { useState } from "react";
import LiveStreamPreview from "../previews/liveStreamPreview";
import Carousel from "react-multi-carousel";
import "react-multi-carousel/lib/styles.css";
const { default: streamActions } = require("../../stream/streamActions");

const responsive = {
  superLargeDesktop: {
    breakpoint: { max: 4000, min: 3000 },
    items: 5,
    slidesToSlide: 2,
  },
  desktop: {
    breakpoint: { max: 3000, min: 1600 },
    items: 3,
    slidesToSlide: 1, // optional, default to 1.
  },
  tablet: {
    breakpoint: { max: 1600, min: 1200 },
    items: 2,
    slidesToSlide: 1, // optional, default to 1.
  },
  mobile: {
    breakpoint: { max: 1200, min: 0 },
    items: 1,
    slidesToSlide: 1, // optional, default to 1.
  },
};

/**
 * This component is in charge of displaying the currently live feed in the homepage
 * 
 * @category Frontend
 * @component
 */
function LiveStreamFeed(props) {
  // Take a streamData and display it in a carousel
  const [streamDatas, setStreamDatas] = useState([]);
  const streamPreviews = streamDatas.map((streamData) => {
    return (
      <div className={style.liveFeedContainer}>
        <LiveStreamPreview key={streamData._id} streamData={streamData} />
      </div>
    );
  });

  React.useEffect(() => {
    if (streamDatas.length === 0) {
      streamActions.getStreamsByStatus(1, "Live").then((result) => {
        setStreamDatas(result);
      });
    }
  }, [streamDatas]);

  return (
    <div>
      <div className={style.liveFeedBar}>
        <h1 className={style.titleOpacity}>Live Now</h1>
        <Carousel responsive={responsive} infinite={true}>
          {streamPreviews}
        </Carousel>
      </div>
    </div>
  );
}

export default LiveStreamFeed;