Skip to content

Commit afb3b8d

Browse files
v1.5.0: UI improvements, advanced history filters, optimized transaction processes, logo & splash update, bug fixes
1 parent e10d7e9 commit afb3b8d

20 files changed

+473
-617
lines changed

App.js

Lines changed: 76 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ import AccountsScreen from './screens/AccountsScreen';
1919
import EditTransactionScreen from './screens/EditTransactionScreen';
2020
import 'react-native-gesture-handler';
2121
import useStore from './hooks/useStore';
22-
import { SafeAreaProvider } from 'react-native-safe-area-context';
22+
import { SafeAreaProvider, SafeAreaView } from 'react-native-safe-area-context';
2323
import * as NavigationBar from 'expo-navigation-bar';
2424

2525

@@ -29,79 +29,81 @@ const Tab = createBottomTabNavigator();
2929
// Tab Navigator for main app screens
3030
function MainTabNavigator() {
3131
return (
32-
<Tab.Navigator
33-
screenOptions={({ route }) => ({
34-
tabBarIcon: ({ focused, color, size }) => {
35-
let IconComponent;
36-
let iconSize = size + 2;
37-
if (route.name === 'Home') {
38-
IconComponent = Home;
39-
} else if (route.name === 'AddTransaction') {
40-
IconComponent = PlusCircle;
41-
} else if (route.name === 'History') {
42-
IconComponent = List;
43-
} else if (route.name === 'Insights') {
44-
IconComponent = BarChart2;
45-
} else if (route.name === 'Accounts') {
46-
IconComponent = Wallet;
47-
}
48-
return <IconComponent color={color} size={iconSize} strokeWidth={focused ? 2.4 : 2} />;
49-
},
50-
tabBarActiveTintColor: '#3B82F6',
51-
tabBarInactiveTintColor: '#94A3B8',
52-
tabBarShowLabel: true,
53-
tabBarLabelStyle: {
54-
fontFamily: 'Inter_600SemiBold',
55-
fontSize: 12,
56-
marginTop: 0,
57-
marginBottom: 4,
58-
},
59-
tabBarStyle: {
60-
backgroundColor: Platform.OS === 'ios' ? 'transparent' : '#1E293B',
61-
borderTopWidth: 0,
62-
height: 64,
63-
shadowColor: '#000',
64-
shadowOffset: { width: 0, height: -2 },
65-
shadowOpacity: 0.08,
66-
shadowRadius: 16,
67-
elevation: 8,
68-
},
69-
headerShown: false,
70-
tabBarBackground: () => (
71-
<BlurView
72-
intensity={40}
73-
tint="dark"
74-
style={{ flex: 1, backgroundColor: 'rgba(30,41,59,0.92)' }}
75-
/>
76-
),
77-
})}
78-
>
79-
<Tab.Screen
80-
name="Home"
81-
component={HomeScreen}
82-
options={{ title: 'Home' }}
83-
/>
84-
<Tab.Screen
85-
name="AddTransaction"
86-
component={AddTransactionScreen}
87-
options={{ title: 'Add' }}
88-
/>
89-
<Tab.Screen
90-
name="History"
91-
component={HistoryScreen}
92-
options={{ title: 'History' }}
93-
/>
94-
<Tab.Screen
95-
name="Insights"
96-
component={InsightsScreen}
97-
options={{ title: 'Insights' }}
98-
/>
99-
<Tab.Screen
100-
name="Accounts"
101-
component={AccountsScreen}
102-
options={{ title: 'Accounts' }}
103-
/>
104-
</Tab.Navigator>
32+
<SafeAreaView style={{ flex: 1 }} edges={['bottom']}>
33+
<Tab.Navigator
34+
screenOptions={({ route }) => ({
35+
tabBarIcon: ({ focused, color, size }) => {
36+
let IconComponent;
37+
let iconSize = size + 2;
38+
if (route.name === 'Home') {
39+
IconComponent = Home;
40+
} else if (route.name === 'AddTransaction') {
41+
IconComponent = PlusCircle;
42+
} else if (route.name === 'History') {
43+
IconComponent = List;
44+
} else if (route.name === 'Insights') {
45+
IconComponent = BarChart2;
46+
} else if (route.name === 'Accounts') {
47+
IconComponent = Wallet;
48+
}
49+
return <IconComponent color={color} size={iconSize} strokeWidth={focused ? 2.4 : 2} />;
50+
},
51+
tabBarActiveTintColor: '#3B82F6',
52+
tabBarInactiveTintColor: '#94A3B8',
53+
tabBarShowLabel: true,
54+
tabBarLabelStyle: {
55+
fontFamily: 'Inter_600SemiBold',
56+
fontSize: 12,
57+
marginTop: 0,
58+
marginBottom: 4,
59+
},
60+
tabBarStyle: {
61+
backgroundColor: Platform.OS === 'ios' ? 'transparent' : '#1E293B',
62+
borderTopWidth: 0,
63+
height: 64,
64+
shadowColor: '#000',
65+
shadowOffset: { width: 0, height: -2 },
66+
shadowOpacity: 0.08,
67+
shadowRadius: 16,
68+
elevation: 8,
69+
},
70+
headerShown: false,
71+
tabBarBackground: () => (
72+
<BlurView
73+
intensity={40}
74+
tint="dark"
75+
style={{ flex: 1, backgroundColor: 'rgba(30,41,59,0.92)' }}
76+
/>
77+
),
78+
})}
79+
>
80+
<Tab.Screen
81+
name="Home"
82+
component={HomeScreen}
83+
options={{ title: 'Home' }}
84+
/>
85+
<Tab.Screen
86+
name="AddTransaction"
87+
component={AddTransactionScreen}
88+
options={{ title: 'Add' }}
89+
/>
90+
<Tab.Screen
91+
name="History"
92+
component={HistoryScreen}
93+
options={{ title: 'History' }}
94+
/>
95+
<Tab.Screen
96+
name="Insights"
97+
component={InsightsScreen}
98+
options={{ title: 'Insights' }}
99+
/>
100+
<Tab.Screen
101+
name="Accounts"
102+
component={AccountsScreen}
103+
options={{ title: 'Accounts' }}
104+
/>
105+
</Tab.Navigator>
106+
</SafeAreaView>
105107
);
106108
}
107109

