Add navigation prevention while in Edit mode to Avatar menu options in Header
This commit is contained in:
@@ -12,7 +12,7 @@ import SettingsCanvas from "./views/SettingsCanvas"
|
|||||||
import { DashboardCanvas } from "./views/DashboardCanvas";
|
import { DashboardCanvas } from "./views/DashboardCanvas";
|
||||||
import { DASHBOARD_VIEWS } from "@/constants/viewKeys";
|
import { DASHBOARD_VIEWS } from "@/constants/viewKeys";
|
||||||
|
|
||||||
export default function Canvas({ isEditable, setIsEditable, isDelete, setIsDelete, view, setView, layout, setLayout, originalLayout, setOriginalLayout, onLayoutChange, onChangeView, darkMode }) {
|
export default function Canvas({ onCancel, isEditable, setIsEditable, isDelete, setIsDelete, view, setView, layout, setLayout, originalLayout, setOriginalLayout, onLayoutChange, onChangeView, darkMode }) {
|
||||||
const recipe = useRecipe({ key: "canvas" });
|
const recipe = useRecipe({ key: "canvas" });
|
||||||
const styles = recipe();
|
const styles = recipe();
|
||||||
|
|
||||||
@@ -30,6 +30,7 @@ export default function Canvas({ isEditable, setIsEditable, isDelete, setIsDelet
|
|||||||
setOriginalLayout={ setOriginalLayout }
|
setOriginalLayout={ setOriginalLayout }
|
||||||
onLayoutChange={ onLayoutChange }
|
onLayoutChange={ onLayoutChange }
|
||||||
onChangeView={ onChangeView }
|
onChangeView={ onChangeView }
|
||||||
|
onCancel={ onCancel }
|
||||||
isEditable={ isEditable }
|
isEditable={ isEditable }
|
||||||
setIsEditable={ setIsEditable }
|
setIsEditable={ setIsEditable }
|
||||||
isDelete={ isDelete }
|
isDelete={ isDelete }
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ import { CancelButton } from "../components/CancelButton";
|
|||||||
import { SaveButton } from "../components/SaveButton";
|
import { SaveButton } from "../components/SaveButton";
|
||||||
import DeleteAllButton from "../components/DeleteAllButton";
|
import DeleteAllButton from "../components/DeleteAllButton";
|
||||||
|
|
||||||
export function DashboardCanvas({ isEditable, setIsEditable, isDelete, setIsDelete, view, setView, layout, setLayout, originalLayout, setOriginalLayout, onLayoutChange, onChangeView }) {
|
export function DashboardCanvas({ onCancel, isEditable, setIsEditable, isDelete, setIsDelete, view, setView, layout, setLayout, originalLayout, setOriginalLayout, onLayoutChange, onChangeView }) {
|
||||||
// const [isEditable, setIsEditable] = useState(false); // editable=true means static=false (vice versa)
|
// const [isEditable, setIsEditable] = useState(false); // editable=true means static=false (vice versa)
|
||||||
// const [isDelete, setIsDelete] = useState(false);
|
// const [isDelete, setIsDelete] = useState(false);
|
||||||
const [newCounter, setNewCounter] = useState(3);
|
const [newCounter, setNewCounter] = useState(3);
|
||||||
@@ -55,18 +55,19 @@ export function DashboardCanvas({ isEditable, setIsEditable, isDelete, setIsDele
|
|||||||
setOriginalLayout([]) // Clear backup layout
|
setOriginalLayout([]) // Clear backup layout
|
||||||
}
|
}
|
||||||
|
|
||||||
const onCancel = () => {
|
// Lifting up to Dashboard.jsx for prop drilling
|
||||||
console.log("canceling changes...");
|
// const onCancel = () => {
|
||||||
if (originalLayout.length) {
|
// console.log("canceling changes...");
|
||||||
setLayout(originalLayout.map(item => ({
|
// if (originalLayout.length) {
|
||||||
...item,
|
// setLayout(originalLayout.map(item => ({
|
||||||
static: true
|
// ...item,
|
||||||
})));
|
// static: true
|
||||||
};
|
// })));
|
||||||
setIsEditable(false);
|
// };
|
||||||
setIsDelete(false);
|
// setIsEditable(false);
|
||||||
setOriginalLayout([]);
|
// setIsDelete(false);
|
||||||
}
|
// setOriginalLayout([]);
|
||||||
|
// }
|
||||||
|
|
||||||
const onDeleteWidgets = () => {
|
const onDeleteWidgets = () => {
|
||||||
console.log("Start deleting widgets...");
|
console.log("Start deleting widgets...");
|
||||||
|
|||||||
@@ -20,6 +20,19 @@ export default function Dashboard() {
|
|||||||
{ i: '2', x: 6, y: 0, w: 3, h: 3, minH: 3, minW: 1, static: true }
|
{ i: '2', x: 6, y: 0, w: 3, h: 3, minH: 3, minW: 1, static: true }
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
const onCancel = () => {
|
||||||
|
console.log("canceling changes...");
|
||||||
|
if (originalLayout.length) {
|
||||||
|
setLayout(originalLayout.map(item => ({
|
||||||
|
...item,
|
||||||
|
static: true
|
||||||
|
})));
|
||||||
|
};
|
||||||
|
setIsEditable(false);
|
||||||
|
setIsDelete(false);
|
||||||
|
setOriginalLayout([]);
|
||||||
|
}
|
||||||
|
|
||||||
// Prevent navigation while in Edit mode without saving or cancelling
|
// Prevent navigation while in Edit mode without saving or cancelling
|
||||||
const handleViewChange = (nextView) => {
|
const handleViewChange = (nextView) => {
|
||||||
if (view === "widget" && isEditable) {
|
if (view === "widget" && isEditable) {
|
||||||
@@ -68,6 +81,7 @@ export default function Dashboard() {
|
|||||||
setOriginalLayout={ setOriginalLayout }
|
setOriginalLayout={ setOriginalLayout }
|
||||||
onLayoutChange={( newLayout ) => setLayout( newLayout )}
|
onLayoutChange={( newLayout ) => setLayout( newLayout )}
|
||||||
onChangeView={ handleViewChange }
|
onChangeView={ handleViewChange }
|
||||||
|
onCancel={ onCancel }
|
||||||
isEditable={ isEditable }
|
isEditable={ isEditable }
|
||||||
setIsEditable={ setIsEditable }
|
setIsEditable={ setIsEditable }
|
||||||
isDelete={ isDelete }
|
isDelete={ isDelete }
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import { Avatar, Menu, Portal, Box } from "@chakra-ui/react"
|
import { Avatar, Menu, Portal, Box } from "@chakra-ui/react"
|
||||||
|
|
||||||
|
|
||||||
export default function UserAvatarMenu({ view, setView, name, avatar }) {
|
export default function UserAvatarMenu({ view, setView, onChangeView, name, avatar }) {
|
||||||
return (
|
return (
|
||||||
<Menu.Root>
|
<Menu.Root>
|
||||||
<Menu.Trigger focusRing="none">
|
<Menu.Trigger focusRing="none">
|
||||||
@@ -21,10 +21,10 @@ export default function UserAvatarMenu({ view, setView, name, avatar }) {
|
|||||||
{/* zIndex: overlay = 1300 */}
|
{/* zIndex: overlay = 1300 */}
|
||||||
<Menu.Positioner zIndex="overlay">
|
<Menu.Positioner zIndex="overlay">
|
||||||
<Menu.Content>
|
<Menu.Content>
|
||||||
<Menu.Item value="account" onClick={() => setView("account")}>
|
<Menu.Item value="account" onClick={() => onChangeView("account")}>
|
||||||
Account
|
Account
|
||||||
</Menu.Item>
|
</Menu.Item>
|
||||||
<Menu.Item value="settings" onClick={() => setView("settings")}>
|
<Menu.Item value="settings" onClick={() => onChangeView("settings")}>
|
||||||
Settings
|
Settings
|
||||||
</Menu.Item>
|
</Menu.Item>
|
||||||
<Menu.Item value="logout" onClick={() => console.log("Log out triggered")}>
|
<Menu.Item value="logout" onClick={() => console.log("Log out triggered")}>
|
||||||
|
|||||||
Reference in New Issue
Block a user