From ea5b8d4d9630276a12e89ffbf626a5da89b028ec Mon Sep 17 00:00:00 2001 From: Reinaldo Neto Date: Wed, 24 Nov 2021 16:26:02 -0300 Subject: [PATCH 1/3] Chore: Migrate SelectListView to Typescript --- .../{SelectListView.js => SelectListView.tsx} | 77 +++++++++++++++---- 1 file changed, 61 insertions(+), 16 deletions(-) rename app/views/{SelectListView.js => SelectListView.tsx} (76%) diff --git a/app/views/SelectListView.js b/app/views/SelectListView.tsx similarity index 76% rename from app/views/SelectListView.js rename to app/views/SelectListView.tsx index 9d2f533da05..bb96380b438 100644 --- a/app/views/SelectListView.js +++ b/app/views/SelectListView.tsx @@ -1,8 +1,9 @@ import React from 'react'; -import PropTypes from 'prop-types'; +import { StackNavigationOptions, StackNavigationProp } from '@react-navigation/stack'; import { FlatList, StyleSheet, Text, View } from 'react-native'; import { connect } from 'react-redux'; import { RadioButton } from 'react-native-ui-lib'; +import { RouteProp } from '@react-navigation/native'; import log from '../utils/log'; import * as List from '../containers/List'; @@ -25,15 +26,58 @@ const styles = StyleSheet.create({ } }); -class SelectListView extends React.Component { - static propTypes = { - navigation: PropTypes.object, - route: PropTypes.object, - theme: PropTypes.string, - isMasterDetail: PropTypes.bool - }; +interface IData { + rid: string; + name: string; + t?: string; + teamMain?: boolean; + alert?: boolean; +} + +interface ISelectListViewState { + data: IData[]; + dataFiltered: IData[]; + isSearching: boolean; + selected: string[]; +} + +interface ISelectListViewProps { + navigation: StackNavigationProp; + route: RouteProp< + { + SelectView: { + data: IData[]; + title: string; + infoText: string; + nextAction(): void; + showAlert(): void; + isSearch: boolean; + onSearch(text: string): IData[]; + isRadio: boolean; + }; + }, + 'SelectView' + >; + theme: string; + isMasterDetail: boolean; +} + +class SelectListView extends React.Component { + private title: string; + + private infoText: string; + + private nextAction: (selected: string[]) => void; + + private showAlert: () => void; + + private isSearch: boolean; + + private onSearch: (text: string) => IData[]; + + private isRadio: boolean; - constructor(props) { + constructor(props: ISelectListViewProps) { super(props); const data = props.route?.params?.data; this.title = props.route?.params?.title; @@ -56,7 +100,7 @@ class SelectListView extends React.Component { const { navigation, isMasterDetail } = this.props; const { selected } = this.state; - const options = { + const options: StackNavigationOptions = { headerTitle: I18n.t(this.title) }; @@ -87,7 +131,7 @@ class SelectListView extends React.Component { return ( this.search(text)} + onChangeText={(text: string) => this.search(text)} testID='select-list-view-search' onCancelPress={() => this.setState({ isSearching: false })} /> @@ -95,7 +139,7 @@ class SelectListView extends React.Component { ); }; - search = async text => { + search = async (text: string) => { try { this.setState({ isSearching: true }); const result = await this.onSearch(text); @@ -105,12 +149,12 @@ class SelectListView extends React.Component { } }; - isChecked = rid => { + isChecked = (rid: string) => { const { selected } = this.state; return selected.includes(rid); }; - toggleItem = rid => { + toggleItem = (rid: string) => { const { selected } = this.state; animateNextTransition(); @@ -126,7 +170,7 @@ class SelectListView extends React.Component { } }; - renderItem = ({ item }) => { + renderItem = ({ item }: { item: IData }) => { const { theme } = this.props; const { selected } = this.state; @@ -169,6 +213,7 @@ class SelectListView extends React.Component { render() { const { data, isSearching, dataFiltered } = this.state; + console.log('🚀 ~ file: SelectListView.tsx ~ line 201 ~ SelectListView ~ render ~ this.state', this.state); const { theme } = this.props; return ( @@ -187,7 +232,7 @@ class SelectListView extends React.Component { } } -const mapStateToProps = state => ({ +const mapStateToProps = (state: any) => ({ isMasterDetail: state.app.isMasterDetail }); From f525582dc17be3106485be377daec06296149776 Mon Sep 17 00:00:00 2001 From: Reinaldo Neto Date: Wed, 24 Nov 2021 16:33:41 -0300 Subject: [PATCH 2/3] minor tweak --- app/views/SelectListView.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/app/views/SelectListView.tsx b/app/views/SelectListView.tsx index bb96380b438..88ef4529e90 100644 --- a/app/views/SelectListView.tsx +++ b/app/views/SelectListView.tsx @@ -213,7 +213,6 @@ class SelectListView extends React.Component From 63d6b68f39a372ffa5205a8a93c325cfa3479075 Mon Sep 17 00:00:00 2001 From: Reinaldo Neto Date: Wed, 24 Nov 2021 16:42:32 -0300 Subject: [PATCH 3/3] minor tweak --- app/views/SelectListView.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/SelectListView.tsx b/app/views/SelectListView.tsx index 88ef4529e90..e6d67266ba8 100644 --- a/app/views/SelectListView.tsx +++ b/app/views/SelectListView.tsx @@ -49,7 +49,7 @@ interface ISelectListViewProps { data: IData[]; title: string; infoText: string; - nextAction(): void; + nextAction(selected: string[]): void; showAlert(): void; isSearch: boolean; onSearch(text: string): IData[];