import React, {useState} from "react"; import {updateEntry, getPassword} from "./requests"; import {declineSaimiar} from "./saimiar_morphology"; import {SaiEntryProps, JutEntryProps, ElesuEntryProps, TukEntryProps, Conlang} from "./types"; 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); }; return (
{ props.conlangEntry } { engTranslation }
{ props.langSpecific }
); }; const SaiEntry = (props: {entry: SaiEntryProps}) => { const {entry} = props; const synCategory = entry.syn_category; const isNominal = synCategory === "nominal"; const barStyle = { display: "inline-flex", gap: "1em", }; let morphology = null; if (isNominal) { const decl = declineSaimiar(entry); if (decl) { morphology = ( 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 langSpecific = (
{ entry.syn_category } { entry.morph_type ? `\t\t${entry.morph_type}` : null } { entry.etym ? etym.: {entry.etym} : null } { entry.semantic_field ? {entry.semantic_field} : null }
{ morphology }
); return ; }; 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};