var characterList = require('./dev/characterlist.json') let uniqueCharacters = characterList.filter((item, pos, self) => self.findIndex(c => c["Athenea"] == item["Athenea"]) == pos) var newState = {} import React, { Component } from 'react'; import { AppRegistry, StyleSheet, Text, View, WebView, Dimensions, ToolbarAndroid, StatusBar, ScrollView, Animated, FlatList, Image, TouchableNativeFeedback } from 'react-native'; import ActionButton from 'react-native-action-button'; import Interactable from 'react-native-interactable'; import WebViewBridge from 'react-native-webview-bridge'; export default class TeXDraw extends Component { state = { _deltaY: new Animated.Value(0), _drawerPadding: new Animated.Value(38), recognitions:[], NNHasLoaded:false, toBeRecognized:"" } render() { return ( {this.textToShow()} {characterList[item.key]["Latex"]} {characterList[item.key]["Package"]} } /> ); } onBridgeMessage(webViewData) { var str if(webViewData==undefined) str = this.state.toBeRecognized else str = webViewData.nativeEvent.data if(str=="[]"){ this.setState({'recognitions':[]}) newState = [] } else{ if(this.state.NNHasLoaded){ this.refs.texdrawwebview.sendToBridge(str) } else{ this.setState({'toBeRecognized':str}) setTimeout(this.onBridgeMessage.bind(this),300) } } } onTeXDrawMessage(webViewData) { if(webViewData == "loaded"){ //alert("loaded") this.refs.webviewbridge.postMessage("loaded"); this.setState({'NNHasLoaded':true}) } else{ let jsonData = JSON.parse(webViewData); let result = Object.keys(jsonData).map(k => jsonData[k]) let sorted = result.slice(0,).sort((a,b) => b-a) newState = sorted.slice(0,30).map(v => { let index = result.indexOf(v) return {key: index} }) newState = newState.map(item => { return characterList.filter(c => c["Athenea"]==uniqueCharacters[item.key]["Athenea"]).map(c => characterList.findIndex(p => p["Latex"]==c["Latex"])) }) //alert(JSON.stringify(newState)) newState = Array.prototype.concat(...newState).map(n => ({"key":n})) //alert(JSON.stringify(newState)) var ra = Math.floor(Math.random()*800) this.setState({'recognitions':newState.slice(0,5)}) setTimeout((function(){ this.setState({'recognitions':newState}) }).bind(this), 400) setTimeout(Animated.timing( this.state._drawerPadding, {toValue: 10, duration:300} ).start, 50) } } clearCanvas() { this.refs.webviewbridge.postMessage("clear"); setTimeout((function(){ this.setState({'recognitions':[]}) newState = [] }).bind(this), 200) } menuOpened(e) { this.refs.interactableView.changePosition({x: 0, y: 56}); this.refs.interactableView.setVelocity({y: 0}); } textToShow(){ if(this.state.recognitions.length==0){ return 'Draw a symbol' } else{ return 'Pull up for results' } } getDrawerHeight(){ return 130 } } const styles = StyleSheet.create({ }); AppRegistry.registerComponent('TeXDraw', () => TeXDraw);