fix(payment): crash on open due to amount.toFixed on numeric string
feat(shared): tag filter on shared transactions list
This commit is contained in:
+4
-3
@@ -208,11 +208,12 @@ export function useParticipantBalances() {
|
||||
});
|
||||
}
|
||||
|
||||
export function useSharedTransactions() {
|
||||
export function useSharedTransactions(tagIds?: string[]) {
|
||||
return useQuery({
|
||||
queryKey: ["shared-transactions"],
|
||||
queryKey: ["shared-transactions", tagIds],
|
||||
queryFn: async () => {
|
||||
const res = await fetch("/api/shared-transactions");
|
||||
const params = tagIds?.length ? `?tag_ids=${tagIds.join(",")}` : "";
|
||||
const res = await fetch(`/api/shared-transactions${params}`);
|
||||
return res.json();
|
||||
},
|
||||
});
|
||||
|
||||
+10
-4
@@ -335,7 +335,14 @@ export async function getTags() {
|
||||
`);
|
||||
}
|
||||
|
||||
export async function getSharedTransactions(ownerId: number) {
|
||||
export async function getSharedTransactions(ownerId: number, tagIds?: number[]) {
|
||||
const params: unknown[] = [ownerId];
|
||||
let tagClause = "";
|
||||
if (tagIds?.length) {
|
||||
params.push(tagIds);
|
||||
tagClause = `AND EXISTS (SELECT 1 FROM transaction_tags tt WHERE tt.transaction_id = t.id AND tt.tag_id = ANY($2::int[]))`;
|
||||
}
|
||||
|
||||
const rows = await queryRaw<TransactionRow & { split_data: string }>(`
|
||||
SELECT t.*,
|
||||
o.category_override, o.merchant_normalized as merchant_override, o.notes,
|
||||
@@ -358,17 +365,16 @@ export async function getSharedTransactions(ownerId: number) {
|
||||
LEFT JOIN statements s ON s.id = t.statement_id
|
||||
LEFT JOIN participants p_owner ON p_owner.id = COALESCE(t.owner_id, s.owner_id)
|
||||
WHERE (
|
||||
-- I own this transaction and at least one other person has a split
|
||||
COALESCE(t.owner_id, s.owner_id) = $1
|
||||
AND EXISTS (SELECT 1 FROM transaction_splits ts2 WHERE ts2.transaction_id = t.id AND ts2.participant_id != $1)
|
||||
) OR (
|
||||
-- Someone else owns this transaction and I have a split on it
|
||||
COALESCE(t.owner_id, s.owner_id) != $1
|
||||
AND EXISTS (SELECT 1 FROM transaction_splits ts_me WHERE ts_me.transaction_id = t.id AND ts_me.participant_id = $1)
|
||||
)
|
||||
${tagClause}
|
||||
GROUP BY t.id, o.category_override, o.merchant_normalized, o.notes, s.bank_name, s.owner_id, p_owner.name
|
||||
ORDER BY t.transaction_date DESC
|
||||
`, [ownerId]);
|
||||
`, params);
|
||||
|
||||
return rows.map((r) => ({
|
||||
...r,
|
||||
|
||||
Reference in New Issue
Block a user