import { computed, observable, runInAction } from 'mobx'; import { observer } from 'mobx-react'; import * as React from 'react'; import { DictationManager } from '../util/DictationManager'; import './Main.scss'; import { MainViewModal } from './MainViewModal'; @observer export class DictationOverlay extends React.Component { public static Instance: DictationOverlay; @observable private _dictationState = DictationManager.placeholder; @observable private _dictationSuccessState: boolean | undefined = undefined; @observable private _dictationDisplayState = false; @observable private _dictationListeningState: DictationManager.Controls.ListeningUIStatus = false; public isPointerDown = false; public overlayTimeout: NodeJS.Timeout | undefined; public hasActiveModal = false; constructor(props: any) { super(props); DictationOverlay.Instance = this; } public initiateDictationFade = () => { const duration = DictationManager.Commands.dictationFadeDuration; this.overlayTimeout = setTimeout(() => { this.dictationOverlayVisible = false; this.dictationSuccess = undefined; DictationOverlay.Instance.hasActiveModal = false; setTimeout(() => (this.dictatedPhrase = DictationManager.placeholder), 500); }, duration); }; public cancelDictationFade = () => { if (this.overlayTimeout) { clearTimeout(this.overlayTimeout); this.overlayTimeout = undefined; } }; @computed public get dictatedPhrase() { return this._dictationState; } @computed public get dictationSuccess() { return this._dictationSuccessState; } @computed public get dictationOverlayVisible() { return this._dictationDisplayState; } @computed public get isListening() { return this._dictationListeningState; } public set dictatedPhrase(value: string) { runInAction(() => (this._dictationState = value)); } public set dictationSuccess(value: boolean | undefined) { runInAction(() => (this._dictationSuccessState = value)); } public set dictationOverlayVisible(value: boolean) { runInAction(() => (this._dictationDisplayState = value)); } public set isListening(value: DictationManager.Controls.ListeningUIStatus) { runInAction(() => (this._dictationListeningState = value)); } render() { const success = this.dictationSuccess; const result = this.isListening && !this.isListening.interim ? DictationManager.placeholder : `"${this.dictatedPhrase}"`; const dialogueBoxStyle = { background: success === undefined ? 'gainsboro' : success ? 'lawngreen' : 'red', borderColor: this.isListening ? 'red' : 'black', fontStyle: 'italic', }; const overlayStyle = { backgroundColor: this.isListening ? 'red' : 'darkslategrey', }; return ; } }