summaryrefslogtreecommitdiffstats
path: root/webapp/components/emoji_picker/emoji_picker_overlay.jsx
diff options
context:
space:
mode:
authorHarrison Healey <harrisonmhealey@gmail.com>2017-06-13 14:35:45 -0400
committerChristopher Speller <crspeller@gmail.com>2017-06-13 11:35:45 -0700
commit40efd8367a85e3333e9b7cc45c390259d412088c (patch)
treef40d4fb6f5e7b1bdb8cefa95e25a626837a07a9c /webapp/components/emoji_picker/emoji_picker_overlay.jsx
parent56883d6f95b268477a1f0ec956bc1891ce30c2a1 (diff)
downloadchat-40efd8367a85e3333e9b7cc45c390259d412088c.tar.gz
chat-40efd8367a85e3333e9b7cc45c390259d412088c.tar.bz2
chat-40efd8367a85e3333e9b7cc45c390259d412088c.zip
PLT-6127/PLT-6135/PLT-6137 Added EmojiPickerOverlay component to better position emoji picker (#6352)
* Cleaned up emoji picker CSS * Fixed border of emoji picker when reacting to comments in the RHS * PLT-6135 Made EmojiPicker automatically position itself above/below the [...] menu * PLT-6135 Changed post textbox emoji picker to use a RootCloseWrapper * PLT-6135 Changed comment textbox emoji picker to use a RootCloseWrapper * PLT-6135 Changed RHS post components to use EmojiPickerOverlay * Removed react-outside-event package * Fixed merge conflict * Fixed emoji picker position on posts in RHS * Removed unused CSS classes * Fixed not being able to react to posts with emoji picker
Diffstat (limited to 'webapp/components/emoji_picker/emoji_picker_overlay.jsx')
-rw-r--r--webapp/components/emoji_picker/emoji_picker_overlay.jsx62
1 files changed, 62 insertions, 0 deletions
diff --git a/webapp/components/emoji_picker/emoji_picker_overlay.jsx b/webapp/components/emoji_picker/emoji_picker_overlay.jsx
new file mode 100644
index 000000000..09cc0a36c
--- /dev/null
+++ b/webapp/components/emoji_picker/emoji_picker_overlay.jsx
@@ -0,0 +1,62 @@
+// Copyright (c) 2017-present Mattermost, Inc. All Rights Reserved.
+// See License.txt for license information.
+
+import React from 'react';
+import PropTypes from 'prop-types';
+import {Overlay} from 'react-bootstrap';
+
+import EmojiPicker from './emoji_picker.jsx';
+
+export default class EmojiPickerOverlay extends React.PureComponent {
+ static propTypes = {
+ show: PropTypes.bool.isRequired,
+ container: PropTypes.func,
+ target: PropTypes.func.isRequired,
+ onEmojiClick: PropTypes.func.isRequired,
+ onHide: PropTypes.func.isRequired
+ }
+
+ constructor(props) {
+ super(props);
+
+ this.state = {
+ placement: 'top'
+ };
+ }
+
+ componentWillUpdate(nextProps) {
+ if (nextProps.show && !this.props.show) {
+ const spaceRequiredAbove = 422;
+ const spaceRequiredBelow = 436;
+
+ const targetBounds = nextProps.target().getBoundingClientRect();
+
+ let placement;
+ if (targetBounds.top > spaceRequiredAbove) {
+ placement = 'top';
+ } else if (window.innerHeight - targetBounds.bottom > spaceRequiredBelow) {
+ placement = 'bottom';
+ } else {
+ placement = 'left';
+ }
+
+ this.setState({placement});
+ }
+ }
+
+ render() {
+ return (
+ <Overlay
+ show={this.props.show}
+ placement={this.state.placement}
+ rootClose={true}
+ container={this.props.container}
+ onHide={this.props.onHide}
+ target={this.props.target}
+ animation={false}
+ >
+ <EmojiPicker onEmojiClick={this.props.onEmojiClick}/>
+ </Overlay>
+ );
+ }
+}