Skip to content

Commit 9bf6f4a

Browse files
authored
Merge pull request #2232 from lindapaiste/feature/asset
Feature: Preview uploaded files in the editor
2 parents 8951ddf + ce41961 commit 9bf6f4a

File tree

2 files changed

+52
-0
lines changed

2 files changed

+52
-0
lines changed
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
import mime from 'mime';
2+
import PropTypes from 'prop-types';
3+
import React from 'react';
4+
import styled from 'styled-components';
5+
6+
const Audio = styled.audio`
7+
width: 90%;
8+
margin: 30px 5%;
9+
`;
10+
11+
const Image = styled.img`
12+
max-width: 100%;
13+
height: auto;
14+
`;
15+
16+
const Video = styled.video`
17+
max-width: 100%;
18+
height: auto;
19+
`;
20+
21+
function AssetPreview({ url, name }) {
22+
const contentType = mime.getType(url);
23+
const type = contentType?.split('/')[0];
24+
25+
switch (type) {
26+
case 'image':
27+
return <Image src={url} alt={`Preview of file ${name}`} />;
28+
case 'audio':
29+
// eslint-disable-next-line jsx-a11y/media-has-caption
30+
return <Audio src={url} controls preload="metadata" />;
31+
case 'video':
32+
return (
33+
// eslint-disable-next-line jsx-a11y/media-has-caption
34+
<Video controls preload="metadata">
35+
<source src={url} type={contentType} />
36+
</Video>
37+
);
38+
default:
39+
return null;
40+
}
41+
}
42+
43+
AssetPreview.propTypes = {
44+
url: PropTypes.string.isRequired,
45+
name: PropTypes.string.isRequired
46+
};
47+
48+
export default AssetPreview;

client/modules/IDE/components/Editor.jsx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ import '../../../utils/htmlmixed';
4444
import '../../../utils/p5-javascript';
4545
import Timer from '../components/Timer';
4646
import EditorAccessibility from '../components/EditorAccessibility';
47+
import AssetPreview from './AssetPreview';
4748
import { metaKey } from '../../../utils/metaKey';
4849
import './show-hint';
4950
import * as hinter from '../../../utils/p5-hinter';
@@ -532,6 +533,9 @@ class Editor extends React.Component {
532533
}}
533534
className={editorHolderClass}
534535
/>
536+
{this.props.file.url ? (
537+
<AssetPreview url={this.props.file.url} name={this.props.file.name} />
538+
) : null}
535539
<EditorAccessibility lintMessages={this.props.lintMessages} />
536540
</section>
537541
);

0 commit comments

Comments
 (0)