diff --git a/src/components/VerbPicker.tsx b/src/components/VerbPicker.tsx index 4a2f139..955fc1b 100644 --- a/src/components/VerbPicker.tsx +++ b/src/components/VerbPicker.tsx @@ -54,7 +54,7 @@ function makeVerbSelection(verb: VerbEntry, oldVerbSelection?: VerbSelection): V } function VerbPicker({ onChange, verb, verbs }: { verbs: VerbEntry[], verb: VerbSelection | undefined, onChange: (p: VerbSelection) => void }) { - const options = verbs.map(makeVerbSelectOption) + const options = verbs.sort((a, b) => (a.entry.p.localeCompare(b.entry.p, "af-PS"))).map(makeVerbSelectOption); function onEntrySelect({ value }: { label: string, value: string }) { const v = verbs.find(v => v.entry.ts.toString() === value); if (!v) { @@ -79,7 +79,7 @@ function VerbPicker({ onChange, verb, verbs }: { verbs: VerbEntry[], verb: VerbS }); } } - return
+ return
Verb:
void, np: NPSelection | undefined, counterPart: NPSelection | VerbObject | undefined }) { +function NPPicker({ np, onChange, counterPart, asObject }: { onChange: (nps: NPSelection | undefined) => void, np: NPSelection | undefined, counterPart: NPSelection | VerbObject | undefined, asObject?: boolean }) { // eslint-disable-next-line const [npType, setNpType] = useState(np ? np.type : undefined); function handleClear() { @@ -50,7 +50,7 @@ function NPPicker({ np, onChange, counterPart }: { onChange: (nps: NPSelection | : } {np ? ((np.type === "pronoun" - ? + ? : np.type === "noun" ? : )) diff --git a/src/components/np-picker/NPPronounPicker.tsx b/src/components/np-picker/NPPronounPicker.tsx index 71636ea..d0b9809 100644 --- a/src/components/np-picker/NPPronounPicker.tsx +++ b/src/components/np-picker/NPPronounPicker.tsx @@ -10,13 +10,17 @@ const gColors = { fem: "pink", }; -const labels = { +const labels = (asObject: boolean) => ({ persons: [ ["1st", "1st pl."], ["2nd", "2nd pl."], ["3rd", "3rd pl."], ], - e: [ + e: asObject ? [ + ["me", "us"], + ["you", "you pl."], + [{ masc: "him/it", fem: "her/it"}, "them"], + ] : [ ["I", "We"], ["You", "You pl."], [{ masc: "He/It", fem: "She/It"}, "They"], @@ -33,7 +37,7 @@ const labels = { [{ masc: "دی", fem: "دا" }, "دوي"], ], }, -}; +}); type PickerState = { row: number, col: number, gender: T.Gender }; @@ -51,7 +55,7 @@ function pickerStateToPerson(s: PickerState): T.Person { + (6 * s.col); } -function NPPronounPicker({ onChange, pronoun }: { pronoun: PronounSelection, onChange: (p: PronounSelection) => void }) { +function NPPronounPicker({ onChange, pronoun, asObject }: { pronoun: PronounSelection, onChange: (p: PronounSelection) => void , asObject?: boolean }) { const [display, setDisplay] = useStickyState<"persons" | "p" | "e">("persons", "prounoun-picker-display"); const p = personToPickerState(pronoun.person); @@ -83,9 +87,9 @@ function NPPronounPicker({ onChange, pronoun }: { pronoun: PronounSelection, onC : "persons"; setDisplay(newPerson); } - const prs = labels[display]; + const prs = labels(!!asObject)[display]; const pSpec = "near" in prs ? prs[pronoun.distance] : prs; - return
+ return
- +
{pSpec.map((rw, i) => ( diff --git a/src/components/np-picker/PronounPicker.tsx b/src/components/np-picker/PronounPicker.tsx index b78e127..aefd9ea 100644 --- a/src/components/np-picker/PronounPicker.tsx +++ b/src/components/np-picker/PronounPicker.tsx @@ -111,7 +111,7 @@ function PronounPicker({ onChange, pronoun, isObject }: { /> -
+
{pSpec.map((rw, i) => ( diff --git a/src/components/phrase-builder/ObjectDisplay.tsx b/src/components/phrase-builder/ObjectDisplay.tsx index c146464..1bb03da 100644 --- a/src/components/phrase-builder/ObjectDisplay.tsx +++ b/src/components/phrase-builder/ObjectDisplay.tsx @@ -3,7 +3,7 @@ import NPPicker from "../np-picker/NPPicker"; function ObjectDisplay({ object, onChange, counterPart }: { object: Exclude, onChange: (o: NPSelection | undefined) => void, counterPart: NPSelection | undefined }) { return (typeof object === "number") ?
Unspoken 3rd Pers. Masc. Plur.
- : ; + : ; } export default ObjectDisplay; diff --git a/src/components/phrase-builder/PhraseBuilder.tsx b/src/components/phrase-builder/PhraseBuilder.tsx index 7462670..cebf9d7 100644 --- a/src/components/phrase-builder/PhraseBuilder.tsx +++ b/src/components/phrase-builder/PhraseBuilder.tsx @@ -9,7 +9,9 @@ import { isInvalidSubjObjCombo, } from "../../lib/np-tools"; -const verbs = verbsRaw.filter(v => !v.entry.c?.includes("gramm.")) +const kingEmoji = "👑"; +const servantEmoji = "🙇‍♂️"; +const verbs = verbsRaw; function verbPhraseComplete({ subject, verb }: { subject: NPSelection | undefined, verb: VerbSelection | undefined }): VPSelection | undefined { if (!subject) return undefined; @@ -23,6 +25,14 @@ function verbPhraseComplete({ subject, verb }: { subject: NPSelection | undefine }; } +function showRole(VP: VPRendered | undefined, member: "subject" | "object") { + return VP + ? + {(VP.king === member ? kingEmoji : VP.servant === member ? servantEmoji : "")} + + : ""; +} + // TODO: BIG ISSUE, IF YOU OPEN THE OBJECT PRONOUN BOX AND IT CONFLICTS WITH THE SUBJECT // IT CAN SAY THE COMBO IS NOT ALLOWED AND SHOW SOMETHING BLANK // TODO: error handling on error with rendering etc @@ -64,9 +74,13 @@ export function PhraseBuilder() { const verbPhrase: VPSelection | undefined = verbPhraseComplete({ subject, verb }); const VPRendered = verbPhrase && renderVP(verbPhrase); return
+
+
{kingEmoji} = king of phrase
+
{servantEmoji} = servant of phrase
+
-
Subject {(VPRendered && VPRendered.king === "subject") ? "👑" : ""}
+
Subject {showRole(VPRendered, "subject")}
{verb && (verb.object !== "none") &&
-
Object {(VPRendered && VPRendered.king === "object") ? "👑" : ""}
+
Object {showRole(VPRendered, "object")}
}
diff --git a/src/components/phrase-builder/VPDisplay.tsx b/src/components/phrase-builder/VPDisplay.tsx index dfa023f..f094167 100644 --- a/src/components/phrase-builder/VPDisplay.tsx +++ b/src/components/phrase-builder/VPDisplay.tsx @@ -22,7 +22,7 @@ function VPDisplay({ VP }: { VP: VPSelection }) { const [form, setForm] = useState("full"); // TODO: Possibly put the servant shrinking in here after the render const result = compileVP(renderVP(VP), form); - const servantShrinkable = VP.object && typeof VP.object === "object"; + const servantShrinkable = VP.object && VP.object !== "none"; return