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

enhancement: foundry tab #5233

Merged
merged 11 commits into from
Nov 22, 2022
2 changes: 1 addition & 1 deletion packages/shared/components/inputs/AliasInput.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@
</script>

<SelectorInput
labelLocale="popups.mintNativeToken.property.alias"
labelLocale="popups.nativeToken.property.alias"
bind:selected
bind:inputElement
bind:modal
Expand Down
17 changes: 14 additions & 3 deletions packages/shared/components/molecules/ActivityInformation.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@
GenericActivityInformation,
AliasActivityInformation,
NftActivityInformation,
FoundryActivityInformation,
TokenActivityInformation,
NftMetadataInformation,
} from 'shared/components'
import { ActivityType, Activity } from '@core/wallet'
Expand All @@ -16,7 +18,9 @@
Transaction = 'general.transaction',
Alias = 'general.alias',
Nft = 'general.nft',
Metadata = 'general.metadata',
Foundry = 'general.foundry',
Token = 'general.token',
NftMetadata = 'general.metadata',
}

let hasMetadata = false
Expand All @@ -38,7 +42,10 @@
tabs = [Tab.Transaction, Tab.Alias]
break
case ActivityType.Nft:
tabs = [Tab.Transaction, Tab.Nft, ...(hasMetadata ? [Tab.Metadata] : [])]
tabs = [Tab.Transaction, Tab.Nft, ...(hasMetadata ? [Tab.NftMetadata] : [])]
break
case ActivityType.Foundry:
tabs = [Tab.Transaction, Tab.Foundry, Tab.Token]
break
}
}
Expand All @@ -56,7 +63,11 @@
<AliasActivityInformation {activity} />
{:else if activeTab === Tab.Nft && activity.type === ActivityType.Nft}
<NftActivityInformation {activity} />
{:else if activeTab === Tab.Metadata && activity.type === ActivityType.Nft}
{:else if activeTab === Tab.Foundry}
<FoundryActivityInformation {activity} />
{:else if activeTab === Tab.Token}
<TokenActivityInformation {activity} />
{:else if activeTab === Tab.NftMetadata && activity.type === ActivityType.Nft}
<NftMetadataInformation {activity} />
{/if}
</activity-details>
90 changes: 16 additions & 74 deletions packages/shared/components/molecules/FoundryActivityDetails.svelte
Original file line number Diff line number Diff line change
@@ -1,80 +1,22 @@
<script lang="typescript">
import { KeyValueBox, AmountBox, SubjectBox, ActivityInclusionStatusPill } from 'shared/components'
import { formatDate, localize } from '@core/i18n'
import { activeProfile } from '@core/profile'
import {
formatTokenAmountPrecise,
Subject,
InclusionState,
IPersistedAsset,
formatTokenAmountDefault,
} from '@core/wallet'
import { BASE_TOKEN } from '@core/network'
import { AmountBox, SubjectBox, ActivityInclusionStatusPill } from 'shared/components'
import { formatTokenAmountDefault, getAssetFromPersistedAssets } from '@core/wallet'
import { FoundryActivity } from '@core/wallet'

export let asset: IPersistedAsset
export let inclusionState: InclusionState
export let rawAmount: string = null
export let unit: string
export let storageDeposit = 0
export let giftedStorageDeposit = 0
export let subject: Subject = null
export let transactionTime: Date = null
export let activity: FoundryActivity

$: amount = formatTokenAmountDefault(Number(rawAmount), asset?.metadata, unit)
$: formattedTransactionTime = formatDate(transactionTime, { dateStyle: 'long', timeStyle: 'medium' })
$: hasStorageDeposit = storageDeposit || (storageDeposit === 0 && giftedStorageDeposit === 0)

$: formattedStorageDeposit = formatTokenAmountPrecise(
storageDeposit ?? 0,
BASE_TOKEN[$activeProfile?.networkProtocol]
)

$: formattedGiftedStorageDeposit = formatTokenAmountPrecise(
giftedStorageDeposit ?? 0,
BASE_TOKEN[$activeProfile?.networkProtocol]
)

$: localePrefix = 'tooltips.transactionDetails.incoming.'

let detailsList: { [key in string]: { data: string; tooltipText?: string } }
$: detailsList = {
transactionTime: { data: formattedTransactionTime },
...(hasStorageDeposit && {
storageDeposit: {
data: formattedStorageDeposit,
tooltipText: localize(localePrefix + 'storageDeposit'),
},
}),
...(giftedStorageDeposit && {
giftedStorageDeposit: {
data: formattedGiftedStorageDeposit,
tooltipText: localize(localePrefix + 'giftedStorageDeposit'),
},
}),
}
$: asset = getAssetFromPersistedAssets(activity.assetId)
$: amount = formatTokenAmountDefault(Number(activity.rawAmount), asset?.metadata, asset?.metadata?.unit)
</script>

