Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
58 changes: 44 additions & 14 deletions App.js
Original file line number Diff line number Diff line change
@@ -1,11 +1,14 @@
import AsyncStorage from "@react-native-community/async-storage";
import { createBottomTabNavigator } from '@react-navigation/bottom-tabs';
import { NavigationContainer } from '@react-navigation/native';
import { createNativeStackNavigator } from '@react-navigation/native-stack';
import React, { useEffect, useReducer, useState } from 'react';
import SplashScreen from "react-native-splash-screen";
import TabBarIcon from './components/TabBarIcon.js';
import Colors from './constants/Colors.js';
import { STORAGE_ONBOARDING, STORAGE_STATE } from "./constants/State.js";
import HistoryScreen from './screens/HistoryScreen.js';
import OnboardingScreen from "./screens/OnboardingScreen.js";
import WeekScreen from './screens/WeekScreen.js';
import Actions from './storage/Actions.js';
import Context from './storage/Context.js';
Expand All @@ -16,23 +19,56 @@ import {
} from './utils/DateUtils.js';

const Tab = createBottomTabNavigator();
const OnboardingStack = createNativeStackNavigator();
const AppStack = createNativeStackNavigator();

const readStateFromStorage = async () => {
try {
const state = await AsyncStorage.getItem('state');
const state = await AsyncStorage.getItem(STORAGE_STATE);
return state ? JSON.parse(state) : InitialState;
} catch (e) {
console.log('Failed to fetch data from storage');
console.log(e);
}
}

const OnboardingNavigator = () => {
return (
<OnboardingStack.Navigator screenOptions={{ headerShown: false }}>
<OnboardingStack.Screen name="Instruction1" component={OnboardingScreen} initialParams={{ step: 1 }} />
<OnboardingStack.Screen name="Instruction2" component={OnboardingScreen} initialParams={{ step: 2 }} />
<OnboardingStack.Screen name="Instruction3" component={OnboardingScreen} initialParams={{ step: 3 }} />
</OnboardingStack.Navigator>
)
}

const TabNavigator = () => {
return (
<Tab.Navigator
screenOptions={({ route }) => ({
headerShown: false,
tabBarActiveTintColor: Colors.blueDark,
tabBarInactiveTintColor: Colors.grey,
tabBarIcon: ({ focused }) => <TabBarIcon focused={focused} route={route} />
})}
>
<Tab.Screen name="Purchases" component={WeekScreen} />
<Tab.Screen name="History" component={HistoryScreen} />
</Tab.Navigator>
)
}

const App = () => {
const [isOnboardingComplete, setIsOnboardingComplete] = useState(false);
const [isLoading, setIsLoading] = useState(true);
const [state, dispatch] = useReducer(Reducer, InitialState);

useEffect(() => {
async function loadState() {
// Check whether the user has completed the onboarding instructions
const onboardingComplete = await AsyncStorage.getItem(STORAGE_ONBOARDING);
setIsOnboardingComplete(onboardingComplete === 'true');

// Pull the state from storage
const state = await readStateFromStorage();
if (state !== undefined) {
Expand Down Expand Up @@ -69,7 +105,7 @@ const App = () => {

useEffect(() => {
if (state) {
AsyncStorage.setItem('state', JSON.stringify(state));
AsyncStorage.setItem(STORAGE_STATE, JSON.stringify(state));
}
}, [state])

Expand All @@ -85,18 +121,12 @@ const App = () => {
return (
<Context.Provider value={contextValues}>
<NavigationContainer>
<Tab.Navigator
initialRouteName="Week"
screenOptions={({ route }) => ({
headerShown: false,
tabBarActiveTintColor: Colors.blueDark,
tabBarInactiveTintColor: Colors.grey,
tabBarIcon: ({ focused }) => <TabBarIcon focused={focused} route={route} />
})}
>
<Tab.Screen name="Purchases" component={WeekScreen} />
<Tab.Screen name="History" component={HistoryScreen} />
</Tab.Navigator>
<AppStack.Navigator screenOptions={{ headerShown: false }}>
{!isOnboardingComplete ? (
<AppStack.Screen name="Onboarding" component={OnboardingNavigator} />
) : null}
<AppStack.Screen name="MainApp" component={TabNavigator} />
</AppStack.Navigator>
</NavigationContainer>
</Context.Provider>
);
Expand Down
Binary file added assets/instructions/instructions1-budget.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/instructions/instructions2-add.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/instructions/instructions3-remove.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
86 changes: 86 additions & 0 deletions builds/chestnut 2023-04-09 21-14-52/DistributionSummary.plist
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>chestnut.ipa</key>
<array>
<dict>
<key>architectures</key>
<array>
<string>arm64</string>
</array>
<key>buildNumber</key>
<string>7</string>
<key>certificate</key>
<dict>
<key>SHA1</key>
<string>44C9204BAE75E1078E139397F3B9E9A47C487D19</string>
<key>dateExpires</key>
<string>4/8/24</string>
<key>type</key>
<string>Cloud Managed Apple Distribution</string>
</dict>
<key>embeddedBinaries</key>
<array>
<dict>
<key>architectures</key>
<array>
<string>arm64</string>
</array>
<key>buildNumber</key>
<string>1</string>
<key>certificate</key>
<dict>
<key>SHA1</key>
<string>44C9204BAE75E1078E139397F3B9E9A47C487D19</string>
<key>dateExpires</key>
<string>4/8/24</string>
<key>type</key>
<string>Cloud Managed Apple Distribution</string>
</dict>
<key>name</key>
<string>OpenSSL.framework</string>
<key>team</key>
<dict>
<key>id</key>
<string>3W3H65F89G</string>
<key>name</key>
<string>Sam Pochyly</string>
</dict>
<key>versionNumber</key>
<string>1.1.180</string>
</dict>
</array>
<key>entitlements</key>
<dict>
<key>application-identifier</key>
<string>3W3H65F89G.com.pochyly.chestnut</string>
<key>com.apple.developer.team-identifier</key>
<string>3W3H65F89G</string>
<key>get-task-allow</key>
<false/>
</dict>
<key>name</key>
<string>chestnut.app</string>
<key>profile</key>
<dict>
<key>UUID</key>
<string>585950ff-29e2-46ab-92cc-00a236aa8e48</string>
<key>dateExpires</key>
<string>4/8/24</string>
<key>name</key>
<string>iOS Team Ad Hoc Provisioning Profile: com.pochyly.chestnut</string>
</dict>
<key>team</key>
<dict>
<key>id</key>
<string>3W3H65F89G</string>
<key>name</key>
<string>Sam Pochyly</string>
</dict>
<key>versionNumber</key>
<string>1.4</string>
</dict>
</array>
</dict>
</plist>
20 changes: 20 additions & 0 deletions builds/chestnut 2023-04-09 21-14-52/ExportOptions.plist
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>compileBitcode</key>
<true/>
<key>destination</key>
<string>export</string>
<key>method</key>
<string>ad-hoc</string>
<key>signingStyle</key>
<string>automatic</string>
<key>stripSwiftSymbols</key>
<true/>
<key>teamID</key>
<string>3W3H65F89G</string>
<key>thinning</key>
<string>&lt;none&gt;</string>
</dict>
</plist>
Loading