refactor: extract nested handlers to fix function depth violations (S2004)
All checks were successful
Build & Publish / publish (push) Successful in 1m52s

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
hsiegeln
2026-04-02 18:35:46 +02:00
parent 93776944b9
commit ba6028c2ea
3 changed files with 28 additions and 34 deletions

View File

@@ -83,6 +83,20 @@ export function BarChart({
setTooltip({ x: mx, y: my, label: catLabel, values }) setTooltip({ x: mx, y: my, label: catLabel, values })
} }
function showBarTooltip(e: React.MouseEvent<SVGRectElement>, cat: string) {
const rect = e.currentTarget.closest('svg')!.getBoundingClientRect()
handleMouseEnter(
cat,
e.clientX - rect.left,
e.clientY - rect.top,
series.map((ss, ssi) => ({
series: ss.label,
value: ss.data.find((d) => d.x === cat)?.y ?? 0,
color: ss.color ?? CHART_COLORS[ssi % CHART_COLORS.length],
})),
)
}
return ( return (
<div className={`${styles.wrapper} ${className ?? ''}`}> <div className={`${styles.wrapper} ${className ?? ''}`}>
{yLabel && <div className={styles.yLabel}>{yLabel}</div>} {yLabel && <div className={styles.yLabel}>{yLabel}</div>}
@@ -138,19 +152,7 @@ export function BarChart({
height={barH} height={barH}
fill={color} fill={color}
className={styles.bar} className={styles.bar}
onMouseEnter={(e) => { onMouseEnter={(e) => showBarTooltip(e, cat)}
const rect = e.currentTarget.closest('svg')!.getBoundingClientRect()
handleMouseEnter(
cat,
e.clientX - rect.left,
e.clientY - rect.top,
series.map((ss, ssi) => ({
series: ss.label,
value: ss.data.find((d) => d.x === cat)?.y ?? 0,
color: ss.color ?? CHART_COLORS[ssi % CHART_COLORS.length],
})),
)
}}
/> />
) )
})} })}
@@ -184,19 +186,7 @@ export function BarChart({
height={barH} height={barH}
fill={color} fill={color}
className={styles.bar} className={styles.bar}
onMouseEnter={(e) => { onMouseEnter={(e) => showBarTooltip(e, cat)}
const svgEl = e.currentTarget.closest('svg')!.getBoundingClientRect()
handleMouseEnter(
cat,
e.clientX - svgEl.left,
e.clientY - svgEl.top,
series.map((ss, ssi) => ({
series: ss.label,
value: ss.data.find((d) => d.x === cat)?.y ?? 0,
color: ss.color ?? CHART_COLORS[ssi % CHART_COLORS.length],
})),
)
}}
/> />
) )
})} })}

View File

@@ -186,6 +186,11 @@ export function CommandPalette({ open, onClose, onSelect, data, onOpen, onQueryC
setScopeFilters((prev) => prev.filter((_, i) => i !== idx)) setScopeFilters((prev) => prev.filter((_, i) => i !== idx))
} }
function toggleExpanded(e: React.MouseEvent, id: string) {
e.stopPropagation()
setExpandedId((prev) => (prev === id ? null : id))
}
if (!open) return null if (!open) return null
return createPortal( return createPortal(
@@ -328,10 +333,7 @@ export function CommandPalette({ open, onClose, onSelect, data, onOpen, onQueryC
{result.expandedContent && ( {result.expandedContent && (
<button <button
className={styles.expandBtn} className={styles.expandBtn}
onClick={(e) => { onClick={(e) => toggleExpanded(e, result.id)}
e.stopPropagation()
setExpandedId((prev) => (prev === result.id ? null : result.id))
}}
aria-expanded={isExpanded} aria-expanded={isExpanded}
aria-label="Toggle detail" aria-label="Toggle detail"
> >

View File

@@ -57,6 +57,10 @@ export function ToastProvider({ children }: { children: ReactNode }) {
const [toasts, setToasts] = useState<ToastItem[]>([]) const [toasts, setToasts] = useState<ToastItem[]>([])
const timersRef = useRef<Map<string, ReturnType<typeof setTimeout>>>(new Map()) const timersRef = useRef<Map<string, ReturnType<typeof setTimeout>>>(new Map())
const removeToast = useCallback((id: string) => {
setToasts((prev) => prev.filter((t) => t.id !== id))
}, [])
const dismiss = useCallback((id: string) => { const dismiss = useCallback((id: string) => {
// Clear auto-dismiss timer if running // Clear auto-dismiss timer if running
const timer = timersRef.current.get(id) const timer = timersRef.current.get(id)
@@ -71,10 +75,8 @@ export function ToastProvider({ children }: { children: ReactNode }) {
) )
// Remove after animation completes // Remove after animation completes
setTimeout(() => { setTimeout(() => removeToast(id), EXIT_ANIMATION_MS)
setToasts((prev) => prev.filter((t) => t.id !== id)) }, [removeToast])
}, EXIT_ANIMATION_MS)
}, [])
const toast = useCallback( const toast = useCallback(
(options: ToastOptions): string => { (options: ToastOptions): string => {