Add new add widget behavior. Edit mode is enabled upon 'Add Widget' and user must either Save/Cancel their changes before navigating away from My Dashboard

This commit is contained in:
Daniel S. Hansen
2025-07-31 14:01:08 -07:00
parent ff64e6bb58
commit bedd616d92
@@ -14,42 +14,53 @@ import DeleteAllButton from "../components/DeleteAllButton";
export function DashboardCanvas({ onCancel, isEditable, setIsEditable, isDelete, setIsDelete, view, layout, setLayout, originalLayout, setOriginalLayout, onLayoutChange, onChangeView }) {
const [newCounter, setNewCounter] = useState(3);
// Adding a widget triggers Edit mode
const onAddWidget = () => {
const newId = newCounter.toString();
setLayout(prev => [
...prev,
...prev,
{
i: newId,
x: (prev.length * 3) % 12,
y: Infinity,
w: 3,
h: 3,
static: false,
}
]);
setNewCounter(prev => prev + 1);
onEditWidgets();
};
useEffect(() => {
console.log("static change effect");
setLayout(prevLayout =>
prevLayout.map(item => ({
...item,
static: !isEditable // static false means resizable/editable
}))
);
}, [isEditable]);
const onEditWidgets = () => {
console.log("widgets are now editable");
setOriginalLayout(layout); // Backup layout before editing
// Set all widgets to editable, static: false
setLayout(prevLayout =>
prevLayout.map(item => ({
...item,
static: false
}))
);
setIsEditable(true); // Enable edit mode
}
const onSave = () => {
console.log("saving widgets...");
// Set all widgets back to static: true
setLayout(prevLayout =>
prevLayout.map(item => ({
...item,
static: true
}))
);
setIsEditable(false);
setIsDelete(false);
setOriginalLayout([]) // Clear backup layout
setOriginalLayout([]); // Clear backup layout
}
const onDeleteWidgets = () => {