import React, {Component} from 'react'; import './App.scss'; import {declineSaimiar} from './saimiar_morphology.js'; const backendUrl = 'https://kucinakobackend.ichigo.everydayimshuflin.com'; function makeRequest(queryString, jsonHandler) { const effectiveUrl = `${backendUrl}/${queryString}`; fetch(`${effectiveUrl}`) .then((resp) => resp.json()) .then((json) => { jsonHandler(json); }); } function renderConlangName(name) { if (name === 'saimiar') { return 'Saimiar'; } if (name === 'elesu') { return 'Elésu'; } if (name === 'juteyuji') { return 'Juteyuji'; } if (name === 'tukvaysi') { return 'Tukvaysi'; } } function Entry(props) { const {conlang} = props; if (conlang === 'saimiar') { return ; } return
Unknown entry type for { conlang }
; } function SaiEntry(props) { const {entry} = props; const synCategory = entry.syn_category; const isNominal = synCategory === 'nominal'; console.log(isNominal); return (
{ entry.sai } - { entry.eng }
{ entry.syn_category } { entry.morph_type ? `\t\t${entry.morph_type}` : null }
{ isNominal ? formatMorphology(entry) : null }
); } function formatMorphology(entry) { const decl = declineSaimiar(entry); if (!decl) { return ''; } return ( Abs: {decl.abs}, Erg: {decl.erg}, Adp: {decl.adp}, All: {decl.all}, Loc: {decl.loc}, Ell: {decl.ell}, Inst: {decl.inst}, Rel: {decl.rel} ); } class Results extends Component { constructor(props) { super(props); this.content = this.content.bind(this); } content() { const {conlang} = this.props; const num = this.props.searchResults.length; const renderedName = renderConlangName(conlang); const searchType = (this.props.direction === 'toConlang') ? `English -> ${renderedName}` : `${renderedName} -> English`; const header = (
Searched for { this.props.searchTerm }, { searchType }, found { num } result(s)
); const entries = this.props.searchResults.map( (entry, _idx) => , ); return [header].concat(entries); } render() { const results = this.props.searchResults; return (
{ results ? this.content() : 'No search' }
); } } class App extends Component { constructor(props) { super(props); this.input = React.createRef(); this.handleLangChange = this.handleLangChange.bind(this); this.searchEng = this.searchEng.bind(this); this.searchSaimiar = this.searchSaimiar.bind(this); this.state = { searchResults: null, conlang: 'saimiar', direction: null, searchTerm: null, }; } searchSaimiar(_evt) { const searchTerm = this.input.current.value; const request = `saimiar?sai=like.*${searchTerm}*`; if (searchTerm === '') { this.setState({searchResults: null, searchTerm: null, direction: null}); } else { makeRequest(request, (json) => { this.setState({searchResults: json, searchTerm, direction: 'toEnglish'}); }); } } searchEng(_evt) { const searchTerm = this.input.current.value; const request = `saimiar?eng=like.*${searchTerm}*`; if (searchTerm === '') { this.setState({searchResults: null, searchTerm: null}); } else { makeRequest(request, (json) => { this.setState({searchResults: json, searchTerm, direction: 'toConlang'}); }); } } handleLangChange(evt) { const conlang = evt.target.value; this.setState({conlang}); } render() { return (

Kucinako


); } } export default App;