Fixed broken profile relation

X-Lovable-Edit-ID: edt-601bf592-d8ab-4ad2-986e-a57084069282
Co-authored-by: renee-png <262607627+renee-png@users.noreply.github.com>
This commit is contained in:
gpt-engineer-app[bot]
2026-04-19 19:59:32 +00:00
co-authored by renee-png
+21 -5
View File
@@ -116,11 +116,11 @@ function InvoicesIndex() {
const loadUnbilled = async () => {
try {
setTabsLoaded(false);
const [t, e] = await Promise.all([
const [timeRows, expenseRows] = await Promise.all([
fetchAllPages<any>(async (from, to) => {
const result = await supabase
.from("time_entries")
.select("id, work_date, description, hours, hourly_rate, billable, user_id, invoice_id, case_id, case:cases(id, case_number, title, client_id, client:clients(id, name)), profile:profiles!time_entries_user_id_fkey(id, full_name, email)")
.select("id, work_date, description, hours, hourly_rate, billable, user_id, invoice_id, case_id, case:cases(id, case_number, title, client_id, client:clients(id, name))")
.eq("billable", true)
.order("work_date", { ascending: false })
.range(from, to);
@@ -129,15 +129,31 @@ function InvoicesIndex() {
fetchAllPages<any>(async (from, to) => {
const result = await supabase
.from("expenses")
.select("id, expense_date, description, amount, billable, user_id, invoice_id, case_id, case:cases(id, case_number, title, client_id, client:clients(id, name)), profile:profiles!expenses_user_id_fkey(id, full_name, email)")
.select("id, expense_date, description, amount, billable, user_id, invoice_id, case_id, case:cases(id, case_number, title, client_id, client:clients(id, name))")
.eq("billable", true)
.order("expense_date", { ascending: false })
.range(from, to);
return { data: result.data, error: result.error ? { message: result.error.message } : null };
}),
]);
setTime(t);
setExpenses(e);
const userIds = Array.from(new Set([
...timeRows.map((row) => row.user_id).filter(Boolean),
...expenseRows.map((row) => row.user_id).filter(Boolean),
]));
let profileMap: Record<string, any> = {};
if (userIds.length) {
const { data: profiles, error: profilesError } = await supabase
.from("profiles")
.select("id, full_name, email")
.in("id", userIds);
if (profilesError) throw new Error(profilesError.message);
profileMap = Object.fromEntries((profiles ?? []).map((profile: any) => [profile.id, profile]));
}
setTime(timeRows.map((row) => ({ ...row, profile: row.user_id ? profileMap[row.user_id] ?? null : null })));
setExpenses(expenseRows.map((row) => ({ ...row, profile: row.user_id ? profileMap[row.user_id] ?? null : null })));
} catch (error: any) {
toast.error(error?.message ?? "Could not load unbilled items");
setTime([]);