import React, {useState} from 'react'; import './App.scss'; import {SaiEntryProps, JutEntryProps, ElesuEntryProps, TukEntryProps} from './dbtypes'; import {SaiEntry, JutEntry, ElesuEntry, TukEntry} from './Entries'; const backendUrl = 'https://kucinakobackend.ichigo.everydayimshuflin.com'; enum Conlang { Saimiar = 'saimiar', Elesu = 'elesu', Tukvaysi = 'tukvaysi', Juteyuji = 'juteyuji', } enum SearchDirection { ToConlang, ToEnglish } const renderConlang = (conlang: Conlang): string => { if (conlang === Conlang.Saimiar) { return 'Saimiar'; } if (conlang === Conlang.Elesu) { return 'Elésu'; } if (conlang === Conlang.Juteyuji) { return 'Juteyuji'; } if (conlang === Conlang.Tukvaysi) { return 'Tukvaysi'; } }; function buildRequest(searchTerm: string, conlang: Conlang, direction: SearchDirection, jsonHandler: (json: Object) => void) { const specForConlang = { [Conlang.Saimiar]: 'sai', [Conlang.Juteyuji]: 'jut', [Conlang.Tukvaysi]: 'tuk', [Conlang.Elesu]: 'elesu', }; const conlangDb = conlang.toString(); const field = direction === SearchDirection.ToConlang ? 'eng' : specForConlang[conlang]; const query = `${conlangDb}?${field}=like.*${searchTerm}*`; const effectiveUri = `${backendUrl}/${query}`; fetch(`${effectiveUri}`) .then((resp) => resp.json()) .then((json) => { jsonHandler(json); }); } interface EntryProps { conlang: Conlang; entry: SaiEntryProps | JutEntryProps | ElesuEntryProps | TukEntryProps; key: string; } const Entry = (props: EntryProps) => { const {conlang} = props; if (conlang === Conlang.Saimiar) { return ; } if (conlang === Conlang.Juteyuji) { return ; } if (conlang === Conlang.Elesu) { return ; } if (conlang === Conlang.Tukvaysi) { return ; } }; interface ResultsProps { searchResults: Array; searchTerm: string; conlang: Conlang; direction: SearchDirection; } const Results = (props: ResultsProps) => { const content = () => { const {conlang} = props; const num = props.searchResults.length; const renderedName = renderConlang(conlang); const searchType = (props.direction === SearchDirection.ToConlang) ? `English -> ${renderedName}` : `${renderedName} -> English`; const header = (
Searched for { props.searchTerm }, { searchType }, found { num } result(s)
); const entries = props.searchResults.map( (entry, _idx) => , ); return [header].concat(entries); }; const results = props.searchResults; return (
{ results ? content() : 'No search' }
); }; const App = (_props) => { const defaultConlang = window.sessionStorage.getItem('conlang') as Conlang || Conlang.Saimiar; const [searchResults, setSearchResults] = useState(null); const [conlang, setConlangState] = useState(defaultConlang); const [direction, setDirection] = useState(null); const [searchTerm, setSearchTerm] = useState(null); const [searchBoxInput, setSearchBoxInput] = useState(''); const setConlang = (conlang: Conlang) => { setConlangState(conlang); window.sessionStorage.setItem('conlang', conlang); }; const searchConlang = (_evt) => { const searchTerm = searchBoxInput; if (searchTerm === '') { setSearchResults(null); setSearchTerm(null); setDirection(null); return; } buildRequest(searchTerm, conlang, SearchDirection.ToEnglish, (json) => { setSearchResults(json); setSearchTerm(searchTerm); setDirection(SearchDirection.ToEnglish); }); }; const searchEng = (_evt) => { const searchTerm = searchBoxInput; if (searchTerm === '') { setSearchResults(null); setSearchTerm(null); setDirection(null); } else { buildRequest(searchTerm, conlang, SearchDirection.ToConlang, (json) => { setSearchResults(json); setSearchTerm(searchTerm); setDirection(SearchDirection.ToConlang); }); } }; const handleLangChange = (evt) => { const conlang: Conlang = evt.target.value as Conlang; setConlang(conlang); setSearchResults(null); }; const conlangs = [Conlang.Saimiar, Conlang.Elesu, Conlang.Tukvaysi, Conlang.Juteyuji]; const langSelectDropdown = ( ); return (

Kucinako - Wordbook of Arzhanai languages

Kucinako is a dictionary of words in various languages of the world Arzhanø, and their English equivalents.

{ setSearchBoxInput(evt.target.value); } } />

{ langSelectDropdown }
); }; export default App;