Adding stack navigation for kanji details

master
Arthur VALIN 2 years ago
parent 0fa9df4c14
commit 6d8561da75

File diff suppressed because it is too large Load Diff

Binary file not shown.

@ -1,14 +1,7 @@
{ {
"ExpandedNodes": [ "ExpandedNodes": [
"", ""
"\\components",
"\\model",
"\\navigation",
"\\pages",
"\\redux",
"\\redux\\actions",
"\\redux\\reducers"
], ],
"SelectedNode": "\\navigation\\TabBar.tsx", "SelectedNode": "\\C:\\Users\\Siph9\\Source\\Repos\\LEARNIHON",
"PreviewInSolutionExplorer": false "PreviewInSolutionExplorer": false
} }

Binary file not shown.

@ -1,7 +1,7 @@
{ {
"expo": { "expo": {
"name": "expo-init", "name": "Learnihon",
"slug": "expo-init", "slug": "Learnihon",
"version": "1.0.0", "version": "1.0.0",
"orientation": "portrait", "orientation": "portrait",
"icon": "./src/assets/icon.png", "icon": "./src/assets/icon.png",

@ -2,7 +2,6 @@ import { Dimensions, Animated } from 'react-native';
export const animation = new Animated.Value(0); export const animation = new Animated.Value(0);
export const startAnimation = () => { export const startAnimation = () => {
Animated.timing(animation, { Animated.timing(animation, {
toValue: 1, toValue: 1,

@ -1,3 +1,4 @@
import { useNavigation } from '@react-navigation/native';
import React from 'react'; import React from 'react';
import { Text, View, StyleSheet, TouchableOpacity, useColorScheme } from 'react-native'; import { Text, View, StyleSheet, TouchableOpacity, useColorScheme } from 'react-native';
import { Kanji } from '../model/kanji'; import { Kanji } from '../model/kanji';
@ -10,9 +11,10 @@ const KanjiListCell = (props: kanjiListCellProps) => {
const cellStyle = useColorScheme() == 'light' ? cellStyle_light : cellStyle_dark; const cellStyle = useColorScheme() == 'light' ? cellStyle_light : cellStyle_dark;
const navigator = useNavigation();
return ( return (
<TouchableOpacity onPress={() => console.log(props.kanji)} style={cellStyle.item}> <TouchableOpacity onPress={() => navigator.push("Detail", {"kanji": props.kanji})} style={cellStyle.item}>
<Text style={cellStyle.kanji}>{props.kanji.character}</Text> <Text style={cellStyle.kanji}>{props.kanji.character}</Text>
<Text style={cellStyle.text}>{props.kanji.meaning}</Text> <Text style={cellStyle.text}>{props.kanji.meaning}</Text>
</TouchableOpacity> </TouchableOpacity>

@ -0,0 +1,25 @@
import { NavigationContainer } from "@react-navigation/native";
import { createStackNavigator, StackNavigationOptions } from "@react-navigation/stack";
import React from "react";
import Detail from "../pages/Detail";
import List from "../pages/List";
export default function KanjiStackNavigator() {
const Stack = createStackNavigator();
return (
<Stack.Navigator initialRouteName="List"
screenOptions={stackOptions}
>
<Stack.Screen name="List" component={List} />
<Stack.Screen name="Detail" component={Detail}/>
</Stack.Navigator>
)
}
const stackOptions: StackNavigationOptions = {
headerShown: false,
presentation: "modal"
};

@ -9,8 +9,8 @@ import { Edit2 as PlaygroundIcon } from "react-native-feather";
import { BookOpen as LearnIcon } from "react-native-feather"; import { BookOpen as LearnIcon } from "react-native-feather";
import Learn from '../pages/Learn'; import Learn from '../pages/Learn';
import List from '../pages/List';
import Playground from '../pages/Playground'; import Playground from '../pages/Playground';
import KanjiStackNavigator from './Stack';
@ -81,6 +81,7 @@ const TabBar = () => {
<Tab.Navigator <Tab.Navigator
screenOptions={tabOptions} screenOptions={tabOptions}
initialRouteName="Learn" initialRouteName="Learn"
> >
<Tab.Screen <Tab.Screen
options={{ options={{
@ -89,7 +90,7 @@ const TabBar = () => {
) )
}} }}
name="List" name="List"
component={List} component={KanjiStackNavigator}
/> />
<Tab.Screen <Tab.Screen
options={{ options={{

32983
package-lock.json generated

File diff suppressed because it is too large Load Diff

@ -1,5 +1,5 @@
{ {
"name": "expo-init", "name": "Learnihon",
"version": "1.0.0", "version": "1.0.0",
"main": "node_modules/expo/AppEntry.js", "main": "node_modules/expo/AppEntry.js",
"scripts": { "scripts": {
@ -13,10 +13,12 @@
"@react-native-community/slider": "4.2.4", "@react-native-community/slider": "4.2.4",
"@react-navigation/bottom-tabs": "^6.5.4", "@react-navigation/bottom-tabs": "^6.5.4",
"@react-navigation/native": "^6.1.3", "@react-navigation/native": "^6.1.3",
"@react-navigation/stack": "^6.3.12",
"@reduxjs/toolkit": "^1.9.2", "@reduxjs/toolkit": "^1.9.2",
"@shopify/react-native-skia": "0.1.157", "@shopify/react-native-skia": "0.1.157",
"expo": "~47.0.12", "expo": "~47.0.12",
"expo-2d-context": "^0.0.3", "expo-2d-context": "^0.0.3",
"expo-cli": "^6.3.0",
"expo-status-bar": "~1.4.2", "expo-status-bar": "~1.4.2",
"react": "18.1.0", "react": "18.1.0",
"react-dom": "18.1.0", "react-dom": "18.1.0",

@ -0,0 +1,39 @@
import React from 'react';
import { Text, View, StyleSheet, useColorScheme } from 'react-native';
import KanjiListCell from '../components/KanjiListCell';
import { Kanji } from '../model/kanji';
const Detail = ({route}) => {
const kanji = route.params.kanji;
const detailStyle = useColorScheme() == 'light' ? detailStyle_light : detailStyle_dark;
return (
<View style={detailStyle.container}>
<KanjiListCell kanji={kanji}/>
</View>
);
};
const detailStyle_light = StyleSheet.create({
container: {
flex: 1,
justifyContent: 'center',
alignItems: 'center',
backgroundColor: "#e4e4e4"
}
})
const detailStyle_dark = StyleSheet.create({
container: {
flex: 1,
justifyContent: 'center',
alignItems: 'center',
backgroundColor: '#3c3c3c',
},
});
export default Detail;

@ -1,6 +1,7 @@
import React from 'react'; import React from 'react';
import { View, StyleSheet, useColorScheme } from 'react-native'; import { View, StyleSheet, useColorScheme } from 'react-native';
import KanjiList from '../components/KanjiList'; import KanjiList from '../components/KanjiList';
import { Kanji } from '../model/kanji';
const List = () => { const List = () => {
@ -20,7 +21,7 @@ const listStyle_light = StyleSheet.create({
flex: 1, flex: 1,
justifyContent: 'center', justifyContent: 'center',
alignItems: 'center', alignItems: 'center',
backgroundColor: "#f5f5f5" backgroundColor: "#f5f5f5",
} }
}) })

File diff suppressed because it is too large Load Diff
Loading…
Cancel
Save