mirror of
https://github.com/hex248/sprint.git
synced 2026-02-08 02:33:01 +00:00
timers should not be used on issues with multiple assignees
This commit is contained in:
@@ -69,6 +69,10 @@ export function IssueDetailPane() {
|
||||
const [isSavingDescription, setIsSavingDescription] = useState(false);
|
||||
const descriptionRef = useRef<HTMLTextAreaElement>(null);
|
||||
|
||||
const isAssignee = assigneeIds.some((id) => user?.id === Number(id));
|
||||
const actualAssigneeIds = assigneeIds.filter((id) => id !== "unassigned");
|
||||
const hasMultipleAssignees = actualAssigneeIds.length > 1;
|
||||
|
||||
useEffect(() => {
|
||||
if (!issueData) return;
|
||||
setSprintId(issueData.Issue.sprintId?.toString() ?? "unassigned");
|
||||
@@ -421,12 +425,20 @@ export function IssueDetailPane() {
|
||||
<SmallUserDisplay user={issueData.Creator} className={"text-sm"} />
|
||||
</div>
|
||||
|
||||
<div className="flex items-center gap-2">
|
||||
{assigneeIds.some((id) => user?.id === Number(id)) && (
|
||||
<TimerModal issueId={issueData.Issue.id} />
|
||||
)}
|
||||
<TimerDisplay issueId={issueData.Issue.id} />
|
||||
</div>
|
||||
{isAssignee && (
|
||||
<div className={cn("flex flex-col gap-2", hasMultipleAssignees && "cursor-not-allowed")}>
|
||||
<div className="flex items-center gap-2">
|
||||
<TimerModal issueId={issueData.Issue.id} disabled={hasMultipleAssignees} />
|
||||
<TimerDisplay issueId={issueData.Issue.id} />
|
||||
</div>
|
||||
{hasMultipleAssignees && (
|
||||
<span className="text-xs text-destructive/85 font-600">
|
||||
Timers cannot be used on issues with multiple assignees
|
||||
</span>
|
||||
)}
|
||||
</div>
|
||||
)}
|
||||
|
||||
<ConfirmDialog
|
||||
open={deleteOpen}
|
||||
onOpenChange={setDeleteOpen}
|
||||
|
||||
@@ -4,13 +4,17 @@ import { Button } from "@/components/ui/button";
|
||||
import { Dialog, DialogContent, DialogTrigger } from "@/components/ui/dialog";
|
||||
import Icon from "@/components/ui/icon";
|
||||
|
||||
export function TimerModal({ issueId }: { issueId: number }) {
|
||||
export function TimerModal({ issueId, disabled }: { issueId: number; disabled?: boolean }) {
|
||||
const [open, setOpen] = useState(false);
|
||||
|
||||
return (
|
||||
<Dialog open={open} onOpenChange={setOpen}>
|
||||
<DialogTrigger asChild>
|
||||
<Button variant="outline" size="sm">
|
||||
<DialogTrigger asChild disabled={disabled}>
|
||||
<Button
|
||||
variant="outline"
|
||||
size="sm"
|
||||
disabled={disabled}
|
||||
>
|
||||
<Icon icon="timer" className="size-4" />
|
||||
Timer
|
||||
</Button>
|
||||
|
||||
Reference in New Issue
Block a user