tipsypastels

Untitled

Dec 31st, 2018
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import React, { Component } from 'react';
  2.  
  3. class InlineSearch extends Component {
  4.   constructor(props) {
  5.     super(props);
  6.     this.state = {
  7.       words: '',
  8.       tokens: {},
  9.     };
  10.   }
  11.  
  12.   handleKeyup = (e) => {
  13.     let { value } = e.target;
  14.  
  15.     let tokens  = {};
  16.     let wordsAr = [];
  17.     let hangingToken = null;
  18.  
  19.     value.split(' ').forEach(word => {
  20.       if (hangingToken) {
  21.         tokens[hangingToken] = word;
  22.         hangingToken = undefined;
  23.       } else if (word.split(':').length === 2 && !word.endsWith(':')) {
  24.         let [token, value] = word.split(':');
  25.         tokens[token] = value;
  26.       } else if (word.endsWith(':')) {
  27.         hangingToken = word.substring(0, word.length - 1);
  28.       } else {
  29.         wordsAr.push(word);
  30.       }
  31.       console.log(hangingToken);
  32.     });
  33.  
  34.     let words = wordsAr.join(' ');
  35.     this.setState({ words, tokens })
  36.   }
  37.  
  38.   getOutput() {
  39.     let { tokens } = this.state;
  40.     let mappedTokens = Object.keys(tokens).map(t => `${t}: ${tokens[t]}`).join('<br />');
  41.  
  42.     return (
  43.       <>
  44.         <div>
  45.           <h2>Search String</h2>
  46.           {this.state.words}
  47.         </div>
  48.  
  49.         <div>
  50.           <h2>Tokens</h2>
  51.           {mappedTokens}
  52.         </div>
  53.       </>
  54.     )
  55.   }
  56.  
  57.   render() {
  58.     return (
  59.       <div className="InlineSearch" style={{margin: '1em'}}>
  60.         <input onChange={this.handleKeyup} className="search" type="text" />
  61.  
  62.         <div style={{marginTop: '1em'}}>
  63.           <h1>
  64.             Results
  65.           </h1>
  66.  
  67.           {this.getOutput()}
  68.         </div>
  69.       </div>
  70.     )
  71.   }
  72. }
  73.  
  74. export default InlineSearch;
Add Comment
Please, Sign In to add comment