mirror of
https://github.com/stronk-dev/RandomChad.git
synced 2025-07-05 10:35:08 +02:00
Prettified changing room
This commit is contained in:
parent
0b629eb14b
commit
82dca9cb88
@ -1,4 +1,4 @@
|
|||||||
main {
|
/*main {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-grow: 1;
|
flex-grow: 1;
|
||||||
flex-shrink: 0;
|
flex-shrink: 0;
|
||||||
@ -46,9 +46,9 @@ div.container.wide {
|
|||||||
p.row {
|
p.row {
|
||||||
max-width: 100%!important;
|
max-width: 100%!important;
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
/*Login button*/
|
/*Login button*/
|
||||||
.button {
|
/*.button {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: row;
|
flex-direction: row;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
@ -91,10 +91,10 @@ input#address {
|
|||||||
|
|
||||||
h1, p, label {
|
h1, p, label {
|
||||||
padding: .2rem .5rem;
|
padding: .2rem .5rem;
|
||||||
}
|
}*/
|
||||||
|
|
||||||
/*Loading spinner*/
|
/*Loading spinner*/
|
||||||
.loading {
|
/*.loading {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
@ -126,13 +126,13 @@ h1, p, label {
|
|||||||
100% {
|
100% {
|
||||||
transform: rotate(360deg);
|
transform: rotate(360deg);
|
||||||
}
|
}
|
||||||
}
|
}*/
|
||||||
|
|
||||||
|
|
||||||
/* ///////////////////////////////
|
/* ///////////////////////////////
|
||||||
/// Avatar page
|
/// Avatar page
|
||||||
// /////////////////////////////*/
|
// /////////////////////////////*/
|
||||||
#avatar .rocketeer {
|
/*#avatar .rocketeer {
|
||||||
margin: 1rem 0;
|
margin: 1rem 0;
|
||||||
border-radius: 50%;
|
border-radius: 50%;
|
||||||
padding: 1rem;
|
padding: 1rem;
|
||||||
@ -159,4 +159,4 @@ h1, p, label {
|
|||||||
|
|
||||||
.radios .row {
|
.radios .row {
|
||||||
width: 200px;
|
width: 200px;
|
||||||
}
|
}*/
|
@ -1,8 +0,0 @@
|
|||||||
import styled from 'styled-components'
|
|
||||||
|
|
||||||
export default styled.img`
|
|
||||||
border-radius: 50%;
|
|
||||||
height: 200px;
|
|
||||||
width: 200px;
|
|
||||||
padding: 1rem;
|
|
||||||
`
|
|
12
minter/src/components/atoms/CircleImage.js
Normal file
12
minter/src/components/atoms/CircleImage.js
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
import styled from 'styled-components'
|
||||||
|
|
||||||
|
export default styled.img`
|
||||||
|
border-radius: 50%;
|
||||||
|
height: 150px;
|
||||||
|
width: 150px;
|
||||||
|
margin: 1rem;
|
||||||
|
cursor: ${ ( { onClick } ) => onClick ? 'pointer' : 'none' };
|
||||||
|
&:hover {
|
||||||
|
box-shadow: ${ ( { onClick } ) => onClick ? '0 0 20px 2px rgb(0 0 0 / 20%)' : 'none' };
|
||||||
|
}
|
||||||
|
`
|
@ -21,11 +21,11 @@ const Wrapper = styled.div`
|
|||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: center;
|
justify-content: ${ ( { justify='flex-start' } ) => justify };
|
||||||
min-height: 100vh;
|
min-height: 100vh;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
padding: 0 max( 1rem, calc( 25vw - 4rem ) );
|
padding: ${ ( { gutter=true } ) => gutter ? '0 max( 1rem, calc( 25vw - 4rem ) )' : 'none' };
|
||||||
margin-bottom: 10rem;
|
// margin-bottom: 10rem;
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
& * {
|
& * {
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
|
@ -1,7 +1,8 @@
|
|||||||
import styled from 'styled-components'
|
import styled from 'styled-components'
|
||||||
|
|
||||||
export default styled.section`
|
export default styled.section`
|
||||||
padding: 1rem 0;
|
position: relative;
|
||||||
|
padding: ${ ( { gutter=false } ) => gutter ? '5rem max( 1rem, calc( 25vw - 4rem ) )' : '5rem 0' };
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: ${ ( { direction } ) => direction || 'column' };
|
flex-direction: ${ ( { direction } ) => direction || 'column' };
|
||||||
width: ${ ( { width } ) => width || '100%' };
|
width: ${ ( { width } ) => width || '100%' };
|
||||||
@ -9,4 +10,23 @@ export default styled.section`
|
|||||||
flex-wrap: wrap;
|
flex-wrap: wrap;
|
||||||
align-items: ${ ( { align } ) => align || 'center' };
|
align-items: ${ ( { align } ) => align || 'center' };
|
||||||
justify-content: ${ ( { justify } ) => justify || 'center' };
|
justify-content: ${ ( { justify } ) => justify || 'center' };
|
||||||
|
box-shadow: ${ ( { shadow } ) => shadow ? '0 0 20px 2px rgb(0 0 0 / 20%)' : 'none' };
|
||||||
|
background-image: ${ ( { background } ) => background ? `url(${ background })` : 'none' };
|
||||||
|
background-size: cover;
|
||||||
|
background-position: center;
|
||||||
|
|
||||||
|
& * {
|
||||||
|
z-index: 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:after {
|
||||||
|
content: '';
|
||||||
|
z-index: 1;
|
||||||
|
background: ${ ( { background } ) => background ? `rgba( 255, 255, 255, .5 )` : 'none' };
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
right: 0;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
`
|
`
|
@ -2,28 +2,38 @@ import styled from 'styled-components'
|
|||||||
|
|
||||||
export const Text = styled.p`
|
export const Text = styled.p`
|
||||||
font-size: 1rem;
|
font-size: 1rem;
|
||||||
margin: 1rem 0;
|
margin: .2rem 0;
|
||||||
line-height: 1.5rem;
|
line-height: 1.5rem;
|
||||||
color: ${ ( { theme } ) => theme.colors.text };
|
color: ${ ( { banner, theme } ) => banner ? theme.colors.primary_invert : theme.colors.text };
|
||||||
text-align: ${ ( { align } ) => align || 'left' }
|
background: ${ ( { banner, theme } ) => banner ? theme.colors.primary : theme.colors.primary_invert };
|
||||||
|
padding: ${ ( { banner } ) => banner ? '.5rem 1rem' : 'initial' };
|
||||||
|
box-shadow: ${ ( { banner } ) => banner ? '0 0 20px 2px rgb(0 0 0 / 70%)' : '' };
|
||||||
|
text-align: ${ ( { align } ) => align || 'left' };
|
||||||
`
|
`
|
||||||
|
|
||||||
export const H1 = styled.h1`
|
export const H1 = styled.h1`
|
||||||
font-size: 2.5rem;
|
font-size: 2.5rem;
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
line-height: 1.2;
|
line-height: 1.2;
|
||||||
|
margin: 1rem 0;
|
||||||
font-family: sans-serif;
|
font-family: sans-serif;
|
||||||
text-align: ${ ( { align } ) => align || 'left' };
|
text-align: ${ ( { align } ) => align || 'left' };
|
||||||
color: ${ ( { theme } ) => theme.colors.primary };
|
box-shadow: ${ ( { banner } ) => banner ? '0 0 20px 2px rgb(0 0 0 / 70%)' : '' };
|
||||||
|
color: ${ ( { banner, theme } ) => banner ? theme.colors.primary_invert : theme.colors.text };
|
||||||
|
background: ${ ( { banner, theme } ) => banner ? theme.colors.primary : theme.colors.primary_invert };
|
||||||
|
padding: ${ ( { banner } ) => banner ? '.5rem 1rem' : 'initial' };
|
||||||
`
|
`
|
||||||
|
|
||||||
export const H2 = styled.h2`
|
export const H2 = styled.h2`
|
||||||
font-size: 1.5rem;
|
font-size: 1.5rem;
|
||||||
margin: 0 0 1rem;
|
margin: .5rem 0;
|
||||||
line-height: 1.2;
|
line-height: 1.2;
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
text-align: ${ ( { align } ) => align || 'left' };
|
text-align: ${ ( { align } ) => align || 'left' };
|
||||||
color: ${ ( { theme } ) => theme.colors.primary };
|
box-shadow: ${ ( { banner } ) => banner ? '0 0 20px 2px rgb(0 0 0 / 70%)' : '' };
|
||||||
|
color: ${ ( { banner, theme } ) => banner ? theme.colors.primary_invert : theme.colors.text };
|
||||||
|
background: ${ ( { banner, theme } ) => banner ? theme.colors.primary : theme.colors.primary_invert };
|
||||||
|
padding: ${ ( { banner } ) => banner ? '.5rem 1rem' : 'initial' };
|
||||||
`
|
`
|
||||||
|
|
||||||
export const Sidenote = styled.p`
|
export const Sidenote = styled.p`
|
||||||
|
@ -4,6 +4,7 @@ import { ThemeProvider } from 'styled-components'
|
|||||||
const theme = {
|
const theme = {
|
||||||
colors: {
|
colors: {
|
||||||
primary: 'black',
|
primary: 'black',
|
||||||
|
primary_invert: 'white',
|
||||||
text: 'rgb( 0, 0, 0, .8 )',
|
text: 'rgb( 0, 0, 0, .8 )',
|
||||||
accent: 'orange',
|
accent: 'orange',
|
||||||
hint: 'rgba( 0, 0, 0, .4 )',
|
hint: 'rgba( 0, 0, 0, .4 )',
|
||||||
|
12
minter/src/components/molecules/Avatar.js
Normal file
12
minter/src/components/molecules/Avatar.js
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
import styled from 'styled-components'
|
||||||
|
import CircleImage from '../atoms/CircleImage'
|
||||||
|
import { Text } from '../atoms/Text'
|
||||||
|
|
||||||
|
const Wrapper = styled.div`
|
||||||
|
|
||||||
|
`
|
||||||
|
|
||||||
|
export default ( { title, ...props } ) => <Wrapper>
|
||||||
|
<CircleImage { ...props } />
|
||||||
|
{ title && <Text align="center">{ title }</Text> }
|
||||||
|
</Wrapper>
|
@ -4,17 +4,5 @@ import Section from '../atoms/Section'
|
|||||||
export default styled( Section )`
|
export default styled( Section )`
|
||||||
width: 100%;
|
width: 100%;
|
||||||
min-height: 500px;
|
min-height: 500px;
|
||||||
align-items: flex-start;
|
align-items: center;
|
||||||
border-bottom: 2px solid ${ ( { theme } ) => theme.colors.primary };
|
|
||||||
margin-bottom: 5rem;
|
|
||||||
& h1 {
|
|
||||||
margin-bottom: .5rem;
|
|
||||||
text-align: left;
|
|
||||||
}
|
|
||||||
& * {
|
|
||||||
max-width: 700px;
|
|
||||||
}
|
|
||||||
& p {
|
|
||||||
margin: 0 0 4rem;
|
|
||||||
}
|
|
||||||
`
|
`
|
@ -32,7 +32,7 @@ const Spinner = styled.div`
|
|||||||
|
|
||||||
`
|
`
|
||||||
|
|
||||||
export default ( { message, ...props } ) => <Container { ...props }>
|
export default ( { message, ...props } ) => <Container justify="center" { ...props }>
|
||||||
|
|
||||||
<Spinner />
|
<Spinner />
|
||||||
{ message && <Text align="center">{ message }</Text> }
|
{ message && <Text align="center">{ message }</Text> }
|
||||||
|
@ -9,7 +9,7 @@ import Container from '../atoms/Container'
|
|||||||
import Section from '../atoms/Section'
|
import Section from '../atoms/Section'
|
||||||
import { H1, H2, Text } from '../atoms/Text'
|
import { H1, H2, Text } from '../atoms/Text'
|
||||||
import Button from '../atoms/Button'
|
import Button from '../atoms/Button'
|
||||||
import Avatar from '../atoms/Avatar'
|
import Avatar from '../molecules/Avatar'
|
||||||
|
|
||||||
|
|
||||||
import Loading from '../molecules/Loading'
|
import Loading from '../molecules/Loading'
|
||||||
@ -61,8 +61,8 @@ export default function Verifier() {
|
|||||||
|
|
||||||
if( error ) throw new Error( error )
|
if( error ) throw new Error( error )
|
||||||
|
|
||||||
alert( `Success! Outfit changed, please click "refresh metadata" on Opensea to update it there.\nForwarding you to the tools homepage.` )
|
alert( `Success! Outfit changed, please click "refresh metadata" on Opensea to update it there.` )
|
||||||
navigate( `/` )
|
window?.location.reload()
|
||||||
|
|
||||||
} catch( e ) {
|
} catch( e ) {
|
||||||
|
|
||||||
@ -144,6 +144,10 @@ export default function Verifier() {
|
|||||||
selected.last_outfit_change = last_outfit_change
|
selected.last_outfit_change = last_outfit_change
|
||||||
selected.new_outfit_available = timeUntilAllowedToChange < 0
|
selected.new_outfit_available = timeUntilAllowedToChange < 0
|
||||||
selected.when_new_outfit = new Date( Date.now() + timeUntilAllowedToChange )
|
selected.when_new_outfit = new Date( Date.now() + timeUntilAllowedToChange )
|
||||||
|
|
||||||
|
const [ full, outfitnumber ] = selected.image.match( /(\d)(?:-\d\.jpg)/ ) || []
|
||||||
|
log( `Current outfit of ${ full } is ${ outfitnumber }` )
|
||||||
|
selected.current_outfit = outfitnumber || 0
|
||||||
}
|
}
|
||||||
|
|
||||||
log( "Selecting rocketeer ", selected )
|
log( "Selecting rocketeer ", selected )
|
||||||
@ -180,26 +184,40 @@ export default function Verifier() {
|
|||||||
</Container>
|
</Container>
|
||||||
|
|
||||||
// Changing room
|
// Changing room
|
||||||
if( rocketeer ) return <Container>
|
if( rocketeer ) return <Container gutter={ false }>
|
||||||
|
|
||||||
<Hero>
|
|
||||||
<H1>{ rocketeer.name }</H1>
|
|
||||||
|
|
||||||
<Avatar key={ rocketeer.id } src={ rocketeer.image } alt={ `Rocketeer number ${ rocketeer.id }` } />
|
|
||||||
{ rocketeer.new_outfit_available ? <Button onClick={ generateNewOutfit }>Generate new outfit</Button> : <Text>New outfit available on { rocketeer.when_new_outfit.toString() }</Text> }
|
|
||||||
|
|
||||||
|
{ /* Header */ }
|
||||||
|
<Hero background={ rocketeer.image } gutter={ true } shadow={ true }>
|
||||||
|
<H1 banner={ true }>{ rocketeer.name.split( ' ' )[0] }'s changing room</H1>
|
||||||
|
<H2 banner={ true }>Current outfit: { rocketeer.current_outfit ? `#${rocketeer.current_outfit}` : 'Genesis' }</H2>
|
||||||
</Hero>
|
</Hero>
|
||||||
|
|
||||||
|
<Section direction="column" gutter={ true }>
|
||||||
|
<H2>{ rocketeer.name }</H2>
|
||||||
|
<Avatar key={ rocketeer.id } src={ rocketeer.image } alt={ `Rocketeer number ${ rocketeer.id }` } />
|
||||||
|
{ rocketeer.new_outfit_available ? <Button onClick={ generateNewOutfit }>Generate new outfit</Button> : <Text align="center">New outfit available on { rocketeer.when_new_outfit.toString() }</Text> }
|
||||||
|
</Section>
|
||||||
|
|
||||||
<H2>{ rocketeer.name.split( ' ' )[0] }'s outfits</H2>
|
|
||||||
<Text>This Rocketeer has { 1 + rocketeer.outfits } outfits. { rocketeer.outfits > 0 && 'Click any outfit to select it as primary.' }</Text>
|
|
||||||
<Section direction="row">
|
|
||||||
|
|
||||||
<Avatar key={ rocketeer.id + 0 } onClick={ f => setPrimaryOutfit( 0 ) } src={ rocketeer.image.replace( /-\d\.jpg/, '.jpg' ) } alt={ `Rocketeer number ${ rocketeer.id }` } />
|
{ /* Select outfits */ }
|
||||||
|
<Section align='flex-start' direction="column" gutter={ true } shadow={ true }>
|
||||||
|
|
||||||
{ Array.from( Array( rocketeer.outfits ) ).map( ( val, i ) => {
|
<H2>{ rocketeer.name.split( ' ' )[0] }'s outfits</H2>
|
||||||
return <Avatar onClick={ f => setPrimaryOutfit( i + 1 ) } key={ rocketeer.id + i } src={ rocketeer.image.replace( /-\d\.jpg/, `-${ i + 1 }.jpg` ) } alt={ `Rocketeer number ${ rocketeer.id }` } />
|
<Text>This Rocketeer has { 1 + rocketeer.outfits } outfits. { rocketeer.outfits > 0 && 'Click any outfit to select it as primary.' }</Text>
|
||||||
} ) }
|
|
||||||
|
|
||||||
|
<Section justify='flex-start' direction="row">
|
||||||
|
|
||||||
|
|
||||||
|
{ Array.from( Array( rocketeer.outfits ) ).map( ( val, i, arr ) => {
|
||||||
|
const reverseNumber = arr.length - i
|
||||||
|
return <Avatar title={ `Outfit #${ reverseNumber }` } onClick={ f => setPrimaryOutfit( reverseNumber ) } key={ rocketeer.id + reverseNumber } src={ rocketeer.image.replace( /(-\d)?\.jpg/, `-${ reverseNumber }.jpg` ) } alt={ `Rocketeer number ${ rocketeer.id } outfit ${ reverseNumber }` } />
|
||||||
|
} ) }
|
||||||
|
|
||||||
|
{ /* Genesis avatar */ }
|
||||||
|
<Avatar title="Genesis outfit" key={ rocketeer.id + '-genesis' } onClick={ f => setPrimaryOutfit( 0 ) } src={ rocketeer.image.replace( /(-\d)?\.jpg/, '.jpg' ) } alt={ `Rocketeer number ${ rocketeer.id }` } />
|
||||||
|
|
||||||
|
</Section>
|
||||||
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user