-
+
void
+
+const _registry = new Map()
+
+function _handleGlobalDragOver(e: Event) {
+ const { taskId, event: mouseEvent } = (e as CustomEvent).detail
+ const handler = _registry.get(taskId)
+ if (handler) handler(mouseEvent)
+}
+
+/**
+ * 注册任务行的拖拽悬停回调。
+ * 第一次注册时自动绑定全局 window 监听器。
+ */
+export function registerDragOver(taskId: number | string, handler: DragOverCallback): void {
+ const wasEmpty = _registry.size === 0
+ _registry.set(taskId, handler)
+ if (wasEmpty) {
+ window.addEventListener('task-row-drag-over', _handleGlobalDragOver)
+ }
+}
+
+/**
+ * 注销任务行的拖拽悬停回调。
+ * 最后一个注销时自动解绑全局 window 监听器。
+ */
+export function unregisterDragOver(taskId: number | string): void {
+ _registry.delete(taskId)
+ if (_registry.size === 0) {
+ window.removeEventListener('task-row-drag-over', _handleGlobalDragOver)
+ }
+}