CustomComps.tsx 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. import { useEditor } from "@/modules/editor";
  2. import { ICompKeys } from "@/modules/editor/typings";
  3. import { Image } from "@queenjs/ui";
  4. import { defineUI } from "queenjs";
  5. import { Container, Draggable } from "vue-dndrop";
  6. import { any } from "vue-types";
  7. export default defineUI({
  8. props: {
  9. components: any<
  10. {
  11. compKey: string;
  12. name: string;
  13. thumbnail: string;
  14. }[]
  15. >().isRequired,
  16. },
  17. setup(props) {
  18. const editor = useEditor();
  19. return () => (
  20. <Container
  21. class="space-y-10px scrollbar"
  22. behaviour="copy"
  23. group-name="canvas"
  24. get-child-payload={(index: number) => {
  25. return props.components[index].compKey;
  26. }}
  27. >
  28. {props.components.map((item) => {
  29. return (
  30. <Draggable>
  31. <div
  32. class="text-center leading-50px bg-dark-50 rounded draggable-item"
  33. key={item.compKey}
  34. title={item.name}
  35. onClick={() =>
  36. editor.actions.addCompToDesign(item.compKey as ICompKeys)
  37. }
  38. >
  39. <Image
  40. class="w-full rounded pointer-events-none"
  41. src={item.thumbnail}
  42. size={240}
  43. />
  44. </div>
  45. </Draggable>
  46. );
  47. })}
  48. </Container>
  49. );
  50. },
  51. });