Changes
Co-authored-by: renee-png <262607627+renee-png@users.noreply.github.com>
This commit is contained in:
co-authored by
renee-png
parent
9325238a87
commit
9e45c4005a
@@ -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([]);
|
||||
|
||||
Reference in New Issue
Block a user