'Assign to me by default' toggle in Account.tsx

This commit is contained in:
2026-01-29 22:43:02 +00:00
parent 130f564c33
commit e339274069
10 changed files with 1418 additions and 5 deletions

View File

@@ -11,6 +11,7 @@ import { Field } from "@/components/ui/field";
import Icon from "@/components/ui/icon";
import { Label } from "@/components/ui/label";
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select";
import { Switch } from "@/components/ui/switch";
import { UploadAvatar } from "@/components/upload-avatar";
import { useUpdateUser } from "@/lib/query/hooks";
import { parseError } from "@/lib/server";
@@ -29,6 +30,7 @@ function Account({ trigger }: { trigger?: ReactNode }) {
const [password, setPassword] = useState("");
const [avatarURL, setAvatarUrl] = useState<string | null>(null);
const [iconPreference, setIconPreference] = useState<IconStyle>("pixel");
const [preferences, setPreferences] = useState<Record<string, boolean>>({});
const [error, setError] = useState("");
const [submitAttempted, setSubmitAttempted] = useState(false);
@@ -40,6 +42,7 @@ function Account({ trigger }: { trigger?: ReactNode }) {
setAvatarUrl(currentUser.avatarURL || null);
const effectiveIconStyle = (currentUser.iconPreference as IconStyle) ?? DEFAULT_ICON_STYLE;
setIconPreference(effectiveIconStyle);
setPreferences(currentUser.preferences ?? {});
setPassword("");
setError("");
@@ -60,6 +63,7 @@ function Account({ trigger }: { trigger?: ReactNode }) {
password: password.trim() || undefined,
avatarURL,
iconPreference,
preferences,
});
setError("");
setUser(data);
@@ -129,6 +133,18 @@ function Account({ trigger }: { trigger?: ReactNode }) {
/>
<Label className="text-lg -mt-2">Preferences</Label>
<div className="flex flex-col gap-3">
<div className="flex items-center gap-2">
<Switch
checked={Boolean(preferences.assignByDefault)}
onCheckedChange={(checked) => {
setPreferences((prev) => ({ ...prev, assignByDefault: checked }));
}}
/>
<span className="text-sm">Assign to me by default</span>
</div>
</div>
<div className="flex gap-8 justify w-full">
<div className="flex flex-col items-start gap-1">
<Label className="text-sm">Light/Dark Mode</Label>

View File

@@ -66,6 +66,14 @@ export function IssueForm({ trigger }: { trigger?: React.ReactNode }) {
const [assigneeIds, setAssigneeIds] = useState<string[]>(["unassigned"]);
const [status, setStatus] = useState<string>(defaultStatus);
const [type, setType] = useState<string>(defaultType);
// set default assignee based on user preference when dialog opens
useEffect(() => {
if (open && user.preferences?.assignByDefault) {
setAssigneeIds([`${user.id}`]);
}
}, [open, user]);
useEffect(() => {
if (!status && defaultStatus) setStatus(defaultStatus);
if (!type && defaultType) setType(defaultType);