fix: settings screen

This commit is contained in:
Max Koon
2025-10-20 21:49:08 -04:00
parent acfe62eb37
commit 0f958feb8d
4 changed files with 24 additions and 7 deletions

View File

@@ -116,7 +116,7 @@ const createMutators = (authData: AuthData | null) => {
const { data } = await plaidClient.transactionsGet({ const { data } = await plaidClient.transactionsGet({
access_token: account.token, access_token: account.token,
start_date: "2025-10-01", start_date: "2025-10-01",
end_date: "2025-10-18", end_date: new Date().toISOString().split("T")[0],
}); });
const transactions = data.transactions.map(tx => ({ const transactions = data.transactions.map(tx => ({

View File

@@ -1,5 +1,5 @@
import { authClient } from '@/lib/auth-client'; import { authClient } from '@/lib/auth-client';
import { Pressable, ScrollView, Text, View } from 'react-native'; import { Image, Pressable, ScrollView, Text, View } from 'react-native';
import { useQuery, useZero } from "@rocicorp/zero/react"; import { useQuery, useZero } from "@rocicorp/zero/react";
import { queries, type Mutators, type Schema } from '@money/shared'; import { queries, type Mutators, type Schema } from '@money/shared';
import { useEffect, useState } from 'react'; import { useEffect, useState } from 'react';
@@ -58,6 +58,12 @@ export default function HomeScreen() {
return Array.from({ length: LEN - nstr.length }).join(" ") + nstr; return Array.from({ length: LEN - nstr.length }).join(" ") + nstr;
} }
function uuu(t: typeof filteredTransactions[number]): string | undefined {
if (!t.json) return;
const j = JSON.parse(t.json);
return j.counterparties.filter((c: any) => !!c.logo_url).at(0)?.logo_url || j.personal_finance_category_icon_url;
}
return ( return (
<View> <View>
<View style={{ flexDirection: "row" }}> <View style={{ flexDirection: "row" }}>
@@ -71,7 +77,12 @@ export default function HomeScreen() {
{filteredTransactions.map((t, i) => <Pressable onHoverIn={() => { {filteredTransactions.map((t, i) => <Pressable onHoverIn={() => {
setIdx(i); setIdx(i);
}} style={{ backgroundColor: i == idx ? 'black' : undefined, cursor: 'default' as 'auto' }} key={t.id}> }} style={{ backgroundColor: i == idx ? 'black' : undefined, cursor: 'default' as 'auto' }} key={t.id}>
<Text style={{ fontFamily: 'mono', color: i == idx ? 'white' : undefined }}>{new Date(t.datetime!).toDateString()} <Text style={{ color: t.amount > 0 ? 'red' : 'green' }}>{lpad(t.amount)}</Text> {t.name.substring(0, 50)}</Text> <Text style={{ fontFamily: 'mono', color: i == idx ? 'white' : undefined }}>
{new Date(t.datetime!).toDateString()}
<Text style={{ color: t.amount > 0 ? 'red' : 'green' }}> {lpad(t.amount)}</Text>
<Image style={{ width: 15, height: 15, marginHorizontal: 10 }} source={{ uri: uuu(t) || "" }} />
{t.name.substring(0, 50)}
</Text>
</Pressable>)} </Pressable>)}
</View> </View>
<ScrollView> <ScrollView>

View File

@@ -5,14 +5,19 @@ import { type AuthData } from "./auth";
import { isLoggedIn } from "./zql"; import { isLoggedIn } from "./zql";
export const queries = { export const queries = {
me: syncedQueryWithContext('me', z.tuple([]), (authData: AuthData | null) => {
isLoggedIn(authData);
return builder.users
.where('id', '=', authData.user.id)
.one();
}),
allTransactions: syncedQueryWithContext('allTransactions', z.tuple([]), (authData: AuthData | null) => { allTransactions: syncedQueryWithContext('allTransactions', z.tuple([]), (authData: AuthData | null) => {
isLoggedIn(authData); isLoggedIn(authData);
return builder.transaction return builder.transaction
.where('user_id', '=', authData.user.id) .where('user_id', '=', authData.user.id)
.orderBy('datetime', 'desc') .orderBy('datetime', 'desc')
.limit(50) .limit(50)
} }),
),
getPlaidLink: syncedQueryWithContext('getPlaidLink', z.tuple([]), (authData: AuthData | null) => { getPlaidLink: syncedQueryWithContext('getPlaidLink', z.tuple([]), (authData: AuthData | null) => {
isLoggedIn(authData); isLoggedIn(authData);
return builder.plaidLink return builder.plaidLink
@@ -23,6 +28,7 @@ export const queries = {
getBalances: syncedQueryWithContext('getBalances', z.tuple([]), (authData: AuthData | null) => { getBalances: syncedQueryWithContext('getBalances', z.tuple([]), (authData: AuthData | null) => {
isLoggedIn(authData); isLoggedIn(authData);
return builder.balance return builder.balance
.where('user_id', '=', authData.user.id); .where('user_id', '=', authData.user.id)
.orderBy('name', 'asc');
}) })
}; };

View File

@@ -3,7 +3,7 @@
"target": "ES2022", "target": "ES2022",
"module": "ESNext", "module": "ESNext",
"moduleResolution": "Bundler", "moduleResolution": "Bundler",
"declaration": true, "declaration": false,
"outDir": "./dist", "outDir": "./dist",
"strict": true, "strict": true,
"verbatimModuleSyntax": true, "verbatimModuleSyntax": true,