feat: Adds support for embedded animation_urls (#5492)
* feat: adds support for embedded animation_urls * chore: refactored styles and MediaType types * chore: re-use image styles for embeds
This commit is contained in:
parent
9ac83bea7e
commit
d5e676efb5
@ -23,6 +23,26 @@ export const image = style([
|
|||||||
},
|
},
|
||||||
])
|
])
|
||||||
|
|
||||||
|
export const embedContainer = style({
|
||||||
|
position: 'relative',
|
||||||
|
overflow: 'hidden',
|
||||||
|
width: '100%',
|
||||||
|
paddingTop: '100%',
|
||||||
|
})
|
||||||
|
|
||||||
|
export const embed = style([
|
||||||
|
image,
|
||||||
|
{
|
||||||
|
position: 'absolute',
|
||||||
|
top: 0,
|
||||||
|
left: 0,
|
||||||
|
bottom: 0,
|
||||||
|
right: 0,
|
||||||
|
width: '100%',
|
||||||
|
height: '100%',
|
||||||
|
},
|
||||||
|
])
|
||||||
|
|
||||||
export const container = style([
|
export const container = style([
|
||||||
center,
|
center,
|
||||||
{
|
{
|
||||||
|
@ -191,35 +191,53 @@ const initialFilterState = {
|
|||||||
[ActivityEventType.CancelListing]: false,
|
[ActivityEventType.CancelListing]: false,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
enum MediaType {
|
||||||
|
Audio = 'audio',
|
||||||
|
Video = 'video',
|
||||||
|
Image = 'image',
|
||||||
|
Embed = 'embed',
|
||||||
|
}
|
||||||
|
|
||||||
const AssetView = ({
|
const AssetView = ({
|
||||||
mediaType,
|
mediaType,
|
||||||
asset,
|
asset,
|
||||||
dominantColor,
|
dominantColor,
|
||||||
}: {
|
}: {
|
||||||
mediaType: 'image' | 'video' | 'audio'
|
mediaType: MediaType
|
||||||
asset: GenieAsset
|
asset: GenieAsset
|
||||||
dominantColor: [number, number, number]
|
dominantColor: [number, number, number]
|
||||||
}) => {
|
}) => {
|
||||||
const style = { ['--shadow' as string]: `rgba(${dominantColor.join(', ')}, 0.5)` }
|
const style = { ['--shadow' as string]: `rgba(${dominantColor.join(', ')}, 0.5)` }
|
||||||
|
|
||||||
switch (mediaType) {
|
switch (mediaType) {
|
||||||
case 'video':
|
case MediaType.Video:
|
||||||
return <video src={asset.animationUrl} className={styles.image} autoPlay controls muted loop style={style} />
|
return <video src={asset.animationUrl} className={styles.image} autoPlay controls muted loop style={style} />
|
||||||
case 'image':
|
case MediaType.Image:
|
||||||
return (
|
return (
|
||||||
<img className={styles.image} src={asset.imageUrl} alt={asset.name || asset.collectionName} style={style} />
|
<img className={styles.image} src={asset.imageUrl} alt={asset.name || asset.collectionName} style={style} />
|
||||||
)
|
)
|
||||||
case 'audio':
|
case MediaType.Audio:
|
||||||
return <AudioPlayer {...asset} dominantColor={dominantColor} />
|
return <AudioPlayer {...asset} dominantColor={dominantColor} />
|
||||||
|
case MediaType.Embed:
|
||||||
|
return (
|
||||||
|
<div className={styles.embedContainer}>
|
||||||
|
<iframe
|
||||||
|
title={asset.name ?? `${asset.collectionName} #${asset.tokenId}`}
|
||||||
|
src={asset.animationUrl}
|
||||||
|
className={styles.embed}
|
||||||
|
style={style}
|
||||||
|
frameBorder={0}
|
||||||
|
height="100%"
|
||||||
|
width="100%"
|
||||||
|
sandbox="allow-scripts"
|
||||||
|
allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture"
|
||||||
|
allowFullScreen
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
enum MediaType {
|
|
||||||
Audio = 'audio',
|
|
||||||
Video = 'video',
|
|
||||||
Image = 'image',
|
|
||||||
}
|
|
||||||
|
|
||||||
interface AssetDetailsProps {
|
interface AssetDetailsProps {
|
||||||
asset: GenieAsset
|
asset: GenieAsset
|
||||||
collection: CollectionInfoForAsset
|
collection: CollectionInfoForAsset
|
||||||
@ -245,6 +263,8 @@ export const AssetDetails = ({ asset, collection }: AssetDetailsProps) => {
|
|||||||
return MediaType.Audio
|
return MediaType.Audio
|
||||||
} else if (isVideo(asset.animationUrl ?? '')) {
|
} else if (isVideo(asset.animationUrl ?? '')) {
|
||||||
return MediaType.Video
|
return MediaType.Video
|
||||||
|
} else if (asset.animationUrl !== undefined) {
|
||||||
|
return MediaType.Embed
|
||||||
}
|
}
|
||||||
return MediaType.Image
|
return MediaType.Image
|
||||||
}, [asset])
|
}, [asset])
|
||||||
|
Loading…
Reference in New Issue
Block a user