Adding collectibles items overview (#12506)
* Adding collectibles items overview * addressing feedback Co-authored-by: Alex <adonesky@gmail.com>feature/default_network_editable
parent
0bed51b936
commit
279c8072ed
@ -0,0 +1,148 @@ |
|||||||
|
import React, { useState } from 'react'; |
||||||
|
import PropTypes from 'prop-types'; |
||||||
|
import Box from '../../ui/box'; |
||||||
|
import Button from '../../ui/button'; |
||||||
|
import Typography from '../../ui/typography/typography'; |
||||||
|
import { |
||||||
|
COLORS, |
||||||
|
TYPOGRAPHY, |
||||||
|
TEXT_ALIGN, |
||||||
|
JUSTIFY_CONTENT, |
||||||
|
FLEX_DIRECTION, |
||||||
|
ALIGN_ITEMS, |
||||||
|
DISPLAY, |
||||||
|
BLOCK_SIZES, |
||||||
|
SIZES, |
||||||
|
FLEX_WRAP, |
||||||
|
} from '../../../helpers/constants/design-system'; |
||||||
|
import { ENVIRONMENT_TYPE_POPUP } from '../../../../shared/constants/app'; |
||||||
|
import { useI18nContext } from '../../../hooks/useI18nContext'; |
||||||
|
import { getEnvironmentType } from '../../../../app/scripts/lib/util'; |
||||||
|
|
||||||
|
export default function CollectiblesItems({ onAddNFT, onRefreshList }) { |
||||||
|
const t = useI18nContext(); |
||||||
|
const collections = {}; |
||||||
|
const defaultDropdownState = {}; |
||||||
|
|
||||||
|
Object.keys(collections).forEach((key) => { |
||||||
|
defaultDropdownState[key] = true; |
||||||
|
}); |
||||||
|
|
||||||
|
const [dropdownState, setDropdownState] = useState(defaultDropdownState); |
||||||
|
const width = |
||||||
|
getEnvironmentType() === ENVIRONMENT_TYPE_POPUP |
||||||
|
? BLOCK_SIZES.ONE_THIRD |
||||||
|
: BLOCK_SIZES.ONE_SIXTH; |
||||||
|
return ( |
||||||
|
<div className="collectibles-items"> |
||||||
|
<Box padding={[4, 6, 4, 6]} flexDirection={FLEX_DIRECTION.COLUMN}> |
||||||
|
<> |
||||||
|
{Object.keys(collections).map((key, index) => { |
||||||
|
const { icon, collectibles } = collections[key]; |
||||||
|
const isExpanded = dropdownState[key]; |
||||||
|
|
||||||
|
return ( |
||||||
|
<div key={`collection-${index}`}> |
||||||
|
<Box |
||||||
|
marginTop={4} |
||||||
|
marginBottom={4} |
||||||
|
display={DISPLAY.FLEX} |
||||||
|
alignItems={ALIGN_ITEMS.CENTER} |
||||||
|
justifyContent={JUSTIFY_CONTENT.SPACE_BETWEEN} |
||||||
|
> |
||||||
|
<Box alignItems={ALIGN_ITEMS.CENTER}> |
||||||
|
<img width="28" src={icon} /> |
||||||
|
<Typography |
||||||
|
color={COLORS.BLACK} |
||||||
|
variant={TYPOGRAPHY.H4} |
||||||
|
margin={[0, 0, 0, 2]} |
||||||
|
> |
||||||
|
{`${key} (${collectibles.length})`} |
||||||
|
</Typography> |
||||||
|
</Box> |
||||||
|
<Box alignItems={ALIGN_ITEMS.FLEX_END}> |
||||||
|
<i |
||||||
|
className={`fa fa-lg fa-chevron-${ |
||||||
|
isExpanded ? 'down' : 'right' |
||||||
|
}`}
|
||||||
|
onClick={() => { |
||||||
|
setDropdownState((_dropdownState) => ({ |
||||||
|
..._dropdownState, |
||||||
|
[key]: !isExpanded, |
||||||
|
})); |
||||||
|
}} |
||||||
|
/> |
||||||
|
</Box> |
||||||
|
</Box> |
||||||
|
{isExpanded ? ( |
||||||
|
<Box display={DISPLAY.FLEX} flexWrap={FLEX_WRAP.WRAP}> |
||||||
|
{collectibles.map((collectible, i) => { |
||||||
|
return ( |
||||||
|
<Box width={width} padding={2} key={`collectible-${i}`}> |
||||||
|
<Box |
||||||
|
borderRadius={SIZES.MD} |
||||||
|
backgroundColor={collectible.backgroundColor} |
||||||
|
> |
||||||
|
<img src={collectible.icon} /> |
||||||
|
</Box> |
||||||
|
</Box> |
||||||
|
); |
||||||
|
})} |
||||||
|
</Box> |
||||||
|
) : null} |
||||||
|
</div> |
||||||
|
); |
||||||
|
})} |
||||||
|
<Box |
||||||
|
marginTop={6} |
||||||
|
flexDirection={FLEX_DIRECTION.COLUMN} |
||||||
|
justifyContent={JUSTIFY_CONTENT.CENTER} |
||||||
|
> |
||||||
|
<Typography |
||||||
|
color={COLORS.UI3} |
||||||
|
variant={TYPOGRAPHY.H5} |
||||||
|
align={TEXT_ALIGN.CENTER} |
||||||
|
> |
||||||
|
{t('missingNFT')} |
||||||
|
</Typography> |
||||||
|
<Box |
||||||
|
alignItems={ALIGN_ITEMS.CENTER} |
||||||
|
justifyContent={JUSTIFY_CONTENT.CENTER} |
||||||
|
> |
||||||
|
<Box justifyContent={JUSTIFY_CONTENT.FLEX_END}> |
||||||
|
<Button |
||||||
|
type="link" |
||||||
|
onClick={onRefreshList} |
||||||
|
style={{ padding: '4px' }} |
||||||
|
> |
||||||
|
{t('refreshList')} |
||||||
|
</Button> |
||||||
|
</Box> |
||||||
|
<Typography |
||||||
|
color={COLORS.UI3} |
||||||
|
variant={TYPOGRAPHY.H4} |
||||||
|
align={TEXT_ALIGN.CENTER} |
||||||
|
> |
||||||
|
{t('or')} |
||||||
|
</Typography> |
||||||
|
<Box justifyContent={JUSTIFY_CONTENT.FLEX_START}> |
||||||
|
<Button |
||||||
|
type="link" |
||||||
|
onClick={onAddNFT} |
||||||
|
style={{ padding: '4px' }} |
||||||
|
> |
||||||
|
{t('addNFTLowerCase')} |
||||||
|
</Button> |
||||||
|
</Box> |
||||||
|
</Box> |
||||||
|
</Box> |
||||||
|
</> |
||||||
|
</Box> |
||||||
|
</div> |
||||||
|
); |
||||||
|
} |
||||||
|
|
||||||
|
CollectiblesItems.propTypes = { |
||||||
|
onAddNFT: PropTypes.func.isRequired, |
||||||
|
onRefreshList: PropTypes.func.isRequired, |
||||||
|
}; |
@ -0,0 +1 @@ |
|||||||
|
export { default } from './collectibles-items.component'; |
@ -1 +0,0 @@ |
|||||||
export { default } from './collectibles-list.component'; |
|
@ -0,0 +1 @@ |
|||||||
|
export { default } from './collectibles-tab.component'; |
Loading…
Reference in new issue