import React from 'react'; import {Link} from './link.js'; import {Icon, CreditAmount} from './common.js'; var Header = React.createClass({ _balanceSubscribeId: null, _isMounted: false, getInitialState: function() { return { balance: 0 }; }, componentDidMount: function() { this._isMounted = true; this._balanceSubscribeId = lbry.balanceSubscribe((balance) => { if (this._isMounted) { this.setState({balance: balance}); } }); }, componentWillUnmount: function() { this._isMounted = false; if (this._balanceSubscribeId) { lbry.balanceUnsubscribe(this._balanceSubscribeId) } }, render: function() { return } }); let WunderBar = React.createClass({ _userTypingTimer: null, _input: null, _stateBeforeSearch: null, propTypes: { onSearch: React.PropTypes.func.isRequired }, getInitialState: function() { return { address: this.props.address, icon: this.props.icon }; }, componentWillUnmount: function() { if (this.userTypingTimer) { clearTimeout(this._userTypingTimer); } }, onChange: function(event) { if (this._userTypingTimer) { clearTimeout(this._userTypingTimer); } this.setState({ address: event.target.value }) let searchTerm = event.target.value; this._userTypingTimer = setTimeout(() => { this.props.onSearch(searchTerm); }, 800); // 800ms delay, tweak for faster/slower }, componentWillReceiveProps(nextProps) { if (nextProps.viewingPage !== this.props.viewingPage) { this.setState({ address: nextProps.address, icon: nextProps.icon }); } }, onFocus: function() { this._stateBeforeSearch = this.state; let newState = { icon: "icon-search", isActive: true } // this._input.value = ""; //trigger placeholder this._focusPending = true; //below is hacking, improved when we have proper routing if (!this.state.address.startsWith('lbry://') && this.state.icon !== "icon-search") //onFocus, if they are not on an exact URL or a search page, clear the bar { newState.address = ''; } this.setState(newState); }, onBlur: function() { this.setState(Object.assign({}, this._stateBeforeSearch, { isActive: false })); this._input.value = this.state.address; }, componentDidUpdate: function() { this._input.value = this.state.address; if (this._input && this._focusPending) { this._input.select(); this._focusPending = false; } }, onReceiveRef: function(ref) { this._input = ref; }, render: function() { return (
{this.state.icon ? : '' }
); } }) export let SubHeader = React.createClass({ render: function() { let links = [], viewingUrl = '?' + this.props.viewingPage; for (let link of Object.keys(this.props.links)) { links.push( {this.props.links[link]} ); } return ( ); } }); export default Header;