component.tsx 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. import { defineComponent } from "vue";
  2. import { string } from "vue-types";
  3. import { useCompData } from ".";
  4. import { useEditor } from "../../../..";
  5. import { useCompRef } from "../hooks";
  6. import { css } from "@linaria/core";
  7. import { PageMusic } from "./PageMusic";
  8. import { MusicOptions } from "./localMusic";
  9. export const Component = defineComponent({
  10. props: {
  11. compId: string().isRequired,
  12. },
  13. setup(props, { slots }) {
  14. const editor = useEditor();
  15. const { helper } = editor;
  16. const { children, layout, value } = useCompData(props.compId);
  17. const compRef = useCompRef(props.compId);
  18. const compMusic = value.music || "";
  19. const curValue = MusicOptions.find((e) => {
  20. return e.value == compMusic;
  21. });
  22. return () => (
  23. <div
  24. ref={compRef}
  25. style={helper.createStyle(layout || { size: [750] })}
  26. class={["!h-auto", editor.store.isEditMode ? pageEditStyle : ""]}
  27. >
  28. <div class="relative">
  29. {slots.Container?.(
  30. children.default.map((compId) => {
  31. const comp = helper.findComp(compId);
  32. if (!comp) return;
  33. return slots.CompItem?.(comp);
  34. })
  35. )}
  36. {curValue?.value && !editor.store.isEditMode && <PageMusic />}
  37. </div>
  38. </div>
  39. );
  40. },
  41. });
  42. const pageEditStyle = css`
  43. box-shadow: 0 0 0 3000px rgba(0, 0, 0, 0.4);
  44. `;