From 8bf0d5312fa257d05eb9f19397eabf21b683357e Mon Sep 17 00:00:00 2001 From: Daniil Chemerkin Date: Thu, 18 Apr 2024 21:30:01 +0000 Subject: [PATCH] Develop --- src/components/palmistry/modal/modal.tsx | 23 ++++++--- .../palm-camera-modal/palm-camera-modal.css | 21 +++++++- .../palm-camera-modal/palm-camera-modal.tsx | 49 ++++++++++++------- vite.config.ts | 13 ++++- 4 files changed, 79 insertions(+), 27 deletions(-) diff --git a/src/components/palmistry/modal/modal.tsx b/src/components/palmistry/modal/modal.tsx index 86ccb0e..50f804e 100644 --- a/src/components/palmistry/modal/modal.tsx +++ b/src/components/palmistry/modal/modal.tsx @@ -1,28 +1,39 @@ -import './modal.css'; +import "./modal.css"; export enum ModalType { - Error = 'error', + Error = "error", } type Props = { children: React.ReactNode; type?: ModalType; noCloseButton?: boolean; + modalClassName?: string; onClose: () => void; }; export default function Modal(props: Props) { - const className = ['modal']; + const className = ["modal"]; + + if (props.modalClassName?.length) { + className.push(props.modalClassName); + } if (props.type === ModalType.Error) { - className.push('modal_type_error'); + className.push("modal_type_error"); } return ( -
+
{!props.noCloseButton && (
- + void; @@ -13,7 +13,9 @@ type Props = { export default function PalmCameraModal(props: Props) { const videoEl = React.useRef(null); - const [mediaStream, setMediaStream] = React.useState(null); + const [mediaStream, setMediaStream] = React.useState( + null + ); const onClickOverlay = (e: React.MouseEvent) => { if (e.target === e.currentTarget) { @@ -26,20 +28,20 @@ export default function PalmCameraModal(props: Props) { try { const stream = await navigator.mediaDevices.getUserMedia({ - video: { facingMode: { ideal: 'environment' } }, - }) + video: { facingMode: { ideal: "environment" } }, + }); setMediaStream(stream); videoEl.current.srcObject = stream; - videoEl.current.addEventListener('loadedmetadata', videoEl.current.play); - } catch(error) { - console.error('Camera is not available', error); + videoEl.current.addEventListener("loadedmetadata", videoEl.current.play); + } catch (error) { + console.error("Camera is not available", error); } }; const deactivateCamera = React.useCallback(() => { - mediaStream?.getTracks().forEach(track => track.stop()); + mediaStream?.getTracks().forEach((track) => track.stop()); }, [mediaStream]); React.useEffect(() => { @@ -49,9 +51,9 @@ export default function PalmCameraModal(props: Props) { }, []); const takePhoto = () => { - const canvas = document.createElement('canvas'); + const canvas = document.createElement("canvas"); - const context = canvas.getContext('2d'); + const context = canvas.getContext("2d"); if (!context || !videoEl.current) return null; @@ -62,7 +64,7 @@ export default function PalmCameraModal(props: Props) { canvas.height = height; context.drawImage(videoEl.current, 0, 0, width, height); - const data = canvas.toDataURL('image/png'); + const data = canvas.toDataURL("image/png"); return data; }; @@ -78,9 +80,15 @@ export default function PalmCameraModal(props: Props) { }; return ( - - -
+ + +
-