diff --git a/src/components/TensePicker.tsx b/src/components/TensePicker.tsx new file mode 100644 index 0000000..081933e --- /dev/null +++ b/src/components/TensePicker.tsx @@ -0,0 +1,180 @@ +import Select from "react-select"; +import { + zIndexProps, +} from "./np-picker/picker-tools"; +import { + ButtonSelect, +} from "@lingdocs/pashto-inflector"; +import { isPerfectTense } from "../lib/phrase-building/vp-tools"; + +const tenseOptions: { label: string | JSX.Element, value: VerbTense }[] = [{ + label:
present
, + value: "presentVerb", +}, { + label:
subjunctive
, + value: "subjunctiveVerb", +}, { + label:
imperf. future
, + value: "imperfectiveFuture", +}, { + label:
perf. future
, + value: "perfectiveFuture", +}, { + label:
continuous past
, + value: "imperfectivePast", +}, { + label:
simple past
, + value: "perfectivePast", +}, { + label:
habitual cont. past
, + value: "habitualImperfectivePast", +}, { + label:
habitual simp. past
, + value: "habitualPerfectivePast", +}]; + +const perfectTenseOptions: { label: string | JSX.Element, value: PerfectTense }[] = [{ + label: "Present Perfect", + value: "present perfect", +}, { + label: "Habitual Perfect", + value: "habitual perfect", +}, { + label: "Subjunctive Perfect", + value: "subjunctive perfect", +}, { + label: "Future Perfect", + value: "future perfect", +}, { + label: "Past Perfect", + value: "past perfect", +}, { + label: `"Would Be" Perfect`, + value: "wouldBe perfect", +}, { + label: "Past Subjunctive Perfect", + value: "pastSubjunctive perfect", +}]; + +function TensePicker({ onChange, verb, mode }: { + verbs: VerbEntry[], + verb: VerbSelection | undefined, + onChange: (p: VerbSelection | undefined) => void, + mode: "charts" | "phrases", +}) { + function onTenseSelect(o: { value: VerbTense | PerfectTense } | null) { + const value = o?.value ? o.value : undefined; + if (verb && value) { + if (isPerfectTense(value)) { + onChange({ + ...verb, + tense: value, + tenseCategory: "perfect", + }); + } else { + onChange({ + ...verb, + tense: value, + tenseCategory: verb.tenseCategory === "perfect" ? "basic" : verb.tenseCategory, + }); + } + } + } + function moveTense(dir: "forward" | "back") { + if (!verb) return; + return () => { + const tenses = verb.tenseCategory === "perfect" ? perfectTenseOptions : tenseOptions; + const currIndex = tenses.findIndex(tn => tn.value === verb.tense) + if (currIndex === -1) { + console.error("error moving tense", dir); + return; + } + const newIndex = dir === "forward" + ? ((currIndex + 1) % tenses.length) + : (currIndex === 0 ? (tenses.length - 1) : (currIndex - 1)) + const newTense = tenses[newIndex]; + onTenseSelect(newTense); + }; + } + function onPosNegSelect(value: string) { + if (verb) { + onChange({ + ...verb, + negative: value === "true", + }); + } + } + function onTenseCategorySelect(value: "basic" | "modal" | "perfect") { + if (verb) { + if (value === "perfect") { + onChange({ + ...verb, + tenseCategory: value, + tense: isPerfectTense(verb.tense) ? verb.tense : "present perfect", + }); + } else { + onChange({ + ...verb, + tenseCategory: value, + tense: isPerfectTense(verb.tense) ? "presentVerb" : verb.tense, + }); + } + } + } + const tOptions = (verb?.tenseCategory === "perfect") ? perfectTenseOptions : tenseOptions; + return
+
+
+
Tense:
+ {verb &&
+ +
} +
+