From 1f1aeadf4651aee6584891eb11b47c8b7978950a Mon Sep 17 00:00:00 2001 From: Mentor Palokaj Date: Fri, 26 Nov 2021 12:23:30 +0100 Subject: [PATCH] Frontend selector without signing --- minter/src/components/metamask.js | 3 +- minter/src/components/outfits.js | 90 +++++++++++++++++++++++++++++++ minter/src/components/router.js | 6 +-- minter/src/modules/api.js | 5 +- 4 files changed, 99 insertions(+), 5 deletions(-) create mode 100644 minter/src/components/outfits.js diff --git a/minter/src/components/metamask.js b/minter/src/components/metamask.js index 6ab1a02..d25220d 100644 --- a/minter/src/components/metamask.js +++ b/minter/src/components/metamask.js @@ -64,11 +64,12 @@ export default function ComponentName( ) { // Actions menu if( address ) return -

Rocketeer Interface

+

Rocketeer Tools

Mint Rocketeer View Rocketeer Portfolio + Use Changing Room Discord verify Set address avatar
diff --git a/minter/src/components/outfits.js b/minter/src/components/outfits.js new file mode 100644 index 0000000..b18a335 --- /dev/null +++ b/minter/src/components/outfits.js @@ -0,0 +1,90 @@ +import { Container, Loading } from './generic' +import '../App.css' + +import { useState, useEffect } from 'react' +import { useRocketeers } from '../modules/api' +import { log } from '../modules/helpers' +import { useAddress } from '../modules/web3' + + +export default function Verifier() { + + // /////////////////////////////// + // State management + // /////////////////////////////// + const address = useAddress() + const metamaskAddress = useAddress() + const [ validatorAddress, setValidatorAddress ] = useState( ) + const rocketeers = useRocketeers() + const [ selectedId, setSelectedId ] = useState( ) + const [ rocketeer, setRocketeer ] = useState( ) + + + // /////////////////////////////// + // Lifecycle + // /////////////////////////////// + useEffect( f => { + if( !validatorAddress && metamaskAddress ) setValidatorAddress( metamaskAddress ) + }, [ metamaskAddress, validatorAddress ] ) + + useEffect( f => { + + const selected = rocketeers.find( ( { id } ) => id === selectedId ) + + if( selected ) { + const { value: outfits } = selected.attributes.find( ( { trait_type } ) => trait_type === 'available outfits' ) || 0 + selected.outfits = outfits + } + + log( "Selecting rocketeer ", selected ) + + if( selected ) setRocketeer( selected ) + + }, [ selectedId, rocketeers ] ) + + // /////////////////////////////// + // Rendering + // /////////////////////////////// + + if( !rocketeers.length ) return + + // Rocketeer selector + if(!rocketeer ) return 1 ? 'wide' : '' }> + +

Rocketeers

+

Click on a Rocketeer to manage it's outfits

+
+ + { rocketeers.map( ( { id, image } ) => { + + return setSelectedId( id ) } key={ id } className='rocketeer' src={ image } alt={ `Rocketeer number ${ id }` } /> + + } ) } + +

Rocketeers owned by: { address }.

+ + +
+ +
+ + // Changing room + if( rocketeer ) return 1 ? 'wide' : '' }> + +

Changing room for Rocketeer { selectedId }

+ window.location.href =`https://viewer.rocketeer.fans/?rocketeer=${ rocketeer.id }` } key={ rocketeer.id } className='rocketeer' src={ rocketeer.image } alt={ `Rocketeer number ${ rocketeer.id }` } /> +

This Rocketeer has { rocketeer.outfits } alternative outfits. { rocketeer.outfits > 0 && 'Click any outfit to select it as primary.' }

+ +
+ + { Array.from( Array( rocketeer.outfits ) ).map( ( val, i ) => { + return f } key={ rocketeer.id } className='rocketeer' src={ rocketeer.image.replace( '.jpg', `-${ i + 1 }.jpg` ) } alt={ `Rocketeer number ${ rocketeer.id }` } /> + } ) } + +
+ +

Rocketeers owned by: { address }.

+ +
+ +} \ No newline at end of file diff --git a/minter/src/components/router.js b/minter/src/components/router.js index 3d38047..0ba6ddd 100644 --- a/minter/src/components/router.js +++ b/minter/src/components/router.js @@ -3,6 +3,7 @@ import Metamask from './metamask' import Verifier from './verifier' import Avatar from './avatar' import Portfolio from './portfolio' +import Outfits from './outfits' import { useState, useEffect } from 'react' import { log } from '../modules/helpers' import { useAddress } from '../modules/web3' @@ -25,8 +26,6 @@ function Router() { // Redirect if metamask not connected useEffect( f => { - log( 'Address change' ) - if( timer ) { log( `cancelling old timer ${ timer }, address: ${ !!address }` ) clearTimeout( timer ) @@ -40,7 +39,7 @@ function Router() { setTimer( timeoutNumber ) } - }, [ address, navigate, timer ] ) + }, [ address, navigate ] ) // Not adding timer on purpose, causes loop // /////////////////////////////// // Rendering @@ -54,6 +53,7 @@ function Router() { } /> } /> + } /> diff --git a/minter/src/modules/api.js b/minter/src/modules/api.js index 06f8fce..14cff2b 100644 --- a/minter/src/modules/api.js +++ b/minter/src/modules/api.js @@ -45,7 +45,10 @@ export function useRocketeers() { ( async function() { - const rocketeerMetas = await Promise.all( ids.map( id => callApi( `/rocketeer/${ id }` ) ) ) + const rocketeerMetas = await Promise.all( ids.map( async id => ( { + ...await callApi( `/rocketeer/${ id }` ), + id: id + } ) ) ) log( 'Received rocketeers: ', rocketeerMetas ) setRocketeers( rocketeerMetas )