Merge branch 'release-v0.12.4' into develop

This commit is contained in:
David Baker 2018-05-14 17:27:01 +01:00
commit 7588d4380c

View file

@ -127,10 +127,19 @@ export default class Stickerpicker extends React.Component {
} }
_onWidgetAction(payload) { _onWidgetAction(payload) {
if (payload.action === "user_widget_updated") { switch (payload.action) {
this.forceUpdate(); case "user_widget_updated":
} else if (payload.action === "stickerpicker_close") { this.forceUpdate();
this.setState({showStickers: false}); break;
case "stickerpicker_close":
this.setState({showStickers: false});
break;
case "show_right_panel":
case "hide_right_panel":
case "show_left_panel":
case "hide_left_panel":
this.setState({showStickers: false});
break;
} }
} }
@ -244,16 +253,33 @@ export default class Stickerpicker extends React.Component {
* @param {Event} e Event that triggered the function * @param {Event} e Event that triggered the function
*/ */
_onShowStickersClick(e) { _onShowStickersClick(e) {
// XXX: Simplify by using a context menu that is positioned relative to the sticker picker button
const buttonRect = e.target.getBoundingClientRect(); const buttonRect = e.target.getBoundingClientRect();
// The window X and Y offsets are to adjust position when zoomed in to page // The window X and Y offsets are to adjust position when zoomed in to page
const x = buttonRect.right + window.pageXOffset - 42; let x = buttonRect.right + window.pageXOffset - 41;
// Amount of horizontal space between the right of menu and the right of the viewport
// (10 = amount needed to make chevron centrally aligned)
const rightPad = 10;
// When the sticker picker would be displayed off of the viewport, adjust x
// (302 = width of context menu, including borders)
x = Math.min(x, document.body.clientWidth - (302 + rightPad));
// Offset the chevron location, which is relative to the left of the context menu
// (10 = offset when context menu would not be displayed off viewport)
// (8 = value required in practice (possibly 10 - 2 where the 2 = context menu borders)
const stickerPickerChevronOffset = Math.max(10, 8 + window.pageXOffset + buttonRect.left - x);
const y = (buttonRect.top + (buttonRect.height / 2) + window.pageYOffset) - 19; const y = (buttonRect.top + (buttonRect.height / 2) + window.pageYOffset) - 19;
this.setState({ this.setState({
showStickers: true, showStickers: true,
stickerPickerX: x, stickerPickerX: x,
stickerPickerY: y, stickerPickerY: y,
stickerPickerChevronOffset,
}); });
} }
@ -306,7 +332,7 @@ export default class Stickerpicker extends React.Component {
const stickerPicker = <ContextualMenu const stickerPicker = <ContextualMenu
elementClass={GenericElementContextMenu} elementClass={GenericElementContextMenu}
chevronOffset={10} chevronOffset={this.state.stickerPickerChevronOffset}
chevronFace={'bottom'} chevronFace={'bottom'}
left={this.state.stickerPickerX} left={this.state.stickerPickerX}
top={this.state.stickerPickerY} top={this.state.stickerPickerY}