Skip to content

Commit

Permalink
Update app version to 1.6, fix user slice import, and customize empty…
Browse files Browse the repository at this point in the history
… list component
  • Loading branch information
Sowham-3098 committed Apr 14, 2024
1 parent 308dbf3 commit 00978a2
Show file tree
Hide file tree
Showing 9 changed files with 78 additions and 81 deletions.
4 changes: 2 additions & 2 deletions android/app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -79,8 +79,8 @@ android {
applicationId "com.travelbook"
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
versionCode 5
versionName "1.5"
versionCode 6
versionName "1.6"
}
signingConfigs {
debug {
Expand Down
Binary file modified assets/images/empty.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
4 changes: 2 additions & 2 deletions components/emptyList.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ import React from 'react'
export default function EmptyList({message}) {
return (
<View className="flex items-center my-10">
<Image source={require('../assets/images/empty.png')} className="w-40 h-40 shadowOffset: 10" />
<Text className="text-white font-medium">{message || 'data not found'}</Text>
<Image source={require('../assets/images/empty.png')} className="w-60 h-60 shadowOffset: 10" />
<Text className="text-green-900 font-medium">{message || 'data not found'}</Text>
</View>
)
}
12 changes: 8 additions & 4 deletions config/firebase.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,10 @@
import { initializeApp } from "firebase/app";
// TODO: Add SDKs for Firebase products that you want to use
// https://firebase.google.com/docs/web/setup#available-libraries
import { getFirestore,collection } from "firebase/firestore";
import { getAuth } from "firebase/auth";
import { getFirestore, collection } from "firebase/firestore";
import { getAuth, initializeAuth, getReactNativePersistence } from "firebase/auth";
import AsyncStorage from '@react-native-async-storage/async-storage';

// Your web app's Firebase configuration
const firebaseConfig = {
apiKey: "AIzaSyCfKqzqfTFZ09-TGixnW7NKc2A47tw23ME",
Expand All @@ -17,9 +19,11 @@ const firebaseConfig = {
// Initialize Firebase
const app = initializeApp(firebaseConfig);
export const db = getFirestore(app);
export const auth = getAuth(app);
export const auth = initializeAuth(app, {
persistence: getReactNativePersistence(AsyncStorage) // Configure persistence with AsyncStorage
});

export const tripsRef = collection(db, 'trips');
export const expensesRef = collection(db, 'expenses');

export default app;
export default app;
84 changes: 42 additions & 42 deletions navigation/appNavigation.js
Original file line number Diff line number Diff line change
@@ -1,60 +1,60 @@
import * as React from 'react';
import React, { useEffect } from 'react';
import { NavigationContainer } from '@react-navigation/native';
import { createNativeStackNavigator } from '@react-navigation/native-stack';
import { useSelector, useDispatch } from 'react-redux';
import { onAuthStateChanged } from 'firebase/auth';
import { setUser } from '../redux/slices/user';
import { auth } from '../config/firebase';
import HomeScreen from '../screens/HomeScreen';
import { useSelector } from 'react-redux';
import AddTripScreen from '../screens/AddTripScreen';
import AddExpenseScreen from '../screens/AddExpenseScreen';
import TripExpense from '../screens/TripExpense';
import WelcomeScreen from '../screens/WelcomeScreen';
import SignupScreen from '../screens/SignupScreen';
import SigninScreen from '../screens/SigninScreen';
import EditExpense from '../screens/EditExpense';
import { store } from '../redux/store';
import {user} from '../redux/slices/user'
import { onAuthStateChanged } from 'firebase/auth';
import { useDispatch } from 'react-redux';
import { setUser } from '../redux/slices/user';
import { auth } from '../config/firebase';
import ExpenseSummary from '../screens/ExpenseSummary';

const Stack = createNativeStackNavigator();
export default function AppNavigation() {
const { user } = useSelector(state => state.user)

export default function AppNavigation() {
const { user } = useSelector(state => state.user);
const dispatch = useDispatch();

onAuthStateChanged(auth, u => {
console.log('got user: ', u)
dispatch(setUser(u))
})
if (user) {
return (
<NavigationContainer>
<Stack.Navigator initialRouteName='Home'>

<Stack.Screen name="Home" component={HomeScreen} options={{ headerShown: false }} />

<Stack.Screen name="AddTrip" component={AddTripScreen} options={{ headerShown: false }} />
<Stack.Screen name="AddExpense" component={AddExpenseScreen} options={{ headerShown: false }} />
<Stack.Screen name="TripExpense" component={TripExpense} options={{ headerShown: false }} />
<Stack.Screen name="EditExpense" component={EditExpense} options={{ headerShown: false }} />
<Stack.Screen name="ExpenseSummary" component={ExpenseSummary} options={{ headerShown: false }} />
</Stack.Navigator>
</NavigationContainer>
);
} else {
return (
<NavigationContainer>
<Stack.Navigator initialRouteName='Welcome'>
useEffect(() => {
const unsubscribe = onAuthStateChanged(auth, user => {
console.log('got user:', user);
if (user) {
dispatch(setUser(user));
} else {
dispatch(setUser(null));
}
});

<Stack.Screen name="Welcome" component={WelcomeScreen} options={{ headerShown: false }} />
<Stack.Screen name="SignIn" component={SigninScreen} options={{ headerShown: false, presentation: 'modal' }} />
<Stack.Screen name="SignUp" component={SignupScreen} options={{ headerShown: false, presentation: 'modal' }} />

</Stack.Navigator>
</NavigationContainer>
);
}
// Clean up subscription on unmount
return unsubscribe;
}, [dispatch]);

}
return (
<NavigationContainer>
<Stack.Navigator initialRouteName={user ? 'Home' : 'Welcome'}>
{user ? (
<>
<Stack.Screen name="Home" component={HomeScreen} options={{ headerShown: false }} />
<Stack.Screen name="AddTrip" component={AddTripScreen} options={{ headerShown: false }} />
<Stack.Screen name="AddExpense" component={AddExpenseScreen} options={{ headerShown: false }} />
<Stack.Screen name="TripExpense" component={TripExpense} options={{ headerShown: false }} />
<Stack.Screen name="EditExpense" component={EditExpense} options={{ headerShown: false }} />
<Stack.Screen name="ExpenseSummary" component={ExpenseSummary} options={{ headerShown: false }} />
</>
) : (
<>
<Stack.Screen name="Welcome" component={WelcomeScreen} options={{ headerShown: false }} />
<Stack.Screen name="SignIn" component={SigninScreen} options={{ headerShown: false, presentation: 'modal' }} />
<Stack.Screen name="SignUp" component={SignupScreen} options={{ headerShown: false, presentation: 'modal' }} />
</>
)}
</Stack.Navigator>
</NavigationContainer>
);
}
37 changes: 16 additions & 21 deletions redux/slices/user.js
Original file line number Diff line number Diff line change
@@ -1,28 +1,23 @@

import { createSlice } from '@reduxjs/toolkit'

import { createSlice } from '@reduxjs/toolkit';

const initialState = {
value:0,
}
user: null,
userLoading: false,
};

const usersSlice = createSlice({
name: 'user',
initialState:{
user:null,
userLoading: false,
const userSlice = createSlice({
name: 'user',
initialState,
reducers: {
setUser: (state, action) => {
state.user = action.payload;
},
reducers: {
setUser: (state, action) => {
state.user = action.payload
},
setUserLoading: (state, action) => {
state.userLoading = action.payload
},
setUserLoading: (state, action) => {
state.userLoading = action.payload;
},
})
},
});

export const { setUser, setUserLoading } = usersSlice.actions
export const { setUser, setUserLoading } = userSlice.actions;

export default usersSlice.reducer
export default userSlice.reducer;
14 changes: 6 additions & 8 deletions redux/store.js
Original file line number Diff line number Diff line change
@@ -1,10 +1,8 @@
import {configureStore} from '@reduxjs/toolkit'
import user from './slices/user'
import { configureStore } from '@reduxjs/toolkit';
import userReducer from './slices/user'; // Import the corrected user slice

export const store = configureStore({

reducer: {
user
}

})
reducer: {
user: userReducer, // Include the user slice in the reducers object
},
});
2 changes: 1 addition & 1 deletion screens/HomeScreen.js
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@ export default function HomeScreen() {
data={trips}
numColumns={3}
keyExtractor={item => item.id}
ListEmptyComponent={<EmptyList message={"You have not recorded any trips yet"} />}
ListEmptyComponent={<EmptyList/>}
showsVerticalScrollIndicator={true}
columnWrapperStyle={{ justifyContent: 'space-between' }}
style={{ marginHorizontal: width * 0.01, marginTop: height * 0.03 }}
Expand Down
2 changes: 1 addition & 1 deletion screens/SigninScreen.js
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ export default function SigninScreen() {
} catch (e) {
dispatch(setUserLoading(false));
Snackbar.show({
text: e.message,
text: 'Incorrect password or email',
backgroundColor: 'red',
});
}
Expand Down

0 comments on commit 00978a2

Please sign in to comment.