Co-authored-by: renee-png <262607627+renee-png@users.noreply.github.com>
This commit is contained in:
gpt-engineer-app[bot]
2026-04-27 23:53:03 +00:00
co-authored by renee-png
parent 14d8ac54bf
commit c7ff16f054
+23 -1
View File
@@ -50,6 +50,8 @@ export function HeaderTimer() {
const [feeItems, setFeeItems] = useState<FeeItem[]>([]);
const [feeItemId, setFeeItemId] = useState<string>("");
const [showNewFee, setShowNewFee] = useState(false);
const [staff, setStaff] = useState<Array<{ id: string; full_name: string | null; email: string | null }>>([]);
const [enteredById, setEnteredById] = useState<string>("");
// Load clients + cases the user can access (RLS handles filtering)
useEffect(() => {
@@ -75,6 +77,9 @@ export function HeaderTimer() {
setCases(ks ?? []);
setProfileRate((prof as any)?.hourly_rate ?? null);
setFeeItems((fees ?? []) as FeeItem[]);
const { data: st } = await supabase.from("profiles").select("id, full_name, email").order("full_name");
setStaff((st ?? []) as any);
setEnteredById((prev) => prev || user.id);
})();
}, [user?.id]);
@@ -121,7 +126,7 @@ export function HeaderTimer() {
const rate = isFlatFee ? selectedFee!.amount : effectiveRate;
const { error } = await supabase.from("time_entries").insert({
case_id: timer.caseId,
user_id: user.id,
user_id: enteredById || user.id,
work_date: new Date().toISOString().slice(0, 10),
hours,
hourly_rate: rate,
@@ -143,6 +148,7 @@ export function HeaderTimer() {
);
setBillable(true);
setFeeItemId("");
setEnteredById(user.id);
setOpen(false);
};
@@ -289,6 +295,22 @@ export function HeaderTimer() {
/>
</div>
<div className="space-y-1.5">
<Label className="text-xs">Entered by</Label>
<SearchableSelect
value={enteredById}
onValueChange={setEnteredById}
placeholder="Select staff…"
searchPlaceholder="Search staff…"
emptyText="No staff found."
options={staff.map((s) => ({
value: s.id,
label: (s.full_name || s.email || "Unknown") + (s.id === user?.id ? " (me)" : ""),
keywords: `${s.full_name ?? ""} ${s.email ?? ""}`,
}))}
/>
</div>
<div className="grid grid-cols-2 gap-3 pt-1">
<div>
<div className="text-[10px] uppercase tracking-wider text-muted-foreground">