import React, {useState} from "react"; import {Conlang} from "./dbtypes"; import {updateEntry, getPassword} from "./requests"; import {declineSaimiar} from "./saimiar_morphology"; import {SaiEntryProps, JutEntryProps, ElesuEntryProps, TukEntryProps} from "./dbtypes"; interface BaseProps { id: number; conlang: Conlang; conlangEntry: string; english: string; langSpecific: React.ReactNode; } const EntryBase = (props: BaseProps) => { const [editing, setEditing] = useState(false); const [english, setEnglish] = useState(props.english); const mainEntryStyle = { display: "flex", justifyContent: "space-between", flexDirection: "row", }; const controlStyle = { display: "flex", justifyContent: "space-between", flexDirection: "row", minWidth: "20%", }; const save = () => { updateEntry(props.conlang, props.id, english); }; const engTranslation = editing ? setEnglish(evt.target.value) }/> : english; const EditControls = ({onSave}: { onSave: () => void }) => { const cancel = () => setEditing(false); const edit = (evt) => { evt.preventDefault(); setEditing(true); }; if (!getPassword()) { return null; } return (editing ? ( ) : Edit); }; const expand = (evt) => { evt.preventDefault(); }; return (
{ props.conlangEntry } { engTranslation } Expand
{ props.langSpecific }
); }; const SaiEntry = (props: {entry: SaiEntryProps}) => { const {entry} = props; const synCategory = entry.syn_category; const isNominal = synCategory === "nominal"; const langSpecific = (
{ entry.syn_category } { entry.morph_type ? `\t\t${entry.morph_type}` : null }
{ isNominal ? formatMorphology(entry) : null }
); return ; }; 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} ); } const JutEntry = (props: {entry: JutEntryProps}) => { const {entry} = props; const langSpecific = (
{entry.syn_category} { entry.syn_category === "noun" ? `- ${entry.gender}` : null }
); return ; }; const ElesuEntry = (props: {entry: ElesuEntryProps}) => { const {entry} = props; const langSpecific =
{ entry.syn_category }
; return ; }; const TukEntry = (props: {entry: TukEntryProps}) => { const {entry} = props; const langSpecific =
{ entry.syn_category }
; return ; }; export {SaiEntry, ElesuEntry, JutEntry, TukEntry};