diff --git a/packages/desktop-client/e2e/reports.test.js-snapshots/Reports-loads-net-worth-and-cash-flow-reports-1-chromium-linux.png b/packages/desktop-client/e2e/reports.test.js-snapshots/Reports-loads-net-worth-and-cash-flow-reports-1-chromium-linux.png index 5d70d3923a072125aa2894b704dd17ac61f0d8c5..f62d41599940d0fdbebf5055a5cd3e51d631ffc8 100644 Binary files a/packages/desktop-client/e2e/reports.test.js-snapshots/Reports-loads-net-worth-and-cash-flow-reports-1-chromium-linux.png and b/packages/desktop-client/e2e/reports.test.js-snapshots/Reports-loads-net-worth-and-cash-flow-reports-1-chromium-linux.png differ diff --git a/packages/desktop-client/e2e/reports.test.js-snapshots/Reports-loads-net-worth-and-cash-flow-reports-2-chromium-linux.png b/packages/desktop-client/e2e/reports.test.js-snapshots/Reports-loads-net-worth-and-cash-flow-reports-2-chromium-linux.png index a21db20c601dda2ab22ce13a62c7d70791dd4081..5d1c88fb7f6ddf47ddc3a87f9f8fc239bf7191a3 100644 Binary files a/packages/desktop-client/e2e/reports.test.js-snapshots/Reports-loads-net-worth-and-cash-flow-reports-2-chromium-linux.png and b/packages/desktop-client/e2e/reports.test.js-snapshots/Reports-loads-net-worth-and-cash-flow-reports-2-chromium-linux.png differ diff --git a/packages/desktop-client/e2e/reports.test.js-snapshots/Reports-loads-net-worth-and-cash-flow-reports-3-chromium-linux.png b/packages/desktop-client/e2e/reports.test.js-snapshots/Reports-loads-net-worth-and-cash-flow-reports-3-chromium-linux.png index 2021bf6585f1efd1f2b2f3385e5ea40ce1e76e6e..e3429c77e958034315b9187341787e382c45c0b3 100644 Binary files a/packages/desktop-client/e2e/reports.test.js-snapshots/Reports-loads-net-worth-and-cash-flow-reports-3-chromium-linux.png and b/packages/desktop-client/e2e/reports.test.js-snapshots/Reports-loads-net-worth-and-cash-flow-reports-3-chromium-linux.png differ diff --git a/packages/desktop-client/src/components/reports/Overview.tsx b/packages/desktop-client/src/components/reports/Overview.tsx index b2714d154a8ea2bf5e319de550dea08b7066c78b..34fb1b17acb8a86651d3019842a7c9f751edddb7 100644 --- a/packages/desktop-client/src/components/reports/Overview.tsx +++ b/packages/desktop-client/src/components/reports/Overview.tsx @@ -1,6 +1,8 @@ import React from 'react'; import { useLocation } from 'react-router-dom'; +import { css } from 'glamor'; + import { useReports } from 'loot-core/src/client/data-hooks/reports'; import { useAccounts } from '../../hooks/useAccounts'; @@ -56,16 +58,21 @@ export function Overview() { style={{ paddingBottom: MOBILE_NAV_HEIGHT }} > <View - style={{ - flexDirection: isNarrowWidth ? 'column' : 'row', + className={`${css({ flex: '0 0 auto', - }} + flexDirection: isNarrowWidth ? 'column' : 'row', + flexWrap: isNarrowWidth ? 'nowrap' : 'wrap', + padding: '10', + '> a, > div': { + margin: '10', + }, + })}`} > <NetWorthCard accounts={accounts} /> <CashFlowCard /> {spendingReportFeatureFlag && <SpendingCard />} + <CustomReportListCards reports={customReports} /> </View> - <CustomReportListCards reports={customReports} /> </Page> ); } diff --git a/packages/desktop-client/src/components/reports/ReportCard.tsx b/packages/desktop-client/src/components/reports/ReportCard.tsx index fb69523ab40489fc960349082fd3c5ad94f7b631..08e2bcf646bc73f83fb0d1c78e17391d07b7062d 100644 --- a/packages/desktop-client/src/components/reports/ReportCard.tsx +++ b/packages/desktop-client/src/components/reports/ReportCard.tsx @@ -2,6 +2,7 @@ import React, { type ReactNode } from 'react'; import { type CustomReportEntity } from 'loot-core/src/types/models'; +import { useResponsive } from '../../ResponsiveProvider'; import { type CSSProperties, theme } from '../../style'; import { Link } from '../common/Link'; import { View } from '../common/View'; @@ -10,7 +11,7 @@ type ReportCardProps = { to: string; children: ReactNode; report?: CustomReportEntity; - flex?: string; + size?: number; style?: CSSProperties; }; @@ -18,10 +19,13 @@ export function ReportCard({ to, report, children, - flex, + size = 1, style, }: ReportCardProps) { - const containerProps = { flex, margin: 15 }; + const { isNarrowWidth } = useResponsive(); + const containerProps = { + flex: isNarrowWidth ? '1 1' : `0 0 calc(${size * 100}% / 3 - 20px)`, + }; const content = ( <View diff --git a/packages/desktop-client/src/components/reports/reports/CashFlowCard.jsx b/packages/desktop-client/src/components/reports/reports/CashFlowCard.jsx index ae376b2c5cde6f8ec751bb3119dd338b350df8d8..7d54f045487a9af6007e183be173a94af25f38d5 100644 --- a/packages/desktop-client/src/components/reports/reports/CashFlowCard.jsx +++ b/packages/desktop-client/src/components/reports/reports/CashFlowCard.jsx @@ -83,7 +83,7 @@ export function CashFlowCard() { const income = graphData?.income || 0; return ( - <ReportCard flex={1} to="/reports/cash-flow"> + <ReportCard to="/reports/cash-flow"> <View style={{ flex: 1 }} onPointerEnter={onCardHover} diff --git a/packages/desktop-client/src/components/reports/reports/CustomReportListCards.tsx b/packages/desktop-client/src/components/reports/reports/CustomReportListCards.tsx index 4b7034602a604558554104d988066bb2adbbf3b9..bfc998b208f3f8db1bf2830b0479a234fb01e1aa 100644 --- a/packages/desktop-client/src/components/reports/reports/CustomReportListCards.tsx +++ b/packages/desktop-client/src/components/reports/reports/CustomReportListCards.tsx @@ -1,4 +1,4 @@ -import React, { useEffect, useMemo, useState } from 'react'; +import React, { useEffect, useState } from 'react'; import { send, sendCatch } from 'loot-core/platform/client/fetch/index'; import * as monthUtils from 'loot-core/src/shared/months'; @@ -47,9 +47,9 @@ export function CustomReportListCards({ const payees = usePayees(); const accounts = useAccounts(); const categories = useCategories(); - const { isNarrowWidth } = useResponsive(); const [_firstDayOfWeekIdx] = useLocalPref('firstDayOfWeekIdx'); const firstDayOfWeekIdx = _firstDayOfWeekIdx || '0'; + const { isNarrowWidth } = useResponsive(); const [isCardHovered, setIsCardHovered] = useState(''); @@ -118,137 +118,90 @@ export function CustomReportListCards({ setNameMenuOpen({ ...nameMenuOpen, [item]: state }); }; - const chunkSize = 3; - - const groups = useMemo(() => { - return reports - .map((report: CustomReportEntity, i: number) => { - return i % chunkSize === 0 ? reports.slice(i, i + chunkSize) : null; - }) - .filter(e => { - return e; - }); - }, [reports]); - - const remainder = 3 - (reports.length % 3); - if (reports.length === 0) return null; return ( - <View> - {groups.map((group, i) => ( + <> + {reports.map((report, id) => ( <View - key={i} + key={id} style={{ - flex: '0 0 auto', - flexDirection: isNarrowWidth ? 'column' : 'row', + flex: isNarrowWidth ? '1 1' : `0 0 calc(100% / 3 - 20px)`, }} > - {group && - group.map((report, id) => ( + <ReportCard to="/reports/custom" report={report}> + <View + style={{ flex: 1, padding: 10 }} + onMouseEnter={() => + setIsCardHovered(report.id === undefined ? '' : report.id) + } + onMouseLeave={() => { + setIsCardHovered(''); + onMenuOpen(report.id === undefined ? '' : report.id, false); + }} + > <View - key={id} - style={ - !isNarrowWidth - ? { - position: 'relative', - flex: '1', - } - : { - position: 'relative', - } - } + style={{ + flexShrink: 0, + paddingBottom: 5, + }} > - <View style={{ width: '100%', height: '100%' }}> - <ReportCard to="/reports/custom" report={report}> - <View - style={{ flex: 1, padding: 10 }} - onMouseEnter={() => - setIsCardHovered( - report.id === undefined ? '' : report.id, - ) - } - onMouseLeave={() => { - setIsCardHovered(''); - onMenuOpen( - report.id === undefined ? '' : report.id, - false, - ); - }} - > - <View - style={{ - flexShrink: 0, - paddingBottom: 5, - }} - > - <View style={{ flex: 1 }}> - <Block - style={{ - ...styles.mediumText, - fontWeight: 500, - marginBottom: 5, - }} - role="heading" - > - {report.name} - </Block> - {report.isDateStatic ? ( - <DateRange - start={report.startDate} - end={report.endDate} - /> - ) : ( - <Text style={{ color: theme.pageTextSubdued }}> - {report.dateRange} - </Text> - )} - </View> - </View> - <GetCardData - report={report} - payees={payees} - accounts={accounts} - categories={categories} - earliestTransaction={earliestTransaction} - firstDayOfWeekIdx={firstDayOfWeekIdx} - /> - </View> - </ReportCard> - </View> - <View - style={{ - textAlign: 'right', - position: 'absolute', - right: 25, - top: 25, - }} - > - <ListCardsPopover - report={report} - onMenuOpen={onMenuOpen} - isCardHovered={isCardHovered} - reportMenu={reportMenu} - onMenuSelect={onMenuSelect} - nameMenuOpen={nameMenuOpen} - name={name} - setName={setName} - onAddUpdate={onAddUpdate} - err={err} - onNameMenuOpen={onNameMenuOpen} - deleteMenuOpen={deleteMenuOpen} - onDeleteMenuOpen={onDeleteMenuOpen} - onDelete={onDelete} - /> + <View style={{ flex: 1 }}> + <Block + style={{ + ...styles.mediumText, + fontWeight: 500, + marginBottom: 5, + }} + role="heading" + > + {report.name} + </Block> + {report.isDateStatic ? ( + <DateRange start={report.startDate} end={report.endDate} /> + ) : ( + <Text style={{ color: theme.pageTextSubdued }}> + {report.dateRange} + </Text> + )} </View> </View> - ))} - {remainder !== 3 && - i + 1 === groups.length && - [...Array(remainder)].map((e, i) => ( - <View key={i} style={{ flex: 1 }} /> - ))} + <GetCardData + report={report} + payees={payees} + accounts={accounts} + categories={categories} + earliestTransaction={earliestTransaction} + firstDayOfWeekIdx={firstDayOfWeekIdx} + /> + </View> + </ReportCard> + <View + style={{ + textAlign: 'right', + position: 'absolute', + right: 10, + top: 10, + }} + > + <ListCardsPopover + report={report} + onMenuOpen={onMenuOpen} + isCardHovered={isCardHovered} + reportMenu={reportMenu} + onMenuSelect={onMenuSelect} + nameMenuOpen={nameMenuOpen} + name={name} + setName={setName} + onAddUpdate={onAddUpdate} + err={err} + onNameMenuOpen={onNameMenuOpen} + deleteMenuOpen={deleteMenuOpen} + onDeleteMenuOpen={onDeleteMenuOpen} + onDelete={onDelete} + /> + </View> </View> ))} - </View> + </> ); } diff --git a/packages/desktop-client/src/components/reports/reports/NetWorthCard.jsx b/packages/desktop-client/src/components/reports/reports/NetWorthCard.jsx index dc0ca1964de43af8e9a2fbb38742172ad44cb7d8..c318690ec75b4a4298aa552145b9d5e125cd0e65 100644 --- a/packages/desktop-client/src/components/reports/reports/NetWorthCard.jsx +++ b/packages/desktop-client/src/components/reports/reports/NetWorthCard.jsx @@ -29,7 +29,7 @@ export function NetWorthCard({ accounts }) { const data = useReport('net_worth', params); return ( - <ReportCard flex={2} to="/reports/net-worth"> + <ReportCard size={2} to="/reports/net-worth"> <View style={{ flex: 1 }} onPointerEnter={onCardHover} diff --git a/packages/desktop-client/src/components/reports/reports/SpendingCard.tsx b/packages/desktop-client/src/components/reports/reports/SpendingCard.tsx index d999494ed9b00e7be5b0f211040f096e4d4a0b08..2796261d1c7f2ec71958e1e8f88322f5241a871a 100644 --- a/packages/desktop-client/src/components/reports/reports/SpendingCard.tsx +++ b/packages/desktop-client/src/components/reports/reports/SpendingCard.tsx @@ -39,7 +39,7 @@ export function SpendingCard() { const showLastMonth = data && Math.abs(data.intervalData[27].lastMonth) > 0; return ( - <ReportCard flex="1" to="/reports/spending"> + <ReportCard to="/reports/spending"> <View style={{ flex: 1 }} onPointerEnter={() => setIsCardHovered(true)} diff --git a/upcoming-release-notes/3007.md b/upcoming-release-notes/3007.md new file mode 100644 index 0000000000000000000000000000000000000000..c879b21979cec7884fa3d5f4a2cef17d20f3156e --- /dev/null +++ b/upcoming-release-notes/3007.md @@ -0,0 +1,6 @@ +--- +category: Bugfix +authors: [JukeboxRhino] +--- + +Fix alignment of reports