Add Editable state to canvas along with Save and Cancel buttons while in Editable mode. Save - saves the new state after editing. Cancel - reverts to the widget state before Edit mode

This commit is contained in:
Daniel S. Hansen
2025-07-25 11:40:57 -07:00
parent 552b1bd16a
commit 58f734684b
2 changed files with 40 additions and 7 deletions
@@ -1,4 +1,4 @@
import { HStack, Flex, Tabs, Box } from "@chakra-ui/react"; import { HStack, Flex, Tabs, Button, Box } from "@chakra-ui/react";
import WidgetCanvas from "./DashboardCanvasNav/WidgetCanvas"; import WidgetCanvas from "./DashboardCanvasNav/WidgetCanvas";
import { SearchBar } from "../components/SearchBar"; import { SearchBar } from "../components/SearchBar";
import { SettingsButton } from "../components/SettingsButton"; import { SettingsButton } from "../components/SettingsButton";
@@ -16,6 +16,7 @@ export function DashboardCanvas() {
{ i: '1', x: 3, y: 0, w: 3, h: 3, minH: 3, minW: 1, static: !isEditable }, { i: '1', x: 3, y: 0, w: 3, h: 3, minH: 3, minW: 1, static: !isEditable },
{ i: '2', x: 6, y: 0, w: 3, h: 3, minH: 3, minW: 1, static: !isEditable } { i: '2', x: 6, y: 0, w: 3, h: 3, minH: 3, minW: 1, static: !isEditable }
]); ]);
const [originalLayout, setOriginalLayout] = useState([]);
useEffect(() => { useEffect(() => {
setLayout(prevLayout => setLayout(prevLayout =>
@@ -35,15 +36,32 @@ export function DashboardCanvas() {
x: (prev.length * 3) % 12, x: (prev.length * 3) % 12,
y: Infinity, y: Infinity,
w: 3, w: 3,
h: 3 h: 3,
} }
]); ]);
setNewCounter(prev => prev + 1); setNewCounter(prev => prev + 1);
}; };
const onEditWidgets = () => { const onEditWidgets = () => {
console.log("widgets are now editable") console.log("widgets are now editable");
setIsEditable(true); setOriginalLayout(layout); // Backup layout before editing
setIsEditable(true); // Enable edit mode
}
const onSave = () => {
setOriginalLayout([]) // Clear backup layout
setIsEditable(false);
}
const onCancel = () => {
if (originalLayout.length) {
setLayout(originalLayout.map(item => ({
...item,
static: true
})));
};
setOriginalLayout([]);
setIsEditable(false);
} }
const onDeleteWidgets = (id) => { const onDeleteWidgets = (id) => {
@@ -87,13 +105,30 @@ export function DashboardCanvas() {
</Tabs.Trigger> </Tabs.Trigger>
</Tabs.List> </Tabs.List>
<HStack > {/* <HStack >
<SearchBar /> <SearchBar />
<SettingsButton visible={isEditable} <SettingsButton visible={isEditable}
onAddWidget={ onAddWidget } onAddWidget={ onAddWidget }
onEditWidgets={ onEditWidgets } onEditWidgets={ onEditWidgets }
onDeleteWidgets={ onDeleteWidgets } onDeleteWidgets={ onDeleteWidgets }
/> />
</HStack> */}
<HStack >
{isEditable ? (
<>
<Button onClick={onSave} borderRadius="md" bg="primary" _hover={{bg: "primaryLt"}}>Save</Button>
<Button onClick={onCancel} borderRadius="md">Cancel</Button>
</>
):(
<>
<SearchBar />
<SettingsButton
onAddWidget={ onAddWidget }
onEditWidgets={ onEditWidgets }
onDeleteWidgets={ onDeleteWidgets }
/>
</>
)}
</HStack> </HStack>
</Flex> </Flex>
@@ -14,8 +14,6 @@ export default function VolcanoCanvas() {
display="flex" display="flex"
alignItems="center" alignItems="center"
justifyContent="center" justifyContent="center"
> >
<Text fontsize="2xl" fontWeight="bold" color="gray.700"> <Text fontsize="2xl" fontWeight="bold" color="gray.700">
Volcano Canvas coming soon! Volcano Canvas coming soon!