]> git.localhorst.tv Git - alttp.git/blob - resources/js/components/common/Icon.js
tracker medallion controler
[alttp.git] / resources / js / components / common / Icon.js
1 import { library } from '@fortawesome/fontawesome-svg-core';
2 import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
3 import { fab } from '@fortawesome/free-brands-svg-icons';
4 import { fas } from '@fortawesome/free-solid-svg-icons';
5 import React from 'react';
6 import PropTypes from 'prop-types';
7 import { withTranslation } from 'react-i18next';
8
9 import i18n from '../../i18n';
10
11 library.add(fab);
12 library.add(fas);
13
14 const Icon = ({
15         alt,
16         className,
17         name,
18         size,
19         title,
20 }) =>
21         <FontAwesomeIcon
22                 icon={name}
23                 alt={alt}
24                 className={name === Icon.LOADING ? `${className} fa-spin` : className}
25                 size={size}
26                 title={title}
27         />
28 ;
29
30 Icon.propTypes = {
31         name: PropTypes.oneOfType([
32                 PropTypes.string,
33                 PropTypes.arrayOf(PropTypes.string),
34         ]).isRequired,
35         alt: PropTypes.string,
36         className: PropTypes.string,
37         size: PropTypes.string,
38         title: PropTypes.string,
39 };
40
41 Icon.defaultProps = {
42         alt: null,
43         className: '',
44         size: null,
45         title: null,
46 };
47
48 const makePreset = (presetDisplayName, presetName) => {
49         const preset = ({ alt, className, name, size, title}) => <Icon
50                 alt={alt || i18n.t(`icon.${presetDisplayName}`)}
51                 className={className}
52                 name={name || presetName}
53                 size={size}
54                 title={title !== '' ? title || alt || i18n.t(`icon.${presetDisplayName}`) : null}
55         />;
56         preset.displayName = presetDisplayName;
57         return withTranslation()(preset);
58 };
59
60 Icon.ACCEPT = makePreset('AcceptIcon', 'square-check');
61 Icon.ADD = makePreset('AddIcon', 'circle-plus');
62 Icon.ALLOWED = makePreset('AllowedIcon', 'square-check');
63 Icon.APPLY = makePreset('ApplyIcon', 'right-to-bracket');
64 Icon.APPLICATIONS = makePreset('ApplicationsIcon', 'person-running');
65 Icon.BROWSER_SOURCE = makePreset('BrowserSourceIcon', 'tv');
66 Icon.CHART = makePreset('ChartIcon', 'chart-line');
67 Icon.CROSSHAIRS = makePreset('CrosshairsIcon', 'crosshairs');
68 Icon.DELETE = makePreset('DeleteIcon', 'user-xmark');
69 Icon.DISCORD = makePreset('DiscordIcon', ['fab', 'discord']);
70 Icon.EDIT = makePreset('EditIcon', 'edit');
71 Icon.FILTER = makePreset('FilterIcon', 'filter');
72 Icon.FINISHED = makePreset('FinishedIcon', 'square-check');
73 Icon.FIRST_PLACE = makePreset('FirstPlaceIcon', 'trophy');
74 Icon.FORBIDDEN = makePreset('ForbiddenIcon', 'square-xmark');
75 Icon.FORFEIT = makePreset('ForfeitIcon', 'square-xmark');
76 Icon.HASH = makePreset('HashIcon', 'hashtag');
77 Icon.INFO = makePreset('Info', 'circle-info');
78 Icon.INVERT = makePreset('InvertIcon', 'circle-half-stroke');
79 Icon.LANGUAGE = makePreset('LanguageIcon', 'language');
80 Icon.LOCKED = makePreset('LockedIcon', 'lock');
81 Icon.LOGOUT = makePreset('LogoutIcon', 'sign-out-alt');
82 Icon.MENU = makePreset('MenuIcon', 'bars');
83 Icon.MICROPHONE = makePreset('MicrophoneIcon', 'microphone');
84 Icon.MONITOR = makePreset('MonitorIcon', 'tv');
85 Icon.MOUSE = makePreset('MouseIcon', 'arrow-pointer');
86 Icon.OPEN = makePreset('OpenIcon', 'arrow-up-right-from-square');
87 Icon.PAUSE = makePreset('PauseIcon', 'pause');
88 Icon.PENDING = makePreset('PendingIcon', 'clock');
89 Icon.PIN = makePreset('PinIcon', 'location-pin');
90 Icon.PLAY = makePreset('PlayIcon', 'play');
91 Icon.PROTOCOL = makePreset('ProtocolIcon', 'file-alt');
92 Icon.RACETIME = makePreset('RacetimeIcon', 'stopwatch');
93 Icon.REJECT = makePreset('RejectIcon', 'square-xmark');
94 Icon.REMOVE = makePreset('RemoveIcon', 'square-xmark');
95 Icon.RESULT = makePreset('ResultIcon', 'clock');
96 Icon.SECOND_PLACE = makePreset('SecondPlaceIcon', 'medal');
97 Icon.SETTINGS = makePreset('SettingsIcon', 'cog');
98 Icon.SLASH = makePreset('SlashIcon', 'slash');
99 Icon.STEP_BACKWARD = makePreset('StepBackwardIcon', 'backward-step');
100 Icon.STEP_FORWARD = makePreset('StepForwardIcon', 'forward-step');
101 Icon.STOP = makePreset('StopIcon', 'stop');
102 Icon.STREAM = makePreset('StreamIcon', ['fab', 'twitch']);
103 Icon.THIRD_PLACE = makePreset('ThirdPlaceIcon', 'award');
104 Icon.TWITCH = makePreset('TwitchIcon', ['fab', 'twitch']);
105 Icon.UNKNOWN = makePreset('UnknownIcon', 'square-question');
106 Icon.UNLOCKED = makePreset('UnlockedIcon', 'lock-open');
107 Icon.VIDEO = makePreset('VideoIcon', 'video');
108 Icon.WARNING = makePreset('WarningIcon', 'triangle-exclamation');
109 Icon.VOLUME = makePreset('VolumeIcon', 'volume-high');
110 Icon.YOUTUBE = makePreset('YoutubeIcon', ['fab', 'youtube']);
111
112 export default Icon;