diff --git a/web/media/multimedia.react.js b/web/media/multimedia.react.js index a3f35c0ed..fbe17be72 100644 --- a/web/media/multimedia.react.js +++ b/web/media/multimedia.react.js @@ -1,124 +1,125 @@ // @flow import classNames from 'classnames'; import invariant from 'invariant'; import * as React from 'react'; import { CircularProgressbar } from 'react-circular-progressbar'; import 'react-circular-progressbar/dist/styles.css'; import { XCircle as XCircleIcon, AlertCircle as AlertCircleIcon, } from 'react-feather'; import { type PendingMultimediaUpload } from '../input/input-state'; import { useModalContext } from '../modals/modal-provider.react'; import css from './media.css'; import MultimediaModal from './multimedia-modal.react'; type BaseProps = { +uri: string, +pendingUpload?: ?PendingMultimediaUpload, +remove?: (uploadID: string) => void, +multimediaCSSClass: string, +multimediaImageCSSClass: string, }; type Props = { ...BaseProps, +pushModal: (modal: React.Node) => void, }; class Multimedia extends React.PureComponent { componentDidUpdate(prevProps: Props) { const { uri, pendingUpload } = this.props; if (uri === prevProps.uri) { return; } if ( (!pendingUpload || pendingUpload.uriIsReal) && (!prevProps.pendingUpload || !prevProps.pendingUpload.uriIsReal) ) { URL.revokeObjectURL(prevProps.uri); } } render(): React.Node { let progressIndicator, errorIndicator, removeButton; const { pendingUpload, remove } = this.props; if (pendingUpload) { const { progressPercent, failed } = pendingUpload; if (progressPercent !== 0 && progressPercent !== 1) { const outOfHundred = Math.floor(progressPercent * 100); const text = `${outOfHundred}%`; progressIndicator = ( ); } if (failed) { errorIndicator = ( ); } if (remove) { removeButton = ( ); } } const imageContainerClasses = [ css.multimediaImage, this.props.multimediaImageCSSClass, ]; imageContainerClasses.push(css.clickable); const containerClasses = [css.multimedia, this.props.multimediaCSSClass]; return ( {removeButton} {progressIndicator} {errorIndicator} ); } - remove: () => void = () => { + remove: (event: SyntheticEvent) => void = event => { + event.stopPropagation(); const { remove, pendingUpload } = this.props; invariant( remove && pendingUpload, 'Multimedia cannot be removed as either remove or pendingUpload ' + 'are unspecified', ); remove(pendingUpload.localID); }; onClick: (event: SyntheticEvent) => void = event => { event.stopPropagation(); const { pushModal, uri } = this.props; pushModal(); }; } function ConnectedMultimediaContainer(props: BaseProps): React.Node { const modalContext = useModalContext(); return ; } export default ConnectedMultimediaContainer;