Skip to content

Commit ee76cb0

Browse files
committed
Add persistent up/down layout toggle for Dashboard
- Added `getDashboardUpDownLayout` and `setDashboardUpDownLayout` utility functions for localStorage sync. - Updated `Home` page to to persist changes and initialize layout state from localStorage.
1 parent ac505e7 commit ee76cb0

2 files changed

Lines changed: 40 additions & 4 deletions

File tree

web/src/pages/Home/index.jsx

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,12 @@ import 'chartjs-adapter-dayjs-4/dist/chartjs-adapter-dayjs-4.esm';
1414
import { OverviewChart } from '../../components/OverviewChart.jsx';
1515
import Card from '../../components/Card.jsx';
1616
import ProcessControls from './ProcessControls.jsx';
17-
import { getDashboardLayout, DASHBOARD_LAYOUTS } from '../../utils/dashboardManager.js';
17+
import {
18+
getDashboardLayout,
19+
DASHBOARD_LAYOUTS,
20+
setDashboardUpDownLayout,
21+
getDashboardUpDownLayout,
22+
} from '../../utils/dashboardManager.js';
1823
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
1924
import { faArrowsLeftRight } from '@fortawesome/free-solid-svg-icons/faArrowsLeftRight';
2025
import { faArrowsUpDown } from '@fortawesome/free-solid-svg-icons/faArrowsUpDown';
@@ -24,7 +29,7 @@ Chart.register(LineController, TimeScale, LinearScale, PointElement, LineElement
2429
export function Home() {
2530
const [dashboardLayout, setDashboardLayout] = useState(DASHBOARD_LAYOUTS.ORDER_FIRST);
2631
const apiService = useContext(ApiServiceContext);
27-
const [upDownLayout, setUpDownLayout] = useState(false);
32+
const [upDownLayout, setUpDownLayout] = useState(getDashboardUpDownLayout());
2833
const gridUpDownClass = upDownLayout ? 'grid-cols-1' : 'grid-cols-10';
2934

3035
useEffect(() => {
@@ -63,9 +68,12 @@ export function Home() {
6368

6469
<div className='absolute top-3 right-0 z-50 sm:top-[-1rem] md:top-9'>
6570
<button
66-
className='btn-lg btn-circle bg-base-content/10 text-base-content/60 sm:border-base-content/20 hover:text-base-content sm:hover:bg-base-content/10 hover:border-base-content/40 text-md cursor-pointer transition-all duration-200'
71+
aria-label={upDownLayout ? 'Switch to horizontal layout' : 'Switch to vertical layout'}
72+
className='btn-lg btn-circle bg-base-content/10 text-base-content/60 sm:border-base-content/20 hover:text-base-content sm:hover:bg-base-content/10 hover:border-base-content/40 text-md cursor-pointer transition-all duration-200'
6773
onClick={() => {
68-
setUpDownLayout(!upDownLayout);
74+
const newLayout = !upDownLayout;
75+
setUpDownLayout(newLayout);
76+
setDashboardUpDownLayout(newLayout);
6977
}}
7078
>
7179
<FontAwesomeIcon

web/src/utils/dashboardManager.js

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,34 @@ export const setDashboardLayout = layout => {
2828
}
2929
};
3030

31+
export const getDashboardUpDownLayout = () => {
32+
if (typeof window === 'undefined' || !window.localStorage) {
33+
return false;
34+
}
35+
36+
try {
37+
return localStorage.getItem('upDownLayout') === 'true';
38+
} catch (error) {
39+
console.warn('getDashboardUpDownLayout: localStorage access failed:', error);
40+
return false;
41+
}
42+
};
43+
44+
export const setDashboardUpDownLayout = layout => {
45+
if (layout === null || layout === undefined) {
46+
console.error('setDashboardUpDownLayout: Layout cannot be null or undefined');
47+
return false;
48+
}
49+
50+
try {
51+
localStorage.setItem('upDownLayout', layout);
52+
return true;
53+
} catch (error) {
54+
console.error('setDashboardUpDownLayout: Failed to store layout in localStorage:', error);
55+
return false;
56+
}
57+
}
58+
3159
export const DASHBOARD_LAYOUTS = {
3260
ORDER_FIRST: 'order-first',
3361
ORDER_LAST: 'order-last',

0 commit comments

Comments
 (0)