Spaces:
Runtime error
Runtime error
| import * as THREE from 'three'; | |
| import { | |
| Button, | |
| Dialog, | |
| DialogContent, | |
| DialogTitle, | |
| IconButton, | |
| Typography, | |
| } from '@mui/material'; | |
| import CloseIcon from '@mui/icons-material/Close'; | |
| import {XRConfigProps} from './XRConfig'; | |
| import {useEffect, useRef, useState} from 'react'; | |
| import './XRDialog.css'; | |
| import {getRenderer, init, updatetranslationText} from './XRRendering'; | |
| import ARButton from './ARButton'; | |
| import {getURLParams} from '../URLParams'; | |
| function XRContent(props: XRConfigProps) { | |
| const debugParam = getURLParams().debug; | |
| const {translationSentences} = props; | |
| useEffect(() => { | |
| updatetranslationText(translationSentences); | |
| }, [translationSentences]); | |
| const [renderer, setRenderer] = useState<THREE.WebGLRenderer | null>(null); | |
| const canvasRef = useRef<HTMLDivElement | null>(null); | |
| useEffect(() => { | |
| if (canvasRef.current != null || debugParam === false) { | |
| const existingRenderer = getRenderer(); | |
| if (existingRenderer) { | |
| setRenderer(existingRenderer); | |
| } else { | |
| const newRenderer = init( | |
| 400, | |
| 300, | |
| debugParam ? canvasRef.current : null, | |
| ); | |
| setRenderer(newRenderer); | |
| } | |
| } | |
| }, [canvasRef.current]); | |
| return ( | |
| <DialogContent | |
| dividers | |
| className="xr-dialog-container xr-dialog-text-center"> | |
| <Typography gutterBottom> | |
| Welcome to the Seamless team streaming demo experience! In this demo you | |
| will experience AI powered text and audio translation in real time. | |
| </Typography> | |
| <div ref={canvasRef} className="xr-dialog-canvas-container" /> | |
| <ARButton | |
| bufferedSpeechPlayer={props.bufferedSpeechPlayer} | |
| renderer={renderer} | |
| onARHidden={props.onARHidden} | |
| onARVisible={props.onARVisible} | |
| /> | |
| </DialogContent> | |
| ); | |
| } | |
| export default function XRDialog(props: XRConfigProps) { | |
| const [isDialogOpen, setIsDialogOpen] = useState<boolean>(false); | |
| return ( | |
| <> | |
| <Button variant="contained" onClick={() => setIsDialogOpen(true)}> | |
| Enter AR Experience | |
| </Button> | |
| {isDialogOpen && ( | |
| <Dialog onClose={() => setIsDialogOpen(false)} open={true}> | |
| <DialogTitle sx={{m: 0, p: 2}} className="xr-dialog-text-center"> | |
| FAIR Seamless Streaming Demo | |
| </DialogTitle> | |
| <IconButton | |
| aria-label="close" | |
| onClick={() => setIsDialogOpen(false)} | |
| sx={{ | |
| position: 'absolute', | |
| right: 8, | |
| top: 8, | |
| color: (theme) => theme.palette.grey[500], | |
| }}> | |
| <CloseIcon /> | |
| </IconButton> | |
| <XRContent {...props} /> | |
| </Dialog> | |
| )} | |
| </> | |
| ); | |
| } | |