From a8fa8cdf4cf99b5c36b9136a0749d299a23d7dd1 Mon Sep 17 00:00:00 2001 From: Ingvar Stepanyan Date: Fri, 23 Jul 2021 19:19:40 +0000 Subject: [PATCH] Gracefully handle unsupported capture --- ui/capture-button.js | 33 +++++++++++++++++++-------------- 1 file changed, 19 insertions(+), 14 deletions(-) diff --git a/ui/capture-button.js b/ui/capture-button.js index 4ae61b0..3998001 100644 --- a/ui/capture-button.js +++ b/ui/capture-button.js @@ -1,19 +1,24 @@ import { h, Component, Fragment } from 'preact'; -/** @extends Component<{ getFile: () => Promise }, { inProgress: boolean }> */ +/** @extends Component<{ getFile: () => Promise }, { status: string }> */ export class CaptureButton extends Component { - state = { inProgress: false }; + state = { status: '📷' }; handleCapture = async () => { - this.setState({ inProgress: true }); - let file = await this.props.getFile(); - let url = URL.createObjectURL(file); - Object.assign(document.createElement('a'), { - download: file.name, - href: url - }).click(); - URL.revokeObjectURL(url); - this.setState({ inProgress: false }); + this.setState({ status: '⌛' }); + try { + let file = await this.props.getFile(); + let url = URL.createObjectURL(file); + Object.assign(document.createElement('a'), { + download: file.name, + href: url + }).click(); + URL.revokeObjectURL(url); + this.setState({ status: '📷' }); + } catch (err) { + console.error(err); + this.setState({ status: '❌' }); + } }; render() { @@ -23,10 +28,10 @@ export class CaptureButton extends Component { h('input', { type: 'button', id: 'capture', - class: - 'pure-button' + (this.state.inProgress ? ' pure-button-active' : ''), + disabled: this.state.status !== '📷', + class: 'pure-button', onclick: this.handleCapture, - value: `${this.state.inProgress ? '⌛' : '📷'} Capture image` + value: `${this.state.status} Capture image` }) ); }