aboutsummaryrefslogtreecommitdiff
path: root/app/javascript/mastodon/components/modal_root.js
diff options
context:
space:
mode:
Diffstat (limited to 'app/javascript/mastodon/components/modal_root.js')
-rw-r--r--app/javascript/mastodon/components/modal_root.js34
1 files changed, 16 insertions, 18 deletions
diff --git a/app/javascript/mastodon/components/modal_root.js b/app/javascript/mastodon/components/modal_root.js
index 6297b5e29..26344528e 100644
--- a/app/javascript/mastodon/components/modal_root.js
+++ b/app/javascript/mastodon/components/modal_root.js
@@ -1,19 +1,21 @@
import React from 'react';
import PropTypes from 'prop-types';
import 'wicg-inert';
+import { multiply } from 'color-blend';
export default class ModalRoot extends React.PureComponent {
static propTypes = {
children: PropTypes.node,
onClose: PropTypes.func.isRequired,
+ backgroundColor: PropTypes.shape({
+ r: PropTypes.number,
+ g: PropTypes.number,
+ b: PropTypes.number,
+ }),
};
- state = {
- revealed: !!this.props.children,
- };
-
- activeElement = this.state.revealed ? document.activeElement : null;
+ activeElement = this.props.children ? document.activeElement : null;
handleKeyUp = (e) => {
if ((e.key === 'Escape' || e.key === 'Esc' || e.keyCode === 27)
@@ -53,8 +55,6 @@ export default class ModalRoot extends React.PureComponent {
this.activeElement = document.activeElement;
this.getSiblings().forEach(sibling => sibling.setAttribute('inert', true));
- } else if (!nextProps.children) {
- this.setState({ revealed: false });
}
}
@@ -68,14 +68,7 @@ export default class ModalRoot extends React.PureComponent {
Promise.resolve().then(() => {
this.activeElement.focus({ preventScroll: true });
this.activeElement = null;
- }).catch((error) => {
- console.error(error);
- });
- }
- if (this.props.children) {
- requestAnimationFrame(() => {
- this.setState({ revealed: true });
- });
+ }).catch(console.error);
}
}
@@ -94,7 +87,6 @@ export default class ModalRoot extends React.PureComponent {
render () {
const { children, onClose } = this.props;
- const { revealed } = this.state;
const visible = !!children;
if (!visible) {
@@ -103,10 +95,16 @@ export default class ModalRoot extends React.PureComponent {
);
}
+ let backgroundColor = null;
+
+ if (this.props.backgroundColor) {
+ backgroundColor = multiply({ ...this.props.backgroundColor, a: 1 }, { r: 0, g: 0, b: 0, a: 0.7 });
+ }
+
return (
- <div className='modal-root' ref={this.setRef} style={{ opacity: revealed ? 1 : 0 }}>
+ <div className='modal-root' ref={this.setRef}>
<div style={{ pointerEvents: visible ? 'auto' : 'none' }}>
- <div role='presentation' className='modal-root__overlay' onClick={onClose} />
+ <div role='presentation' className='modal-root__overlay' onClick={onClose} style={{ backgroundColor: backgroundColor ? `rgba(${backgroundColor.r}, ${backgroundColor.g}, ${backgroundColor.b}, 0.7)` : null }} />
<div role='dialog' className='modal-root__container'>{children}</div>
</div>
</div>