forked from vergnet/application-amicale
Auto focus search bar when clicking the search icon
This commit is contained in:
parent
d614e8a1ed
commit
fd75675681
3 changed files with 53 additions and 10 deletions
|
@ -13,6 +13,7 @@ type Props = {
|
||||||
hasBackButton: boolean,
|
hasBackButton: boolean,
|
||||||
hasSearchField: boolean,
|
hasSearchField: boolean,
|
||||||
searchCallback: Function,
|
searchCallback: Function,
|
||||||
|
shouldFocusSearchBar: boolean,
|
||||||
leftButton: React.Node,
|
leftButton: React.Node,
|
||||||
rightButton: React.Node,
|
rightButton: React.Node,
|
||||||
title: string,
|
title: string,
|
||||||
|
@ -34,12 +35,20 @@ export default class CustomHeader extends React.Component<Props> {
|
||||||
hasBackButton: false,
|
hasBackButton: false,
|
||||||
hasSearchField: false,
|
hasSearchField: false,
|
||||||
searchCallback: () => null,
|
searchCallback: () => null,
|
||||||
|
shouldFocusSearchBar: false,
|
||||||
title: '',
|
title: '',
|
||||||
leftButton: <View/>,
|
leftButton: <View/>,
|
||||||
rightButton: <View/>,
|
rightButton: <View/>,
|
||||||
hasTabs: false,
|
hasTabs: false,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
searchBarRef: Input;
|
||||||
|
|
||||||
|
componentDidMount() {
|
||||||
|
if (this.searchBarRef !== undefined && this.props.shouldFocusSearchBar)
|
||||||
|
this.searchBarRef.focus();
|
||||||
|
}
|
||||||
|
|
||||||
getSearchBar() {
|
getSearchBar() {
|
||||||
return (
|
return (
|
||||||
<Item
|
<Item
|
||||||
|
@ -51,6 +60,7 @@ export default class CustomHeader extends React.Component<Props> {
|
||||||
icon={'magnify'}
|
icon={'magnify'}
|
||||||
color={ThemeManager.getCurrentThemeVariables().toolbarBtnColor}/>
|
color={ThemeManager.getCurrentThemeVariables().toolbarBtnColor}/>
|
||||||
<Input
|
<Input
|
||||||
|
ref={(ref) => this.searchBarRef = ref}
|
||||||
placeholder={i18n.t('proximoScreen.search')}
|
placeholder={i18n.t('proximoScreen.search')}
|
||||||
placeholderTextColor={ThemeManager.getCurrentThemeVariables().toolbarPlaceholderColor}
|
placeholderTextColor={ThemeManager.getCurrentThemeVariables().toolbarPlaceholderColor}
|
||||||
onChangeText={(text) => this.props.searchCallback(text)}/>
|
onChangeText={(text) => this.props.searchCallback(text)}/>
|
||||||
|
|
|
@ -61,15 +61,18 @@ export default class ProximoListScreen extends React.Component<Props, State> {
|
||||||
|
|
||||||
modalRef: { current: null | Modalize };
|
modalRef: { current: null | Modalize };
|
||||||
originalData: Array<Object>;
|
originalData: Array<Object>;
|
||||||
|
navData = this.props.navigation.getParam('data', []);
|
||||||
|
shouldFocusSearchBar = this.navData['shouldFocusSearchBar'];
|
||||||
|
|
||||||
constructor(props: any) {
|
constructor(props: any) {
|
||||||
super(props);
|
super(props);
|
||||||
this.modalRef = React.createRef();
|
this.modalRef = React.createRef();
|
||||||
this.originalData = this.props.navigation.getParam('data', []);
|
this.originalData = this.navData['data'];
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
state = {
|
state = {
|
||||||
currentlyDisplayedData: this.props.navigation.getParam('data', []).sort(sortPrice),
|
currentlyDisplayedData: this.navData['data'].sort(sortPrice),
|
||||||
currentSortMode: sortMode.price,
|
currentSortMode: sortMode.price,
|
||||||
isSortReversed: false,
|
isSortReversed: false,
|
||||||
sortPriceIcon: '',
|
sortPriceIcon: '',
|
||||||
|
@ -310,6 +313,7 @@ export default class ProximoListScreen extends React.Component<Props, State> {
|
||||||
navigation={nav}
|
navigation={nav}
|
||||||
hasSearchField={true}
|
hasSearchField={true}
|
||||||
searchCallback={(text) => this.search(text)}
|
searchCallback={(text) => this.search(text)}
|
||||||
|
shouldFocusSearchBar={this.shouldFocusSearchBar}
|
||||||
rightButton={this.getSortMenu()}/>
|
rightButton={this.getSortMenu()}/>
|
||||||
|
|
||||||
<Content>
|
<Content>
|
||||||
|
|
|
@ -101,25 +101,54 @@ export default class ProximoMainScreen extends FetchedDataSectionList {
|
||||||
}
|
}
|
||||||
|
|
||||||
getRightButton() {
|
getRightButton() {
|
||||||
|
let searchScreenData = {
|
||||||
|
shouldFocusSearchBar: true,
|
||||||
|
data: {
|
||||||
|
type: {
|
||||||
|
id: "0",
|
||||||
|
name: i18n.t('proximoScreen.all'),
|
||||||
|
icon: 'star'
|
||||||
|
},
|
||||||
|
data: this.getAvailableArticles(this.state.fetchedData.articles, undefined)
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Touchable
|
<View
|
||||||
style={{padding: 6}}
|
style={{
|
||||||
onPress={() => this.props.navigation.navigate('ProximoAboutScreen')}>
|
flexDirection: 'row'
|
||||||
<CustomMaterialIcon
|
}}>
|
||||||
color={Platform.OS === 'ios' ? ThemeManager.getCurrentThemeVariables().brandPrimary : "#fff"}
|
<Touchable
|
||||||
icon="information"/>
|
style={{padding: 6}}
|
||||||
</Touchable>
|
onPress={() => this.props.navigation.navigate('ProximoListScreen', searchScreenData)}>
|
||||||
|
<CustomMaterialIcon
|
||||||
|
color={Platform.OS === 'ios' ? ThemeManager.getCurrentThemeVariables().brandPrimary : "#fff"}
|
||||||
|
icon="magnify"/>
|
||||||
|
</Touchable>
|
||||||
|
<Touchable
|
||||||
|
style={{padding: 6}}
|
||||||
|
onPress={() => this.props.navigation.navigate('ProximoAboutScreen')}>
|
||||||
|
<CustomMaterialIcon
|
||||||
|
color={Platform.OS === 'ios' ? ThemeManager.getCurrentThemeVariables().brandPrimary : "#fff"}
|
||||||
|
icon="information"/>
|
||||||
|
</Touchable>
|
||||||
|
</View>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
getRenderItem(item: Object, section: Object, data: Object) {
|
getRenderItem(item: Object, section: Object, data: Object) {
|
||||||
|
let dataToSend = {
|
||||||
|
shouldFocusSearchBar: false,
|
||||||
|
data: item,
|
||||||
|
};
|
||||||
if (item.data.length > 0) {
|
if (item.data.length > 0) {
|
||||||
return (
|
return (
|
||||||
<ListItem
|
<ListItem
|
||||||
button
|
button
|
||||||
thumbnail
|
thumbnail
|
||||||
onPress={() => {
|
onPress={() => {
|
||||||
this.props.navigation.navigate('ProximoListScreen', item);
|
this.props.navigation.navigate('ProximoListScreen', dataToSend);
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<Left>
|
<Left>
|
||||||
|
|
Loading…
Reference in a new issue