Skip to content

Commit

Permalink
Merge pull request Expensify#46813 from rezkiy37/feature/45179-invoic…
Browse files Browse the repository at this point in the history
…e-balance-section

Invoicing balance section
  • Loading branch information
madmax330 authored Oct 7, 2024
2 parents 3141c43 + d20a84b commit 8f86ee2
Show file tree
Hide file tree
Showing 6 changed files with 73 additions and 19 deletions.
21 changes: 21 additions & 0 deletions src/components/Balance.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import React from 'react';
import type {StyleProp, TextStyle} from 'react-native';
import useThemeStyles from '@hooks/useThemeStyles';
import * as CurrencyUtils from '@libs/CurrencyUtils';
import Text from './Text';

type BalanceProps = {
textStyles?: StyleProp<TextStyle>;
balance: number;
};

function Balance({textStyles, balance}: BalanceProps) {
const styles = useThemeStyles();
const formattedBalance = CurrencyUtils.convertToDisplayString(balance);

return <Text style={[styles.textHeadline, styles.textXXXLarge, textStyles]}>{formattedBalance}</Text>;
}

Balance.displayName = 'Balance';

export default Balance;
32 changes: 13 additions & 19 deletions src/components/CurrentWalletBalance.tsx
Original file line number Diff line number Diff line change
@@ -1,32 +1,26 @@
import React from 'react';
import type {StyleProp, TextStyle} from 'react-native';
import type {OnyxEntry} from 'react-native-onyx';
import {withOnyx} from 'react-native-onyx';
import {useOnyx} from 'react-native-onyx';
import useThemeStyles from '@hooks/useThemeStyles';
import * as CurrencyUtils from '@libs/CurrencyUtils';
import ONYXKEYS from '@src/ONYXKEYS';
import type UserWallet from '@src/types/onyx/UserWallet';
import Text from './Text';
import Balance from './Balance';

type CurrentWalletBalanceOnyxProps = {
/** The user's wallet account */
userWallet: OnyxEntry<UserWallet>;
};

type CurrentWalletBalanceProps = CurrentWalletBalanceOnyxProps & {
type CurrentWalletBalanceProps = {
balanceStyles?: StyleProp<TextStyle>;
};

function CurrentWalletBalance({userWallet, balanceStyles}: CurrentWalletBalanceProps) {
function CurrentWalletBalance({balanceStyles}: CurrentWalletBalanceProps) {
const styles = useThemeStyles();
const formattedBalance = CurrencyUtils.convertToDisplayString(userWallet?.currentBalance ?? 0);
return <Text style={[styles.pv5, styles.alignSelfCenter, styles.textHeadline, styles.textXXXLarge, balanceStyles]}>{formattedBalance}</Text>;
const [userWallet] = useOnyx(ONYXKEYS.USER_WALLET);

return (
<Balance
textStyles={[styles.pv5, styles.alignSelfCenter, balanceStyles]}
balance={userWallet?.currentBalance ?? 0}
/>
);
}

CurrentWalletBalance.displayName = 'CurrentWalletBalance';

export default withOnyx<CurrentWalletBalanceProps, CurrentWalletBalanceOnyxProps>({
userWallet: {
key: ONYXKEYS.USER_WALLET,
},
})(CurrentWalletBalance);
export default CurrentWalletBalance;
2 changes: 2 additions & 0 deletions src/languages/en.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3665,6 +3665,8 @@ const translations = {
payingAsIndividual: 'Paying as an individual',
payingAsBusiness: 'Paying as a business',
},
invoiceBalance: 'Invoice balance',
invoiceBalanceSubtitle: 'Here’s your current balance from collecting payments on invoices.',
bankAccountsSubtitle: 'Add a bank account to receive invoice payments.',
},
invite: {
Expand Down
2 changes: 2 additions & 0 deletions src/languages/es.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3707,6 +3707,8 @@ const translations = {
payingAsIndividual: 'Pago individual',
payingAsBusiness: 'Pagar como una empresa',
},
invoiceBalance: 'Saldo de la factura',
invoiceBalanceSubtitle: 'Aquí está su saldo actual de la recaudación de pagos en las facturas.',
bankAccountsSubtitle: 'Agrega una cuenta bancaria para recibir pagos de facturas.',
},
invite: {
Expand Down
33 changes: 33 additions & 0 deletions src/pages/workspace/invoices/WorkspaceInvoiceBalanceSection.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
import React from 'react';
import {useOnyx} from 'react-native-onyx';
import Balance from '@components/Balance';
import Section from '@components/Section';
import useLocalize from '@hooks/useLocalize';
import useThemeStyles from '@hooks/useThemeStyles';
import ONYXKEYS from '@src/ONYXKEYS';

type WorkspaceInvoiceBalanceSectionProps = {
/** The policy ID currently being configured */
policyID: string;
};

function WorkspaceInvoiceBalanceSection({policyID}: WorkspaceInvoiceBalanceSectionProps) {
const styles = useThemeStyles();
const {translate} = useLocalize();
const [policy] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY}${policyID}`);

return (
<Section
title={translate('workspace.invoices.invoiceBalance')}
subtitle={translate('workspace.invoices.invoiceBalanceSubtitle')}
isCentralPane
titleStyles={styles.textStrong}
childrenStyles={styles.pt5}
subtitleMuted
>
<Balance balance={policy?.invoice?.bankAccount?.stripeConnectAccountBalance ?? 0} />
</Section>
);
}

export default WorkspaceInvoiceBalanceSection;
2 changes: 2 additions & 0 deletions src/pages/workspace/invoices/WorkspaceInvoicesPage.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import AccessOrNotFoundWrapper from '@pages/workspace/AccessOrNotFoundWrapper';
import WorkspacePageWithSections from '@pages/workspace/WorkspacePageWithSections';
import CONST from '@src/CONST';
import type SCREENS from '@src/SCREENS';
import WorkspaceInvoiceBalanceSection from './WorkspaceInvoiceBalanceSection';
import WorkspaceInvoicesNoVBAView from './WorkspaceInvoicesNoVBAView';
import WorkspaceInvoicesVBAView from './WorkspaceInvoicesVBAView';
import WorkspaceInvoiceVBASection from './WorkspaceInvoiceVBASection';
Expand All @@ -34,6 +35,7 @@ function WorkspaceInvoicesPage({route}: WorkspaceInvoicesPageProps) {
>
{(hasVBA?: boolean, policyID?: string) => (
<View style={[styles.mt3, shouldUseNarrowLayout ? styles.workspaceSectionMobile : styles.workspaceSection]}>
{policyID && <WorkspaceInvoiceBalanceSection policyID={policyID} />}
{policyID && <WorkspaceInvoiceVBASection policyID={policyID} />}
{!hasVBA && policyID && <WorkspaceInvoicesNoVBAView policyID={policyID} />}
{hasVBA && policyID && <WorkspaceInvoicesVBAView policyID={policyID} />}
Expand Down

0 comments on commit 8f86ee2

Please sign in to comment.