diff --git a/src/app/components/dashboard/JiraAssignedTab.tsx b/src/app/components/dashboard/JiraAssignedTab.tsx index 04f46af7..793a6b29 100644 --- a/src/app/components/dashboard/JiraAssignedTab.tsx +++ b/src/app/components/dashboard/JiraAssignedTab.tsx @@ -423,7 +423,11 @@ export default function JiraAssignedTab(props: JiraAssignedTabProps) { reorderTimeoutId = setTimeout(() => setReordering(false), 200); } - function renderIssueRow(issue: JiraItem, boundary?: { isFirst: boolean; isLast: boolean }) { + // boundary.isFirst/isLast are accessors (not plain booleans) so the disabled + // state re-tracks the row's live position: keyed moves cached row nodes + // on reorder without re-running the callback, so a snapshotted index() would + // freeze the first/last state to where the row was originally rendered. + function renderIssueRow(issue: JiraItem, boundary?: { isFirst: () => boolean; isLast: () => boolean }) { const isPinned = () => pinnedJiraKeys().has(issue.key); const browseUrl = () => isSafeJiraSiteUrl(props.siteUrl) ? `${props.siteUrl}/browse/${issue.key}` : "#"; const isIssueExpanded = () => expandByDefault() ? !toggledIssues().has(issue.key) : toggledIssues().has(issue.key); @@ -436,11 +440,11 @@ export default function JiraAssignedTab(props: JiraAssignedTabProps) { ref={(el) => { if (isCustomMode()) itemRefs.set(issue.key, el); }} > -
+