diff --git a/client/src/components/Canvas/views/Home.jsx b/client/src/components/Canvas/views/Home.jsx index d44c8c4..6d0dfd0 100644 --- a/client/src/components/Canvas/views/Home.jsx +++ b/client/src/components/Canvas/views/Home.jsx @@ -13,16 +13,51 @@ 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, setOriginalWidgets, + 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 + const COLS = 16; + const W = w ?? 3; + const H = h ?? 3; + + 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, - x: (prev.length * 3) % 12, - y: Infinity, + i: newID, + // x: (prev.length * 3) % 12, + // y: Infinity, + x: (prev.length * W) % COLS, + y: 0, w: w, h: h, minW: minw, @@ -31,18 +66,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 +95,7 @@ export default function Home({...props}) { setIsEditable(false); setIsDelete(false); setOriginalLayout([]); // Clear backup layout + setOriginalWidgets([]); } const onDeleteWidgets = () => { @@ -98,7 +124,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..91364e2 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 ) { + setOriginalLayout(layout); + setOriginalWidgets(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 +34,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 +57,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 };