1
1
import * as React from 'react'
2
2
import { Provider , Grid , Divider , Header , Icon } from '@stardust-ui/react'
3
3
import themeWithProcessedIcons from 'src/themes/teams/withProcessedIcons'
4
+ import { TeamsProcessedSvgIconSpec } from 'src/themes/teams/components/Icon/svg/types'
5
+
6
+ import { Menu , Segment } from 'semantic-ui-react'
4
7
5
8
const cellStyles = {
6
9
margin : '10px 0' ,
7
10
}
8
11
9
12
const processedIconsNamePrefix = 'processedIcons_'
10
13
14
+ const renderStardustIconName = ( icon , isOutline = false ) => {
15
+ const maybeExportedAs = ( icon as any ) . exportedAs
16
+ return (
17
+ maybeExportedAs && (
18
+ < code style = { { color : 'red' } } >
19
+ => { maybeExportedAs } { isOutline && 'outline' }
20
+ </ code >
21
+ )
22
+ )
23
+ }
24
+
11
25
class IconViewerExample extends React . Component < any , { } > {
26
+ private readonly iconFilters = {
27
+ All : ( ) => true ,
28
+ Exported : ( icon : TeamsProcessedSvgIconSpec ) => icon . exportedAs ,
29
+ 'Not Exported' : ( icon : TeamsProcessedSvgIconSpec ) => ! icon . exportedAs ,
30
+ }
31
+
32
+ state = {
33
+ filter : 'All' ,
34
+ }
35
+
36
+ applyCurrentFilter ( icon ) {
37
+ const currentFilter = this . iconFilters [ this . state . filter ]
38
+ return currentFilter ( icon )
39
+ }
40
+
12
41
render ( ) {
13
42
return (
14
- < div style = { { margin : '20px ' } } >
43
+ < Segment styles = { { padding : '30px ' } } >
15
44
< Header
16
45
as = "h3"
17
46
content = "Teams Icons"
@@ -21,49 +50,67 @@ class IconViewerExample extends React.Component<any, {}> {
21
50
styles : { fontSize : '16px' } ,
22
51
} }
23
52
/>
24
- < Provider theme = { themeWithProcessedIcons } >
25
- < Provider . Consumer
26
- render = { theme => (
27
- < div >
28
- < div >
29
- < Divider >
30
- < Header as = "h3" content = "Regular" />
31
- </ Divider >
32
- < Grid columns = { 4 } style = { { textAlign : 'center' } } >
33
- { Object . keys ( theme . icons )
34
- . filter ( name => name . startsWith ( processedIconsNamePrefix ) )
35
- . sort ( )
36
- . map ( name => (
37
- < div key = { name } style = { cellStyles } >
38
- < Icon name = { name } />
39
- < br />
40
- < code > { name . replace ( processedIconsNamePrefix , '' ) } </ code >
41
- </ div >
42
- ) ) }
43
- </ Grid >
44
- </ div >
53
+
54
+ < div style = { { marginTop : '15px' } } >
55
+ < Menu tabular style = { { margin : '15px 0' } } >
56
+ { Object . keys ( this . iconFilters ) . map ( filterName => (
57
+ < Menu . Item
58
+ key = { filterName }
59
+ name = { filterName }
60
+ active = { this . state . filter === filterName }
61
+ onClick = { ( ) => this . setState ( { filter : filterName } ) }
62
+ />
63
+ ) ) }
64
+ </ Menu >
65
+
66
+ < Provider theme = { themeWithProcessedIcons } >
67
+ < Provider . Consumer
68
+ render = { theme => (
45
69
< div >
46
- < Divider >
47
- < Header as = "h3" content = "Outline" />
48
- </ Divider >
49
- < Grid columns = { 4 } style = { { textAlign : 'center' } } >
50
- { Object . keys ( theme . icons )
51
- . filter ( name => name . startsWith ( processedIconsNamePrefix ) )
52
- . sort ( )
53
- . map ( name => (
54
- < div key = { `${ name } -outline` } style = { cellStyles } >
55
- < Icon name = { name } variables = { { outline : true } } />
56
- < br />
57
- < code > { name . replace ( processedIconsNamePrefix , '' ) } outline</ code >
58
- </ div >
59
- ) ) }
60
- </ Grid >
70
+ < div >
71
+ < Header as = "h3" content = "Regular" textAlign = "center" />
72
+ < Grid columns = { 4 } style = { { textAlign : 'center' } } >
73
+ { Object . keys ( theme . icons )
74
+ . filter ( name => name . startsWith ( processedIconsNamePrefix ) )
75
+ . filter ( name => this . applyCurrentFilter ( theme . icons [ name ] ) )
76
+ . sort ( )
77
+ . map ( name => (
78
+ < div key = { name } style = { cellStyles } >
79
+ < Icon name = { name } />
80
+ < br />
81
+ < code > { name . replace ( processedIconsNamePrefix , '' ) } </ code >
82
+ < br />
83
+ { renderStardustIconName ( theme . icons [ name ] ) }
84
+ </ div >
85
+ ) ) }
86
+ </ Grid >
87
+ </ div >
88
+ < div >
89
+ < Divider >
90
+ < Header as = "h3" content = "Outline" textAlign = "center" />
91
+ </ Divider >
92
+ < Grid columns = { 4 } style = { { textAlign : 'center' } } >
93
+ { Object . keys ( theme . icons )
94
+ . filter ( name => name . startsWith ( processedIconsNamePrefix ) )
95
+ . filter ( name => this . applyCurrentFilter ( theme . icons [ name ] ) )
96
+ . sort ( )
97
+ . map ( name => (
98
+ < div key = { `${ name } -outline` } style = { cellStyles } >
99
+ < Icon name = { name } variables = { { outline : true } } />
100
+ < br />
101
+ < code > { name . replace ( processedIconsNamePrefix , '' ) } outline</ code >
102
+ < br />
103
+ { renderStardustIconName ( theme . icons [ name ] , /* isOutline */ true ) }
104
+ </ div >
105
+ ) ) }
106
+ </ Grid >
107
+ </ div >
61
108
</ div >
62
- </ div >
63
- ) }
64
- / >
65
- </ Provider >
66
- </ div >
109
+ ) }
110
+ />
111
+ </ Provider >
112
+ </ div >
113
+ </ Segment >
67
114
)
68
115
}
69
116
}
0 commit comments