From 0aa6a057b1626c4b9ff60f2c6a516ee42a389584 Mon Sep 17 00:00:00 2001
From: Neil <55785687+carkom@users.noreply.github.com>
Date: Fri, 3 May 2024 20:32:37 +0100
Subject: [PATCH] Custom Reports changes (#2677)

* adjustments

* notes

* scroll height

* lint fix

* compact scrollbar

* fixes

* filters fix

* scrollbar color

* fix week ranges
---
 .../src/components/reports/ReportOptions.ts   |  7 ++--
 .../src/components/reports/ReportSidebar.jsx  | 40 +++++++++----------
 .../graphs/tableGraph/ReportTableTotals.tsx   |  8 ++++
 .../src/components/reports/reportRanges.ts    |  3 +-
 .../reports/reports/CustomReport.jsx          | 11 ++---
 .../spreadsheets/custom-spreadsheet.ts        | 19 +++------
 .../spreadsheets/grouped-spreadsheet.ts       | 10 +----
 packages/desktop-client/src/style/styles.ts   | 15 +++++++
 packages/loot-core/src/shared/months.ts       |  3 +-
 upcoming-release-notes/2677.md                |  6 +++
 10 files changed, 67 insertions(+), 55 deletions(-)
 create mode 100644 upcoming-release-notes/2677.md

diff --git a/packages/desktop-client/src/components/reports/ReportOptions.ts b/packages/desktop-client/src/components/reports/ReportOptions.ts
index 4f58c81de..acad7f742 100644
--- a/packages/desktop-client/src/components/reports/ReportOptions.ts
+++ b/packages/desktop-client/src/components/reports/ReportOptions.ts
@@ -136,20 +136,21 @@ const intervalOptions = [
   {
     description: 'Daily',
     name: 'Day',
-    format: 'yyyy-MM-dd',
+    format: 'yy-MM-dd',
     range: 'dayRangeInclusive',
   },
   {
     description: 'Weekly',
     name: 'Week',
-    format: 'yyyy-MM-dd',
+    format: 'yy-MM-dd',
     range: 'weekRangeInclusive',
   },
   //{ value: 3, description: 'Fortnightly', name: 3},
   {
     description: 'Monthly',
     name: 'Month',
-    format: 'MMMM, yyyy',
+    // eslint-disable-next-line rulesdir/typography
+    format: "MMM ''yy",
     range: 'rangeInclusive',
   },
   {
diff --git a/packages/desktop-client/src/components/reports/ReportSidebar.jsx b/packages/desktop-client/src/components/reports/ReportSidebar.jsx
index e48fb0be5..23f949a4a 100644
--- a/packages/desktop-client/src/components/reports/ReportSidebar.jsx
+++ b/packages/desktop-client/src/components/reports/ReportSidebar.jsx
@@ -431,28 +431,26 @@ export function ReportSidebar({
           }}
         />
       </View>
-      {['Category', 'Group'].includes(customReportItems.groupBy) && (
-        <View
-          style={{
-            marginTop: 10,
-            minHeight: 200,
+      <View
+        style={{
+          marginTop: 10,
+          minHeight: 200,
+        }}
+      >
+        <CategorySelector
+          categoryGroups={categories.grouped.filter(f => {
+            return customReportItems.showHiddenCategories || !f.hidden
+              ? true
+              : false;
+          })}
+          selectedCategories={customReportItems.selectedCategories}
+          setSelectedCategories={e => {
+            setSelectedCategories(e);
+            onReportChange({ type: 'modify' });
           }}
-        >
-          <CategorySelector
-            categoryGroups={categories.grouped.filter(f => {
-              return customReportItems.showHiddenCategories || !f.hidden
-                ? true
-                : false;
-            })}
-            selectedCategories={customReportItems.selectedCategories}
-            setSelectedCategories={e => {
-              setSelectedCategories(e);
-              onReportChange({ type: 'modify' });
-            }}
-            showHiddenCategories={customReportItems.showHiddenCategories}
-          />
-        </View>
-      )}
+          showHiddenCategories={customReportItems.showHiddenCategories}
+        />
+      </View>
     </View>
   );
 }
diff --git a/packages/desktop-client/src/components/reports/graphs/tableGraph/ReportTableTotals.tsx b/packages/desktop-client/src/components/reports/graphs/tableGraph/ReportTableTotals.tsx
index d47cf0253..8cae27600 100644
--- a/packages/desktop-client/src/components/reports/graphs/tableGraph/ReportTableTotals.tsx
+++ b/packages/desktop-client/src/components/reports/graphs/tableGraph/ReportTableTotals.tsx
@@ -10,6 +10,7 @@ import {
 import { type GroupedEntity } from 'loot-core/src/types/models/reports';
 
 import { theme } from '../../../../style';
+import { styles } from '../../../../style/styles';
 import { type CSSProperties } from '../../../../style/types';
 import { View } from '../../../common/View';
 import { Row, Cell } from '../../../table';
@@ -72,6 +73,13 @@ export function ReportTableTotals({
         id="total"
         style={{
           overflowX: 'auto',
+          scrollbarWidth: compact ? 'none' : 'inherit',
+          ...styles.horizontalScrollbar,
+          '::-webkit-scrollbar': {
+            backgroundColor: theme.tableBackground,
+            height: 12,
+            dispaly: compact && 'none',
+          },
           flexDirection: 'row',
           flex: 1,
         }}
diff --git a/packages/desktop-client/src/components/reports/reportRanges.ts b/packages/desktop-client/src/components/reports/reportRanges.ts
index 8c6326cab..0acf4d42b 100644
--- a/packages/desktop-client/src/components/reports/reportRanges.ts
+++ b/packages/desktop-client/src/components/reports/reportRanges.ts
@@ -134,6 +134,7 @@ export function getSpecificRange(
   firstDayOfWeekIdx?: LocalPrefs['firstDayOfWeekIdx'],
 ) {
   const currentDay = monthUtils.currentDay();
+  const currentWeek = monthUtils.currentWeek(firstDayOfWeekIdx);
 
   let dateStart = monthUtils.subMonths(currentDay, offset) + '-01';
   let dateEnd = monthUtils.getMonthEnd(
@@ -142,7 +143,7 @@ export function getSpecificRange(
   );
 
   if (type === 'Weeks') {
-    dateStart = monthUtils.subWeeks(currentDay, offset);
+    dateStart = monthUtils.subWeeks(currentWeek, offset);
     dateEnd = monthUtils.getWeekEnd(
       monthUtils.addWeeks(dateStart, addNumber === null ? offset : addNumber),
       firstDayOfWeekIdx,
diff --git a/packages/desktop-client/src/components/reports/reports/CustomReport.jsx b/packages/desktop-client/src/components/reports/reports/CustomReport.jsx
index b6cb2fa39..cc375de1d 100644
--- a/packages/desktop-client/src/components/reports/reports/CustomReport.jsx
+++ b/packages/desktop-client/src/components/reports/reports/CustomReport.jsx
@@ -121,6 +121,7 @@ export function CustomReport() {
 
   useEffect(() => {
     async function run() {
+      onApplyFilter(null);
       report.conditions.forEach(condition => onApplyFilter(condition));
       const trans = await send('get-earliest-transaction');
       setEarliestTransaction(trans ? trans.date : monthUtils.currentDay());
@@ -164,16 +165,10 @@ export function CustomReport() {
   }, [interval]);
 
   useEffect(() => {
-    const format =
-      ReportOptions.intervalMap.get(interval).toLowerCase() + 'FromDate';
-
-    const dateStart = monthUtils[format](startDate);
-    const dateEnd = monthUtils[format](endDate);
-
     const rangeProps =
       interval === 'Weekly'
-        ? [dateStart, dateEnd, firstDayOfWeekIdx]
-        : [dateStart, dateEnd];
+        ? [startDate, endDate, firstDayOfWeekIdx]
+        : [startDate, endDate];
     setIntervals(
       monthUtils[ReportOptions.intervalRange.get(interval)](...rangeProps),
     );
diff --git a/packages/desktop-client/src/components/reports/spreadsheets/custom-spreadsheet.ts b/packages/desktop-client/src/components/reports/spreadsheets/custom-spreadsheet.ts
index 860efbc07..e40e32b65 100644
--- a/packages/desktop-client/src/components/reports/spreadsheets/custom-spreadsheet.ts
+++ b/packages/desktop-client/src/components/reports/spreadsheets/custom-spreadsheet.ts
@@ -143,16 +143,10 @@ export function createCustomSpreadsheet({
       });
     }
 
-    const format =
-      ReportOptions.intervalMap.get(interval).toLowerCase() + 'FromDate';
     const rangeProps =
       interval === 'Weekly'
-        ? [
-            monthUtils[format](startDate),
-            monthUtils[format](endDate),
-            firstDayOfWeekIdx,
-          ]
-        : [monthUtils[format](startDate), monthUtils[format](endDate)];
+        ? [startDate, endDate, firstDayOfWeekIdx]
+        : [startDate, endDate];
     const intervals = monthUtils[ReportOptions.intervalRange.get(interval)](
       ...rangeProps,
     );
@@ -214,11 +208,10 @@ export function createCustomSpreadsheet({
       totalDebts += perIntervalDebts;
 
       arr.push({
-        date:
-          interval === 'Monthly'
-            ? // eslint-disable-next-line rulesdir/typography
-              d.format(d.parseISO(`${intervalItem}-01`), "MMM ''yy")
-            : intervalItem,
+        date: d.format(
+          d.parseISO(intervalItem),
+          ReportOptions.intervalFormat.get(interval),
+        ),
         ...stacked,
         dateStart: intervalItem,
         totalDebts: integerToAmount(perIntervalDebts),
diff --git a/packages/desktop-client/src/components/reports/spreadsheets/grouped-spreadsheet.ts b/packages/desktop-client/src/components/reports/spreadsheets/grouped-spreadsheet.ts
index da794cdfe..591cb81cf 100644
--- a/packages/desktop-client/src/components/reports/spreadsheets/grouped-spreadsheet.ts
+++ b/packages/desktop-client/src/components/reports/spreadsheets/grouped-spreadsheet.ts
@@ -92,16 +92,10 @@ export function createGroupedSpreadsheet({
       });
     }
 
-    const format =
-      ReportOptions.intervalMap.get(interval).toLowerCase() + 'FromDate';
     const rangeProps =
       interval === 'Weekly'
-        ? [
-            monthUtils[format](startDate),
-            monthUtils[format](endDate),
-            firstDayOfWeekIdx,
-          ]
-        : [monthUtils[format](startDate), monthUtils[format](endDate)];
+        ? [startDate, endDate, firstDayOfWeekIdx]
+        : [startDate, endDate];
     const intervals = monthUtils[ReportOptions.intervalRange.get(interval)](
       ...rangeProps,
     );
diff --git a/packages/desktop-client/src/style/styles.ts b/packages/desktop-client/src/style/styles.ts
index e7c8e1794..e630ac4f4 100644
--- a/packages/desktop-client/src/style/styles.ts
+++ b/packages/desktop-client/src/style/styles.ts
@@ -139,6 +139,7 @@ export const styles = {
     overflow: 'auto',
   },
   // Dynamically set
+  horizontalScrollbar: null as CSSProperties | null,
   lightScrollbar: null as CSSProperties | null,
   darkScrollbar: null as CSSProperties | null,
   scrollbarWidth: null as number | null,
@@ -151,6 +152,20 @@ let hiddenScrollbars = false;
 // lightScrollbar => primary
 // darkScrollbar => secondary
 function onScrollbarChange() {
+  styles.horizontalScrollbar = !hiddenScrollbars && {
+    '::-webkit-scrollbar': {
+      backgroundColor: 'inherit',
+      height: 12,
+    },
+    '::-webkit-scrollbar-thumb': {
+      width: 7,
+      borderRadius: 30,
+      backgroundClip: 'padding-box',
+      border: '2px solid rgba(0, 0, 0, 0)',
+      backgroundColor: '#d0d0d0',
+    },
+  };
+
   styles.lightScrollbar = !hiddenScrollbars && {
     '& ::-webkit-scrollbar': {
       width: 11,
diff --git a/packages/loot-core/src/shared/months.ts b/packages/loot-core/src/shared/months.ts
index 6be72eddc..482843466 100644
--- a/packages/loot-core/src/shared/months.ts
+++ b/packages/loot-core/src/shared/months.ts
@@ -256,7 +256,8 @@ export function _weekRange(
 ): string[] {
   const weeks: string[] = [];
   let week = weekFromDate(start, firstDayOfWeekIdx);
-  while (d.isBefore(_parse(week), _parse(end))) {
+  const endWeek = weekFromDate(end, firstDayOfWeekIdx);
+  while (d.isBefore(_parse(week), _parse(endWeek))) {
     weeks.push(week);
     week = addWeeks(week, 1);
   }
diff --git a/upcoming-release-notes/2677.md b/upcoming-release-notes/2677.md
new file mode 100644
index 000000000..db2ea4278
--- /dev/null
+++ b/upcoming-release-notes/2677.md
@@ -0,0 +1,6 @@
+---
+category: Enhancements
+authors: [carkom]
+---
+
+Fixing small visual issues with custom reports.
-- 
GitLab