import React, { Component } from 'react'; import { Searchbar, Popover, Popup, View, Page, List, ListItem, Navbar, NavRight, Link } from 'framework7-react'; import { Toggle } from 'framework7-react'; import { f7 } from 'framework7-react'; import { Dom7 } from 'framework7'; import { Device } from '../../../../common/mobile/utils/device'; import { observable, runInAction } from "mobx"; import { observer } from "mobx-react"; const searchOptions = observable({ usereplace: false, isReplaceAll: false }); const popoverStyle = { height: '300px' }; const SEARCH_BACKWARD = 'back'; const SEARCH_FORWARD = 'next'; class SearchSettingsView extends Component { constructor(props) { super(props); this.state = { useReplace: false, // caseSensitive: false, // markResults: false searchIn: 0, searchBy: 1, lookIn: 1, isMatchCase: false, isMatchCell: false, isReplaceAll: false }; } onFindReplaceClick(action) { runInAction(() => { searchOptions.usereplace = action == 'replace'; searchOptions.isReplaceAll = action == 'replace-all'; }); this.setState({ useReplace: searchOptions.usereplace, isReplaceAll: searchOptions.isReplaceAll }); if (this.onReplaceChecked) {} } extraSearchOptions() { } render() { const show_popover = !Device.phone; // const navbar = // // {!show_popover && // // Done // // } // ; const extra = this.extraSearchOptions(); const content = {/* {navbar} */} {extra} {/* */} ; return ( show_popover ? {content} : {content} ) } } // @observer class SearchView extends Component { constructor(props) { super(props); this.state = { searchQuery: '', replaceQuery: '' }; this.onSettingsClick = this.onSettingsClick.bind(this); this.onSearchClick = this.onSearchClick.bind(this); this.onReplaceClick = this.onReplaceClick.bind(this); } componentDidMount(){ this.$replace = $$('#idx-replace-val'); const $editor = $$('#editor_sdk'); this.onEditorTouchStart = this.onEditorTouchStart.bind(this); this.onEditorTouchEnd = this.onEditorTouchEnd.bind(this); $editor.on('pointerdown', this.onEditorTouchStart); $editor.on('pointerup', this.onEditorTouchEnd); if( !this.searchbar ) { this.searchbar = f7.searchbar.get('.searchbar'); } if( !this.searchbar ) { this.searchbar = f7.searchbar.create({ el: '.searchbar', customSearch: true, expandable: true, backdrop: false, on: { search: (bar, curval, prevval) => { }, enable: this.onSearchbarShow.bind(this, true), disable: this.onSearchbarShow.bind(this, false) } }); } } componentWillUnmount() { $$('#editor_sdk').off('pointerdown', this.onEditorTouchStart) .off('pointerup', this.onEditorTouchEnd); } onSettingsClick(e) { if ( Device.phone ) { f7.popup.open('.search-settings-popup'); } else f7.popover.open('#idx-search-settings', '#idx-btn-search-settings'); } searchParams() { let params = { find: this.searchbar.query }; if (searchOptions.usereplace || searchOptions.isReplaceAll) { params.replace = this.$replace.val(); } return params; } onSearchClick(action) { if (this.searchbar && this.state.searchQuery) { if (this.props.onSearchQuery) { let params = this.searchParams(); params.find = this.state.searchQuery; params.forward = action != SEARCH_BACKWARD; // console.log(params); this.props.onSearchQuery(params); } } } onReplaceClick() { if (this.searchbar && this.state.replaceQuery) { if (this.props.onReplaceQuery) { let params = this.searchParams(); params.find = this.state.searchQuery; // console.log(params); this.props.onReplaceQuery(params); } } } onReplaceAllClick() { if (this.searchbar && this.state.replaceQuery) { if (this.props.onReplaceAllQuery) { let params = this.searchParams(); params.find = this.state.searchQuery; // console.log(params); this.props.onReplaceAllQuery(params); } } } onSearchbarShow(isshowed, bar) { if ( !isshowed ) { this.$replace.val(''); } } onEditorTouchStart(e) { console.log('taouch start'); this.startPoint = this.pointerPosition(e); } onEditorTouchEnd(e) { const endPoint = this.pointerPosition(e); if (this.searchbar.enabled) { let distance; if(this.startPoint) { distance = (this.startPoint.x === undefined || this.startPoint.y === undefined) ? 0 : Math.sqrt((endPoint.x -= this.startPoint.x) * endPoint.x + (endPoint.y -= this.startPoint.y) * endPoint.y); } else { distance = 0; } if (distance < 1) { this.searchbar.disable(); } } } pointerPosition(e) { let out = {x:0, y:0}; if ( e.type == 'pointerdown' || e.type == 'pointerup' || e.type == 'mousedown' || e.type == 'mouseup') { out.x = e.pageX; out.y = e.pageY; } return out; } changeSearchQuery(value) { this.setState({ searchQuery: value }); this.props.onchangeSearchQuery(value); } changeReplaceQuery(value) { this.setState({ replaceQuery: value }); } render() { const usereplace = searchOptions.usereplace; const isReplaceAll = searchOptions.isReplaceAll; const hidden = {display: "none"}; const searchQuery = this.state.searchQuery; const replaceQuery = this.state.replaceQuery; const isIos = Device.ios; const { _t } = this.props; if(this.searchbar && this.searchbar.enabled) { usereplace || isReplaceAll ? this.searchbar.el.classList.add('replace') : this.searchbar.el.classList.remove('replace'); } return (
{isIos ?
: null}
{this.changeSearchQuery(e.target.value)}} /> {isIos ? : null} this.changeSearchQuery('')} />
{/* {usereplace || isReplaceAll ? */}
{/* style={!usereplace ? hidden: null} */} {this.changeReplaceQuery(e.target.value)}} /> {isIos ? : null} this.changeReplaceQuery('')} />
{/* */}
) } } const SearchViewWithObserver = observer(SearchView); const SearchSettingsViewWithObserver = observer(SearchSettingsView); export {SearchViewWithObserver as SearchView, SearchSettingsViewWithObserver as SearchSettingsView};