Skip to content

Commit 6626c34

Browse files
authored
Merge pull request #975 from numbersprotocol/feature-display-token-and-caption
Feature display NFT token and caption
2 parents b1c02a1 + 712d0c3 commit 6626c34

File tree

4 files changed

+119
-4
lines changed

4 files changed

+119
-4
lines changed

src/app/features/home/details/details.page.html

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -72,10 +72,7 @@
7272
</ion-label>
7373
</ion-item>
7474
<ion-item>
75-
<ion-icon
76-
src="/assets/images/media-id-solid-black.svg"
77-
slot="start"
78-
></ion-icon>
75+
<ion-icon src="/assets/images/media-id.svg" slot="start"></ion-icon>
7976
<ion-label
8077
(click)="openCertificate()"
8178
*ngIf="detailedCapture.id; else notRegistered"
@@ -86,6 +83,25 @@
8683
{{ 'notRegistered' | transloco }}
8784
</ng-template>
8885
</ion-item>
86+
<ng-container *ngrxLet="detailedCapture.nftToken$ as nftToken">
87+
<ion-item *ngIf="nftToken">
88+
<ion-icon src="/assets/images/nft.svg" slot="start"></ion-icon>
89+
<ion-label>
90+
{{ nftToken.tokenType }}
91+
<a href="{{ nftToken.explorerUrl }}">
92+
{{ nftToken.tokenId }}
93+
</a>
94+
</ion-label>
95+
</ion-item>
96+
</ng-container>
97+
<ng-container *ngrxLet="detailedCapture.caption$ as caption">
98+
<ion-item *ngIf="caption">
99+
<ion-icon name="document-text" slot="start"></ion-icon>
100+
<ion-label text-wrap>
101+
{{ caption }}
102+
</ion-label>
103+
</ion-item>
104+
</ng-container>
89105
</ion-list>
90106
<div class="text-center">
91107
<ion-button routerLink="information">

src/app/features/home/details/information/session/information-session.service.ts

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,35 @@ export class DetailedCapture {
151151
)[0];
152152
});
153153

154+
readonly caption$ = defer(async () => {
155+
if (!(this.proofOrDiaBackendAsset instanceof Proof))
156+
return this.proofOrDiaBackendAsset.caption;
157+
});
158+
159+
readonly nftToken$ = defer(() => {
160+
if (this.proofOrDiaBackendAsset instanceof Proof)
161+
return this.diaBackendAsset$.pipe(
162+
map(asset => {
163+
const tokenInfo = asset?.nft_token_id
164+
? getTokenInfo(
165+
asset.nft_blockchain_name,
166+
asset.nft_contract_address,
167+
asset.nft_token_id
168+
)
169+
: null;
170+
return tokenInfo;
171+
})
172+
);
173+
const tokenInfo = this.proofOrDiaBackendAsset.nft_token_id
174+
? getTokenInfo(
175+
this.proofOrDiaBackendAsset.nft_blockchain_name,
176+
this.proofOrDiaBackendAsset.nft_contract_address,
177+
this.proofOrDiaBackendAsset.nft_token_id
178+
)
179+
: null;
180+
return of(tokenInfo);
181+
});
182+
154183
constructor(
155184
private readonly proofOrDiaBackendAsset: Proof | DiaBackendAsset,
156185
private readonly mediaStore: MediaStore,
@@ -191,3 +220,29 @@ export function normalizeGeolocation({
191220
return { latitude: Number(latitude), longitude: Number(longitude) };
192221
return undefined;
193222
}
223+
224+
function getTokenInfo(
225+
nftBlockchainName: string,
226+
nftContractAddress: string,
227+
nftTokenId: string
228+
) {
229+
return {
230+
tokenId: nftTokenId,
231+
tokenType: nftBlockchainName === 'thundercore' ? 'TT721' : 'ERC721',
232+
explorerUrl: getExplorerUrl(
233+
nftBlockchainName,
234+
nftContractAddress,
235+
nftTokenId
236+
),
237+
};
238+
}
239+
240+
function getExplorerUrl(
241+
nftBlockchainName: string,
242+
nftContractAddress: string,
243+
nftTokenId: string
244+
) {
245+
return nftBlockchainName === 'thundercore'
246+
? `https://viewblock.io/thundercore/address/${nftContractAddress}?txsType=nft&specific=${nftTokenId}`
247+
: `https://etherscan.io/token/${nftContractAddress}?a=${nftTokenId}`;
248+
}

src/app/shared/dia-backend/asset/dia-backend-asset-repository.service.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -324,6 +324,7 @@ export interface DiaBackendAsset extends Tuple {
324324
readonly nft_token_uri: string;
325325
readonly nft_blockchain_name: string;
326326
readonly nft_contract_address: string;
327+
readonly caption: string;
327328
}
328329

329330
export type AssetDownloadField =

src/assets/images/nft.svg

Lines changed: 43 additions & 0 deletions
Loading

0 commit comments

Comments
 (0)