LocalStream.jsx 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. import React from "react";
  2. import UserStream from "./UserStream";
  3. const LocalStream = ({
  4. stream,
  5. user,
  6. publish = true,
  7. audio = true,
  8. video = true,
  9. }) => {
  10. const [show, setShow] = React.useState(false);
  11. React.useEffect(() => {
  12. if (!stream) {
  13. return;
  14. }
  15. if (publish) {
  16. stream.publish({ publishAudio: audio, publishVideo: video });
  17. } else {
  18. stream.unpublish();
  19. }
  20. // No need to react on audio or video value change
  21. // eslint-disable-next-line react-hooks/exhaustive-deps
  22. }, [publish, stream]);
  23. React.useEffect(() => {
  24. if (!stream) {
  25. return;
  26. }
  27. stream.enableVideo(video);
  28. }, [stream, video]);
  29. React.useEffect(() => {
  30. if (!stream) {
  31. return;
  32. }
  33. stream.enableAudio(audio);
  34. }, [stream, audio]);
  35. React.useEffect(() => {
  36. // React on published change
  37. setShow(stream.published && Boolean(stream.publisher));
  38. }, [stream.published, stream.publisher]);
  39. if (!stream || !show) {
  40. return null;
  41. }
  42. return (
  43. <UserStream
  44. stream={stream}
  45. self={true}
  46. name={user.name}
  47. color={user.color}
  48. audio={audio}
  49. video={video}
  50. />
  51. );
  52. };
  53. export default LocalStream;