Refactor category type to use enum
This commit is contained in:
parent
6ca505d505
commit
bdc2ca22f6
6 changed files with 22 additions and 15 deletions
|
|
@ -5,6 +5,7 @@ import { SafeAreaView } from 'react-native-safe-area-context';
|
|||
import { AutoDecimalInput, CustomColorPicker, NavigationButton, TypeSelectorSwitch } from "../../../components";
|
||||
import { addCategory } from "../../../services/database";
|
||||
import { useTheme } from "../../contexts/ThemeContext";
|
||||
import { CategoryType } from "../../../services/database";
|
||||
|
||||
export default function Page() {
|
||||
const {colors} = useTheme();
|
||||
|
|
@ -13,7 +14,9 @@ export default function Page() {
|
|||
|
||||
const [categoryName, setCategoryName] = useState<string>("");
|
||||
const [categoryColor, setCategoryColor] = useState<string>('#' + Math.floor(Math.random()*16777215).toString(16));
|
||||
const [selectedType, setSelectedType] = useState<string>("expense");
|
||||
|
||||
const [selectedType, setSelectedType] = useState<CategoryType>(CategoryType.EXPENSE);
|
||||
|
||||
const [amount, setAmount] = useState(0);
|
||||
|
||||
return (
|
||||
|
|
@ -35,7 +38,7 @@ export default function Page() {
|
|||
|
||||
<TypeSelectorSwitch
|
||||
currentSelected={selectedType}
|
||||
handleButtonPress={(type) => {
|
||||
handleButtonPress={(type: CategoryType) => {
|
||||
setSelectedType(type);
|
||||
}}
|
||||
/>
|
||||
|
|
|
|||
|
|
@ -1,10 +1,11 @@
|
|||
|
||||
import { StyleSheet, Text, TouchableOpacity, View } from "react-native";
|
||||
import { useTheme } from "../../app/contexts/ThemeContext";
|
||||
import { CategoryType } from "../../services/database";
|
||||
|
||||
export type TypeSelectorSwitchProperties = {
|
||||
handleButtonPress: (type: string) => void,
|
||||
currentSelected: string,
|
||||
handleButtonPress: (type: CategoryType) => void,
|
||||
currentSelected: CategoryType,
|
||||
}
|
||||
|
||||
const TypeSelectorSwitch = (properties: TypeSelectorSwitchProperties) => {
|
||||
|
|
@ -14,17 +15,17 @@ const TypeSelectorSwitch = (properties: TypeSelectorSwitchProperties) => {
|
|||
<View style={styles.containerStyle}>
|
||||
<TouchableOpacity
|
||||
onPress={() => {
|
||||
properties.handleButtonPress("expense");
|
||||
properties.handleButtonPress(CategoryType.EXPENSE);
|
||||
}}
|
||||
style={[styles.touchableOpacityStyle, properties.currentSelected == "expense" ? {backgroundColor: colors.accentColor} : {backgroundColor: colors.elementDefaultColor}]
|
||||
style={[styles.touchableOpacityStyle, properties.currentSelected == CategoryType.EXPENSE ? {backgroundColor: colors.accentColor} : {backgroundColor: colors.elementDefaultColor}]
|
||||
}>
|
||||
<Text style={[styles.textStyle, {color: colors.primaryText}]}>Expenses</Text>
|
||||
</TouchableOpacity>
|
||||
<TouchableOpacity
|
||||
onPress={() => {
|
||||
properties.handleButtonPress("saving");
|
||||
onPress={() => {
|
||||
properties.handleButtonPress(CategoryType.SAVING);
|
||||
}}
|
||||
style={[styles.touchableOpacityStyle, properties.currentSelected == "saving" ? {backgroundColor: colors.accentColor} : {backgroundColor: colors.elementDefaultColor}]
|
||||
style={[styles.touchableOpacityStyle, properties.currentSelected == CategoryType.SAVING ? {backgroundColor: colors.accentColor} : {backgroundColor: colors.elementDefaultColor}]
|
||||
}>
|
||||
<Text style={[styles.textStyle, {color: colors.primaryText}]}>Savings</Text>
|
||||
</TouchableOpacity>
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ import React, { useState, useEffect } from 'react';
|
|||
import { View, Text, StyleSheet } from 'react-native';
|
||||
import { useTheme } from '../../app/contexts/ThemeContext';
|
||||
import useFetch from '../../hooks/useFetch';
|
||||
import { CategoryType } from '../../services/database';
|
||||
|
||||
const BudgetOverview = () => {
|
||||
const { colors } = useTheme();
|
||||
|
|
@ -9,12 +10,12 @@ const BudgetOverview = () => {
|
|||
const [budget, setBudget] = useState(0);
|
||||
|
||||
const spentQuery = {
|
||||
sql: "SELECT SUM(e.amount) as total FROM expense e LEFT JOIN category c ON e.category_guid = c.guid WHERE c.type = 'budget'",
|
||||
sql: `SELECT SUM(e.amount) as total FROM expense e LEFT JOIN category c ON e.category_guid = c.guid WHERE c.type = '${CategoryType.EXPENSE.toString()}'`,
|
||||
args: []
|
||||
};
|
||||
|
||||
const budgetQuery = {
|
||||
sql: "SELECT SUM(allocated_amount) as total FROM category WHERE type = 'budget'",
|
||||
sql: `SELECT SUM(allocated_amount) as total FROM category WHERE type = '${CategoryType.EXPENSE.toString()}'`,
|
||||
args: []
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ import React, { useState, useEffect } from 'react';
|
|||
import { Text, StyleSheet } from 'react-native';
|
||||
import { useTheme } from '../../app/contexts/ThemeContext';
|
||||
import useFetch from '../../hooks/useFetch';
|
||||
import { CategoryType } from '../../services/database';
|
||||
|
||||
const styles = StyleSheet.create({
|
||||
text: {
|
||||
|
|
@ -23,7 +24,7 @@ const BudgetRemaining = () => {
|
|||
};
|
||||
|
||||
const budgetQuery = {
|
||||
sql: "SELECT SUM(allocated_amount) as total FROM category WHERE type = 'budget'",
|
||||
sql: `SELECT SUM(allocated_amount) as total FROM category WHERE type = '${CategoryType.EXPENSE.toString()}'`,
|
||||
args: []
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ import React, { useState, useEffect } from 'react';
|
|||
import { View, Text, StyleSheet } from 'react-native';
|
||||
import { useTheme } from '../../app/contexts/ThemeContext';
|
||||
import useFetch from '../../hooks/useFetch';
|
||||
import { CategoryType } from '../../services/database';
|
||||
|
||||
const SavingsOverview = () => {
|
||||
const { colors } = useTheme();
|
||||
|
|
@ -9,12 +10,12 @@ const SavingsOverview = () => {
|
|||
const [goal, setGoal] = useState(0);
|
||||
|
||||
const savedQuery = {
|
||||
sql: "SELECT SUM(e.amount) as total FROM expense e LEFT JOIN category c ON e.category_guid = c.guid WHERE c.type = 'savings'",
|
||||
sql: `SELECT SUM(e.amount) as total FROM expense e LEFT JOIN category c ON e.category_guid = c.guid WHERE c.type = '${CategoryType.SAVING.toString()}'`,
|
||||
args: []
|
||||
};
|
||||
|
||||
const goalQuery = {
|
||||
sql: "SELECT SUM(allocated_amount) as total FROM category WHERE type = 'budget'",
|
||||
sql: `SELECT SUM(allocated_amount) as total FROM category WHERE type = '${CategoryType.SAVING.toString()}'`,
|
||||
args: []
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@ export const initDatabase = async () => {
|
|||
try {
|
||||
await db.transactionAsync(async (tx: SQLite.SQLTransactionAsync) => {
|
||||
await tx.executeSqlAsync(
|
||||
"CREATE TABLE IF NOT EXISTS category (guid VARCHAR(36) PRIMARY KEY, name TEXT, color TEXT, type TEXT, allocated_amount DOUBLE);"
|
||||
"CREATE TABLE IF NOT EXISTS category (guid VARCHAR(36) PRIMARY KEY, name TEXT, color TEXT, type string, allocated_amount DOUBLE);"
|
||||
);
|
||||
await tx.executeSqlAsync(
|
||||
"CREATE TABLE IF NOT EXISTS expense (guid VARCHAR(36) PRIMARY KEY, name TEXT, category_guid VARCHAR(36), datetime DATETIME, amount DOUBLE, FOREIGN KEY (category_guid) REFERENCES category(guid));"
|
||||
|
|
|
|||
Reference in a new issue