import React, { useState } from 'react'; import PropTypes from 'prop-types'; import { useSelector } from 'react-redux'; import { useHistory } from 'react-router-dom'; import Box from '../../ui/box'; import Typography from '../../ui/typography/typography'; import { COLORS, TYPOGRAPHY, JUSTIFY_CONTENT, FLEX_DIRECTION, ALIGN_ITEMS, DISPLAY, BLOCK_SIZES, FLEX_WRAP, } from '../../../helpers/constants/design-system'; import { ENVIRONMENT_TYPE_POPUP } from '../../../../shared/constants/app'; import { getEnvironmentType } from '../../../../app/scripts/lib/util'; import { getIpfsGateway } from '../../../selectors'; import { ASSET_ROUTE } from '../../../helpers/constants/routes'; import { getAssetImageURL } from '../../../helpers/utils/util'; const width = getEnvironmentType() === ENVIRONMENT_TYPE_POPUP ? BLOCK_SIZES.ONE_THIRD : BLOCK_SIZES.ONE_SIXTH; export default function CollectiblesItems({ collections = {} }) { const defaultDropdownState = {}; const ipfsGateway = useSelector(getIpfsGateway); Object.keys(collections).forEach((key) => { defaultDropdownState[key] = true; }); const history = useHistory(); const [dropdownState, setDropdownState] = useState(defaultDropdownState); return (
<> {Object.keys(collections).map((key, index) => { const { collectibles, collectionName, collectionImage, } = collections[key]; const isExpanded = dropdownState[key]; return (
{ setDropdownState((_dropdownState) => ({ ..._dropdownState, [key]: !isExpanded, })); }} > {collectionImage ? ( ) : (
{collectionName[0]}
)} {`${collectionName} (${collectibles.length})`}
{isExpanded ? ( {collectibles.map((collectible, i) => { const { image, address, tokenId, backgroundColor, } = collectible; const collectibleImage = getAssetImageURL( image, ipfsGateway, ); return (
history.push( `${ASSET_ROUTE}/${address}/${tokenId}`, ) } className="collectibles-items__image" src={collectibleImage} />
); })}
) : null}
); })}
); } CollectiblesItems.propTypes = { collections: PropTypes.shape({ collectibles: PropTypes.arrayOf( PropTypes.shape({ address: PropTypes.string.isRequired, tokenId: PropTypes.string.isRequired, name: PropTypes.string, description: PropTypes.string, image: PropTypes.string, standard: PropTypes.string, imageThumbnail: PropTypes.string, imagePreview: PropTypes.string, creator: PropTypes.shape({ address: PropTypes.string, config: PropTypes.string, profile_img_url: PropTypes.string, }), }), ), collectionImage: PropTypes.string, collectionName: PropTypes.string, }), };