Skip to content

Commit 3724a98

Browse files
committed
feat(new-ui): support dynamic text in transaction modals
1 parent f2af34a commit 3724a98

File tree

5 files changed

+586
-151
lines changed

5 files changed

+586
-151
lines changed

packages/new-polymath-ui/src/components/ModalConfirmTransactionQueue/ModalConfirmTransactionQueue.tsx

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,20 +3,25 @@ import { types, typeHelpers } from '@polymathnetwork/new-shared';
33
import { ModalConfirm } from '~/components/ModalConfirm';
44
import { Paragraph } from '~/components/Paragraph';
55
import { ModalStatus } from '~/components/Modal/types';
6-
import { getTransactionQueueText } from '~/components/utils/contentMappings';
6+
import { getTransactionQueueContent } from '~/components/utils/contentMappings';
77
import { TransactionItem } from './TransactionItem';
88

99
type ModalConfirmProps = typeHelpers.GetProps<typeof ModalConfirm>;
1010

1111
interface Props extends ModalConfirmProps {
1212
transactionQueue: types.TransactionQueuePojo;
13+
getContent: (
14+
queue: types.TransactionQueuePojo
15+
) => {
16+
title: string;
17+
description: string;
18+
};
1319
}
1420

15-
export const ModalConfirmTransactionQueue: FC<Props> = ({
16-
transactionQueue,
17-
...props
18-
}) => {
19-
const transactionQueueText = getTransactionQueueText(transactionQueue);
21+
const ModalConfirmTransactionQueue: FC<Props> & {
22+
defaultProps: { getContent: Props['getContent'] };
23+
} = ({ transactionQueue, getContent, ...props }) => {
24+
const { title, description } = getContent(transactionQueue);
2025
return (
2126
<ModalConfirm
2227
isOpen={!!transactionQueue}
@@ -25,8 +30,8 @@ export const ModalConfirmTransactionQueue: FC<Props> = ({
2530
isCentered={false}
2631
{...props}
2732
>
28-
<ModalConfirm.Header>{transactionQueueText.title}</ModalConfirm.Header>
29-
<Paragraph fontSize={2}>{transactionQueueText.description}</Paragraph>
33+
<ModalConfirm.Header>{title}</ModalConfirm.Header>
34+
<Paragraph fontSize={2}>{description}</Paragraph>
3035
<div>
3136
{transactionQueue.transactions.map(transaction => (
3237
<TransactionItem key={transaction.uid} transaction={transaction} />
@@ -35,3 +40,9 @@ export const ModalConfirmTransactionQueue: FC<Props> = ({
3540
</ModalConfirm>
3641
);
3742
};
43+
44+
ModalConfirmTransactionQueue.defaultProps = {
45+
getContent: getTransactionQueueContent,
46+
};
47+
48+
export { ModalConfirmTransactionQueue };

packages/new-polymath-ui/src/components/ModalConfirmTransactionQueue/TransactionItem/index.tsx

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,32 @@
1-
import React from 'react';
1+
import React, { FC } from 'react';
22
import { types } from '@polymathnetwork/new-shared';
33
import { Box } from '~/components/Box';
44
import { IconCircled } from '~/components/IconCircled';
55
import { Heading } from '~/components/Heading';
66
import { CardPrimary } from '~/components/CardPrimary';
77
import { Paragraph } from '~/components/Paragraph';
8-
import { getTransactionText } from '~/components/utils/contentMappings';
8+
import {
9+
getTransactionIcon,
10+
getTransactionContent,
11+
} from '~/components/utils/contentMappings';
912

1013
import * as sc from './styles';
1114

1215
interface TransactionItemProps {
13-
transaction: types.TransactionEntity;
16+
transaction: types.TransactionPojo;
17+
getContent: (
18+
transaction: types.TransactionPojo
19+
) => {
20+
title: string;
21+
description: string;
22+
};
1423
}
1524

16-
export const TransactionItem = ({ transaction }: TransactionItemProps) => {
17-
const { title, description, Icon } = getTransactionText(transaction);
25+
export const TransactionItem: FC<TransactionItemProps> & {
26+
defaultProps: { getContent: TransactionItemProps['getContent'] };
27+
} = ({ transaction, getContent }: TransactionItemProps) => {
28+
const { title, description } = getContent(transaction);
29+
const Icon = getTransactionIcon(transaction);
1830
return (
1931
<sc.Wrapper alignItems="flex-start">
2032
<Box minWidth={50} mt={1}>
@@ -37,3 +49,7 @@ export const TransactionItem = ({ transaction }: TransactionItemProps) => {
3749
</sc.Wrapper>
3850
);
3951
};
52+
53+
TransactionItem.defaultProps = {
54+
getContent: getTransactionContent,
55+
};

packages/new-polymath-ui/src/components/ModalTransactionQueue/ModalTransactionQueue.tsx

Lines changed: 12 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ import { Paragraph } from '~/components/Paragraph';
77
import { Flex } from '~/components/Flex';
88
import { Box } from '~/components/Box';
99
import { Modal, ModalStatus } from '~/components/Modal';
10-
import { getTransactionQueueText } from '~/components/utils/contentMappings';
1110
import { TransactionItem } from './TransactionItem';
11+
import { getTransactionQueueTitle } from '~/components/utils/contentMappings';
1212

1313
type ModalProps = typeHelpers.Omit<
1414
typeHelpers.GetProps<typeof Modal>,
@@ -34,27 +34,21 @@ const getLabelText = (status: ModalStatus) =>
3434
[ModalStatus.Success]: 'Completed',
3535
}[status]);
3636

37-
const getTitleText = (status: ModalStatus, title: string) =>
38-
({
39-
[ModalStatus.Idle]: `Proceed with ${title}`,
40-
[ModalStatus.Loading]: `Proceed with ${title}`,
41-
[ModalStatus.Warning]: `An error occured with ${title}`,
42-
[ModalStatus.Alert]: `An error occured with ${title}`,
43-
[ModalStatus.Success]: `${title} was successfully submitted`,
44-
}[status]);
45-
4637
export interface ModalTransactionQueueProps extends ModalProps {
4738
transactionQueue: types.TransactionQueuePojo;
4839
onContinue: () => void;
4940
withEmail?: boolean;
5041
continueButtonText?: string;
42+
getTitle: (queue: types.TransactionQueuePojo) => string;
43+
getTransactionTitle?: (transaction: types.TransactionPojo) => string;
5144
}
5245

5346
export class ModalTransactionQueue extends Component<
5447
ModalTransactionQueueProps
5548
> {
5649
public static defaultProps = {
5750
continueButtonText: 'Continue',
51+
getTitle: getTransactionQueueTitle,
5852
};
5953

6054
public render() {
@@ -64,6 +58,8 @@ export class ModalTransactionQueue extends Component<
6458
isOpen,
6559
continueButtonText,
6660
onContinue,
61+
getTitle,
62+
getTransactionTitle,
6763
} = this.props;
6864

6965
const { transactions, status } = transactionQueue;
@@ -83,14 +79,15 @@ export class ModalTransactionQueue extends Component<
8379
status={modalStatus}
8480
label={'Transaction ' + getLabelText(modalStatus)}
8581
>
86-
{getTitleText(
87-
modalStatus,
88-
getTransactionQueueText(transactionQueue).title
89-
)}
82+
{getTitle(transactionQueue)}
9083
</Modal.Header>
9184

9285
{transactions.map(transaction => (
93-
<TransactionItem key={transaction.uid} transaction={transaction} />
86+
<TransactionItem
87+
key={transaction.uid}
88+
transaction={transaction}
89+
getTitle={getTransactionTitle}
90+
/>
9491
))}
9592

9693
{isSuccess && withEmail && (

packages/new-polymath-ui/src/components/ModalTransactionQueue/TransactionItem/TransactionItem.tsx

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React from 'react';
1+
import React, { FC } from 'react';
22
import { types, utils } from '@polymathnetwork/new-shared';
33
import { Box } from '~/components/Box';
44
import { Icon } from '~/components/Icon';
@@ -12,17 +12,18 @@ import { Link } from '~/components/Link';
1212
import { SvgClose } from '~/images/icons/Close';
1313
import { SvgCheckmark } from '~/images/icons/Checkmark';
1414
import { SvgPending } from '~/images/icons/Pending';
15-
import { getTransactionText } from '~/components/utils/contentMappings';
1615

1716
import * as sc from './styles';
17+
import { getTransactionTitle } from '~/components/utils/contentMappings';
1818

1919
const { TransactionStatus } = types;
2020

2121
interface TransactionItemProps {
2222
transaction: types.TransactionPojo;
23+
getTitle: (transaction: types.TransactionPojo) => string;
2324
}
2425

25-
const getIcon = (transaction: types.TransactionEntity) => {
26+
const getIcon = (transaction: types.TransactionPojo) => {
2627
const { status } = transaction;
2728

2829
if (
@@ -47,8 +48,10 @@ const getIcon = (transaction: types.TransactionEntity) => {
4748
return null;
4849
};
4950

50-
export const TransactionItem = ({ transaction }: TransactionItemProps) => {
51-
const { title } = getTransactionText(transaction);
51+
const TransactionItem: FC<TransactionItemProps> & {
52+
defaultProps: { getTitle: TransactionItemProps['getTitle'] };
53+
} = ({ transaction, getTitle }) => {
54+
const title = getTitle(transaction);
5255
const { txHash } = transaction;
5356

5457
return (
@@ -78,3 +81,9 @@ export const TransactionItem = ({ transaction }: TransactionItemProps) => {
7881
</sc.Wrapper>
7982
);
8083
};
84+
85+
TransactionItem.defaultProps = {
86+
getTitle: getTransactionTitle,
87+
};
88+
89+
export { TransactionItem };

0 commit comments

Comments
 (0)