Skip to content

Commit 2f1b66b

Browse files
authored
Merge pull request #2550 from mhsh312/fileTypeIcons
implement file type icons
2 parents 99d0a88 + 472b2ff commit 2f1b66b

File tree

4 files changed

+82
-2
lines changed

4 files changed

+82
-2
lines changed

client/modules/IDE/components/FileNode.jsx

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import * as FileActions from '../actions/files';
1010
import DownArrowIcon from '../../../images/down-filled-triangle.svg';
1111
import FolderRightIcon from '../../../images/triangle-arrow-right.svg';
1212
import FolderDownIcon from '../../../images/triangle-arrow-down.svg';
13-
import FileIcon from '../../../images/file.svg';
13+
import FileTypeIcon from './FileTypeIcon';
1414

1515
function parseFileName(name) {
1616
const nameArray = name.split('.');
@@ -256,6 +256,7 @@ class FileNode extends React.Component {
256256
const isRoot = this.props.name === 'root';
257257

258258
const { t } = this.props;
259+
const { extension } = parseFileName(this.props.name);
259260

260261
return (
261262
<div className={itemClass}>
@@ -267,7 +268,11 @@ class FileNode extends React.Component {
267268
<span className="file-item__spacer"></span>
268269
{isFile && (
269270
<span className="sidebar__file-item-icon">
270-
<FileIcon focusable="false" aria-hidden="true" />
271+
<FileTypeIcon
272+
fileExtension={extension}
273+
focusable="false"
274+
aria-hidden="true"
275+
/>
271276
</span>
272277
)}
273278
{isFolder && (
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
import React from 'react';
2+
import PropTypes from 'prop-types';
3+
import { IoLogoHtml5, IoLogoCss3, IoLogoJavascript } from 'react-icons/io';
4+
import { TbFileTypeXml, TbTxt, TbCsv } from 'react-icons/tb';
5+
import { VscJson } from 'react-icons/vsc';
6+
import FileIcon from '../../../images/file.svg';
7+
8+
export default function FileTypeIcon({ fileExtension }) {
9+
switch (fileExtension) {
10+
case '.html':
11+
return (
12+
<span>
13+
<IoLogoHtml5 />
14+
</span>
15+
);
16+
case '.css':
17+
return (
18+
<span>
19+
<IoLogoCss3 />
20+
</span>
21+
);
22+
case '.js':
23+
return (
24+
<span>
25+
<IoLogoJavascript />
26+
</span>
27+
);
28+
case '.json':
29+
return (
30+
<span>
31+
<VscJson />
32+
</span>
33+
);
34+
case '.xml':
35+
return (
36+
<span>
37+
<TbFileTypeXml />
38+
</span>
39+
);
40+
case '.txt':
41+
return (
42+
<span>
43+
<TbTxt />
44+
</span>
45+
);
46+
case '.csv':
47+
return (
48+
<span>
49+
<TbCsv />
50+
</span>
51+
);
52+
default:
53+
return <FileIcon focusable="false" aria-hidden="true" />;
54+
}
55+
}
56+
57+
FileTypeIcon.propTypes = {
58+
fileExtension: PropTypes.string.isRequired
59+
};

package-lock.json

Lines changed: 15 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -230,6 +230,7 @@
230230
"react-ga": "^3.3.0",
231231
"react-helmet": "^5.1.3",
232232
"react-i18next": "^11.11.3",
233+
"react-icons": "^4.11.0",
233234
"react-markdown": "^6.0.3",
234235
"react-redux": "^7.2.4",
235236
"react-refresh": "^0.14.0",

0 commit comments

Comments
 (0)