From 8a54bb29fbed9e350cd073aef732733e5eb090e3 Mon Sep 17 00:00:00 2001 From: eeymoo Date: Sat, 22 Mar 2025 17:15:35 +0000 Subject: [PATCH] wip --- app/page.tsx | 2 +- components/ComponentPaletteDrawer.tsx | 35 ++++---- components/Draggable/Draggable.tsx | 16 ++-- components/DraggablePanel.tsx | 2 +- hooks/useWidgets.tsx | 110 ++++++++++++++++++++++++++ package.json | 1 + pnpm-lock.yaml | 8 ++ stores/componentStore.ts | 4 +- widgets/Image/index.tsx | 37 +++++++++ widgets/Logo/index.tsx | 8 +- widgets/Text/index.tsx | 13 ++- 11 files changed, 204 insertions(+), 32 deletions(-) create mode 100644 hooks/useWidgets.tsx create mode 100644 widgets/Image/index.tsx diff --git a/app/page.tsx b/app/page.tsx index 5aadfc4..82f972c 100644 --- a/app/page.tsx +++ b/app/page.tsx @@ -94,7 +94,7 @@ export default function Home() { y={item.y} width={item.width} height={item.height} - componentsId={item.componentsId} + widgetsId={item.widgetsId} /> ))} diff --git a/components/ComponentPaletteDrawer.tsx b/components/ComponentPaletteDrawer.tsx index 2250880..08b1fef 100644 --- a/components/ComponentPaletteDrawer.tsx +++ b/components/ComponentPaletteDrawer.tsx @@ -1,21 +1,32 @@ "use client"; import "@/app/globals.css"; -import { useRef, useState } from "react"; +import { useEffect, useRef, useState } from "react"; import ComponentsStore from "@/stores/componentStore"; -import { componentsLibrary } from "./Draggable/Draggable"; -import { useDynamicWidgets } from "@/hooks/useDynamicWidgets"; +import { useWidgets } from "@/hooks/useWidgets"; export default function ComponentPaletteDrawer() { const checkboxRef = useRef(null); - const [componentsId, setComponentsId] = useState("logo"); + const [widgetsId, setwidgetsId] = useState("logo"); const [data, setData] = useState(""); - const {widgets} = useDynamicWidgets(); + const {widgets, widgetsLibrary} = useWidgets(); + + useEffect(() => { + try { + const widget = widgets.find(item => item.id === widgetsId); + const defaultConfig = widget?.defaultConfig({}) + const stringData = JSON.stringify(defaultConfig, undefined, 4); + setData(stringData); + } catch (error) { + + } + }, [widgetsId]); const onSubmit = (e: SubmitEvent) => { e.preventDefault(); - ComponentsStore.addComponent(componentsId, data && JSON.parse(data)); + ComponentsStore.addComponent(widgetsId, data && JSON.parse(data)); checkboxRef.current?.click(); }; + return (
{ - componentsId && componentsLibrary[componentsId](data) - } +9 }
- { - JSON.stringify(widgets) - } -
小部件