| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390 |
- import { useIntl } from "react-intl";
- import { Cascader } from "antd";
- import { useEffect, useState } from "react";
- interface CascaderOption {
- value: string | number;
- label: string;
- children?: CascaderOption[];
- }
- interface IWidget {
- value?: string | null;
- readonly?: boolean;
- onCaseChange?: Function;
- }
- const SelectCaseWidget = ({
- value,
- readonly = false,
- onCaseChange,
- }: IWidget) => {
- const intl = useIntl();
- const [currValue, setCurrValue] = useState<(string | number)[]>();
- useEffect(() => {
- if (typeof value === "string") {
- const arrValue = value
- ?.replaceAll("#", "$")
- .replaceAll(":", ".$.")
- .split("$")
- .map((item) => item.replaceAll(".", ""));
- setCurrValue(arrValue);
- }
- }, [value]);
- const case8 = [
- {
- value: "nom",
- label: intl.formatMessage({ id: "dict.fields.type.nom.label" }),
- },
- {
- value: "acc",
- label: intl.formatMessage({ id: "dict.fields.type.acc.label" }),
- },
- {
- value: "gen",
- label: intl.formatMessage({ id: "dict.fields.type.gen.label" }),
- },
- {
- value: "dat",
- label: intl.formatMessage({ id: "dict.fields.type.dat.label" }),
- },
- {
- value: "inst",
- label: intl.formatMessage({ id: "dict.fields.type.inst.label" }),
- },
- {
- value: "abl",
- label: intl.formatMessage({ id: "dict.fields.type.abl.label" }),
- },
- {
- value: "loc",
- label: intl.formatMessage({ id: "dict.fields.type.loc.label" }),
- },
- {
- value: "voc",
- label: intl.formatMessage({ id: "dict.fields.type.voc.label" }),
- },
- {
- value: "?",
- label: intl.formatMessage({ id: "dict.fields.type.?.label" }),
- },
- ];
- const case2 = [
- {
- value: "sg",
- label: intl.formatMessage({ id: "dict.fields.type.sg.label" }),
- children: case8,
- },
- {
- value: "pl",
- label: intl.formatMessage({ id: "dict.fields.type.pl.label" }),
- children: case8,
- },
- {
- value: "?",
- label: intl.formatMessage({ id: "dict.fields.type.?.label" }),
- },
- ];
- const case3 = [
- {
- value: "m",
- label: intl.formatMessage({ id: "dict.fields.type.m.label" }),
- children: case2,
- },
- {
- value: "nt",
- label: intl.formatMessage({ id: "dict.fields.type.nt.label" }),
- children: case2,
- },
- {
- value: "f",
- label: intl.formatMessage({ id: "dict.fields.type.f.label" }),
- children: case2,
- },
- ];
- const case3_ti = [
- ...case3,
- {
- value: "base",
- label: intl.formatMessage({ id: "dict.fields.type.base.label" }),
- children: [
- {
- value: "base",
- label: intl.formatMessage({ id: "dict.fields.type.base.label" }),
- },
- {
- value: "prp",
- label: intl.formatMessage({ id: "dict.fields.type.prp.label" }),
- },
- {
- value: "pp",
- label: intl.formatMessage({ id: "dict.fields.type.pp.label" }),
- },
- {
- value: "fpp",
- label: intl.formatMessage({ id: "dict.fields.type.fpp.label" }),
- },
- ],
- },
- ];
- const case3_pron = [
- ...case3,
- {
- value: "1p",
- label: intl.formatMessage({ id: "dict.fields.type.1p.label" }),
- children: case2,
- },
- {
- value: "2p",
- label: intl.formatMessage({ id: "dict.fields.type.2p.label" }),
- children: case2,
- },
- {
- value: "3p",
- label: intl.formatMessage({ id: "dict.fields.type.3p.label" }),
- children: case2,
- },
- {
- value: "base",
- label: intl.formatMessage({ id: "dict.fields.type.base.label" }),
- },
- ];
- const case3_n = [
- ...case3,
- {
- value: "base",
- label: intl.formatMessage({ id: "dict.fields.type.base.label" }),
- children: [
- {
- value: "m",
- label: intl.formatMessage({ id: "dict.fields.type.m.label" }),
- },
- {
- value: "nt",
- label: intl.formatMessage({ id: "dict.fields.type.nt.label" }),
- },
- {
- value: "f",
- label: intl.formatMessage({ id: "dict.fields.type.f.label" }),
- },
- ],
- },
- ];
- const case3_num = [
- ...case3,
- {
- value: "base",
- label: intl.formatMessage({ id: "dict.fields.type.base.label" }),
- },
- ];
- const caseVerb3 = [
- {
- value: "pres",
- label: intl.formatMessage({ id: "dict.fields.type.pres.label" }),
- },
- {
- value: "aor",
- label: intl.formatMessage({ id: "dict.fields.type.aor.label" }),
- },
- {
- value: "fut",
- label: intl.formatMessage({ id: "dict.fields.type.fut.label" }),
- },
- {
- value: "pf",
- label: intl.formatMessage({ id: "dict.fields.type.pf.label" }),
- },
- {
- value: "imp",
- label: intl.formatMessage({ id: "dict.fields.type.imp.label" }),
- },
- {
- value: "cond",
- label: intl.formatMessage({ id: "dict.fields.type.cond.label" }),
- },
- {
- value: "opt",
- label: intl.formatMessage({ id: "dict.fields.type.opt.label" }),
- },
- ];
- const caseVerb2 = [
- {
- value: "sg",
- label: intl.formatMessage({ id: "dict.fields.type.sg.label" }),
- children: caseVerb3,
- },
- {
- value: "pl",
- label: intl.formatMessage({ id: "dict.fields.type.pl.label" }),
- children: caseVerb3,
- },
- ];
- const caseVerbInd = [
- {
- value: "abs",
- label: intl.formatMessage({ id: "dict.fields.type.abs.label" }),
- },
- {
- value: "ger",
- label: intl.formatMessage({ id: "dict.fields.type.ger.label" }),
- },
- {
- value: "inf",
- label: intl.formatMessage({ id: "dict.fields.type.inf.label" }),
- },
- ];
- const caseInd = [
- {
- value: "ind",
- label: intl.formatMessage({ id: "dict.fields.type.ind.label" }),
- },
- {
- value: "adv",
- label: intl.formatMessage({ id: "dict.fields.type.adv.label" }),
- },
- {
- value: "conj",
- label: intl.formatMessage({ id: "dict.fields.type.conj.label" }),
- },
- {
- value: "interj",
- label: intl.formatMessage({ id: "dict.fields.type.interj.label" }),
- },
- ];
- const caseOthers = [
- {
- value: "pre",
- label: intl.formatMessage({ id: "dict.fields.type.pre.label" }),
- },
- {
- value: "suf",
- label: intl.formatMessage({ id: "dict.fields.type.suf.label" }),
- },
- {
- value: "end",
- label: intl.formatMessage({ id: "dict.fields.type.end.label" }),
- },
- {
- value: "part",
- label: intl.formatMessage({ id: "dict.fields.type.part.label" }),
- },
- {
- value: "note",
- label: intl.formatMessage({ id: "dict.fields.type.note.label" }),
- },
- ];
- const caseVerb1 = [
- {
- value: "1p",
- label: intl.formatMessage({ id: "dict.fields.type.1p.label" }),
- children: caseVerb2,
- },
- {
- value: "2p",
- label: intl.formatMessage({ id: "dict.fields.type.2p.label" }),
- children: caseVerb2,
- },
- {
- value: "3p",
- label: intl.formatMessage({ id: "dict.fields.type.3p.label" }),
- children: caseVerb2,
- },
- {
- value: "ind",
- label: intl.formatMessage({ id: "dict.fields.type.ind.label" }),
- children: caseVerbInd,
- },
- {
- value: "base",
- label: intl.formatMessage({ id: "dict.fields.type.base.label" }),
- },
- ];
- const options: CascaderOption[] = [
- {
- value: "n",
- label: intl.formatMessage({ id: "dict.fields.type.n.label" }),
- children: case3_n,
- },
- {
- value: "ti",
- label: intl.formatMessage({ id: "dict.fields.type.ti.label" }),
- children: case3_ti,
- },
- {
- value: "v",
- label: intl.formatMessage({ id: "dict.fields.type.v.label" }),
- children: caseVerb1,
- },
- {
- value: "ind",
- label: intl.formatMessage({ id: "dict.fields.type.ind.label" }),
- children: caseInd,
- },
- {
- value: "pron",
- label: intl.formatMessage({ id: "dict.fields.type.pron.label" }),
- children: case3_pron,
- },
- {
- value: "num",
- label: intl.formatMessage({ id: "dict.fields.type.num.label" }),
- children: case3_num,
- },
- {
- value: "un",
- label: intl.formatMessage({ id: "dict.fields.type.un.label" }),
- },
- {
- value: "adj",
- label: intl.formatMessage({ id: "dict.fields.type.adj.label" }),
- children: case3_ti,
- },
- {
- value: "others",
- label: intl.formatMessage({ id: "dict.fields.type.others.label" }),
- children: caseOthers,
- },
- ];
- return (
- <Cascader
- disabled={readonly}
- value={currValue}
- options={options}
- placeholder="Please select case"
- onChange={(value?: (string | number)[]) => {
- console.log("case changed", value);
- if (typeof value === "undefined") {
- if (typeof onCaseChange !== "undefined") {
- onCaseChange("");
- }
- return;
- }
- let newValue: (string | number)[];
- if (
- value.length > 1 &&
- value[value.length - 1] === value[value.length - 2]
- ) {
- newValue = value.slice(0, -1);
- } else {
- newValue = value;
- }
- setCurrValue(newValue);
- if (typeof onCaseChange !== "undefined") {
- let output = newValue.map((item) => `.${item}.`).join("$");
- output = output.replace(".$.base", ":base").replace(".$.ind", ":ind");
- if (output.indexOf("$") > 0) {
- output =
- output.substring(0, output.indexOf("$")) +
- "#" +
- output.substring(output.indexOf("$") + 1);
- } else {
- output += "#";
- }
- onCaseChange(output);
- }
- }}
- />
- );
- };
- export default SelectCaseWidget;
|