From 940d1518273542db7cc413407a5216af2a20426b Mon Sep 17 00:00:00 2001 From: imdevan Date: Thu, 2 Oct 2025 20:57:43 -0700 Subject: [PATCH] Refactor to functional component --- examples/App.tsx | 148 +++++++++++++++++++++-------------------------- 1 file changed, 65 insertions(+), 83 deletions(-) diff --git a/examples/App.tsx b/examples/App.tsx index 434b61f37..b3098443b 100644 --- a/examples/App.tsx +++ b/examples/App.tsx @@ -1,5 +1,5 @@ -import React, { JSX } from 'react'; -import { StyleSheet, Text, View } from 'react-native'; +import React, { JSX, useState } from 'react'; +import { StyleSheet, Text, View, useColorScheme } from 'react-native'; import DropDownPicker, { ItemType } from 'react-native-dropdown-picker'; import JavascriptClassExample from './example-src-files/javascript-class-example'; import JavascriptFunctionExample from './example-src-files/javascript-function-example'; @@ -19,15 +19,19 @@ enum ExampleComponent { } const styles = StyleSheet.create({ - container: { + page: { flex: 1, - // backgroundColor: "#fff", - // alignItems: "center", - // justifyContent: "center", + justifyContent: 'center', + alignItems: 'center', + width: '100%', + height: '100%', + }, + container: { flexDirection: 'column', - margin: 3, + margin: 'auto', marginTop: 20, padding: 3, + maxWidth: 400, }, }); @@ -66,98 +70,76 @@ const EXAMPLE_COMPONENT_ITEMS: Array> = [ }, ]; -type Props = Record; - -interface State { - currentExample: ExampleComponent; - examplePickerOpen: boolean; - exampleComponents: Array>; -} - -export default class App extends React.Component { - constructor(props: Readonly) { - super(props); - this.state = { - currentExample: ExampleComponent.JavaScriptClassSingleValue, - exampleComponents: EXAMPLE_COMPONENT_ITEMS, - examplePickerOpen: false, - }; - - this.setOpen = this.setOpen.bind(this); - this.setCurrentExample = this.setCurrentExample.bind(this); - } - - private static getExample(egComponent: ExampleComponent): JSX.Element { - switch (egComponent) { - case ExampleComponent.JavaScriptClassSingleValue: - return ; - case ExampleComponent.JavaScriptClassMultiValue: - return ; - case ExampleComponent.JavaScriptFunctionSingleValue: - return ; - case ExampleComponent.JavaScriptFunctionMultiValue: - return ; - case ExampleComponent.TypeScriptClassSingleValue: - return ; - case ExampleComponent.TypeScriptClassMultiValue: - return ; - case ExampleComponent.TypeScriptFunctionSingleValue: - return ; - case ExampleComponent.TypeScriptFunctionMultiValue: - return ; - default: - throw new Error( - "couldn't match example component in getExample() in App.tsx. egComponent was: ", - egComponent, - ); - } +const getExample = (egComponent: ExampleComponent): JSX.Element => { + switch (egComponent) { + case ExampleComponent.JavaScriptClassSingleValue: + return ; + case ExampleComponent.JavaScriptClassMultiValue: + return ; + case ExampleComponent.JavaScriptFunctionSingleValue: + return ; + case ExampleComponent.JavaScriptFunctionMultiValue: + return ; + case ExampleComponent.TypeScriptClassSingleValue: + return ; + case ExampleComponent.TypeScriptClassMultiValue: + return ; + case ExampleComponent.TypeScriptFunctionSingleValue: + return ; + case ExampleComponent.TypeScriptFunctionMultiValue: + return ; + default: + throw new Error( + "couldn't match example component in getExample() in App.tsx. egComponent was: ", + egComponent, + ); } - - setOpen(examplePickerOpen: boolean): void { - this.setState({ examplePickerOpen }); - } - - setCurrentExample( - callback: (prevState: ExampleComponent | null) => ExampleComponent | null, - ): void { - this.setState((state: Readonly) => ({ - currentExample: callback(state.currentExample), - })); - } - - // todo: fix picker items being under text - - render(): JSX.Element { - const { currentExample, examplePickerOpen, exampleComponents } = this.state; - - return ( - +}; + +export default function App(): JSX.Element { + const [currentExample, setCurrentExample] = useState( + ExampleComponent.JavaScriptClassSingleValue + ); + const [examplePickerOpen, setOpen] = useState(false); + const [exampleComponents] = useState>>( + EXAMPLE_COMPONENT_ITEMS + ); + + const colorScheme = useColorScheme(); + const backgroundColor = colorScheme === 'dark' ? '#222' : '#fff'; + + return ( + + - - + + Choose example: - + - - + + Example: - {App.getExample(currentExample)} + {getExample(currentExample)} - - ); - } + + + ); }