HintViewer.tsx 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. import React from "react";
  2. import { t } from "../i18n";
  3. import { ExcalidrawElement } from "../element/types";
  4. import "./HintViewer.css";
  5. interface Hint {
  6. elementType: string;
  7. multiMode: boolean;
  8. isResizing: boolean;
  9. elements: readonly ExcalidrawElement[];
  10. }
  11. const getHints = ({ elementType, multiMode, isResizing, elements }: Hint) => {
  12. if (elementType === "arrow" || elementType === "line") {
  13. if (!multiMode) {
  14. return t("hints.linearElement");
  15. }
  16. return t("hints.linearElementMulti");
  17. }
  18. if (isResizing) {
  19. const selectedElements = elements.filter(el => el.isSelected);
  20. if (
  21. selectedElements.length === 1 &&
  22. (selectedElements[0].type === "arrow" ||
  23. selectedElements[0].type === "line") &&
  24. selectedElements[0].points.length > 2
  25. ) {
  26. return null;
  27. }
  28. return t("hints.resize");
  29. }
  30. return null;
  31. };
  32. export const HintViewer = ({
  33. elementType,
  34. multiMode,
  35. isResizing,
  36. elements,
  37. }: Hint) => {
  38. const hint = getHints({
  39. elementType,
  40. multiMode,
  41. isResizing,
  42. elements,
  43. });
  44. if (!hint) {
  45. return null;
  46. }
  47. return <div className="HintViewer">{hint}</div>;
  48. };