Skip to content

Commit

Permalink
Wallet activity (MystenLabs#3909)
Browse files Browse the repository at this point in the history
* activities

* wip

* activities section

* rm cache nft state and fix typo

* activities

* wip

* activities section

* rm cache nft state and fix typo

* display failed tx error message

* rebase

* add license to icon tx

* update

* update date

* added todo
  • Loading branch information
Jibz1 authored Aug 11, 2022
1 parent 054162f commit 934b255
Show file tree
Hide file tree
Showing 30 changed files with 759 additions and 388 deletions.
1 change: 1 addition & 0 deletions wallet/configs/ts/tsconfig.common.json
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
"_store": ["./src/ui/app/redux/store/"],
"_store/*": ["./src/ui/app/redux/store/*"],
"_hooks": ["./src/ui/app/hooks/"],
"_helpers": ["./src/ui/app/helpers/"],
"_pages/*": ["./src/ui/app/pages/*"],
"_components/*": ["./src/ui/app/components/*"],
"_messaging/*": ["./src/shared/messaging/*"],
Expand Down
Binary file modified wallet/font-icons/output/sui-icons.eot
Binary file not shown.
66 changes: 34 additions & 32 deletions wallet/font-icons/output/sui-icons.scss
Original file line number Diff line number Diff line change
Expand Up @@ -19,42 +19,44 @@ url('./sui-icons.svg#sui-icons') format('svg');
.sui-icons-apps:before { content: "\ea03"; }
.sui-icons-arrow-left:before { content: "\ea04"; }
.sui-icons-arrow-right:before { content: "\ea05"; }
.sui-icons-checkmark:before { content: "\ea06"; }
.sui-icons-clipboard:before { content: "\ea07"; }
.sui-icons-close:before { content: "\ea08"; }
.sui-icons-coins:before { content: "\ea09"; }
.sui-icons-globe:before { content: "\ea0a"; }
.sui-icons-hand-coins:before { content: "\ea0b"; }
.sui-icons-history:before { content: "\ea0c"; }
.sui-icons-logout:before { content: "\ea0d"; }
.sui-icons-nfts:before { content: "\ea0e"; }
.sui-icons-percentage-polygon:before { content: "\ea0f"; }
.sui-icons-person:before { content: "\ea10"; }
.sui-icons-sui-chevron-right:before { content: "\ea11"; }
.sui-icons-sui-logo-icon:before { content: "\ea12"; }
.sui-icons-sui-logo-txt:before { content: "\ea13"; }
.sui-icons-tokens:before { content: "\ea14"; }
.sui-icons-version-icon:before { content: "\ea15"; }
.sui-icons-buy:before { content: "\ea06"; }
.sui-icons-checkmark:before { content: "\ea07"; }
.sui-icons-clipboard:before { content: "\ea08"; }
.sui-icons-close:before { content: "\ea09"; }
.sui-icons-coins:before { content: "\ea0a"; }
.sui-icons-globe:before { content: "\ea0b"; }
.sui-icons-hand-coins:before { content: "\ea0c"; }
.sui-icons-history:before { content: "\ea0d"; }
.sui-icons-logout:before { content: "\ea0e"; }
.sui-icons-nfts:before { content: "\ea0f"; }
.sui-icons-percentage-polygon:before { content: "\ea10"; }
.sui-icons-person:before { content: "\ea11"; }
.sui-icons-sui-chevron-right:before { content: "\ea12"; }
.sui-icons-sui-logo-icon:before { content: "\ea13"; }
.sui-icons-sui-logo-txt:before { content: "\ea14"; }
.sui-icons-tokens:before { content: "\ea15"; }
.sui-icons-version-icon:before { content: "\ea16"; }

$sui-icons-Info: "\ea01";
$sui-icons-Preview: "\ea02";
$sui-icons-apps: "\ea03";
$sui-icons-arrow-left: "\ea04";
$sui-icons-arrow-right: "\ea05";
$sui-icons-checkmark: "\ea06";
$sui-icons-clipboard: "\ea07";
$sui-icons-close: "\ea08";
$sui-icons-coins: "\ea09";
$sui-icons-globe: "\ea0a";
$sui-icons-hand-coins: "\ea0b";
$sui-icons-history: "\ea0c";
$sui-icons-logout: "\ea0d";
$sui-icons-nfts: "\ea0e";
$sui-icons-percentage-polygon: "\ea0f";
$sui-icons-person: "\ea10";
$sui-icons-sui-chevron-right: "\ea11";
$sui-icons-sui-logo-icon: "\ea12";
$sui-icons-sui-logo-txt: "\ea13";
$sui-icons-tokens: "\ea14";
$sui-icons-version-icon: "\ea15";
$sui-icons-buy: "\ea06";
$sui-icons-checkmark: "\ea07";
$sui-icons-clipboard: "\ea08";
$sui-icons-close: "\ea09";
$sui-icons-coins: "\ea0a";
$sui-icons-globe: "\ea0b";
$sui-icons-hand-coins: "\ea0c";
$sui-icons-history: "\ea0d";
$sui-icons-logout: "\ea0e";
$sui-icons-nfts: "\ea0f";
$sui-icons-percentage-polygon: "\ea10";
$sui-icons-person: "\ea11";
$sui-icons-sui-chevron-right: "\ea12";
$sui-icons-sui-logo-icon: "\ea13";
$sui-icons-sui-logo-txt: "\ea14";
$sui-icons-tokens: "\ea15";
$sui-icons-version-icon: "\ea16";

35 changes: 19 additions & 16 deletions wallet/font-icons/output/sui-icons.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
5 changes: 3 additions & 2 deletions wallet/font-icons/output/sui-icons.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ export enum SuiIcons {
Apps = "sui-icons-apps",
ArrowLeft = "sui-icons-arrow-left",
ArrowRight = "sui-icons-arrow-right",
Buy = "sui-icons-buy",
Checkmark = "sui-icons-checkmark",
Clipboard = "sui-icons-clipboard",
Close = "sui-icons-close",
Expand All @@ -25,6 +26,6 @@ export enum SuiIcons {
VersionIcon = "sui-icons-version-icon"
}

export type SuiIconsClassname = "sui-icons-Info" | "sui-icons-Preview" | "sui-icons-apps" | "sui-icons-arrow-left" | "sui-icons-arrow-right" | "sui-icons-checkmark" | "sui-icons-clipboard" | "sui-icons-close" | "sui-icons-coins" | "sui-icons-globe" | "sui-icons-hand-coins" | "sui-icons-history" | "sui-icons-logout" | "sui-icons-nfts" | "sui-icons-percentage-polygon" | "sui-icons-person" | "sui-icons-sui-chevron-right" | "sui-icons-sui-logo-icon" | "sui-icons-sui-logo-txt" | "sui-icons-tokens" | "sui-icons-version-icon"
export type SuiIconsIcon = "Info" | "Preview" | "apps" | "arrow-left" | "arrow-right" | "checkmark" | "clipboard" | "close" | "coins" | "globe" | "hand-coins" | "history" | "logout" | "nfts" | "percentage-polygon" | "person" | "sui-chevron-right" | "sui-logo-icon" | "sui-logo-txt" | "tokens" | "version-icon"
export type SuiIconsClassname = "sui-icons-Info" | "sui-icons-Preview" | "sui-icons-apps" | "sui-icons-arrow-left" | "sui-icons-arrow-right" | "sui-icons-buy" | "sui-icons-checkmark" | "sui-icons-clipboard" | "sui-icons-close" | "sui-icons-coins" | "sui-icons-globe" | "sui-icons-hand-coins" | "sui-icons-history" | "sui-icons-logout" | "sui-icons-nfts" | "sui-icons-percentage-polygon" | "sui-icons-person" | "sui-icons-sui-chevron-right" | "sui-icons-sui-logo-icon" | "sui-icons-sui-logo-txt" | "sui-icons-tokens" | "sui-icons-version-icon"
export type SuiIconsIcon = "Info" | "Preview" | "apps" | "arrow-left" | "arrow-right" | "buy" | "checkmark" | "clipboard" | "close" | "coins" | "globe" | "hand-coins" | "history" | "logout" | "nfts" | "percentage-polygon" | "person" | "sui-chevron-right" | "sui-logo-icon" | "sui-logo-txt" | "tokens" | "version-icon"
export const SuiIconsPrefix = "sui-icons-"
Binary file modified wallet/font-icons/output/sui-icons.ttf
Binary file not shown.
Binary file modified wallet/font-icons/output/sui-icons.woff
Binary file not shown.
Binary file modified wallet/font-icons/output/sui-icons.woff2
Binary file not shown.
3 changes: 3 additions & 0 deletions wallet/font-icons/svgs/Buy.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 1 addition & 1 deletion wallet/src/ui/app/components/nft-display/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ function NFTDisplayCard({
<img
className={cl(st.img, st[size])}
src={filePath}
alt="NFT"
alt={fileExtentionType?.name || 'NFT'}
/>
)}
{wideview ? wideviewSection : defaultSection}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,11 @@
@use '_utils';
@use '_values/colors';

.nft-response {
.txn-response {
margin-top: 20px;

.success-text,
.failed-text {
color: colors.$gray-100;
text-align: center;
margin-bottom: 20px;

Expand Down Expand Up @@ -48,6 +47,19 @@
}
}

.amount {
font-weight: 600;
font-size: 24px;
line-height: 19px;
color: colors.$gray-100;
margin: 10px;

span {
color: colors.$gray-75;
font-size: 16px;
}
}

.error-message {
color: colors.$gray-80;
text-align: center;
Expand All @@ -59,11 +71,14 @@
.success-icon {
border: 2px dotted colors.$sui-steel-blue;

.angled-arrow {
.angled-arrow,
.buy-icon {
height: 15px;
margin: auto !important;
color: #589aea !important;
}

.angled-arrow {
@include utils.angled-arrow;
}
}
Expand Down Expand Up @@ -200,3 +215,47 @@
position: relative;
}
}

.wideview {
display: flex;
align-items: center;
width: 100%;
padding: 10px;
border-radius: 10px;
justify-content: space-between;
flex-flow: row-reverse;
flex-direction: row;
gap: 10px;

.img {
height: 50px;
width: 50px;
object-fit: cover;
border-radius: 6px;
}

.nftfields {
padding-top: 0;
height: 49px;
display: flex;
flex-flow: column;
justify-content: center;
}

.nft-name {
text-transform: capitalize;
color: colors.$gray-100;
margin-bottom: 4px;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;

@include utils.typography('nft-title');
}

.nft-type {
color: colors.$gray-75;

@include utils.typography('table/text-lg');
}
}
124 changes: 124 additions & 0 deletions wallet/src/ui/app/components/receipt-card/index.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,124 @@
// Copyright (c) 2022, Mysten Labs, Inc.
// SPDX-License-Identifier: Apache-2.0

import cl from 'classnames';

import Icon, { SuiIcons } from '_components/icon';
import { formatDate } from '_helpers';
import { useFileExtentionType } from '_hooks';
import { GAS_SYMBOL } from '_redux/slices/sui-objects/Coin';

import type { TxResultState } from '_redux/slices/txresults';

import st from './ReceiptCard.module.scss';

type TxResponseProps = {
txDigest: TxResultState;
tranferType?: string | null;
};

function ReceiptCard({ tranferType, txDigest }: TxResponseProps) {
const TxIcon = txDigest.isSender ? SuiIcons.ArrowLeft : SuiIcons.Buy;
const iconClassName = txDigest.isSender
? cl(st.arrowActionIcon, st.angledArrow)
: cl(st.arrowActionIcon, st.buyIcon);

const imgUrl = txDigest?.url
? txDigest?.url.replace(/^ipfs:\/\//, 'https://ipfs.io/ipfs/')
: false;

const date = txDigest?.timestampMs
? formatDate(txDigest.timestampMs, ['month', 'day', 'year'])
: false;

// TODO add copy for other trafer type like transfer sui, swap, etc.
const headerCopy = tranferType
? `Successfully Sent!`
: `${txDigest.isSender ? 'Sent' : 'Received'} ${date || ''}`;
const SuccessCard = (
<>
<div className={st.successIcon}>
<Icon icon={TxIcon} className={iconClassName} />
</div>
<div className={st.successText}>{headerCopy}</div>
</>
);

const failedCard = (
<>
<div className={st.failedIcon}>
<div className={st.iconBg}>
<Icon icon={SuiIcons.Close} className={cl(st.close)} />
</div>
</div>
<div className={st.failedText}>Failed</div>
<div className={st.errorMessage}>{txDigest?.error}</div>
</>
);

const fileExtentionType = useFileExtentionType(txDigest.url || '');

const AssetCard = imgUrl && (
<div className={st.wideview}>
<div className={st.nftfields}>
<div className={st.nftName}>{txDigest?.name}</div>
<div className={st.nftType}>
{fileExtentionType?.name} {fileExtentionType?.type}
</div>
</div>
<img
className={cl(st.img)}
src={imgUrl}
alt={txDigest?.name || 'NFT'}
/>
</div>
);

return (
<>
<div className={st.txnResponse}>
{txDigest.status === 'success' ? SuccessCard : failedCard}
<div className={cl(st.responseCard)}>
{AssetCard}
{txDigest.amount && (
<div className={st.amount}>
{txDigest.amount} <span>SUI</span>
</div>
)}
<div className={st.txInfo}>
<div className={st.txInfoLabel}>Your Wallet</div>
<div
className={cl(
st.txInfoValue,
txDigest.status === 'success'
? st.success
: st.failed
)}
>
{txDigest.kind !== 'Call' && txDigest.isSender
? txDigest.to
: txDigest.from}
</div>
</div>

{txDigest.txGas && (
<div className={st.txFees}>
<div className={st.txInfoLabel}>Gas Fee</div>
<div className={st.walletInfoValue}>
{txDigest.txGas} {GAS_SYMBOL}
</div>
</div>
)}
{date && (
<div className={st.txDate}>
<div className={st.txInfoLabel}>Date</div>
<div className={st.walletInfoValue}>{date}</div>
</div>
)}
</div>
</div>
</>
);
}

export default ReceiptCard;
Loading

0 comments on commit 934b255

Please sign in to comment.