diff --git a/packages/desktop-client/src/components/reports/CashFlow.js b/packages/desktop-client/src/components/reports/CashFlow.js index b2ed9fc035deb56351012dd18debd2d28e600535..662dc28103ffb4f329f86e0583e8296b322083d0 100644 --- a/packages/desktop-client/src/components/reports/CashFlow.js +++ b/packages/desktop-client/src/components/reports/CashFlow.js @@ -13,6 +13,7 @@ import Block from '../common/Block'; import Paragraph from '../common/Paragraph'; import Text from '../common/Text'; import View from '../common/View'; +import PrivacyFilter from '../PrivacyFilter'; import Change from './Change'; import { cashFlowByDate } from './graphs/cash-flow-spreadsheet'; @@ -132,7 +133,7 @@ function CashFlow() { left={<Block>Income:</Block>} right={ <Text style={{ fontWeight: 600 }}> - {integerToCurrency(totalIncome)} + <PrivacyFilter>{integerToCurrency(totalIncome)}</PrivacyFilter> </Text> } /> @@ -142,7 +143,9 @@ function CashFlow() { left={<Block>Expenses:</Block>} right={ <Text style={{ fontWeight: 600 }}> - {integerToCurrency(totalExpenses)} + <PrivacyFilter> + {integerToCurrency(totalExpenses)} + </PrivacyFilter> </Text> } /> @@ -152,12 +155,16 @@ function CashFlow() { left={<Block>Transfers:</Block>} right={ <Text style={{ fontWeight: 600 }}> - {integerToCurrency(totalTransfers)} + <PrivacyFilter> + {integerToCurrency(totalTransfers)} + </PrivacyFilter> </Text> } /> <Text style={{ fontWeight: 600 }}> - <Change amount={totalIncome + totalExpenses + totalTransfers} /> + <PrivacyFilter> + <Change amount={totalIncome + totalExpenses + totalTransfers} /> + </PrivacyFilter> </Text> </View> diff --git a/packages/desktop-client/src/components/reports/NetWorth.js b/packages/desktop-client/src/components/reports/NetWorth.js index b1cb62127f986288c911d25193dbeb8716a96d04..8988cff786895ffe105a01298a7354943d3bf695 100644 --- a/packages/desktop-client/src/components/reports/NetWorth.js +++ b/packages/desktop-client/src/components/reports/NetWorth.js @@ -11,6 +11,7 @@ import useFilters from '../../hooks/useFilters'; import { styles } from '../../style'; import Paragraph from '../common/Paragraph'; import View from '../common/View'; +import PrivacyFilter from '../PrivacyFilter'; import Change from './Change'; import netWorthSpreadsheet from './graphs/net-worth-spreadsheet'; @@ -117,9 +118,13 @@ export default function NetWorth() { <View style={[styles.largeText, { fontWeight: 400, marginBottom: 5 }]} > - {integerToCurrency(data.netWorth)} + <PrivacyFilter blurIntensity={5}> + {integerToCurrency(data.netWorth)} + </PrivacyFilter> </View> - <Change amount={data.totalChange} /> + <PrivacyFilter> + <Change amount={data.totalChange} /> + </PrivacyFilter> </View> <NetWorthGraph start={start} end={end} graphData={data.graphData} /> diff --git a/packages/desktop-client/src/components/reports/Overview.js b/packages/desktop-client/src/components/reports/Overview.js index 7b01ee811d344c0c455aafe9da5f2a49c7b4e247..b4e4a7ed8cee4f79bbec855f394c98faa47a3909 100644 --- a/packages/desktop-client/src/components/reports/Overview.js +++ b/packages/desktop-client/src/components/reports/Overview.js @@ -1,4 +1,4 @@ -import React, { useMemo } from 'react'; +import React, { useCallback, useMemo, useState } from 'react'; import { useSelector } from 'react-redux'; import { VictoryBar, VictoryGroup, VictoryVoronoiContainer } from 'victory'; @@ -10,6 +10,7 @@ import { colors, styles } from '../../style'; import AnchorLink from '../common/AnchorLink'; import Block from '../common/Block'; import View from '../common/View'; +import PrivacyFilter from '../PrivacyFilter'; import Change from './Change'; import theme from './chart-theme'; @@ -61,6 +62,9 @@ function Card({ flex, to, style, children }) { function NetWorthCard({ accounts }) { const end = monthUtils.currentMonth(); const start = monthUtils.subMonths(end, 5); + const [isCardHovered, setIsCardHovered] = useState(false); + const onCardHover = useCallback(() => setIsCardHovered(true)); + const onCardHoverEnd = useCallback(() => setIsCardHovered(false)); const params = useMemo( () => netWorthSpreadsheet(start, end, accounts), @@ -74,7 +78,11 @@ function NetWorthCard({ accounts }) { return ( <Card flex={2} to="/reports/net-worth"> - <View style={{ flex: 1 }}> + <View + style={{ flex: 1 }} + onPointerEnter={onCardHover} + onPointerLeave={onCardHoverEnd} + > <View style={{ flexDirection: 'row', padding: 20 }}> <View style={{ flex: 1 }}> <Block @@ -89,12 +97,16 @@ function NetWorthCard({ accounts }) { <Block style={[styles.mediumText, { fontWeight: 500, marginBottom: 5 }]} > - {integerToCurrency(data.netWorth)} + <PrivacyFilter activationFilters={[!isCardHovered]}> + {integerToCurrency(data.netWorth)} + </PrivacyFilter> </Block> - <Change - amount={data.totalChange} - style={{ color: colors.n6, fontWeight: 300 }} - /> + <PrivacyFilter activationFilters={[!isCardHovered]}> + <Change + amount={data.totalChange} + style={{ color: colors.n6, fontWeight: 300 }} + /> + </PrivacyFilter> </View> </View> @@ -116,6 +128,10 @@ function CashFlowCard() { const params = useMemo(() => simpleCashFlow(start, end), [start, end]); const data = useReport('cash_flow_simple', params); + const [isCardHovered, setIsCardHovered] = useState(false); + const onCardHover = useCallback(() => setIsCardHovered(true)); + const onCardHoverEnd = useCallback(() => setIsCardHovered(false)); + if (!data) { return null; } @@ -126,7 +142,11 @@ function CashFlowCard() { return ( <Card flex={1} to="/reports/cash-flow"> - <View style={{ flex: 1 }}> + <View + style={{ flex: 1 }} + onPointerEnter={onCardHover} + onPointerLeave={onCardHoverEnd} + > <View style={{ flexDirection: 'row', padding: 20 }}> <View style={{ flex: 1 }}> <Block @@ -138,10 +158,12 @@ function CashFlowCard() { <DateRange start={start} end={end} /> </View> <View style={{ textAlign: 'right' }}> - <Change - amount={income - expense} - style={{ color: colors.n6, fontWeight: 300 }} - /> + <PrivacyFilter activationFilters={[!isCardHovered]}> + <Change + amount={income - expense} + style={{ color: colors.n6, fontWeight: 300 }} + /> + </PrivacyFilter> </View> </View> @@ -185,10 +207,14 @@ function CashFlowCard() { x: 30, y: Math.max(income, 5), premadeLabel: ( - <div style={{ textAlign: 'right' }}> - <div>Income</div> - <div>{integerToCurrency(income)}</div> - </div> + <View style={{ textAlign: 'right' }}> + Income + <View> + <PrivacyFilter activationFilters={[!isCardHovered]}> + {integerToCurrency(income)} + </PrivacyFilter> + </View> + </View> ), labelPosition: 'left', }, @@ -202,10 +228,14 @@ function CashFlowCard() { x: 60, y: Math.max(expense, 5), premadeLabel: ( - <div> - <div>Expenses</div> - <div>{integerToCurrency(expense)}</div> - </div> + <View> + Expenses + <View> + <PrivacyFilter activationFilters={[!isCardHovered]}> + {integerToCurrency(expense)} + </PrivacyFilter> + </View> + </View> ), labelPosition: 'right', fill: theme.colors.red, diff --git a/upcoming-release-notes/1447.md b/upcoming-release-notes/1447.md new file mode 100644 index 0000000000000000000000000000000000000000..fc32a33b0aa2db22223e1b197f192b63ba3ed928 --- /dev/null +++ b/upcoming-release-notes/1447.md @@ -0,0 +1,6 @@ +--- +category: Enhancements +authors: [joel-jeremy] +--- + +Reports privacy filter