From fafb0bb6338f65ac6b7902f63ab201ea164fbda3 Mon Sep 17 00:00:00 2001
From: Oliver Bryan <04oliverbryan@gmail.com>
Date: Tue, 6 Jan 2026 22:51:52 +0000
Subject: [PATCH] UserSelect component
---
.../frontend/src/components/user-select.tsx | 59 +++++++++++++++++++
1 file changed, 59 insertions(+)
create mode 100644 packages/frontend/src/components/user-select.tsx
diff --git a/packages/frontend/src/components/user-select.tsx b/packages/frontend/src/components/user-select.tsx
new file mode 100644
index 0000000..26c9832
--- /dev/null
+++ b/packages/frontend/src/components/user-select.tsx
@@ -0,0 +1,59 @@
+import type { UserRecord } from "@issue/shared";
+import { useState } from "react";
+import SmallUserDisplay from "@/components/small-user-display";
+import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select";
+
+export function UserSelect({
+ users,
+ value,
+ onChange,
+ fallbackUser,
+ placeholder = "Select user",
+}: {
+ users: UserRecord[];
+ value: string;
+ onChange: (value: string) => void;
+ fallbackUser?: UserRecord | null;
+ placeholder?: string;
+}) {
+ const [isOpen, setIsOpen] = useState(false);
+
+ const renderSelectedValue = () => {
+ if (value === "unassigned") {
+ return "Unassigned";
+ }
+
+ const user = users.find((u) => u.id.toString() === value);
+ const className = "p-0 py-2 text-sm";
+
+ if (user) {
+ return ;
+ }
+
+ if (fallbackUser) {
+ return ;
+ }
+
+ return null;
+ };
+
+ return (
+
+ );
+}