actionAddToLibrary.ts 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. import { register } from "./register";
  2. import { getSelectedElements } from "../scene";
  3. import { getNonDeletedElements } from "../element";
  4. import { deepCopyElement } from "../element/newElement";
  5. import { randomId } from "../random";
  6. import { t } from "../i18n";
  7. export const actionAddToLibrary = register({
  8. name: "addToLibrary",
  9. trackEvent: { category: "element" },
  10. perform: (elements, appState, _, app) => {
  11. const selectedElements = getSelectedElements(
  12. getNonDeletedElements(elements),
  13. appState,
  14. true,
  15. );
  16. if (selectedElements.some((element) => element.type === "image")) {
  17. return {
  18. commitToHistory: false,
  19. appState: {
  20. ...appState,
  21. errorMessage: "Support for adding images to the library coming soon!",
  22. },
  23. };
  24. }
  25. return app.library
  26. .getLatestLibrary()
  27. .then((items) => {
  28. return app.library.setLibrary([
  29. {
  30. id: randomId(),
  31. status: "unpublished",
  32. elements: selectedElements.map(deepCopyElement),
  33. created: Date.now(),
  34. },
  35. ...items,
  36. ]);
  37. })
  38. .then(() => {
  39. return {
  40. commitToHistory: false,
  41. appState: {
  42. ...appState,
  43. toast: { message: t("toast.addedToLibrary") },
  44. },
  45. };
  46. })
  47. .catch((error) => {
  48. return {
  49. commitToHistory: false,
  50. appState: {
  51. ...appState,
  52. errorMessage: error.message,
  53. },
  54. };
  55. });
  56. },
  57. contextItemLabel: "labels.addToLibrary",
  58. });