diff --git a/src/components/dashboard/budget-column.tsx b/src/components/dashboard/budget-column.tsx index 238f8b1..9b1e1a1 100644 --- a/src/components/dashboard/budget-column.tsx +++ b/src/components/dashboard/budget-column.tsx @@ -22,9 +22,11 @@ import { Divider, IconButton, Link, + MenuItem, Stack, TextField, - Typography + Typography, + useMediaQuery } from "@mui/material"; import { alpha, useTheme } from "@mui/material/styles"; import { useEffect, useMemo, useState } from "react"; @@ -153,10 +155,12 @@ export function BudgetColumn({ }: BudgetColumnProps) { const theme = useTheme(); const isDark = theme.palette.mode === "dark"; + const isCompactLayout = useMediaQuery(theme.breakpoints.down("lg")); const [budgetDrafts, setBudgetDrafts] = useState>({}); const [editingBudgetId, setEditingBudgetId] = useState(null); const [isEditingGroup, setIsEditingGroup] = useState(false); const [groupDraftName, setGroupDraftName] = useState(group.name); + const [selectedBudgetId, setSelectedBudgetId] = useState(group.budgets[0]?.id ?? ""); const [proofFileDrafts, setProofFileDrafts] = useState>({}); const [expandedRecurringExpenses, setExpandedRecurringExpenses] = useState>({}); @@ -183,6 +187,12 @@ export function BudgetColumn({ setGroupDraftName(group.name); }, [group.name]); + useEffect(() => { + if (!group.budgets.some((budget) => budget.id === selectedBudgetId)) { + setSelectedBudgetId(group.budgets[0]?.id ?? ""); + } + }, [group.budgets, selectedBudgetId]); + const approvedSpend = useMemo( () => group.budgets.reduce((sum, budget) => sum + getApprovedSpend(budget.expenses), 0), [group.budgets] @@ -251,6 +261,9 @@ export function BudgetColumn({ })); } + const selectedBudget = group.budgets.find((budget) => budget.id === selectedBudgetId) ?? group.budgets[0] ?? null; + const visibleBudgets = isCompactLayout && selectedBudget ? [selectedBudget] : group.budgets; + return ( ) : null} + {isCompactLayout && group.budgets.length > 1 ? ( + setSelectedBudgetId(event.target.value)} + fullWidth + > + {group.budgets.map((budget) => ( + + {budget.name} + + ))} + + ) : null} + - {group.budgets.map((budget) => { + {visibleBudgets.map((budget) => { const draft = getDraft(budget); const isEditing = editingBudgetId === budget.id; const budgetApproved = getApprovedSpend(budget.expenses); @@ -444,9 +473,9 @@ export function BudgetColumn({