diff --git a/browser/main/modals/PreferencesModal/StorageItem.js b/browser/main/modals/PreferencesModal/StorageItem.js index 374c9218..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' @@ -8,6 +9,7 @@ import store from 'browser/main/store' const electron = require('electron') const { shell, remote } = electron const { Menu, MenuItem } = remote +import { SketchPicker } from 'react-color' class UnstyledFolderItem extends React.Component { constructor (props) { @@ -16,6 +18,8 @@ class UnstyledFolderItem extends React.Component { this.state = { status: 'IDLE', folder: { + showColumnPicker: false, + colorPickerPos: { left: 0, top: 0 }, color: props.color, name: props.name } @@ -50,22 +54,32 @@ class UnstyledFolderItem extends React.Component { } handleColorButtonClick (e) { - var menu = new Menu() - - consts.FOLDER_COLORS.forEach((color, index) => { - menu.append(new MenuItem({ - label: consts.FOLDER_COLOR_NAMES[index], - click: (e) => { - let { folder } = this.state - folder.color = color - 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 }) }) + } - menu.popup(remote.getCurrentWindow()) + handleColorChange (color) { + const folder = Object.assign({}, this.state.folder, { color: color.hex }) + this.setState({ folder }) + } + + handleColorPickerClose (event) { + const folder = Object.assign({}, this.state.folder, { showColumnPicker: false }) + this.setState({ folder }) } handleCancelButtonClick (e) { @@ -75,12 +89,33 @@ class UnstyledFolderItem extends React.Component { } renderEdit (e) { + const popover = { position: 'absolute', zIndex: 2 } + const cover = { + position: 'fixed', + top: 0, right: 0, bottom: 0, left: 0 + } + const pickerStyle = Object.assign({}, { + position: 'absolute' + }, this.state.folder.colorPickerPos) return (