Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
72 changes: 0 additions & 72 deletions src/pages/api/tokens/[hash]/instances/[id]/media-type.ts

This file was deleted.

1 change: 0 additions & 1 deletion src/services/mixpanel/get-page-type.ts
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,6 @@ export const PAGE_TYPE_DICT: Record<Route['pathname'], string> = {
'/api/metrics': 'Node API: Prometheus metrics',
'/api/monitoring/invalid-api-schema': 'Node API: Prometheus metrics',
'/api/log': 'Node API: Request log',
'/api/tokens/[hash]/instances/[id]/media-type': 'Node API: Token instance media type',
'/api/proxy': 'Node API: Proxy',
'/api/csrf': 'Node API: CSRF token',
'/api/healthz': 'Node API: Health check',
Expand Down
1 change: 0 additions & 1 deletion src/shared/router/nextjs-routes.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,6 @@ declare module "nextjs-routes" {
| StaticRoute<"/api/metrics">
| StaticRoute<"/api/monitoring/invalid-api-schema">
| StaticRoute<"/api/proxy">
| DynamicRoute<"/api/tokens/[hash]/instances/[id]/media-type", { "hash": string; "id": string }>
| StaticRoute<"/apps">
| DynamicRoute<"/apps/[id]", { "id": string }>
| DynamicRoute<"/apps/[id]/info", { "id": string }>
Expand Down
10 changes: 0 additions & 10 deletions src/shell/metadata/templates/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -928,16 +928,6 @@ export const TEMPLATE_MAP: Record<Route['pathname'], RouteTemplateRecord> = {
},
},
},
'/api/tokens/[hash]/instances/[id]/media-type': {
metadata: {
title: {
'default': '%chain_name% node API token instance media type',
},
description: {
'default': DESCRIPTION_DEFAULT,
},
},
},
'/api/proxy': {
metadata: {
title: {
Expand Down
1 change: 0 additions & 1 deletion src/slices/token/components/entity/NftEntity.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,6 @@ const Icon = (props: IconProps) => {
return (
<NftMedia
data={ props.instance }
addressHash={ props.hash }
isLoading={ props.isLoading }
boxSize={ styles.boxSize }
size="sm"
Expand Down
35 changes: 12 additions & 23 deletions src/slices/token/components/nft-media/NftMedia.pw.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ import { toTokenInstanceModel } from '../../utils/model';
import NftMedia from './NftMedia';

const TOKEN_ID = '123';
const TOKEN_HASH = tokenInfoMock.tokenInfoERC721a.address_hash;

test.describe('no url', () => {
test.use({ viewport: { width: 250, height: 250 } });
Expand All @@ -20,7 +19,7 @@ test.describe('no url', () => {
animation_url: null,
token: tokenInfoMock.tokenInfoERC721a,
});
const component = await render(<NftMedia data={ data } addressHash={ TOKEN_HASH }/>);
const component = await render(<NftMedia data={ data }/>);
await expect(component).toHaveScreenshot();
});

Expand All @@ -34,30 +33,24 @@ test.describe('no url', () => {
});

await mockAssetResponse(IMAGE_URL, './playwright/mocks/image_long.jpg');
const component = await render(<NftMedia data={ data } addressHash={ TOKEN_HASH }/>);
const component = await render(<NftMedia data={ data }/>);
await expect(component).toHaveScreenshot();
});

test('non-media url and fallback', async({ render, page, mockAssetResponse }) => {
test('non-media url and fallback', async({ render, mockAssetResponse }) => {
const ANIMATION_URL = 'https://localhost:3000/my-animation.m3u8';
const ANIMATION_MEDIA_TYPE_API_URL = `/node-api/tokens/${ TOKEN_HASH }/instances/${ TOKEN_ID }/media-type?field=animation_url`;
const IMAGE_URL = 'https://localhost:3000/my-image.jpg';
const data = toTokenInstanceModel({
id: TOKEN_ID,
animation_url: ANIMATION_URL,
animation_media_type: null,
image_url: IMAGE_URL,
token: tokenInfoMock.tokenInfoERC721a,
});

await page.route(ANIMATION_MEDIA_TYPE_API_URL, (route) => {
return route.fulfill({
status: 200,
json: { type: undefined },
});
});
await mockAssetResponse(IMAGE_URL, './playwright/mocks/image_long.jpg');

const component = await render(<NftMedia data={ data } addressHash={ TOKEN_HASH }/>);
const component = await render(<NftMedia data={ data }/>);
await expect(component).toHaveScreenshot();
});
});
Expand All @@ -78,7 +71,7 @@ test.describe('image', () => {
});
await render(
<Box boxSize="250px">
<NftMedia data={ data } addressHash={ TOKEN_HASH } size="md"/>
<NftMedia data={ data } size="md"/>
</Box>,
);
await expect(page).toHaveScreenshot({ clip: { x: 0, y: 0, width: 250, height: 250 } });
Expand All @@ -99,7 +92,7 @@ test.describe('image', () => {
await mockAssetResponse(THUMBNAIL_URL, './playwright/mocks/image_md.jpg');
await render(
<Box boxSize="250px">
<NftMedia data={ data } addressHash={ TOKEN_HASH } size="md"/>
<NftMedia data={ data } size="md"/>
</Box>,
);
await expect(page).toHaveScreenshot({ clip: { x: 0, y: 0, width: 250, height: 250 } });
Expand All @@ -112,7 +105,7 @@ test.describe('image', () => {
image_url: null,
token: tokenInfoMock.tokenInfoERC721a,
});
const component = await render(<NftMedia data={ data } addressHash={ TOKEN_HASH } w="250px" size="md"/>);
const component = await render(<NftMedia data={ data } w="250px" size="md"/>);
await component.getByRole('img', { name: 'Token instance image' }).hover();
await expect(page).toHaveScreenshot({ clip: { x: 0, y: 0, width: 250, height: 250 } });
});
Expand All @@ -124,7 +117,7 @@ test.describe('image', () => {
image_url: null,
token: tokenInfoMock.tokenInfoERC721a,
});
const component = await render(<NftMedia data={ data } addressHash={ TOKEN_HASH } withFullscreen w="250px"/>);
const component = await render(<NftMedia data={ data } withFullscreen w="250px"/>);
await component.getByRole('img', { name: 'Token instance image' }).click();
await expect(page).toHaveScreenshot();
});
Expand All @@ -134,25 +127,21 @@ test.describe('page', () => {
test.use({ viewport: { width: 250, height: 250 } });

const MEDIA_URL = 'https://localhost:3000/page.html';
const MEDIA_TYPE_API_URL = `/node-api/tokens/${ TOKEN_HASH }/instances/${ TOKEN_ID }/media-type?field=animation_url`;

test.beforeEach(async({ page, mockAssetResponse }) => {
test.beforeEach(async({ mockAssetResponse }) => {
await mockAssetResponse(MEDIA_URL, './playwright/mocks/page.html');
await page.route(MEDIA_TYPE_API_URL, (route) => route.fulfill({
status: 200,
json: { type: 'html' },
}));
});

test('preview +@dark-mode', async({ render }) => {
const data = toTokenInstanceModel({
id: TOKEN_ID,
animation_url: MEDIA_URL,
animation_media_type: 'html',
image_url: null,
token: tokenInfoMock.tokenInfoERC721a,
});

const component = await render(<NftMedia data={ data } addressHash={ TOKEN_HASH }/>);
const component = await render(<NftMedia data={ data }/>);
await expect(component).toHaveScreenshot();
});
});
7 changes: 2 additions & 5 deletions src/slices/token/components/nft-media/NftMedia.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@ import { mediaStyleProps } from './utils';

interface Props extends Omit<HTMLChakraProps<'div'>, 'size'> {
data: schemas['TokenInstance'] | schemas['TokenInstanceInTokenInstancesList'];
addressHash: string;
size?: Size;
allowedTypes?: Array<MediaType>;
isLoading?: boolean;
Expand All @@ -30,15 +29,15 @@ interface Props extends Omit<HTMLChakraProps<'div'>, 'size'> {
fallback?: React.ReactNode;
}

const NftMedia = ({ data, addressHash, size = 'original', allowedTypes, isLoading, withFullscreen, autoplayVideo, fallback, ...rest }: Props) => {
const NftMedia = ({ data, size = 'original', allowedTypes, isLoading, withFullscreen, autoplayVideo, fallback, ...rest }: Props) => {
const [ isMediaLoading, setIsMediaLoading ] = React.useState(true);
const [ isMediaLoadingError, setIsMediaLoadingError ] = React.useState(false);
const [ mediaInfoIndex, setMediaInfoIndex ] = React.useState(0);
const [ mediaInfoField, setMediaInfoField ] = React.useState<'animation_url' | 'image_url'>('animation_url');

const { ref, inView } = useInView({ triggerOnce: true });

const mediaInfoQuery = useNftMediaInfo({ data, addressHash, size, allowedTypes, field: mediaInfoField, isEnabled: !isLoading && inView });
const mediaInfoQuery = useNftMediaInfo({ data, size, allowedTypes, field: mediaInfoField, isEnabled: !isLoading && inView });

React.useEffect(() => {
if (!mediaInfoQuery.isPending && !mediaInfoQuery.data) {
Expand Down Expand Up @@ -100,7 +99,6 @@ const NftMedia = ({ data, addressHash, size = 'original', allowedTypes, isLoadin
transport={ mediaInfo.transport }
autoPlay={ autoplayVideo }
instance={ data }
addressHash={ addressHash }
/>
);
}
Expand Down Expand Up @@ -142,7 +140,6 @@ const NftMedia = ({ data, addressHash, size = 'original', allowedTypes, isLoadin
open={ open }
onOpenChange={ onOpenChange }
data={ data }
addressHash={ addressHash }
allowedTypes={ allowedTypes }
field={ mediaInfoField }
/>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,15 +18,14 @@ interface Props {
open: boolean;
onOpenChange: ({ open }: { open: boolean }) => void;
data: schemas['TokenInstance'] | schemas['TokenInstanceInTokenInstancesList'];
addressHash: string;
allowedTypes?: Array<MediaType>;
field: 'animation_url' | 'image_url';
}

const NftMediaFullscreenModal = ({ open, onOpenChange, data, addressHash, allowedTypes, field }: Props) => {
const NftMediaFullscreenModal = ({ open, onOpenChange, data, allowedTypes, field }: Props) => {
const [ mediaInfoIndex, setMediaInfoIndex ] = React.useState(0);

const mediaInfoQuery = useNftMediaInfo({ data, addressHash, size: 'original', allowedTypes, field, isEnabled: true });
const mediaInfoQuery = useNftMediaInfo({ data, size: 'original', allowedTypes, field, isEnabled: true });

const handleMediaLoadError = React.useCallback(() => {
if (mediaInfoQuery.data) {
Expand All @@ -53,7 +52,6 @@ const NftMediaFullscreenModal = ({ open, onOpenChange, data, addressHash, allowe
objectFit="contain"
autoPlay
instance={ data }
addressHash={ addressHash }
/>
);
case 'html':
Expand Down
4 changes: 1 addition & 3 deletions src/slices/token/components/nft-media/NftVideo.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -12,19 +12,17 @@ import { videoPlayProps } from './utils';

interface Props extends MediaElementProps<'video'> {
instance: schemas['TokenInstance'] | schemas['TokenInstanceInTokenInstancesList'];
addressHash: string;
autoPlay?: boolean;
size?: Size;
}

const POSTER_ALLOWED_TYPES = [ 'image' as const ];

const NftVideo = ({ src, transport, instance, addressHash, autoPlay = true, onLoad, size = 'original', onError, onClick, ...rest }: Props) => {
const NftVideo = ({ src, transport, instance, autoPlay = true, onLoad, size = 'original', onError, onClick, ...rest }: Props) => {
const ref = React.useRef<HTMLVideoElement>(null);

const mediaInfoQuery = useNftMediaInfo({
data: instance,
addressHash,
size,
field: 'image_url',
isEnabled: true,
Expand Down
Loading
Loading