feat(app): review panel reactivity improvements (#37089)

This commit is contained in:
Aarav Sareen
2026-07-17 17:40:42 +08:00
committed by GitHub
parent b527f605d9
commit ed926be253
6 changed files with 112 additions and 9 deletions
+21 -5
View File
@@ -8,6 +8,8 @@ export interface ResizeHandleProps extends Omit<JSX.HTMLAttributes<HTMLDivElemen
max: number
onResize: (size: number) => void
onCollapse?: () => void
/** Called while dragging when size crosses `collapseThreshold`. */
onCollapseChange?: (collapsed: boolean) => void
collapseThreshold?: number
}
@@ -20,17 +22,26 @@ export function ResizeHandle(props: ResizeHandleProps) {
"max",
"onResize",
"onCollapse",
"onCollapseChange",
"collapseThreshold",
"class",
"classList",
])
const handleMouseDown = (e: MouseEvent) => {
if (e.detail > 1) return
e.preventDefault()
const edge = local.edge ?? (local.direction === "vertical" ? "start" : "end")
const start = local.direction === "horizontal" ? e.clientX : e.clientY
const startSize = local.size
const min = local.min
const max = local.max
const threshold = local.collapseThreshold ?? 0
const onResize = local.onResize
const onCollapse = local.onCollapse
const onCollapseChange = local.onCollapseChange
let current = startSize
let collapsed = false
document.body.style.userSelect = "none"
document.body.style.overflow = "hidden"
@@ -46,8 +57,12 @@ export function ResizeHandle(props: ResizeHandleProps) {
? start - pos
: pos - start
current = startSize + delta
const clamped = Math.min(local.max, Math.max(local.min, current))
local.onResize(clamped)
const nextCollapsed = threshold > 0 && current < threshold
if (nextCollapsed !== collapsed) {
collapsed = nextCollapsed
onCollapseChange?.(collapsed)
}
onResize(Math.min(max, Math.max(min, current)))
}
const onMouseUp = () => {
@@ -56,10 +71,11 @@ export function ResizeHandle(props: ResizeHandleProps) {
document.removeEventListener("mousemove", onMouseMove)
document.removeEventListener("mouseup", onMouseUp)
const threshold = local.collapseThreshold ?? 0
if (local.onCollapse && threshold > 0 && current < threshold) {
local.onCollapse()
if (collapsed) {
onCollapse?.()
return
}
onCollapseChange?.(false)
}
document.addEventListener("mousemove", onMouseMove)