1
- import React from 'react' ;
1
+ import React , { ReactElement } from 'react' ;
2
2
import { I18nManager , Platform , StyleSheet , ViewProps } from 'react-native' ;
3
3
import {
4
4
Button ,
5
+ ButtonElement ,
5
6
CheckBox ,
7
+ IndexPath ,
6
8
Layout ,
7
9
OverflowMenu ,
8
- OverflowMenuItemType ,
10
+ MenuItem ,
9
11
} from '@ui-kitten/components' ;
10
12
import { ColorPaletteIcon , SettingsIcon , TrashIcon } from './icons' ;
11
13
import { ComponentShowcaseSetting } from '../model/showcase.model' ;
@@ -21,31 +23,38 @@ export interface ShowcaseSettingsProps extends ViewProps {
21
23
}
22
24
23
25
export const ShowcaseSettings = ( props : ShowcaseSettingsProps ) : React . ReactElement => {
26
+ const [ themesMenuVisible , setThemesMenuVisible ] = React . useState < boolean > (
27
+ false ,
28
+ ) ;
29
+ const [ settingsMenuVisible , setSettingsMenuVisible ] = React . useState < boolean > (
30
+ false ,
31
+ ) ;
24
32
25
- const [ themesMenuVisible , setThemesMenuVisible ] = React . useState < boolean > ( false ) ;
26
- const [ settingsMenuVisible , setSettingsMenuVisible ] = React . useState < boolean > ( false ) ;
27
-
28
- const createSettingMenuItem = ( setting : ComponentShowcaseSetting ) : OverflowMenuItemType => {
29
- return {
30
- title : setting . description || `${ setting . propertyName } : ${ setting . value } ` ,
31
- } ;
32
- } ;
33
+ const createSettingMenuItem = ( setting : ComponentShowcaseSetting , index : number ) : React . ReactElement => (
34
+ < MenuItem
35
+ key = { index }
36
+ title = { setting . description || `${ setting . propertyName } : ${ setting . value } ` }
37
+ />
38
+ ) ;
33
39
34
- const createThemeMenuItem = ( title : string ) : OverflowMenuItemType => {
35
- return { title } ;
36
- } ;
40
+ const createThemeMenuItem = ( title : string , index : number ) : ReactElement => (
41
+ < MenuItem
42
+ key = { index }
43
+ title = { title }
44
+ />
45
+ ) ;
37
46
38
- const onThemeSelect = ( index : number ) : void => {
39
- props . onThemeSelect ( props . themes [ index ] ) ;
47
+ const onThemeSelect = ( index : IndexPath ) : void => {
48
+ props . onThemeSelect ( props . themes [ index . row ] ) ;
40
49
setThemesMenuVisible ( false ) ;
41
50
} ;
42
51
43
52
const onResetButtonPress = ( ) : void => {
44
53
props . onReset ( ) ;
45
54
} ;
46
55
47
- const onSettingSelect = ( index : number ) : void => {
48
- const { [ index ] : setting } = props . settings ;
56
+ const onSettingSelect = ( index : IndexPath ) : void => {
57
+ const { [ index . row ] : setting } = props . settings ;
49
58
50
59
props . onSettingSelect ( {
51
60
[ setting . propertyName ] : setting . value ,
@@ -54,11 +63,11 @@ export const ShowcaseSettings = (props: ShowcaseSettingsProps): React.ReactEleme
54
63
setSettingsMenuVisible ( false ) ;
55
64
} ;
56
65
57
- const createThemesMenuItems = ( ) : OverflowMenuItemType [ ] => {
66
+ const createThemesMenuItems = ( ) : React . ReactElement [ ] => {
58
67
return props . themes && props . themes . map ( createThemeMenuItem ) ;
59
68
} ;
60
69
61
- const createSettingsMenuItems = ( ) : OverflowMenuItemType [ ] => {
70
+ const createSettingsMenuItems = ( ) : React . ReactElement [ ] => {
62
71
const settings = props . settings && props . settings . map ( createSettingMenuItem ) ;
63
72
return settings || [ ] ;
64
73
} ;
@@ -80,45 +89,51 @@ export const ShowcaseSettings = (props: ShowcaseSettingsProps): React.ReactEleme
80
89
const renderRTLToggle = ( ) : React . ReactElement => (
81
90
< CheckBox
82
91
checked = { I18nManager . isRTL }
83
- onChange = { toggleRtl }
84
- text = 'RTL'
85
- />
92
+ onChange = { toggleRtl } >
93
+ RTL
94
+ </ CheckBox >
95
+ ) ;
96
+
97
+ const renderButtonThemes = ( ) : ButtonElement => (
98
+ < Button
99
+ size = 'tiny'
100
+ accessoryLeft = { ColorPaletteIcon }
101
+ disabled = { ! props . themes }
102
+ onPress = { toggleThemesMenu } >
103
+ THEMES
104
+ </ Button >
105
+ ) ;
106
+
107
+ const renderButtonSettings = ( ) : ButtonElement => (
108
+ < Button
109
+ size = 'tiny'
110
+ accessoryLeft = { SettingsIcon }
111
+ disabled = { ! props . settings }
112
+ onPress = { toggleSettingsMenu } >
113
+ SETTINGS
114
+ </ Button >
86
115
) ;
87
116
88
117
return (
89
- < Layout
90
- style = { [ styles . container , props . style ] }
91
- level = '1' >
118
+ < Layout style = { styles . container } level = '1' >
92
119
< OverflowMenu
93
120
visible = { themesMenuVisible }
94
121
onSelect = { onThemeSelect }
95
- data = { createThemesMenuItems ( ) }
96
- onBackdropPress = { toggleThemesMenu } >
97
- < Button
98
- size = 'tiny'
99
- icon = { ColorPaletteIcon }
100
- disabled = { ! props . themes }
101
- onPress = { toggleThemesMenu } >
102
- THEMES
103
- </ Button >
122
+ onBackdropPress = { toggleThemesMenu }
123
+ anchor = { renderButtonThemes } >
124
+ { createThemesMenuItems ( ) }
104
125
</ OverflowMenu >
105
126
< OverflowMenu
106
127
visible = { settingsMenuVisible }
107
128
onSelect = { onSettingSelect }
108
- data = { createSettingsMenuItems ( ) }
109
- onBackdropPress = { toggleSettingsMenu } >
110
- < Button
111
- size = 'tiny'
112
- icon = { SettingsIcon }
113
- disabled = { ! props . settings }
114
- onPress = { toggleSettingsMenu } >
115
- SETTINGS
116
- </ Button >
129
+ onBackdropPress = { toggleSettingsMenu }
130
+ anchor = { renderButtonSettings } >
131
+ { createSettingsMenuItems ( ) }
117
132
</ OverflowMenu >
118
133
< Button
119
134
size = 'tiny'
120
135
status = 'danger'
121
- icon = { TrashIcon }
136
+ accessoryLeft = { TrashIcon }
122
137
disabled = { ! props . settings }
123
138
onPress = { onResetButtonPress } >
124
139
RESET
0 commit comments