From 9f392195689da1ea379c403d83a0dd8c9d830788 Mon Sep 17 00:00:00 2001 From: DimaDemchenko Date: Tue, 16 Jan 2024 21:45:49 +0200 Subject: [PATCH] implemented CameraStream --- .../camera-stream/CameraStream.module.css | 22 ++++++ src/components/camera-stream/CameraStream.tsx | 52 +++++++++++++ .../demo-scroll/DemoScroll.module.css | 2 +- .../infinite-scroll/InfiniteScroll.tsx | 22 +++--- src/index.css | 75 ------------------- src/main.tsx | 1 - 6 files changed, 88 insertions(+), 86 deletions(-) create mode 100644 src/components/camera-stream/CameraStream.module.css create mode 100644 src/components/camera-stream/CameraStream.tsx diff --git a/src/components/camera-stream/CameraStream.module.css b/src/components/camera-stream/CameraStream.module.css new file mode 100644 index 0000000..58afc48 --- /dev/null +++ b/src/components/camera-stream/CameraStream.module.css @@ -0,0 +1,22 @@ +.cameraContainer { + position: absolute; +} + +.checkBoxStyle { + font-family: Arial, sans-serif; + text-align: left; + color: #4a4a4a; + font-weight: bold; + font-size: 14px; +} + +.videoStream { + border-radius: 50px; + border: 2px solid #e6e6e6; + max-width: 500px; + max-height: 500px; +} + +.displayNone{ + display: none; +} diff --git a/src/components/camera-stream/CameraStream.tsx b/src/components/camera-stream/CameraStream.tsx new file mode 100644 index 0000000..2d6bcbe --- /dev/null +++ b/src/components/camera-stream/CameraStream.tsx @@ -0,0 +1,52 @@ +import { useEffect, useRef, useState } from 'react' +import styles from './CameraStream.module.css' + +export const CameraStream = () => { + const videoRef = useRef(null) + const [showCam, setShowCam] = useState(false) + + const getVideo = async () => { + try { + const stream = await navigator.mediaDevices.getUserMedia({ + video: { width: 1280, height: 720 }, + }) + + const video = videoRef.current + + if (!video) return + + video.srcObject = stream + video.play() + } catch (error) { + console.log(error) + } + } + + useEffect(() => { + getVideo() + }, []) + + const handleChange = () => { + setShowCam(!showCam) + } + + return ( +
+
+ + +
+
+ +
+
+ ) +} diff --git a/src/components/demo-scroll/DemoScroll.module.css b/src/components/demo-scroll/DemoScroll.module.css index 863c70a..e5d1dd7 100644 --- a/src/components/demo-scroll/DemoScroll.module.css +++ b/src/components/demo-scroll/DemoScroll.module.css @@ -23,7 +23,7 @@ color: #1a73e8; font-family: 'Courier New', Courier, monospace; font-size: 16px; - margin-left: 18rem; + margin-left: 15rem; } .spanName { diff --git a/src/components/infinite-scroll/InfiniteScroll.tsx b/src/components/infinite-scroll/InfiniteScroll.tsx index 8d22a86..f3cf52f 100644 --- a/src/components/infinite-scroll/InfiniteScroll.tsx +++ b/src/components/infinite-scroll/InfiniteScroll.tsx @@ -1,4 +1,5 @@ import React, { useEffect, useRef, useState } from 'react' +import { CameraStream } from '../camera-stream/CameraStream' import styles from './InfiniteScroll.module.css' type InfiniteScrollProps = { @@ -69,14 +70,17 @@ export const InfiniteScroll = ({ }, [getDataFunc, isLoading, maxItemsInList, itemsPerPage, page]) return ( -
-
    - {items.map((item, index) => ( - {renderItem(item)} - ))} -
- {isLoading &&

Loading...

} -
-
+ <> + +
+
    + {items.map((item, index) => ( + {renderItem(item)} + ))} +
+ {isLoading &&

Loading...

} +
+
+ ) } diff --git a/src/index.css b/src/index.css index 3b9a13b..e69de29 100644 --- a/src/index.css +++ b/src/index.css @@ -1,75 +0,0 @@ -:root { - font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif; - line-height: 1.5; - font-weight: 400; - - color-scheme: light dark; - color: rgba(255, 255, 255, 0.87); - background-color: #242424; - - font-synthesis: none; - text-rendering: optimizeLegibility; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} - -#root { - margin: 0 auto; - padding: 2rem; - text-align: center; -} - - -a { - font-weight: 500; - color: #646cff; - text-decoration: inherit; -} -a:hover { - color: #535bf2; -} - -body { - margin: 0; - display: flex; - place-items: center; - min-width: 320px; - min-height: 100vh; -} - -h1 { - font-size: 3.2em; - line-height: 1.1; -} - -button { - border-radius: 8px; - border: 1px solid transparent; - padding: 0.6em 1.2em; - font-size: 1em; - font-weight: 500; - font-family: inherit; - background-color: #1a1a1a; - cursor: pointer; - transition: border-color 0.25s; -} -button:hover { - border-color: #646cff; -} -button:focus, -button:focus-visible { - outline: 4px auto -webkit-focus-ring-color; -} - -@media (prefers-color-scheme: light) { - :root { - color: #213547; - background-color: #ffffff; - } - a:hover { - color: #747bff; - } - button { - background-color: #f9f9f9; - } -} diff --git a/src/main.tsx b/src/main.tsx index 86de2fe..9691bf2 100644 --- a/src/main.tsx +++ b/src/main.tsx @@ -1,7 +1,6 @@ import React from 'react' import ReactDOM from 'react-dom/client' import { DemoScroll } from './components/demo-scroll/DemoScroll' -import './index.css' ReactDOM.createRoot(document.getElementById('root')!).render(