diff --git a/browser/main/modals/PreferencesModal/StorageItem.js b/browser/main/modals/PreferencesModal/StorageItem.js index b298d26f..68cfb1fe 100644 --- a/browser/main/modals/PreferencesModal/StorageItem.js +++ b/browser/main/modals/PreferencesModal/StorageItem.js @@ -1,4 +1,5 @@ import React, { PropTypes } from 'react' +import ReactDOM from 'react-dom' import CSSModules from 'browser/lib/CSSModules' import styles from './StorageItem.styl' import consts from 'browser/lib/consts' @@ -18,6 +19,7 @@ class UnstyledFolderItem extends React.Component { status: 'IDLE', folder: { showColumnPicker: false, + colorPickerPos: { left: 0, top: 0 }, color: props.color, name: props.name } @@ -52,8 +54,22 @@ class UnstyledFolderItem extends React.Component { } handleColorButtonClick (e) { - const folder = Object.assign({}, this.state.folder, { showColumnPicker: true }) - this.setState({ folder }) + const folder = Object.assign({}, this.state.folder, { showColumnPicker: true, colorPickerPos: { left: 0, top: 0 } }) + this.setState({ folder }, function() { + // After the color picker has been painted, re-calculate its position + // by comparing its dimensions to the host dimensions. + const { hostBoundingBox } = this.props; + const colorPickerNode = ReactDOM.findDOMNode(this.refs.colorPicker) + const colorPickerBox = colorPickerNode.getBoundingClientRect() + const offsetTop = hostBoundingBox.bottom - colorPickerBox.bottom + const folder = Object.assign({}, this.state.folder, { + colorPickerPos: { + left: 25, + top: offsetTop < 0 ? offsetTop - 5 : 0 // subtract 5px for aestetics + } + }) + this.setState({ folder }) + }) } handleColorChange (color) { @@ -78,6 +94,9 @@ class UnstyledFolderItem extends React.Component { position: 'fixed', top: 0, right: 0, bottom: 0, left: 0 } + const pickerStyle = Object.assign({}, { + position: 'absolute' + }, this.state.folder.colorPickerPos) return (