From c1787d7871fd5d6f376271fcc81fd4fe047e83dd Mon Sep 17 00:00:00 2001 From: "Daniel S. Hansen" Date: Mon, 11 Aug 2025 14:17:21 -0700 Subject: [PATCH] Fix first widget is now removed upon clicking Cancel --- client/src/components/Canvas/views/Home.jsx | 53 +++++++++++++------ .../Canvas/views/HomeTabs/MyDashboard.jsx | 2 +- client/src/components/Dashboard.jsx | 16 +++++- 3 files changed, 52 insertions(+), 19 deletions(-) diff --git a/client/src/components/Canvas/views/Home.jsx b/client/src/components/Canvas/views/Home.jsx index d44c8c4..921b0e0 100644 --- a/client/src/components/Canvas/views/Home.jsx +++ b/client/src/components/Canvas/views/Home.jsx @@ -13,14 +13,44 @@ import { v4 as uuid } from 'uuid'; export default function Home({...props}) { // deconstructing props - const { view, layout, setLayout, setOriginalLayout, onLayoutChange, onChangeView, onCancel, - isDelete, setIsDelete, isEditable, setIsEditable, widgetArray, setWidgetArray } = props; + const { view, layout, setLayout, setOriginalLayout, onLayoutChange, onChangeView, onCancel, + isDelete, setIsDelete, beginEditIfNeeded, isEditable, setIsEditable, widgetArray, setWidgetArray } = props; - const onAddWidget = (ID, w, h, minw, minh, maxw, maxh) => { + // const onAddWidget = (ID, w, h, minw, minh, maxw, maxh) => { + // setLayout(prev => [ + // ...prev, + // { + // i: ID, + // x: (prev.length * 3) % 12, + // y: Infinity, + // w: w, + // h: h, + // minW: minw, + // minH: minh, + // maxW: maxw, + // maxH: maxh, + // static: false, + // resizeHandles: ['se'] + // } + // ]); + // onEditWidgets(); + // }; + + function appendWidget(name, w, h, minw, minh, maxw, maxh) { + beginEditIfNeeded(); // Save state before anything else + + const newID = uuid(); // could be replaced with something else like guid + + setWidgetArray([ // updating widget array containing info on the types of widgets + ...widgetArray, + {i: newID, widget: name } + ]); + // onAddWidget(newID, w, h, minw, minh, maxw, maxh); // updating array containing info on layout of widgets + setLayout(prev => [ ...prev, { - i: ID, + i: newID, x: (prev.length * 3) % 12, y: Infinity, w: w, @@ -31,18 +61,8 @@ export default function Home({...props}) { maxH: maxh, static: false, resizeHandles: ['se'] - } + }, ]); - onEditWidgets(); - }; - - function appendWidget(name, w, h, minw, minh, maxw, maxh) { - const newID = uuid(); // could be replaced with something else like guid - setWidgetArray([ // updating widget array containing info on the types of widgets - ...widgetArray, - {i: newID, widget: name } - ]); - onAddWidget(newID, w, h, minw, minh, maxw, maxh); // updating array containing info on layout of widgets } const onEditWidgets = () => { @@ -70,6 +90,7 @@ export default function Home({...props}) { setIsEditable(false); setIsDelete(false); setOriginalLayout([]); // Clear backup layout + setOriginalWidgets([]); } const onDeleteWidgets = () => { @@ -98,7 +119,7 @@ export default function Home({...props}) { } // Prop Forwarding - const MyDashboardProps = { layout, onLayoutChange, isEditable, isDelete, DeleteWidget, widgetArray, appendWidget }; + const MyDashboardProps = { layout, onLayoutChange, isEditable, beginEditIfNeeded, isDelete, DeleteWidget, widgetArray, appendWidget }; const settingsButtonProps = { onEditWidgets, onDeleteWidgets, appendWidget }; return ( diff --git a/client/src/components/Canvas/views/HomeTabs/MyDashboard.jsx b/client/src/components/Canvas/views/HomeTabs/MyDashboard.jsx index 3856ba4..cddcde1 100644 --- a/client/src/components/Canvas/views/HomeTabs/MyDashboard.jsx +++ b/client/src/components/Canvas/views/HomeTabs/MyDashboard.jsx @@ -26,7 +26,7 @@ export default function MyDashboard({layout, onLayoutChange, isEditable, isDelet }; // Show large 'Add Widget' button when dashboard is empty - if ( !widgetArray.length ) { + if ( !layout.length ) { return ( { + if ( !isEditable ) { + // Save deep copies to preserve state + setOriginalLayout(structuredClone(layout)); + setOriginalWidgets(structuredClone(widgetArray)); + setIsEditable(true); + setIsDelete(false); + } + }; + const onCancel = () => { - // This is a test comment console.log("canceling changes..."); if (originalLayout.length) { setLayout(originalLayout.map(item => ({ @@ -25,9 +35,11 @@ export default function Dashboard() { static: true }))); }; + setWidgetArray(originalWidgets.length ? originalWidgets : []); setIsEditable(false); setIsDelete(false); setOriginalLayout([]); + setOriginalWidgets([]); } // Prevent navigation while in Edit mode without saving or cancelling @@ -46,7 +58,7 @@ export default function Dashboard() { // Prop Forwarding const canvasProps = { view, layout, setLayout, setOriginalLayout, onLayoutChange, onChangeView: handleViewChange, - onCancel, isEditable, setIsEditable, isDelete, setIsDelete, widgetArray, setWidgetArray + onCancel, isEditable, setIsEditable, isDelete, setIsDelete, widgetArray, setWidgetArray, setOriginalWidgets, beginEditIfNeeded }; const sidebarProps = { view, onChangeView: handleViewChange, darkMode, setDarkMode }; const headerProps = { onChangeView: handleViewChange };