| 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> |
| )} |
| </> |
| ); |
| } |
|
|