diff --git a/packages/desktop-client/src/components/reports/ReportOptions.ts b/packages/desktop-client/src/components/reports/ReportOptions.ts
index d8eda05e91ecf921720ec9279a89c10f01ca03ab..b62b6c367b30fed0ae07aa81df11167ad00b1865 100644
--- a/packages/desktop-client/src/components/reports/ReportOptions.ts
+++ b/packages/desktop-client/src/components/reports/ReportOptions.ts
@@ -64,7 +64,7 @@ const intervalOptions = [
 ];
 
 export const ReportOptions = {
-  groupBy: groupByOptions,
+  groupBy: groupByOptions.map(item => item.description),
   balanceType: balanceTypeOptions,
   balanceTypeMap: new Map(
     balanceTypeOptions.map(item => [item.description, item.format]),
diff --git a/packages/desktop-client/src/components/reports/ReportSidebar.jsx b/packages/desktop-client/src/components/reports/ReportSidebar.jsx
index 1c0125d39bddde708fc4de21de8986651a7b47e2..2b42b4af260ad159fd905f8315cd16d242d7b629 100644
--- a/packages/desktop-client/src/components/reports/ReportSidebar.jsx
+++ b/packages/desktop-client/src/components/reports/ReportSidebar.jsx
@@ -27,8 +27,6 @@ export function ReportSidebar({
   dateRangeLine,
   allMonths,
   setDateRange,
-  typeDisabled,
-  setTypeDisabled,
   setGraphType,
   setGroupBy,
   setInterval,
@@ -41,8 +39,10 @@ export function ReportSidebar({
   setShowUncategorized,
   setSelectedCategories,
   onChangeDates,
-  onChangeViews,
   onReportChange,
+  disabledItems,
+  defaultItems,
+  defaultModeItems,
 }) {
   const [menuOpen, setMenuOpen] = useState(false);
   const onSelectRange = cond => {
@@ -87,50 +87,25 @@ export function ReportSidebar({
   const onChangeMode = cond => {
     onReportChange({ type: 'modify' });
     setMode(cond);
+    let graph;
     if (cond === 'time') {
-      if (customReportItems.graphType === 'TableGraph') {
-        setTypeDisabled([]);
-      } else {
-        setTypeDisabled(['Net']);
-        if (['Net'].includes(customReportItems.balanceType)) {
-          setBalanceType('Payment');
-        }
-      }
       if (customReportItems.graphType === 'BarGraph') {
         setGraphType('StackedBarGraph');
-      }
-      if (['AreaGraph', 'DonutGraph'].includes(customReportItems.graphType)) {
-        setGraphType('TableGraph');
-        onChangeViews('viewLegend', false);
-      }
-      if (customReportItems.groupBy === 'Interval') {
-        setGroupBy('Category');
+        graph = 'StackedBarGraph';
       }
     } else {
       if (customReportItems.graphType === 'StackedBarGraph') {
         setGraphType('BarGraph');
-      } else {
-        setTypeDisabled([]);
+        graph = 'BarGraph';
       }
     }
+    defaultModeItems(graph, cond);
   };
 
   const onChangeSplit = cond => {
     onReportChange({ type: 'modify' });
     setGroupBy(cond);
-    if (customReportItems.mode === 'total') {
-      if (customReportItems.graphType !== 'TableGraph') {
-        setTypeDisabled(
-          customReportItems.groupBy !== 'Interval' ? [] : ['Net'],
-        );
-      }
-    }
-    if (
-      ['Net'].includes(customReportItems.balanceType) &&
-      customReportItems.graphType !== 'TableGraph'
-    ) {
-      setBalanceType('Payment');
-    }
+    defaultItems(cond);
   };
 
   const onChangeBalanceType = cond => {
@@ -196,17 +171,8 @@ export function ReportSidebar({
           <Select
             value={customReportItems.groupBy}
             onChange={e => onChangeSplit(e)}
-            options={ReportOptions.groupBy.map(option => [
-              option.description,
-              option.description,
-            ])}
-            disabledKeys={
-              customReportItems.mode === 'time'
-                ? ['Interval']
-                : customReportItems.graphType === 'AreaGraph'
-                  ? ['Category', 'Group', 'Payee', 'Account']
-                  : []
-            }
+            options={ReportOptions.groupBy.map(option => [option, option])}
+            disabledKeys={disabledItems('split')}
           />
         </View>
         <View
@@ -226,7 +192,7 @@ export function ReportSidebar({
               option.description,
               option.description,
             ])}
-            disabledKeys={typeDisabled}
+            disabledKeys={disabledItems('type')}
           />
         </View>
         <View
diff --git a/packages/desktop-client/src/components/reports/ReportTopbar.jsx b/packages/desktop-client/src/components/reports/ReportTopbar.jsx
index 81728a30b4877741faf9392e4a99e820613a0e6e..10e8eaf2363b418f0df6a2c590188783e0463622 100644
--- a/packages/desktop-client/src/components/reports/ReportTopbar.jsx
+++ b/packages/desktop-client/src/components/reports/ReportTopbar.jsx
@@ -21,15 +21,14 @@ export function ReportTopbar({
   report,
   savedStatus,
   setGraphType,
-  setTypeDisabled,
-  setBalanceType,
-  setGroupBy,
   viewLegend,
   viewSummary,
   viewLabels,
   onApplyFilter,
   onChangeViews,
   onReportChange,
+  disabledItems,
+  defaultItems,
 }) {
   return (
     <View
@@ -46,10 +45,10 @@ export function ReportTopbar({
         onSelect={() => {
           onReportChange({ type: 'modify' });
           setGraphType('TableGraph');
-          onChangeViews('viewLegend', false);
-          setTypeDisabled([]);
+          defaultItems('TableGraph');
         }}
         style={{ marginRight: 15 }}
+        disabled={disabledItems('TableGraph')}
       >
         <SvgQueue width={15} height={15} />
       </GraphButton>
@@ -63,21 +62,17 @@ export function ReportTopbar({
         }
         onSelect={() => {
           onReportChange({ type: 'modify' });
-          if (customReportItems.mode === 'total') {
-            setGraphType('BarGraph');
-            if (['Net'].includes(customReportItems.balanceType)) {
-              setBalanceType('Payment');
-            }
-            setTypeDisabled(
-              ['Interval'].includes(customReportItems.groupBy) ? [] : ['Net'],
-            );
-          } else {
-            setGraphType('StackedBarGraph');
-            setTypeDisabled(['Net']);
-            setBalanceType('Payment');
-          }
+          setGraphType(
+            customReportItems.mode === 'total' ? 'BarGraph' : 'StackedBarGraph',
+          );
+          defaultItems(
+            customReportItems.mode === 'total' ? 'BarGraph' : 'StackedBarGraph',
+          );
         }}
         style={{ marginRight: 15 }}
+        disabled={disabledItems(
+          customReportItems.mode === 'total' ? 'BarGraph' : 'StackedBarGraph',
+        )}
       >
         <SvgChartBar width={15} height={15} />
       </GraphButton>
@@ -87,12 +82,10 @@ export function ReportTopbar({
         onSelect={() => {
           onReportChange({ type: 'modify' });
           setGraphType('AreaGraph');
-          setGroupBy('Interval');
-          onChangeViews('viewLegend', false);
-          setTypeDisabled([]);
+          defaultItems('AreaGraph');
         }}
         style={{ marginRight: 15 }}
-        disabled={customReportItems.mode === 'total' ? false : true}
+        disabled={disabledItems('AreaGraph')}
       >
         <SvgChart width={15} height={15} />
       </GraphButton>
@@ -102,11 +95,10 @@ export function ReportTopbar({
         onSelect={() => {
           onReportChange({ type: 'modify' });
           setGraphType('DonutGraph');
-          setTypeDisabled(['Net']);
-          setBalanceType('Payment');
+          defaultItems('DonutGraph');
         }}
         style={{ marginRight: 15 }}
-        disabled={customReportItems.mode === 'total' ? false : true}
+        disabled={disabledItems('DonutGraph')}
       >
         <SvgChartPie width={15} height={15} />
       </GraphButton>
@@ -126,12 +118,7 @@ export function ReportTopbar({
         }}
         style={{ marginRight: 15 }}
         title="Show Legend"
-        disabled={
-          customReportItems.graphType === 'TableGraph' ||
-          customReportItems.graphType === 'AreaGraph'
-            ? true
-            : false
-        }
+        disabled={disabledItems('ShowLegend')}
       >
         <SvgListBullet width={15} height={15} />
       </GraphButton>
@@ -152,6 +139,7 @@ export function ReportTopbar({
         }}
         style={{ marginRight: 15 }}
         title="Show Labels"
+        disabled={disabledItems('ShowLabels')}
       >
         <SvgTag width={15} height={15} />
       </GraphButton>
diff --git a/packages/desktop-client/src/components/reports/disabledList.ts b/packages/desktop-client/src/components/reports/disabledList.ts
new file mode 100644
index 0000000000000000000000000000000000000000..b8fdb89d47eb5e1d7fbe54f2b6d3f76b40569cdd
--- /dev/null
+++ b/packages/desktop-client/src/components/reports/disabledList.ts
@@ -0,0 +1,117 @@
+const totalGraphOptions = [
+  {
+    description: 'TableGraph',
+    disabledSplit: [],
+    defaultSplit: 'Category',
+    disabledType: [],
+    defaultType: 'Payment',
+    disableLegend: true,
+    disableLabel: true,
+  },
+  {
+    description: 'BarGraph',
+    disabledSplit: [],
+    defaultSplit: 'Category',
+    disabledType: ['Net'],
+    defaultType: 'Payment',
+  },
+  {
+    description: 'AreaGraph',
+    disabledSplit: ['Category', 'Group', 'Payee', 'Account'],
+    defaultSplit: 'Interval',
+    disabledType: [],
+    defaultType: 'Payment',
+    disableLegend: true,
+  },
+  {
+    description: 'DonutGraph',
+    disabledSplit: [],
+    defaultSplit: 'Category',
+    disabledType: ['Net'],
+    defaultType: 'Payment',
+  },
+];
+
+const timeGraphOptions = [
+  {
+    description: 'TableGraph',
+    disabledSplit: ['Interval'],
+    defaultSplit: 'Category',
+    disabledType: [],
+    defaultType: 'Payment',
+    disableLegend: true,
+    disableLabel: true,
+  },
+  {
+    description: 'StackedBarGraph',
+    disabledSplit: ['Interval'],
+    defaultSplit: 'Category',
+    disabledType: ['Net'],
+    defaultType: 'Payment',
+  },
+];
+
+const modeOptions = [
+  {
+    description: 'total',
+    graphs: totalGraphOptions,
+    disabledGraph: [],
+    defaultGraph: 'TableGraph',
+  },
+  {
+    description: 'time',
+    graphs: timeGraphOptions,
+    disabledGraph: ['AreaGraph', 'DonutGraph'],
+    defaultGraph: 'TableGraph',
+  },
+];
+
+export const disabledList = {
+  mode: modeOptions,
+  modeGraphsMap: new Map(
+    modeOptions.map(item => [item.description, item.disabledGraph]),
+  ),
+  graphSplitMap: new Map(
+    modeOptions.map(item => [
+      item.description,
+      new Map([...item.graphs].map(f => [f.description, f.disabledSplit])),
+    ]),
+  ),
+  graphTypeMap: new Map(
+    modeOptions.map(item => [
+      item.description,
+      new Map([...item.graphs].map(f => [f.description, f.disabledType])),
+    ]),
+  ),
+  graphLegendMap: new Map(
+    modeOptions.map(item => [
+      item.description,
+      new Map([...item.graphs].map(f => [f.description, f.disableLegend])),
+    ]),
+  ),
+  graphLabelsMap: new Map(
+    modeOptions.map(item => [
+      item.description,
+      new Map([...item.graphs].map(f => [f.description, f.disableLabel])),
+    ]),
+  ),
+};
+
+export const defaultsList = {
+  mode: modeOptions,
+  modeGraphsMap: new Map(
+    modeOptions.map(item => [item.description, item.defaultGraph]),
+  ),
+  graphSplitMap: new Map(
+    modeOptions.map(item => [
+      item.description,
+      new Map([...item.graphs].map(f => [f.description, f.defaultSplit])),
+    ]),
+  ),
+  graphTypeMap: new Map(
+    modeOptions.map(item => [
+      item.description,
+      new Map([...item.graphs].map(f => [f.description, f.defaultType])),
+    ]),
+  ),
+};
diff --git a/packages/desktop-client/src/components/reports/reports/CustomReport.jsx b/packages/desktop-client/src/components/reports/reports/CustomReport.jsx
index e94d025d7eaab44282a77beeab3d74fe942828cd..406c14991f95b207957d8de785f22abdb451af1d 100644
--- a/packages/desktop-client/src/components/reports/reports/CustomReport.jsx
+++ b/packages/desktop-client/src/components/reports/reports/CustomReport.jsx
@@ -20,6 +20,7 @@ import { View } from '../../common/View';
 import { AppliedFilters } from '../../filters/AppliedFilters';
 import { PrivacyFilter } from '../../PrivacyFilter';
 import { ChooseGraph } from '../ChooseGraph';
+import { defaultsList, disabledList } from '../disabledList';
 import { Header } from '../Header';
 import { LoadingIndicator } from '../LoadingIndicator';
 import { ReportLegend } from '../ReportLegend';
@@ -57,7 +58,6 @@ export function CustomReport() {
     : defaultReport;
 
   const [allMonths, setAllMonths] = useState(null);
-  const [typeDisabled, setTypeDisabled] = useState(['Net']);
 
   const [selectedCategories, setSelectedCategories] = useState(
     loadReport.selectedCategories,
@@ -230,6 +230,65 @@ export function CustomReport() {
     return null;
   }
 
+  const defaultModeItems = (graph, item) => {
+    const chooseGraph = graph || graphType;
+    const newGraph = disabledList.modeGraphsMap.get(item).includes(chooseGraph)
+      ? defaultsList.modeGraphsMap.get(item)
+      : chooseGraph;
+    if (disabledList.modeGraphsMap.get(item).includes(graphType)) {
+      setGraphType(newGraph);
+    }
+
+    if (disabledList.graphSplitMap.get(item).get(newGraph).includes(groupBy)) {
+      setGroupBy(defaultsList.graphSplitMap.get(item).get(newGraph));
+    }
+
+    if (
+      disabledList.graphTypeMap.get(item).get(newGraph).includes(balanceType)
+    ) {
+      setBalanceType(defaultsList.graphTypeMap.get(item).get(newGraph));
+    }
+  };
+
+  const defaultItems = item => {
+    const chooseGraph = ReportOptions.groupBy.includes(item) ? graphType : item;
+    if (
+      disabledList.graphSplitMap.get(mode).get(chooseGraph).includes(groupBy)
+    ) {
+      setGroupBy(defaultsList.graphSplitMap.get(mode).get(chooseGraph));
+    }
+    if (
+      disabledList.graphTypeMap.get(mode).get(chooseGraph).includes(balanceType)
+    ) {
+      setBalanceType(defaultsList.graphTypeMap.get(mode).get(chooseGraph));
+    }
+  };
+
+  const disabledItems = type => {
+    switch (type) {
+      case 'split':
+        return disabledList.graphSplitMap.get(mode).get(graphType);
+      case 'type':
+        return graphType === 'BarGraph' && groupBy === 'Interval'
+          ? []
+          : disabledList.graphTypeMap.get(mode).get(graphType);
+      case 'ShowLegend': {
+        if (disabledList.graphLegendMap.get(mode).get(graphType)) {
+          setViewLegendPref(false);
+        }
+        return disabledList.graphLegendMap.get(mode).get(graphType);
+      }
+      case 'ShowLabels': {
+        if (disabledList.graphLabelsMap.get(mode).get(graphType)) {
+          setViewLabelsPref(false);
+        }
+        return disabledList.graphLabelsMap.get(mode).get(graphType);
+      }
+      default:
+        return disabledList.modeGraphsMap.get(mode).includes(type);
+    }
+  };
+
   const onChangeDates = (startDate, endDate) => {
     setStartDate(startDate);
     setEndDate(endDate);
@@ -344,8 +403,6 @@ export function CustomReport() {
           dateRangeLine={dateRangeLine}
           allMonths={allMonths}
           setDateRange={setDateRange}
-          typeDisabled={typeDisabled}
-          setTypeDisabled={setTypeDisabled}
           setGraphType={setGraphType}
           setGroupBy={setGroupBy}
           setInterval={setInterval}
@@ -358,8 +415,10 @@ export function CustomReport() {
           setShowUncategorized={setShowUncategorized}
           setSelectedCategories={setSelectedCategories}
           onChangeDates={onChangeDates}
-          onChangeViews={onChangeViews}
           onReportChange={onReportChange}
+          disabledItems={disabledItems}
+          defaultItems={defaultItems}
+          defaultModeItems={defaultModeItems}
         />
         <View
           style={{
@@ -371,15 +430,14 @@ export function CustomReport() {
             report={report}
             savedStatus={savedStatus}
             setGraphType={setGraphType}
-            setTypeDisabled={setTypeDisabled}
-            setBalanceType={setBalanceType}
-            setGroupBy={setGroupBy}
             viewLegend={viewLegend}
             viewSummary={viewSummary}
             viewLabels={viewLabels}
             onApplyFilter={onApplyFilter}
             onChangeViews={onChangeViews}
             onReportChange={onReportChange}
+            disabledItems={disabledItems}
+            defaultItems={defaultItems}
           />
           {filters && filters.length > 0 && (
             <View
diff --git a/upcoming-release-notes/2410.md b/upcoming-release-notes/2410.md
new file mode 100644
index 0000000000000000000000000000000000000000..f97934733ad067e986719d137399c21538c064ee
--- /dev/null
+++ b/upcoming-release-notes/2410.md
@@ -0,0 +1,6 @@
+---
+category: Enhancements
+authors: [carkom]
+---
+
+Create a list where disabled items can be easily managed for custom reports.