From 9706fc0a51afe9bd614af7e46751c27b0be0762c Mon Sep 17 00:00:00 2001 From: Thomas Schleicher Date: Sun, 24 Dec 2023 09:59:19 +0100 Subject: [PATCH] implemented navigation for budget screen --- app/(tabs)/budget/index.tsx | 30 ++++++++++--- app/(tabs)/home/index.tsx | 2 +- components/budget/budgetHeader.tsx | 72 ++++++++++++++++++++++++------ 3 files changed, 85 insertions(+), 19 deletions(-) diff --git a/app/(tabs)/budget/index.tsx b/app/(tabs)/budget/index.tsx index 8c53d73..c28f446 100644 --- a/app/(tabs)/budget/index.tsx +++ b/app/(tabs)/budget/index.tsx @@ -1,21 +1,41 @@ +import AsyncStorage from '@react-native-async-storage/async-storage'; +import { useEffect, useState } from 'react'; import { SafeAreaView, StyleSheet, View } from 'react-native'; import { FlatList } from 'react-native-gesture-handler'; -import { BudgetHeader } from '../../../components'; +import { BudgetHeader, LoadingSymbol } from '../../../components'; import CategoryItem from '../../../components/budget/categoryItem'; import useFetch from '../../../hooks/useFetch'; import { useThemeColor } from '../../../hooks/useThemeColor'; export default function Page() { - const containerColor = useThemeColor("containerColor"); - const textColor = useThemeColor("primaryText"); const {data, isLoading, reFetch} = useFetch({sql: "SELECT guid as category_guid, name as category_name, color as category_color FROM category", args: []}); + const [selectedPage, setSelectedPage] = useState("expenses"); + + useEffect(() => { + const loadSelectedPage = async () => { + try { + // const storedPage = + } catch(error) { + + } finally { + + } + } + }, []); + + AsyncStorage.setItem + + const handlePageSelection = (page: string) => { + setSelectedPage(page); + }; + return ( - - + + {isLoading && } } - {isLoading && } + {isLoading && } { - const primaryTextColor = useThemeColor("primaryText"); - const secondaryTextColor = useThemeColor("secondaryText"); +type BudgetHeaderProperties = { + selectedPage: string, + handlePageSelection: (page: string) => void, +} +type PageSelectorButtonProperties = { + isSelected: boolean, + onPress: () => void, + label: string, +} +const BudgetHeader = (properties: BudgetHeaderProperties) => { + const backgroundColor = useThemeColor("backgroundColor"); return (<> - Expense View - Savings View + { + properties.handlePageSelection("expenses") + }} + /> + { + properties.handlePageSelection("savings"); + }} + /> ); } +const PageSelectorButton = (properties: PageSelectorButtonProperties) => { + const primaryTextColor = useThemeColor("primaryText"); + const secondaryTextColor = useThemeColor("secondaryText"); + const elementSelectedColor = useThemeColor("elementSelectedColor"); + const elementDefaultColor = useThemeColor("elementDefaultColor"); + const accentColor = useThemeColor("accentColor"); + + return ( + + + {properties.label} + + + + ); +} + export default BudgetHeader; const styles = StyleSheet.create({ - selectedHeaderTextStyle: { - fontSize: 40, - fontWeight: "bold", + headerContainerStyle: { + width: "50%", + borderRadius: 10, + marginHorizontal: 30, }, - defaultHeaderTextStyle: { - fontSize: 20, + headerTextStyle: { + fontSize: 30, + textAlign: "center", + textAlignVertical: "center", }, containerStyle: { - backgroundColor: "blue", flexDirection: "row", - justifyContent: "space-between", + justifyContent: "space-evenly", + marginHorizontal: 20, + marginBottom: 20, + marginTop: 10, }, }); \ No newline at end of file