Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Tw 783 transaction history unknown operation mobile #936

Merged
Show file tree
Hide file tree
Changes from 46 commits
Commits
Show all changes
50 commits
Select commit Hold shift + click to select a range
ad2a252
TW-786 Refactored transaction history for send, receive and delegate
herkoss Jul 17, 2023
45a105f
TW-786 Fixed tests
herkoss Jul 18, 2023
f3f1070
TW-786 Fixed qa issues
herkoss Jul 27, 2023
800d7f2
TW-786 Fixed ios/TempleWallet.xcodeproj/project.pbxproj
herkoss Jul 27, 2023
bcc2e75
TW-786 Fixed selected fiat currency symbol
herkoss Jul 27, 2023
f58b554
TW-786 Fixed QA issues
herkoss Jul 31, 2023
64295fd
TW-786 Added parser
herkoss Aug 2, 2023
dd69343
TW-786 Used Parser
herkoss Aug 3, 2023
41a26da
TW-786 Finished big refactoting
herkoss Aug 4, 2023
7f9e031
Merge branch 'development' into TW-786-transaction-history-send-recei…
herkoss Aug 7, 2023
a27e35c
TW-786 Fixed snapshot
herkoss Aug 7, 2023
7ddcaff
Merge branch 'TW-786-transaction-history-send-receive-baking-rewards-…
herkoss Aug 7, 2023
3675d00
TW-786 Fixed comments
herkoss Aug 7, 2023
008c282
TW-783 wip
herkoss Aug 8, 2023
b20c4a9
TW-786 Fixed comments after review
herkoss Aug 10, 2023
caba37d
TW-786 Fixed comments after review
herkoss Aug 10, 2023
f24adc0
TW-786 Added known bakers
herkoss Aug 11, 2023
21ccb06
Merge branch 'TW-786-transaction-history-send-receive-baking-rewards-…
herkoss Aug 14, 2023
fc92e1b
TW-783 upgraded parser
herkoss Aug 14, 2023
90f4f1c
TW-786 Fixed QA issues. Fixed activity loading and address styles
herkoss Aug 14, 2023
fa1f92e
Merge branch 'TW-786-transaction-history-send-receive-baking-rewards-…
herkoss Aug 14, 2023
95f78ff
TW-783 wip
herkoss Aug 15, 2023
ae808da
TW-786 Fixed imports
herkoss Aug 15, 2023
a81335d
TW-786 Fixed activity loading
herkoss Aug 15, 2023
76d11c5
TW-786 Fixed comment
herkoss Aug 15, 2023
ae78a60
TW-786 FIed
herkoss Aug 15, 2023
3a6d99f
Merge branch 'TW-786-transaction-history-send-receive-baking-rewards-…
herkoss Aug 15, 2023
3afc0af
TW-783 Finished unknown operations
herkoss Aug 16, 2023
710ccfe
TW-786 Fixed bug while parser return empty array of activities
herkoss Aug 16, 2023
1a08041
TW-786 deleted console.logs
herkoss Aug 16, 2023
b1d9319
TW-786 Fixed QA issues
herkoss Aug 23, 2023
fec1db6
TW-786 Added memo to callbacks
herkoss Aug 25, 2023
02ccc41
TW-786 FIxed comments
herkoss Aug 25, 2023
7965bfc
TW-786 FIxed render item functinon
herkoss Aug 25, 2023
5cec3e2
Update src/hooks/use-contract-activity.ts
herkoss Aug 28, 2023
92fda81
TW-786 Fixed comments
herkoss Aug 28, 2023
ea16d0f
Merge branch 'TW-786-transaction-history-send-receive-baking-rewards-…
herkoss Aug 28, 2023
bf42b6e
WIP
herkoss Aug 30, 2023
7dbb94b
TW-783 Finished working on unknown operations
herkoss Sep 1, 2023
205e293
Merge branch 'transaction-history-epic' of github.com:madfish-solutio…
herkoss Sep 1, 2023
a3bc8ce
TW-783 Fixed activity order
herkoss Sep 1, 2023
e8626ab
TW-783 Fixed comments, added memo
herkoss Sep 4, 2023
2bc8e4d
TW-783 Added equality fn
herkoss Sep 4, 2023
7156d80
TW-783 Fixed undefined matadata
herkoss Sep 5, 2023
3d54c49
TW-783 Added memo
herkoss Sep 6, 2023
76fb83b
TW-783 Fixed dispatching metadata
herkoss Sep 6, 2023
88c8718
TW-783 Fixed qa issues
herkoss Sep 8, 2023
dfe06d9
TW-783 Fixed comments
herkoss Sep 11, 2023
17cfeae
TW-783 Fixed qa issues
herkoss Sep 12, 2023
6ea5b28
TW-783 Fixed delegation components and render list
herkoss Sep 18, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@
"@taquito/tzip12": "17.0.0",
"@taquito/tzip16": "17.0.0",
"@taquito/utils": "17.0.0",
"@temple-wallet/transactions-parser": "^1.0.0",
"@temple-wallet/transactions-parser": "^3.0.0",
"@temple-wallet/wallet-address-validator": "^0.4.3",
"@tezos-domains/core": "1.26.0",
"@tezos-domains/taquito-client": "1.26.0",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@ import { createUseStyles } from '../../../../styles/create-use-styles';

