fix: settings screen
This commit is contained in:
@@ -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 => ({
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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');
|
||||||
})
|
})
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
Reference in New Issue
Block a user