import React, { PropTypes } from 'react' import ReactDOM from 'react-dom' import ExternalLink from 'browser/components/ExternalLink' import { setSearchFilter, clearSearch, toggleTutorial, saveArticle, switchFolder } from '../actions' import { isModalOpen } from 'browser/lib/modal' import keygen from 'browser/lib/keygen' const electron = require('electron') const remote = electron.remote const ipc = electron.ipcRenderer const OSX = global.process.platform === 'darwin' const BRAND_COLOR = '#18AF90' const searchTutorialElement = ( ) export default class ArticleTopBar extends React.Component { constructor (props) { super(props) this.saveAllHandler = e => { if (isModalOpen()) return true this.handleSaveAllButtonClick(e) } this.focusSearchHandler = e => { if (isModalOpen()) return true this.focusInput(e) } this.newPostHandler = e => { if (isModalOpen()) return true this.handleNewPostButtonClick(e) } this.state = { isTooltipHidden: true, isLinksDropdownOpen: false } } componentDidMount () { this.searchInput = ReactDOM.findDOMNode(this.refs.searchInput) this.linksButton = ReactDOM.findDOMNode(this.refs.links) this.showLinksDropdown = e => { e.preventDefault() e.stopPropagation() if (!this.state.isLinksDropdownOpen) { this.setState({isLinksDropdownOpen: true}) } } this.linksButton.addEventListener('click', this.showLinksDropdown) this.hideLinksDropdown = e => { if (this.state.isLinksDropdownOpen) { this.setState({isLinksDropdownOpen: false}) } } document.addEventListener('click', this.hideLinksDropdown) ipc.on('top-save-all', this.saveAllHandler) ipc.on('top-focus-search', this.focusSearchHandler) ipc.on('top-new-post', this.newPostHandler) } componentWillUnmount () { document.removeEventListener('click', this.hideLinksDropdown) this.linksButton.removeEventListener('click', this.showLinksDropdown()) ipc.removeListener('top-save-all', this.saveAllHandler) ipc.removeListener('top-focus-search', this.focusSearchHandler) ipc.removeListener('top-new-post', this.newPostHandler) } handleTooltipRequest (e) { if (this.searchInput.value.length === 0 && (document.activeElement === this.searchInput)) { this.setState({isTooltipHidden: false}) } else { this.setState({isTooltipHidden: true}) } } isInputFocused () { return document.activeElement === ReactDOM.findDOMNode(this.refs.searchInput) } escape () { let { status, dispatch } = this.props if (status.search.length > 0) { dispatch(clearSearch()) return } } focusInput () { console.log('focinp') this.searchInput.focus() } blurInput () { this.searchInput.blur() } handleSearchChange (e) { let { dispatch } = this.props dispatch(setSearchFilter(e.target.value)) this.handleTooltipRequest() } handleSearchClearButton (e) { this.searchInput.value = '' this.focusInput() } handleNewPostButtonClick (e) { let { dispatch, folders, status } = this.props let { targetFolders } = status let isFolderFilterApplied = targetFolders.length > 0 let FolderKey = isFolderFilterApplied ? targetFolders[0].key : folders[0].key let newArticle = { key: keygen(), title: '', content: '', mode: 'markdown', tags: [], FolderKey: FolderKey, craetedAt: new Date(), updatedAt: new Date() } dispatch(saveArticle(newArticle.key, newArticle, true)) if (isFolderFilterApplied) dispatch(switchFolder(targetFolders[0].name)) remote.getCurrentWebContents().send('detail-edit') } handleTutorialButtonClick (e) { let { dispatch } = this.props dispatch(toggleTutorial()) } render () { let { status } = this.props return (