<foundry-details class="w-full h-full space-y-6 flex flex-auto flex-col flex-shrink-0">
<main-content class="flex flex-auto w-full flex-col items-center justify-center space-y-3">
{#if amount}
<AmountBox {amount} {unit} {asset} />
{/if}
<foundry-status class="flex flex-row w-full space-x-2 justify-center">
<ActivityInclusionStatusPill localizationKey={'foundry.minting'} {inclusionState} />
</foundry-status>
{#if subject}
<SubjectBox {subject} />
{/if}
</main-content>
{#if Object.entries(detailsList).length > 0}
<details-list class="flex flex-col space-y-2">
{#each Object.entries(detailsList) as [key, value]}
<KeyValueBox
keyText={localize(`general.${key}`)}
valueText={value.data}
tooltipText={value.tooltipText}
/>
{/each}
</details-list>
<main-content class="flex flex-auto w-full flex-col items-center justify-center space-y-3">
{#if amount}
<AmountBox {amount} unit={asset?.metadata?.unit} {asset} />
{/if}
<foundry-status class="flex flex-row w-full space-x-2 justify-center">
<ActivityInclusionStatusPill localizationKey={'foundry.minting'} inclusionState={activity.inclusionState} />
</foundry-status>
{#if activity.subject}
<SubjectBox subject={activity.subject} />
{/if}
</foundry-details>
</main-content>
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
<script lang="typescript">
import { KeyValueBox } from 'shared/components'
import { localize } from '@core/i18n'
import { FoundryActivity } from '@core/wallet'

export let activity: FoundryActivity

let detailsList: { [key in string]: { data: string; isCopyable?: boolean } }
$: detailsList = {
aliasAddress: { data: activity.aliasAddress, isCopyable: true },
assetId: { data: activity.assetId, isCopyable: true },
maximumSupply: { data: String(parseInt(activity.maximumSupply, 16)) },
mintedTokens: { data: String(parseInt(activity.mintedTokens, 16)) },
meltedTokens: { data: String(parseInt(activity.meltedTokens, 16)) },
}
</script>

{#each Object.entries(detailsList) as [key, value]}
<KeyValueBox
keyText={localize(`popups.nativeToken.property.${key}`)}
valueText={value.data}
isCopyable={value.isCopyable}
/>
{/each}
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
<script lang="typescript">
import { KeyValueBox } from 'shared/components'
import { localize } from '@core/i18n'
import { FoundryActivity, getAssetFromPersistedAssets, ITokenMetadata } from '@core/wallet'

export let activity: FoundryActivity

let metadata: ITokenMetadata
$: metadata = getAssetFromPersistedAssets(activity.assetId)?.metadata

let detailsList: { [key in string]: { data: string; tooltipText?: string; isCopyable?: boolean } }
$: detailsList = {
...(metadata?.name && {
tokenName: { data: metadata.name },
}),
...(metadata?.unit && {
unit: { data: metadata.unit },
}),
decimals: { data: String(metadata.decimals) },
...(metadata?.description && {
description: { data: metadata.description },
}),
...(metadata?.tickerSymbol && {
tickerSymbol: { data: metadata.tickerSymbol },
}),
...(metadata?.url && {
url: { data: metadata.url, isCopyable: true },
}),
...(metadata?.logo && {
logo: { data: metadata.logo, isCopyable: true },
}),
...(metadata?.logoUrl && {
logoUrl: { data: metadata.logoUrl, isCopyable: true },
}),
}
</script>

{#each Object.entries(detailsList) as [key, value]}
<KeyValueBox
keyText={localize(`popups.nativeToken.property.${key}`)}
valueText={value.data}
isCopyable={value.isCopyable}
/>
{/each}
2 changes: 2 additions & 0 deletions packages/shared/components/molecules/activity-info/index.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
export { default as AliasActivityInformation } from './AliasActivityInformation'
export { default as FoundryActivityInformation } from './FoundryActivityInformation'
export { default as GenericActivityInformation } from './GenericActivityInformation'
export { default as TokenActivityInformation } from './TokenActivityInformation'
export { default as NftActivityInformation } from './NftActivityInformation'
export { default as NftMetadataInformation } from './NftMetadataInformation'
30 changes: 10 additions & 20 deletions packages/shared/components/popups/ActivityDetailsPopup.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -78,15 +78,6 @@
giftedStorageDeposit: activity.giftedStorageDeposit,
isInternal: activity.isInternal,
}
} else if (activity.type === ActivityType.Foundry) {
return {
...details,
asset,
storageDeposit: activity.storageDeposit,
rawAmount: activity.rawAmount,
unit: asset?.metadata?.unit,
giftedStorageDeposit: activity.giftedStorageDeposit,
}
}
}

Expand Down Expand Up @@ -165,18 +156,17 @@
</div>
{#if activity?.type === ActivityType.Transaction}
<BasicActivityDetails {...details} />
{:else if activity?.type === ActivityType.Foundry}
<FoundryActivityDetails {...details} />
{:else if activity?.type === ActivityType.Alias}
<alias-details class="w-full h-full space-y-6 flex flex-auto flex-col flex-shrink-0">
<AliasActivityDetails {activity} />
<ActivityInformation {activity} />
</alias-details>
{:else if activity?.type === ActivityType.Nft}
<nft-details class="w-full h-full space-y-6 flex flex-auto flex-col flex-shrink-0">
<NftActivityDetails {activity} />
{:else}
<activity-details class="w-full h-full space-y-6 flex flex-auto flex-col flex-shrink-0">
{#if activity?.type === ActivityType.Foundry}
<FoundryActivityDetails {activity} />
{:else if activity?.type === ActivityType.Nft}
<NftActivityDetails {activity} />
{:else if activity?.type === ActivityType.Alias}
<AliasActivityDetails {activity} />
{/if}
<ActivityInformation {activity} />
</nft-details>
</activity-details>
{/if}

{#if !isTimelocked && isActivityIncomingAndUnclaimed}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -120,15 +120,15 @@

<div class="space-y-6">
<Text type="h4" fontSize="18" lineHeight="6" fontWeight={FontWeight.semibold}>
{localize('popups.mintNativeToken.confirmationTitle')}
{localize('popups.nativeToken.confirmationTitle')}
</Text>

<div class="space-y-2 max-h-100 scrollable-y flex-1">
{#if Object.entries(detailsList).length > 0}
<details-list class="flex flex-col space-y-2">
{#each Object.entries(detailsList) as [key, value]}
<KeyValueBox
keyText={localize(`popups.mintNativeToken.property.${key}`)}
keyText={localize(`popups.nativeToken.property.${key}`)}
valueText={value.data}
isCopyable={value.isCopyable}
/>
Expand Down
26 changes: 13 additions & 13 deletions packages/shared/components/popups/MintNativeTokenFormPopup.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -156,36 +156,36 @@

<div class="space-y-6">
<Text type="h4" fontSize="18" lineHeight="6" fontWeight={FontWeight.semibold}>
{localize('popups.mintNativeToken.formTitle')}
{localize('popups.nativeToken.formTitle')}
</Text>

<div class="space-y-4 max-h-100 scrollable-y flex-1">
<AliasInput bind:this={aliasInput} bind:alias={aliasId} bind:error={aliasIdError} />
<TextInput
bind:value={tokenName}
label={localize('popups.mintNativeToken.property.tokenName')}
placeholder={localize('popups.mintNativeToken.property.tokenName')}
label={localize('popups.nativeToken.property.tokenName')}
placeholder={localize('popups.nativeToken.property.tokenName')}
error={nameError}
/>
<TextInput
bind:value={symbol}
label={localize('popups.mintNativeToken.property.symbol')}
placeholder={localize('popups.mintNativeToken.property.symbol')}
label={localize('popups.nativeToken.property.symbol')}
placeholder={localize('popups.nativeToken.property.symbol')}
maxlength={5}
error={symbolError}
/>
<NumberInput
bind:value={totalSupply}
isInteger
label={localize('popups.mintNativeToken.property.totalSupply')}
placeholder={localize('popups.mintNativeToken.property.totalSupply')}
label={localize('popups.nativeToken.property.totalSupply')}
placeholder={localize('popups.nativeToken.property.totalSupply')}
error={totalSupplyError}
/>
<NumberInput
bind:value={circulatingSupply}
isInteger
label={localize('popups.mintNativeToken.property.circulatingSupply')}
placeholder={localize('popups.mintNativeToken.property.circulatingSupply')}
label={localize('popups.nativeToken.property.circulatingSupply')}
placeholder={localize('popups.nativeToken.property.circulatingSupply')}
error={circulatingSupplyError}
/>
<optional-inputs class="flex flex-row flex-wrap gap-4">
Expand All @@ -195,25 +195,25 @@
inputType="number"
isInteger
maxlength={MAX_SUPPORTED_DECIMALS}
label={localize('popups.mintNativeToken.property.decimals')}
label={localize('popups.nativeToken.property.decimals')}
description={localize('tooltips.mintNativeToken.decimals')}
fontSize="14"
/>
<OptionalInput
bind:value={description}
label={localize('popups.mintNativeToken.property.description')}
label={localize('popups.nativeToken.property.description')}
description={localize('tooltips.mintNativeToken.description')}
fontSize="14"
/>
<OptionalInput
bind:value={url}
label={localize('popups.mintNativeToken.property.url')}
label={localize('popups.nativeToken.property.url')}
description={localize('tooltips.mintNativeToken.url')}
fontSize="14"
/>
<OptionalInput
bind:value={logoUrl}
label={localize('popups.mintNativeToken.property.logoUrl')}
label={localize('popups.nativeToken.property.logoUrl')}
description={localize('tooltips.mintNativeToken.logoUrl')}
fontSize="14"
/>
Expand Down