import * as React from 'react'; import { // Button, // Classes, // InputGroup, // Intent, // Menu, // MenuItem, // Popover, // Position, // Spinner, // Switch, // Tag, // Tooltip, FocusStyleManager, } from '@blueprintjs/core'; import * as XML from 'xml2js'; import * as XPath from 'xml2js-xpath'; // import { Table } from '@blueprintjs/table'; FocusStyleManager.onlyShowFocusOnTabs(); // const logo = require('./logo.svg'); class App extends React.Component<{}, null> { render() { return (
); } } type ReactEvent = React.ChangeEvent; interface LexEditorProps { fileName: RequestInfo; } class LexEditor extends React.Component { constructor(props: LexEditorProps) { super(props); this.handleOnSearch = this.handleOnSearch.bind(this); this.state = { lexData: {}, matchedEntries: [] }; } public componentDidMount() { return fetch(this.props.fileName) .then((response) => response.text()) .then((xmlString) => { XML.parseString(xmlString, (err, lexData) => { this.setState({ ...this.state, lexData }); }); }); // .catch((error) => { // console.error(error); // }); } public render() { return (
); } private handleOnSearch(event: ReactEvent): void { let searchText = event.target.value; // this.setState({ ...this.state, searchText }); let pathQ = './/lang'; let words = XPath.find(this.state.lexData.document, pathQ); let matchedEntries = words.filter((obj) => { if (obj.label[0] === searchText) { return true; } return false; }); this.setState({ ...this.state, matchedEntries }); } } interface LexSearchProps { handleOnSearch: (e: ReactEvent) => void; } class LexSearch extends React.Component { public render() { return (
this.props.handleOnSearch(e)} />
); } } class LexMatches extends React.Component { public render() { return (
{this.props.matchedEntries.map((mObj: any) => { console.log('Matched ObjectEntry' + mObj); return (); })}
); } } class LexEntry extends React.Component { public render() { return (
); } } export default App;