-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.js
43 lines (36 loc) · 890 Bytes
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
// @flow
import React, { Suspense, type Node } from 'react';
import { ComponentsMap, type IconNames } from './__generated__/__meta';
type Props = {
+'name': IconNames,
+'data-testid'?: string,
};
function IconFallback() {
return (
<span
style={{
// this creates the same empty space as any loaded icon so the UI is not glitching
width: '1em',
height: '1em',
display: 'inline-block',
}}
/>
);
}
export default function Icon(props: Props): Node {
const { name, ...restOfProps } = props;
const IconComponent = ComponentsMap[name];
return (
<span
style={{
// aligns icon in the middle of the text
verticalAlign: 'middle',
display: 'inline-block',
}}
>
<Suspense fallback={<IconFallback />}>
<IconComponent {...restOfProps} />
</Suspense>
</span>
);
}