app.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"expo": {
33
"name": "Cashalyst",
44
"slug": "Cashalyst",
5-
"version": "1.4.0",
5+
"version": "1.5.0",
66
"orientation": "portrait",
77
"icon": "./assets/logo.png",
88
"userInterfaceStyle": "light",
@@ -17,7 +17,7 @@
1717
"android": {
1818
"edgeToEdgeEnabled": true,
1919
"package": "com.kavinkumar_r.Cashaly",
20-
"versionCode": 5
20+
"versionCode": 6
2121
},
2222
"web": {
2323
"favicon": "./assets/logo.png"

assets/logo.png

4.25 KB
Loading

assets/splash.png

7.14 KB
Loading

components/AppButton.jsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import React from 'react';
22
import { TouchableOpacity, Text, ActivityIndicator, StyleSheet } from 'react-native';
33
import theme from '../utils/theme';
4+
import { responsiveFontSize, moderateScale } from '../utils/scale';
45

56
const VARIANT_STYLES = {
67
filled: theme.button.filled,

components/AppDropdown.jsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import React, { useState } from 'react';
22
import { View, StyleSheet, Platform, Text, TouchableOpacity, Modal, ScrollView, FlatList } from 'react-native';
33
import { ChevronDown } from 'lucide-react-native';
44
import theme from '../utils/theme';
5+
import { responsiveFontSize, moderateScale } from '../utils/scale';
56

67
const AppDropdown = ({
78
selectedValue,

components/AppSearchBar.jsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { View, TextInput, StyleSheet, Keyboard, TouchableOpacity } from 'react-n
33
import { Surface } from 'react-native-paper';
44
import { X, Search } from 'lucide-react-native';
55
import theme from '../utils/theme';
6+
import { responsiveFontSize, moderateScale } from '../utils/scale';
67

78
const AppSearchBar = ({ onSearch, placeholder = 'Search transactions...', style }) => {
89
const inputRef = useRef();

components/AppSegmentedButton.jsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import React from 'react';
22
import { View, Text, TouchableOpacity } from 'react-native';
33
import theme from '../utils/theme';
4+
import { responsiveFontSize, moderateScale } from '../utils/scale';
45

56
const AppSegmentedButton = ({
67
items = [],

components/AppTextField.jsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import React from 'react';
22
import { TextInput } from 'react-native-paper';
33
import theme from '../utils/theme';
4+
import { responsiveFontSize, moderateScale } from '../utils/scale';
45

56
const AppTextField = ({
67
value,

0 commit comments

Comments
 (0)