export const useActivityGroupAmountChangeStyles = createUseStyles(({ colors, typography }) => ({
container: {
alignItems: 'flex-end'
alignItems: 'flex-end',
flexShrink: 1
},
amountWeight: {
fontWeight: '400'
Expand All @@ -18,5 +19,9 @@ export const useActivityGroupAmountChangeStyles = createUseStyles(({ colors, typ
},
positiveAmountText: {
color: colors.adding
},
valueText: {
...typography.numbersRegular11,
color: colors.gray1
}
}));
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
import React, { FC } from 'react';
import React, { FC, useMemo } from 'react';
import { Text, View } from 'react-native';

import { NonZeroAmounts } from 'src/interfaces/non-zero-amounts.interface';
import { ActivityAmount } from 'src/interfaces/non-zero-amounts.interface';
import { isDoubleTokenOperation, isSingleTokenOperation } from 'src/utils/activity.utils';
import { conditionalStyle } from 'src/utils/conditional-style';
import { formatAssetAmount } from 'src/utils/number.util';
import { shortizeSymbol } from 'src/utils/token-metadata.utils';

import { ItemAmountChange } from '../item-amount-change/item-amount-change';
import { useActivityGroupAmountChangeStyles } from './activity-group-amount-change.styles';

export enum TextSize {
Expand All @@ -14,17 +15,51 @@ export enum TextSize {
}
interface Props {
textSize?: TextSize;
nonZeroAmounts: NonZeroAmounts;
nonZeroAmounts: Array<ActivityAmount>;
}

const FIRST_AMOUNT_INDEX = 0;

export const ActivityGroupAmountChange: FC<Props> = ({ nonZeroAmounts, textSize = TextSize.Regular }) => {
const styles = useActivityGroupAmountChangeStyles();

return (
<View style={styles.container}>
{nonZeroAmounts.amounts.map(({ parsedAmount, isPositive, symbol }, index) => (
const children = useMemo(() => {
if (nonZeroAmounts.length === 0) {
return (
<Text
style={[
styles.amountWeight,
conditionalStyle(textSize === TextSize.Small, styles.amountText13),
conditionalStyle(textSize === TextSize.Regular, styles.amountText15)
]}
>
---
</Text>
);
}

const { isPositive, parsedAmount, symbol } = nonZeroAmounts[FIRST_AMOUNT_INDEX];

if (isSingleTokenOperation(nonZeroAmounts)) {
return (
<ItemAmountChange
amount={parsedAmount}
isPositive={isPositive}
symbol={symbol}
textStyle={[
styles.amountWeight,
conditionalStyle(textSize === TextSize.Small, styles.amountText13),
conditionalStyle(textSize === TextSize.Regular, styles.amountText15)
]}
/>
);
}

if (isDoubleTokenOperation(nonZeroAmounts)) {
const symbols = nonZeroAmounts.map(({ symbol }) => symbol).join(',');

return (
<Text
key={index}
style={[
styles.amountWeight,
conditionalStyle(textSize === TextSize.Small, styles.amountText13),
Expand All @@ -33,9 +68,25 @@ export const ActivityGroupAmountChange: FC<Props> = ({ nonZeroAmounts, textSize
]}
>
{isPositive && '+'}
{formatAssetAmount(parsedAmount)} {shortizeSymbol(symbol)}
{shortizeSymbol(symbols)}
</Text>
))}
</View>
);
);
}

return (
<Text
style={[
styles.amountWeight,
conditionalStyle(textSize === TextSize.Small, styles.amountText13),
conditionalStyle(textSize === TextSize.Regular, styles.amountText15),
conditionalStyle(isPositive, styles.positiveAmountText, styles.destructiveAmountText)
]}
>
{isPositive ? '+' : '-'}
{shortizeSymbol(symbol)} and {nonZeroAmounts.length - 1} others
</Text>
);
}, [nonZeroAmounts, textSize]);

return <View style={styles.container}>{children}</View>;
};
Original file line number Diff line number Diff line change
@@ -1,22 +1,33 @@
import React, { FC } from 'react';
import { View } from 'react-native';
import { BigNumber } from 'bignumber.js';
import React, { FC, memo } from 'react';
import { View, Text } from 'react-native';

import { FormattedAmount } from 'src/components/formatted-amount';
import { ZERO } from 'src/config/swap';

import { NonZeroAmounts } from '../../../../interfaces/non-zero-amounts.interface';
import { FormattedAmount } from '../../../formatted-amount';
import { useActivityGroupDollarAmountChangeStyles } from './activity-group-dollar-amount-change.styles';

interface Props {
nonZeroAmounts: NonZeroAmounts;
dollarValue: BigNumber | undefined;
}

export const ActivityGroupDollarAmountChange: FC<Props> = ({ nonZeroAmounts }) => {
const styles = useActivityGroupDollarAmountChangeStyles();
export const ActivityGroupDollarAmountChange: FC<Props> = memo(
({ dollarValue }) => {
const styles = useActivityGroupDollarAmountChangeStyles();

if (dollarValue === undefined || dollarValue.isEqualTo(ZERO)) {
return (
<View style={styles.container}>
<Text style={styles.valueText}>---</Text>
</View>
);
}

return (
<View style={styles.container}>
{nonZeroAmounts.dollarSums.map((amount, index) => (
<FormattedAmount key={index} amount={amount} isDollarValue={true} style={styles.valueText} />
))}
</View>
);
};
return (
<View style={styles.container}>
<FormattedAmount isDollarValue amount={dollarValue} style={styles.valueText} />
</View>
);
},
(prevProps, nextProps) => prevProps.dollarValue?.toFixed() === nextProps.dollarValue?.toFixed()
);
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,6 @@ export const useActivityGroupItemStyles = createUseStyles(({ colors, typography
flex: {
flex: 1
},
card: {
marginTop: formatSize(12),
paddingHorizontal: formatSize(12),
borderRadius: formatSize(8),
backgroundColor: colors.cardBG
},
oprationTitle: {
...typography.numbersRegular15,
color: colors.black
Expand All @@ -37,16 +31,25 @@ export const useActivityGroupItemStyles = createUseStyles(({ colors, typography
},
robotBackground: {
backgroundColor: colors.navigation
}
}));

export const useActivityDetailsStyles = createUseStyles(({ colors }) => ({
},
red: {
backgroundColor: 'red'
},
green: {
backgroundColor: 'green'
},
chevron: {
padding: formatSize(4)
},
card: {
marginTop: formatSize(12),
paddingHorizontal: formatSize(12),
borderRadius: formatSize(8),
backgroundColor: colors.cardBG
},
}
}));

export const useActivityDetailsStyles = createUseStyles(({ colors }) => ({
itemWrapper: {
flexDirection: 'row',
justifyContent: 'space-between',
Expand All @@ -59,11 +62,11 @@ export const useActivityDetailsStyles = createUseStyles(({ colors }) => ({
borderBottomWidth: formatSize(0.5),
borderBottomColor: colors.lines
},
chevron: {
padding: formatSize(4)
},
hashChip: {
height: formatSize(24)
},
mb8: {
marginBottom: formatSize(8)
}
}));

Expand Down
Original file line number Diff line number Diff line change
@@ -1,29 +1,25 @@
import React, { FC, memo } from 'react';
import { View } from 'react-native';

import { Divider } from 'src/components/divider/divider';
import { useNonZeroAmounts } from 'src/hooks/use-non-zero-amounts.hook';
import { ActivityGroup, emptyActivity } from 'src/interfaces/activity.interface';
import { formatSize } from 'src/styles/format-size';
import { ActivityGroup } from 'src/interfaces/activity.interface';

import { useActivityGroupItemStyles } from './activity-group-item.styles';
import { Details } from './details';
import { Info } from './info/info';
import { ActivityItem } from './activity-item/activity-item';

interface Props {
group: ActivityGroup;
}

export const ActivityGroupItem: FC<Props> = memo(({ group }) => {
const styles = useActivityGroupItemStyles();
const firstActivity = group[0] ?? emptyActivity;
const nonZeroAmounts = useNonZeroAmounts(firstActivity.tokensDeltas);

return (
<View style={styles.root}>
<Info activity={firstActivity} nonZeroAmounts={nonZeroAmounts} />
<Divider size={formatSize(12)} />
<Details activity={firstActivity} nonZeroAmounts={nonZeroAmounts} />
<View>
{group.map(activity => (
<View style={styles.root} key={`${activity.id}_${activity.hash}`}>
<ActivityItem activity={activity} />
</View>
))}
</View>
);
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
import { TzktOperationStatus } from '@temple-wallet/transactions-parser';
import React, { FC, ReactNode, useCallback, useState } from 'react';
import { View } from 'react-native';

import { Divider } from 'src/components/divider/divider';
import { Icon } from 'src/components/icon/icon';
import { IconNameEnum } from 'src/components/icon/icon-name.enum';
import { TouchableWithAnalytics } from 'src/components/touchable-with-analytics';
import { formatSize } from 'src/styles/format-size';

import { useActivityCommonStyles, useActivityGroupItemStyles } from '../activity-group-item.styles';
import { ActivityStatusBadge } from '../activity-status-badge/activity-status-badge';
import { ActivityTime } from '../activity-time/activity-time';
import { ActivityGroupItemSelectors } from '../selectors';

export const AbstractItem: FC<{ status: TzktOperationStatus; timestamp: string; face: ReactNode; details: ReactNode }> =
({ status, timestamp, face, details }) => {
const styles = useActivityGroupItemStyles();
const commonStyles = useActivityCommonStyles();

const [areDetailsVisible, setAreDetailsVisible] = useState(false);
const handleOpenActivityDetailsPress = useCallback(() => setAreDetailsVisible(prevState => !prevState), []);

return (
<View>
<View style={[commonStyles.row, commonStyles.itemsCenter]}>{face}</View>
<Divider size={formatSize(12)} />
<View>
<View style={[commonStyles.row, commonStyles.justifyBetween]}>
<View style={[commonStyles.row, commonStyles.itemsCenter]}>
<ActivityStatusBadge status={status} />
<Divider size={formatSize(4)} />
<ActivityTime timestamp={timestamp} />
</View>
<TouchableWithAnalytics
style={styles.chevron}
testID={ActivityGroupItemSelectors.details}
onPress={handleOpenActivityDetailsPress}
>
<Icon name={areDetailsVisible ? IconNameEnum.DetailsArrowUp : IconNameEnum.DetailsArrowDown} />
</TouchableWithAnalytics>
</View>
{areDetailsVisible && <View style={styles.card}>{details}</View>}
</View>
</View>
);
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
import { ActivityType } from '@temple-wallet/transactions-parser';
import React, { FC, memo } from 'react';

import { BakingRewards } from './baking-rewards';
import { Delegate } from './delegate';
import { Interaction } from './interaction';
import { ActivityItemProps } from './item.props';
import { Receive } from './receive';
import { Send } from './send';
import { Unknown } from './unknown';

export const ActivityItem: FC<ActivityItemProps> = memo(({ activity }) => {
switch (activity.type) {
case ActivityType.Send:
return <Send activity={activity} />;
case ActivityType.Recieve:
return <Receive activity={activity} />;
case ActivityType.BakingRewards:
return <BakingRewards activity={activity} />;
case ActivityType.Delegation:
return <Delegate activity={activity} />;
case ActivityType.Interaction:
return <Interaction activity={activity} />;

default:
return <Unknown activity={activity} />;
}
});
Loading