Nissaya.tsx 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. import { Popover } from "antd";
  2. import { useAppSelector } from "../../hooks";
  3. import { settingInfo } from "../../reducers/setting";
  4. import { GetUserSetting } from "../auth/setting/default";
  5. import NissayaMeaning from "./Nissaya/NissayaMeaning";
  6. import PaliText from "./Wbw/PaliText";
  7. import { MoreIcon } from "../../assets/icon";
  8. interface IWidgetNissayaCtl {
  9. original?: string;
  10. pali?: string;
  11. meaning?: string[];
  12. lang?: string;
  13. note?: string;
  14. children?: React.ReactNode | React.ReactNode[];
  15. }
  16. export const NissayaCtl = ({ pali, meaning }: IWidgetNissayaCtl) => {
  17. const settings = useAppSelector(settingInfo);
  18. const layout = GetUserSetting("setting.nissaya.layout.read", settings);
  19. console.debug("NissayaCtl layout", layout);
  20. const ect = meaning
  21. ?.slice(0, -1)
  22. .map((item, id) => <NissayaMeaning key={id} text={item} />);
  23. return (
  24. <span
  25. style={{
  26. display: layout === "inline" ? "inline-block" : "block",
  27. marginRight: 10,
  28. }}
  29. >
  30. <PaliText
  31. lookup={true}
  32. text={pali}
  33. code="my"
  34. termToLocal={false}
  35. style={{ fontWeight: 700 }}
  36. />{" "}
  37. {ect && ect?.length > 0 ? (
  38. <Popover content={ect}>
  39. <MoreIcon />{" "}
  40. </Popover>
  41. ) : (
  42. <></>
  43. )}
  44. {meaning?.slice(-1).map((item, id) => (
  45. <NissayaMeaning key={id} text={item} />
  46. ))}
  47. </span>
  48. );
  49. };
  50. interface IWidget {
  51. props: string;
  52. children?: React.ReactNode | React.ReactNode[];
  53. }
  54. const Widget = ({ props, children }: IWidget) => {
  55. const prop = JSON.parse(atob(props)) as IWidgetNissayaCtl;
  56. return <NissayaCtl {...prop}>{children}</NissayaCtl>;
  57. };
  58. export default Widget;