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

NFT Details Screen #13370

Merged
merged 39 commits into from
Jul 28, 2022
Merged

NFT Details Screen #13370

merged 39 commits into from
Jul 28, 2022

Conversation

muliswilliam
Copy link
Contributor

@muliswilliam muliswilliam commented May 18, 2022

This PR adds functionality to display NFTs in portfolio and ability to navigate and view NFT details

Resolves brave/brave-browser#22623

Submitter Checklist:

  • I confirm that no security/privacy review is needed, or that I have requested one
  • There is a ticket for my issue
  • Used Github auto-closing keywords in the PR description above
  • Wrote a good PR/commit description
  • Squashed any review feedback or "fixup" commits before merge, so that history is a record of what happened in the repo, not your PR
  • Added appropriate labels (QA/Yes or QA/No; release-notes/include or release-notes/exclude; OS/...) to the associated issue
  • Checked the PR locally: npm run test -- brave_browser_tests, npm run test -- brave_unit_tests, npm run lint, npm run gn_check, npm run tslint
  • Ran git rebase master (if needed)

Reviewer Checklist:

  • A security review is not needed, or a link to one is included in the PR description
  • New files have MPL-2.0 license header
  • Adequate test coverage exists to prevent regressions
  • Major classes, functions and non-trivial code blocks are well-commented
  • Changes in component dependencies are properly reflected in gn
  • Code follows the style guide
  • Test plan is specified in PR before merging

After-merge Checklist:

Test Plan:

  1. Add an NFT as a custom token by click Visible Assets button below portfolio assets. When you complete the process and click Done button in the modal, the NFT will appear in the portfolio assets list
  2. Click on the NFT to navigate to NFT details screen
Screen.Recording.2022-04-29.at.17.46.22.mov

@github-actions github-actions bot added CI/storybook-url Deploy storybook and provide a unique URL for each build potential-layer-violation-fixes This PR touches a BUILD.gn file with check_includes=false labels May 18, 2022
@muliswilliam muliswilliam added this to the 1.39.x - Beta milestone May 18, 2022
@brave-builds
Copy link
Collaborator

A Storybook has been deployed to preview UI for the latest push

@brave-builds
Copy link
Collaborator

A Storybook has been deployed to preview UI for the latest push

@thypon
Copy link
Member

thypon commented May 24, 2022

@muliswilliam May you rebase on top of master?

@muliswilliam
Copy link
Contributor Author

muliswilliam commented May 24, 2022

@muliswilliam May you rebase on top of master?

@thypon Yes, I will rebase once I make all the feedback changes.

@muliswilliam muliswilliam force-pushed the feature/nft-details-screen branch 3 times, most recently from f612e30 to c6e5bda Compare May 25, 2022 06:37
@brave-builds
Copy link
Collaborator

A Storybook has been deployed to preview UI for the latest push

Douglashdaniel
Douglashdaniel previously approved these changes May 25, 2022
Copy link
Contributor

@Douglashdaniel Douglashdaniel left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

++ front-end

Copy link
Member

@diracdeltas diracdeltas left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

just noting that this is blocked on figuring out performance implications of having so many iframes + adding the sandbox attribute to the iframe(s)

@brave-builds
Copy link
Collaborator

A Storybook has been deployed to preview UI for the latest push

@brave-builds
Copy link
Collaborator

A Storybook has been deployed to preview UI for the latest push

Copy link
Member

@diracdeltas diracdeltas left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

approving but noting that brave/brave-browser#24262 should be done soon

@muliswilliam muliswilliam merged commit 0b6165f into master Jul 28, 2022
@muliswilliam muliswilliam deleted the feature/nft-details-screen branch July 28, 2022 17:01
@github-actions github-actions bot added this to the 1.44.x - Nightly milestone Jul 28, 2022
Comment on lines +27 to +45
export type UpdateLoadingMessage = CommandMessage & {
payload: boolean
}

export type UpdateSelectedAssetMessage = CommandMessage & {
payload: BraveWallet.BlockchainToken
}

export type UpdateNFtMetadataMessage = CommandMessage & {
payload: NFTMetadataReturnType
}

export type UpdateTokenNetworkMessage = CommandMessage & {
payload: BraveWallet.NetworkInfo
}

export type UpdateNftImageUrl = CommandMessage & {
payload: string
}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How about

type CommandPayloadMessage<T> = CommandMessage & {
  payload: T
}

export type UpdateLoadingMessage = CommandPayloadMessage<boolean>

save a few keystrokes ;-)

// components
import { NftContent } from './components/nft-content/nft-content'

const App = () => {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: function App() { ...

@@ -218,6 +225,38 @@ handler.on(WalletPageActions.openWalletSettings.getType(), async (store) => {
})
})

handler.on(WalletPageActions.getNFTMetadata.getType(), async (store, payload: BraveWallet.BlockchainToken) => {
store.dispatch(WalletPageActions.setIsFetchingNFTMetadata(true))
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

getNFTMetadata action always results in setIsFetchingNFTMetadata(true) action. So it's implied. Therefore, reducer for getNFTMetadata can simply set isFetchingNFTMetadata to true.

This handler also finishes with the updateNFTMetadata at which point the reducer can set isFetchingNFTMetadata to false. In an error state, instead of simply logging, it could dispatch either a new action (e.g. errorGettingNFTMetadata) or provide an error state in updateNFTMetadata. This would reduce the amount of actions fired by this from 4 to 2, improving performance.

nit: Also actions seem to be mixed between "event"-like names and get/set-like names. Usually for redux, event-like names are preferred. Unless the wallet team has made a different decision? This encourages fewer actions to be fired.

@kdenhartog kdenhartog mentioned this pull request Aug 1, 2022
25 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
CI/storybook-url Deploy storybook and provide a unique URL for each build potential-layer-violation-fixes This PR touches a BUILD.gn file with check_includes=false
Projects
Archived in project
Development

Successfully merging this pull request may close these issues.

Wire NFT Details Page to Backend